From 2e43b7767721781355233b72439cb20b01b81a25 Mon Sep 17 00:00:00 2001
From: Roland Rosenfeld Privoxy ran out of memory while processing your request. Please contact your proxy administrator, or try again later Privoxy encountered an error while processing your request: Could not load template file Please contact your proxy administrator. If you are the proxy administrator, please put the required file(s)"
+ "in the Privoxy encountered an error while processing your request: Unexpected internal error: ";
+ static const char body_suffix[] =
+ " Please "
+ ""
+ "file a bug report.NAME
" > doc/webserver/man-page/privoxy-man-page.html
+ man ./privoxy.1 | $(MAN2HTML) -bare >> doc/webserver/man-page/privoxy-man-page.html
+ $(ECHO) "" >> doc/webserver/man-page/privoxy-man-page.html
+else
+ $(MAKE) groff2html
+endif
+
+# readme page
+dok-readme:
+ cd doc/source && $(DB) -V nochunks readme.sgml > tmp.html &&\
+ $(WDUMP) tmp.html > ../../README && $(RM) -r tmp.html
+
+# webserver files
+dok-webserver:
+ cd doc/source/webserver && $(DB)-notoc -V nochunks index.sgml > ../../webserver/index.html
+ $(PERL) -pi.bak -e 's/..\/p_doc.css/p_doc.css/;\
+ s/<\/HEAD/\n<\/HEAD/;\
+ s/<\/HEAD/\n<\/HEAD/;\
+ s/\.\d\. //'\
+ doc/webserver/index.html && $(RM) doc/source/webserver/*.bak
+
+# Main documentation target.
+dok: dok-release dok-devel dok-user dok-faq dok-readme dok-webserver dok-authors
+ @$(ECHO) Documentation created.
+
+#
+# an alternative to the above dok. disabled man page creation for the moment
+#
+redhat-dok: dok-release dok-devel dok-user dok-faq redhat-readme dok-webserver dok-authors
+ @$(ECHO) Documentation created.
+
+# For those with man2html ala RH7's.
+man2html:
+ mkdir -p doc/webserver/man-page
+ifneq ($(MAN2HTML),false)
+ $(MAN2HTML) privoxy.1 |grep -v "^Content-type" > tmp.html
+ $(PERL) -pi.bak -e 's///; s//man2html/' tmp.html
+ $(PERL) -pi.bak -e 's/(<\/HEAD>)/<\/HEAD>/' tmp.html
+# Get rid of spurious from conversion. (How to do this with perl?)
+ $(SED) -e 's///g' tmp.html > doc/webserver/man-page/privoxy-man-page.html && $(RM) tmp.*
+else
+ $(MAKE) groff2html
+endif
+
+# Otherwise we get plain groff conversion.
+groff2html:
+ $(G2H_CMD) ./privoxy.1 | $(SED) -e 's@@@' > doc/webserver/man-page/privoxy-man-page.html
+
+## Make README
+redhat-readme:
+ cd doc/source && $(DB) -V nochunks readme.sgml > tmp.html && $(WDUMP) \
+ tmp.html > ../../README && $(RM) -r tmp.html
+
+## Make AUTHORS file
+dok-authors:
+ cd doc/source && $(DB) -V nochunks authors.sgml > tmp.html && $(WDUMP) \
+ tmp.html > ../../AUTHORS && $(RM) tmp.html
+
+# make a man page, and then (lousy) HTML version.
+# Requires docbook2man (short perl script), see comments
+# in privoxy-man-page.sgml. This target is not invoked from other dok targets.
+# It is built separately due to dependencies on perl scripts.
+man:
+ mkdir -p doc/source/man
+ cd doc/source/man && docbook2man ../privoxy-man-page.sgml &&\
+ perl -pi.bak -e 's/
-", some "
-" (note the space).
+ * Standardizing on no space.
+ * - Greatly simplifying some of the code by using string_join()
+ * where appropriate.
+ *
+ * Revision 1.28 2002/04/26 12:53:15 oes
+ * - CGI AF editor now writes action lines split into
+ * single lines with line continuation
+ * - actions_to_html now embeds each action name in
+ * link to chapter
+ * - current_action_to_text is now called current_action_to_html
+ * and acts like actions_to_html
+ *
+ * Revision 1.27 2002/04/24 02:10:31 oes
+ * - Jon's patch for multiple AFs:
+ * - split load_actions_file, add load_one_actions_file
+ * - make csp->actions_list files an array
+ * - remember file id with each action
+ * - Copy_action now frees dest action before copying
+ *
+ * Revision 1.26 2002/03/26 22:29:54 swa
+ * we have a new homepage!
+ *
+ * Revision 1.25 2002/03/24 13:25:43 swa
+ * name change related issues
+ *
+ * Revision 1.24 2002/03/16 23:54:06 jongfoster
+ * Adding graceful termination feature, to help look for memory leaks.
+ * If you enable this (which, by design, has to be done by hand
+ * editing config.h) and then go to http://i.j.b/die, then the program
+ * will exit cleanly after the *next* request. It should free all the
+ * memory that was used.
+ *
+ * Revision 1.23 2002/03/07 03:46:16 oes
+ * Fixed compiler warnings
+ *
+ * Revision 1.22 2002/01/21 00:27:02 jongfoster
+ * Allowing free_action(NULL).
+ * Moving the functions that #include actionlist.h to the end of the file,
+ * because the Visual C++ 97 debugger gets extremely confused if you try
+ * to debug any code that comes after them in the file.
+ *
+ * Revision 1.21 2002/01/17 20:54:44 jongfoster
+ * Renaming free_url to free_url_spec, since it frees a struct url_spec.
+ *
+ * Revision 1.20 2001/11/22 21:56:49 jongfoster
+ * Making action_spec->flags into an unsigned long rather than just an
+ * unsigned int.
+ * Fixing a bug in the display of -add-header and -wafer
+ *
+ * Revision 1.19 2001/11/13 00:14:07 jongfoster
+ * Fixing stupid bug now I've figured out what || means.
+ * (It always returns 0 or 1, not one of it's paramaters.)
+ *
+ * Revision 1.18 2001/11/07 00:06:06 steudten
+ * Add line number in error output for lineparsing for
+ * actionsfile.
+ *
+ * Revision 1.17 2001/10/25 03:40:47 david__schmidt
+ * Change in porting tactics: OS/2's EMX porting layer doesn't allow multiple
+ * threads to call select() simultaneously. So, it's time to do a real, live,
+ * native OS/2 port. See defines for __EMX__ (the porting layer) vs. __OS2__
+ * (native). Both versions will work, but using __OS2__ offers multi-threading.
+ *
+ * Revision 1.16 2001/10/23 21:30:30 jongfoster
+ * Adding error-checking to selected functions.
+ *
+ * Revision 1.15 2001/10/14 21:58:22 jongfoster
+ * Adding support for the CGI-based editor:
+ * - Exported get_actions()
+ * - Added new function free_alias_list()
+ * - Added support for {{settings}} and {{description}} blocks
+ * in the actions file. They are currently ignored.
+ * - Added restriction to only one {{alias}} block which must appear
+ * first in the file, to simplify the editor's rewriting rules.
+ * - Note that load_actions_file() is no longer used by the CGI-based
+ * editor, but some of the other routines in this file are.
+ *
+ * Revision 1.14 2001/09/22 16:36:59 jongfoster
+ * Removing unused parameter fs from read_config_line()
+ *
+ * Revision 1.13 2001/09/16 15:47:37 jongfoster
+ * First version of CGI-based edit interface. This is very much a
+ * work-in-progress, and you can't actually use it to edit anything
+ * yet. You must #define FEATURE_CGI_EDIT_ACTIONS for these changes
+ * to have any effect.
+ *
+ * Revision 1.12 2001/09/16 13:21:27 jongfoster
+ * Changes to use new list functions.
+ *
+ * Revision 1.11 2001/09/14 00:17:32 jongfoster
+ * Tidying up memory allocation. New function init_action().
+ *
+ * Revision 1.10 2001/09/10 10:14:34 oes
+ * Removing unused variable
+ *
+ * Revision 1.9 2001/07/30 22:08:36 jongfoster
+ * Tidying up #defines:
+ * - All feature #defines are now of the form FEATURE_xxx
+ * - Permanently turned off WIN_GUI_EDIT
+ * - Permanently turned on WEBDAV and SPLIT_PROXY_ARGS
+ *
+ * Revision 1.8 2001/06/29 13:19:52 oes
+ * Removed logentry from cancelled commit
+ *
+ * Revision 1.7 2001/06/09 10:55:28 jongfoster
+ * Changing BUFSIZ ==> BUFFER_SIZE
+ *
+ * Revision 1.6 2001/06/07 23:04:34 jongfoster
+ * Made get_actions() static.
+ *
+ * Revision 1.5 2001/06/03 19:11:48 oes
+ * adapted to new enlist_unique arg format
+ *
+ * Revision 1.4 2001/06/01 20:03:42 jongfoster
+ * Better memory management - current_action->strings[] now
+ * contains copies of the strings, not the original.
+ *
+ * Revision 1.3 2001/06/01 18:49:17 jongfoster
+ * Replaced "list_share" with "list" - the tiny memory gain was not
+ * worth the extra complexity.
+ *
+ * Revision 1.2 2001/05/31 21:40:00 jongfoster
+ * Removing some commented out, obsolete blocks of code.
+ *
+ * Revision 1.1 2001/05/31 21:16:46 jongfoster
+ * Moved functions to process the action list into this new file.
+ *
+ *
+ *********************************************************************/
+
+
+#include "config.h"
+
+#include
-seperated HTML string
+ * in which each action is linked to its chapter in
+ * the user manual.
+ *
+ * Parameters :
+ * 1 : csp = Client state (for config)
+ * 2 : action = Action spec to be converted
+ *
+ * Returns : A string. Caller must free it.
+ * NULL on out-of-memory error.
+ *
+ *********************************************************************/
+char * actions_to_html(struct client_state *csp,
+ struct action_spec *action)
+{
+ unsigned mask = action->mask;
+ unsigned add = action->add;
+ char * result = strdup("");
+ struct list_entry * lst;
+
+ /* sanity - prevents "-feature +feature" */
+ mask |= add;
+
+
+#define DEFINE_ACTION_BOOL(__name, __bit) \
+ if (!(mask & __bit)) \
+ { \
+ string_append(&result, "\n
-"); \
+ string_join(&result, add_help_link(__name, csp->config)); \
+ } \
+ else if (add & __bit) \
+ { \
+ string_append(&result, "\n
+"); \
+ string_join(&result, add_help_link(__name, csp->config)); \
+ }
+
+#define DEFINE_ACTION_STRING(__name, __bit, __index) \
+ if (!(mask & __bit)) \
+ { \
+ string_append(&result, "\n
-"); \
+ string_join(&result, add_help_link(__name, csp->config)); \
+ } \
+ else if (add & __bit) \
+ { \
+ string_append(&result, "\n
+"); \
+ string_join(&result, add_help_link(__name, csp->config)); \
+ string_append(&result, "{"); \
+ string_join(&result, html_encode(action->string[__index])); \
+ string_append(&result, "}"); \
+ }
+
+#define DEFINE_ACTION_MULTI(__name, __index) \
+ if (action->multi_remove_all[__index]) \
+ { \
+ string_append(&result, "\n
-"); \
+ string_join(&result, add_help_link(__name, csp->config)); \
+ } \
+ else \
+ { \
+ lst = action->multi_remove[__index]->first; \
+ while (lst) \
+ { \
+ string_append(&result, "\n
-"); \
+ string_join(&result, add_help_link(__name, csp->config)); \
+ string_append(&result, "{"); \
+ string_join(&result, html_encode(lst->str)); \
+ string_append(&result, "}"); \
+ lst = lst->next; \
+ } \
+ } \
+ lst = action->multi_add[__index]->first; \
+ while (lst) \
+ { \
+ string_append(&result, "\n
+"); \
+ string_join(&result, add_help_link(__name, csp->config)); \
+ string_append(&result, "{"); \
+ string_join(&result, html_encode(lst->str)); \
+ string_append(&result, "}"); \
+ lst = lst->next; \
+ }
+
+#define DEFINE_ACTION_ALIAS 0 /* No aliases for output */
+
+#include "actionlist.h"
+
+#undef DEFINE_ACTION_MULTI
+#undef DEFINE_ACTION_STRING
+#undef DEFINE_ACTION_BOOL
+#undef DEFINE_ACTION_ALIAS
+
+ /* trim leading
*/
+ if (result && *result)
+ {
+ char * s = result;
+ result = strdup(result + 5);
+ free(s);
+ }
+
+ return result;
+}
+
+
+/*********************************************************************
+ *
+ * Function : current_actions_to_html
+ *
+ * Description : Converts a curren action spec to a
seperated HTML
+ * text in which each action is linked to its chapter in
+ * the user manual.
+ *
+ * Parameters :
+ * 1 : csp = Client state (for config)
+ * 2 : action = Current action spec to be converted
+ *
+ * Returns : A string. Caller must free it.
+ * NULL on out-of-memory error.
+ *
+ *********************************************************************/
+char *current_action_to_html(struct client_state *csp,
+ struct current_action_spec *action)
+{
+ unsigned long flags = action->flags;
+ char * result = strdup("");
+ struct list_entry * lst;
+
+#define DEFINE_ACTION_BOOL(__name, __bit) \
+ if (flags & __bit) \
+ { \
+ string_append(&result, "\n
+"); \
+ string_join(&result, add_help_link(__name, csp->config)); \
+ } \
+ else \
+ { \
+ string_append(&result, "\n
-"); \
+ string_join(&result, add_help_link(__name, csp->config)); \
+ }
+
+#define DEFINE_ACTION_STRING(__name, __bit, __index) \
+ if (flags & __bit) \
+ { \
+ string_append(&result, "\n
+"); \
+ string_join(&result, add_help_link(__name, csp->config)); \
+ string_append(&result, "{"); \
+ string_join(&result, html_encode(action->string[__index])); \
+ string_append(&result, "}"); \
+ } \
+ else \
+ { \
+ string_append(&result, "\n
-"); \
+ string_join(&result, add_help_link(__name, csp->config)); \
+ }
+
+#define DEFINE_ACTION_MULTI(__name, __index) \
+ lst = action->multi[__index]->first; \
+ if (lst == NULL) \
+ { \
+ string_append(&result, "\n
-"); \
+ string_join(&result, add_help_link(__name, csp->config)); \
+ } \
+ else \
+ { \
+ while (lst) \
+ { \
+ string_append(&result, "\n
+"); \
+ string_join(&result, add_help_link(__name, csp->config)); \
+ string_append(&result, "{"); \
+ string_join(&result, html_encode(lst->str)); \
+ string_append(&result, "}"); \
+ lst = lst->next; \
+ } \
+ }
+
+#define DEFINE_ACTION_ALIAS 0 /* No aliases for output */
+
+#include "actionlist.h"
+
+#undef DEFINE_ACTION_MULTI
+#undef DEFINE_ACTION_STRING
+#undef DEFINE_ACTION_BOOL
+#undef DEFINE_ACTION_ALIAS
+
+ return result;
+}
diff --git a/actions.h b/actions.h
new file mode 100644
index 00000000..f4365f0e
--- /dev/null
+++ b/actions.h
@@ -0,0 +1,158 @@
+#ifndef ACTIONS_H_INCLUDED
+#define ACTIONS_H_INCLUDED
+#define ACTIONS_H_VERSION "$Id: actions.h,v 1.11 2002/04/30 11:14:52 oes Exp $"
+/*********************************************************************
+ *
+ * File : $Source: /cvsroot/ijbswa/current/actions.h,v $
+ *
+ * Purpose : Declares functions to work with actions files
+ * Functions declared include: FIXME
+ *
+ * Copyright : Written by and Copyright (C) 2001 the SourceForge
+ * Privoxy team. http://www.privoxy.org/
+ *
+ * Based on the Internet Junkbuster originally written
+ * by and Copyright (C) 1997 Anonymous Coders and
+ * Junkbusters Corporation. http://www.junkbusters.com
+ *
+ * This program is free software; you can redistribute it
+ * and/or modify it under the terms of the GNU General
+ * Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at
+ * your option) any later version.
+ *
+ * This program is distributed in the hope that it will
+ * be useful, but WITHOUT ANY WARRANTY; without even the
+ * implied warranty of MERCHANTABILITY or FITNESS FOR A
+ * PARTICULAR PURPOSE. See the GNU General Public
+ * License for more details.
+ *
+ * The GNU General Public License should be included with
+ * this file. If not, you can view it at
+ * http://www.gnu.org/copyleft/gpl.html
+ * or write to the Free Software Foundation, Inc., 59
+ * Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ * Revisions :
+ * $Log: actions.h,v $
+ * Revision 1.11 2002/04/30 11:14:52 oes
+ * Made csp the first parameter in *action_to_html
+ *
+ * Revision 1.10 2002/04/26 12:53:33 oes
+ * - actions_to_html signature change
+ * - current_action_to_text: renamed to current_action_to_html
+ * and signature change
+ *
+ * Revision 1.9 2002/03/26 22:29:54 swa
+ * we have a new homepage!
+ *
+ * Revision 1.8 2002/03/24 13:25:43 swa
+ * name change related issues
+ *
+ * Revision 1.7 2002/03/16 23:54:06 jongfoster
+ * Adding graceful termination feature, to help look for memory leaks.
+ * If you enable this (which, by design, has to be done by hand
+ * editing config.h) and then go to http://i.j.b/die, then the program
+ * will exit cleanly after the *next* request. It should free all the
+ * memory that was used.
+ *
+ * Revision 1.6 2001/10/23 21:30:30 jongfoster
+ * Adding error-checking to selected functions.
+ *
+ * Revision 1.5 2001/10/14 21:58:22 jongfoster
+ * Adding support for the CGI-based editor:
+ * - Exported get_actions()
+ * - Added new function free_alias_list()
+ * - Added support for {{settings}} and {{description}} blocks
+ * in the actions file. They are currently ignored.
+ * - Added restriction to only one {{alias}} block which must appear
+ * first in the file, to simplify the editor's rewriting rules.
+ * - Note that load_actions_file() is no longer used by the CGI-based
+ * editor, but some of the other routines in this file are.
+ *
+ * Revision 1.4 2001/09/16 15:47:37 jongfoster
+ * First version of CGI-based edit interface. This is very much a
+ * work-in-progress, and you can't actually use it to edit anything
+ * yet. You must #define FEATURE_CGI_EDIT_ACTIONS for these changes
+ * to have any effect.
+ *
+ * Revision 1.3 2001/09/14 00:17:32 jongfoster
+ * Tidying up memory allocation. New function init_action().
+ *
+ * Revision 1.2 2001/07/29 19:01:11 jongfoster
+ * Changed _FILENAME_H to FILENAME_H_INCLUDED.
+ * Added forward declarations for needed structures.
+ *
+ * Revision 1.1 2001/05/31 21:16:46 jongfoster
+ * Moved functions to process the action list into this new file.
+ *
+ *
+ *********************************************************************/
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+struct action_spec;
+struct current_action_spec;
+struct client_state;
+
+
+
+/* This structure is used to hold user-defined aliases */
+struct action_alias
+{
+ const char * name;
+ struct action_spec action[1];
+ struct action_alias * next;
+};
+
+
+extern jb_err get_actions (char *line,
+ struct action_alias * alias_list,
+ struct action_spec *cur_action);
+extern void free_alias_list(struct action_alias *alias_list);
+
+extern void init_action(struct action_spec *dest);
+extern void free_action(struct action_spec *src);
+extern jb_err merge_actions (struct action_spec *dest,
+ const struct action_spec *src);
+extern jb_err copy_action (struct action_spec *dest,
+ const struct action_spec *src);
+extern char * actions_to_text (struct action_spec *action);
+extern char * actions_to_html (struct client_state *csp,
+ struct action_spec *action);
+extern void init_current_action (struct current_action_spec *dest);
+extern void free_current_action (struct current_action_spec *src);
+extern jb_err merge_current_action (struct current_action_spec *dest,
+ const struct action_spec *src);
+extern char * current_action_to_html(struct client_state *csp,
+ struct current_action_spec *action);
+
+extern jb_err get_action_token(char **line, char **name, char **value);
+extern void unload_actions_file(void *file_data);
+extern int load_actions_file(struct client_state *csp);
+
+#ifdef FEATURE_GRACEFUL_TERMINATION
+void unload_current_actions_file(void);
+#endif
+
+
+/* Revision control strings from this header and associated .c file */
+extern const char actions_rcs[];
+extern const char actions_h_rcs[];
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /* ndef ACTIONS_H_INCLUDED */
+
+/*
+ Local Variables:
+ tab-width: 3
+ end:
+*/
+
diff --git a/amiga.c b/amiga.c
index cd228986..493a00eb 100644
--- a/amiga.c
+++ b/amiga.c
@@ -1,12 +1,12 @@
-const char amiga_rcs[] = "$Id: amiga.c,v 1.1 2001/05/13 21:57:06 administrator Exp $";
+const char amiga_rcs[] = "$Id: amiga.c,v 1.8 2002/03/25 19:32:15 joergs Exp $";
/*********************************************************************
*
- * File : $Source: /home/administrator/cvs/ijb/jcc.c,v $
+ * File : $Source: /cvsroot/ijbswa/current/amiga.c,v $
*
* Purpose : Amiga-specific declarations.
*
* Copyright : Written by and Copyright (C) 2001 the SourceForge
- * IJBSWA team. http://ijbswa.sourceforge.net
+ * Privoxy team. http://www.privoxy.org/
*
* This program is free software; you can redistribute it
* and/or modify it under the terms of the GNU General
@@ -27,7 +27,52 @@ const char amiga_rcs[] = "$Id: amiga.c,v 1.1 2001/05/13 21:57:06 administrator E
* Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*
* Revisions :
- * $Log: jcc.c,v $
+ * $Log: amiga.c,v $
+ * Revision 1.8 2002/03/25 19:32:15 joergs
+ * Name in version string changed from junkbuster to Privoxy.
+ *
+ * Revision 1.7 2002/03/24 13:25:43 swa
+ * name change related issues
+ *
+ * Revision 1.6 2002/03/09 20:03:52 jongfoster
+ * - Making various functions return int rather than size_t.
+ * (Undoing a recent change). Since size_t is unsigned on
+ * Windows, functions like read_socket that return -1 on
+ * error cannot return a size_t.
+ *
+ * THIS WAS A MAJOR BUG - it caused frequent, unpredictable
+ * crashes, and also frequently caused JB to jump to 100%
+ * CPU and stay there. (Because it thought it had just
+ * read ((unsigned)-1) == 4Gb of data...)
+ *
+ * - The signature of write_socket has changed, it now simply
+ * returns success=0/failure=nonzero.
+ *
+ * - Trying to get rid of a few warnings --with-debug on
+ * Windows, I've introduced a new type "jb_socket". This is
+ * used for the socket file descriptors. On Windows, this
+ * is SOCKET (a typedef for unsigned). Everywhere else, it's
+ * an int. The error value can't be -1 any more, so it's
+ * now JB_INVALID_SOCKET (which is -1 on UNIX, and in
+ * Windows it maps to the #define INVALID_SOCKET.)
+ *
+ * - The signature of bind_port has changed.
+ *
+ * Revision 1.5 2002/03/03 09:18:03 joergs
+ * Made jumbjuster work on AmigaOS again.
+ *
+ * Revision 1.4 2001/10/07 15:35:13 oes
+ * Replaced 6 boolean members of csp with one bitmap (csp->flags)
+ *
+ * Revision 1.3 2001/09/12 22:54:51 joergs
+ * Stacksize of main thread increased.
+ *
+ * Revision 1.2 2001/05/23 00:13:58 joergs
+ * AmigaOS support fixed.
+ *
+ * Revision 1.1.1.1 2001/05/15 13:58:46 oes
+ * Initial import of version 2.9.3 source tree
+ *
*
*********************************************************************/
@@ -39,12 +84,12 @@ const char amiga_rcs[] = "$Id: amiga.c,v 1.1 2001/05/13 21:57:06 administrator E
#include 500 Internal Privoxy Error
\r\n"
+ "500 Internal Privoxy Error
\r\n"
+ "";
+ static const char body_suffix[] =
+ " or one of it's included components.(confdir)/templates directory. The "
+ "location of the (confdir) directory "
+ "is specified in the main Privoxy config "
+ "file. (It's typically the Privoxy install directory"
+#ifndef _WIN32
+ ", or /etc/privoxy/"
+#endif /* ndef _WIN32 */
+ ").500 Internal Privoxy Error
\r\n"
+ "\n");
+
+ for (cur_entry = the_map->first;
+ (cur_entry != NULL) && (ret != NULL);
+ cur_entry = cur_entry->next)
+ {
+ string_append(&ret, "
\n");
+ return ret;
+}
+
+
+/*
+ Local Variables:
+ tab-width: 3
+ end:
+*/
diff --git a/cgi.h b/cgi.h
new file mode 100644
index 00000000..39c6938d
--- /dev/null
+++ b/cgi.h
@@ -0,0 +1,245 @@
+#ifndef CGI_H_INCLUDED
+#define CGI_H_INCLUDED
+#define CGI_H_VERSION "$Id: cgi.h,v 1.28 2002/04/26 12:54:03 oes Exp $"
+/*********************************************************************
+ *
+ * File : $Source: /cvsroot/ijbswa/current/cgi.h,v $
+ *
+ * Purpose : Declares functions to intercept request, generate
+ * html or gif answers, and to compose HTTP resonses.
+ *
+ * Functions declared include:
+ *
+ *
+ * Copyright : Written by and Copyright (C) 2001 the SourceForge
+ * Privoxy team. http://www.privoxy.org/
+ *
+ * Based on the Internet Junkbuster originally written
+ * by and Copyright (C) 1997 Anonymous Coders and
+ * Junkbusters Corporation. http://www.junkbusters.com
+ *
+ * This program is free software; you can redistribute it
+ * and/or modify it under the terms of the GNU General
+ * Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at
+ * your option) any later version.
+ *
+ * This program is distributed in the hope that it will
+ * be useful, but WITHOUT ANY WARRANTY; without even the
+ * implied warranty of MERCHANTABILITY or FITNESS FOR A
+ * PARTICULAR PURPOSE. See the GNU General Public
+ * License for more details.
+ *
+ * The GNU General Public License should be included with
+ * this file. If not, you can view it at
+ * http://www.gnu.org/copyleft/gpl.html
+ * or write to the Free Software Foundation, Inc., 59
+ * Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ * Revisions :
+ * $Log: cgi.h,v $
+ * Revision 1.28 2002/04/26 12:54:03 oes
+ * New function add_help_link
+ *
+ * Revision 1.27 2002/04/24 02:16:51 oes
+ * Moved get_char_param, get_string_param and get_number_param here from cgiedit.c
+ *
+ * Revision 1.26 2002/04/10 13:38:35 oes
+ * load_template signature changed
+ *
+ * Revision 1.25 2002/04/08 20:50:25 swa
+ * fixed JB spelling
+ *
+ * Revision 1.24 2002/03/26 22:29:54 swa
+ * we have a new homepage!
+ *
+ * Revision 1.23 2002/03/24 16:18:15 jongfoster
+ * Removing old logo
+ *
+ * Revision 1.22 2002/03/24 13:25:43 swa
+ * name change related issues
+ *
+ * Revision 1.21 2002/03/07 03:48:38 oes
+ * - Changed built-in images from GIF to PNG
+ * (with regard to Unisys patent issue)
+ * - Added a 4x4 pattern PNG which is less intrusive
+ * than the logo but also clearly marks the deleted banners
+ *
+ * Revision 1.20 2002/03/04 17:53:22 oes
+ * Fixed compiled warning
+ *
+ * Revision 1.19 2002/01/21 00:33:52 jongfoster
+ * Adding map_block_keep() to save a few bytes in the edit-actions-list HTML.
+ *
+ * Revision 1.18 2001/11/16 00:46:31 jongfoster
+ * Fixing compiler warnings
+ *
+ * Revision 1.17 2001/10/23 21:48:19 jongfoster
+ * Cleaning up error handling in CGI functions - they now send back
+ * a HTML error page and should never cause a FATAL error. (Fixes one
+ * potential source of "denial of service" attacks).
+ *
+ * CGI actions file editor that works and is actually useful.
+ *
+ * Ability to toggle Junkbuster remotely using a CGI call.
+ *
+ * You can turn off both the above features in the main configuration
+ * file, e.g. if you are running a multi-user proxy.
+ *
+ * Revision 1.16 2001/09/16 17:08:54 jongfoster
+ * Moving simple CGI functions from cgi.c to new file cgisimple.c
+ *
+ * Revision 1.15 2001/09/16 15:02:35 jongfoster
+ * Adding i.j.b/robots.txt.
+ * Inlining add_stats() since it's only ever called from one place.
+ *
+ * Revision 1.14 2001/09/16 11:38:02 jongfoster
+ * Splitting fill_template() into 2 functions:
+ * template_load() loads the file
+ * template_fill() performs the PCRS regexps.
+ * This is because the CGI edit interface has a "table row"
+ * template which is used many times in the page - this
+ * change means it's only loaded from disk once.
+ *
+ * Revision 1.13 2001/09/16 11:00:10 jongfoster
+ * New function alloc_http_response, for symmetry with free_http_response
+ *
+ * Revision 1.12 2001/09/13 23:31:25 jongfoster
+ * Moving image data to cgi.c rather than cgi.h.
+ *
+ * Revision 1.11 2001/08/05 16:06:20 jongfoster
+ * Modifiying "struct map" so that there are now separate header and
+ * "map_entry" structures. This means that functions which modify a
+ * map no longer need to return a pointer to the modified map.
+ * Also, it no longer reverses the order of the entries (which may be
+ * important with some advanced template substitutions).
+ *
+ * Revision 1.10 2001/08/01 21:19:22 jongfoster
+ * Moving file version information to a separate CGI page.
+ *
+ * Revision 1.9 2001/08/01 00:17:54 jongfoster
+ * Adding prototype for map_conditional
+ *
+ * Revision 1.8 2001/07/30 22:08:36 jongfoster
+ * Tidying up #defines:
+ * - All feature #defines are now of the form FEATURE_xxx
+ * - Permanently turned off WIN_GUI_EDIT
+ * - Permanently turned on WEBDAV and SPLIT_PROXY_ARGS
+ *
+ * Revision 1.7 2001/07/29 18:43:08 jongfoster
+ * Changing #ifdef _FILENAME_H to FILENAME_H_INCLUDED, to conform to
+ * ANSI C rules.
+ *
+ * Revision 1.6 2001/06/29 21:45:41 oes
+ * Indentation, CRLF->LF, Tab-> Space
+ *
+ * Revision 1.5 2001/06/29 13:22:44 oes
+ * - Cleaned up
+ * - Added new functions: default_exports(), make_menu(),
+ * error_response() etc, ranamed others and changed
+ * param and return types.
+ * - Removed HTTP/HTML snipplets
+ * - Removed logentry from cancelled commit
+ *
+ * Revision 1.4 2001/06/09 10:50:58 jongfoster
+ * Changing "show URL info" handler to new style.
+ * Adding "extern" to some function prototypes.
+ *
+ * Revision 1.3 2001/06/03 19:12:16 oes
+ * introduced new cgi handling
+ *
+ * No revisions before 1.3
+ *
+ **********************************************************************/
+
+
+#include "project.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ * Main dispatch function
+ */
+extern struct http_response *dispatch_cgi(struct client_state *csp);
+
+/* Not exactly a CGI */
+extern struct http_response * error_response(struct client_state *csp,
+ const char *templatename,
+ int err);
+
+/*
+ * CGI support functions
+ */
+extern struct http_response * alloc_http_response(void);
+extern void free_http_response(struct http_response *rsp);
+
+extern struct http_response *finish_http_response(struct http_response *rsp);
+
+extern struct map * default_exports(const struct client_state *csp, const char *caller);
+
+extern jb_err map_block_killer (struct map *exports, const char *name);
+extern jb_err map_block_keep (struct map *exports, const char *name);
+extern jb_err map_conditional (struct map *exports, const char *name, int choose_first);
+
+extern jb_err template_load(struct client_state *csp, char ** template_ptr,
+ const char *templatename, int recursive);
+extern jb_err template_fill(char ** template_ptr, const struct map *exports);
+extern jb_err template_fill_for_cgi(struct client_state *csp,
+ const char *templatename,
+ struct map *exports,
+ struct http_response *rsp);
+
+extern void cgi_init_error_messages(void);
+extern struct http_response *cgi_error_memory(void);
+extern jb_err cgi_error_no_template(struct client_state *csp,
+ struct http_response *rsp,
+ const char *template_name);
+extern jb_err cgi_error_bad_param(struct client_state *csp,
+ struct http_response *rsp);
+jb_err cgi_error_unknown(struct client_state *csp,
+ struct http_response *rsp,
+ jb_err error_to_report);
+
+extern jb_err get_number_param(struct client_state *csp,
+ const struct map *parameters,
+ char *name,
+ unsigned *pvalue);
+extern jb_err get_string_param(const struct map *parameters,
+ const char *param_name,
+ const char **pparam);
+extern char get_char_param(const struct map *parameters,
+ const char *param_name);
+
+/*
+ * Text generators
+ */
+extern void get_http_time(int time_offset, char * buf);
+extern char *add_help_link(const char *item, struct configuration_spec *config);
+extern char *make_menu(const char *self);
+extern char *dump_map(const struct map *the_map);
+
+/*
+ * Ad replacement images
+ */
+extern const char image_pattern_data[];
+extern const size_t image_pattern_length;
+extern const char image_blank_data[];
+extern const size_t image_blank_length;
+
+/* Revision control strings from this header and associated .c file */
+extern const char cgi_rcs[];
+extern const char cgi_h_rcs[];
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /* ndef CGI_H_INCLUDED */
+
+/*
+ Local Variables:
+ tab-width: 3
+ end:
+*/
diff --git a/cgiedit.c b/cgiedit.c
new file mode 100644
index 00000000..0f0e46d3
--- /dev/null
+++ b/cgiedit.c
@@ -0,0 +1,4710 @@
+const char cgiedit_rcs[] = "$Id: cgiedit.c,v 1.40 2002/05/19 11:34:35 jongfoster Exp $";
+/*********************************************************************
+ *
+ * File : $Source: /cvsroot/ijbswa/current/cgiedit.c,v $
+ *
+ * Purpose : CGI-based actionsfile editor.
+ *
+ * Functions declared include: cgi_edit_*
+ *
+ * NOTE: The CGIs in this file use parameter names
+ * such as "f" and "s" which are really *BAD* choices.
+ * However, I'm trying to save bytes in the
+ * edit-actions-list HTML page - the standard actions
+ * file generated a 550kbyte page, which is ridiculous.
+ *
+ * Stick to the short names in this file for consistency.
+ *
+ * Copyright : Written by and Copyright (C) 2001 the SourceForge
+ * Privoxy team. http://www.privoxy.org/
+ *
+ * Based on the Internet Junkbuster originally written
+ * by and Copyright (C) 1997 Anonymous Coders and
+ * Junkbusters Corporation. http://www.junkbusters.com
+ *
+ * This program is free software; you can redistribute it
+ * and/or modify it under the terms of the GNU General
+ * Public License as published by the Free Software
+ * Foundation; either version 2 of the License, or (at
+ * your option) any later version.
+ *
+ * This program is distributed in the hope that it will
+ * be useful, but WITHOUT ANY WARRANTY; without even the
+ * implied warranty of MERCHANTABILITY or FITNESS FOR A
+ * PARTICULAR PURPOSE. See the GNU General Public
+ * License for more details.
+ *
+ * The GNU General Public License should be included with
+ * this file. If not, you can view it at
+ * http://www.gnu.org/copyleft/gpl.html
+ * or write to the Free Software Foundation, Inc., 59
+ * Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ * Revisions :
+ * $Log: cgiedit.c,v $
+ * Revision 1.40 2002/05/19 11:34:35 jongfoster
+ * Handling read-only actions files better - report the actual
+ * error, not "Out of memory"!
+ *
+ * Bug report:
+ * http://sourceforge.net/tracker/index.php?func=detail
+ * &aid=557905&group_id=11118&atid=111118
+ *
+ * Revision 1.39 2002/05/12 21:39:15 jongfoster
+ * - Adding Doxygen-style comments to structures and #defines.
+ * - Correcting function comments
+ *
+ * Revision 1.38 2002/05/03 23:00:38 jongfoster
+ * Support for templates for "standard actions" buttons.
+ * See bug #549871
+ *
+ * Revision 1.37 2002/04/30 11:14:52 oes
+ * Made csp the first parameter in *action_to_html
+ *
+ * Revision 1.36 2002/04/26 21:53:30 jongfoster
+ * Fixing a memory leak. (Near, but not caused by, my earlier commit).
+ *
+ * Revision 1.35 2002/04/26 21:50:02 jongfoster
+ * Honouring default exports in edit-actions-for-url-filter template.
+ *
+ * Revision 1.34 2002/04/26 12:54:17 oes
+ * Adaptions to changes in actions.c
+ *
+ * Revision 1.33 2002/04/24 02:17:47 oes
+ * - Moved get_char_param, get_string_param and get_number_param to cgi.c
+ * - Comments
+ * - Activated Jon's code for editing multiple AFs
+ * - cgi_edit_list_actions now provides context-sensitive
+ * help, looks up all action sets from standard.action and
+ * makes buttons for them in the catchall section
+ * - cgi_edit_action_submit now honors a p parameter, looks up
+ * the corresponding action set, and sets the catchall pattern's
+ * actions accordingly.
+ *
+ * Revision 1.32 2002/04/19 16:55:31 jongfoster
+ * Fixing newline problems. If we do our own text file newline
+ * mangling, we don't want the library to do any, so we need to
+ * open the files in *binary* mode.
+ *
+ * Revision 1.31 2002/04/18 19:21:08 jongfoster
+ * Added code to detect "conventional" action files, that start
+ * with a set of actions for all URLs (the pattern "/").
+ * These are special-cased in the "edit-actions-list" CGI, so
+ * that a special UI can be written for them.
+ *
+ * Revision 1.30 2002/04/10 13:38:35 oes
+ * load_template signature changed
+ *
+ * Revision 1.29 2002/04/08 16:59:08 oes
+ * Fixed comment
+ *
+ * Revision 1.28 2002/03/27 12:30:29 oes
+ * Deleted unsused variable
+ *
+ * Revision 1.27 2002/03/26 23:06:04 jongfoster
+ * Removing duplicate @ifs on the toggle page
+ *
+ * Revision 1.26 2002/03/26 22:59:17 jongfoster
+ * Fixing /toggle to display status consistently.
+ *
+ * Revision 1.25 2002/03/26 22:29:54 swa
+ * we have a new homepage!
+ *
+ * Revision 1.24 2002/03/24 15:23:33 jongfoster
+ * Name changes
+ *
+ * Revision 1.23 2002/03/24 13:32:41 swa
+ * name change related issues
+ *
+ * Revision 1.22 2002/03/24 13:25:43 swa
+ * name change related issues
+ *
+ * Revision 1.21 2002/03/22 18:02:48 jongfoster
+ * Fixing remote toggle
+ *
+ * Revision 1.20 2002/03/16 20:28:34 oes
+ * Added descriptions to the filters so users will know what they select in the cgi editor
+ *
+ * Revision 1.19 2002/03/16 18:38:14 jongfoster
+ * Stopping stupid or malicious users from breaking the actions
+ * file using the web-based editor.
+ *
+ * Revision 1.18 2002/03/16 14:57:44 jongfoster
+ * Full support for enabling/disabling modular filters.
+ *
+ * Revision 1.17 2002/03/16 14:26:42 jongfoster
+ * First version of modular filters support - READ ONLY!
+ * Fixing a double-free bug in the out-of-memory handling in map_radio().
+ *
+ * Revision 1.16 2002/03/07 03:46:17 oes
+ * Fixed compiler warnings
+ *
+ * Revision 1.15 2002/03/06 22:54:35 jongfoster
+ * Automated function-comment nitpicking.
+ *
+ * Revision 1.14 2002/03/05 00:24:51 jongfoster
+ * Patch to always edit the current actions file.
+ *
+ * Revision 1.13 2002/03/04 02:07:59 david__schmidt
+ * Enable web editing of actions file on OS/2 (it had been broken all this time!)
+ *
+ * Revision 1.12 2002/03/03 09:18:03 joergs
+ * Made jumbjuster work on AmigaOS again.
+ *
+ * Revision 1.11 2002/01/23 01:03:31 jongfoster
+ * Fixing gcc [CygWin] compiler warnings
+ *
+ * Revision 1.10 2002/01/23 00:22:59 jongfoster
+ * Adding new function cgi_edit_actions_section_swap(), to reorder
+ * the actions file.
+ *
+ * Adding get_url_spec_param() to get a validated URL pattern.
+ *
+ * Moving edit_read_line() out of this file and into loaders.c.
+ *
+ * Adding missing html_encode() to many CGI functions.
+ *
+ * Moving the functions that #include actionlist.h to the end of the file,
+ * because the Visual C++ 97 debugger gets extremely confused if you try
+ * to debug any code that comes after them in the file.
+ *
+ * Major optimizations in cgi_edit_actions_list() to reduce the size of
+ * the generated HTML (down 40% from 550k to 304k), with major side-effects
+ * throughout the editor and templates. In particular, the length of the
+ * URLs throughout the editor has been drastically reduced, by cutting
+ * paramater names down to 1 character and CGI names down to 3-4
+ * characters, by removing all non-essential CGI paramaters even at the
+ * expense of having to re-read the actions file for the most trivial
+ * page, and by using relative rather than absolute URLs. This means
+ * that this (typical example):
+ *
+ *
+ *
+ * is now this:
+ *
+ *
+ *
+ * Revision 1.9 2002/01/17 20:56:22 jongfoster
+ * Replacing hard references to the URL of the config interface
+ * with #defines from project.h
+ *
+ * Revision 1.8 2001/11/30 23:35:51 jongfoster
+ * Renaming actionsfile to ijb.action
+ *
+ * Revision 1.7 2001/11/13 00:28:24 jongfoster
+ * - Renaming parameters from edit-actions-for-url so that they only
+ * contain legal JavaScript characters. If we wanted to write
+ * JavaScript that worked with Netscape 4, this is nessacery.
+ * (Note that at the moment the JavaScript doesn't actually work
+ * with Netscape 4, but now this is purely a template issue, not
+ * one affecting code).
+ * - Adding new CGIs for use by non-JavaScript browsers:
+ * edit-actions-url-form
+ * edit-actions-add-url-form
+ * edit-actions-remove-url-form
+ * - Fixing || bug.
+ *
+ * Revision 1.6 2001/10/29 03:48:09 david__schmidt
+ * OS/2 native needed a snprintf() routine. Added one to miscutil, brackedted
+ * by and __OS2__ ifdef.
+ *
+ * Revision 1.5 2001/10/25 03:40:48 david__schmidt
+ * Change in porting tactics: OS/2's EMX porting layer doesn't allow multiple
+ * threads to call select() simultaneously. So, it's time to do a real, live,
+ * native OS/2 port. See defines for __EMX__ (the porting layer) vs. __OS2__
+ * (native). Both versions will work, but using __OS2__ offers multi-threading.
+ *
+ * Revision 1.4 2001/10/23 21:48:19 jongfoster
+ * Cleaning up error handling in CGI functions - they now send back
+ * a HTML error page and should never cause a FATAL error. (Fixes one
+ * potential source of "denial of service" attacks).
+ *
+ * CGI actions file editor that works and is actually useful.
+ *
+ * Ability to toggle JunkBuster remotely using a CGI call.
+ *
+ * You can turn off both the above features in the main configuration
+ * file, e.g. if you are running a multi-user proxy.
+ *
+ * Revision 1.3 2001/10/14 22:12:49 jongfoster
+ * New version of CGI-based actionsfile editor.
+ * Major changes, including:
+ * - Completely new file parser and file output routines
+ * - edit-actions CGI renamed edit-actions-for-url
+ * - All CGIs now need a filename parameter, except for...
+ * - New CGI edit-actions which doesn't need a filename,
+ * to allow you to start the editor up.
+ * - edit-actions-submit now works, and now automatically
+ * redirects you back to the main edit-actions-list handler.
+ *
+ * Revision 1.2 2001/09/16 17:05:14 jongfoster
+ * Removing unused #include showarg.h
+ *
+ * Revision 1.1 2001/09/16 15:47:37 jongfoster
+ * First version of CGI-based edit interface. This is very much a
+ * work-in-progress, and you can't actually use it to edit anything
+ * yet. You must #define FEATURE_CGI_EDIT_ACTIONS for these changes
+ * to have any effect.
+ *
+ *
+ **********************************************************************/
+
+
+#include "config.h"
+
+/*
+ * FIXME: Following includes copied from cgi.c - which are actually needed?
+ */
+
+#include \n");
+ }
+
+ string_append(&ret, "");
+ string_join (&ret, html_encode(cur_entry->name));
+ string_append(&ret, " ");
+ string_join (&ret, html_encode(cur_entry->value));
+ string_append(&ret, "
-If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. -
-To do so, -attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. -
-<one line -to give the program's name and a brief idea of what it -does.> -Copyright (C) 19yy -<name of -author> ---This program is free software; -you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2 of the License, or -(at your option) any later version. -
-This program -is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. -
-You should -have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -
-Also add -information on how to contact you by electronic and paper mail. -
-If the program is interactive, -make it output a short notice like this -when it starts in an interactive mode: -
-Gnomovision version 69, Copyright (C) 19yy name of author -Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. -This is free software, and you are welcome to redistribute it -under certain conditions; type `show c' for details. --
-The hypothetical -commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, the commands you use may -be called something other than `show w' and `show c'; they could even be -mouse-clicks or menu items--whatever suits your program. -
-You should also get your employer -(if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the program, if -necessary. Here is a sample; alter the names: -
-Yoyodyne, Inc., hereby disclaims all copyright interest in the program -`Gnomovision' (which makes passes at compilers) written by James Hacker. - -<signature -of -Ty Coon>, -1 April 1989 --
-Ty Coon, President of Vice -
-This General Public License -does not permit incorporating your program into -proprietary programs. If your program is a subroutine library, you may -consider it more useful to permit linking proprietary applications with the -library. If this is what you want to do, use the GNU Library General -Public License instead of this License. -
- - -Home - · -Next - - · Site Map - - · Legal - - · Privacy - - · Cookies - - · Banner Ads - - · Telemarketing - - · Mail - - · Spam - - - - --Copyright © 1996-8 Junkbusters -® Corporation. -Copying and distribution permitted under -the GNU -General Public License. - - -1998/10/31 -http://www.junkbusters.com/ht/en/gpl.html - -
webmaster@junkbusters.com - - + ++ Website · + Manual · + FAQ · GPL
+ +Development of Junkbuster is ongoing and this document is + no longer current. However, it may provide some assistance. If + you have problems, please use the Yahoo Groups + mailing list (which includes an archive of mail), the + SourceForge.net project page, or + see the project's home + page. Please also bear in mind that versions 2.9.x of + Junkbuster are development releases, and are not production + quality.
+ +We did not write the GPL: + the Free Software + Foundation did
+ +The Free Software Foundation (FSF) is a non-profit + institution that designed the GNU General Public License (GPL) + to promote the publication of free software. The GPL is used by + thousands of programmers who want to give others the right to + copy and modify the source code of their programs. Millions of + people benefit from this.
+ +We use the GPL to allow everyone to + use, copy and modify the Internet Junkbuster as they wish. Companies can use it for commercial + purposes, but they are not permitted to use it in products + that they claim as their property.
+ +The GPL can also be used on documents + written in human languages. This documentation for the Internet + Junkbuster is also under the GPL. This means that you do not + have to break copyright laws in order to print a page or email + a screen of the text to someone, for example.
+ +The remainder of this page is the text of + the GPL. As legal documents go it's relatively clear, but + unfortunately it's fairly long because it has to cover a lot of + details. The HTML formatting is ours, and should not be + misinterpreted as changing the license in any way.
+ + + ++ Copyright 1989, 1991+ Everyone + +
+ Free Software Foundation, Inc.
+ 675 Mass Ave.
+ Cambridge, MA 02139
+ USA +
is permitted to copy and distribute verbatim copies of this + license document, but changing it is not allowed.
+ +The licenses for most software are designed to take away + your freedom to share and change it. By contrast, the GNU + General Public License is intended to guarantee your freedom to + share and change free software--to make sure the software is + free for all its users. This General Public License applies to + most of the Free Software Foundation's software and to any + other program whose authors commit to using it. (Some other + Free Software Foundation software is covered by the GNU Library + General Public License instead.) You can apply it to your + programs, too.
+ +When we speak of free software, we are + referring to freedom, not price. Our General Public Licenses + are designed to make sure that you have the freedom to + distribute copies of free software (and charge for this service + if you wish), that you receive source code or can get it if you + want it, that you can change the software or use pieces of it + in new free programs; and that you know you can do these + things.
+ +To protect your rights, we need to make + restrictions that forbid anyone to deny you these rights or to + ask you to surrender the rights. These restrictions translate + to certain responsibilities for you if you distribute copies of + the software, or if you modify it.
+ +For example, if you distribute + copies of such a program, whether gratis or for a fee, you must + give the recipients all the rights that you have. You must make + sure that they, too, receive or can get the source code. And + you must show them these terms so they know their rights.
+ +We protect your rights with two steps: + (1) copyright the software, and (2) offer you this license + which gives you legal permission to copy, distribute and/or + modify the software.
+ +Also, for each author's protection + and ours, we want to make certain that everyone understands + that there is no warranty for this free software. If the + software is modified by someone else and passed on, we want its + recipients to know that what they have is not the original, so + that any problems introduced by others will not reflect on the + original authors' reputations.
+ +Finally, any free program is threatened + constantly by software patents. We wish to avoid the danger + that redistributors of a free program will individually obtain + patent licenses, in effect making the program proprietary. To + prevent this, we have made it clear that any patent must be + licensed for everyone's free use or not licensed at all.
+ +The precise terms and conditions for + copying, distribution and modification follow.
+ +O. This License applies to any program + or other work which contains a notice placed by the copyright + holder saying it may be distributed under the terms of this + General Public License. The "Program", below, refers to any + such program or work, and a "work based on the Program" means + either the Program or any derivative work under copyright law: + that is to say, a work containing the Program or a portion of + it, either verbatim or with modifications and/or translated + into another language. (Hereinafter, translation is included + without limitation in the term "modification".) Each licensee + is addressed as "you".
+ +Activities other than copying, + distribution and modification are not covered by this License; + they are outside its scope. The act of running the Program is + not restricted, and the output from the Program is covered only + if its contents constitute a work based on the Program + (independent of having been made by running the Program).
+ +Whether that is true depends on what the
+ Program does.
+
You may charge a fee for the physical + act of transferring a copy, and you may at your option + offer warranty protection in exchange for a fee.
+These requirements apply to the + modified work as a whole. If identifiable sections of that + work are not derived from the Program, and can be + reasonably considered independent and separate works in + themselves, then this License, and its terms, do not apply + to those sections when you distribute them as separate + works. But when you distribute the same sections as part of + a whole which is a work based on the Program, the + distribution of the whole must be on the terms of this + License, whose permissions for other licensees extend to + the entire whole, and thus to each and every part + regardless of who wrote it.
+ +Thus, it is not the intent of this + section to claim rights or contest your rights to work + written entirely by you; rather, the intent is to exercise + the right to control the distribution of derivative or + collective works based on the Program.
+ +In addition, mere aggregation + of another work not based on the Program with the Program + (or with a work based on the Program) on a volume of a + storage or distribution medium does not bring the other + work under the scope of this License.
+The source code for a work means + the preferred form of the work for making modifications to + it. For an executable work, complete source code means all + the source code for all modules it contains, plus any + associated interface definition files, plus the scripts + used to control compilation and installation of the + executable. However, as a special exception, the source + code distributed need not include anything that is normally + distributed (in either source or binary form) with the + major components (compiler, kernel, and so on) of the + operating system on which the executable runs, unless that + component itself accompanies the executable.
+ +If distribution of executable or object + code is made by offering access to copy from a + designated place, then offering equivalent access to copy + the source code from the same place counts as distribution + of the source code, even though third parties are not + compelled to copy the source along with the object + code.
+If any portion of this section is + held invalid or unenforceable under any particular + circumstance, the balance of the section is intended to + apply and the section as a whole is intended to apply in + other circumstances.
+ +It is not the purpose of this + section to induce you to infringe any patents or other + property right claims or to contest validity of any such + claims; this section has the sole purpose of protecting the + integrity of the free software distribution system, which + is implemented by public license practices. Many people + have made generous contributions to the wide range of + software distributed through that system in reliance on + consistent application of that system; it is up to the + author/donor to decide if he or she is willing to + distribute software through any other system and a licensee + cannot impose that choice.
+ +This section is intended to make + thoroughly clear what is believed to be a consequence of + the rest of this License.
+END OF TERMS AND CONDITIONS
+
+
If you develop a new program, and you want it to be of the + greatest possible use to the public, the best way to achieve + this is to make it free software which everyone can + redistribute and change under these terms.
+ +To do so, attach the following notices + to the program. It is safest to attach them to the start of + each source file to most effectively convey the exclusion of + warranty; and each file should have at least the "copyright" + line and a pointer to where the full notice is found.
+ ++ <one line to give the program's name and a brief idea of + what it does.> Copyright (C) 19yy <name of author> + ++ +This program is free software; you can + redistribute it and/or modify it under the terms of the GNU + General Public License as published by the Free Software + Foundation; either version 2 of the License, or (at your + option) any later version.
+ +This program is distributed in the + hope that it will be useful, but WITHOUT ANY WARRANTY; + without even the implied warranty of MERCHANTABILITY or + FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details.
+ +You should have received a copy of the + GNU General Public License along with this program; if not, + write to the Free Software Foundation, Inc., 675 Mass Ave, + Cambridge, MA 02139, USA.
+
Also add information on how to contact + you by electronic and paper mail.
+ +If the program is interactive, make it + output a short notice like this when it starts in an + interactive mode:
+ ++ Gnomovision version 69, Copyright (C) 19yy name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details + type `show w'. This is free software, and you are welcome to + redistribute it under certain conditions; type `show c' for + details. ++ +
The hypothetical commands `show w' and + `show c' should show the appropriate parts of the General + Public License. Of course, the commands you use may be called + something other than `show w' and `show c'; they could even be + mouse-clicks or menu items--whatever suits your program.
+ +You should also get your employer + (if you work as a programmer) or your school, if any, to sign a + "copyright disclaimer" for the program, if necessary. Here is a + sample; alter the names:
+ ++ Yoyodyne, Inc., hereby disclaims all copyright interest in + the program `Gnomovision' (which makes passes at compilers) + written by James Hacker. <signature of Ty Coon>, 1 + April 1989+ +
+ Ty Coon, President of Vice +
This General Public License does not + permit incorporating your program into proprietary programs. If + your program is a subroutine library, you may consider it more + useful to permit linking proprietary applications with the + library. If this is what you want to do, use the GNU Library + General Public License instead of this License.
+ + + ++ Website · + Manual · + FAQ · GPL
+ ++ Copyright © 1996-8 Junkbusters ® + Corporation. Copyright © 2001 + Jon + Foster. Copying and distribution permitted under the GNU General Public License. The text of the + GNU GPL itself is copyrighted by the FSF, and may be copied but + not modified.
+ +
+ http://sourceforge.net/projects/ijbswa/
-Download for UNIX - - · (Download for Windows 95/NT) - - · (Other OS) - - · Configuring Browsers - - · Installation - - · For Companies - - · Blocking - - · Cookies - - · Anonymity - - · Security - - · (Technical Manual) -
--The -Internet Junkbuster -Proxy -TM -is -free -privacy-enhancing software that can be run on your PC or by your -ISP -or company. -It blocks requests for -URLs -(typically banner ads) -that match its -blockfile. -It also deletes unauthorized -cookies -and other -unwanted identifying -header information -that is exchanged between web servers and browsers. -These headers are not normally accessible to users -(even though they may contain information that's important to your privacy), -but with the -Internet Junkbuster -you can see almost -anything you want -and control everything you're likely to need. -You -decide what's junk. -SM -Many people -publish -their blockfiles to help others get started. -
- --No, none of these. -It's completely free of charge. -Junkbusters -offers you the software to copy, use, modify and distribute -as you wish, forever, at -no charge -under the -GNU General Public License. -
-It comes with -no warranty of any kind. -
-You don't have to register, -in fact we don't even provide a way to do so: -the practice of registering software is -usually just an -excuse -to send you solicitations and -sell your name -and information about your behavior. -You are welcome to obtain and use our software as anonymously you wish. -(Your -IP -address will naturally be -disclosed -when you download it, -so if you work for a web ad company -you might want to use a service such as the -lpwa.com -when you get it. -We -never -want to be given any information that you consider private or confidential.) -
-We are often asked why we give away a product that many -would happily pay for. -The answer is that we are determined to carry out our -mission: -to free the world from junk communications. -
- --For the latest information on availability, see the -Distribution Information -page. -We -don't -think it will ever run on -Windows 3.1. -But you don't need to have it running on your computer -if you get your -ISP -or Systems Administrator at -work -to run it. -
- -
-Try their sales or support department
-(depending on whether you are already a customer).
-You might send them email including the following
-URL:
-
- http://www.junkbusters.com/ht/en/ijbfaq.html#isps
-
-You could mention that many
-other
-ISPs
-provide it,
-and that you regard it as an important part of your decision on
-where to buy Internet service.
-
-Whoever starts the -Internet Junkbuster -chooses the options and the blockfile. -If your -ISP -runs it for you, they have to make these decision -(though -some -may give you a choice of proxies, -and a way to suggest new -URLs -to block). -If you run it on your computer, -You -decide what's junk. -SM -
- --It depends on your platform. -If you are using Windows 95 or NT, -see our separate page on -installing under Windows. -If you have a C compiler and are using almost any flavor of -UNIX ® -you -download it, compile it, start it running, -and then -configure your browser. -Several precompiled packages are also available through links in our -distribution page, -which lists all available platforms. -
-If you are using a platform for which we have no current -availability, -you are welcome to port the code. -If you do this and you would like us to consider publishing your ported version, -please -tell us. -
- --Just point your browser to -http://internet.junkbuster.com/cgi-bin/show-proxy-args -or to any -URL -ending in -show-proxy-args -(even if it doesn't exist). -It needn't exist because the -Internet Junkbuster 2.0 -intercepts the request, blocks it, -and returns in its place -information about itself. -Using the -URL -above is useful for checking that your browser really is -going through an -Internet Junkbuster, -because the -junkbuster.com -server returns a warning if the request actually gets to it. -Some people set the home page of their browser to such a -URL -to be sure that it is configured to use the proxy. -
-If you wish to check the header information -your proxy is actually sending, -a visit to -http://internet.junkbuster.com/cgi-bin/show-http-headers -will give you the more relevant ones first. -You might also like to turn the proxy -off -and compare the difference. (Don't forget to turn it back on again.) -
- --Once your browser is told to use a proxy such as the -Internet Junkbuster, -it thinks of it as its server for everything, -so this message means it can't talk to the proxy. -The -Internet Junkbuster -may not be running, -or you may have specified its proxy -address -incorrectly. -Check that the details you entered are correct. -If you have -telnet -you can try connecting to the appropriate port to see if the -Internet Junkbuster -is running. -If your -ISP -is running the -Internet Junkbuster, -you may want to check with them. -If you are running it yourself under -UNIX ®, -try looking at a -ps ax -to see if it is running. -The -port -specified in its options should be the same one as your -browser has configured. -
- -
-We'd be very interested to hear it, but please bear a few things in mind.
-
-If you find using our free product -harder than you're used to for consumer software, -there are many -commercial alternatives -that you could consider. -
-The answer to detailed technical questions may be answered in -manual page, -or in the source code. -Also double-check this page for an answer: -using the ``find'' feature on your browser for likely keywords may help. -Our site also has a -search -feature. -
-Many people post requests for help and responses on -Usenet. -
-If your -ISP -is providing -the -Internet Junkbuster -for you, -and your question is about how to use it, -check their web page before asking them. -
-Even though we don't offer the kind of -support you might expect if you paid a lot of money for a software product, -you can still ask us. -But before you do, please consider whether -you could ask someone closer to you. -And please be patient if we're slow to reply: we -never charge consumers -for our services, -so we have to subsidize consumers with revenue from companies, -and our resources are limited. -
-If your company or organization -would be interested in a maintenance contract -with phone and email support, -hard copy documentation and source code and pre-compiled binaries on tape -or disk, -please -ask us -for a quote. -
- --If you set up -the -Internet Junkbuster -to run on the computer you browse from -(rather than your -ISP's server -or some networked computer at work), -the proxy will be on -localhost -(which is the special name used by every computer on the Internet to -refer to itself) -and -the port will be -8000 -(unless you have told the -Internet Junkbuster -to -run on a different port with the -listen-address -option). -So you when -configuring your browser's proxy settings -you typically enter the word -localhost -in the two boxes next to - -HTTP -and - -Secure, -and the number -8000 -in the two boxes labelled -to the right of those boxes. -
-If your -ISP -or company is running -the -Internet Junkbuster -for you, -they will tell you the address to use. -It will be the name of the computer it's running on -(or possibly its numeric IP address), -plus a port number. -Port 8000 is the default, so assume this number if it is not specified. -Sometimes a colon is used to glue them together, -as in -junkbuster.fictitous-pro-privacy-isp.net:8000 -but -with most browsers -you do not type the colon, -you enter the address and port number in separate boxes. -
- -
-All current browsers can be told the address of a proxy to use.
-You enter the same information in two fields in your browser's proxy
-configuration screen (see list below): one for
-HTTP,
-and one for the Secure Protocol (assuming your browser supports
-SSL).
-If you find some information already entered for your proxy,
-see the
-next question.
-Here are the menus you go through to get to the proxy configuration settings.
-(We also recommend that you
-disable Java,
-which is a separate operation.)
-Make notes on the changes you make so you know how to undo them!
-You will need to know what you did
-in case you wish to
-discontinue
-using the proxy.
-
-Some -ISPs -and companies require all Web traffic to go through their proxy. -In this case you would find your proxy configuration with values already set, -possibly under -Automatic Proxy Configuration -(in the case of -Netscape -and -MS-IE 3.0 -and above). -It's probably a firewall proxy between your company and the outside world, -or a -caching proxy -if you're using an -ISP. -
-What needs to be done in this case is to -use the -forwardfile -option -to tell the -Internet Junkbuster -the address of the other proxy. -Specify a different (unused) port number -with the -listen-address -option, -and configure your browser to -use that port. -If you haven't done this kind of thing before, -it's probably best to consult your systems administrator or -ISP -about it; -check their web page first. -
- --Just go through the same procedure you used to start your -browser using the -Internet Junkbuster, -but remove the details you put in -(or if there was something there before, restore it). -You may need to use - -Save Options -to make this change permanent. -On Netscape 3.0 you can go through - -Options; - -Network Preferences; - -Proxies -and click on - -No Proxy -to turn it off, and later click on - -Manual Proxy Configuration -if you want to start using it again. -(No need to enter the again details under - -View -as you did the -first time; -they should remain there unchanged.) -
-This stops your browser talking to the proxy; -shutting down the proxy -is a different matter. -
- --Some browsers (such as MSIE-4) can be configured to dial your -ISP -automatically when you click on a link, -but this feature gets disabled if you specify a proxy running on your -own computer -(with address -localhost -or -127.0.0.1) -because these addresses don't require dialing. -The -Internet Junkbuster -knows nothing about dialing, so it doesn't work. -To make automatic dialing work, -make up a name such as -junkbuster.ijb -and use that name in the proxy settings -instead of -localhost, -and then add the line -127.0.0.1 junkbuster.ijb -to the file -c:\windows\hosts -(if there already is a line beginning with -127.0.0.1 -just add -junkbuster.ijb -at the end of it.) -
-This should also work Netscape Communicator 4 on -machines where IE-4 has been installed. -
- -
-If you are running Redhat
-Linux
-you may prefer to use the
-rpm
-instead of the following procedure.
-
-
-
-If you are running a version earlier than 2.0 you can start it with -junkbuster & -
-
-A binary is currently being supplied with the source code,
-but if you prefer to compile it yourself here is the likely procedure.
-Most of these steps are repeated in our checklist for
-installation under Windows.
-
-(Version 2.0.1 and above uses -the file -junkbstr.ini -as the config file -if it exists and no argument was given. If you have an earlier -version or if you want it to use a different config file, -simply specify that file as the argument.) -
-WinNT users can put it into their own -StartUp folders or the Administrator -can put it into the system's global StartUp folder. -For details on how to make this a service under NT -see our -Windows page. -
-Pick a page from somewhere (such as your bookmarks, or just one -that your browser was pointing to) -and - -Reload -it. -If you get a message along the lines of ``server not responding, -using cached copy instead,'' see the advice -above. -If the page reloads OK, check that your browser is actually -talking to the proxy by going to -http://internet.junkbuster.com/cgi-bin/show-proxy-args -or any -URL -ending in -show-proxy-args -(as described -below, -the proxy should intercept the request.) -When you see ``Internet Junkbuster Proxy Status,'' -you'll know it's working. -
- --You may need the -forwarding -feature to ``daisy chain'' the -Internet Junkbuster -to another proxy, perhaps an -anonymizing -proxy to -conceal -your -IP -address, -or a -caching proxy -from your -ISP, -or a -firewall -proxy between your company and the outside world. -Version 2.0 -can be even configured to forward -selectively -according to the -URL -requested: -for example, connecting directly to trusted hosts, -but going through an anonymizing or firewall proxy for all other hosts. -
-Network administrators might use it to provide -transparent access to multiple networks without -modifying browser configurations. -Most browsers also provide a way of -specifying hosts that the browser -connects to directly, bypassing the proxy. Some provide a method for -Automatic Proxy Configuration. -A well written -Internet Junkbuster -configuration can be much more flexible and powerful. -
-An -ISP's -caching proxy -would typically be called something like -cache.your-isp.net:8080 -(as described on you -ISP's -web page); -you would put this information in your -forwardfile -as described in our manual. -Your browser would be configured to -the -Internet Junkbuster -for -HTTP -and Security Proxies as before, -but you probably want to tell it to use the caching proxy -for -FTP -and other protocols. -If your -ISP -is running -the -Internet Junkbuster -for you, -they have probably already decided whether to chain with a caching proxy. -
- --There is support for some -gateways -in -Version 1.4 -and above. -The gateway protocol used to be specified on the command line; -it is -now specified -in the same file as -forwarding. -Note that the browser's proxy configuration must -not -specify a -SOCKS -host; -it should specify the proxy as described -above. -
- -
-To get the proxy to do as little as possible (which means not deleting any
-sensitive headers), place in your
-configuration file the following three lines (each ending in a space
-then a period) to stop it changing sensitive headers:
-
- referer .
-
- from .
-
- user-agent .
-
- cookiefile mycookiefile
-
-The fourth line is also needed to specify a
-cookiefile
-that might be called
-mycookiefile
-containing a single line with a
-*
-character, to allow all cookies through.
-
-It depends on your platform. Under Windows, use
-
-Ctrl-Break
-in the
-DOS
-window or
-the old three-fingered salute of
-
-Ctrl-Alt-Delete
-and select
-
-End Task.
-Under
-UNIX ®
-you'll need to
-kill
-the
-junkbuster
-process.
-If you don't know the process number to give to
-kill, try this:
-ps ax | grep junkbuster
-
-
-We've seen only a few public comments from the advertising industry on this, -other than -SEC filings. -First, the president of the Internet Advertising Bureau told -CNET -that he wasn't worried by banner blockers. -Second, after the Federal Trade Commission's -workshop -where we gave a live demonstration of our proxy before -many eminent representatives of the industry, -the -Direct Marketing Association -made the following -statement in the closing paragraphs -of their -summary comments -to the Commission. -
-Clever shareware developers have come up with products that -can obliterate cookies and advertisements for those consumers -who have these concerns. -The Internet is a market that is so democratic and flexible -that it is easy for companies and software -developers to respond to a perceived market need. --Their attitude seems to be that they would prefer that -people use technical solutions -to protect their privacy than have protections -imposed by legislation or government regulations. -So, do you perceive a market need? -Then here are some ways to flex your democratic muscles. - - -
-That depends. Try this quick three-point test.
-
-Yes, -ask us -for a quote on a maintenance contract with your choice of -phone and email support, -hard copy documentation, -source code and pre-compiled binaries on tape or disk, -and email alerting of upgrades and issues. -We also offer consulting services to help set up ``stealth browsing'' -capabilities to help reduce the footprints left while doing competitive -analysis and other Web work where confidentiality is critical. -
- -
-Many
-ISPs
-who offer the proxy to their customers have told us that
-most of their customers are
-delighted with it
-(although one reported that a customer complaint that without banner ads,
-surfing was like reading a novel: we recommend making it optional).
-Many
-ISPs
-like it because it reduces bandwidth requirements.
-To help get you started,
-here's a checklist we've developed from working with a few
-ISPs.
-You may think of more,
-and we'd be interested if you're willing to
-share them
-with us.
-
-Other organizations with web presence and some bandwidth to spare -can set up as -Proxy Server Servers - -(PS2s). -The idea here is to allow users to choose their proxy configuration, -and provide it to them on a semi-permanent basis. -Users would fill in a form specifying what options they want in -their proxy, -possibly even at a very high level, such as -``no ads'' -or ``no nudity.'' -This information is sent to a -CGI -script that -configures a proxy, starts it running, and returns its address and port number -(possibly along with configuration instructions for the browser -that the user specified.) -
-Users -could be charged -a subscription fee, -or the service could be thrown in free in the hope of -improving customer retention for some existing business -(which is what -ISPs -are doing). -It might be possible to make money by -inserting new ads in the holes left where others were blocked, -but the original owners might object. -PS2s -could differentiate themselves -by providing frequently updated and comprehensive -blocking of ads, or of offensive material based on their own grading system. -Some content providers might do it for the chance to be the -only company that the consumer permits to set cookies. -(Identification could even be done via cookies, -but this might not be popular with the kind of user who wants a proxy.) -PS2s -might sell specific or aggregate information about their -users' browsing habits, -so the agreement with users on whether they are permitted to do this -would be important to both sides. -
-If your organization -establishes a -Proxy Server Service -you would like publicized, -please -notify us. -
- --The sample blockfile we provide blocks almost nothing, -and we do not publish blockfiles that stop almost all banner ads. -But others have; you can find them by -asking Altavista. -You can add any part of the new file to your old one -(probably called -sblock.ini -if you haven't changed the default name in the latest version) -or your just replace it completely. -You -probably -don't need to restart the proxy. -
-If you develop an interesting blocklist and publish it on the Web, -you might want to include the word ``junkbuster'' in it -and use the word ``blocklist'' in the file name given in the -URL -so that others can find it with the query given in the previous sentence. -
- --If your -ISP -is running the -Internet Junkbuster, -they should have a policy on whether they accept suggestions from -their customers on what to block. Consult their web page. -
-If you are running -the -Internet Junkbuster -yourself, you have complete control over what gets through. -Just add a pattern to cover the offending -URL -to your blockfile. -Version 1.3 and later automatically rereads the blockfile when it changes, -but if you're running an earlier version you'll -have to -stop it -and restart it. -
-To choose a pattern you'll first need to find the -URL -of the ad you want cover. -
-Some people use the -debug -1 -option to display each -URL -in a window as the request is sent to the server. -It's then usually an easy task to pick the offending -URL -from the list of recent candidates. -
-Alternatively, -you can use - -View Document Info -(or - -View Document Source -if your browser doesn't have that). -The - -Info -feature has the advantage of showing you the full -URL -including the host name, -which may not be specified in the source: -there you might see something like -SRC="/ads/click_here_or_die.gif" -indicating only the -path. -(The host name is assumed to be the same as the one the page came from.) -
-But ads often -come from a different site, in which case you -might see something like -SRC="grabem.n.trackem.com/Ad/Infinitum/SpaceID=1666" -or longer. -If the company looks like a pure ad warehouse -(as in the last case), -you may want to place just its domain name in the blockfile, -which blocks all -URLs -from that site. -
-If the ad comes from a server -that you really want some content from, -you can include enough of the path -to avoid zapping stuff you might want. -In the first example above, -/ads/ -would seem to be enough. -If you don't include the domain name, -the pattern applies to all sites, -so you don't want such patterns -to be too general: -for example -/ad -would block -/admin/salaries/ -on your company's internal site. -
-To speed the blocking of images, some -UNIX ® -users create a -shell script called -Image: -containing a line such as -echo $1 | sed s/http:..// >> $HOME/lib/blockfile -that adds its argument to the user's blockfile. -Once an offending image has been be found using - -View Document Info -it's easy to cut-and-paste the line (or part of it) into a shell window. -The same script can be linked to a file called -Frame: -to dealing with framed documents, -and -junkbuster: -to accept the output of the -debug -option. -
-When compiled without the -regular expressions -option, the -Internet Junkbuster -uses only very simple (and fast) matching methods. -The pattern -/banners -will not stop -/images/banners/huge.gif -getting through: you would have to include the pattern -/images/banners -or something that matches in full from the left. -So you can get what you want here, -the matcher understands -POSIX -regular expressions: -you can use -/*.*/banners -to block -and any -URL -containing -/banners -(even in the middle of the path). -(In Versions 1.1 through 1.4 -they were an option at compile time; -from Version 2.0 they have become the default.) -Regular expressions give you -many more features -than this, -but if you're not already familiar with them you probably won't -need to know anything beyond the -/*.*/ -idiom. -If you do, a -man egrep -is probably a good starting point). -
-Don't forget the -/ -(slash) -at the beginning of the path. -If you leave it out the line will be interpreted as a domain name, -so -ad -would block all sites from Andorra -(since -.ad -is the two-letter -country code -for that principality). -
-For a detailed technical description -of how pattern matching is done, -see the -manual. -
- --If the ad had been displayed before you included its -URL -in the blockfile, -it will probably be held in cache for some time, -so it will be displayed without the need for any request to the server. -Using the -debug -1 -option to show each -URL -as it is fetched is a good way to see exactly what is happening. -
-If new items seem to be getting through, -check that you are -really running -the proxy with the right blockfile in the options. -Check the blockfile for -exceptions. -
-Some sites may have different ways of inserting ads, -such as via -Java. -If you have ideas on how to block new kinds -of junk not currently covered, please -tell us. -
- --You can change the patterns so they don't cover it, -or use a simple feature in Version 1.1 and later: a line beginning with a -~ -character means that a -URL -blocked by previous patterns that matches the rest of -the line is let through. -For example, -the pattern -/ad -would block -/addasite.html -but not if followed by -~/addasite -in the blockfile. -Or suppose you want to see everything that comes from -a site you like, even if it looks like an ad: simply put -~aSiteYouLike.com -at the -end -of the blockfile. -(Order is important, because the last matching line wins.) -
-As well as unblocking -pages that were unintentionally blocked, -this feature is useful for unblocking ads from a specific source. -This might be because you are interested in those particular ones, -or if you have an explicit agreement to accept certain ads, -such as those from a free web-based email provider. -
- --Yes, but remember that -children who are technically sophisticated enough -to use the browsers' proxy configuration options -could of course bypass any proxy. -This kind of technology can be used as a gentle barrier to remind -or guide the child, -but nobody should expect it to replace the parent's role -in setting and enforcing standards of online behavior for their children. -
-Some -ISPs -are starting to provide specialized proxies to protect children. -There are two basic approaches: the ``black list'' and the ``white list'' -approach. -The black list approach allows the child -to go anywhere not explicitly prohibited; the white list permits visits -only to sites explicitly designated as acceptable. -
-It's very easy for -anyone to -compile a white list from a page of ``recommended -kids sites'' and to configure an -Internet Junkbuster -to allow access to those sites only. -If you compile with the -regex -option, -you can place a -* -(asterisk) as the first line of the blockfile (which blocks everything), -and then list -exceptions -after that. -Be careful to make the exception sufficiently broad: -for example, using -~www.uexpress.com/ups/comics/ch/ -as the exception for -Calvin and Hobbes -would block some of the graphic elements on the page; -you would probably want a wider exception such as -~www.uexpress.com/ups/ -to permit them. -
-Version 2.0 has an experimental feature -to permit only sites mentioned in a nominated -trusted site. -This allows organizations to build lists of sites for kids to browse, -and the software automatically restricts access to those on the list. -
-Many filtering -products -actually scan for keywords in -the text of pages they retrieve -before presenting it, -but -the -Internet Junkbuster -does not do this. -Building a perfectly reliable black list system is hard, -because it's very difficult to state -in advance -exactly -what is obscene or unsuitable. -For more info see our -links -page. -
- --You usually see a broken image icon, -but it depends on several factors beyond the proxy's control. -If asked for a -URL -matching its blockfile, the proxy returns an -HTML -page containing a message identifying itself -(currently the two words ``Internet Junkbuster'') -with a status 202 (Accepted) instead of the usual 200 (OK). -(Versions 1.X returned an error 404: Forbidden, which caused -strange behavior in some cases.) -Status 202 is described in the -HTTP -RFC -as indicating that the request has been accepted but not completed, -and that it might complete successfully in the future -(in our case, if the blockfile were changed). -
-The broken image icon is most common -because the browser is usually expecting a graphic. -But if it was expecting text, or if the page happens to be using certain -HTML -extensions -such as -layer -and your browser is a late model from Microsoft, -you may see the words ``Internet Junkbuster'' displayed as a hot link. -
-Clicking on the link takes you to an explanation of -the pattern in the blockfile that caused the block, -so that you can edit the blockfile and go back and reload if you really -want to see what was blocked. The explanatory link is generated by -the proxy and is automatically intercepted based on its ending in -ij-blocked-url; -even though the site is specified as -http://internet.junkbuster.com -no request should actually made to that site. -If one is, it means that the proxy was been removed after it -generated the link. -
-To summarize: -the identifying link to the blocking explanation -is usually turned into a broken image icon, -but it may be displayed on a page alone, -or they may may be restricted to the particular frame, layer or graphic area -specified in the page containing them. -The proxy has no way of knowing the context in which a -URL -will be used and cannot control how the blocking message will be rendered. -
- --Many users have suggested to us -that blocked banners should be replaced by a something like a -1x1 transparent -GIF -to make the page would look as if there was nothing ever there. -Apart from making it harder to catch unintended blocking, -this might also displease the owners of the page, -who could argue that such a change constitutes a copyright infringement. -We think that merely failing to allow an included graphic to be accessed -would probably not be considered an infringement: -after all this is what happens when a browser -is configured not to load images automatically. -However, we are -not -lawyers, -so anyone in doubt should take appropriate advice. -
-In a context where the copyright issue is resolved -satisfactorily, -a proxy could simply return a status 301 or 302 and -specify a replacement -URL -in a -Location -and/or -URI -header. -An alternative would be to use inline code to return a -1 x 1 clear -GIF. -We do not publish sample code for this, -and we have no way of stopping -others -who have. -
- --Many users have pointed out that most banner ads come in standard sizes, -so why not block all -GIFs -of those sizes? -This would theoretically be without fetching the object -because the dimensions are usually given in the -IMG -tag, -but it would require substantial changes in the code, -and we doubt whether it would be much more effective than a good block list. -
- --The -Internet Junkbuster -deliberately -does not provide a way of automatically editing the contents of a page, -to remove textual advertising or -to repair the holes left by blocked banners. -Other packages such as -WebFilter -do. -
-For the same reason, -it has no way of stopping a new browser -window being created, because this is done through the -target -attribute in the -<a> -and -<base> -elements, -not through headers. -Nor do we plan to add a feature to -paralyze animated -GIFs. -
- --We haven't tried it but we expect it would probably -work on image ads on push channels. -See also -adchoice. -
-Disabling -Javascript -stops some pop-up ads. -One problem is that some advertisers throw open a new -browser window to frame the ad. The ad is easily blocked, -but the empty window remains. You can kill it easily, but this is a chore. -We don't see how to stop them other than editing the -HTML -from the parent window, which we -don't -like to do. -
-The -TBTF -newsletter warned subscribers to push information that -in IE4, -LOGTARGET -allows -servers to determine the -URLs -viewed at their site even if accessed from cache or through a proxy. -If you use this browser see our instructions on -how to disable -this. -
-If you find you have experience using the proxy with push, -or have any other advice about it, please -tell us. -
- --Yes, you should expect the occasional cookie to make it through to your browser. -We know of at least three ways this can happen; -please -tell us -if you find any others. -One way is in secure documents, which are explained -below. -
-A -few -sites set cookies using a line such as -<META HTTP-EQUIV="Set-Cookie" CONTENT="flavor=chocolate"> -in the -HEAD -section of an -HTML -document. -Cookies can also be - -set and read -in -JavaScript. -To see if this is happening in a document, -view its source, look in the -head -for a section tagged -script language="JavaScript". -If it contains a reference to -document.cookie, -the page can manipulate your cookie file without sending any cookie headers. -The -Internet Junkbuster -does not tamper with these methods. -Fortunately they are rarely used at the moment. -If a cookie gets set, it should be stopped -by the proxy on its way back to the server when a page is requested, -but it can still be read in Javascript. -bu -
-To prevent cookies breaking through, -always -keep -cookie alerts -turned on in your browser, -and -disable -Java and Javascript. -Making the files -hard to write -may also help. -
- --When a web site's server sends you a page it also sends -certain ``header information'' which your browser records but does not display. -One of these is a -Set-Cookie -header, which specifies the cookie information that the server wants your browser to record. -Similarly, when your browser requests a page it also sends headers, specifying -information such as the graphics formats it understands. -If a cookie has previously been set by a site that matches the -URL -it is about to request, -your browser adds a -Cookie -header quoting the previous information. -
-For more background information on how cookies -can damage your privacy, see our -page on cookies. -For highly detailed technical information see the -RFC. -The -Internet Junkbuster -will show you all headers you use the -debug -8 -option, -or you can get a sample from our -demonstration page. -
- --Possibly. -Some personalized services including certain - -chat -rooms -require cookies. -Newspapers that require - -registration -or - -subscription -will not automatically recognize you if you don't send them the cookie they -assigned you. And there are a very small number of sites that do -strange things with cookies; they don't work for anyone that blocks -cookies by any means. -Some sites such as -Microsoft -explain that their content is so wonderfully compelling that -they will withhold it from you unless you submit to their -inserting cookies. -
-If you want such sites to be given your cookies, -you can use the -cookiefile -option provided you are running -Version 1.2 or later -yourself. -Simply include the domain name of those sites in the -cookiefile -specified by this option. -If it still doesn't work, -the problem may be in -other headers. -
-It's possible to let cookies out but not in, -which is enough to keep some sites happy, but not all of them: -one newspaper site seems to go into an endless frenzy -if deprived of fresh cookies. -A cookiefile containing -a single line consisting of the two characters ->* -(greater-than and star) permits server-bound cookies only. -The -* -is a -wildcard -that matches all domains. -
-If someone else is running the -Internet Junkbuster -for you and has a version -that - -passes server-bound cookies through, -you can try editing your browser's cookie -file to contain just the ones you want, -and restart your browser. -To subscribe to a new service like this -after you have started using the -Internet Junkbuster, -you can try the following: -tell your browser to -stop using -the -Internet Junkbuster, -fill out and submit your subscription details -(allowing that web site to set a cookie), -then -reconfigure your browser to use the -Internet Junkbuster -again -(and stop more cookies being sent). -This also requires the -cookiefile -option, -and its success depends on the Web site -not wanting to change your cookies at every session. -For this reason it does not work at some major newspaper sites, for example. -But you may prefer to -look at whether other sites provide the same -or better services without demanding the opportunity -to track your behavior. -The web is a buyer's market where most prices are zero: -very few people pay -for content with money, so why should you pay with your privacy? -
- --Yes, since version 1.2 the -Internet Junkbuster -has included advanced cookie management facilities. -Unless you specify otherwise, -cookies are discarded (``crumbled'') by the -Internet Junkbuster -whether they came from the server or the browser. -In Version 1.2 and later you can -use the -cookiefile -option -to specify when cookies are to be passed through intact. -It uses the same syntax and -matching -algorithm as the blockfile. -
-If the
-URL
-matches a pattern in the
-cookiefile
-then cookies are let through in both the browser's request for the
-URL
-and in the server's response.
-One-way permissions can be
-specified by starting the line with the
->
-or
-<
-character.
-For example, a cookiefile consisting of the four lines
-
- org
-
- >send-user-cookies.org
-
- <accept-server-cookies.org
-
- ~block-all-cookies.org
-
-allows cookies to and from
-.org
-domains only, with the following exceptions:
-
-If -the -junkbuster -was compiled with the regular expressions option -they may be used in paths. -Any logging to a -``cookie jar'' -is separate and not affected. -
-It's important to give hosts you want to be able -to set cookies sufficient breadth. For example, -instead of -www.yahoo.com -use -yahoo.com -because the company uses many different hosts ending in that domain. -
- -
-Yes,
-using the
-wafer
-option.
-We coined the term
-wafer
-to describe cookies chosen by a user,
-not the Web server.
-Servers may not find wafers as tasty as the cookies
-they make themselves.
-But users may enjoy controlling servers' diets for various reasons,
-such as the following.
-
--Any company that tries to argue in court that the proxy site -was breaching their copyright in the cookies would -be met with the defense that the proxy site gave that company -the opportunity to protect its copyright by simply -not sending cookies after receiving the notice. --TO WHOM IT MAY CONCERN - -
-
-Do not send me any copyrighted information other than the -document that I am requesting or any of its necessary components. -
-
-In particular do not send me any cookies that -are subject to a claim of copyright by anybody. -Take notice that I refuse to be bound by any license condition -(copyright or otherwise) applying to any cookie. - -
-Cookies can be as long as four thousand characters,
-so there's plenty of space for lawyerly verbosity,
-but white space, commas, and semi-colons are
-prohibited.
-Spaces can be turned into underscores.
-Alternatively,
-a
-URL
-could be sent as the cookie value,
-pointing to a document containing a notice,
-perhaps with a suggestive value such as
-
-http://www.junkbusters.com/ht/en/ijbfaq.html#licenses_on_cookies_refused
-
-But including the notice directly would probably be preferable
-because the addressee does not have to look it up.
-
-The -Internet Junkbuster 2.0 -currently sends a full notice as a -``vanilla wafer'' -if cookies are being logged to a cookie jar -and no other wafers have been specified. -It can be suppressed with the -suppress-vanilla-wafer -option, -which might be used in situations where there is an established understanding -between the proxy and all who serve it. -
-Junkbusters provides a -CGI -script that lets you -see -your wafers as they appear to servers. -
-Wafers confuse a few fragile servers. -If this troubles you, don't use this option. -
-Any wafers specified are sent to -all sites regardless of the cookiefile. -They are appended after any genuine cookies, -to maintain compliance with -RFC 2109 -in the event that a path was specified for a cookie. -The -RFC's provisions regarding the -$ -character -(such as the -Version -attribute) -are transparent -to the proxy; it simply quotes what was recited by the browser. -
-If you want to send wafers only to specific sites, -you could try putting them your browser's cookie file in a format -conforming to the Netscape -specification, -and then specify in the proxy's cookiefile that cookies are to be -sent to -but not accepted from those sites, so they can't overwrite the file. -This may work with Netscape but not all other browsers. -
- -
-We provided this capability just in case anyone wants it.
-There are a few possible reasons.
-
-No. Your chances of remaining anonymous are improved, -but unless you are an expert on Internet security -it would be safest to assume that everything you do on the Web -can be attributed to you personally. -
-The -Internet Junkbuster -removes various information about you, -but it's still possible that web sites can find out who you are. -Here's one way this can happen. -
-A few browsers -disclose the user's email address -in certain situations, such as when transferring a file by -FTP. -The -Internet Junkbuster 2.0 -does not filter the -FTP -stream. -If you need this feature, or are concerned about the mail handler -of your browser disclosing your email address, -you might consider -products such as -NSClean. -
-Browsers downloaded as binaries -could use non-standard headers to give out any information -they can have access to: see the manufacturer's license agreement. -It's impossible to anticipate and prevent every breach of privacy that -might occur. -The professionally paranoid prefer browsers available as source code, -because anticipating their behavior is easier. -
- --You shouldn't have to trust us, and you certainly don't have to. -We do not run the proxy as a service, -where we could observe your online behavior. -We provide source code so that everyone can see that the proxy isn't -doing anything sneaky. -
-You are already trusting your -ISP -not to look at an awful lot of information on what you do. -They probably post a -privacy policy -on their site to reassure you. -If they run a proxy for you, using it could actually -make it slightly easier for them to monitor you, -but we doubt that any sane -ISP -would try this, -because if it were discovered customers would desert them. -
- -
-The
-Internet Junkbuster
-pounces on the following
-HTTP
-headers in requests to servers,
-unless instructed otherwise in the options.
-
-Some browsers -send Referer and User-Agent information under different non-standard headers. -The -Internet Junkbuster 2.0 -stops -UA -headers, -but others may get through. -This information is also available via JavaScript, -so -disable disable -it. -Some search engines -encode the query you typed -in the -URL -that goes to advertisers to target a banner ad at you, -so you will need to block the ad as well as the referer header, -unless you want them (and anyone they might -buy data -from) -to know -everything you ever search for. -
-If you have JavaScript enabled (the default on -most browsers) servers can use it to obtain Referer and User Agent, -as well as your plug-ins. -We recommend -disabling -JavaScript and Java. -
-Currently no -HTTP -response headers (browser bound) -are removed, -not even the -Forwarded: -or -X-Forwarded-For: -headers. -Nor are any added, -unless requested. -We are considering a more flexible header management system for -a future version. -
- --Possibly. If used with a browser less advanced than Netscape 3.0 or IE-3, -indicating an advanced browser -may encourage pages containing extensions that confuse your browser. -If this becomes a problem -upgrade your browser or -use the -user-agent -option to indicate an -older browser. -In -Version 1.4 -and later you can selectively reveal your real browser -to only those sites you nominate. -
-Because different browsers -use different encodings of Russian characters, -certain web servers convert pages on-the-fly according to the User Agent -header. Giving a User Agent with the wrong operating system or -browser manufacturer causes some Russian sites to be garbled; -Russian surfers should -change it -to something closer. -
-Some -page access counters -work by looking at the referer; -they may fail or break when deprived. -
-Some sites depend on getting a referer header, -such as -uclick.com, -which serves comic strips -for many newspaper sites, -including -Doonsbury -for the -Washington Post. -(If you click on that last link, you can then get to a page containing -the strip via the -same -URL -we've linked to under -Doonsbury, -but if you click on the -Doonsbury -link directly, it gives you an error message suggesting that you -use a browser that supports referers.) -In -Version 1.4 -and later you can use the --r @ -option -and place a line like ->uclick.com -in your cookiefile. -Wired News -used to use referer to decide whether to add a navigation column to -the page, but they have changed that. -
-The weather maps of -Intellicast -have been blocked by their server when no referer or cookie is provided. -You can use the same countermeasure with a line such as ->208.194.150.32 -(or simply get your weather information -elsewhere). -
-Some software vendors, including -Intuit -use -USER_AGENT -to decide which versions of their products to display to you. -With the -default -you get Mac versions. -
-As a last resort if a site you need doesn't seem to be working, -the -proxy configuration -of many browsers allow you to specify - -No Proxy For -any hostname you want. -
-We had reports that on some versions of Netscape the -What's New -feature did not work with the proxy, -but we think we fixed this in Version 2.0.1. -
- --Almost -every -major release of both leading browsers has contained -bugs that allow malicious servers to compromise your privacy and security. -Known bugs are quickly fixed, but millions of copies of the affected -software remain out there, and yours is probably one of them. -The -header -that normally identifies your browser tells such servers exactly which attacks -to use against you. -By misidentifying your browser you reduce the likelihood that they -will be able to mount a successful attack. -
- --Web sites get the IP address of any proxy or browser they serve pages to. -If you run the proxy on your own computer the IP address disclosed -is the same as your browser would, unless you use the -forwardfile -option is used to chain to another proxy, -in which case servers only get the last IP address in the chain. -Chaining slightly slows browsing of course, but it improves anonymity. -
-One public proxy that you can -forward to is -lpwa.com -port 8000. -Read about its privacy-enhancing -features and the authentication procedures first, -and note that it blocks -referer -in almost all cases, -as well as some -other headers. -
- -
-After you log in to
-LPWA
-it tells your browser to send a
-Proxy-authorization
-header with each request.
-Whenever you shut down the browser and start again with a new browser,
-you need to log in again.
-If you are the only person using the
-Internet Junkbuster
-proxy, you can avoid repeated logins to
-LPWA
-by telling the
-Internet Junkbuster
-to send the information by placing a line such as
-
- add-header Proxy-authorization: Basic ZHVtbXk=.
-
-in the configuration file.
-The exact example above
-does not work
-because the code
-ZHVtbXk=.
-is a bogus one that
-LPWA
-would never generate;
-follow the procedure below to generate a valid one.
-
-We think so, -provided you are not the user running the -proxy. -If your computer (or your -ISP's) -is running the -identd -demon, -servers can ask it for the identity of the -user making the request at time you request a page from them. -But if you're going through a proxy, -they will identify the user name associated with the proxy, not you. -A visit to -http://ident.junkbusters.com -lets you see what's happening. -This test is (quite rightly) blocked by many -firewalls; -just interrupt the transfer if you get an abnormal wait after clicking. -Running other applications -may also expose you via -identd; -the proxy of course doesn't help then. -
- --With the default options the proxy doesn't announce itself. -Obvious indications such as -Keep-Alive -headers are -deleted, -but sites might notice that you can cancel cookies faster than -any human could possibly click on a mouse. -(If you want to provide a -plausible explanation for this, -change the User Agent header to a -cookie-free -or -cookie-crunching -browser). -
-But when certain options -are used they could figure out something's going on, -even if they're not pushing cookies. -If you use blocking -they can tell from their logs that the graphics in their pages -are not being requested selectively. -The -add-forwarded-header -option explicitly announces to the server that a proxy is present, -and -sending them -wafers -is of course a dead giveaway. -
- --If you enter a -``Secure Document Area,'' -cookies and other header information -such as User Agent and Referer -are sent encrypted, -so they cannot be filtered. -We recommend getting your browser to alert you when this happens. -(On Netscape: - -Options; - -Security; - -General; - -Show an alert before entering a secure document space.) -We also recommend adding the line -:443 -to the blockfile to stop all but sites specified in an exception -after that line from using SSL. -
-It may be possible to filter encrypted cookies -by combining the blocking proxy with a cryptographic proxy along -the lines of -SafePassage, -but we have not tried this. -
- --We're not security experts, but we don't think so. -The whole point of -SSL -is that the -contents of messages are - -encrypted -by the time -they leave the browser and the server. -Eavesdroppers (including proxies) can see where your messages are going -whether you are running a proxy or not, -but they only get to see the contents after they have been encrypted. -
- --Yes, we added an -access control -file in Version 2.0. -But before you use it please consider why you want to do it. -If the reason is security, -it probably means you need a firewall. -
-The -listen-address -option provides a way of binding the proxy to a single IP address/port. -The right way to do this is to choose a port inside your firewall, and -deny access to it to those outside the firewall. -The -Internet Junkbuster -is not a firewall proxy; -it should not be expected to solve security problems. -
-For background information on firewalls,
-see
-Yahoo
-or a
-magazine article
-or these well-known books:
-Firewalls and Internet Security: Repelling the Wily Hacker
-by
-
-Yes. -As with any service offered over the Internet, -hackers can try to misuse it. -A well-run -ISP -will have professionals who are experienced at assessing and containing -these risks. -
-It's possible to set up your machine so -that other people can have access to your proxy, -but if you lack expertise in computer security -you probably shouldn't have your computer configured to offer -this or any other service to the outside world. -
-Hackers can attempt to gain access
-to the machine by various attacks,
-which we have tried to guard against but don't guarantee to thwart.
-They can also use the ``anonymizing'' quality of proxies
-to try to cover their tracks while hacking other computers.
-For this reason we recommend preventing it being used
-as an anonymous
-telnet
-by putting the pattern
-:23
-in the blockfile (it's included as standard equipment).
-(Actually the current implementation incidentally blocks telnet due to the
-way headers are handled, but it's best not to rely on this.)
-If you wish to block all ports except the default
-HTTP
-port 80,
-you can put the lines
-
- :
-
- ~:80
-
-at the beginning of the blockfile, but be aware that some servers
-run on non-default ports (e.g. 8080). You might also want to add the line
-~:443
-to allow
-SSL.
-
-On -UNIX ® -systems it is neither necessary nor desirable for the proxy to run as root. -
-Versions 2.0.1 and below may be vulnerable to remote -exploitation of a memory buffer bug; for security reasons all users -are encouraged to -upgrade. -
-If you find any security holes in the code -please -tell us, -along with any suggestions you may have for fixing it. -However, we do not claim that we will be able to do so. -
-We distribute this code in the hope that people -will find it useful, but we provide -no warranty -for it, -and we are not responsible for anyone's use or misuse of it. -
-You may also want to check back periodically for updated versions of the code. -We do not -maintain a mailing list. -To get quick updates, bookmark our -Distribution Information -page. -
- - -Home - · -Next - - · Site Map - - · Legal - - · Privacy - - · Cookies - - · Banner Ads - - · Telemarketing - - · Mail - - · Spam - - - - --Copyright © 1996-8 Junkbusters -® Corporation. -Copying and distribution permitted under -the GNU -General Public License. - - -1998/10/31 -http://www.junkbusters.com/ht/en/ijbfaq.html - -
webmaster@junkbusters.com - - - diff --git a/doc/ijbman.html b/doc/ijbman.html deleted file mode 100644 index 710cddb0..00000000 --- a/doc/ijbman.html +++ /dev/null @@ -1,920 +0,0 @@ - - - - - - - - - - - --Options - - · Checking Options - - · Installation - - · Copyright - - · (FAQ) -
--junkbuster -- The -Internet Junkbuster -Proxy -TM -
- -
-junkbuster
-configfile
-(Version 2.0 onwards)
-
-junkbstr.exe
-configfile
-(Windows)
-
-junkbuster
-[-a]
-[-y]
-[-s]
-[-c]
-[-v]
-
-[-u user_agent]
-[-r referer]
-[-t from]
-
-[-b blockfile]
-[-j jarfile]
-[-l logfile]
-
-[-w NAME=VALUE]
-[-x Header_text]
-
-[-h [bind_host_address][:bind_port]]
-
-[-f forward_host[:port]]
-[-d N]
-
-[-g gw_protocol[:[gw_host][:gw_port]]]
-
-(Version 1.4 and earlier)
-
-junkbuster -is an instrumentable proxy that filters the -HTTP -stream between -web servers and browsers. -Its main purpose is to enhance privacy. -
-Versions before 2.0 used command-line options; -Versions from 2.0 onward use a configuration file. -The following descriptions of the options first give the older -command-line usage, then the new configfile line. -
-In Versions 2.0.1 upwards on Windows, -a start-up message is printed and the configuration is read from the file -junkbstr.ini -if it exists and no argument was given. -
-All files except the configfile -are checked for changes before each page is fetched, -so they may edited without restarting the proxy. -
-To compare the domains, -the pattern domain and the target -domain specified in the -URL -are each broken into their components. -(Components are separated by the -. -(period) character.) -Next each of the target components -is compared with the corresponding pattern component: last with last, -next-to-last with next-to-last, and so on. -(This is called -right-anchored -matching.) -If all of the pattern components find their match in the target, -then the domains are considered a match. -Case is irrelevant when comparing domain components. -
-A successfully -matching pattern can be an anchored substring of a target, but -not vice versa. -Thus if a pattern doesn't specify a domain, -it matches all domains. -Furthermore, when comparing two components, -the components must either match in their entirety or up to a wildcard -* -(star character) in the pattern. The wildcard feature -implements only a "prefix" match capability ("abc*" vs. "abcdefg"), -not suffix matching ("*efg" vs. "abcdefg") or -infix matching ("abc*efg" vs. "abcdefg"). -The feature is restricted to the domain component; -it is unrelated to the optional -regular expression -feature in the path -(described below). -
-If a numeric port -is specified in the pattern domain, then the target port must -match as well. The default port in a target is port 80. -
-If the domain and port match, -then the target -URL -path is checked for -a match against the path in the pattern. -Paths are compared with a simple case-sensitive -left-anchored substring comparison. -Once again, the pattern can be an -anchored substring of the target, but not vice versa. -A path of -/ -(slash) would match all paths. Wildcards are not considered in -path comparisons. -
-For example, the target
-URL
-
- the.yellow-brick-road.com/TinMan/has_no_brain
-
-would be matched (and blocked) by the following patterns
-
- yellow-brick-road.com
-
-and
-
- Yellow*.COM
-
-and
-
- /TinM
-
-but not
-
- follow.the.yellow-brick-road.com
-
-or
-
- /tinman
-
-
-Comments in a blockfile start with a -# -(hash) character and end at a new line. -Blank lines are also ignored. -
-Lines beginning with a -~ -(tilde) character are taken to be -exceptions: -a -URL -blocked by previous patterns that matches the rest of -the line is let through. (The last match wins.) -
-Patterns -may contain -POSIX -regular expressions -provided the -junkbuster -was compiled with this option -(the default in Version 2.0 on). -The idiom -/*.*/ad -can then be used -to match any -URL -containing -/ad -(such as -http://nomatterwhere.com/images/advert/g3487.gif -for example). -These expressions -don't work -in the domain part. -
-In version 1.3 and later -the blockfile and cookiefile are checked for changes before each request. -
-In Version 1.2 and later -this option must be followed by a -filename -containing instructions on which sites are allowed to -receive and set cookies. -By default cookies are dropped in both the browser's request -and the server's response, unless the -URL -requested matches an entry in the -cookiefile. -The matching algorithm is the same as for the blockfile. -A leading -> -character allows -server-bound -cookies only; -a -< -allows only browser-bound cookies; -a -~ -character stops cookies in -both directions. -Thus a cookiefile containing a single line with the two characters ->* -will pass on all cookies to servers but not give any new ones to the browser. -
-Version 2.0 also accepts the spelling -referrer, -which most dictionaries consider correct. -
-* lpwa.com:8000 . . --
-Each line contains four fields:
-target,
-forward_to,
-via_gateway_type
-and
-gateway.
-As usual, the
-last
-target
-domain that matches the requested
-URL
-wins,
-and the
-*
-character alone matches any domain.
-The target domain need not be a fully qualified
-hostname; it can be a general domain such as
-com
-or
-co.uk
-or even just a port number.
-For example, because
-LPWA
-does not handle
-SSL,
-the line above will typically be followed by a line such as
-
-
-:443 . . . --to allow SSL transactions to proceed directly. -The cautious would also -add an entry in their blockfile to stop transactions -to port 443 for all but specified trusted sites. -
-If the winning -forward_to -field is -. -(the dot character) the proxy connects -directly to the server given in the -URL, -otherwise it forwards to the host and port number specified. -The default port is 8000. -The -via_gateway_type -and -gateway -fields also use a dot to indicate no gateway protocol. -The gateway protocols are explained -below. -
-The example line above in a forwardfile alone -would send everything through port 8000 at -lpwa.com -with no gateway protocol, -and is equivalent to the old --f lpwa.com:8000 -with no --g -option. -For more information see the example file provided with the distribution. -
-Configure with care: no loop detection is performed. -When setting up chains of proxies that might loop back, try adding -Squid. -
-The user's browser should -not -be -configured -to use -SOCKS; -the proxy conducts the negotiations, not the browser. -
-The user identification capabilities of -SOCKS4 -are deliberately not used; -the user is always identified to the -SOCKS -server as -userid=anonymous. -If the server's policy is to reject requests from -anonymous, -the proxy will not work. -Use a -debug -value of 3 -to see the status returned by the server. -
-Because most browsers send several requests in parallel -the debugging output may appear intermingled, so the -single-threaded -option is recommended when using -debug -with -N -greater than 1. - -
-Each line of the access file begins with -either the word -permit -or -deny -followed by source and (optionally) destination addresses -to be matched against those of the -HTTP -request. -The last matching line specifies the result: if it was a -deny -line or if no line matched, -the request will be refused. -
-A source or destination -can be specified as a single numeric -IP -address, -or with a hostname, provided that the host's name -can be resolved to a numeric address: this cannot be used to block all -.mil -domains for example, -because there is no single address associated with that domain name. -Either form may be followed by a slash and an integer -N, -specifying a subnet mask of -N -bits. -For example, -permit 207.153.200.72/24 -matches the entire Class-C subnet from -207.153.200.0 -through 207.153.200.255. -(A netmask of 255.255.255.0 corresponds to 24 bits of -ones in the netmask, as with -*_MASKLEN=24.) -A value of 16 would be used for a Class-B subnet. -A value of zero for -N -in the subnet mask length will cause any address to match; -this can be used to express a default rule. -For more information see the example file provided with the distribution. -
-If you like these access controls -you should probably have -firewall; -they are not intended to replace one. -
-Browsers must be told where to find the -junkbuster -(e.g. -localhost -port 8000). -To set the -HTTP -proxy in Netscape 3.0, -go through: - -Options; - -Network Preferences; - -Proxies; - -Manual Proxy Configuration; - -View. -See the -FAQ -for other browsers. -The -Security Proxy -should also be set to the same values, -otherwise -shttp: -URLs -won't work. -
-Note the limitations -explained in the -FAQ. -
- --To allow users to -check -that a -junkbuster -is running and how it is configured, -it intercepts requests for any -URL -ending in -/show-proxy-args -and blocks it, -returning instead returns information on its -version number and -current configuration -including the contents of its blockfile. -To get an explicit warning that no -junkbuster -intervened if the proxy was not configured, -it's best to point it to a -URL -that does this, such as -http://internet.junkbuster.com/cgi-bin/show-proxy-args -on Junkbusters's website. -
- -
-http://www.junkbusters.com/ht/en/ijbfaq.html
-
-http://www.junkbusters.com/ht/en/cookies.html
-
-http://internet.junkbuster.com/cgi-bin/show-proxy-args
-
-http://www.cis.ohio-state.edu/htbin/rfc/rfc2109.html
-
-http://squid.nlanr.net/Squid/
-
-http://www-math.uni-paderborn.de/~axel/
-
-Written and copyright by the Anonymous Coders and Junkbusters Corporation -and made available under the -GNU General Public License (GPL). -This software comes with -NO WARRANTY. -Internet Junkbuster -Proxy -is a -trademark -of Junkbusters Corporation. -
- - -Home - · -Next - - · Site Map - - · Legal - - · Privacy - - · Cookies - - · Banner Ads - - · Telemarketing - - · Mail - - · Spam - - - - --Copyright © 1996-8 Junkbusters -® Corporation. -Copying and distribution permitted under -the GNU -General Public License. - - -1998/10/31 -http://www.junkbusters.com/ht/en/ijbman.html - -
webmaster@junkbusters.com - - - diff --git a/doc/obsolete/fb.gif b/doc/obsolete/fb.gif new file mode 100755 index 0000000000000000000000000000000000000000..430599247c98e12514999f7c116aac2ae83324b7 GIT binary patch literal 76 zcmZ?wbhEHb+ Website · + Manual · FAQ · GPL
+ +Configuring + Browsers · + IE 5.0 · + Installation · For Companies · Blocking Ads · + Cookies · Hotmail · Children · Forwarding/Chaining + · IP + · Anonymity + · Security
+ +Development of JunkBuster is ongoing and this document is + no longer current. However, it may provide some assistance. If + you have problems, please use the Yahoo Groups + mailing list (which includes an archive of mail), the + SourceForge.net project page, or + see the project's home + page. Please also bear in mind that versions 2.9.x of + JunkBuster are development releases, and are not production + quality.
+ +The Internet Junkbuster Proxy TM + is free privacy-enhancing software that can be run on your PC + or by your ISP or company. It blocks requests for URLs + (typically banner ads) that match its blockfile. It also + deletes unauthorized cookies and other unwanted identifying + header information that is exchanged between web servers and + browsers. These headers are not normally accessible to users + (even though they may contain information that's important to + your privacy), but with the Internet Junkbuster you can see + almost anything you want and + control everything you're likely to need. Many people publish + their blockfiles to help others get started.
+ +No, none of these. It's completely free of charge. + Junkbusters offers you the software to copy, use, modify and + distribute as you wish, forever, at no charge under the GNU + General Public License.
+ +It comes with no warranty of any + kind.
+ +You don't have to register, in fact + we don't even provide a way to do so: the practice of + registering software is usually just an excuse to send you + solicitations and sell your name and information about your + behavior. You are welcome to obtain and use our software as + anonymously you wish. (Your IP address will naturally be + disclosed when you download it; use anonymizing software if you + want to conceal this. We never want to be given any information + that you consider private or confidential.)
+ +We are often asked why we give away a + product that many would happily pay for. The answer is that we + are determined to carry out our mission: to free the world from + junk communications.
+ +For the latest information on availability, see the + Distribution Information page. We don't think it will ever run + on Windows 3.1. But you don't need to have it running on your + computer if you get your ISP or Systems Administrator at work + to run it.
+ +Try their sales or support department (depending on whether
+ you are already a customer). You might
+ send them email including the following URL:
+
+ http://www.junkbusters.com/ht/en/ijbfaq.html#isps
+ You could mention that many other ISPs
+ provide it, and that you regard it as an important part of your
+ decision on where to buy Internet service.
Whoever starts the Internet Junkbuster chooses the options + and the blockfile. If your ISP runs it for you, they have to + make these decision (though some may give you a choice of + proxies, and a way to suggest new URLs to block). If you run it + on your computer, you get to choose.
+ +It depends on your platform. If you are using Windows 95 or + NT, see our separate page on installing under Windows. If you + have a C compiler and are using almost any flavor of UNIX ® + you download it, compile it, start it running, and then + configure your browser. Several precompiled packages are also + available through links in our distribution page, which lists + all available platforms.
+ +If you are using a platform for which we + have no current availability, you are welcome to port the code. + If you do this and you would like us to consider publishing + your ported version, please tell us.
+ +Just point your browser to
+ http://internet.junkbuster.com/cgi-bin/show-proxy-args or to
+ any URL ending in show-proxy-args (even if it
+ doesn't exist). It needn't exist because the Internet
+ Junkbuster intercepts the request, blocks it, and returns in
+ its place information about itself. Using the URL above is
+ useful for checking that your browser really is going through
+ an Internet Junkbuster, because the junkbuster.com
+ server returns a warning if the request actually gets to it.
+ Some people set the home page of their browser to such a URL to
+ be sure that it is configured to use the proxy.
If you wish to check the header + information your proxy is actually sending, a visit to + http://internet.junkbuster.com/cgi-bin/show_http_headers will + give you the more relevant ones first. You might also like to + turn the proxy off and compare the difference. (Don't forget to + turn it back on again.)
+ +Once your browser is told to use a proxy such as the
+ Internet Junkbuster, it thinks of it as its server for
+ everything, so this message means it can't talk to the proxy.
+ The Internet Junkbuster may not be running, or you may have
+ specified its proxy address incorrectly. Check that the details
+ you entered are correct. If you have telnet you
+ can try connecting to the appropriate port to see if the
+ Internet Junkbuster is running. If your ISP is running the
+ Internet Junkbuster, you may want to check with them. If you
+ are running it yourself under UNIX ®, try looking at a
+ ps ax to see if it is running. The port specified in its options should be
+ the same one as your browser has configured.
We'd be very interested to hear it, but please bear a few + things in mind.
+ +If you find using our free product + harder than you're used to for consumer software, there are + many commercial alternatives that you could consider.
+ +The answer to detailed technical questions + may be answered in manual page, or in + the source code. Also double-check this page for an answer: + using the ``find'' feature on your browser for likely keywords + may help. Our site also has a search feature.
+ +Many people post requests for help and + responses on Usenet.
+ +If your ISP is providing the Internet + Junkbuster for you, and your question is about how to use it, + check their web page before asking them.
+ +Even though we don't offer the kind of + support you might expect if you paid a lot of money for a + software product, you can still ask us. But before you do, + please consider whether you could ask someone closer to you. + And please be patient if we're slow to reply: we never charge + consumers for our services, so we have to subsidize consumers + with revenue from companies, and our resources are limited.
+ +If your company or organization would be + interested in a maintenance contract with phone and email + support, hard copy documentation and source code and + pre-compiled binaries on tape or disk, please ask us for a + quote.
+ + + +If you set up the Internet
+ Junkbuster to run on the computer you browse from (rather than
+ your ISP's server or some networked computer at work), the
+ proxy will be on localhost (which is the special
+ name used by every computer on the Internet to refer to itself)
+ and the port will be 8000 (unless you have told
+ the Internet Junkbuster to run on a different port with the listen-address option).
+ So you when configuring your browser's proxy settings you
+ typically enter the word localhost in the two
+ boxes next to HTTP and
+ Secure, and the number 8000 in the two boxes
+ labeled to the right of those boxes. The
+ Internet Junkbuster does not currently handle other protocols
+ such as Gopher, FTP, or WAIS, so leave those setting unchanged.
+ Nor does it handle ICQ or Instant Messenger services.
If your ISP or company is running the
+ Internet Junkbuster for you, they will tell you the address to
+ use. It will be the name of the computer it's running on (or
+ possibly its numeric IP address), plus a port number. Port 8000
+ is the default, so assume this number if it is not specified.
+ Sometimes a colon is used to glue them together, as in
+ junkbuster.fictitious-pro-privacy-isp.net:8000 but with
+ most browsers you do not type the colon, you enter the address
+ and port number in separate boxes.
All current browsers can be told the address of a proxy to + use. You enter the same information in two fields in your + browser's proxy configuration screen (see list below): one for + HTTP, and one for the Secure Protocol (assuming your browser + supports SSL). If you find some information already entered for + your proxy, see the next question. Here are the menus you go + through to get to the proxy configuration settings. (We also + recommend that you disable Java, which is a separate + operation.) Make notes on the changes you make so you + know how to undo them! You will need to know what you + did in case you wish to discontinue using the proxy.
+ +setenv http_proxy
+ http://localhost:8000/
+ http_proxy=http://junkbuster.fictitious-pro-privacy-isp.net:8000/
+ export http_proxyIf your browser is not listed here, or if you notice an + error, please tell us the correct procedure.
+ +Some ISPs and companies require all Web traffic to go + through their proxy. In this case you would find your proxy + configuration with values already set, possibly under Automatic Proxy Configuration (in the case of + Netscape and MS-IE 3.0 and above). It's probably a firewall + proxy between your company and the outside world, or a caching proxy if you're using an ISP.
+ +What needs to be done in this case is to use + the forwardfile option to + tell the Internet Junkbuster the address of the other proxy. + Specify a different (unused) port number with the listen-address option, and + configure your browser to use that port. If you haven't done + this kind of thing before, it's probably best to consult your + systems administrator or ISP about it; check their web page + first.
+ +Just go through the same procedure you used to start your + browser using the Internet Junkbuster, but remove the details + you put in (or if there was something there before, restore + it). You may need to use Save Options to make + this change permanent. On Netscape 3.0 you can go through Options; Network Preferences; + Proxies and click on No + Proxy to turn it off, and later click on + Manual Proxy Configuration if you want to start using it + again. (No need to enter the again details under + View as you did the first time; they should remain there + unchanged.)
+ +This stops your browser talking to the + proxy; shutting down the proxy is a different matter.
+ +Some browsers (such as MSIE-4) can be configured to dial
+ your ISP automatically when you click on a link, but this
+ feature (called "automatically connect" or "autoconnect") gets
+ disabled if you specify a proxy running on your own computer
+ (with address localhost or 127.0.0.1)
+ because these addresses don't require dialing. The Internet
+ Junkbuster knows nothing about dialing, so it doesn't work. To
+ make automatic dialing work, make up a name such as
+ junkbuster.ijb and use that name in the proxy settings
+ instead of localhost, and then add the line
+ 127.0.0.1 junkbuster.ijb to the file
+ c:\windows\hosts (if there already is a line beginning
+ with 127.0.0.1 just add
+ junkbuster.ijb at the end of it.)
This should also work Netscape + Communicator 4 on machines where IE-4 has been installed.
+ + + +The next two sections assume you wish to compile the code
+ with your own C compiler. If you just
+ want to use the .exe file provided for Windows,
+ see the Windows Installation page.
If you are running Redhat Linux you may prefer to use the + rpm instead of the following procedure.
+ +uncompress -c ijb20.tar.Z | tar xf
+ -Makefile and make any changes
+ indicated inside.makejunkbstr.ini, previously called
+ sconfig.txt and other names in earlier releases) to
+ some convenient place such as
+ /usr/local/lib/junkbuster/configfile or whatever you
+ choose. The sample file has all the options commented out.
+ You can remove the # character on any that you
+ want, but it may be better to leave this until to later.
+ Run it asynchronously:junkbuster configfile &
+
+
+ If you are running a version earlier than 2.0 you can
+ start it with junkbuster &
kill the process and start it again. The
+ most popular option is
+ blockfile to block ads. A
+ sample blockfile is provided as an illustration, but it
+ doesn't really stop many ads. More comprehensive ones are
+ available elsewhere./etc/rc.d/rc.local or equivalent to start it at
+ boot time. (Any output you specify should be redirected to a
+ file. And don't forget the & at the end to run it
+ asynchronously or your system will seize up after the next
+ reboot.)A .exe file (binary) is supplied with the
+ source code, but if you prefer to compile it yourself here is
+ the likely procedure. Most of these steps are repeated in our
+ checklist for installation under Windows.
ijb20.zip (~208k), then uncompress
+ and unpack the zip archive using a tool like WinZip.ijb20.
+ Go into that folder and then edit the Makefile for your
+ system, removing the comment character (#) in
+ the lines related to Win32. Then type:nmake
+ junkbstr.exe. For information
+ on issues with various compilers, see the Distribution
+ Information page.junkbstr(Version 2.0.1 and above uses the file
+ junkbstr.ini as the config file if it exists
+ and no argument was given. If you have an earlier version
+ or if you want it to use a different config file, simply
+ specify that file as the argument.)
junkbstr executable into
+ the StartUp folder:C:\Windows\Start
+ Menu\Programs\StartUp
+ Properties->Shortcut to Run:
+ Minimized. If you specify the hide-console option then the
+ DOS window will vanish after it starts.
+
+ WinNT users can put it into their own + StartUp folders or the Administrator can put it into the + system's global StartUp folder. For details on how to make + this a service under NT see our Windows page.
+Pick a page from somewhere (such as your bookmarks, or just
+ one that your browser was pointing to) and
+ Reload it. If you get a message along the lines of ``server
+ not responding, using cached copy instead,'' see the advice
+ above. If the page reloads OK, check that your browser is
+ actually talking to the proxy by going to
+ http://internet.junkbuster.com/cgi-bin/show-proxy-args or any
+ URL ending in show-proxy-args (as described below,
+ the proxy should intercept the request.) When you see
+ ``Internet Junkbuster Proxy Status,'' you'll know it's
+ working.
You may need the + forwarding feature to ``daisy chain'' the Internet + Junkbuster to another proxy, perhaps an anonymizing proxy to + conceal your IP address, or a caching proxy from your ISP, or a + firewall proxy between your company and the outside world. + Version 2.0 and above can be even configured to forward selectively according to the + URL requested: for example, connecting directly to trusted + hosts, but going through an anonymizing or firewall proxy for + all other hosts.
+ +Network administrators might use + it to provide transparent access to multiple networks without + modifying browser configurations. Most + browsers also provide a way of specifying hosts that the + browser connects to directly, bypassing the proxy. Some provide + a method for Automatic Proxy Configuration. A well written + Internet Junkbuster configuration can be much more flexible and + powerful.
+ +An ISP's caching proxy would typically
+ be called something like cache.your-isp.net:8080
+ (as described on you ISP's web page); you would put this
+ information in your
+ forwardfile as described in our manual. Your browser would
+ be configured to the Internet Junkbuster for HTTP and Security
+ Proxies as before, but you probably want to tell it to use the
+ caching proxy for FTP and other protocols.
+ If your ISP is running the Internet Junkbuster for you,
+ they have probably already decided whether to chain with a
+ caching proxy.
There is support for some gateways in Version 1.4 and above.
+ The gateway protocol used to be specified on the command line;
+ it is now specified in the same file as forwarding. Note that the
+ browser's proxy configuration must not specify a
+ SOCKS host; it should specify the proxy as
+ described above.
To get the proxy to do as little as possible (which means
+ not deleting any sensitive headers), place in your
+ configuration file the following three lines (each ending in a
+ space then a period) to stop it changing sensitive headers:
+ referer .
+ from .
+ user-agent .
+ cookiefile mycookiefile
+ The fourth line is also needed to specify a cookiefile that might be called
+ mycookiefile containing a single line with a
+ * character, to allow all cookies through.
It depends on your platform.
+ +
+ kill the junkbuster process. If you don't know the process number to give
+ to kill, try this:ps ax | grep junkbusterWe've seen only a few public comments from the advertising + industry on this, other than SEC filings. First, the president + of the Internet Advertising Bureau told CNET that he wasn't + worried by banner blockers. Second, after the Federal Trade + Commission's workshop where we gave a live demonstration of our + proxy before many eminent representatives of the industry, the + Direct Marketing Association made the following statement in + the closing paragraphs of their summary comments to the + Commission.
+ ++ Clever shareware developers have come up with products that + can obliterate cookies and advertisements for those consumers + who have these concerns. The Internet is a market that is so + democratic and flexible that it is easy for companies and + software developers to respond to a perceived market need. ++ +
Their attitude seems to be that they would prefer that + people use technical solutions to protect their privacy than + have protections imposed by legislation or government + regulations. So, do you perceive a market need? Then here are + some ways to flex your democratic muscles.
+ +That depends. Try this quick three-point test.
+ +If the answer to all three questions is yes, then you + probably don't have any need for this kind of product.
+ +Yes, ask us for a quote on a maintenance contract with your + choice of phone and email support, hard copy documentation, + source code and pre-compiled binaries on tape or disk, and + email alerting of upgrades and issues. We also offer consulting + services to help set up ``stealth browsing'' capabilities to + help reduce the footprints left while doing competitive + analysis and other Web work where confidentiality is + critical.
+ +Many ISPs who offer the proxy to their customers have told + us that most of their customers are delighted with it (although + one reported that a customer complaint that without banner ads, + surfing was like reading a novel: we recommend making it + optional). Many ISPs like it because it reduces bandwidth + requirements. To help get you started, here's a checklist we've + developed from working with a few ISPs. You may think of more, + and we'd be interested if you're willing to share them with + us.
+ +* in it), User Agent specified as Lynxour-isp.net. But it would probably be
+ safer to put an entry in your name server and call it
+ something like junkbuster.our-isp.net. If
+ running several proxies, you could either use different ports
+ on the same machine, or if you have the opportunity to
+ distribute the load over a few machines you could use
+ different hostname aliases such as
+ banner.junkbuster.our-isp.net,
+ lynx.junkbuster.our-isp.net and
+ oneway.junkbuster.our-isp.net (corresponding to the
+ examples in the previous point). You may want to set up
+ Automatic Proxy Configuration.
+ blocklist.html or
+ blocklist.txt).The sample blockfile we provide blocks almost nothing, and
+ we do not publish blockfiles that stop almost all banner ads.
+ But others have; you can find them by asking Google. You can
+ add any part of the new file to your old one (probably called
+ sblock.ini if you haven't changed the default name
+ in the latest version) or your just replace it completely. You
+ probably don't need to restart the proxy.
If you develop an interesting blocklist + and publish it on the Web, you might want to include the word + ``junkbuster'' in it and use the word ``blocklist'' in the file + name given in the URL so that others can find it with the query + given in the previous sentence.
+ +If your ISP is running the Internet Junkbuster, they should + have a policy on whether they accept suggestions from their + customers on what to block. Consult their web page.
+ +If you are running the Internet + Junkbuster yourself, you have complete control over what gets + through. Just add a pattern to cover the offending URL to your + blockfile. Version 1.3 and later automatically rereads the + blockfile when it changes, but if you're running an earlier + version you'll have to stop it and restart it.
+ +To choose a pattern you'll first need + to find the URL of the ad you want cover.
+ +Some people use the debug 1 option to display
+ each URL in a window as the request is sent to the server. It's
+ then usually an easy task to pick the offending URL from the
+ list of recent candidates.
Alternatively, you can use View Document Info (or View Document
+ Source if your browser doesn't have that). The Info feature has the advantage of showing you the full
+ URL including the host name, which may not be specified in the
+ source: there you might see something like
+ SRC="/ads/click_here_or_die.gif" indicating only the
+ path. (The host name is assumed to be the same
+ as the one the page came from.)
But ads often come from a different
+ site, in which case you might see something like
+ SRC="grabem.n.trackem.com/Ad/Infinitum/SpaceID=1666" or
+ longer. If the company looks like a
+ pure ad warehouse (as in the last case), you may want to place
+ just its domain name in the blockfile, which blocks all URLs
+ from that site.
If the ad comes from a server that you
+ really want some content from, you can include enough of the
+ path to avoid zapping stuff you might want. In the first
+ example above, /ads/ would seem to be enough. If
+ you don't include the domain name, the pattern applies to all
+ sites, so you don't want such patterns to be too general: for
+ example /ad would block
+ /admin/salaries/ on your company's internal site.
To speed the blocking of images, some
+ UNIX ® users create a shell script called
+ Image: containing a line such as echo $1 | sed
+ s/http:..// >> $HOME/lib/blockfile that adds its
+ argument to the user's blockfile. Once an offending image has
+ been be found using View Document Info it's
+ easy to cut-and-paste the line (or part of it) into a shell
+ window. The same script can be linked to a file called
+ Frame: to dealing with framed documents, and
+ junkbuster: to accept the output of the debug option.
When compiled without the
+ regular expressions option, the Internet Junkbuster
+ uses only very simple (and fast) matching methods. The pattern
+ /banners will not stop
+ /images/banners/huge.gif getting through: you would have
+ to include the pattern /images/banners or
+ something that matches in full from the left.
+ So you can get what you want here, the matcher understands
+ POSIX regular expressions: you can use
+ /*.*/banners to block and any URL containing
+ /banners (even in the middle of the path). (In Versions 1.1 through 1.4 they were an option at
+ compile time; from Version 2.0 they have become the default.)
+ Regular expressions give you many more features than this, but
+ if you're not already familiar with them you probably won't
+ need to know anything beyond the /*.*/ idiom. If
+ you do, a man egrep is probably a good starting
+ point).
Don't forget the / (slash)
+ at the beginning of the path. If you leave it out the line will
+ be interpreted as a domain name, so ad would block
+ all sites from Andorra (since .ad is the
+ two-letter country code for that principality).
For a detailed technical description of + how pattern matching is done, see the manual.
+ +If the ad had been displayed before you included its URL in
+ the blockfile, it will probably be held in cache for some time,
+ so it will be displayed without the need for any request to the
+ server. Using the debug
+ 1 option to show each URL as it is fetched is a good way
+ to see exactly what is happening.
If new items seem to be getting + through, check that you are really running the proxy with the + right blockfile in the options. Check the blockfile for + exceptions.
+ +Some sites may have different ways of + inserting ads, such as via Java. If you have ideas on how to + block new kinds of junk not currently covered, please tell + us.
+ +You can change the patterns so they don't cover it, or use a
+ simple feature in Version 1.1 and later: a line beginning with
+ a ~ character means that a URL blocked by previous
+ patterns that matches the rest of the line is let through. For
+ example, the pattern /ad would block
+ /addasite.html but not if followed by
+ ~/addasite in the blockfile. Or suppose you want to see
+ everything that comes from a site you like, even if it looks
+ like an ad: simply put ~aSiteYouLike.com at the
+ end of the blockfile. (Order is important, because the
+ last matching line wins.)
As well as unblocking pages that were + unintentionally blocked, this feature is useful for unblocking + ads from a specific source. This might be because you are + interested in those particular ones, or if you have an explicit + agreement to accept certain ads, such as those from a free + web-based email provider.
+ +If you want to find out exactly which + pattern in the blockfile a given URL matched, just click on the + words ``Internet Junkbuster'' which are displayed alone on a + page when your browser requests a blocked URL. The proxy + displays a message that pinpoints the pattern for you.
+ +Yes, but remember that children who are + technically sophisticated enough to use the browsers' proxy + configuration options could of course bypass any proxy. This + kind of technology can be used as a gentle barrier to remind or + guide the child, but nobody should expect it to replace the + parent's role in setting and enforcing standards of online + behavior for their children.
+ +Some ISPs are starting to provide + specialized proxies to protect children. There are two basic + approaches: the ``black list'' and the ``white list'' approach. + The black list approach allows the child + to go anywhere not explicitly prohibited; the white list + permits visits only to sites explicitly designated as + acceptable.
+ +It's very easy for anyone to compile
+ a white list from a page of ``recommended kids sites'' and to
+ configure an Internet Junkbuster to allow access to those sites
+ only. (If you publish such a list on the web, please tell us
+ its URL). Assuming your version isn't an old one without regex,
+ you can place a * (asterisk) as the first line of
+ the blockfile (which blocks everything), and then list
+ exceptions after that. Be careful to make the exception
+ sufficiently broad: for example, using
+ ~www.uexpress.com/ups/comics/ch/ as the exception for
+ Calvin and Hobbes would block some of the graphic
+ elements on the page; you would probably want a wider exception
+ such as ~www.uexpress.com/ups/ to permit them.
Version 2.0 has an experimental feature + to permit only sites mentioned in a nominated trusted site. This allows + organizations to build lists of sites for kids to browse, and + the software automatically restricts access to those on the + list.
+ +Many filtering products actually scan for + keywords in the text of pages they retrieve before presenting + it, but the Internet Junkbuster does not do this. Building a + perfectly reliable black list system is hard, because it's very + difficult to state in advance exactly what is obscene or + unsuitable. For more info see our links page.
+ +You usually see a broken image icon, but it depends on + several factors beyond the proxy's control. If asked for a URL + matching its blockfile, the proxy returns an HTML page + containing a message identifying itself (currently the two + words ``Internet Junkbuster'') with a status 202 (Accepted) + instead of the usual 200 (OK). (Versions 1.X returned an error + 404: Forbidden, which caused strange behavior in some cases.) + Status 202 is described in the HTTP RFC as indicating that the + request has been accepted but not completed, and that it might + complete successfully in the future (in our case, if the + blockfile were changed).
+ +The broken image icon is most common
+ because the browser is usually expecting a graphic. But if it
+ was expecting text, or if the page happens to be using certain
+ HTML extensions such as layer and your browser is
+ a late model from Microsoft, you may see the words ``Internet
+ Junkbuster'' displayed as a hot link.
Clicking on the link takes you to an
+ explanation of the pattern in the blockfile that caused the
+ block, so that you can edit the blockfile and go back and
+ reload if you really want to see what was blocked. The
+ explanatory link is generated by the proxy and is automatically
+ intercepted based on its ending in ij-blocked-url;
+ even though the site is specified as
+ http://internet.junkbuster.com no request should
+ actually made to that site. If one is, it means that the proxy
+ was been removed after it generated the link.
To summarize: the identifying link to + the blocking explanation is usually turned into a broken image + icon, but it may be displayed on a page alone, or they may may + be restricted to the particular frame, layer or graphic area + specified in the page containing them. The proxy has no way of + knowing the context in which a URL will be used and cannot + control how the blocking message will be rendered.
+ +Many users have suggested to us that + blocked banners should be replaced by a something like a 1x1 + transparent GIF to make the page would look as if there was + nothing ever there. Apart from making it harder to catch + unintended blocking, this might also displease the owners of + the page, who could argue that such a change constitutes a + copyright infringement. We think that merely failing to allow + an included graphic to be accessed would probably not be + considered an infringement: after all this is what happens when + a browser is configured not to load images automatically. + However, we are not lawyers, so anyone in doubt should take + appropriate advice.
+ +In a context where the copyright issue is
+ resolved satisfactorily, a proxy could simply return a status
+ 301 or 302 and specify a replacement URL in a
+ Location and/or URI header. An alternative
+ would be to use inline code to return a 1 x 1 clear GIF. We do
+ not publish sample code for this, and we have no way of
+ stopping others who have.
Many users have pointed out that most banner ads come in
+ standard sizes, so why not block all GIFs of those sizes? This
+ would theoretically be without fetching the object because the
+ dimensions are usually given in the IMG tag, but
+ it would require substantial changes in the code, and we doubt
+ whether it would be much more effective than a good block
+ list.
The Internet Junkbuster deliberately does not provide a way + of automatically editing the contents of a page, to remove + textual advertising or to repair the holes left by blocked + banners. Other packages such as WebFilter do.
+ +For the same reason, it has no way of
+ stopping a new browser window being created, because this is
+ done through the target attribute in the
+ <a> and <base> elements, not
+ through headers. Nor do we plan to add a feature to paralyze
+ animated GIFs.
We haven't tried it but we expect it would probably work on + image ads on push channels. See also adchoice.
+ +Disabling Javascript stops some pop-up + ads. One problem is that some advertisers throw open a new + browser window to frame the ad. The ad is easily blocked, but + the empty window remains. You can kill it easily, but this is a + chore. We don't see how to stop them other than editing the + HTML from the parent window, which we don't like to do.
+ +The TBTF newsletter warned subscribers to + push information that in IE4, LOGTARGET + allows servers to determine the URLs viewed at their site even + if accessed from cache or through a proxy. If you use this + browser see our instructions on how to disable this.
+ +If you find you have experience using + the proxy with push, or have any other advice about it, please + tell us.
+ + + +For background information on cookies see our page + describing their dangers.
+ +Yes, you should expect the occasional cookie to make it + through to your browser. We know of at least three ways this + can happen; please tell us if you find any others. One way is + in secure documents, which are explained below.
+ +A few sites set cookies using a line
+ such as <META HTTP-EQUIV="Set-Cookie"
+ CONTENT="flavor=chocolate"> in the HEAD
+ section of an HTML document. Cookies
+ can also be
+
+ set and read in JavaScript. To see if this is happening in a
+ document, view its source, look in the head for a
+ section tagged script language="JavaScript". If it
+ contains a reference to document.cookie, the page
+ can manipulate your cookie file without sending any cookie
+ headers. The Internet Junkbuster does not tamper with these
+ methods. Fortunately they are rarely used at the moment. If a
+ cookie gets set, it should be stopped by the proxy on its way
+ back to the server when a page is requested, but it can still
+ be read in Javascript.
To prevent cookies breaking through, + always keep cookie alerts turned on in your + browser, and disable Java and Javascript. Making the files hard + to write may also help.
+ +When a web site's server sends you a page it also sends
+ certain ``header information'' which your browser records but
+ does not display. One of these is a Set-Cookie
+ header, which specifies the cookie information that the server
+ wants your browser to record. Similarly, when your browser
+ requests a page it also sends headers, specifying information
+ such as the graphics formats it understands. If a cookie has
+ previously been set by a site that matches the URL it is about
+ to request, your browser adds a Cookie header
+ quoting the previous information.
For more background information on how
+ cookies can damage your privacy, see our page on cookies. For
+ highly detailed technical information see the RFC. The Internet
+ Junkbuster will show you all headers you use the debug 8 option, or you can
+ get a sample from our demonstration page.
Possibly. Some personalized services including certain + chat rooms require cookies. + Newspapers that require + + registration or + + subscription will not automatically recognize you if you don't + send them the cookie they assigned you. And there are a very + small number of sites that do strange things with cookies; they + don't work for anyone that blocks cookies by any means. Some + sites such as Microsoft explain that their content is so + wonderfully compelling that they will withhold it from you + unless you submit to their inserting cookies.
+ +Many free Web-based email services
+ require cookies. Hotmail also seems to require allowing both
+ msn.com and passport.com to set
+ cookies.
If you want such sites to be given your + cookies, you can use the + cookiefile option provided you are running Version 1.2 or + later yourself. Simply include the domain name of those sites + in the cookiefile specified by this option. If it still + doesn't work, the problem may be in other headers.
+ +It's possible to let cookies out but not
+ in, which is enough to keep some sites happy, but not all of
+ them: one newspaper site seems to go into an endless frenzy if
+ deprived of fresh cookies. A cookiefile containing a single
+ line consisting of the two characters >*
+ (greater-than and star) permits server-bound cookies only. The
+ * is a wildcard
+ that matches all domains.
If someone else is running the Internet + Junkbuster for you and has a version that + passes server-bound + cookies through, you can try editing your browser's cookie file + to contain just the ones you want, and restart your browser. To subscribe to a new service like this after + you have started using the Internet Junkbuster, you can try the + following: tell your browser to stop using the Internet + Junkbuster, fill out and submit your subscription details + (allowing that web site to set a cookie), then reconfigure your + browser to use the Internet Junkbuster again (and stop more + cookies being sent). This also requires the cookiefile option, and its success + depends on the Web site not wanting to change your cookies at + every session. For this reason it does not work at some major + newspaper sites, for example. But you may + prefer to look at whether other sites provide the same or + better services without demanding the opportunity to track your + behavior. The web is a buyer's market where most prices are + zero: very few people pay for content with money, so why should + you pay with your privacy?
+ +Yes, since version 1.2 the Internet + Junkbuster has included advanced cookie management facilities. + Unless you specify otherwise, cookies are discarded + (``crumbled'') by the Internet Junkbuster whether they came + from the server or the browser. In Version 1.2 and later you + can use the cookiefile + option to specify when cookies are to be passed through intact. + It uses the same syntax and + matching algorithm as the blockfile.
+ +If the URL matches a pattern in the
+ cookiefile then cookies are let through in both
+ the browser's request for the URL and in the server's response.
+ One-way permissions can be specified
+ by starting the line with the > or
+ < character. For example, a cookiefile consisting of
+ the four lines
+ org
+ >send-user-cookies.org
+
+ <accept-server-cookies.org
+ ~block-all-cookies.org
+ allows cookies to and from .org domains only,
+ with the following exceptions:
+
send-user-cookies.org are blocked on their way
+ to the client, but cookies sent by the browser to that domain
+ are still be fed to them.
+ accept-server-cookies.org check in to the proxy and
+ are passed through to the browser, but when they come back to
+ the proxy they never check out.
+ block-all-cookies.org are blocked.If the junkbuster
+ was compiled with the regular expressions option they may be
+ used in paths. Any logging to a ``cookie jar'' is separate and
+ not affected.
It's important to give hosts you want
+ to be able to set cookies sufficient breadth. For example,
+ instead of www.yahoo.com use
+ yahoo.com because the company uses many different hosts
+ ending in that domain.
Yes, using the wafer option. + We coined the term wafer to describe cookies + chosen by a user, not the Web server. Servers may not find + wafers as tasty as the cookies they make themselves. But users + may enjoy controlling servers' diets for various reasons, such + as the following.
+ +++ Any company that tries to argue in court that the proxy + site was breaching their copyright in the cookies would be + met with the defense that the proxy site gave that company + the opportunity to protect its copyright by simply not + sending cookies after receiving the notice. + +TO WHOM IT + MAY CONCERN
+
+
+ Do not send me any copyrighted information other than + the document that I am requesting or any of its necessary + components.
+
+ In particular do not send me any cookies that are + subject to a claim of copyright by anybody. Take notice + that I refuse to be bound by any license condition + (copyright or otherwise) applying to any cookie.
Cookies can be as long as four
+ thousand characters, so there's plenty of space for
+ lawyerly verbosity, but white space, commas, and
+ semi-colons are prohibited.
+ Spaces can be turned into underscores. Alternatively, a URL
+ could be sent as the cookie value, pointing to a document
+ containing a notice, perhaps with a suggestive value such
+ as
+
+ http://www.junkbusters.com/ht/en/ijbfaq.html#licenses_on_cookies_refused
+
+ But including the notice directly would probably be
+ preferable because the addressee does not have to look it
+ up.
The Internet Junkbuster 2.0.2 + currently sends a full notice as a ``vanilla wafer'' if + cookies are being logged to a cookie jar and no other + wafers have been specified. It can be suppressed with the + + suppress-vanilla-wafer option, which might be used in + situations where there is an established understanding + between the proxy and all who serve it.
+Junkbusters provides a CGI script that + lets you see your wafers as they appear to servers.
+ +Wafers confuse a few fragile + servers. Hotmail appears to be one of them. If this troubles + you, don't use this option.
+ +Any wafers specified are sent to
+ all sites regardless of the cookiefile.
+ They are appended after any genuine cookies, to maintain
+ compliance with RFC 2109 in the event that a path was specified
+ for a cookie. The RFC's provisions regarding the $
+ character (such as the Version attribute) are
+ transparent to the proxy; it simply quotes what was recited by
+ the browser.
If you want to send wafers only to + specific sites, you could try putting them your browser's + cookie file in a format conforming to the Netscape + specification, and then specify in the proxy's cookiefile that + cookies are to be sent to but not accepted from those sites, so + they can't overwrite the file. This may work with Netscape but + not all other browsers.
+ +We provided this capability just in case anyone wants it. + There are a few possible reasons.
+ +For details on how your identity can be revealed while you
+ surf, see our page on privacy. Once you start using the
+ Internet Junkbuster you should find that much of the
+ information previously indicated on that page will no longer be
+ provided. If the REMOTE HOST indicating your IP
+ address is too close for comfort, see our suggestions below on
+ how to conceal your IP address. We also recommend that you
+ disable JavaScript and Java.
No. Your chances of remaining anonymous are improved, but + unless you are an expert on Internet security it would be + safest to assume that everything you do on the Web can be + attributed to you personally.
+ +The Internet Junkbuster removes various + information about you, but it's still possible that web sites + can find out who you are. Here's one way this can happen.
+ +A few browsers disclose the user's email + address in certain situations, such as when transferring a file + by FTP. The Internet Junkbuster 2.0.2 does not filter the FTP + stream. If you need this feature, or are concerned about the + mail handler of your browser disclosing your email address, you + might consider products such as NSClean.
+ +Browsers downloaded as binaries could + use non-standard headers to give out any information they can + have access to: see the manufacturer's license agreement. It's + impossible to anticipate and prevent every breach of privacy + that might occur. The professionally paranoid prefer browsers + available as source code, because anticipating their behavior + is easier.
+ +You shouldn't have to trust us, and you certainly don't have + to. We do not run the proxy as a service, where we could + observe your online behavior. We provide source code so that + everyone can see that the proxy isn't doing anything + sneaky.
+ +You are already trusting your ISP not to + look at an awful lot of information on what you do. They + probably post a privacy policy on their site to reassure you. + If they run a proxy for you, using it could actually make it + slightly easier for them to monitor you, but we doubt that any + sane ISP would try this, because if it were discovered + customers would desert them.
+ +We don't want institutions to use this software as an + instrument of surveillance. We have deliberately not provided + options to add timestamps or records of which IP addresses + accessed which URLs. However, because we publish source code + anyone can modify it to do such things, and there is no way a + remote user can find out if this is happening. Again, you need + to be able to trust the entity providing your proxy service, + but you were probably in that position even before using a + proxy.
+ +The Internet Junkbuster pounces on the following HTTP + headers in requests to servers, unless instructed otherwise in + the options.
+ +FROM header, which a
+ few browsers use to tell your email address to servers, is
+ dropped unless the from option
+ is set.USER_AGENT header is changed to indicate that the browser is
+ currently Mozilla (Netscape) 3.01 Gold with an unremarkable
+ Macintosh configuration. Misidentification helps resist
+ certain attacks. If your browser and hardware happen to be
+ accurately identified, you might want to change the default.
+ (Earlier versions of the Internet Junkbuster indicated
+ different details; by altering them periodically we aim to
+ hinder anyone trying to infer whether our proxy is present.)
+ If you don't like the idea of incorrectly
+ identifying your computer as a Mac, set it accordingly.
+ REFERER header
+ (which indicates where the URL currently being requested was
+ found) is dropped. A single static referer to replace all
+ real referers may be specified using the referer option. Where no referer is
+ provided by the browser, none is added; the add-header option with arguments
+ such as -x 'Referer: http://me.me.me' can be
+ used to send a bogus referer with every request.In Version 1.4 and later you can use the -r @ option to selectively disclose
+ REFERER and USER_AGENT to only those
+ sites you nominate.
Some browsers send Referer and User-Agent
+ information under different non-standard headers. The Internet
+ Junkbuster 2.0.2 stops UA headers, but others may
+ get through. This information is also available via JavaScript,
+ so disable it. Some search engines
+ encode the query you typed in the URL that goes to advertisers
+ to target a banner ad at you, so you will need to block the ad
+ as well as the referer header, unless you want them (and anyone
+ they might buy data from) to know everything you ever search
+ for.
If you have JavaScript enabled (the + default on most browsers) servers can use it to obtain Referer + and User Agent, as well as your plug-ins. We recommend + disabling JavaScript and Java.
+ +Currently no HTTP response headers
+ (browser bound) are removed, not even the
+ Forwarded: or X-Forwarded-For: headers. Nor
+ are any added, unless requested.
+ We are considering a more flexible header management system for
+ a future version.
Possibly. If used with a browser less advanced than Netscape + 3.0 or IE-3, indicating an advanced browser may encourage pages + containing extensions that confuse your browser. If this + becomes a problem upgrade your browser or use the user-agent option to indicate an + older browser. In Version 1.4 and later you can selectively + reveal your real browser to only those sites you nominate.
+ +Because different browsers use + different encodings of Russian and Czech characters, certain + web servers convert pages on-the-fly according to the User + Agent header. Giving a User Agent with the wrong operating + system or browser manufacturer causes some sites in these + languages to be garbled; Surfers to Eastern European sites + should change it to something + closer.
+ +Some page access counters work by + looking at the referer; they may fail or break when + deprived.
+ +Some sites depend on getting a referer
+ header, such as uclick.com, which serves comic
+ strips for many newspaper sites, including
+ Doonsbury for the Washington Post. (If you
+ click on that last link, you can then get to a page containing
+ the strip via the same URL we've linked to under
+ Doonsbury, but if you click on the
+ Doonsbury link directly, it gives you an error message
+ suggesting that you use a browser that supports referers.) In
+ Version 1.4 and later you can use the -r @ option and place a line like
+ >uclick.com in your cookiefile. Wired News used to
+ use referer to decide whether to add a navigation column to the
+ page, but they have changed that.
The weather maps of Intellicast
+ have been blocked by their server when no referer or cookie is
+ provided. You can use the same countermeasure with a line such
+ as >208.194.150.32 (or simply get your weather
+ information elsewhere).
Some software vendors, including
+ Download.com and Intuit use USER_AGENT to decide
+ which versions of their products to display to you. With the
+ default you get Mac versions.
As a last resort if a site you need + doesn't seem to be working, the proxy configuration of many + browsers allow you to specify No Proxy For + any hostname you want.
+ +We had reports that on some versions of + Netscape the What's New feature did not work with the proxy, + but we think we fixed this in Version 2.0.1.
+ +Almost every major release of both leading browsers has + contained bugs that allow malicious servers to compromise your + privacy and security. Known bugs are quickly fixed, but + millions of copies of the affected software remain out there, + and yours is probably one of them. The header that normally + identifies your browser tells such servers exactly which + attacks to use against you. By misidentifying your browser you + reduce the likelihood that they will be able to mount a + successful attack.
+ +Web sites get the IP address of any proxy or browser they + serve pages to. If you run the proxy on your own computer the + IP address disclosed is the same as your browser would, unless + you use the forwardfile + option is used to chain to another proxy, in which case servers + only get the last IP address in the chain. Chaining slightly + slows browsing of course, but it improves anonymity.
+ +We think so, provided you are not the user running the
+ proxy. If your computer (or your ISP's) is running the
+ identd demon, servers can ask it for the identity of the
+ user making the request at time you request a page from them.
+ But if you're going through a proxy, they will identify the
+ user name associated with the proxy, not you. A visit to
+ http://ident.junkbusters.com lets you see what's happening.
+ This test is (quite rightly) blocked by many firewalls; just
+ interrupt the transfer if you get an abnormal wait after
+ clicking. Running other applications may also expose you via
+ identd; the proxy of course doesn't help then.
With the default options the proxy doesn't announce itself. + Obvious indications such as Keep-Alive headers are deleted, but sites might notice that you + can cancel cookies faster than any human could possibly click + on a mouse. (If you want to provide a plausible explanation for + this, change the User Agent header to a cookie-free or + cookie-crunching browser).
+ +But when certain options are used they + could figure out something's going on, even if they're not + pushing cookies. If you use blocking they can tell from their + logs that the graphics in their pages are not being requested + selectively. The + add-forwarded-header option explicitly announces to the + server that a proxy is present, and sending them wafers is of + course a dead giveaway.
+ + + +If you enter a ``Secure Document Area,'' cookies and other
+ header information such as User Agent and Referer are sent
+ encrypted, so they cannot be filtered. We recommend getting
+ your browser to alert you when this happens. (On Netscape: Options; Security; General; Show an alert before entering a
+ secure document space.) We also recommend adding the line
+ :443 to the blockfile to stop all but sites
+ specified in an exception after that line from using SSL.
It may be possible to filter encrypted + cookies by combining the blocking proxy with a cryptographic + proxy along the lines of SafePassage, but we have not tried + this.
+ +We're not security experts, but we don't think so. The whole + point of SSL is that the contents of messages are + + encrypted by the time they leave the browser and the server. + Eavesdroppers (including proxies) can see where your messages + are going whether you are running a proxy or not, but they only + get to see the contents after they have been encrypted.
+ +Yes, we added an access + control file in Version 2.0. But before you use it please + consider why you want to do it. If the reason is security, it + probably means you need a firewall.
+ +The listen-address option provides + a way of binding the proxy to a single IP address/port. The + right way to do this is to choose a port inside your firewall, + and deny access to it to those outside the firewall. The + Internet Junkbuster is not a firewall proxy; it should not be + expected to solve security problems.
+ +For background information on + firewalls, see Yahoo or a magazine article or these well-known + books: Firewalls and Internet Security: Repelling the + Wily Hacker by William R. Cheswick and Steven M. + Bellovin or Building Internet Firewalls by D. + Brent Chapman and Elizabeth D. Zwicky. There's + + free Linux software available, and a large number of commercial + products and services. For an excellent security overview, + primer, and compendium reference, see Practical Unix and + Internet Security by Simson Garfinkel and Gene + Spafford.
+ +Yes. As with any service offered over the Internet, hackers + can try to misuse it. A well-run ISP will have professionals + who are experienced at assessing and containing these + risks.
+ +It's possible to set up your machine + so that other people can have access to your proxy, but if you + lack expertise in computer security you probably shouldn't have + your computer configured to offer this or any other service to + the outside world.
+ +Hackers can attempt to gain access to
+ the machine by various attacks, which we have tried to guard
+ against but don't guarantee to thwart. They can also use the
+ ``anonymizing'' quality of proxies to try to cover their tracks
+ while hacking other computers. For this reason we recommend
+ preventing it being used as an anonymous telnet by
+ putting the pattern :23 in the blockfile (it's
+ included as standard equipment). (Actually the current
+ implementation incidentally blocks telnet due to the way
+ headers are handled, but it's best not to rely on this.) If you
+ wish to block all ports except the default HTTP port 80, you
+ can put the lines
+ :
+ ~:80
+ at the beginning of the blockfile, but be aware that some
+ servers run on non-default ports (e.g. 8080). You might also
+ want to add the line ~:443 to allow SSL.
On UNIX ® systems it is neither + necessary nor desirable for the proxy to run as root.
+ +Versions 2.0.1 and below may be + vulnerable to remote exploitation of a memory buffer bug; for + security reasons all users are encouraged to upgrade.
+ +If you find any security holes in the + code please tell us, along with any suggestions you may have + for fixing it. However, we do not claim that we will be able to + do so.
+ +We distribute this code in the hope + that people will find it useful, but we provide no warranty for + it, and we are not responsible for anyone's use or misuse of + it.
+ +You may also want to check back + periodically for updated versions of the code. We do not + currently maintain a mailing list. To get quick updates, + bookmark our Distribution Information page.
+ + + ++ Website · + Manual · FAQ · GPL
+ ++ Copyright © 1996-8 Junkbusters ® + Corporation. Copyright © 2001 + Jon + Foster. Copying and distribution permitted under the GNU General Public + License.
+ +
+ http://sourceforge.net/projects/ijbswa/
+ Website · Manual · FAQ · GPL
+ ++ Options · + Checking Options · Installation · Copyright · (FAQ)
+ +Development of JunkBuster is ongoing and this document is + no longer current. However, it may provide some assistance. If + you have problems, please use the Yahoo Groups + mailing list (which includes an archive of mail), the + SourceForge.net project page, or + see the project's home + page. Please also bear in mind that versions 2.9.x of + JunkBuster are development releases, and are not production + quality.
+ +A copy of this page in standard man macro
+ format is included in the tar
+ archive.
junkbuster - The Internet Junkbuster
+ Proxy
+ TM
junkbuster configfile (Unix)
+ junkbstr.exe [configfile]
+ (Windows)
junkbuster is an instrumentable proxy
+ that filters the HTTP stream between web servers and browsers.
+ Its main purposes are to block adverts and enhance privacy.
It is configured using a configuration
+ file and several files listing URL patterns. The
+ configuration file must be specified on the command line.
+ The Windows version will default to using the configuration
+ file junkbstr.ini if it exists and no argument was
+ given.
All files except the main configuration + file are checked for changes before each page is fetched, so + they may edited without restarting the proxy.
+ +blockfile
+ blockfileBlock requests to
+ URLs matching any pattern given in the lines of the
+ blockfile. The junkbuster instead
+ returns status 202, indicating that the request has been
+ accepted (though not completed), and a message identifying itself (though
+ the browser may display only a broken image icon).
+ The syntax of a pattern is
+ [domain][:port][/path] (the http:// or
+ https:// protocol part is omitted). To decide
+ if a pattern matches a target, the domains are compared
+ first, then the paths.
To compare the domains, the
+ pattern domain and the target domain specified in the URL
+ are each broken into their components. (Components are
+ separated by the . (period) character.) Next
+ each of the target components is compared with the
+ corresponding pattern component: last with last,
+ next-to-last with next-to-last, and so on. (This is called
+ right-anchored matching.) If all of the
+ pattern components find their match in the target, then the
+ domains are considered a match. Case is irrelevant when
+ comparing domain components.
A successfully matching pattern
+ can be an anchored substring of a target, but not vice
+ versa. Thus if a pattern doesn't specify a domain, it
+ matches all domains. Furthermore,
+ when comparing two components, the components must either
+ match in their entirety or up to a wildcard *
+ (star character) in the pattern. The wildcard feature
+ implements only a "prefix" match capability ("abc*" vs.
+ "abcdefg"), not suffix matching ("*efg" vs. "abcdefg") or
+ infix matching ("abc*efg" vs. "abcdefg"). The feature is
+ restricted to the domain component; it is unrelated to the
+ optional regular expression feature in the path (described below).
If a numeric port is specified in + the pattern domain, then the target port must match as + well. The default port in a target is port 80.
+ +If the domain and port match, then
+ the target URL path is checked for a match against the path
+ in the pattern. Paths are compared with a simple
+ case-sensitive left-anchored substring comparison. Once
+ again, the pattern can be an anchored substring of the
+ target, but not vice versa. A path of /
+ (slash) would match all paths. Wildcards are not considered
+ in path comparisons.
For example, the target URL
+
+ the.yellow-brick-road.com/TinMan/has_no_brain
+ would be matched (and blocked) by the following
+ patterns
+ yellow-brick-road.com
+ and
+ Yellow*.COM
+ and
+ /TinM
+ but not
+
+ follow.the.yellow-brick-road.com
+ or
+ /tinman
+
Comments in a blockfile start
+ with a # (hash) character and end at a new
+ line. Blank lines are also ignored.
Lines beginning with a
+ ~ (tilde) character are taken to be exceptions: a URL blocked by
+ previous patterns that matches the rest of the line is let
+ through. (The last match wins.)
Patterns may contain POSIX regular expressions provided the
+ junkbuster was compiled with this
+ option (the default in Version 2.0 on). The idiom
+ /*.*/ad can then be used to match any URL containing
+ /ad (such as
+ http://nomatterwhere.com/images/advert/g3487.gif for
+ example). These expressions don't
+ work in the domain part.
In version 1.3 and later the + blockfile and cookiefile are checked for changes before + each request.
+wafer
+ NAME=VALUESpecifies a pair to be sent as a cookie with every + request to the server. + (Such boring cookies are called wafers.) This option + may be called more than once to generate multiple wafers. + The original Netscape specification prohibited semi-colons, + commas and white space; these characters will be + URL-encoded if used in wafers. + + + The Path and Domain attributes are not currently + supported.
+cookiefile
+ cookiefileEnforce the cookie management policy specified in the + cookiefile. If this option is not + used all cookies are silently crunched, so that users who + never want cookies aren't bothered by browsers asking + whether each cookie should be accepted. However, cookies + can still get + through via + JavaScript and SSL, so alerts should be left on.
+ +In Version 1.2 and later this
+ option must be followed by a
+ filename containing instructions on which sites are
+ allowed to receive and set cookies. By
+ default cookies are dropped in both the browser's request
+ and the server's response, unless the URL requested matches
+ an entry in the cookiefile. The matching algorithm
+ is the same as for the blockfile. A leading
+ > character allows server-bound cookies only; a
+ < allows only browser-bound cookies; a
+ ~ character stops cookies in both directions. Thus a
+ cookiefile containing a single line with the two characters
+ >* will pass on all cookies to servers but
+ not give any new ones to the browser.
jarfile
+ jarfileAll Set-cookie attempts by the server are logged to jarfile. If no wafer + is specified, one containing a canned notice (the vanilla + wafer) is added as an alert to the server unless the suppress-vanilla-wafer + option is invoked.
+suppress-vanilla-waferSuppress the vanilla wafer.
+from fromIf the browser discloses an
+ email address in the FROM header (most
+ don't), replace it with from. If from is set
+ to . (the period character) the FROM is
+ passed to the server unchanged. The default is to delete
+ the FROM header.
referer
+ refererWhenever the browser discloses the URL that led to the current request, + replace it with referer. If referer is set to + . (period) the URL is passed to the server + unchanged. If referer is set to @ (at) the URL is + sent in cases where the cookiefile specifies that a cookie + would be sent. (No way to send bogus referers selectively + is provided.) The default is to delete Referer.
+ +Junkbuster also accepts the
+ spelling referrer, which most dictionaries
+ consider correct.
user-agent
+ user-agentInformation disclosed by the browser about itself is replaced with the
+ value user-agent. If user-agent is set to
+ . (period) the User-Agent header is passed
+ to the server unchanged, along with any UA
+ headers produced by MS-IE (which would otherwise be
+ deleted). If user-agent is set to @ (at)
+ these headers are sent unchanged in cases where the
+ cookiefile specifies that a cookie would be sent, otherwise
+ only default User-Agent header is sent. That
+ default is Mozilla/3.0 (Netscape) with an unremarkable Macintosh configuration. If
+ used with a browser less advanced than Mozilla/3.0 or IE-3,
+ the default may encourage pages containing extensions that
+ confuse the browser.
listen-address
+ [host][:port]If host is specified, bind the
+ junkbuster to that IP address. If a port
+ is specified, use it. The default port is 8000; the default
+ host is localhost.
This default host setting means that you can only + connect to the proxy from ther local computer. This is a + security measure - if you allow anyone to use the proxy, + then hackers or fraudsters could use it to help hide their + identity. It also provides a lot of protection against any + undiscovered security flaws in JunkBuster - if they can't + connect to it, then they can't attack it.
+ +If you change this value, we recommend you either
+ set the host to localhost:
+ listen-address
+ localhost:8080
+ or, if you want to share a single internet
+ connection over your internal network, then set it to the
+ address of your internal ethernet card:
+ listen-address
+ 10.1.1.1:8080
+ (replace 10.1.1.1 with your internal IP address),
+ or set up an aclfile. To
+ make the proxy accessible from everywhere (e.g. if you're
+ using an access control list or if you just don't care
+ about security), specify just the port number - e.g:
+ listen-address :8000
+ (This binds the proxy to all IP addresses
+ (INADDR_ANY)).
forwardfile
+ forwardfileJunkbuster has a flexible syntax for forwarding HTTP + requests. This is used e.g. if you are behind a firewall + and need to connect through it, or if you want to use a + cacheing proxy to speed up your web browsing.
+ +Every line in the forwardfile consists of four
+ components, seperated by whitespace. These are:
+
+ target forward_to via_gateway_type
+ gateway
target is a pattern used to select which line of
+ the forwardfile is used. "*" is the most
+ commonly used value, and matches every URL. As usual, the
+ last matching target wins. (If no pattern matches, a
+ direct connection will be used)
forward_to specifies the HTTP proxy server to
+ use, or "." for none. This is used to connect
+ to a cacheing proxy such as Squid, and for most types of
+ firewall. The port number defaults to 8000 if it is not
+ specified.
Here is a typical line.
++* lpwa.com:8000 . . ++ +
The target domain need not be a fully qualified
+ hostname; it can be a general domain such as
+ com or co.uk or even just a port
+ number. For example, because LPWA does not handle SSL, the line above will
+ typically be followed by a line such as
+:443 . . . ++ +
to allow SSL transactions to proceed directly. The + cautious would also add an entry in their blockfile to stop + transactions to port 443 for all but specified trusted + sites.
+ +Configure with care: no loop + detection is performed. When setting up chains of proxies + that might loop back, try adding + Squid.
+ +via_gateway_type and gateway are used to
+ support SOCKS proxies. Some firewalls provide this type of
+ proxy. If you do not not want to use a SOCKS proxy, specify
+ both of these fields as ".".
Note that
+ JunkBuster is a SOCKS client, not a SOCKS
+ server. The user's browser should not be configured to use
+ SOCKS; the proxy conducts the negotiations, not the
+ browser.
The SOCKS4 protocol may be specified by
+ setting via_gateway_type to socks or
+ socks4. The SOCKS4A protocol is
+ specified as socks4a. The SOCKS5
+ protocol is not currently supported.
gateway should be the host and port of the SOCKS + server. If you just specify a hostname, then the port + number defaults to 1080.
+ +The user identification capabilities of
+ SOCKS4 are deliberately not used; the user is always
+ identified to the SOCKS server as
+ userid=anonymous. If the server's policy is to
+ reject requests from anonymous, the proxy will
+ not work. Use a debug value of 3 to see
+ the status returned by the server.
If you specify both a HTTP proxy (with + forward_to) and a SOCKS proxy (with gateway) + then the SOCKS proxy is used to connect to the HTTP proxy. + If you just specify a SOCKS proxy, it is used to connect + directly to the websites.
+debug NSet debug mode. The most common value is 1, to pinpoint offensive URLs, so they
+ can be added to the blockfile. The value of N is a
+ bitwise logical-OR of the following values:
+ 1 = URLs (show each URL requested by the browser);
+ 2 = Connections (show each connection to or from the
+ proxy);
+ 4 = I/O (log I/O errors);
+ 8 = Headers (as each header is scanned, show the header
+ and what is done to it);
+ 16 = Log everything (including debugging traces and the
+ contents of the pages).
+ 32 = Record accesses in Common Log Format, as used by most
+ web and proxy servers.
Multiple debug lines are
+ permitted; they are logical OR-ed together.
Because most browsers send several + requests in parallel the debugging output may appear + intermingled, so the + single-threaded option is recommended when using debug with N greater than 1. +
+add-forwarded-headerAdd X-Forwarded-For headers to the
+ server-bound HTTP stream indicating the client IP address
+ to the server, in the new
+ style of Squid 1.1.4. If you want the
+ traditional HTTP_FORWARDED response header,
+ add it manually with the -x option. This
+ also allows other X-Forwarded-For headers to
+ be transmitted - usually they are discarded.
add-header
+ HeaderTextAdd the HeaderText verbatim to requests to the
+ server. Typical uses include adding old-style forwarding
+ notices such as Forwarded: by
+ http://pro-privacy-isp.net and reinstating the
+ Proxy-Connection: Keep-Alive header (which the
+ junkbuster deletes so as not to reveal its existence). No
+ checking is done for correctness or plausibility, so it can
+ be used to throw any old trash into the server-bound HTTP
+ stream. Please don't litter.
+
single-threadedDoesn't fork() a separate process (or
+ create a separate thread) to handle each connection. Useful
+ when debugging to keep the process single threaded.
logfile
+ logfileWrite all debugging data into logfile. The + default logfile is the standard output.
+aclfile
+ aclfileUnless this option is used, the proxy talks to anyone + who can connect to it, and everyone who can has equal + permissions on where they can go. An access file allows + restrictions to be placed on these two policies, by + distinguishing some source IP addresses + and/or some destination addresses. (If a + forwarder or a gateway is being + used, its address is considered the destination address, + not the ultimate IP address of the URL requested.)
+ +Each line of the access file begins
+ with either the word permit or
+ deny followed by source and (optionally) destination
+ addresses to be matched against those of the HTTP request.
+ The last matching line specifies the result: if it was a
+ deny line or if no line matched, the request
+ will be refused.
A source or destination can be
+ specified as a single numeric IP address, or with a
+ hostname, provided that the host's name can be resolved to
+ a numeric address: this cannot be used to block all
+ .mil domains for example, because there is no single
+ address associated with that domain name. Either form may
+ be followed by a slash and an integer N,
+ specifying a subnet mask of N bits. For
+ example, permit 207.153.200.72/24 matches the
+ entire Class-C subnet from 207.153.200.0 through
+ 207.153.200.255. (A netmask of 255.255.255.0 corresponds to
+ 24 bits of ones in the netmask, as with
+ *_MASKLEN=24.) A value of 16 would be used for a
+ Class-B subnet. A value of zero for N in the
+ subnet mask length will cause any address to match; this
+ can be used to express a default rule. For more information
+ see the example file provided with the distribution.
If you like these access controls + you should probably have + firewall; they are not intended to replace one.
+trustfile
+ trustfileThis feature is experimental, has not been fully + documented and is very subject to change. The goal is for + parents to be able to choose a page or site whose links + they regard suitable for their young children and for the proxy + to allow access only to sites mentioned there. To do this + the proxy examines the referer variable + on each page request to check they resulted from a click on + the ``trusted referer'' site: if so the referred site is + added to a list of trusted sites, so that the child can + then move around that site. There are several uncertainties + in this scheme that experience may be able to iron out; + check back in the months ahead.
+trust_info_url
+ trust_info_urlWhen access is denied due to lack of a trusted referer, + this URL is displayed with a message pointing the user to + it for further information.
+hide-consoleIn the Windows command-line version only, instructs the + program to disconnect from and hide the command console + after starting.
+Browsers must be told where to find the
+ junkbuster (e.g. localhost port 8000).
+ To set the HTTP proxy in Netscape 3.0, go through: Options; Network Preferences; Proxies; Manual Proxy
+ Configuration; View. See the FAQ for other browsers. The Security Proxy should also be set to
+ the same values, otherwise shttp: URLs won't
+ work.
Note the limitations explained in + the FAQ.
+ +To allow users to check that
+ a junkbuster is running and how it is
+ configured, it intercepts requests for any URL ending in
+ /show-proxy-args and blocks it, returning instead
+ returns information on its version number and current
+ configuration including the contents of its blockfile. To get
+ an explicit warning that no junkbuster
+ intervened if the proxy was not configured, it's best to point
+ it to a URL that does this, such as
+ http://internet.junkbuster.com/cgi-bin/show-proxy-args on
+ Junkbusters's website.
+ http://www.junkbusters.com/ht/en/ijbfaq.html
+
+ http://www.junkbusters.com/ht/en/cookies.html
+
+ http://internet.junkbuster.com/cgi-bin/show-proxy-args
+ http://www.cis.ohio-state.edu/htbin/rfc/rfc2109.html
+
+ http://squid.nlanr.net/Squid/
+
+
+ http://www-math.uni-paderborn.de/~axel/
Written and copyright by the Anonymous Coders and + Junkbusters Corporation and made available under the GNU General Public License (GPL). This software + comes with NO WARRANTY. Internet + Junkbuster Proxy is a + trademark of Junkbusters Corporation.
+ + + ++ Website · Manual · FAQ · GPL
+ ++ Copyright © 1996-8 Junkbusters ® + Corporation. Copyright © 2001 + Jon + Foster. Copying and distribution permitted under the GNU General Public + License.
+ +
+ http://sourceforge.net/projects/ijbswa/
0rMQN&s>S;0lJ-<k;v&}K zA%psZuWMMhVOR4qSr$$ui~u4^MkhAs`8lr{z5rnRS1XCa?3Ac-ekO!4Z1?Y tb`os# ??7sB2oM->08jxpg_ zb4^S~t!(_hbo`1G?ueb6>_&cE^Cy|ISpu7-itsbs?&qb;v!?~+PKuv1VfM*$ZZ)51 z`(z6Au)?A#y`5L9Fj%d+HYX}AEL>!}SvTLeGPyiQphy~d0x~;GtGf@pMC@H-G8mlx z$5-tW?%DF@pZe}7-p`hoz7LugY+oCs4Qyu3kBXS2@$r=Wmiu4pUw-V2Y<%+eT7 4!-4g-IbVwx>XO{+U|4ag9Jbg0Vk=$>+4Viac6}~kD!BN?Dcnb zbtM5px_cB}mwnN-DXhzAbh{U=qh{PZZf+cJ#%`R-6>&c4b>&T)=EqN7E8O`|r(WWg zr&$*&SDhYO=-n>MY#b03UA@yS+`C;To4ABst*Ilcem__3iA@ZglNt4GA74#=iR>;e ztVq>nir6lCvTpcWx4lu0&hf^{=Fp#l_NimNzRRusSxj#B%IlqySI+eua-A6DhJ6kB z{lan2%TcZd&Ye!IXp5B4&Z!aIuBuZwUK3L{V_8lf ESV+aZZmIjtFMCOK?$jV-x*V>SX|jsB$YL0zh)@sTd>2%J}$>m z*7g^V8-xok_1WJYY_s2OV>;QAQI=nC{y3*QezK;@tdS$lJvb-! qwzi#iI|9l6 z0W&icu8 8d|2yxq+B_4EBEI$}l|30^xB}rLFZFKm#XNKH&k9i> zdOG6Eo8`7hv1^5s?xnZ=Y5#-+!_{KB%u&p(Cp4ow^lZ&<-D=V7$!Ld-hsQn?7Y#g3 z6VE_Nkxav3lF25A;neQNqw~tWYY_#L4!<;*oBL$9Nw=%U*I4|p2WoJ(S=Bgx+yWuL zk)dPfy_csuCOACX(`BJ){~YGw`o@@F@98k`eyQGQ=U}6C?*Nlm^qnms8yf ZU+8WMnm!mN57=(U{}B zIl_62pPi4xH9thU?R&{^!Q `?8F!#%pb~P>-pOe_fcbBP^ zC%)z^`lOMYm69JG=aTniJjMkx(&ww*nHd@y>Utrzme45TL`c5)bQQnsNvBxIXZ>t^ zNU z(XVR2{M?9&>)Bn>qs{lzie%3zu_h%T8C=KoLBs)RV%b#`t-kqDXtN8pyUSr?QR>-r zk&_Z$7nq*O#7cDpl}tojXnP3l>;9|<9Od%sye}kInNBrHrM5@fk6LUyR>P~_IB0pZ zM%VYoJ+DZNC#y>Qr=nB(o5CO){CcZ4QSHe_Yo?zVdnan^HoER@(Uin!Pv5w~s9&fH z{zZpf4PHHdJWJ|I#nYq5HQzp|)z)RoIlaByO#U*b?y>IbopqK60mycrc#7y|?4>$+ z3p%pOye(ILjjee0aj 9+z3tr3YRgJ zd+IJm)@d#oI6{=+Y!Pl0C9YX#Qx)|x^@wc8@#RsamTKP%c)txl;~jCytjB=$RNYlq z_TFlwX4pz2(-r0SQX`!`bN^(ru6gjJ#c#>HlWIMWIYh a%>DruI8g<(of$+8C;NM)nMM# zeqF?=mQ&cd_SZ;2jCj_w+i#|q99~oXdroGGnEN26rceTCa&8I-B~-`>n0b>^#5BsR z>=c%mn_=YpZ|NyMaWgY>knGYz;Gi^ ZUf76H;M0;E|4NV5o#W)UFGB0!o2q{$#i0;E|4NV6dMNz)+tN%J82 zNfROYNi!k&NmC*DNpm6jNs}Q#who#N$xoUN$q&y5XT*@CBp}EI!t){F`H=8@NO(RZ zJRcIC4++nQgy%!S_)suD6g(eD$q}Cq@^Pf^@O&tEJ`_A33Z4%I&xeNRL&Ni-;rY<; zd}w$+G&~;~o(~Prhlb}v!}DR_`7rQ&7 O z3syIZC^LYSpBE>9T8QYB)MO=&s;G)9t5ORNQVd$4Q3OYVMiCr6utCa73pTRGp>Vud zU_OxqBrguE1RNU6i@^#kL~attRj369tsGiFQ3M8~qDYJuR76)n3o43+A`@u= 8VtGez+e zs0BuA{7n%UjEW*Kno!Z|2*~CP_;#qY0*MEr0=pY55E+WFFh8JhSXN$|T3XNsh%V{{ z1EWZbR$#Q+fAW&V2!JgL*bE@?7$7Mu0t-0;^n!K+DoAQ+(aY+SK~bbd3n+S-dJF;V z?LbZi31SNX5P<<@JcI?=E)^8Dpy*}i$(YE3q5%^zHA9Q4BhkRPgG>tstUWx)M1XY% zGzx_PMO?fBsD-&iG?k!;i6UA+k*yUO6h%<9fTG#3lO=^if?W{?fx_Z}W+4$69Qcl3 zm`Y)&B}Fg0j)6f@Bt;7-TFp8|r!XMB1JXPw0T5<^Tp|XG1p&l@_C+dKYDv*-)6tO0 zL?bXTD2k+L0Y$StC+id%?7TscfWl#jK?4SZ;^oI<7ZPHr;HV` 86iLwlij*dd=bfAK2=n zAOi)q72t3Ig9NJ)zpxmAI{qZ(>}dgoC5s9MMG+NEsA#t701cE|MT6)74bBx%pwJit z^640UG%v{JEJ&*asI-c7o ;kx@}(MH4D|S#>ms+A)w-M}mrKumaHnU`65<7AYY4 z=Lm~lcAX51EG!yf(aW-<@z7=&L<=A{C;(|19@L*B7ZxobsY7)T{?od%ftMi}7DZaL z!J?OSM+0XJq6Cm?fKFr(Xy6XfxCQN*Rgl!-I_aE{F6$6RMG+QFu!zT&w7??UcQnYy z0JS2X2ob qq1IAt6-&_Lorf*uOCP*{+=T3G0Sq>kL7 z9RQ8#7_!lVVNs+-8!Wn+c;J@788ixLmH^0Np^;F+Z(*?mk~(-t5{nb)qFE$V6j{-R zie3gD+6v- MWIQ;q zMx!wx%mQZ>1h6Kt3k)3Q#P7tK7FuADtveYOMOd`KqL+1tHqLk`VgM$BADrl*@MvEA z!j7(0kaHq +niIhji^b@oS|n5ySr?3=EHW&z zuxNxuFZ&K1q9Q@PCmOgL0w|6~f&>>oW?@+e)SLjGSiMUZX~D24(xMF(y(~NuoHQXp z?Km3bxWRHng8UX(mJ3s@IWau3w3#l#f>BX~MH4Jyr8O H`<1TXTYV zVp%+0qy@vGNQ*XDG#hz1h)05A6rfrtECDP)1f+4mH7-b2=s6)gv1NcRvLb<^h>A8; zbhGeCkQoIQ9)$tPKhTDNM1p0xFn5Ta6TuVPDd-|A7!^fWG@+uGeHXy-V!+x%^Mk-0 z1n{662WZ&>Wi=;&C$^f cOi+AMU>}ME zZ5q%&EQl5gMeM*MKMLlBf*KdV4F8+WjY14{KX`J}>-_6Wzd!wLztJhvNv3hJ;F=J_ z%quVS{7xY=6g389tWv9W#r$Oj;tX*EJFd42b1PP->>6;0w~_twdHkh#?l{-BFKVhm zMdECw+&*Pj3Ii(JuSC@- E%q-m@R=Np#=jq)s+SI zfnS!Zsc!0iQO(-r_PP6Ofs=-+)Z{f;_R;+K*kNaaN&c84Zi|9nNN@3ATbq^h3BK{^ z!67lx>5=ZDsY8z x=k1NZk>zVFy3LDGZ9(7Xp zJBO5YmBl(WwG?9o$wwIx&&F>1zP-ionG!8%zuEs$>8SbkmFEZFRJ#U^zU{2;%+Z(_ zHWGW4*XAsEkG&V;r|PgV18IKv=2fN^p-95~1RF4!(iRAdH6CL=;`?35Z`XCcp6#+D z-?p!G8ujI@I-UO}fn%Vhzg?+WnBO%2#y8fk$z8?)MuX4WERv^u629f#sc6& iw;ncXXOG?{wyk#dn5wm|A-gt~(VZO=GwEg C<-VkYWmjk)7j3>rYQ`m6CtF7 z@$-vy6RdFVzT4jXDFwCfy|}U6{;TL>V&}W)L2oj>(EbXM_a}`JHEZOz^tP(pN$2vp z$J3zma(Pecp@90Kui`=>XY(C|E1kUC>z(VTK3(fRrNJa!Q6E|FJ(Bslx~4KSSY$tg zl8m6jvfJH0^2;0+S3{f!_Ub%Tyb45yDzokZ)n`+Vdna@wN*jArTFYaY#`WKw@#`5$sTrs-$wSxd{Nk{&OR`RLpUJ&!ge1fZK-Cb=?M#$h zR#Iwj;jnRIzgX_0k0-n0nYaoaocJ_Fn#$S6^CG^0moMxrYQoikXPtN}&0JBrwsHT( zR6FG=`+8sAki_YxvXQD1d(D22jb7Z*M(XmGI18SeP{(*I6R823tdzAv)@CC?((bn# zcfFMN2q^jf!&~faK^m97!nMJlLuUrgb{+S&adAwy9#Ie3#NoU;w;-M<^%gm@qLKLl z$OK{iu1qakO^ Y`^^w#Iosew~(!GmrI79V;4WXVNL}aWww<2=hwmYj!jDVM(Rzix5Fkloj-@JJ;q9 zw@mB&dhF6O>8Ir6Jz !#J7iVs+MJ7=ZmrxiT(GCTXzXP|{Ahc{nxDp@p F1v|c;0T4m3b=E$e&xmGK-5WWYn_yg4N`uunFC1CQB!l0rSe3 zYs1b0+Z3j2h4~XJubsuUZhI@0wA{)yIqRvLy>J+NjTYB|9@jTc)9idftm?n(+ PtVUsB1HTG+~>+qYEp zl~T(NjmcNWtk4Ud&12-iibwBO&%PVS9a)nqyxJk~ba0q?yxoPH=29z$;-l3IESslu zQhz?uNqU|2QS|Z)L@9%0o$ZvOjw32L+vihjPe9Y%B@m;+gRFR}sj0|lNCa17udwFl zSLJ?j2>5;E{H2}=i`2f1=f6`jo-^k;wDz8I5M-0j3}OhW3vhh)@jP?FW9~pB^(%To zy^X&gwSo8hXT~TBE0aO_wC(HPUHy*bZtT0YCM83IBCG42v#OO;4V9Xfc}H Eg%->uY( v zhN#WFFv`(5NP&BRyYHTA;GT!_Yl~E<=Oh^&61Pq#LrCV6z?9LBy0^ELUm{BVALmVl ze0Q0&O+8*3P+$N1X wd`_VadKvF&L+QY8{86CaBt}LUktE&=#e+U*zG%qR*+@zgoZt`d-pTyoXn?G+J zMz%bK9 En_e z$qbDIf}}jDKU%vtsLTKM`OF5t!ot(-v0Mdxt9O@05%y-+wI>WERQ-wwoR4V)gCVmv zz9cSDYjp;%-W)5#El-*r*di58r&$uk8zYC$=+x m4dE{Iwo1NXsKqZZi;C_dz6_@v(B>wSC zYNC0lcK|J(Y(=_(TklhnLKmiAvK1HjXvwp&Bg{-6bQwWt@ygHQ0alS2Acu5s8Iz zS8k-TO0&rUm41nK?w)+V)fU@4@;sIqcV15HcXnPu!i@o5*=@UJAKtwV9Qh?kU1tcI z2y`|{P(`t@(t)Fqn4HgtlM{M#oa_Yeu90r eZn iy(NUdrzuyWZsX5eaW*Ga`|B#5j7={Df?ZkgdnY z?UNH4%RI~4$1CD}gzDBWj~7!j(ym+IE^fhdi(=SkqokrT;>hXLTqXQaUGo$0R-9UV zKLVvqg8KR%G&D;%APr7oPS$Gi=oSol=c qs>x`=qWkRvCUxMWW z9+|a^9kyM?7eDF V3gC$+E`dX@*JLS2r9_ zOERwR_+jCY+)^be)bL1$&*Vee1G&>+XYh0MbVpRuTVEWyRNi>7qwk2U-?(f`{I#-F z2eH+TtV=4U`V({xunIY>@qe`0=73+|Vc8&;A09Zj8Yt@6PY#_(8eWI36I>FkeQxnZ z-%# `BKNkL8zvj+i^Ooa{reghEmi^z)SjtN4Rn@H99BDt{s>vs@ z5I+wL8es72i|R}qTs){1%4C1r_c>;~x`C|%U+tKe`?{<%l(nnO^n=jkr5!rGPfBwF zjox5Z5N#X9KoDQg+_w>ND52j;^F)fVxuRW3+S9f(Ri@>gy>%Uy&1SARjeF*&)%tBj zokZgl>_R;TOl=oQ28)%+Z6Xp3{T!L&(#VqN^ySsFjj!G}Fyb|&(8U^_ITBQ)v?AOW zl~o0J$Vp^M{q@vbg|l80pfe>I)22%uH3R#x2`rLnjzQOU_`N^S+$^4+bLH`Q^+`v& z@w1|$f-U8WA-*9#{l(rLrc-Ax7^Uyr!g+;PPx+)EXI!?=^yU6x*}igUA E=Bj8-rW5MtyrTf9q_zTGwna$voPyHYKsS(@6ES2`jgPIc7+4dY4b* zW)h3p%&p&iRltF6BI#hE2Q6(2zF2~K@o~rAPN0F zJReL@gn|i*K%qTp986FI)%+6YfeDIGFhLOtCMZG?3v$4GFhLQDSaSmX4C8|dicl~? z5eg -6Lq0rrY=xI2md?#d110H6wKCzg6X=Tqc9>)n6L}9X2L(ipBLurLcye6 zGYOkWx;uNx{5QrXa*YZO5a*yE-XT!_M1Tl%K)VMx$Y0n&6Ll>CX(`bHi=5>q!y+ed zX@mtymKIp#69F73 nQ+0_t2BCN1h>0+Jb~1r|kGFf59+XoCfyE*J`V`PVPO32no(u 5(xMF(-K;z~e#SwE Ef^L>TC~BUmzBqY zhye#;Srp(TzyZ631zjK51(si6s7ne^bZd|y!y-$IMp*Q+@>t-SaexvQ1E`H~AkxG_ zD{`Uq64X@%q^$!zbc+m&A}yL=(XC4civueWFw&y2I6z+lqy-u*z{*^h-J-56AZ@JZ zA}tseMOw7MqL-D&0@n<+Y!k~cz%C05Dqe95q?y3XiRJ0mB}0Zqkrr*RXtwfj6*U&P zW&&_!Xb?Oj!QLDTtUVsJu$EEGoLHW2T{2`?6lu{0i&iTS%8ejqUn~lI2Z<4g!wdWe z=+1yk6j+c;RFzawolD|H%39E6F~ZO&0;3%o&BmUrVxV0B3DPnUks}_Y4FEwLXkS~< z<{Fk7kK!?LYC>cb-TG#*Fg}Xt=!1`L4Kx_g*nk9S6(lI-!hs@IET~%KUl_d?S$@ir ziVAa>kx3~rdMF ?Q?3W(%ZCA<7{@`~|Gu!g>MaCDoNBk4cKF zQ1d&IGKh2$AB>JHKKh`emxsUrE^dGf$POYS0u(#I%>(L~g+w36C6!eGmASl{+#&FP zRIDhZj4NH_2P34&k8TKQ^&8~;A_j{F6g+@k6j)_`kjcaV=a0cIXy O{!7Neqx7 z9%MpLP{R{g%^1)$3Rd-hl%=ww9JM8+TNe)*Aw`aKLrAkXfg5@-pzR3 tnILv~w;WPA6VGeI8=z5`-DTEPHWJouJG `Lq {rOL1nfT$Z6|2K1D)0&$3g(yEtmyGH#20Z zE-QanL4B?)>E&V2FiMIn>4}nVokD29hadpX%b}|^z<(g80Lb$ec74kXSss==Bs+Jv zN4L%)GDwOj=?Rivo(2uw&I9%EftE0kWFTh#7Iv&NLy&Uf5(+9OsC^CH8jHvnDS`yq zNqS+Vm$yL!=68Nj*#WI?KtN4Ag9WSoKYDB_Wl70HDu?Gtl3pH%jFKWra8gV^lyvht zAj2d8@~WUv3DAfFokRo1n1!AC&rnJkMYXvqNv~ZD8iq&_B>f=L&EEj>RVV`iibOz4 z5#n+JTrvx*2ACm5aXDFO@j3cPH*W)Dq==Dz80Wc<@IO}Uz UIG7{^i=&_|HBcw=?ZU|}iGH_xR1+rsM8k_hXqUHe^9{z=ya8f>E zo`g2B%#1GLgTax-M;CB3`xUa}Ko$b37lSTb0ELSvs90rTg#_YKs*=io$mY;~#~;ig z2_;D&cof;u2_LPl1kT2ST1H-eaOQ*r`xq#?0kw%>FSsDDtPUKpq%z1W@~9~u7FV5< zlO vt6eBK0vYvVSE%3(g`2E+y`_Fg#s7I zKur7s#P6VhmVZIV0c0(dk`z}}Q=Vi0XulZ{79klTMTEff(Fr20UW9z8LcGBfl*2$Y zj9BPKPvDF}8U26JLh-|Mm5^SW5i&fo1nC5iR_8&H9$;R>fTSt;nquhgSU?K=U! 5$d66{X}&TLcE3cLGbjY)2ejc34Iv=qT^NnOgo2`mvaGbs z90yGMm4W2d3vr$O8~@P-8@-$d61qnjbQ>W-`4}Kw0_-kO<>Z1~F!0oKN{)zqBXrR> z7#Bs~Xv9S~X94Jh@E|h{94xN@c&SK`)575vl%WQ<%cH5+C&)R_=g1h8^bm1T ShBRo=0wsg7nXvF1w$TfOZ@V=cQ~erD!%Z8MwXY%VY#@B5VFq_f(g(%$-4@#ON4 z>w8gL-b=CynZj1PPu$xeS^sQQrFgAtn%lNfm%NsX(QleJJP_MDtf5pJ7ke+hl1XCF zLiksUE3-)N5H926Nb o>e5rm3lz{@i;ct+V$oE-%rx%;}f!t?c~A0a;2M zi428$6Swi2505_7RsD*LI$!x#wP)m=g~QOp7|H9cY&om;osdqC)6{&s!~Z+?c{WEL zKWq@A;|>$qx8prKd`EnZQt=JHE#K+y7l=a=!h^U!W+f(NTpBQ}U2W4gj^6OkB3lDK zkIC)94cxJ245v(Z`$Ph+UFqr@7GGV3xFAwG>0a~YMD^8)^p&i~6}Orga&JD*tpC(( z`*hHiH3+K#mCuHk97oqJ(X@D6dB)!Ff!YzdJ&}Ua!f!uie}6M(dNGGhZcUqlGJ6S! zOi9T4$s>|tlSU_N2i6ua#O-musIr0KggEnC-Cs%vnk0J~lnj{<3-Q@p<_|Kpi0?*N zgn#hC+(z8}ZK9W@Iwn4Jc+1jnaja1qKUQ9H6<*40IM&mn<}&8tYtO%OgmcN_oUu0h zFS< NhVq~~E{7y^kj~0_N zZp)KIgnUn(dAL0N%rUkS*5nFSK|8la7LQ}&H72Kgc&el2D-IW2l8XDn_GRez@Z~#a zxLoT(I0vL~0o{o{cRt`3Wyw^oE8k(U{;@P}#ptmu%J0p@wW7J-wdqwK_sYFJ{?qJA z2S3}QD3wKmM;P60v8V%j>WXT?2O1 z-+ZPQAgwf@!Jzo@ oBe$&>{i|MaEvsDKy##f2QDObgbv$eH zo+3HKn*#lUef4E82Sy+ID0tWX5uujl-IW^r*0 #T ^gN*wk2$k{+J7bfy_R5w= z<3Fua_bk-NssAkXe7Cz?#3RK1i*;r!_b|6u(o~Ms)aS1F=f3`jXE!eFU3Av{A;*Mo z&$8^%N{*|A`P+)F5?-s9DxBkX6z`0djlRIUDP)JdrrXx+djT o;QM=)Y4whDoqc&p0#7SouKb#z$#O82k5M9{h0XiGLW6 z(^#lag1?PO|InJXhWi&?kM_XSkBoRfQMY416gp77!&c5(r^@W@*ypzERdTmW9rkQ7 zyK{HN rw_N#2r3AFz8JIqNPjlp6qp_Z-Ja4(0Agl-8W2UnOc zeVr^OWB2a*?!gDsUAI>oAA4M1+rjn39sOC6M=h8UZ4>!R?Cm nYDAB{ z(?SRNsM<57M)?^9dqPuYB`6?xoPhRagJnQ XD}4Sp97)?Rf~YLLqxdg!?L!!5MwX5-Nf&E;}WS3k18YS5~%{mz9z zW!5DJYM75!Dc`jDW`98`;YFDH56qI(#;-d%-W=I|2)|vWXZK$7hbvUW2r@Tz)^!bE z)QeGc(XQnExOEwytut#`|MJ2C2g$+Z2^+SkZR=v(zO=$8Ms1$}UuP8St-R3<7887t zy&6_dg`w&x4_;l@cxN;yZjq4w>Dro6heuAerz#v5<61u*& s g)-nVd1h+5_CZeF)xyVTvC@ Jri8wy#agdy_y0buxj8tp;I*v2 o_N1o_?uZ+K| zy3zY cmuPscgI6pxa5s0AbG>o`f6d4OboF z3c1~n{!~1oVs4C!{HnXCdGn5_IqVIj7zPARjDWg;KxS`16KM*_;nckB4Wx)@7JCDl zL~`(7*&9Sf5danh0X?h72!wzn919EqXYT0!Fct?6&Y@e&&1_9gXSLn~e$!d8=X?(a zbzUIPkDF)k%#+GLJ^4?AXWa%(Js4tY$AJ_C4l4kftmi&?)~(Idg8|Jgs1g7j+J74S zH-SMnV&TEfDL9a>1@|A$^XQoYG4-Rt6Y-$L9|!JYhnNni#XYOn^iN~?`N4jA9%%zm z|MOLWySzYI=zN1`ZWpPa4COwEO+(NXJ7B9o4I2dt{QmN2Kn2YYb Z<9;tD|(#8ltJL&m8^a7L{14?vofCORAga0Nl@`FK#FL a5Kt~RdM4&-B1-kWe?&!a*3vdA%IG=%vO+dLfNE*!@{Ws-?IQBtz^&dwQxoG}} zl0a7~@`EJP+$S&KMMI?7XmG4Mcktg929&x$gMLrwoD>Hv*4)txSQvnK20VJc!GBY3 zsFD;^bwii*0FO5J!GBXwD3ON(>7_pnp2d1Vt)cMBfO^EB%NXZ8nMg16r&k4|hRo4? z77&=`zi2mf |AN@B41s(C=9u<(C`{T3!rl9brhOVH5h>PZa>c8n2`BQ^Q zKrhKWga4*u `{5Ktgp9~pp zKomqhc2?W`A2bZ~W&p||>XD>KjI3WX(qS_Q%4cN8KuIBl65=X{?$m*~sK5^(??~cb z`tQW$pk8{0mXb4OpfnjgXCWE0bLNeu>y`~53l2@b-@mEWs|>&7WK(u>c=Vf|*Jr&W zc^JJ;%5Duf8I*J5vzwc-?nYg^rV-qk)rUFLo5BUq)}1?YEj}^vU0y1w^vu)3U6@PL zu*2He@}jwpNb%{btOgq=s$NQnC$Rk1pK!Kr7w}%X`$6W%zMAawQ<)vb9 {alasgYh36+Or$-Q0T=TZQbD!U{ z618;I_g$4t6NjF?k+3+qkuQn6QuD2e?YmJvzqs62Z~ZMMzj)x3Wq6~Hg>J nNIO)lS`C+` 6rSH)ZaTtQLB_EcWka^b*c@#Ki)7LU{t{v zQj*TF_xRl+=~BL-j;^54L@hJB@)H^jx5HG!5H6D;$1fMWt1}-N4`6gz-?74{ZA5sZ z^hLW*QHYh}7W )0X3j- 4B@_l}r1_ z$N#Zfmi}ts0+&T;Aj{>vH@8Pk(l%)iw$`nwsYI~vet7N0`eZ5Pmc=@+3Ovl0wXTb) zEWiKZW|)QJBab_l$G12~CpkB&Nj-a6RB-j&FYYHdZ4L_E?aN(M^gv#;|Lz^;Lp74+ zs+HNzn}W7({U^ETx-1V@YUL%*7iB_c`;MN@;yS7&u5s>^@%hN=Pw$U!llk_NbBq4q z&bGqxkD9{Ew(5^2w7vZDl;_oBfdH$km!eMYTY2)Kh@t$O2Cgw($4cpUb*rs@`?9Du zjmrBUsOmc+sG1@#X}7J^x<%Sm`g@;TNOQ>`B6oa1Z?|9CPbJUsqSJ*MjfRHirZS3> zuU_ZgXzQp@h`T@L$L`_w)0}C|xgNKddHKzmY9sAypUGQ^ag{E{gl&3d5wc4q=+&wf z`&pO2H^z|GA_{+9TRFuQ27f|L(9yCz#pu&R*KPN^{+m#nmfH%$#SV$_}Y ^r((G2ad8+thcz%}4a9^TB5~_zW=;5i~{+P?_->qUr zu6VRhu=1y(r@@8_#I?mvgE?_1efMoljStf Awk$g6u_@B1g^ z(WAkg%dfhk_=hyuHq^iV7F#Xb8{X5ewt`F0olnXP`| *>jb%RxupBVzK)Q zU#i%;|4xuKitzYmv54)gvT_G!=98`5b#mU9zl_xO`8Ouo+B3w|MqSldsc4m_*ZNdh zta?Ohywj)=^XXbqUj8O8bj(R{pZL+OflKwjZc4L0DBk=gpw6hyXSMcT3#CWzZ~EA{ z F}X%*A=QR8vk zu9yF*J3HMyKJcx1c*yW${mR}Fw8aGXb)JvG`w8C^8tXVjn@bJajm~STc#62kIu$QI zvuX4b-}z+i*yTsdQO28a;?X$$hs*GHqfepIBTRYws-liKp%?RZTY9cq#Ck>JsnCyZ z<4srJRC3&Uz+a!brN-%UO;4n*$H&Xk3_&IJ+qKr>MQ(awJRVmh7gPlY-ybMit!r@O zCFghNU0e+Y#)rx!l-6H}*{1xdSgAX%XNC3ywksz$zh1k9d&%UbRHZ4x)Ruw05}ap! z@9)kYzh9R>jfk>6C+O2uyB@Ju%ph|ha`&g@X&5CHd7NM{#xB3l+?plMoMmgZ4^IE} z!CS||_NyJg^|m43;NreCm%%uWum0-~zYr%}+{aO~YEM!9K#JMHiqd22&6ZW!sQRGl zdQ_3?zuh^3Ut~4Sv@iUkyVMQ~glLGzBY#UpU73|D1n GO#{Fwpqi8yZ~KZ*F|% zrMKed8zzyNauIu4atoSu@?9o; MYD*vQENZXYrSgz3*wQ=d$6D!hBmt&*-Wf}5IuGQcY zQz9#5`F5->j}I&Nbl8 P^Fek!k` z_T{Sq+v&h}N>{%A+_9$QL6=VDJ?uXg{8#hTn_t@tCm@5+{U14g={55|YAt(mI(4N( z@vCHY&SOow@;qCDY`-w3?~9O pO%93Ntab3rh+)ovsw%z*Ze0c1s zlQHEMQ6?`CN5zZrGGEcB^to^S&OdS4c~j_J!NSE2Y4 z9Ce-{V$suW%R)o-HVU*{bSZYpT|RkM;%dyPXKe@lO9w2p &7cL{wWpJ| u)CUki^V%lmj zE *EFO?&gY}-7@DBZzYG=Y2SMoW4$JB4<|Zd#rM0 ) zbJKssfD8nRjDQgoO-cU|*(u54 o6Y*cwv^zg |m zEDlcqLHazKUn1)&`Sbqa!8ovIhv+=##@f_-iE@Q!Y@!Zif!{k3b z8l;xM#hddCrruo4d^8g3$p9NoEJ%3p0|;{-J&V%g508czw+QoOOhF!DMtDy>nDS__ z6GVcn@Z3jJZ((NwhqqK%FqnV7Z99?c_D^q%@@Qhs&^#M5B17( YQyvY o~Q (v|pH0C0?PdM1v42%i@TLKkz#ktxt7Dj2V4xuU?}Ptl2cfLG0LX;>=_7;X z{%8F}f} OO-wZ09_AR<9uS>jM1cp!@VMga4*wWZ2+91CsmPC;v^$Fu>gqpbIg< zcienta8?T(HE!~wiS%sqWPFJQcYiWuXh2254>TOgu;YO_oD2MKYK8$_5opk3@#oQh zQ!_MpO#;x>^Z)}?jym_*e^WE~2no6jeO~KNWS#%>#|GDL0}c7}=)b8MEODsW43y2z z#XYOH=nt<8I#vdfoAa4xHT_VJg-*P1z+)f*0)hDy1$?AG8#6L&EOe|qkD| np%EaGdD40m``mwt9W1eX=JA>GGnpx z(a$fRG&+W6$P6Cz;l5s<#a(z;+kD!idAhN12h%mQM68Lf*CLjO9bpq4LdKtygnw1) z7755!8{Qt@yE4y4O;sVcX64jC#RlEh73c^ TVY0Tz?o18u8hRg1j=8V3-9)jm#-192%lguTK8smzO zm$rM3TRC-(FaB-#`6Z*MW|(?#Oz)XQwee)uaT^ndYWcfLU!Jb~JbY#ReTu)*3s;fN zFRNL8s1eq>y*PN#L7chc;Qov4flD=_Ma2EKFa7>f`;x+E{<;fk9kKeKq&a0zxwPY3 z^Tr1!>iVaia&9c*Tziu_F@66QM7_M~`zl0*ts1w%_A{~PpPySk&5sb@c&1cRg<~wv zob5$U2D9vuT<&W1N>#m6Pc_5GSN(X2xvA7DC$jgd$=THf{9C=QZFilH-(|$koTzm` zjxm{MSqsCCk_Q{z*-LWI=&f6?>!AT|0{t*}NUA6N>m$QuVIMdcJbsL&>>ZJ_j?L!| zEo_^_o3|3SC2n5E4pQ)6)7SPE$J7mEHVD~9-4-@;{*`q(Fsk=XT&beJkNmzCxm5A3 zk&(UHZdG?>dQ=n?zPhf(beB7~w&c4=Z0t3btc!o;gS7NH#$svn*t q#)s@(to?YU_I91RjGtb8j;iLT_qbSEd^{MW!@HaB%<>wo4Nfhq zN7xVO21%i8e|@Y9_+{vRvewI>`gly!+VGwwkH5cBe3R%~vz=`+K4K~FID^-XyqIsR zcywy?hMLNL#PS$l>tRdM-Mj8r{ #KZ{#`-q+x$;w6dwF4^tF;&-%;DoC8J z 03!}kZrLoX-9;MmN441e;Dr_~Csh`Bw!qC|`1j1zOj zyQjIlPy3TKI*0#>u9cD4J(^yaDA)Q{#DM#RwykOUx1^Np5@xB~9|ZkqTgM#!sjTF0 zcYnURy_A!|cj*1)?BSIO&cln#t?x8+J-@$3&3VUC++ !yW0U ZG!K zP&=v7h~qh38qbuL9r(RFg-KfHm_KvdE4ktvf0yAArQsvLqk40-9NJIE@(Ma)!(OTe zq&lzK^x2Z7I_>b#iZ?;$9e7Ug*cao)BOiptKNh<~FbN%Z&-R{L`Y>B7dMoy|vc7@W zPKyuMg *-r1>U@QLxf(D^T;<8cmwdLOhKq;{TKeMF~mjb*<7 @Ex+bnuLm-xqKN$&jR$GO_ k2*V8xBVguQesb;=a90$M}}mi?t#UsCfY}J*mQe1 zU&oB8RBG+9Smdj(=o!1@hjQf7o0AE=LY?SEQ|q>zkhmuxD)9^<&EoQ*`d!mfc3Bt9 zi!~ouzJ22E!nKc7?%K1om4CfWH73jd>PPk(X_ZUMj^d`WY%XZ3t1I5s3}U!&kdgb` z#9e9O6+A*FCnq*laqRAjzl;v+mt)*-$nai!eB>XOhU;rv@GDL|II8;9(fz@lkguz& zE4#Fvm80(Q7EgN~W;?TFWxG-G&%iX+$#18Pef#z{l*MFmyEvciUbbrE*5AwI)|ak3 z&Rk;}{Ubn0;&W)dtC4xH%R6KA+8}}Q1hZ4cpEUH3#hqYL{9 rOo&`q6CVcG*;Jdpj!99{QHpbUPMUsG(p*#dtq-=J#?d@3om5&>XH!F; zJrl3=B3))=Df51n+XtR?!)0Fwn>FPgdFBV!Zyrz)e5d1&){$zyqOZ&6N)r@WDX;PD zhQZ6Lx|&7ZOhK857wH~9NllZW+r`=GZ+(uYiIPO0G<;vx-LEZJI%z%Owu(@n*%Q|I zY4M9nB?+v^#=5?o1B3wr {M-%M!LmX{tdS_pnb$#9JI;P8& zU7o^gsu+fkqABA|?ew>ZxmB%qt6Ac 25Rb9Yw=B~SX>Qx|gk-RtE% zC1qc^^Y}iQHR1Zd9D4b ^+ZrWKx9dX45yB9d729YR kfuX@5#Qu)@!*Yl3zNvUm}NgG4lJlPyKyY-P5baj5?C{f-eq_FGy;>E+l2duWKtb zFxnsbc>U{8wA)5X MP}h`=2Yi(xe6GT}8|-nbtYfQq GG7JhkEPBdB2_XPeZ@92v55WcR%ws`jZ(ZEf+OioIz7z( zl_hKZNSe1gpXQ!jLukI+F_ib6k@BfZtYTvd-{;BUWM||P^_71-RKQ!t049?`e$`i? z^OOD!SU~G5|M MNZ8%zXR*udi^zCj9?d$JyxB9LE}sfd~x@d>X%+<5(*&EEpPa za0B%l2sCv9gbpV{ogYKheuW&cXf_}}1{5eDK)xTUzH$-_lZidHZZ=?Y2hf@Q2Q*A* zc?`_~?O_Gdt*6-r$YlS%X4rNAj1D0`M=_mPH!LyynB`w!K!k~h3nWtoOAJ2_25M43 z Whtkbs)RZs+!4^IdG>0$q<5CEs+bTmvL ze{9cCscJ4DYrzGO{CGf^;T*8s?qlemDR(ZQN0 }udQaT=HtmSuem42-e^lKi}Yx;#(}14%#w+P8n- zH7D=`;|0m~bN(3AdFpQ(NM*7D50w)bKg0%bwPAl8fMEL{OmjlZD?m!~bo8Ij8K8au zB*!@Zfd11tV}o+Ep|bM84+P-Bf~*`SV|471Lsct&$Or?c6gnF8 0|o_ip;?40)Ac4d7LLU4NI0j1_j1G zFay8m)4_kb&VK$hp{mV5 z4JZro0=NHZXxPrNW2S$t8@PdaK`N%4X8}ViOKc#uaX>Zw4_DDo%WMFjfDNR&&3UZP z4)$aF3k>9-p#xJ+9Fk+21pgU)hT{p%dV}#!IDat2PrJN-lG=g&0_7->RiEK>LREc0 z??2#MaQcV#r(s^;LI7&XCm+|JZa?5d_hX3Sso+0dem`FnpkEHS=qKzRW6GS8F#kPE z4tOcQQSkrGr2ostKU>E9n0Vl?jQNks)EP47T^hq-qY!-LEgt=}`8E{Ek{wznRC9Js zV&f4?`<{R@oDx~>RjKsLN;4Jpz1!aI49r?qgrYv_zVI#46}l65*DIemFrgmlFv=>C z-cVa@dFyP*$e2%Ri7J?%ufx@-pc9Q$IQNWo2}M9(mq~9oEGC_EE4ROlq dr1td2P?r@yJS&ZgQ!Hos8K0b-Vs)!=usVwf>G6%}FP`+3Grz1gy-9L!xj4u00!` z(M`#0jhG6d-`>hlmCqz0r&M~3u)Tk)CU5b;k05p}jq;(1F3$6`K{ 5L+N8eQMLhQ0*L0xzepsdna#>LnV0#k8R5U zh4+o9T=$3}^{8b!VL7JOW3wdP^D;AVIbll6`$?L%qmpD%9J|#tb3(0H);70haEf%| zoDE-4CUNP1dUe^b4D;f*LX#J4K?eqCPiG~qeC}-G#?)t8y3os~vBmKn_EW3iOZbqw zo!@4=wm_=!*#E*8Y;_VRFZmr50p+Lg+Myq+42BPRaR|2cQc> !wGZLfkPiCfK)$^FwG{$`}OxF 298@BWf9>sc9)2deIU>wb3a`_+tGVp?#vtg*SN8U!?kb(VGGXn8;KV zIBi|L26QWo`@4}0h3@N>)s=D~xAY vY8~13?4aRee&_TXqUr5i@Qa%jENXfcgQg>*$>Ue%J zEMSTnZci;K({L{ )e!&GNM zAsz}@E2*j`n$|nNl$i6jBg(c9g8g-=I$LIWFQC`75DaCb+fzP_geY;?Yek|6dR TWa*4zE<%QjHyx)I`>&|Xh)gZLF8hcsOP|IMWg{Ti}JgAQ8rJN};ck~e2A!=1e z<-PivI`OI1s=;L;`mW^q1b1|LYSlI!Lb<^xq^o@zwc424+FV}_*BH~JeWwTwOsVE% z 0O2g=dy+07ieD)_NK$7xB4tLVo+jnz|*r>Y$vXm(b(+x_+3#o*gM*bJ*n zq4X )aKrN`NUME3@ql2Z1=aFcd8NR#kn}Rsf zf_5aIhKRe$DX& ztf -D zc`UN(>)H|`K4u?byhvNVS_*H1EJs4UEra{2OlL*$wl=beS!jjLD=E7643?Q37GK&6 z7#4YcW)PObEYeq>dHWS2C?r3Qyp|A+PTt2SqJftggI9Xz84&V ~vf&`SGXS`27j{`cz+o)-J@Q9GU%`=K)o{7KHl_|EO?wl0*~(4I92;C^re zkpnjn0<-?mbyvLYU}ED4#C1Pv&=~*94sgP 0URk# zknU9|@9^(nfXB-X 9H@0Nc$LtH?R07g-Pwut`KGBCpylw<;MhW-u)(v<*x z4a9AQrGp-OU_Y15`9oX`#F>JngB}C_^uvI(2GBSQ5=g=_I*);WS_bBgLv@EwKJ8;u zjZS&b&;%E#?+Huj1howCBB8T{PP}JWLgz8?&pkt_dJqt@G$#-npZ=bI?HQ16;|2)* zCoTW!g#EG%`0BvV`6TvF2kfU|KsA<`7lhFR@FxGT>Ys+$fdP^{Y#@<0ET0qXc|j!v zctFT x1|Wg-$e+-EI%AyB p1Vm zyYYt%!87KB)oh=WT%M@fCXQd4IM`@uCh(drqIu*jgc)_aVUm2p DDq6 zfh-&JQeU~BE6&fAE;7%LYWAfwv44I>B6~14KJ^Z>RSZ+YLBggksfSTj|DJ>j2KD79 zPYvgr-#moq;xK0guH>7Gwpe=fT%^3HgSJDi8~!|vdnnhKwknuQW#FkusY{Z!wPJ1e zBU=gT*JCvv ;&(J8wWLsW zGrhhM3ek%C)`~|pizV19!MaBFDY~X?4_(sQQc5r%n)m29>Z(SVhu|-&r 6{JaWb|Z znxc2vV`2n@h?ny|{qh1;ciz75OGpb?80jkVU**h;bhVGNKSYC*sSDR!cF#Av#3H>f zU8kEnH`%sIGe=kS>Y7sJ6NEnNT=V
MxAEi_$K~QE%*Le_B0ZLLi5 65`nV98F5X;%frso{@CClgoaV%2HapDB z-Pc%S_YDjZg7>^E1M?YfOn8cWe9eyPC+%g#ebpU{N*~3iH7JIUXXb&Aw68UKRI`PZ zd6nXISbvj%d-U5Zf0Ppc#@WrB4LmHGYmQNOrnm@%CPW)sKTPk{&z&a^=2E89ev(qc zZlZ)A_dI`KJ*COMnn=N7t^K({h0`5o8w&>p`=(K+E98O~Gnnz>g&!TQs7K# li!S2kPeVo1O>iW`8aeV4?YuqbH$trW6a`4p4DM)iRPa87trR%=Zz#*_P z347&U;YVbYH>p+4V~Wn{X3F-`?_8#92|ZUhv)!#e&EfEzwDXtNQW&1lHNVZqFrYyg z3}M7_b@A$K ^>Ke4FF#HL5GE?>resUc?NV=VXL*`}tp>ed(XZCSiR){S|xu&f}X zD>pSQM>Nas=HH*!ik_=6dF!s&3c(WZrp{WvuDdAcht=%Zk^VtysD|o%t}QM~wGnag zTbv`LYg^8mszsSs*>-Mz5JEgK-VZ4!87F6d)}ix`Vx`o7>0Z}B!45s*Bs1y3jjNkv zS6j2L)Wea+k$By #~eIt7Tc*SbR}5RIrf-&$l)cUV|i{D$lU+PTVIpI$a_Ndtzu1(sgB43v0d)q-;-6 z%Me ~BiZF0q^lirKLIwGIwSjP|S7En5Is8$iKOrXUDqmB*g z^0SIgn2ld~nripX=Pk | lp6&aAx*lYpz6F4 ;0HZ-dp#$Pw3~u z^T*`VN^joRED%T3$S!SdxR!*2R(GTJ;0j}E7o+4=+%Nv+YFFtsrM~j}I`~UHAdB|nJoiF2vWO;d4V^i`x@JE~f2HwREe;uH3E5u7*A$=J zm8s;#wH4n8+x;T8jcCOg+T?V|hcS$hyER{QP34L5X;@Z9eVS>z9X_T@KQ;B=ZJTdp z`aam;q+6vN|C!vtpK81fON*~-XM&x2qYfpW4Vhll>9sv)g+5Ew5K4m=Es@?xf^CFi1dy`>O41;aDQu(4F)%wYnHv!1{{tGfCj9%3*?^do6)4m|l@B2R zrQ}4U1>34}%r*y9T#n-pVAwG2chf%~7?jlm0THGH)FA)xp8pDl4bs3Y1O3_%V1Fm~ z3># H#{jv-UbmRhy@QzJ^fF>b+w+z+M;{-Yl0j)BCmjjXt0D6s1|3w2Dt3VkZpix1k z=|J}Urz7?=2f+!|cLU4p9cvAOUG~ox%?Xug1L=kWNIQR6HFV?$)a2>tKb^6kj~mcy z1ZNZd62YJp5Wrx8UH9L>CwO|lzpI~M4&X-O29aPmQT_+RLeqjE C-{LNV0J)V69S@^!3k(No_@aApp)f*j3qnJE(nkTPg?%d_4)I0u>-#gkR$SA z+`{jy1CT{S$GP%?H2$7oEP!DFjtLvs9Rw>md+g` c)A}p;43{?a z666GF=Y(qi{%iRxd7@*vq2H25zxVC^%SQlS2lQ@MraW8r=omTZSN7-!=jROBqkeU5 zTY!#$vKI%?5lrr#=SW{4=@B$u^T#K iE%AW&PH^vSai%V8HIHe`!+7fL{i@Kz`G(jW$I}U zq>cC(q^T!02_ VXQd<6A)RE|eBt`*^(-+Eqf-h3UZdc|;xw-Z2hYjB+xd|;c(R|76 zcH{0METw4AZhU_$x4@n(>3eT!_BHHcP8q2#d|7u!)8MCXd9OISS3#~ib&tx%l7#t` zq|aM$moT$n>b5`VXowjpOiPhXVt7M?a*iN(p;a!;ze} fS%HL&>bdUJ4{$mTRh^UCd17P)TA-V!*;pqUV} zfOCpjr45*!`|lHZs38c*v^`-Jei1KGr>k&^=}lf`CK;Fo*$tBuH j;YmEyQdVYB%{nIWIe^@E;IWr8RY`%{zA5qYAy8LGXzapSc$i7jem?KCw zNr|LPYf%#s_y(`l)HY4%yGUup=_+!Q%WSbWa{=SfU;~*PMMo(3DjbQIMPZnxo|k#q;JB60jCzJX^>_=LnzPf3K7{sU3fhHPAoD8H95|>Su?m=<5*I7 zS4@Uw4t$4hwRc2B?Fv{Hs ;q)gtcO)JVzIyz}Mot4OW=XIl2Jilp%d{xXIpUsPE zD80^%=xpDwzNz^JLV!1!yoAD?@{#?MzMbX+xI=vJE8`LOyV#5=cPMUm>KU9HU>taZ zH0Fa#>A1DS`2l`?Ev9|?Mt4ezs4t!LYrM8)nujXvKJE(pVQufrB;M6{xHgq+whIHw zTs|mKyXw;mM}}X*I^I~<65=gqxDD*JpzwOxOOkuRCCOju9OXjRSc3C&ajM{(H=y>j z>_6vWmPq`ar5!hkL2U2V M2n%$7td#&SAO FcB zxsLHE!Q;sv7vr&bk_+&3{%`Rl)WiGt?gw0&e-?7Kc#;d2n+*nr0E!h*5;yDz9x7}7 zSIei>!?}P^^Zx)o!=51kyBjPhgjE0o+cNNZ2bB+lDi8g2)lj7%K#Bn5dBOO-pq5Vs z|Ne l@)|COL`{c4=`P^X3J{=5`umA-EMQJFb{KNr+mA?i9 z1FQ!w;FX@lp5btwiv9g9|5tbFKRQcbY6o0rRXeCvw+^4-#EtzpdK9$yO{ChY#(v`N ziwo}yF|}|}@%quxaUCv{b5+>ClP}BdIdndVe*zig?`d2QkZs-J;CLr6Q__PuE4&?v zV63@p!iuOA;X1c-bz{I`E`ib9S)3QiHPQ9Fltb-Q|Mc?C3jGF#V#ecgjU~_E x|GbDaEM(}(B+d**<+QfRi*+6Xr%DxH&Cu(@YW!R!3`;F?imN>?cm!&){MjL7$ zmDUx{Giq+!Mhl|pvr<%^2_)VjQ69M!$og(jxYLM7dnkH2DjI1->(vc$Ln_GM=M`X^L|Ex~RO8 z1X_49@iPK)rmtNny7&3bAI^M#6Wt*a6|J2p@7H(L^o}~@k-80n?&Yf=&?`AfZt2UY z<>7o#dp^iq^Gb}ddYuDRH!*po8KwH=YU|w(3_6pf0eGMAn<0vm2(3i6FG-?&lAHZY zONco(q=+Q2^7f?DTcd89zCyVfx~Qnyu^-&HsW_!zVW=%cG;%|gc^Zj{;Uf2i==6Cc zw6B+$-b4p7PeeXbhF=ojA<=Oz)(hq5S?<8Le;JE%7e4bw`irBZ`(^w=YdqpF>0Z#v z^$YRlOVEGKqzrYa{kpTqaKy=g9uZepbKyNr|IpxFVJw7~Nd59Am!_`X ~Ke` zzPc18f^vIt?{2rIx*L9nE5lL#W<+BxuM%_KO$PUpmL#`viCqs1xFePRf!NwumCb6e z7vGdpiEYLjFb_4)Ta%^?ztsEE8e-CYbp> Rm#-_cGx_EqPc?+3<4iD&wZ%HFJlh|6&!_SZVUa&n0`N<6jdzhoDR zgEA;HM}3=(paPRM)Ad38S9>ft*2y^h`+L|_WYi&|)ssnmYm@bLpIKBa*}2c1^PZv~ zx-Rsd9-cuq(`&lP70%$X^!|ICYeb3H6POxsw`^ $pSnA6r*Xa`d=hdsm^oo@eFgK?m9%|I&egPfL))wj6*NKGhk5?JNNWL$iP& zd?27<@C>Uy6%3Q40ksTdslk*%xnOfkU|=r5tpF1yf~uVU^ >(hmc29DiLkv>yfn!k+@B_WTAugKO|VZ{XO#g|p>RjuE|n z xxt_KC%Tq@(5Kbt&AzvV`hfjLHeypevjqKU~&h>2lvG+c;4BX zR!A1(9;Ip4;FOITmr0CLVw4w`RH2(8d$>CLUb|5u)?ibdBq3V!;oKyJjb3eN W zUGHjyWu4eg>j9xC#kU!!Lao-R11!x{mm?7wuPcqDp09Hn=BD%CgmZsIWubUjO?kc7 zYL4I>lZJI9jYjM1^T^d}BclZqowyh~_G4Uz7jk^%;4sRocX4X6(Oz}=e{}R|+-+Nx z(d)qv=_S#ODrUD_9Kcw6aOjplHzAySv(rwFx0 zjY?c;QG|Mi `x;ZZ)(9r*e5f zFqD&rjXH~x(bZZX#tv*@c&nYK&gI$AuCDUWqF%FL%$sghe(>=e#Z5eyBM9fGTzmBi zjT@VWWZe|_8mnKNtOg?4srH#Qtv|Lr9Ke-bVO!rVBsE`@JiPYpylgQMlT|@D&*AFK z+fW1xlWISy>2&lZN<;!)Ld+6GSKpgv1$Lwy-B-ju``mOA3|e3jnFxOVoP|ycufC zS~>|u)L=34ZYUe2Fdw0CydX8PmQwmNBvgpZ&b+SP$`%sdljj6jFJqg?F>Z3=S*W98 zLkNzV9;#qzI7e!RUcPf3rR@41a#fIG!EmnU(-svIH}#QpkI{l#stKH 2wDRdNCc`qS#2fcli@xYiF&3KUyKbs;nx?v5Yd^)ZAPKwSeK1_OP{wpYtma9yI zFstG|YJPx!^Faz;x3iR~JCScVu*#_ EXY{JLC& z@7lQql-zEezPSEw3|Wq)>CdaH=QAG13RG3wD7$UkPC@TYDMh4lfqU6EFeu73^|{h- z$}5A`Y0|@P7=iXPpi#dU(Vw&`)|$1qB;Z4g8O6VpL%u**&=c)@hb3WqR_|hnhf2ru zaNkYHr|l1-g~Kg^ZYqv!ysuNU?@u8on)sQ>&7sUA9W7tz>k?<$Dq#~_s_zUnwy-g% zCbsNzS1>z=mP<15>~$tLyxeE_atxm*5=>7XX3oFqlrh?o%6x$9u7Ri4_adJoA|&PO z&~pwZ*HMvD90i=T9nVE#WHV~TYIbJ9Y0s|h%&6+c*XW1W2)47thSm;r6zMGmVyxJU zh!KQaij(XEFFZd_vTwN|Y9`J$+g?3pyS<#B5Phx7`hz>(XRkWNJFX62GMaZt)Ueiz zM9jnTcZxsui&!MU4Vfn(Je#s}FdgPDW`~d0kp66`ASqyVe+FZ*qZ2NMxKJEuH!e5|Z=$|g^TU~_ zLVvcQLf~M@>A`j*UoYOt>HFt|7~iRs+oX-&eV1 yn|9ImNK zMaT7Pd?$SK(jiqX0a1c4fMQK;rv}oX>Yw|J^7@rzov|JHXWyM?lbwk!1@QN-9<8P$ zR0PllPE(3*_I+Yb&?QPeytugF^+nX2ex$%p_wjdxPmd>KPC9HqJ_0`+HlStye-7I* zRxx-6>c=PLxWo2?$PE1H|C`ak1#z(4^MTI@WLn}BU30ksVD$O940nr=9%R{o)()Wg0g^X^ZD0XiHqdJhG_jm~Q?Lyz zpkRQI0H&nQ1>3*^3I>ETz(yiM$9Vqzft?CI!|8-7HiK;Wm`{JoMF0o_0KyR``AJ;I z`an(#2!7R1StL(s|2|tl05)ii>j$L)xWE4v5Uc@()eo%ru`XlzZ%36=Tkfq>k^|F@ zr6@B9^x#ylIH?D7hD|$ae-~^m=Ul6TAHl^*6&iAq@BW%J`os^3$csh_BiiIn#N%@k zJecis@Yvl`?Fop}*U}SH1-c)g(N?m#@bbDikWQtFNDw1ORTd_63I$MT* {>%_##aTqFe*Ic8FGUs4S+^86@x|-eS0KU01c%b z-U~52yZdm=9dEu`F)ZJ$_NHA?3h|L2N7rQRnrdSUMZB)~m}bw5I1M4y+-FPRli>M< zl@IjImo1U^Ayhm$F5$0}^4B~ z-AM8Z$+}VBtQKC$xmG~Tk_4{HqGX0Um2OM&kOXjv{WnU))vUCgy z)3-(UX0hn`Ij5#6{Pq^lk6g&@ZavTEJPhyOLy?qkt;zO$tj o`}BF$y&3&9PYZg zVtL#3ikdI4sGn805VYs&e2t=A-{P8~6*)RVH3q!4?xtXBZPrt30rC=b)JSax}TU z-Amw$R=ILWk7dBA%u&SZj*L8t|NJo-uM(m~kbT81mCLu-bqltt1zl|j4_5gmhWOv7 z_VMuLrfqksN_N|#yg+)MF@!ugw4d6wyoxrI^kBSA4!?Z1`ECd%epJRF;qvyJi|P}t z%j>%8i}f!Vx9jr`1_^Q*hj+}?BfBzXn0FnqANF4=Uchirt}0|^gm;R+9=?p;qfQZ< zUC6I8KZ;CWRSkD1Hhy-TC*H&7D^2bC;kg=$NjAj#blW4{)uxcZap8@81v$&0$u^tu z1BTkqxmoRMoJm8RFIR5#RMLJr$3+xCd}PI4)sMhLNb+#tYiZa{*_XxubaynBO5P&J z*WRDxzKDpSXmRbZS1?=iOHD*qE@^f2=Y8wr$8SHH*Om-D+M(8Q#@Eu|?K^DDrz~?@ zX F>5YyF>mJXod~*Y8sVesWs?WjD|<06=Fd%*74{KE=m7mW6~~&LCJ|a5ggt9gz!m z&IBkH7&i+>M}+3-j(?5744(#u9ee<0nG32j1LolYj@w@?pALp~v_O{41ypo70QdKV zmj>JF2D)tM{AdsoB^PX~+kXSYI!j>71~Q=BAVZ*`s%d|JV1Q0KH%NQmvHII7=Zh1V z0>BPdpoHZ_gKe1;0?>3pIF!)2<9}WC>EJW`q&R_!E;k4@nd?XE c>psH zB>p%iHgn1YI~{z6(+M4S!wMn=$MvI~|8L8N>dAp{6<`_Ypj$o-dxo QpPxuXfZV#!#(j`SeT)HqO56kdd+1{UGC`8R)j|F*ArRyj_v*(_;%7|+ z@}u^4h7hP!-P(3q5;u0;$m`*AFZ#sB7E2?eg^VZ%-U~|hcko4W_ozySZrT~SGmS>{ zWPh(M&NraEbM^VO?_ft~cZbmDP9kl{LBZTZbJmSqcyh`?at(VgQ*E4$cU_m%@NDiY z^-yRqZy{XXFmb!b=4j0*p7u%W!}ExQEA{u*vmM_gmyajU3@7E61lM-^o91N1jO|GV zakW*|D|qt+XU= *qkh7F_(|Nx@4lRY6b0(}McK_IAkiccaef;W~Xc4D4_n z)6;|3y7^uZ+)-BRTX0Cg57hB^(u0GXTX`ek{1?0X*Xi(YNWL?X#ISFA9*u0KRfLFN zl^2oJe+%Viku0;Jawe7%%Oz`KE%Y0Ew-*?!)f~KaX$r`SF>20}V2%hVX}x_yM~?C; zlKABq`|dRjYC aX*X(gCwOgn)#>?@8Zf1pC*WU-m&6&jC;dyKMal&@Rf8L=s-LLxL>q{PcdiN^B zlBM-bZ;c18Xxo|8y_ L6Di_1Wrs^V z^U2tzgx{Df7tv|>JZJe4RZ)eV5Fg3V#yFByQ?tm=O?=Fhl6t 1!yePfJZjrb4edDjr4xLcg@v|3fQ9CA{> zHcW}UEu(}J4R#3-p3rBMy^Y1tN{~bE_@350NtxGQf8T?dv%Wgq|5?ghHx>0O6|E8} zWs|AtXC8G1%9LMb9$udmLbOb+BKm^Z8d3P-?KfgHqK^YLjN|e$7A~=Ky! yX^xQ z=M(W5uNJ^je*7kd{jwyT_d=3oz80j$Lt}80Pl59luT+FI)z{`bD#DDMBgyw47F&NR zjA(DK_L~#$L;5B%jgg3=GFl^)Dp8~Xw)(pxzPkI5 zbW?2S>S_-W^m?chhPJEA-9)&RP4s}qJAx?E-FP{dZM mg?m+_QpV_K&_j(A#%M#eu2bSD`^ES7^pz3%c$FKN=$D?h#%j4P_2J;Ng$0F}3 zpWQq8lUd_x$@Q6@RJU2NIzJ=|^ti?jba`{>emFl!#;7_vJ5tOVaZ`U5i#_N%3Ht)_ zTO6@w0XMY7{-T!+4$25J3ao^7)@VkV7t$%wLip5B$Iy4~H>V?f(aJ;qu%W3e#6DGo zJFQa~V`=W QPnU>qgiDH^W^P%?eo>Uk`t|7CE Zdhvkxof4Tj}{CYu30l9Q{331j{n7{*lu z1p@&mbo|>%%V#(vKp1}t7{*luwG0Sbfpi$bN_l}n0bUc}mY;O#xsJ8!0O1oT7|6|Y zgUnOp`q9etTLko9z>s62E~i-rQaC&y%Z9)zfP-0vDns*tL=zBLmN_UGIA6RVksAb- zWey4kA~#-;%svE`W&Yp5XE>Z3Kn92n C #FpnC>_ zAZS_+_BRD+>7Btc&`=6}van#-0wI`Tc7W^63383ViqwH&p_34yd_h>d5LkvfC>Ut2 z ;nrmXnhAJ-py#Az7>YWW $TQ}qf0MrVWeub+v|R;xY^v<2d#?#0z#-{@FPHx&1@l%U|_B++t|@TpQ5Wo2d8 zz3^DtCpsQq;``Uf0?PXKiMLn$;ii^cYFH)?U0OslzS~8pX3=k@zDAZwr^*T^RN9dK zbl~8VB(7|DD^nsOHKznY*qVjeTRuJYx@t1gXl=~sx|eqSlhxvi{UY?4Yg+Z`B#F7g zA0$g|A*`r3y1%zN8mg Yh*u{|wM`lf2$mziv z_ib{Cl}TWfOg29&a$hiEvRIWU21&s76s}RU*+bQ>{w=#OyX9|{bJTvT@-E&h3Bz#< zv`tyrhPC)vGI)$%;$MYDlFf>(di#mlL*(XfO^6$bUnUk4<@9Iog=-a`$zWB~zs+`} zH9d-((MzU1e!V;HyHA73Q(3Iq3uJ=ly%N&}n8$SM<|inTua}mXR{5>oki*yILyElf zd H^dN5{7a+NpPogwg@fPXD z?KeCz@|QMON()Rog`HQWbS?y!8FAeq{yHp^oz)k)8_#^e%HZhS*H*XgCQXPg7@2?- zb|9L>uJ2*=I+}jIA^k#u%sBI6q2XR?ew8|1J3}Duz&E(L3|qk+AB1boy?kSAsy8k2 z=KY@bFvJm8S5dc?+1o2Vo5{<}Rr*L8*BBXapL7o0pkvMF>6^PDd>BhE^FgFK=Re*~ z@b&gnf1)rowC_J+%C;@vC+PTaw~8z^;^ocP(lzsqn`qZcdBW&Id_~BzocEUII$s{Z z)0mFqEZ=U1yYhOTY(~&?y|g9JlWLVVNH~T^IaKE0Lzb&!ySeKTnpEqZ)TgSka!Py+ z^i1%VR5B(>K8#9KdhPBo;kGbnv!%ng+-GU`q!6E6y)T68a`-X$wS)DtzH^3>!`-S3 zr}3tkS4Cx)6J^_%`xxPmyl(Mb%A28m`7*w|r{?opBw{#b8_f@ikq1<6OT8V`SMalK zWgW(^jn<^exR&6Kr4@ellX+>+)-iz1qwn?xQklMq#!hoD=sfO9gb7ntagGYFM4p6Q z{8%qtVzO9-%Sd0iqus8cWXOS4M;#tT=A2;c=b9NhL-o+~yS?9U3j}`eFR^2n(q=H5 ziT6EnPSPir*{_V><)`i(5ROpDSU!kKTXEX+XXVDvY1v+peRPO1WaQo`t-bCv$s~Va zvN3U=`_|%uCN|q7iQx9lTND>BygB54Uq}$;$UQ%>I+miXqq>n~qlc+`B|LACj*_df z4Ne`!|J-(>rH!ChNcU!UHHY4Yg+ky{0k!Vghywy+8<9Q&4N{SgwQ4gDCyS9P;oOo3 zyTe;e=Ol>dM8Zp~-(+3ypb&Dqp!(S6wLqI RM6fq2$cZF;0s`{{~dT-6? z3w8(Vo{WY5 @%-XfK|AFC{VIdULMQoEkpIZ90*QrS`Bncc NyUOK4dQ^BwwN3dlBgbrx$ #Gy*?1j0AmC2y-sHAA+T&Vuss7s5MTxth#LdTX8UhoSg#Lk*#N TcFw1}vDi1(iJ8Ah0CyeV<@bACoQ;sK8l#~^ub_c7947O!x8z@w~ z<>ac*a5^~v`B@&|r+X57hSPaE_zb5L=$HU>jX(_l?lhkAxBxO5AeMVFFo2x!?m^!2 z>EJUQP7Y|>EXcqY2rPpS>`k!)Q z^MZ8NKwD}5dhtSKc0tC}Kwt@cV1}VmVIW5nmcDm(=viLUk2&Wcf#W~l*Izl2Q=%E* zs{VJ-%J223|Ajec3t^5G>V8$9euzh%q571oe$#da+L5E}^)TY*nw&(i+pFgJ9-2`b zA0*7aaq mdNJ5YB7dE@h=SkwVun)2bXlR12Gp3*4 zOnfVYV-{BG8>Rn_UdDxuwva-T9Nmz1qhrtNOZVLzKbkbN+;SP4q{G^8iVI(-r|j=k z`xIBq-z2`a?t1yE-ims8&Z Hhz%*yN (N{ksZ%1 z$J{RYAQ{#ALmZ7wdd-ADftcz>iXwB#NBVQmN#SI5BCw asd~Y-S0*_lv5POIA22=Sh@}88G^n%dcM>NSVI_p^yVvA*8=vbY{%dkbzZLgLQ znzT?_)5?>~+q}QrZ+1w8yiwcqX)myeB^>UVn^!N69_N8c|7*5v`FuC_L9zSJ>2q}H z4xV^b=hYhA!oAAVh2r))NDgx@3tFk9A~AB1A^0WDW6|w7*`^t+jlEWi4bLiWEkt(J z+gf{%b#d}JFN-$kHhhqb3A|20<`TAf`FQcbVuzua(WNIB*XI)KKSeKpQS!GQCd!u6 z&GO1duz6S*H2+HLpjBnN!0gdjMRc52Q^sWCC%?DdU-ncOqRStc@!McX3+Jn;6A~I{ z#ZAJcPt@KxKokF(IDn+BZS%gyHL+FS{95)FHtO5N3ET%>hT1WyN7EmY%LQc)hSvBe zTf4ujn2=s<^_-Y4dZ`iAVcq3=J2KDZvPqIs+v96}gOXGEU%gceBHJ=u)218`CyEq` zyjZPW`I*{XcSXqy)h;{7$0+Mzjo%US7@VbrL 97U&7!W+0cRHE_xbecv=JVim$m^rbJH{cII|Hw9+dPg{|bX z6t1lEy2`tc#@u;jL-|2TrI7fM!#k3RZ3+G=#F7s}H^L@2@eT<60ohcx?0BCi_?j(> zGX14d_?*JT*&_}c$qt{>Z SLV{MebOi>&GLt5q)Ba4(S>`Udxlh7FOmP574#+y;Y1w%Qm1*+$Yh zB;#Ii`ohf%T%daQ+C?J0CxzmoOGAWj-MXgaxH-+}$7l)+5hZMnRq9ksy}2FX6qm&a z?1LN|0VDq;&w+Q#WJJ%7j7xmT9XXyXE5uk}>!@MN8+ao(`cmtPK;p@|3Rrl8)NSpE z#>R9 X*1425^P{Z!j*DLH6%Q3OtzlaoZj*EOA3~oByZ65 7oOh&LRLnp+7arz;!Ove8PhK*>zmJRrQVC}^aSSBN=Wgz&3 z0J-)Pdxm8r{x>kJ(+IL`=(trLkcJc3X)9ocp~EwQ8Y0N5VIvw4!yH^d#Q}u82~67l z`{6tte1? +CU6~Bn3>!A7gd!5*pVyqPldO-sY zAI-a@1rLEtY7#HU*;bl!zDiPJ(<4*#niRv&2oh_A)89@>MvLq5I0RBK_&a}o#$8{v zLx08oW7z!7W^RT0uzwHVr7BG~rtO;(%C442 z791gWm%q2=+RYGlmrNQY@*GjPFZk&2I_H7N>#!RLbWNBwdA*E%o+<@fYEcq;)5BQ$ zK^RL{X82k%aGmt>BAywdvlrkMuUYl?xs+JBI0>hTs51C-y>k%IE!K85j^h`rS h+jT=OxsLP{bYO_(_F^mUL{QIE>Ar z-xxGqY*C)$xFcVEFY@uSMe^lfdW^IOE0IQdwHBCB8~Y(oMvBXv3m;0^SgK_1xu5H| z3z;IFG;?jJR=pawIq+~OE}}Y!-cKokrS$nHg>hO)&66%kw7ZB!riuzm=M4MG(Xlye zCLF(*y|2pQ`M&x5VkJVgwP&idPJ-fnzHyqD*&+OZUVZ_#h)Vn*I_EugocU1#o8dg$ zkWZQSocCU}(7&La<(yh#Mao5gw4fzYMx{p8z*BQx#A0 a-G4 zNi;Z-ioK|}4()L{Tyy+Zb0!!gCRh~mbTt_AIrs_`5L}9=8WyUxb7C)>iJw`?DM@M^ z2y)XX%Nja+>|j^FV9Z9`S})#u!QUpwXDqKVtokVzayQ+!)=i+n>-H-G?ja{yJ@%T( z$Xes8i0RkJ>3mQ~HM$Gf$R%C{QVnKhsbfss3djyM$HiZ@)zEduxT-?-@^N=IQykmj zZdwmILXpjdyZ$m^{TiDEy>0$juk6FQ`fJfYibrnFs)_kGl@={Dc-3bIY(1|_6e{?V z$(pb3y~V2FA%dX(?mQm `~*{k7zddsl50$>50DOYeuh zZQfWz9e }{iQuv2u87ZyEsSHt_;)DsaB421 zeShM?)HlgI(|Vu9$mBtVrJi*xO{KVZMcs|h4vtZ=uI?j6gg%Kk-8E^ey%(w)F?CXq z`h>Rwx-qA`(u!8izRSNi_?}Odw(<4d`pN++n^QZ=i74uy8~F!4kAs`_S4oQd7&!(s ziu&h%KNdwnM^63Uq9|@yF3~>=Ia?IP4a+401)o-ug5~ysfdQ%kklY0EU|_j@{|yY| zNq~X@t_L6rdeRMnZGi&?1LP~H $*X7{<#50|UKVpmP)<$2yKrv3wdB zHVqAG7%1TZv@wt^!^FFwV1UHL3)030fn{O-H!zHg3 g39!vT*m K#Lz>6raFCVCB+5!BDywNT>^V z>&HTo|Aalm4+1)o4 Pg3g5fce}rQ^dHSTXQ?}A{7_W)dY8|- zWt G(n^FBDUx2Vn|IP# zh#W&f;MCS}Jsjj(85WxoolCMkz&=o5z_-cj|4_(f?L~&`| zXfQ6e+_Qeq@&SjSdS)`L_#uVc2mPgU0U!9|KO^Qke&AOgph@u@Ke)GZZ)U!A0t1;R z?%EiF80N(e`s-e3f(Ru+hc~QU_CxUl66 Y+YGV zZy5;_#{7Szy>(bsUDrJf2!fQPAYB5|eGW({0!nv>bT`r|Qi7y(h?Gb-NJ>achal1^ z-3@*R@7L#jIBb5me(%3r*I=!)_u6Z%Ip-K-npwUce$*?m^HzKX558${H->gwZ}vQD zFvU>tSrAYAF7Z8YRWhotUn4Dz>Ogr1$Kmw`m2W3BG$(3mPxYz4#gX6TWS1jvo8U#V z &S+ozsthrZ