Renaming etip to ede-tip

Updating Jamfile
This commit is contained in:
Sanel Zukan
2008-09-22 13:50:03 +00:00
parent 6dab9ccb08
commit 3471b0f026
12 changed files with 4 additions and 4 deletions

96
ede-tip/Fortune.cpp Normal file
View File

@@ -0,0 +1,96 @@
/*
* $Id$
*
* Etip, show some tips!
* Part of Equinox Desktop Environment (EDE).
* Copyright (c) 2008 EDE Authors.
*
* This program is licensed under the terms of the
* GNU General Public License version 2 or newer.
* See COPYING for the details.
*/
#include "Fortune.h"
#include <netinet/in.h>
#include <ctype.h>
#include <stdio.h>
struct FortuneFile {
FILE* str_file;
FILE* dat_file;
StrFile data;
};
FortuneFile* fortune_open(const char* str_path, const char* dat_path) {
FILE* sp = fopen(str_path, "r");
if(!sp)
return NULL;
FILE* dp = fopen(dat_path, "r");
if(!dp) {
fclose(sp);
return NULL;
}
FortuneFile* f = new FortuneFile;
f->str_file = sp;
f->dat_file = dp;
fread((char*)&f->data, sizeof(StrFile), 1, f->dat_file);
f->data.str_version = ntohl(f->data.str_version);
f->data.str_numstr = ntohl(f->data.str_numstr);
f->data.str_longlen = ntohl(f->data.str_longlen);
f->data.str_shortlen = ntohl(f->data.str_shortlen);
f->data.str_flags = ntohl(f->data.str_flags);
return f;
}
void fortune_close(FortuneFile* f) {
fclose(f->str_file);
fclose(f->dat_file);
delete f;
}
unsigned int fortune_num_items(FortuneFile* f) {
return f->data.str_numstr;
}
bool fortune_get(FortuneFile* f, unsigned int num, edelib::String& ret) {
if(num >= fortune_num_items(f))
return false;
// read position from .dat file
off_t seek_pts[2];
fseek(f->dat_file, (long)(sizeof(StrFile) + num * sizeof(seek_pts[0])), 0);
fread(seek_pts, sizeof(seek_pts), 1, f->dat_file);
seek_pts[0] = ntohl(seek_pts[0]);
seek_pts[1] = ntohl(seek_pts[1]);
// now jump to that position in string file
fseek(f->str_file, (long)seek_pts[0], 0);
char buff[1024];
char* p;
char ch;
ret.clear();
while(fgets((char*)buff, sizeof(buff), f->str_file) != NULL && !STR_ENDSTRING(buff, f->data)) {
if(f->data.str_flags & STR_ROTATED) {
for(p = buff; (ch = *p); p++) {
if(isupper(ch))
*p = 'A' + (ch - 'A' + 13) % 26;
else if(islower(ch))
*p = 'a' + (ch - 'a' + 13) % 26;
}
}
ret += buff;
}
return true;
}

49
ede-tip/Fortune.h Normal file
View File

@@ -0,0 +1,49 @@
/*
* $Id$
*
* Etip, show some tips!
* Part of Equinox Desktop Environment (EDE).
* Copyright (c) 2008 EDE Authors.
*
* This program is licensed under the terms of the
* GNU General Public License version 2 or newer.
* See COPYING for the details.
*/
#ifndef __FORTUNE_H__
#define __FORTUNE_H__
#include <edelib/String.h>
/*
* This is a reader for fortune plain and their corresponding binary .dat files.
* Based on code from Amy A. Lewis since I was too lazy to search format specs
* around the net.
*/
#define DAT_VERSION 2 // we know only for this
#define STR_ENDSTRING(line, tbl) ((line)[0] == tbl.stuff[0] && (line)[1] == '\n')
#define STR_ROTATED 0x3 // rot-13'd text
struct StrFile {
unsigned int str_version; // version number
unsigned int str_numstr; // number of strings in the file
unsigned int str_longlen; // length of the longest string
unsigned int str_shortlen; // length of the shortest string
unsigned int str_flags; // bit field for flags
char stuff[4]; // long aligned space, stuff[0] is delimiter
};
struct FortuneFile;
FortuneFile* fortune_open(const char* str_path, const char* dat_path);
void fortune_close(FortuneFile* f);
// returns a number of known strings
unsigned int fortune_num_items(FortuneFile* f);
// gets strings at num; first is at 0 and last at fortune_num_items() - 1
bool fortune_get(FortuneFile* f, unsigned int num, edelib::String& ret);
#endif

40
ede-tip/Jamfile Normal file
View File

@@ -0,0 +1,40 @@
#
# $Id$
#
# Part of Equinox Desktop Environment (EDE).
# Copyright (c) 2000-2007 EDE Authors.
#
# This program is licenced under terms of the
# GNU General Public Licence version 2 or newer.
# See COPYING for details.
SubDir TOP etip ;
SOURCE = Fortune.cpp etip.cpp ;
EdeProgram etip : $(SOURCE) ;
TranslationStrings locale : $(SOURCE) ;
EdeManual doc/etip.txt : doc/etip.jpg ;
ProgramBare etip-compiler : etip-compiler.c ;
# this rule is for compiling fortune files
rule FortuneCompile
{
Depends $(<) : etip-compiler ;
Depends $(<) : $(>) ;
Depends all : $(<) ;
SEARCH on $(>) = $(SUBDIR) ;
MakeLocate $(<) : $(SUBDIR) ;
FortuneCompile1 $(<) : $(>) ;
Clean clean : $(<) ;
}
actions FortuneCompile1
{
$(TOP)/etip/etip-compiler -s "$(>)" "$(<)"
}
FortuneCompile tips/ede.dat : tips/ede ;

BIN
ede-tip/doc/etip.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

122
ede-tip/doc/etip.txt Normal file
View File

@@ -0,0 +1,122 @@
Etip documentation
===================
Etip is 'Tip of the Day' program which will show tips about EDE usage.
It is also capable to show fortune-like tips, reading fortune files.
image:images/etip.jpg[Etip]
Details
-------
Etip will be usually invoked when EDE is started, and if you don't want
this, you can always uncheck 'Show tips at startup' checkbox.
Etip will read tips from fortune-like file, which is based on two parts:
* file with tips
* a companion with *.dat* extension
File with tips is plain text file in human readable form and is main source where
you should add, changed and delete tips. Each tip is separated with *%* character
at the beginning of the line, and (as advice), those should be nicely formatted
(proposal is to use around 66 characters per line so they can nicely fit inside
etip window).
*.dat* file is binary file and does not contain any tip strings; it have only
offsets to those in plain text file to allow fast random access to any of
specific tip string. *.dat* files are created with 'etip-compiler' command (see bellow
for the details), and must be updated each time when a source file with tips is updated.
[NOTE]
Both files must exists so etip can read the content.
Example
-------
Let we as example create simple tip file, named 'demo' with some content.
--------------
This is tip one.
%
This is tip two. Nice.
%
This is tip three. Progress, man, progress :)
%
--------------
[NOTE]
Please let end line in each tip contains *%* character. With this we retain a small
compatibility with fortune
Now save this file in 'demo' and invoke 'etip-compiler' on it. Doing that is like:
--------------
etip-compiler demo
--------------
You will see output like this:
--------------
"demo.dat" created
There were 3 strings
Longest string: 46 bytes
Shortest string: 17 bytes
--------------
Output from 'etip-compiler' shows some informations you probably don't need and, most important,
it shows that he created *demo.dat* file. If you want to suppress these outputs, just
use '-s' flag, like:
--------------
etip-compiler -s demo
--------------
'etip-compiler' will, by default, use input name and append *.dat* suffix; the best way is to keep
it like that since etip expects names of tip file and .dat file are the same (or will not be able
to find .dat file). 'etip-compiler' have some more options, and for the details see below.
Configuration
-------------
Etip does not have command options and the only file it reads (beside tip files) is 'etip.conf'.
This file should contain path to the tip file name. Here is the sample:
--------------
[etip]
Path = /usr/share/ede/tips/ede
--------------
[NOTE]
Make sure in the same directory exists *.dat* file.
etip-compiler details
---------------------
As you could see from the previous text, 'etip-compiler' is simple command line tool that will
create .dat files. It will correctly scan tip file, calculate offsets (and something more) and spit
that in the file that etip understands.
[NOTE]
You must invoke etip-compiler each time you change file with the tips or .dat companion will contains
incorrect data.
etip-compiler options
---------------------
-s::
Suppress output details
-c [char]::
See [char] as delimiter
-i::
Ignore case in ordering
-o::
Order strings
-r::
Randomize pointers
-x::
Set rotated bit

564
ede-tip/etip-compiler.c Normal file
View File

@@ -0,0 +1,564 @@
/* $NetBSD: strfile.c,v 1.3 1995/03/23 08:28:47 cgd Exp $ */
/*-
* Copyright (c) 1989, 1993
* The Regents of the University of California. All rights reserved.
*
* This code is derived from software contributed to Berkeley by
* Ken Arnold.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software developed by the University of
* California, Berkeley and its contributors.
* 4. Neither the name of the University nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*/
/*
* Changes, September 1995, to make the damn thing actually sort instead
* of just pretending. Amy A. Lewis
*
* And lots more.
*
* Fixed the special cases of %^J% (an empty fortune), no 'separator' at
* the end of the file, and a trailing newline at the end of the file, all
* of which produced total ballsup at one point or another.
*
* This included adding a routine to go back and write over the last pointer
* written or stored, for the case of an empty fortune.
*
* unstr also had to be modified (well, for *lots* of reasons, but this was
* one) to be certain to put the delimiters in the right places.
*/
/*
*
#ifndef lint
static char copyright[] =
"@(#) Copyright (c) 1989, 1993\n\
The Regents of the University of California. All rights reserved.\n";
#endif / * not lint * /
#ifndef lint
#if 0
static char sccsid[] = "@(#)strfile.c 8.1 (Berkeley) 5/31/93";
#else
static char rcsid[] = "$NetBSD: strfile.c,v 1.3 1995/03/23 08:28:47 cgd Exp $";
#endif
#endif / * not lint * /
*
*I haven't the faintest flipping idea what all that is, so kill the warnings
*/
#include <stdlib.h>
#include <unistd.h>
#include <netinet/in.h>
#include <sys/param.h>
#include <stdio.h>
#include <ctype.h>
#include <string.h>
#ifndef MAXPATHLEN
#define MAXPATHLEN 1024
#endif /* MAXPATHLEN */
#define STR_ENDSTRING(line,tbl) \
((line)[0] == (tbl).str_delim && (line)[1] == '\n')
typedef struct { /* information table */
#define VERSION 2
u_int32_t str_version; /* version number */
u_int32_t str_numstr; /* # of strings in the file */
u_int32_t str_longlen; /* length of longest string */
u_int32_t str_shortlen; /* length of shortest string */
#define STR_RANDOM 0x1 /* randomized pointers */
#define STR_ORDERED 0x2 /* ordered pointers */
#define STR_ROTATED 0x4 /* rot-13'd text */
u_int32_t str_flags; /* bit field for flags */
u_int8_t stuff[4]; /* long aligned space */
#define str_delim stuff[0] /* delimiting character */
} STRFILE;
/*
* This program takes a file composed of strings seperated by
* lines containing only the delimiting character (the default
* character is '%') and creates another file which consists of a table
* describing the file (structure from "strfile.h"), a table of seek
* pointers to the start of the strings, and the strings, each terminated
* by a null byte. Usage:
*
* % strfile [-iorsx] [ -cC ] sourcefile [ datafile ]
*
* c - Change delimiting character from '%' to 'C'
* s - Silent. Give no summary of data processed at the end of
* the run.
* o - order the strings in alphabetic order
* i - if ordering, ignore case
* r - randomize the order of the strings
* x - set rotated bit
*
* Ken Arnold Sept. 7, 1978 --
*
* Added ordering options.
*
* Made ordering options do more than set the bloody flag, September 95 A. Lewis
*
* Always make sure that your loop control variables aren't set to bloody
* *zero* before distributing the bloody code, all right?
*
*/
#define TRUE 1
#define FALSE 0
#define STORING_PTRS (Oflag || Rflag)
#define CHUNKSIZE 512
#define ALWAYS 1
#define ALLOC(ptr,sz) if (ALWAYS) { \
if (ptr == NULL) \
ptr = malloc((unsigned int) (CHUNKSIZE * sizeof *ptr)); \
else if (((sz) + 1) % CHUNKSIZE == 0) \
ptr = realloc((void *) ptr, ((unsigned int) ((sz) + CHUNKSIZE) * sizeof *ptr)); \
if (ptr == NULL) { \
fprintf(stderr, "out of space\n"); \
exit(1); \
} \
}
typedef struct
{
char first;
int32_t pos;
}
STR;
char *Infile = NULL, /* input file name */
Outfile[MAXPATHLEN] = "", /* output file name */
Delimch = '%'; /* delimiting character */
int Sflag = FALSE; /* silent run flag */
int Oflag = FALSE; /* ordering flag */
int Iflag = FALSE; /* ignore case flag */
int Rflag = FALSE; /* randomize order flag */
int Xflag = FALSE; /* set rotated bit */
long Num_pts = 0; /* number of pointers/strings */
int32_t *Seekpts;
FILE *Sort_1, *Sort_2; /* pointers for sorting */
STRFILE Tbl; /* statistics table */
STR *Firstch; /* first chars of each string */
void usage(void)
{
fprintf(stderr, "etip-compiler [-iorsx] [-c char] sourcefile [datafile]\n");
fprintf(stderr, "Creates .dat file from fortune source file\n");
exit(1);
}
/*
* This routine evaluates arguments from the command line
*/
void getargs(int argc, char **argv)
{
extern char *optarg;
extern int optind;
int ch;
while ((ch = getopt(argc, argv, "c:iorsx")) != EOF)
switch (ch)
{
case 'c': /* new delimiting char */
Delimch = *optarg;
if (!isascii(Delimch))
{
printf("bad delimiting character: '\\%o\n'",
Delimch);
}
break;
case 'i': /* ignore case in ordering */
Iflag++;
break;
case 'o': /* order strings */
Oflag++;
break;
case 'r': /* randomize pointers */
Rflag++;
break;
case 's': /* silent */
Sflag++;
break;
case 'x': /* set the rotated bit */
Xflag++;
break;
case '?':
default:
usage();
}
argv += optind;
if (*argv)
{
Infile = *argv;
if (*++argv)
(void) strcpy(Outfile, *argv);
}
if (!Infile)
{
puts("No input file name");
usage();
}
if (*Outfile == '\0')
{
strcpy(Outfile, Infile);
strcat(Outfile, ".dat");
}
}
/*
* add_offset:
* Add an offset to the list, or write it out, as appropriate.
*/
void add_offset(FILE * fp, int32_t off)
{
int32_t net;
if (!STORING_PTRS)
{
net = htonl(off);
fwrite(&net, 1, sizeof net, fp);
}
else
{
ALLOC(Seekpts, Num_pts + 1);
Seekpts[Num_pts] = off;
}
Num_pts++;
}
/*
* fix_last_offset:
* Used when we have two separators in a row.
*/
void fix_last_offset(FILE * fp, int32_t off)
{
int32_t net;
if (!STORING_PTRS)
{
net = htonl(off);
fseek(fp, -(sizeof net), SEEK_CUR);
fwrite(&net, 1, sizeof net, fp);
}
else
Seekpts[Num_pts - 1] = off;
}
/*
* cmp_str:
* Compare two strings in the file
*/
int cmp_str(const void *v1, const void *v2)
{
register int c1, c2;
register int n1, n2;
register STR *p1, *p2;
#define SET_N(nf,ch) (nf = (ch == '\n'))
#define IS_END(ch,nf) (ch == Delimch && nf)
p1 = (STR *) v1;
p2 = (STR *) v2;
c1 = p1->first;
c2 = p2->first;
if (c1 != c2)
return c1 - c2;
fseek(Sort_1, p1->pos, 0);
fseek(Sort_2, p2->pos, 0);
n1 = FALSE;
n2 = FALSE;
while (!isalnum(c1 = getc(Sort_1)) && c1 != '\0')
SET_N(n1, c1);
while (!isalnum(c2 = getc(Sort_2)) && c2 != '\0')
SET_N(n2, c2);
while (!IS_END(c1, n1) && !IS_END(c2, n2))
{
if (Iflag)
{
if (isupper(c1))
c1 = tolower(c1);
if (isupper(c2))
c2 = tolower(c2);
}
if (c1 != c2)
return c1 - c2;
SET_N(n1, c1);
SET_N(n2, c2);
c1 = getc(Sort_1);
c2 = getc(Sort_2);
}
if (IS_END(c1, n1))
c1 = 0;
if (IS_END(c2, n2))
c2 = 0;
return c1 - c2;
}
/*
* do_order:
* Order the strings alphabetically (possibly ignoring case).
*/
void
do_order(void)
{
register long i;
register int32_t *lp;
register STR *fp;
Sort_1 = fopen(Infile, "r");
Sort_2 = fopen(Infile, "r");
qsort((char *) Firstch, (int) Num_pts - 1, sizeof *Firstch, cmp_str);
/* i = Tbl.str_numstr;
* Fucking brilliant. Tbl.str_numstr was initialized to zero, and is still zero
*/
i = Num_pts - 1;
lp = Seekpts;
fp = Firstch;
while (i--)
*lp++ = fp++->pos;
fclose(Sort_1);
fclose(Sort_2);
Tbl.str_flags |= STR_ORDERED;
}
char *
unctrl(char c)
{
static char buf[3];
if (isprint(c))
{
buf[0] = c;
buf[1] = '\0';
}
else if (c == 0177)
{
buf[0] = '^';
buf[1] = '?';
}
else
{
buf[0] = '^';
buf[1] = c + 'A' - 1;
}
return buf;
}
/*
* randomize:
* Randomize the order of the string table. We must be careful
* not to randomize across delimiter boundaries. All
* randomization is done within each block.
*/
void randomize(void)
{
register int cnt, i;
register int32_t tmp;
register int32_t *sp;
extern time_t time(time_t *);
srandom((int) (time((time_t *) NULL) + getpid()));
Tbl.str_flags |= STR_RANDOM;
/* cnt = Tbl.str_numstr;
* See comment above. Isn't this stuff distributed worldwide? How embarrassing!
*/
cnt = Num_pts;
/*
* move things around randomly
*/
for (sp = Seekpts; cnt > 0; cnt--, sp++)
{
i = random() % cnt;
tmp = sp[0];
sp[0] = sp[i];
sp[i] = tmp;
}
}
/*
* main:
* Drive the sucker. There are two main modes -- either we store
* the seek pointers, if the table is to be sorted or randomized,
* or we write the pointer directly to the file, if we are to stay
* in file order. If the former, we allocate and re-allocate in
* CHUNKSIZE blocks; if the latter, we just write each pointer,
* and then seek back to the beginning to write in the table.
*/
int main(int ac, char **av)
{
register unsigned char *sp;
register FILE *inf, *outf;
register int32_t last_off, length, pos, *p;
register int first, cnt;
register char *nsp;
register STR *fp;
static char string[257];
getargs(ac, av); /* evalute arguments */
if ((inf = fopen(Infile, "r")) == NULL)
{
perror(Infile);
exit(1);
}
if ((outf = fopen(Outfile, "w")) == NULL)
{
perror(Outfile);
exit(1);
}
if (!STORING_PTRS)
(void) fseek(outf, sizeof Tbl, 0);
/*
* Write the strings onto the file
*/
Tbl.str_longlen = 0;
Tbl.str_shortlen = (unsigned int) 0xffffffff;
Tbl.str_delim = Delimch;
Tbl.str_version = VERSION;
first = Oflag;
add_offset(outf, ftell(inf));
last_off = 0;
do
{
sp = fgets(string, 256, inf);
if (sp == NULL || STR_ENDSTRING(sp, Tbl))
{
pos = ftell(inf);
length = pos - last_off - (sp ? strlen(sp) : 0);
if (!length)
/* Here's where we go back and fix things, if the
* 'fortune' just read was the null string.
* We had to make the assignment of last_off slightly
* redundant to achieve this.
*/
{
if (pos - last_off == 2)
fix_last_offset(outf, pos);
last_off = pos;
continue;
}
last_off = pos;
add_offset(outf, pos);
if (Tbl.str_longlen < length)
Tbl.str_longlen = length;
if (Tbl.str_shortlen > length)
Tbl.str_shortlen = length;
first = Oflag;
}
else if (first)
{
for (nsp = sp; !isalnum(*nsp); nsp++)
continue;
ALLOC(Firstch, Num_pts);
fp = &Firstch[Num_pts - 1];
if (Iflag && isupper(*nsp))
fp->first = tolower(*nsp);
else
fp->first = *nsp;
fp->pos = Seekpts[Num_pts - 1];
first = FALSE;
}
}
while (sp != NULL);
/*
* write the tables in
*/
fclose(inf);
if (Oflag)
do_order();
else if (Rflag)
randomize();
if (Xflag)
Tbl.str_flags |= STR_ROTATED;
if (!Sflag)
{
printf("\"%s\" created\n", Outfile);
if (Num_pts == 1)
puts("There was no string");
else
{
if (Num_pts == 2)
puts("There was 1 string");
else
printf("There were %ld strings\n", Num_pts - 1);
printf("Longest string: %lu byte%s\n", Tbl.str_longlen,
Tbl.str_longlen == 1 ? "" : "s");
printf("Shortest string: %lu byte%s\n", Tbl.str_shortlen,
Tbl.str_shortlen == 1 ? "" : "s");
}
}
fseek(outf, (off_t) 0, 0);
Tbl.str_version = htonl(Tbl.str_version);
Tbl.str_numstr = htonl(Num_pts - 1);
/* Look, Ma! After using the variable three times, let's store
* something in it!
*/
Tbl.str_longlen = htonl(Tbl.str_longlen);
Tbl.str_shortlen = htonl(Tbl.str_shortlen);
Tbl.str_flags = htonl(Tbl.str_flags);
fwrite(&Tbl.str_version, sizeof Tbl.str_version, 1, outf);
fwrite(&Tbl.str_numstr, sizeof Tbl.str_numstr, 1, outf);
fwrite(&Tbl.str_longlen, sizeof Tbl.str_longlen, 1, outf);
fwrite(&Tbl.str_shortlen, sizeof Tbl.str_shortlen, 1, outf);
fwrite(&Tbl.str_flags, sizeof Tbl.str_flags, 1, outf);
fwrite( Tbl.stuff, sizeof Tbl.stuff, 1, outf);
if (STORING_PTRS)
{
for (p = Seekpts, cnt = Num_pts; cnt--; ++p)
{
*p = htonl(*p);
fwrite(p, sizeof *p, 1, outf);
}
}
fclose(outf);
exit(0);
}

2
ede-tip/etip.conf Normal file
View File

@@ -0,0 +1,2 @@
[etip]
Path = tips/ede

243
ede-tip/etip.cpp Normal file
View File

@@ -0,0 +1,243 @@
/*
* $Id: etip.cpp 1664 2006-06-14 00:21:44Z karijes $
*
* Etip, show some tips!
* Part of Equinox Desktop Environment (EDE).
* Copyright (c) 2008 EDE Authors.
*
* This program is licensed under the terms of the
* GNU General Public License version 2 or newer.
* See COPYING for the details.
*/
#include <FL/Fl.H>
#include <FL/Fl_Window.H>
#include <FL/Fl_Check_Button.H>
#include <FL/Fl_Button.H>
#include <FL/Fl_Group.H>
#include <FL/Fl_Box.H>
#include <FL/Fl_Pixmap.H>
#include <edelib/Nls.h>
#include <edelib/Config.h>
#include <edelib/DesktopFile.h>
#include <edelib/File.h>
#include <edelib/StrUtil.h>
#include <edelib/Util.h>
#include <edelib/MessageBox.h>
#include <edelib/Directory.h>
#include <stdlib.h>
#include <time.h>
#include <stdio.h>
#include "icons/hint.xpm"
#include "Fortune.h"
static Fl_Pixmap image_hint(hint_xpm);
Fl_Window* win;
Fl_Check_Button* check_button;
Fl_Box* title_box;
Fl_Box* tip_box;
int curr_tip = 0;
FortuneFile* ffile = 0;
edelib::String fstring;
#define TITLE_TIPS_NUM 4
const char* title_tips[TITLE_TIPS_NUM] = {
_("Did you know ?"),
_("Tip of the Day"),
_("A tip..."),
_("Boring \"Did you know ?\"")
};
const char* random_title(const char** lst, unsigned int max) {
unsigned int val = rand() % max;
return lst[val];
}
const char* random_fortune(void) {
unsigned int val = rand() % (fortune_num_items(ffile) - 1);
curr_tip = val;
fortune_get(ffile, val, fstring);
return fstring.c_str();
}
FortuneFile* load_fortune_file(void) {
edelib::Config conf;
if(!conf.load("etip.conf"))
return NULL;
char path[1024];
if(!conf.get("etip", "Path", path, sizeof(path)))
return NULL;
// check if file exists and at the same place we have .dat file
if(!edelib::file_exists(path))
return NULL;
edelib::String dat = path;
dat += ".dat";
if(!edelib::file_exists(dat.c_str()))
return NULL;
return fortune_open(path, dat.c_str());
}
bool create_directory_if_needed(const edelib::String& path) {
if(!edelib::dir_exists(path.c_str()) && !edelib::dir_create(path.c_str())) {
edelib::alert(_("I'm not able to create %s. This error is probably since the path is too long or I don't have permission to do so"));
return false;
}
return true;
}
/*
* Save/create etip.desktop inside autostart directory.
* Autostart resides in ~/.config/autostart and directory does not
* exists, it will be created (only /autostart/, not full path).
*
* TODO: edelib should have some dir_create function that should
* create full path
*
* Saving/creating inside /etc/xdg/autostart is not done since
* ~/.config/autostart is prefered (see autostart specs) and all
* application will be looked there first.
*/
void write_autostart_stuff(void) {
edelib::String path = edelib::user_config_dir();
if(!create_directory_if_needed(path))
return;
// now try with autostart part
path += "/autostart";
if(!create_directory_if_needed(path))
return;
// now see if etip.desktop exists, and update it if do
path += "/etip.desktop";
edelib::DesktopFile conf;
bool show_at_startup = check_button->value();
if(!conf.load(path.c_str()))
conf.create_new(edelib::DESK_FILE_TYPE_APPLICATION);
// always write these values so someone does not try to play with us
conf.set_hidden(show_at_startup);
conf.set_name("Etip");
conf.set_exec("etip");
if(conf.save(path.c_str()) == false)
edelib::alert(_("I'm not able to save %s. Probably I don't have enough permissions to do that ?"), path.c_str());
}
void read_autostart_stuff(void) {
edelib::String path = edelib::user_config_dir();
path += "/autostart/etip.desktop";
edelib::DesktopFile conf;
if(!conf.load(path.c_str())) {
check_button->value(0);
return;
}
if(conf.hidden())
check_button->value(1);
else
check_button->value(0);
}
void close_cb(Fl_Widget*, void*) {
win->hide();
write_autostart_stuff();
}
void next_cb(Fl_Widget*, void*) {
if(!ffile)
return;
curr_tip++;
if(curr_tip >= (int)fortune_num_items(ffile))
curr_tip = 0;
fortune_get(ffile, curr_tip, fstring);
tip_box->label(fstring.c_str());
}
void prev_cb(Fl_Widget*, void*) {
if(!ffile)
return;
curr_tip--;
if(curr_tip < 0) {
curr_tip = fortune_num_items(ffile);
curr_tip--;
}
fortune_get(ffile, curr_tip, fstring);
tip_box->label(fstring.c_str());
}
int main(int argc, char **argv) {
ffile = load_fortune_file();
// initialize random number only if we loaded tips
if(ffile)
srand(time(0));
win = new Fl_Window(535, 260, _("EDE Tips"));
win->begin();
Fl_Group* main_group = new Fl_Group(10, 10, 515, 205);
main_group->box(FL_DOWN_BOX);
main_group->color(FL_BACKGROUND2_COLOR);
main_group->begin();
Fl_Box* image_box = new Fl_Box(11, 13, 121, 201);
image_box->image(image_hint);
title_box = new Fl_Box(155, 23, 355, 25, random_title(title_tips, TITLE_TIPS_NUM));
title_box->labelfont(FL_HELVETICA_BOLD);
title_box->align(196|FL_ALIGN_INSIDE);
tip_box = new Fl_Box(155, 60, 355, 140);
tip_box->align(197|FL_ALIGN_INSIDE);
if(!ffile)
tip_box->label(_("I'm unable to correctly load tip files. Please check what went wrong"));
else
tip_box->label(random_fortune());
main_group->end();
check_button = new Fl_Check_Button(10, 224, 225, 25, _("Show tips on startup"));
check_button->down_box(FL_DOWN_BOX);
read_autostart_stuff();
Fl_Button* prev_button = new Fl_Button(240, 224, 90, 25, _("&Previous"));
prev_button->callback(prev_cb);
Fl_Button* next_button = new Fl_Button(335, 224, 90, 25, _("&Next"));
next_button->callback(next_cb);
Fl_Button* close_button = new Fl_Button(435, 224, 90, 25, _("&Close"));
close_button->callback(close_cb);
// check_button somehow steal focus
close_button->take_focus();
win->end();
win->show(argc, argv);
Fl::run();
if(ffile)
fortune_close(ffile);
return 0;
}

43
ede-tip/fl/etip.fl Normal file
View File

@@ -0,0 +1,43 @@
# data file for the Fltk User Interface Designer (fluid)
version 1.0108
header_name {.h}
code_name {.cxx}
Function {} {open
} {
Fl_Window {} {
label {EDE Tips And Tricks} open
xywh {299 206 535 260} type Double visible
} {
Fl_Check_Button {} {
label {Show tips on startup} selected
xywh {10 224 225 25} down_box DOWN_BOX labelsize 13
}
Fl_Button {} {
label {&Previous}
xywh {240 224 90 25}
}
Fl_Button {} {
label {&Next}
xywh {335 224 90 25}
}
Fl_Button {} {
label {&Close}
xywh {435 224 90 25}
}
Fl_Group {} {open
xywh {10 10 515 205} box DOWN_BOX color 7
} {
Fl_Box {} {
image {../icons/hint.xpm} xywh {11 13 121 201} labelsize 14
}
Fl_Box {} {
label {Some tips...}
xywh {155 23 355 25} labelfont 1 align 212
}
Fl_Box {} {
label {If you cannot access the titlebar, you can still move a window on the screen by holding the Alt key, clicking anywhere into the window and "dragging" it with the mouse.}
xywh {155 60 355 140} align 213
}
}
}
}

374
ede-tip/icons/hint.xpm Normal file
View File

@@ -0,0 +1,374 @@
/* XPM */
static char * hint_xpm[] = {
"118 197 174 2",
" c #F1F3F5",
". c #F2F4F6",
"+ c #F3F5F6",
"@ c #F0F3F5",
"# c #EEF0F3",
"$ c #EDF0F2",
"% c #EFF1F3",
"& c #F0F2F4",
"* c #F4F5F7",
"= c #F5F6F8",
"- c #F5F7F8",
"; c #F6F7F9",
"> c #F7F8F9",
", c #F8F9FA",
"' c #F9FAFB",
") c #FAFBFC",
"! c #FBFCFC",
"~ c #FCFCFD",
"{ c #FDFDFD",
"] c #FDFEFE",
"^ c #FEFEFE",
"/ c #ECEFF2",
"( c #F9F9FA",
"_ c #ECEEF1",
": c #E8EBEE",
"< c #E6E9ED",
"[ c #E7EAEE",
"} c #E8ECEF",
"| c #EBEEF1",
"1 c #E1E5EA",
"2 c #DFE4E9",
"3 c #E4E7EB",
"4 c #EAEDF0",
"5 c #DCE1E6",
"6 c #DBE0E6",
"7 c #DDE2E7",
"8 c #E0E5E9",
"9 c #E9ECEF",
"0 c #D7DDE3",
"a c #D8DEE3",
"b c #DFE3E8",
"c c #E4E8EC",
"d c #E5E9ED",
"e c #D3DAE0",
"f c #D6DCE2",
"g c #DBE0E5",
"h c #E3E7EB",
"i c #D1D7DE",
"j c #DEE3E7",
"k c #DADFE4",
"l c #D7DCE2",
"m c #E2E6EA",
"n c #D9DEE4",
"o c #D3D9DF",
"p c #CFD6DD",
"q c #CFD5DC",
"r c #CCD3DB",
"s c #CDD4DB",
"t c #D4DAE0",
"u c #CBD3DA",
"v c #CAD1D9",
"w c #C9D0D8",
"x c #C7CFD7",
"y c #C6CED7",
"z c #C5CDD5",
"A c #D5DBE1",
"B c #C8D0D8",
"C c #C6CED6",
"D c #C3CCD4",
"E c #C1CAD3",
"F c #C2CBD4",
"G c #C4CCD5",
"H c #BEC7D1",
"I c #D0D7DE",
"J c #D2D8DF",
"K c #BFC8D1",
"L c #BBC5CF",
"M c #BDC6D0",
"N c #CED5DC",
"O c #C0C9D2",
"P c #CAD2DA",
"Q c #B8C2CC",
"R c #B5C0CB",
"S c #B2BDC8",
"T c #B3BEC9",
"U c #B6C1CB",
"V c #BCC5CF",
"W c #ADB9C5",
"X c #AAB6C2",
"Y c #B5BFCA",
"Z c #B9C3CD",
"` c #BAC3CD",
" . c #BEC7D0",
".. c #B7C1CC",
"+. c #BAC4CE",
"@. c #B1BCC7",
"#. c #C2CAD3",
"$. c #A1AEBC",
"%. c #A6B3C0",
"&. c #ABB7C3",
"*. c #AEBAC5",
"=. c #B4BEC9",
"-. c #909FAF",
";. c #9AA8B7",
">. c #A4B1BE",
",. c #AFBAC6",
"'. c #8092A4",
"). c #8B9BAC",
"!. c #95A4B3",
"~. c #A9B5C1",
"{. c #768A9E",
"]. c #7D8FA2",
"^. c #8596A8",
"/. c #94A3B2",
"(. c #A2AFBD",
"_. c #A9B5C2",
":. c #B1BCC8",
"<. c #73879B",
"[. c #798C9F",
"}. c #8394A6",
"|. c #93A2B2",
"1. c #A3B0BD",
"2. c #ADB8C4",
"3. c #7A8CA0",
"4. c #7B8DA0",
"5. c #B0BBC7",
"6. c #8395A7",
"7. c #8B9CAD",
"8. c #98A7B6",
"9. c #A5B2BF",
"0. c #94A3B3",
"a. c #9CAAB9",
"b. c #A8B4C1",
"c. c #ACB8C4",
"d. c #A7B3C0",
"e. c #A5B1BE",
"f. c #9FACBA",
"g. c #8193A5",
"h. c #97A5B5",
"i. c #96A5B4",
"j. c #A0AEBC",
"k. c #A0ADBB",
"l. c #9DABB9",
"m. c #9CAAB8",
"n. c #99A8B6",
"o. c #9EACBA",
"p. c #98A6B5",
"q. c #8F9FAF",
"r. c #8D9DAE",
"s. c #8E9EAE",
"t. c #92A1B1",
"u. c #90A0B0",
"v. c #8798A9",
"w. c #8798AA",
"x. c #8899AA",
"y. c #899AAB",
"z. c #8A9AAB",
"A. c #8495A7",
"B. c #9BA9B8",
"C. c #7C8FA2",
"D. c #7E90A3",
"E. c #8C9CAD",
"F. c #8697A9",
"G. c #7F91A4",
"H. c #75889C",
"I. c #7B8EA1",
"J. c #91A1B1",
"K. c #778A9E",
"L. c #74889C",
"M. c #76899D",
"N. c #8293A6",
"O. c #788B9F",
"P. c #7F91A3",
"Q. c #72869B",
" . + . . + + . + @ # $ % & . + . @ % $ % @ @ . . * = - - - - ; ; ; - - ; > ; ; > > > > > , , , , ; = = = = = - ; ; , ' ) ) ) ) ) ) ) ! ! ! ! ~ ~ ~ ! ~ ~ ~ ~ ! ! ! ! { { { ~ ~ { { ~ ! ! ! ! ! ~ { { { ] ] ^ ^ ^ ] ] ] ^ ^ ^ ^ ^ ",
"* + + + . . + + . % / / # & . + + + + . @ % # & @ & % & + * = = - - - - - ; ; > > ; > , , , , ( ( ( ( ( , , , , > , ( ( ( ' ) ) ) ) ) ) ) ) ! ! ~ ~ ~ ~ ~ ! ! ~ ~ ! ! ! ~ ~ { ~ ~ ~ { { { ~ ! ! ~ ! ! ! ~ { { ] ^ ] ^ ^ ^ ] ] ^ ^ ^ ^ ^ ",
"* + + + . . + * + . % / # % % @ + * + . @ & % & % # # & + * + * - - = - ; > > ; > , ( ( , ( ' ' ( ' ' , , , , ( ( ( ( ( ' ) ) ) ) ) ) ) ) ! ! ~ { ~ ! ~ ~ ! ~ ~ ! ! ~ { { { ~ ~ { { { ~ ~ ! ! ~ ~ ~ ~ { { { ] ^ ^ ^ ] ] ^ ] ] ^ ^ ^ ^ ",
". . . + . + + = * + @ % @ @ & % @ . . . @ & % & % % & + + + * = ; - ; > > > > , ( ( ( ( ' ' ' ' ' ' , , , ( ( ( ( ( ( ' ) ) ) ' ' ' ) ) ) ! ! ~ ~ ! ~ ~ ~ ~ ~ ! ~ { { { { { { { { ~ ~ ! ) ! ~ { { { { { { ] ] ^ ^ ] ] ] ] ] ] ^ ^ ^ ",
" @ @ . + * = ; - * @ . . . . @ @ @ & & & @ & & & % & @ . + * * * = - ; > , , , , , ( ( ( ' ( ( ( ' ' ' , , , ( ( , , , ( ' ) ) ) ' ' ' ) ) ! ~ ! ! ! ~ ~ ~ ~ ~ ~ ! ~ { { { ~ { { { ~ ~ ! ) ) ! { { { { { ] ] ] ] ^ ^ ^ ^ ^ ^ ] ] ] ^ ] ",
"& @ . . * ; ; - * . + * + . + + + . @ @ @ & @ . * = = * * = - ; > , , , , ( ( ( ( ( , , ( ' ' ( > > , , , ( , , ' ) ) ) ) ' ' ) ) ) ! ! ~ ~ ! ~ ~ ! ~ { ~ ~ ~ ~ ~ { { { { ~ ~ ! ) ) ! ~ { { { { { ] ] ] ] ] ^ ^ ^ ^ ^ ^ ] ] ] ] ",
"% @ . . . + = * * * . + = = + + + + + * * + . . . . * = - = + + = ; ; > , , , ( ( ( ( , , , , ( ( , > ; , , , ( ' ( ' ) ) ) ) ) ) ) ) ) ) ) ! ~ ~ ! ! ! ! ! ~ ~ ~ ~ ~ { { { { { { ~ ! ) ! ~ { { { ] ] ] { ] ] ] ] ] ^ ^ ^ ^ ^ ^ ] ] ] ",
"/ # & + + + + * * . . + * - = * * + + * * . . . . * = = * * * * * * - ; ; , , ( ' ( ( ( , , , , ( ( , > , ( ( ( ' ' ' ) ) ) ) ) ) ) ) ) ) ) ) ! ~ ~ ! ! ! ! ! ! ! ~ ~ ~ { { { { { { { ! ) ! { { { ] ] ] ] ] ] ] ] ^ ] ^ ] ^ ^ ^ ^ ^ ^ ] ",
"/ # & @ . . + * * + * * * = - - * + + + + + . . . + * = * + * = * + + * = - ; , ( ' ( ( ( , , , > > , , , ( ' ( ( ( ( ( ' ) ) ) ) ) ) ) ) ) ) ) ) ! ~ ~ ! ~ ~ ~ ~ ~ ~ ! ! ~ { { { { { { ~ ! ~ { { { ] ] ] ^ ^ ] { ] ^ ] ] ] ^ ^ ^ ^ ^ ^ ^ ",
"% @ @ . . . . + * = = = - - = * * + * * + . . . + + + + * = * . + * = - ; > ( ( ( ( , , , , ; ; > , > , ( ( , , ( ( ( ' ) ' ) ) ) ) ' ' ) ) ) ) ! ! ! ~ ~ ~ ~ ~ ~ ! ! ~ ~ { { { { { { ~ { { { ] ] ] ] ] ] ] ] ] ^ ^ ] ] ] ^ ^ ^ ^ ^ ^ ",
"@ @ @ . . . . . + * = - - - = * * * * * * + . . + * = + + * * = = - ; , , , , ; > > > ; ; > > > ( ( ( , ( ( ( ( ' ' ( ' ) ) ) ' ' ' ) ) ) ) ) ) ! ! ) ! ! ~ ! ! ~ ~ ~ ~ { { { { { ] ] ] ] ] ^ ^ ] ] ^ ] ] ^ ^ ^ ] ] ] ] ^ ^ ^ ^ ",
". & & @ @ @ . . + + * - - - = * * * + + + + + + . . . + + + + * * * = ; ; > > > ; - ; ; ; ; , , ( ' ( , , ( ( , ( ' ' ' ' ) ' ( ( ' ' ) ) ) ' ) ) ) ) ) ! ! ! ! ! ~ ~ ~ ~ ~ { { { { ] ] ^ ] ] ] ^ ] ] ] ] { ] ^ ^ ^ ] ^ ] ] ^ ^ ^ ",
" . & & % # % @ . * + = - - = * * * * * * + * * + + + + . . + * * + + * = = - - ; > > > > ; > > > , ( ( ( , , , , > > , ( ) ) ' ' ' ( ( ' ' ) ) ' ' ' ' ' ) ) ) ! ! ! ! ~ ~ ~ ~ ~ { { { { ] ] ^ ] { { ] { { { { ] ^ ^ ^ ] ] ^ ^ ] ^ ^ ^ ",
"@ @ & & & & & % % & . * * = = * . . + * * * * * * * . . . + = = * + * - ; ; ; ; > > , , > > , > > , , , , , , > ; ; > , ( ' ( ( ( ( ( ( ' ' ' ) ' ( ( ' ' ' ) ) ! ! ~ ~ { { { { { { { { { ] ^ ] { ] ] { { ] ] ] ] ^ ^ ] ^ ^ ] ] ] ^ ^ ",
"# # % % % @ @ & % % & @ . * + . . . + + + + = - = * . @ @ + = = * * = - - ; ; ; > , , , , , , , ; > > > > > > - * * - ; > , , , , > , , ( ( ( ' ( ( ( ( ( ( ' ) ! ! ~ ~ { { { { { { { { { ] ] ] ] ] ] { { ] ] ] ] ^ ^ ] ] ] ] ] ] ] ^ ",
"_ _ / / / % @ @ % # & @ . . + + * = - = * . @ & + = = - - - - = = ; ; > , > > , > > , > ; - - ; ; - + @ + = ; ; > , > ; > > > , , , , > > , , ( ' ) ) ) ! ~ ~ { { { { { { ] ] ] ] ] ] { ] ] { ] ^ ^ ^ ^ ^ ^ ] ] ] ] ] ^ ^ ",
": < [ } | $ % & % $ & . . @ & & & & & @ . * * * * = * . @ & + * - - - - - * = - ; ; > > > , > > > ; - - - = * + & $ # @ = ; ; ; ; - - - - - ; ; ; ; ; ; > > , ( ( ' ) ) ! ! ~ { { { { { { ] ] ] { { { ] ] ] ] ^ ^ ^ ] ] ] ] ] ] ] ] ^ ^ ",
"1 2 1 3 } _ _ / $ / & @ @ & & % # # & . + * * * * . @ & & * = - - - - = * = - ; > ; > > , > ; - - ; = . @ # 4 4 _ # . = = = * + * * = = - - = - - - - ; > > , ( ' ) ) ) ~ { { { { { { { { ] { { { { ] ] ] ] ] ^ ^ ] ] ] ] ] { ] ^ ^ ",
"5 6 7 8 < : : } 9 4 / % # % & % # / / / $ # & + * * + . @ & & @ + * = = = - - = = - ; ; ; ; ; > ; - = = = . & $ 4 < [ 4 / @ . . + . . . . + * * * + + * + * - ; > , ( ' ) ) ! ~ ~ { { { { { { { { { { { ] ^ ] ] ] ] ^ ^ ] ] ] ^ ^ ] ] ] ] ",
"0 a 6 b c d [ < < [ 4 _ _ / _ _ | 9 } 9 9 | / % @ . + + . @ & & @ . * = = = = - = = - - - - - ; ; - * * + . @ $ 4 [ 3 d } / % @ . . @ @ & @ @ & % % & * ; > , , ( ' ) ! ~ ~ ~ { { { { { { { ] ] ] ] ^ ] ] ] ^ ] ] ] ] ] ^ ^ ^ ] ] ] ",
"e f g 8 c < : [ d d : : : [ < d 3 1 1 h < 9 _ # & @ @ & & % & + = - = = = = = = = = = - ; - * * + . # | : c 3 < 4 $ & @ . . & % % $ _ | 4 4 4 | _ # . - > , , ' ' ) ! ! ! ! ~ { { { { ] ] ] ^ ^ ^ ] ] ] ^ ^ ] ] ^ ] ] ^ ^ ^ ] ] ^ ",
"i f j h d < < d 3 h c h 8 j g k 0 l 0 6 1 [ | $ % & @ & # # % # # % * = = = = * * + + + * - = * . + . & _ } c 3 [ 9 _ # % & @ @ & $ 4 9 : [ < c c d : 4 / = ; > , ' ) ) ) ) ! ! ~ ~ { { { { ] ] ] ^ ^ ] ] ^ ^ ^ ] ^ ^ ] ] ] ^ ] ] ] ] ",
"e 6 m 3 c c h 1 b j 5 n f o p q r s i l j d 9 / # % % # / _ $ $ $ # @ . * = = * + + @ @ + + . . + . @ / : c 1 d 4 | / # $ # $ _ 9 < 3 m 1 1 m m m 3 [ 4 $ = ; > , ( ' ' ' ) ! ! ~ ~ { { { { { { { ] ^ ] ] ^ ^ ] ^ ^ ^ ^ ] ] ^ ^ ^ ^ ] ",
"6 1 h h m 1 b g l t p u v w x y z x q A 7 < 9 _ # % # $ | 4 / / / # @ + * = * + * . & # $ # @ . . % 9 3 1 3 } 4 9 | / | } d m b 7 7 5 5 b 1 m m d 9 / & + = - ; > , ( ' ' ) ! ! ~ ~ { { { { { { { ] ^ ^ ^ ^ ] ] ^ ^ ] ^ ] ] ^ ^ ^ ^ ] ",
"1 3 m b 7 k t s B C D E E F G C C w p l 2 : 4 | $ # $ / 4 9 | _ _ # . + + + + + . # _ _ _ # @ & 4 3 1 3 : 9 [ [ 9 : 3 j n n 6 j 8 1 1 c [ : [ } / % + = - - ; > , ' ) ) ! ~ { { { { { { ] ] ] ^ ^ ^ ^ ] ] ] ^ ^ ^ ^ ] ^ ^ ^ ^ ^ ] ",
"h m 7 l p B E H H E D G C B r I I J l 6 m : 4 | _ / $ _ 9 } 4 | _ # & & & . @ $ 4 } } _ & @ & _ 3 b h } 4 [ c d 3 b k a k b c [ 9 4 | / $ $ / / # @ . * * = = - ; , ' ) ) ~ ~ { { { { { { { ] ] ^ ^ ] ] ] ] ] ] ] ^ ^ ] ] ^ ] ^ ^ ] ",
"2 g J x K L M D v N p J t 0 k 6 6 6 j 8 c } 4 4 | _ / 4 } } 4 | _ $ $ $ # % % & % % / } < [ | # @ & $ d 7 1 } | 9 d h b 6 g 6 8 d } | _ / / $ % # $ $ $ # @ + * * * = - > > ( ' ) ! ~ { { { { { { { { ] ] ] ] ] ^ ] { { ] ] ] ] ] ] ] ^ ] { ",
"l s D H O C r o a a 0 a k 7 j j b 2 2 m < } 9 9 | / / 4 } 4 | _ $ # $ $ # # % % $ $ | } d [ | $ % # } b 5 d | 4 [ h j 6 j h < 9 4 | | 4 9 9 4 | | | | / $ % @ . . + * = ; > , ' ) ! ! ~ { { { { { { { { ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ",
"w F G w p A 0 a k a l f f n k k 6 5 7 m < : [ : 4 _ _ 4 9 | / # % & & & & @ & # / | : d : | _ $ / 3 6 2 [ 9 : d m 2 h < 9 _ | 4 9 : c 1 2 j b 2 8 m c } | $ % % @ + - ; > ( ' ) ! ! ~ ~ { { { { { { { { ] ] ] ] ] ] ] ] ^ ^ ] ] ] ] ] { ",
"y P J f 0 n a 0 A I u x C x w P p e f 5 h c 3 < 9 9 9 : 9 _ $ # % % % % & . @ % $ | [ c [ 4 4 _ 9 2 7 3 : } < c c [ 4 4 _ / | 9 } < m 7 n l A e e e l 6 1 < } 4 / % + = ; , ( ' ' ) ! ~ ~ { { { { { { { { ] ] ^ ^ ] ] ] ^ ^ ^ ^ ^ ] ] { ",
"I A a k n a a 0 o u G M Q R S T U V F r f g 7 1 c d d d [ | _ / $ # $ # % & @ @ % # _ < c : 9 : 4 c 7 1 [ : < 3 c } | / / $ $ / | | 9 [ 3 1 b 5 n l e i i A g 2 3 [ 4 / & . = - > , ( ' ) ! ~ { { { { { { { { { ] ] ^ ^ ] ] ^ ^ ^ ^ ^ ] ] { ",
"l k 6 7 6 6 5 6 k l o N B F V R W X W Y O v i l k 7 2 1 c } 4 | _ / $ # $ # % & & # | d c } 4 : : 1 b c [ : c m h : _ # # # # $ $ $ $ / 4 } : < c h 8 5 a 0 0 a g 2 3 [ 9 $ @ + - ; , ( ) ~ ~ { { { { { { { { { { ] ^ ^ ^ ^ ^ ^ ^ ^ ^ ] ] { ",
"g 7 b 2 b b 2 1 1 1 1 2 7 k l I y H Q T T Z K C P p t n b d } 9 | _ / / _ _ $ # # $ 9 c c 9 4 } c b 1 < [ [ d c 3 [ | # # # # % % % % # / | 9 } [ [ [ d 3 m b g 0 n 5 2 h < 4 # . = ; , ' ! ~ { { { { { { { { { { ] ] ^ ^ ^ ^ ^ ^ ^ ^ ] ] { ",
"5 b 1 m m m m c d d d c c c 3 8 5 n o w K Q T U M F y u e 6 m < } 4 _ _ _ _ / $ $ / : h c 9 4 } h 2 3 [ } : < [ [ [ 4 _ $ # # % % % # $ / _ | 9 [ d d d < < < h 7 k n g 7 2 3 : / @ * > ( ) ~ { { { { { { { { { { ] ] ] ] ^ ^ ^ ^ ^ ^ ] ] ^ ",
"7 2 h h 3 c 3 < } } : : : 9 } < 3 h 2 k e v V Y R ` V H z q 0 2 d 9 _ _ / $ $ # # / [ 1 c } 9 : 3 1 d [ 9 } d : } } } | / $ $ / / $ / $ / _ | 9 [ d h 8 m d [ : < h b 5 6 7 8 c } $ . ; ( ' ! { { { { { { { { { ] ] ] ] ] ] ] ^ ^ ^ ^ ] ] ^ ",
"2 1 h m 3 c 3 < 9 9 4 4 4 | | 9 } 9 [ m b k i y .Z R ..M z N a m 9 / / $ # % % % / [ m 3 } 9 : c 3 < < 9 9 [ : } 9 9 4 | | _ _ / $ $ $ $ / _ 9 } [ m 6 a 7 3 } | | } c 2 b 1 c : $ + > ( ' ! ~ { { { { { { { { ] ] ] { { { ] ^ ^ ^ ] ] ] ^ ",
"8 h c h h 3 h d } 4 4 _ _ / _ | _ / _ : 3 h 1 6 o z +.Q M F P f 8 9 $ # % & @ @ @ % 9 h h : 9 : d 3 < < : } } } : 9 4 4 9 4 _ / $ $ # # $ / _ | 4 9 d 7 t i k c 4 / $ | [ c c [ | & = , ' ) ! ~ { { { { { { { { { { { { { { ] ^ ^ ^ ^ ] ^ ^ ",
"2 h d m 1 h 3 c } 4 4 _ / $ / _ _ / _ 9 < : : [ 8 A v G D x p k 3 4 $ # % @ & _ 3 m : 9 : d 3 < : [ : } } : } 9 9 9 4 | / / / $ # # $ $ $ / _ } 3 k q s a 3 4 # % $ _ | _ & * ; , ) ! ~ { { { { { { { { { { { { { { ] ] ] ^ ^ ^ ^ ] ] ",
"b 1 3 1 2 h c 3 [ 9 9 4 _ / / _ | 4 9 } } 9 4 9 d 2 k t I o k m } _ / $ # % & @ @ & / d m [ 9 : d d } 9 : [ : } } [ [ : : } | _ $ / / # # # # # # # | [ 1 0 r P 0 c _ % % % & @ * ; > ( ) ! ~ { { { { { { { { { { { { { { { ] ^ ^ ^ ^ ^ ] ] ",
"5 j 2 b b m c 3 c : [ [ } 4 | | 4 } } 4 | 4 9 } < 3 1 j 7 2 c } _ $ $ / / $ # & & # / < h [ 9 } [ [ 9 | 4 : : } : d d d < : 4 _ / _ / # # % % % & % $ 9 d 2 f v P n d _ # @ + * - , ( ) ! ~ ~ { { { { { { { { { { { { { { { ] ^ ^ ^ ] ^ ] ] ",
"k 5 j j j 1 m m h < d d [ : 9 4 } } 4 / / | } [ < < d c [ 9 4 _ # # $ $ / _ / $ $ / / : 3 [ 9 9 : [ } | 4 9 } : d 3 3 c d : 9 4 | _ $ # % % & & @ & # _ [ 3 b o x u 6 [ $ = - ; > , ) ~ ~ ~ { { { { { { { { { { { { { { { ] ] ] ^ ] ] ] ] ",
"6 j b b b 1 m 1 m c d < [ : : : : 9 _ $ _ 4 } : : } 9 4 / # $ $ % % # $ / | 9 4 | | | } c < 4 9 : : } 9 9 } } [ h m 3 d d [ } 9 | _ # % % % & @ @ @ # _ [ 3 m 5 q y q b 4 @ * - > > > ' ! ~ { { { { { { { { { { { { { { { { { { { ] ] ] ] ] ",
"5 b b j b m h 1 m 3 d < : [ < < : 4 _ _ 9 } } 9 4 _ / $ % & & % & @ % $ _ 9 [ [ 9 4 4 9 d < 4 9 [ } | | 4 9 : d m 1 h 3 3 d : } 4 _ $ # # % & & @ & # _ [ m 1 1 g s x t c $ = ; > , ) ! ~ { { { { { { { { { { { { { { { { { { { { ] ] ] ] ",
"k 5 7 7 j 1 m 8 m 3 c d < < < } 4 _ | 9 } } 4 _ / $ # % @ @ @ & & % $ _ 9 [ [ } | 4 } < < 9 : [ 9 4 | 4 4 : 3 1 8 8 1 m 3 [ } 4 | / $ # % % % & & # _ < 8 2 m 1 0 P s 6 [ $ . - , ' ! ! ~ ~ { { { { { { { { { { { { { { { { { { { { ] ^ ^ ",
"f a a k 7 2 8 2 2 1 h c c d [ 9 _ _ 4 9 4 4 _ $ $ # % & . @ % % $ _ 4 4 4 9 9 | 4 : [ : 9 : < } 9 9 9 9 : h 8 2 j b 8 h [ } 9 4 | / $ # # $ # % # _ < j k b h b o P e 2 } & * > ' ! ~ ~ { { { { { { { { { { { { { { { { { { { { { ] ^ ^ ",
"J t e A n 6 7 5 7 2 1 m 3 c < } | / | | _ _ / $ # # & @ @ & % $ _ 4 | / $ _ 4 | | 4 4 4 9 < < } } 9 9 : < m j 7 6 5 2 3 [ } } 9 4 _ / $ $ / / # $ 4 < 6 i 0 1 m n r s 0 h _ - ( ) ! ~ ~ { { { { { { { { { { { { { { { { { { ] ] ] ] ^ ",
"P p p i t f a k 6 7 b 2 m c d : 4 _ | _ | _ $ # # # & @ @ @ & % # / _ _ # % % $ | 4 _ / _ | 9 c d } 9 4 9 : < 1 7 6 k g b 3 [ } } } 9 4 | / / | | | 4 : h a v I 2 h 7 p w i 6 < % * , ' ! ! ! ~ { { { { { { { { { { { { { { { { { ] ] ] ^ ^ ",
"E y v r p I J A l k 6 j 1 c d [ 9 4 4 | | | / % % % & & @ & % % # / $ # & & % % / 9 | / _ _ 4 < d : 4 | 4 } < m 5 k g 7 8 h < : } } : : : } } : [ < d h b t G w 6 3 m A v s l 8 | - ( ) ! ! ~ { { { { { { { { { { { { { { { { { ] ] ^ ^ ^ ",
"U L K G x v u q i A a 5 8 3 d [ 9 4 4 | _ _ $ % & % % & & & # # # $ # & @ @ & % # 4 [ 9 | | 4 [ d : | 4 4 } c 2 6 n 6 2 h 3 3 d : [ < c h m m m m 1 2 b 5 o E E A 3 < 7 p r o 6 d # + > ' ! ! ~ { { { { { { { { { { { { { { { { ] ] ^ ^ ^ ^ ",
"W @.Y Z .O F x r p e n 7 m d [ 4 | 4 _ / $ $ % % # # # % # $ $ # % & & @ @ & % % _ < c [ 4 4 : < : 4 4 9 [ m 5 k 6 2 m h h 1 1 3 h 1 b 7 5 6 5 7 7 7 7 5 t #.L p h : 3 0 N q f 8 4 - , ) ) ! ~ { { { { { { { { { { { { ~ ~ { ] ] ] ] ^ ^ ",
"$.%.&.*.=.Q V #.w N o l g 8 3 [ 4 | | / $ $ # % % $ / / / / / $ % & @ & @ @ @ & % / : 3 h < 9 : : } } 9 : 3 b 5 7 m d 3 m 1 8 j g n a l l f l k 5 j j j j 0 G Z r 8 < < 5 I s J 6 < % * ; ( ' ! ~ { { { { { { { { { { { { ~ ~ { ] ] ] ] ^ ^ ",
"-.;.>.&.,.Y M C s o a 6 5 b h < 9 9 | / / $ # # # $ _ | 4 4 / # % & & & @ @ & % $ 4 d h h [ } 9 } : : c b b m c < [ d m j n t J J A 0 n n g 2 m 3 3 h 1 a F ..v j d [ 2 t I e n m _ . - > ( ) ! { { { { { { { { { { ~ ~ { { { ] ] ] ] ] ^ ",
"'.).!.$.~.@.L z N f 6 2 2 2 m < : } 4 / _ / $ $ $ $ _ 4 9 | $ % % % & & & & & % # $ 4 < 3 3 d } 9 9 [ 3 b 5 3 : : [ d m 6 t I p e 0 5 2 1 1 3 : } 9 9 : 3 a #.R x 5 c [ 3 6 l l k 8 9 @ = > ( ) ! ~ { { { { { { { ~ ~ ! ~ { { { ] ] ] ] ] ^ ",
"{.].^./.(._.:.L y J g 8 m m h < : : 9 _ / _ $ $ $ $ _ _ _ $ % & % % @ @ & % # # $ / 9 < c c [ } 9 } < 2 6 1 9 | 9 : 2 a t J A n j 8 1 1 h c < 9 | | | 9 h 0 E T z g 3 } : 3 j 6 j 3 | @ * ; ' ! ! ~ { { { { { { ~ ! ! ~ { { { { ] ] ] ] ] ^ ",
"<.[.}.|.1.&.2.S M u 0 j m 3 c [ 9 9 9 4 _ / $ $ $ / $ $ # # % & # # % & % # # $ / _ } < c d } 4 9 : h 6 5 < | 4 } 3 k f n 7 2 8 m h h m 1 m c [ } } } [ m f O S G g d 9 4 9 : < < 9 # . * ; ( ! ! ~ { { { ~ ~ ! ! ! ~ { { { { ] ] ^ ^ ^ ] ^ ",
"3.4.^.!.>.5.=.S ..z e 5 1 3 d [ } 9 9 9 | / $ # / | _ # % % % % # $ / $ _ _ $ / _ 4 : d 3 d : } } [ b g 2 < : : 3 2 7 b m 3 3 h m 8 j 6 a f f 0 6 8 m 1 7 J M :.G g d | # % % # # % * = > ' ! ~ ~ { { { ~ ! ) ! ~ { { { { { ] ^ ^ ] ^ ] ^ ",
"}.6.7.8.9.=.+.Q Q D i g 2 1 3 3 3 d < : 4 _ / $ _ 4 | $ % % % # _ 4 9 : < [ 9 4 } [ c m 1 d : [ < h g 6 m c d d h h d d < [ < 3 h 8 5 a A o I p N N q q N B Z :.F 0 h 4 # & @ @ @ * = - > ' ! ! ~ { { { ~ ! ! ~ { { { { { ] ^ ^ ^ ] ^ ^ ^ ",
"-.0.a.1.b.Y #.#.K D N f 6 j 8 8 8 h 3 < } } } 9 } : : } 9 } : [ d 3 h m m c [ : [ c h 1 m [ : d c j n b 3 d d d < [ : } } 9 : < d c h 2 j 7 7 6 A N w G E M S @.O J 7 c 4 # @ @ @ . * - ; > ' ! ! ~ ~ { { ~ { { { { { { { { ] ^ ^ ^ ^ ^ ^ ^ ",
"(.b.*.,.X R x w z G P p f g 6 6 5 b 2 8 1 1 m 3 d < < < [ [ < < < d c c d : 4 9 } [ c h 3 < c h 1 6 5 3 [ : : : } 4 4 9 9 9 9 } : [ d h m m 3 3 8 6 l i x Z c.*.V u l b d 4 / % @ + = - ; , ' ! ~ ~ ~ { ~ ~ { { { { { { { ] ] ^ ^ ^ ] ] ] ^ ",
"T R Q Y W Z v r x G C x s o f f 0 k 6 j 2 8 h < : 9 9 4 _ / / / $ / | 4 4 | _ _ _ | [ 3 c < 3 m j g 2 d } 9 4 4 4 | | 4 4 4 | | 9 9 : < c c c h 8 b j 6 I ` X W Z z i n b h : | % . = - > , ' ! ~ ~ ~ ~ ! ~ ~ { { { { { ] ] ] ^ ^ ] ] ] ^ ^ ",
"L V V ..,.` x w x z z x P p e A l k 7 8 h < 9 | | / _ _ _ / / $ # $ _ | / / / $ # / [ m 3 [ d 3 2 b c [ 9 _ _ _ / _ 4 4 _ / / / _ 4 4 9 } d 3 1 j 7 j 6 p ..&.:.+.D r t n 5 8 d 4 % + = - > ( ) ! ~ ~ ~ ! ! ~ { { { { { ] ] ] ] ] ] ] ] ] ^ ",
"V L V T ,.L G y B w r I o t 0 a g 2 m h d } 4 | _ / | 4 | | _ / # $ / / # # / $ # _ < 8 h : : d m 3 : 4 / # $ $ # $ _ | / $ $ / / _ _ _ 9 < h 8 7 g 0 e w R W R E r o A l n 7 m [ / @ + = > ( ) ! ~ ~ ~ ~ ~ { { { { { { { { { { { { ] ] ] ^ ",
"Y R ` @.S #.B P s p e l l n g g j h c d [ 9 | _ / _ | | _ _ | _ $ $ $ # % $ / $ $ | c b 1 [ [ c h d } _ / / / $ $ / / / / $ / _ _ $ # $ | } d m 8 5 t B L 5.,.Q C f j 6 n g 2 h < _ @ * - > ( ) ! ~ ! ~ { { { { { { { { { { { { { { ] ] ] ^ ",
"X R ..S ` y r p o f a k g 6 g k b 3 d < } 4 4 _ $ / _ / $ / | _ / / _ / $ / $ $ / | 3 7 2 c d 3 h c : 4 | _ / $ / _ / / / / / / $ % % # / | } d 8 5 A z :.~.c...B k 3 c h m 3 < 9 $ . - > , ( ) ! ~ ~ { { { { { { { { { { { { { { { ] ^ ^ ^ ",
"2.U :.=.#.s J A 0 k 5 7 5 5 5 5 b h d [ 4 | 4 | / / _ / $ / _ / / _ | | | _ / _ _ | < b 7 1 c c h h < : : 4 / / _ _ / $ / / $ % & & % # / _ 4 [ 1 5 A x =.b.~.R w 6 d 9 | 4 9 _ % + ; ( ' ) ) ! ! ~ { { { { { { { { { ~ { { { { ] ] ] ^ ^ ",
"S @.5.L v e 0 k 6 5 7 7 6 5 j 2 1 h c [ } 9 9 4 _ / / $ $ / _ / _ 4 9 9 } 9 4 4 4 | [ j g 8 c d 3 c [ : : } 4 4 4 _ / $ $ $ # & & & % # $ / / 4 d j A B Q W X :.C n h } _ $ % @ . * = ; ( ) ) ! ! ! ~ ~ ~ { { { { { { { ~ { { { { ] ] ] ] ^ ",
",.*.Y G I 0 g 6 6 5 6 k g 5 b 1 1 m c < : : : } 4 _ / $ $ _ _ / _ 4 } : [ < [ : } 9 < j g 8 d < d [ } } } 9 9 9 4 _ / $ # # % & & & % # # $ $ / 9 h n u M R :.@. .i b < | $ & . = - - > ' ) ) ! ! ! ! ! ~ ~ { { { { { { { { { { { { ] { { ] ",
"_.S M u A n 6 6 6 k a k 6 6 j 1 1 1 h d [ [ < : 9 | _ / / _ _ _ | 4 } < 3 h 3 d d d c b 6 1 d : : : } 9 9 9 | 4 | _ _ / $ # % & % % % % # # % % / } 1 A x H L Q Q z 0 c 4 # @ + - - ; , ' ) ) ) ! ! ! ~ ! ! ~ { { { { { { { { { { { { { ] ] ",
"9.U z q 0 5 7 7 g 0 0 6 5 6 2 h m 3 d d < < < : } 4 | | _ | | _ _ 4 : d h 1 m 3 h m h b 5 8 c : 4 } [ } 9 9 4 9 4 4 4 _ / # % % % % # % % % & & # _ } m a q P B E .u j } # + = - > ( ) ) ) ! ! ! ~ ~ ~ ~ ~ { { { { { { { { { { { { { ] ] ",
"d.Z y p 0 7 j 5 n f n j 5 5 m d < [ } : [ [ [ } 9 9 | 4 4 9 9 | / _ 9 < 3 8 2 2 1 m 1 b 5 2 c [ 9 4 9 9 9 9 9 9 } } 9 | _ / # % % % # # % # % # $ # $ | < 2 6 a i G F t d / & . = - > ( ) ) ! ! ! ! ! ~ ~ ~ ~ { { { { { { { { { { { { { { { ",
"~.Q C p A k g k 0 0 g 7 g 5 m < } : } } : } } } 9 | _ | 9 } } 9 4 9 : d h 1 j 5 b m 1 8 2 8 c [ 9 4 4 9 } 9 9 } : : 9 9 4 _ $ # # % # # # $ $ / # % & & $ 4 < 3 j i G u 5 < / = ; , ' ) ) ! ! ! ! ) ! ~ ~ ~ { { { { { { { { { { { { { { { ",
"X R F N J A f l a 6 7 5 6 2 c : 9 9 } } } : [ [ } 9 | 9 [ < [ : : : : < 3 8 7 6 b 1 1 m 1 1 3 < : } : [ [ } 9 } : 9 4 4 4 _ # # $ # # / / $ / / % @ . . @ $ } c 5 N x J 2 } & + ; ( ) ) ) ) ) ! ! ! ! ~ ~ ~ { { { { { { { { { { { { { { ] ",
"_.:.O u p I J l g 7 7 6 6 2 c : 4 4 9 } : [ < < < [ : [ c c d d < : : [ 3 b 7 7 j 2 m c 3 h 3 d } } : [ [ : } } : } } | / / # # $ $ $ $ $ / $ $ % + + * * . # } h l B u a 3 / . - , ' ) ! ! ! ! ! ~ ~ ~ ~ { { { { { { { { { { { { { { { ] ",
">.*. .x u N J l g j 6 k 6 8 3 [ 9 9 9 } [ [ [ [ < d d < d d d d [ : < c 1 2 1 8 j 2 3 < < < d d } 4 4 9 } 9 9 : [ : : 9 | _ / / / $ # # # # # % & + * = = * @ _ < 6 P y I 6 < % = , ' ) ! ~ ~ ~ ! ~ { ~ ~ { { { { { { { { { { { { { { { ] ",
"a.&...E v p o a 6 5 6 6 j m d [ } } : [ < [ [ d c c c d [ : : : [ d h 1 8 h d c 1 1 c : } } [ d } _ _ 4 9 4 | 9 : : : } } 4 | _ / / $ $ $ # % & @ . + * + . & / 9 1 I z P A 2 | + > ( ) ! ! ! ~ ! ! ~ ~ ~ ~ { { { { { { { { { { { { { { ] ",
"0.e.5. .u i e k 6 6 6 7 b m c < [ [ < c c c 3 m 1 m 3 d } 4 9 } [ 3 m h d [ [ [ [ c c : 9 9 : [ 9 | _ | | _ / | } : [ } 9 | _ / / / / $ # % % & @ @ @ . & # $ : n v B p n d & - , ' ) ) ! ~ ! ! ~ ~ { { { { { ~ { { { { ~ ~ { { { { ] ",
").f.c.V P i o f n g 7 2 8 1 h c d c h 1 8 8 8 2 b 8 h d } 4 9 : d 3 c < : } 9 4 | } < d : 9 } } } 9 | _ / $ $ / | 4 } : 4 | _ $ $ $ $ # & @ & & @ . . + * & & / m J w u e b | + ; ( ) ! ! ~ ! ~ ~ ~ ~ ~ ~ ~ ~ ~ { { { { { ~ { { { { { ",
"g.;.b.Q x I e t 0 6 j 2 8 1 m 3 3 m 8 2 2 8 1 8 2 8 h c [ } : d 3 < } 9 : } | / $ / 9 d d : 9 9 9 9 | $ # $ $ $ # # _ 4 9 4 _ $ # # # # & @ @ @ . . + + * * . @ @ # [ a P w p n < @ - , ) ! ~ ~ ~ ~ ~ ~ ! ! ~ ~ { { { { { { { { { { { ] ] ",
"3.h.%.:.G N e t f g 5 j b 2 m 3 h 2 2 1 m h h 8 b b 1 m 3 c 3 h d 9 | 4 } 9 / # # # / } < < : 9 | 4 4 / # $ $ % & & # / _ / # # % % % & @ @ & @ . . + + . @ % & % 9 5 I s I 0 m $ * > ' ! ! ~ ~ ~ ~ ~ ~ ~ ~ { { { { { { { ] ] { { ] ^ ^ ",
"3.i.d.,.K r t f f k j b 2 8 8 1 1 8 8 1 m 1 8 b 7 7 j b b 8 m 3 [ 4 | 4 9 4 / # # % # _ 4 [ < } | 4 9 | $ % % % & & & % & & @ @ @ @ @ . & @ . . @ % & # 4 m 0 e t a 8 _ + ; ( ) ! ! ~ ~ ~ ~ { { { { { { { { { { ] ] ] { ] ^ ^ ",
"^.;.X *.V r A a f n b 2 8 8 b b 2 8 8 8 2 2 2 j 5 5 7 b 8 h d [ } 4 9 } 9 _ # # # # $ / $ _ } } 4 4 } 9 / % & & @ @ & @ . . . . . . + + * + . . . . & % $ _ [ 2 k n 6 h / + ; ( ) ! ! ! ~ ~ ~ ~ { { { { { { { { { ] ] ] ] ] ^ ^ ",
"0.j.&.,.Z P f a f f 6 7 j j 7 7 b b b 2 2 8 1 b g n 6 8 c [ } 9 | | 4 9 4 / # # $ $ / / $ / 9 } } 4 4 } | # % % & @ & & . . . + + * * * = = * + * + . + + + + . & # _ : 3 h d 4 & * - , ) ! ! ! ~ ~ ! ~ { { { { { { { { { ] ] ] ] ] ^ ^ ",
"1.b.W @.U y t 0 l t 0 g 6 5 6 6 7 7 b 2 1 m 3 m j k 6 1 < } 4 | _ _ | | | / $ / _ _ _ _ / / | 4 4 | | 9 4 / $ # % @ + + . + * = - - - - = = - = * * = = = * * * + . & # # & * ; > ( ) ! ~ ~ ~ ! ~ ~ { { { { { { { { ] ] { ] ] ] ] ^ ",
"@.@.S S R G i f l e e a k g g g 5 j b 2 8 m 3 d 3 8 8 3 < } 4 | | | | _ _ / $ _ 4 9 9 4 / # $ _ _ / / _ | | _ $ # @ + * + * = - - - - - = = - - = - - - - - - - = = - = = - ; ; , ( ( ) ! ! ~ ~ ~ ~ { { { { { { { { { { ] ] ] ] ^ ^ ] ] ",
" .L +.Z .B J f A J J f 0 0 a k 5 j b 2 1 h d [ [ d < [ } 4 _ | 4 4 | _ _ _ / _ 4 } [ } | $ # $ $ $ $ $ / | | $ % & & @ + * = = = = = = - - - ; ; ; - ; ; - - ; ; ; ; ; ; > , , ( ' ' ) ! ~ ~ ~ ~ ~ ~ ~ { { { { { { { ] ] ] ] ^ ^ ^ ^ ^ ^ ",
"P w B B u p e A e I i t A f 0 k 7 b 2 m 3 c < } 9 9 9 9 9 | / _ | | _ / _ _ _ _ | } } 9 | / / _ _ / $ # $ / _ $ & % % & & . * * * = = = - ; ; ; ; ; ; ; ; - ; ; > > ; ; ; > , ( ' ) ) ) ! ! ~ ~ ~ ~ ~ ~ ~ { { { ] ] { ] ] ] ] ^ ] ] ^ ^ ^ ",
"J i o e e o J o o i J t t A a 6 j 8 1 h c d < } 4 | | 4 9 4 | | | | _ / / / $ $ _ 4 9 | _ / / | 4 | / $ $ $ / $ & % % % % @ + + * * * = - > ; - - > > > ; ; ; > > > > , > , ( ( ( ' ) ) ! ! ! ! ~ ~ ~ ~ ~ { { { ] ] { { { ] ] ^ ] ] ^ ^ ] ",
"I I J e J p I o t o e e A l k 5 b 8 m 3 d d < : 9 4 4 9 } } 9 4 4 4 _ / # # % & $ | | _ / $ $ _ _ / / $ / / / $ & % % & @ . . + + . + + = - ; ; - - > > ; ; > > > > , , ( , , ( ( ( ' ' ) ! ! ! ! ~ ~ ~ ~ ~ ~ { { { { { { { ] ^ ] ^ ^ ^ ^ ] ",
"q q s u u N i o e o e o A a g 5 j 8 h c d d d [ : : } } : : } 9 9 4 _ / # % & & # / _ $ # % % # # # % % # $ $ # % % & @ . + + + . @ . + * - ; ; = = - - ; ; > > > , , , , , , ( ' ' ( ' ' ) ! ! ! ! ! ! ~ ~ ~ ~ { { { { { ] ] ^ ] ^ ^ ^ ^ ] ",
"N r x C v p I p I i o o t a g 5 j b m c d c c d < [ : } : [ : } 9 4 _ / $ # # % $ / / / # % % # # # % % % # # % @ @ @ . + * + . @ . * = - ; ; ; - - - - > , > > , , , , , ( ( ' ' ' ' ' ) ) ) ) ! ! ! ~ ! ~ ~ ~ { { { { ] ^ ] ] ^ ] ] ] ] ",
"w D F B r p I q I J o e f n g 5 j 2 8 h 3 c c d < [ : : : [ < < [ : : } | _ _ / | 4 _ / / $ # # % % # # # # % & . + * + . . * = ; ; > > > ; - - ; ; ; ; > > , , ( ' ' ' ' ' ' ' ) ! ! ) ! ! ! ! ! ~ ! ~ { { { ] ] ] ] ] ^ ] ] ^ ] ",
"F H z r q p p p J t A f a 6 7 7 b 8 1 m h 3 c c d d < < < c h h m 1 1 h d < [ : : : 9 | / $ $ $ # # # # # % % & . . + . . @ . . + = ; ; > , , ; ; ; ; ; ; ; ; > > , ( ' ) ) ' ) ) ) ! ~ ~ ! ! ! ! ! ~ ~ ~ ~ { ] ] ] ] ] ] ^ ^ ^ ^ ^ ] ",
"#.D v N q N N J A 0 0 n g 7 b 2 1 m 1 1 h 3 h h 3 c 3 3 3 h 8 2 b j b m 3 3 d [ : [ } 4 / / / / $ $ # % % % # % & @ @ . . . + + * - > , , , > ; ; > > ; ; > , , ( ( ' ' ) ) ! ) ) ! ! ~ ~ ~ ~ ! ~ ~ ~ ~ ~ { { ] ] ] ] ] ] ] ] ] ^ ] ",
"z B P s N s I A n n k g 6 j 2 8 1 m 1 1 m h m m 3 c c c d c h m h h 3 d d < : } 9 } } 4 | _ / # # # # % % & & & % & @ . . @ + * = ; , , , , , > > > > > > , , , ( ' ' ' ) ) ! ) ) ! ! ~ ~ ~ ~ ~ ~ ! ~ ~ ~ { { { { { { { { ] ] ^ ^ ] ",
"z B P r N I o l k k g 6 5 j 2 1 m m m m h 3 3 c < [ : : : : : : } 9 } } : : } } } : } 9 | / # % & & & % & @ . * = - > , , , , , , , , , , ( ( , , ( ' ' ' ' ) ' ' ) ! ! ~ ~ ~ ~ ~ ! ~ ~ ~ ~ { { { { { { { { ] ] ] ] ] ",
"y w r N J t l a k g 6 7 7 j 8 3 d c 3 c < < < < [ } 9 } 9 4 4 4 | 4 | | 9 : < d d [ 9 _ $ # & & @ @ @ @ @ . . . . + . . . . . * = = - > , , , , > , ( ( , , ( ' ( , , ( ( ' ' ' ( ' ) ! ! ~ ~ ~ ~ ~ ! ~ ~ { { { { { { { { { { { { { { ] ",
"v r I t 0 n g 6 5 7 5 7 b 8 3 < < d d < [ : : [ [ } 9 9 4 | | | | | / _ 4 : d d < } | $ % @ @ . . . . + . . * + + * = - - > , , , , , , , , , , ( ' ( , ( ( ' ' ' ( ( ( ' ) ! ! ! ~ ~ ~ ~ ~ ~ ~ ~ ~ { { { { { { { { ] ] ] ] ",
"I o f a g 5 7 j b b j j b m d d c d [ [ [ : : : } 9 4 4 | _ | | _ / _ | 4 } : : 9 _ / $ % . . . . . . . . @ @ . = = * = - - - ; > > , , , , , > , ( ( ( ' ( ( ' ' ' ( > > > , ' ) ) ! ! ! ! ~ { { ~ ~ ~ ~ ~ ~ ~ { { { { ] ] ^ ^ ",
"f a a n 6 j 2 2 8 b j 7 j 1 3 3 c < } } [ [ : } 9 4 | | _ | | | _ _ | | _ _ | 9 | $ # # % @ . + + + . . . + + . * - - - ; ; ; ; ; > , , , , , , ( ( ( ( ' ' ( ' ' ( > = * = > ( ) ) ) ' ' ) ! ! ! ! ) ! ! ! ! ~ ~ { { { ] ] ^ ^ ",
"t l l 0 k j 8 1 8 7 5 5 7 8 1 1 c [ } : [ [ : } 9 4 | _ | 9 } 9 9 4 4 | / / _ | / % & & & @ & & @ . . . . . + * + . . + - ; ; ; ; ; ; ; > , , ( ' ' ' ( ( ( ( ( ( ' ' ' , - + . * - , ' ' ( ( ( ( ' ' ) ) ) ) ) ) ! ! ~ { ] ] ] ] ^ ] ",
"J t f l a g j 2 b 5 5 5 b 1 1 1 3 < [ [ < < [ } } 9 4 4 } : [ [ [ } 4 4 | | | | / # % % % @ % % % . . + * . . + . . . = - ; ; ; ; ; > > , , ( ' ' ' ( ( ( ( , ( ' ( , - . @ @ . = ; , , , > > , ( ( ' ' ' ' ' ' ) ) ! ~ { { { ] ^ ^ ",
"J A 0 a a n g 7 j 6 6 5 b m h h h 3 d < d c d [ } } 9 } : [ [ [ : 9 | 4 4 9 9 4 | _ $ # # & & % # # & & . . + + . . + . . * - ; ; ; ; > , > > ( ' ' ( ( , , , , ( ( , ; = . % # % @ + = ; > > , > > , , , , ( , , , ( ' ! ~ { { { ] ^ ^ ",
"J A 0 a a n k 5 5 6 6 5 j 8 h h m 1 3 d c 3 d < [ [ [ [ < < [ : } } 9 4 9 } : } 9 4 / / $ # # # # $ # % @ . . @ @ @ . + = - ; ; ; , , > > ( ' ' ( , , , , , , , ; = + @ # / # & + = - ; , , > > ; - = = - = = = ; , ) ~ { { { ] ] ] ",
"q i A l l a g 5 6 g 6 7 b b 8 8 8 1 m 3 3 h 3 3 3 3 c c c d d [ : : : } } : [ [ } 4 | | _ _ _ / / / # % & & & @ @ % # % & & @ + * - ; ; > > ; > , , , , , ( , > > > > - + @ % $ $ & * - ; > > ; - - * + @ @ @ @ . * ; ' ! ~ { { { ] ] ",
"v u q I e a k 6 6 6 5 j b j j j b 8 8 1 m 1 8 8 2 2 1 1 1 1 1 m 3 d c c d c c d [ } 9 9 } 9 4 | | _ $ # % % $ # # / / $ $ % # & . + * = - > > ; ; ; ; - ; , , > > > > ; * % $ $ & + = - - - - * + & # $ $ / $ % + ; ' ) ! { { { ] ^ ",
"x v v v N e a g g g g 7 j j 7 5 7 b b b b j 7 7 5 6 5 6 k 0 A e A 0 n k 6 5 5 b 1 h c c c < [ : 9 4 | _ / / | _ _ | | | | / _ $ @ . * = - ; - = = = = - ; ; ; > > > - + @ # # @ . . + = = * . @ % $ _ | | 4 | | / % * > ) ! ! ~ { { ] ] ",
"C u r u r q e 0 n n k 6 7 7 6 k g 6 6 g a A e o o J i I p s u B w s i e f 0 0 k 5 j j b 8 h 3 c < [ } 9 4 4 9 4 4 9 9 : } 4 9 | $ $ # + * = = * + + + + = - > > > - * @ # % + . . + * . % / | 4 | 4 9 4 _ / $ # @ + = > ' ~ ~ ~ { { ] ] ",
"E w r p I s r q o f 0 a 0 f o I I I q N P y z C x B v P u r s N p J A 0 k 6 6 6 7 7 5 7 b 1 h h 3 d [ } } } 9 | 4 4 9 : } 9 } 9 4 4 | % + * * . + = ; ; = . # _ # @ . . % _ 9 4 | / # % # % @ . . . + = ; > ' ! ! ! ~ { ] ] ",
" .#.z v P B D K F y B x C D E O E #.E E O K E z x v r N I i J t l 0 n g 5 7 5 7 j j 7 j b 2 1 m m 3 d < < < : 9 9 4 9 : } 4 9 9 4 9 _ # @ . . . & & % & + = = + # 4 | % @ & % # _ 9 9 | % + + + + * = - = = - ; > , ' ' ) ! ! ~ ] ] ",
"Z Z ` +.U =.:.,.@.T Y R U ..Z L M K E #.F G B r q I J o e t A 0 n k k 6 5 5 6 5 j b b b 2 8 1 m m h c d c c d < d < [ [ } 4 4 _ / _ $ % & @ @ % $ $ % @ . * + & 4 } _ & & % $ | } } | $ @ + * * * + + * = = = = = - > , ( ( ' ! ! ~ { ] ",
"@.*.W &.d.>.>.d.X W @.=.Q ` M K E F D G y w r p i e f 0 0 0 0 n k 6 7 j j j j j b 2 8 8 m h 3 3 3 c < < d d c c m m 3 d } 4 / # % & & @ @ & # $ / % . @ _ [ 9 $ % % / | 9 | $ & . * * + & % # & . + * - ; , ( ( ) ) ~ { { ",
"_.~.b.~._.%.%.~.~.X 2.S Z L H E E E #.F C B v r q i A g 7 5 6 g 6 7 j 2 2 8 1 1 1 m h h c d < < [ : } : [ < < d 2 2 1 3 : 4 $ # % @ . + + @ % / _ # @ & & $ : [ | # % $ / _ $ % . + + . @ # _ } [ [ [ : } 4 $ & . * ; > , ( ' ! ~ { ",
"d.&.W *.,.2.X &.X b.b.&.@.Q V .M V M K E F D C w P p 0 5 j b b j j b 2 1 h c d < < < d < [ [ : } 4 4 4 9 : : < b 7 8 m c : | $ # & @ @ . + . @ % / / # % # $ 9 < } / # $ _ _ # @ . + + + . & $ | } < c m 1 m 3 < 4 # + - ; , ' ) ~ ",
"b.2.,.5.@.5.c.c.*.*.c.b.b.2.T R Y =.R U Q M E z B P s J l g j 8 8 8 8 8 h d [ : 9 4 } : } } } } 9 | _ $ $ _ 4 : 8 5 8 h c d : | # & . . @ & # _ / % # $ _ : [ | $ / _ 4 _ # + + + * * + * + @ % # / | } < 3 h c [ | # @ + - > ( ) ",
"b.X c.2.*.,.2.X 2.2.~.e.(.$.1.%.%.d._.&.,.Q #.B r p i J t n j m 3 3 3 h c } 9 9 4 | 4 4 4 4 4 4 | _ / # % # $ | c 2 m < } : : _ # % @ @ . @ & $ | / % # $ | [ } / $ / | | | $ @ . . + * = = - = * * . @ & # / | : [ [ } _ % @ . - ( ",
"_.b.d.d.d.b.%.(.>.>.k.l.m.n.h.i.h.m.k.1._.T M z u J f l 0 6 8 d : : [ < : 4 | | | _ _ _ | | 4 9 4 _ / # % % % $ 4 [ [ | $ / | / # & & @ & @ @ @ & # _ $ & % $ 4 } _ # # $ $ / _ / % @ + = - - - - - = * + @ @ @ @ & $ 9 [ } | $ # @ * ",
"%.>.(.j.f.o.m.h.p.n.n.8.i.|.q.r.s.|.p.l.>.*.Z K y I 0 g 7 2 c 9 | | 4 9 4 | _ / $ # % % $ / | 4 4 | / $ % & % & % / / % @ & % # & @ @ @ & @ % _ $ @ & $ 4 | $ % & % # % # $ # & . + * * * * = = = * + . @ & % @ @ % _ 4 9 | _ # @ ",
"o.m.p.0.|.t.u.r.7.r.-.u.-.r.).).).-.h.o.e.*.+.O F P A 5 2 3 } _ / / _ | | / # # & @ @ # / | 9 | _ _ $ % & % & @ . . . + . @ % _ $ @ & $ | | $ & @ & # % & % # & . . . . + * = = = * * . % / _ # @ + . & $ _ _ $ & ",
"s.).v.w.x.y.).).y.y.).7.7.z.x.z.q.!.a.(.~.S H z G y i 6 1 < 9 _ _ _ _ _ _ $ & @ . + . % / | | _ / / / # @ . . . . + + . + + + + . . + + . % | $ @ & # | _ $ % & & % % & & & & @ . . + * = = = = = * + / : < | & + - = * @ # % @ ",
"6.A.y.-./.0.i.h./.t.|.0.i./.s.s./.;.j.9.2.Q #.x B y s n 1 [ 4 | | | | | / # @ + + . . . & # $ / / / $ $ $ # % & & @ + + + + * * + . . + + + = = + & | / @ & # _ _ / $ # # # # % & @ & & @ . + * = = = = - - - = + & 4 h 1 9 @ = - ; = + . ",
"s.|.B.j.(.(.>.e.(.$.(.e.b.>.m.8.;.k.%._.,.Z F B v w P A b c } 4 | | | / # % & . @ @ & % # $ / | / # % # $ $ $ % + * * * * + . . + * = = + & _ / & & # / $ # # / / # % % & @ @ @ @ . * = = = = = - ; ; - * % } 8 8 } @ = ; > ; - - ",
"n.m.j.1.>.e.9.%.9.~.W @.:.&.e.1.>._.,.5.:.R M G B B v J 5 m d [ 9 | _ / % # $ & @ & & @ % $ / / $ # % # / _ $ # % + . + * + . * = = + & _ _ % & % # % @ & # / $ # % % % % % & + * * * * = - - - - = . & $ : 2 2 4 = > > , , ",
"l.a.f.$.(.>.>.e.9._.5.=.=.c.~._._.*.Y Z Z Z L H F C x q a b m c [ 9 9 9 _ _ / # & . . @ # # % % # # # $ | $ % & . + * . . + * * . @ / _ % & % % % @ @ % $ $ % % $ / $ % @ . + * * = - - - - ; - * & $ [ b 8 | . - > ( ' ",
"j.f.l.k.$.1.1.1.1.9.&.,.,._._.2.&.W T +. . . . .O D G v e k b h [ [ < : 9 4 | / % @ . & % & @ & % % % % # / # @ . . * * * * . @ @ . + . @ # / # @ % # # & & & % # # # $ / $ % @ @ + * = - - ; ; - - - * . @ % / c 5 1 / * ; , ' ",
"j.f.m.B.8.n.;.B.;.l.j.>.9.$.e.X X X ,.U M K H L M E F v A g j m < d c [ 9 9 4 _ # & @ @ @ & % & @ & & & & & & # / & + + * = = - + @ @ & & @ @ @ & / # & # % & & & % $ / / / # % % & @ + = = - ; ; ; - - - = + & # # _ m 5 c % = > ( ",
"a.B.n.!.q.z.x.v.^.y.-././.t.p.j.9.b._.,.R L V Z V F C s l 6 b m c 3 m c : } 9 | / % & & & & & @ @ @ & & & & & % # % + * = = = * . @ # $ % @ & / # @ % % @ @ & % $ _ _ / # % % & @ . + = = - - - - - - - - * & $ # % | 8 b } @ - > ",
"p.m.l.n.t.7.v.g.C.4.C.D.D.}.7./.;.o.$.d.*.R ..Y +.F C r e a 5 2 1 1 1 m c < : 9 | / # # # & @ . + @ @ & & & @ @ & @ & & . * * * * * . & % # # @ . % # # & % % @ @ @ @ & $ | | _ $ % & @ . + * = = = - - = = - - - * % _ $ & & : 2 h / . ; ",
";.o.(.j.B.i.0.t.E.F.G.3.H.H.I.6.7.t.i.m.1.c.5.*.T V #.B I f n 6 j b 2 8 1 h d [ 9 _ $ $ $ % @ + + . & & @ @ & @ & + + * = * @ & % @ . . @ & % & % & @ @ @ # _ 4 | / % @ + + + * * = - ; - = - ; - = @ 9 } # & $ c 1 } # = ",
"1.(.$.$.k.B.p.!.!.i.J.).'.K.L.M.I.}.z.-.!.o.>.d.*.R +.#.v I A a k g 7 b 8 1 3 < 9 | _ / / # @ + + . & @ . . & & @ @ . * = * . @ . + . @ & . . & # & . . . . & / | / $ % @ . * + + * * = - ; ; - ; ; ; = [ 3 _ % % } m c | ",
"X b.>.(.(.j.l.p.p.B.;.!.r.v.N.].O.O.D.^.E.t.!.a.~.@.=.+.F B N o A 0 6 j 2 8 h < : } } 4 _ $ & @ & @ @ @ . + . & & & @ + * + . + * * * . & @ . + + . @ # % . + * + % $ # % & & + * + + + * = - ; > > > ; = . d b } # & | m m } # ",
"&.X b.%.>.(.$.a.;.;.n.8.|.s.s.r.z.6.D.].N.v.z.|.a.e.c.T L #.C u p e a g 5 b 8 m c < [ 9 | / # % $ % @ . + * + & & @ + * = = - - = + @ # & + * * % & + * = + . @ # # @ @ & @ + + + + + * = - ; > > ; = . < 6 h $ % < m [ _ ",
"l.m.8.n.8.8.;.m.o.l.8.h./.-.u./.!./.7.}.P.P.}.z.u.i.o.~.T L K D x r i t l n g 5 8 3 < : 4 / # & & & & & + * * . @ & % @ @ + = = = - ; = = + & # @ * * . & @ . * = * + & & @ @ @ . + * + + + * - - ; ; = * . 9 6 b $ . + $ d d 9 ",
"-.s.z.-.|./.0.!.n.;.!.|./.|.J.|.i.n.8.|.y.G.P.}.z.q./.B.e.5...L K D B r s p t 0 g b 3 } 4 / % @ @ & # # & . . . @ % % @ + - = = - - - - = . & & . * . & & @ . * = = * + . @ @ @ & @ + * + . + + * - > > ; - * | 5 7 _ + @ } c : ",
"J.-.u.i.;.n.h.i./.u.s.r.-.J.|./.!.8.B.a.!.y.g.'.6.x.r.u.h.k._.:...L K C v s o 0 g b h < } | $ % % & & # % & & @ & & % % @ + * = - - - - - - = - + . + . @ @ + * * * * * + . @ @ . + + + . . * ; > > > ; = 4 k 5 | & + | d < ",
"/.0.h.B.m.a.B.m.8.|.s.s.E.).s.t.i.p.n.m.;.!.7.A.6.F.x.z.E.J.;.e.*.U M F w p f g b m 3 d [ | / / $ & @ % # # & @ % % % % & . + * - - - = - - - - - = + . . + * = = * * + + . . . . . + * * + * = ; ; ; ; - + 9 n k } & * . # } : ",
"!.i.;.l.B.a.l.f.o.B.p.!.-.w.6.x.u.h.n.8.m.f.B.t.).F.^.^.F.y.J.;.(.&.R M G r t g 2 h c [ } 4 _ _ $ & @ @ % # _ / # % % % & & * * = = - - = - - - - - = + . . . + = - - - - * * + + + + * + + * = = - > > > ; = . 4 k a [ % + * @ $ | ",
"p.8.a.o.m.a.o.k.(.k.l.a.h.7.G.C.A.s.0.;.(.d.d.(.p.E.F.^.^.w.r./.n.$.*.` K C N A 7 h d [ } | / / # & @ & # $ | 4 / % % % @ . * * * = ; > - - = = - = = = + . + . + = - - - ; - = * * + * = = * * = - ; > , > > - 4 g 0 d # . * + & ",
"B.m.l.o.a.m.B.k.9.>.$.k.B.-.^.C.[.'.7.p.e.c.2._.j.!.r.z.).r.u./.n.1.:.M F z w I g m d [ } | $ # # # # # $ $ / | _ # @ . . . + + * = - = = * * = * * * * * + . . * = - ; > > - = = * * = - = * * = - > , > > = 9 k 0 d % * - ; - - ",
"B.B.l.k.l.n.;.k.%.d.e.j.;.u.z.6.O.M.}.u.a.b.X %.(.o.p.t.|.h.n.n.m.9.T H x w w N a 1 c < } 4 _ / $ / / / _ / / | | # + + + . + * + + * = * + * * * * * * * + . + + * = - > > , , > ; - = - - - = = * = - > , > * @ : n 0 < @ - ( ' ( ( ",
"8.a.f.j.k.a.o.j.1.%.%.1.a./.7.v.D.L.{.F.|.m.f.$.b._.e.o.m.a.o.k.1.c.Y H w N s I 0 2 c [ } 4 4 | 4 _ # $ / _ _ | | # + = * + . + = * + * * * + . + * * = = = * * * * * = - ; > > , , > > ; - = = = - - - - - ; ; - . # d 0 k [ - ( ' ) ) ",
"l.j.(.(.$.k.1.e.1.e.d.>.f.h.E.w.^.4.<.3.^.r.!.(.2.5.,.c.9.(.e._.,...+.K u e e o l 7 h [ } } } 4 4 _ $ # $ / / / $ # @ + * = = + + * = = * + * = * * * + * = = = - - - = - ; > > > > > > > > ; - - * = - ; ; ; - = + @ | 8 l 6 [ @ - , ' ) ! ",
">.e.e.e.e.>.%._.b.b.d.(.l.p.q.).z.6.O.<.[.6.J.k.X @.T S 2.X W R V E H O s l 0 A l 6 1 < : } 9 4 4 | _ $ / $ # % % # & + * = * + * = - = * * = = = = + + + * = - ; ; ; ; ; > , > ; ; ; > > > > ; = * = - ; ; = * + & : 5 f 5 [ & - , ' ) ! ",
"9.d.d.%.d.~.&.2._.~.d.(.l.n./.s.E.x.P.<.Q.D.E.B.9.W T R =.5.@.` #.z #.F q 0 k a n 7 1 d : 9 9 4 | 4 | / # # % & % # # & . + * * + * * = - = = - ; ; - * * + * * * = - - = - > > > > > > , , , , > ; = * = = * + * * @ d 0 f 7 : @ - ( ) ) ~ ",
"e.%.%.d.b._.&.&.b.d.d.e.$.l.!.s.E.z.}.K.Q.3.w.0.$.X :...` R T ` D y D C i n 6 5 j m c < } 9 } 4 _ _ _ / # & & % # # # % @ . * * + + * = - = = ; > ; - - = * = = = = - - = ; > > > > , ( ( ( ( ( , > - = * + . + & 3 l l j : & ; ( ) ~ { ",
">.e.e.e.%.b.b.d.%.b.X _.%.o.!.r.).y.A.].M.M.'.s.B.d.5.R +.L Z +.F y G w A 5 2 1 h < < [ 9 4 } 9 _ _ / / / $ & % $ # # % & + = + + * = - - - ; > ; ; - - = = - ; ; ; ; ; > , ( , ( ( ' ' ' ( ( , > > ; = + . / 8 0 a j } > ' ! { { ",
"1.>.1.>.e.9.e.9.d._.c.c.d.o./.7.y.v.A.}.C.H.3.v.0.$.&.S Z V ` Z H F G N n 2 h c < : : [ } } : 4 _ / # # / _ # % $ # % % & & * = * * * = - - ; ; > ; - = - = = - ; - ; > , ( ( ' ' ' ' ' ' ' ( ( , , > - + . # } 7 l a b 4 + , ) ~ { ] ",
"$.1.>.%.%.e.1.1.>.b.c.2._.k.!.E.y.w.F.v.A.I.O.g.s.B.d.*.=.R Y ..L K y i k 2 3 < : } : [ : [ : 4 / # & & # / / % # # & % # % @ + = * + * - ; ; ; > ; - = = - = - - ; - ; > , ( ( ' ) ' ' ( ' ) ) ' ( , , > = + & _ 3 n f n 2 _ * ( ! ~ { ] ",
"j.1.9.~.~.9.>.(.(.~.2.W &.(.h.E.y.y.w.y.).A.4.].y.i.$._.2.,.Y +.+.M B t g 2 3 [ : } : : } } } | / # @ @ & $ / # # % @ & # % + * * + = - ; ; ; ; - = + * - - - ; ; ; > , , ( ( ' ' ' ' ) ) ) ) ' ( ( , , > = . % 4 1 k 0 k m $ = ( ! { { ] ",
"j.1.d.X _.b.d.9.e.&.,.W &.9.;.r.w.y.y.7.-.).P.I.^.-.n.$.%.5.+. .V K v A 5 8 c < : : : } } 9 4 | $ # @ @ % # # # & @ % % & @ . + + * = - - - - - = * + * - ; ; ; ; > , , ( ( ' ' ' ) ! ! ) ) ) ) ' ( , , , > = & 4 m 5 6 j d & ; ( ~ { { { ",
"f.j.%.c.*.W c.~.%.&.@.,.&.d.a.r.A.v.).r.J.u.^.C.g.z.J.;.e.:.L K D v i 0 5 8 3 < < < [ } 9 _ / $ # & @ @ @ & & % % @ & % & & @ . . . + + = = = = = * * * - ; ; > > ; > , , ( ' ' ' ) ) ! ! ) ) ! ) ' ' ( ' ( ( ; + $ d 8 b 1 } @ > ' ~ { { { ",
"l.o.1.&.@.:.@.*.&.2.@.5.&.9.m.s.N.6.r.-.t./.).G.P.A.E.8.%.5...K w o n 5 b 8 m 3 c c : } 4 / # % % & & & @ @ & @ & % @ @ . . . . + * * * + * * + * - ; > , , > > , ( ' ) ) ) ) ) ! ! ) ! ! ) ) ' ' ' ' ( , ; . / < 3 < / + , ) ~ { { { ",
"o.o.j.%.c.,.@.@.,.,.:.,._.(.;.s.G.g.r.J.|.0.r.g.D.N.).h.>.2.=.H u A 6 8 h h m m h < } 9 | $ & & % & @ @ . . @ . @ . . . . . . + * + * ; > , , , , > ( ' ) ) ! ) ) ) ) ) ) ! ! ! ) ) ) ) ' ' ( , ; + # _ / @ - ( ! { { { { ",
"(.$.k.(.%.X c.2.*.,.,.2.d.k.h.7.D.P.).J.|./.q.6.D.N.z.|.f.X =.H r A 6 1 3 c c 3 c : 9 9 _ # & @ @ @ . + . . . + + . . + . @ . @ & % @ + * * - > ( ( ( ( , > ( ' ) ) ! ) ) ' ' ' ) ! ! ! ) ) ) ) ) ) ' ' ( > - * + = ; ( ! { { { ] ",
"9.(.j.k.>._.&.c.2.c.X d.1.m.|.x.I.].y.J.i.p.|.w.'.N.w.q.;.b.=.H v e g 2 m 3 3 d : 9 } 9 $ & . . . . . + * * + * * + + . @ & # # @ . + * ; > ( ( ( ( , > , ' ' ) ) ! ! ' ' ' ) ) ) ) ) ) ) ) ) ) ) ) ' ' ( , > , ( ' ~ ~ { ] ^ ",
"_.>.k.a.j.&.@.S :.*.X 9.(.l./.w.4.D.z.0.l.k.;.E.}.6.w.E.i.e.T V z I a 5 b 1 3 [ 9 9 } 4 % . . . + + * + * = = * = = * . . + + & % # / # & @ = ; > , ( ( ( , > , ( ' ) ! ! ! ) ' ) ) ) ' ' ' ' ' ' ' ) ) ) ) ) ! ) ' ' ) ! ~ { { ] ^ ",
"2.9.j.m.k.W U ` ` U S 2.~.1.n.y.I.G.).h.1.d.j./.w.A.v.).t.$.@.Z E r A n 5 8 c } 4 9 9 _ & . . . + + + * = * * = = = - - - * + * + @ # / / / % & & . = ; > ( ( ( ( ( , ( ( ' ) ! ~ ! ) ) ) ) ' ' ' ' ' ' ' ( ) ! ! ! ! ~ ! ! ! ~ ~ { { { ] ] ",
"W ~.(.f.d.Y L . .+...T *.d.a.).C.G.).h.(.d.1.n.E.F.F.x.q.a.2.U .x I f g b c } } 9 | $ & . + + * * + * = * * * = ; - ; ; = * + & # / / # % % @ + = ; > ( ( ( ( ( ( ( ( ' ) ) ~ ! ) ) ) ) ) ' ) ) ) ' ) ' ) ! ! ! ~ ~ ~ ~ ~ { { { { { { ] ",
"c.c.%.>.,.+.M H .` ..=.,.%.n.w.3.].x.t.B.k.f.8.s.v.A.v.7.h.9.@.` F u o n j h < : 9 / # @ + * * * * * = = = = - > ; ; ; - = . & # # % & & % & . * = ; > , ( ' ( ( ( ( ( ' ) ) ~ ! ! ) ) ) ) ) ) ) ) ) ! ! ) ! ~ ~ ~ ~ ~ { { { { { { ] ] ] ",
"~.,.c.&.Y M H H .M +.Y c.k.t.N.O.C.^.q.8.f.k.;.J.y.^.F.y.t.f.2.R .y q f 6 1 c : 4 / # @ . + + * + + * * = = - ; ; ; - - * & # & @ @ @ + = - > , , , , , , , ( ' ) ) ! ! ! ! ) ) ) ! ! ) ) ! ! ! ! ~ ~ ~ ~ ~ ~ { { { { { { ] ^ ] ",
"9.*.5.:.` K O #.F E H R 9.i.E.G.O.D.x.|.o.%.%.k.i.r.y.w.z.u.B.~.S ` #.v J n b 3 : | / # & @ . . + + + * - - - ; > > > ; - + @ @ . . . . . + = ; > > > > , > , ( ' ' ) ) ! ! ! ) ) ) ! ! ! ! ! ! ! ! ! ~ ~ { { { { { { { { { ] ^ ] ",
"%._.,.=.` H F C C D K T o.u.).P.[.N.r.p.1.X 2.d.a.0.-.r.r.u.8.e.@.Q K C s f 5 m < 9 _ # % @ . . . + * - ; ; ; > , , , > > = + . * * + . . + + + . . * - > > > ; ; ; > , ( ( ' ) ) ) ) ) ) ) ! ~ ~ ! ! ! ! ! ! ~ { { { { { { { { { { ] ^ ] ",
"&.9.b.*.U .D y C D .2.n.u.z.P.4.6.-.B.9.W :.W e.m.h./.J.t.8.(.,.Q K z v i n b 3 : | / # + * * * - > > > > , , , , , > = * = - - * . + + * * + + + = ; ; - - = = - > , ( ' ' ' ) ) ) ) ) ) ! ! ! ! ! ~ ~ ~ ~ { { { { { { { { ] ] ] ^ ] ",
"T ~.1.d.S +.E z G D M ~.p.t.).'.C.^.t.o.~.@.Y T c.>.l.8.!.i.a.e.W U E w r i l 5 h < 9 / % + - - = ; ; ; ; > > > , , , > - ; ; ; - * . . + + * = * * + * = = + . + = > ( ( ' ( ( ' ' ' ' ' ) ) ) ) ) ! ! ~ ~ ~ { { { ] ] ] { { ] ^ ^ ^ ^ ",
"U @.~._.*.T M G z D V d.i.|.7.'.D.x.!.$.c.Y +.` =.2.%.j.a.l.>.c.:.R E r e l n 5 m < 9 / % @ + - - - - ; ; > > > > > , , > ; ; ; - = * + . . + + * * = = + . . @ @ . * ; > , , , , ( ' ' ( ( ' ) ) ) ) ) ! ! ! ~ ~ { { { ] ] { ] ] ] ] ] ^ ",
"R Q Z Z T ,.Y M #.E Q 1.!.|.y.G.g.).8.e.,.Z O #.H Z T 2.~.b.&.=...Q O r 0 7 b 2 h [ | $ % + = - - - = ; > > > > > > > > ; - - - = * = * + . + * = - - * & % # # @ + - ; ; ; > , , , , , , ( ( ( ( ( ' ) ! ~ ~ ~ ~ { { { { { ] ] ] ] ] ] ",
"Y M z y E Q T S Y R 2.a.i.t.v.G.6.s.B.b.:.V z B y D K +.Y @.T L .V E u n 1 c c c } / # & . . * = = = = ; ; ; > > ; ; > ; ; - - = = - - = * . + = = = * % $ / $ & + = ; > > , > > > - - - - - - - ; , ) ! ~ { ~ ~ { { { { { { ] ] ^ ] ^ ",
"Q F u s r C +.5._.d.o.p.!.q.A.'.F.u.l._.T .y P P B C #.+.U M z G E G N g 3 [ : [ 9 / % . . * * = = ; ; ; > ; > > > > ; - - = = - - - * . . * = * . & # / $ & + = ; > > > ; - = + . . . + = > ' ) ~ { { { { { { { { { ] ^ ^ ^ ^ ",
"O y N p q v K S 2.d.B.!.t.z.}.N.w.u.m.9.*.Q K z v u w F V H w q P C v e j d 9 9 9 | # & @ . + + + * = ; ; ; ; > , , , > ; ; - = = - - - = . . . + + & # / $ & . + * = - ; - = * + @ & & % # & . * ; ' ) ! { { { { { { { { { ] ] ^ ^ ] ",
"z x r s v D M ` Q 5.j.h.q.^.N.}.x.u.;.(.X T +.F v u y O E v o A i r i k 1 [ 4 | | $ % & & @ . * * * * = ; ; ; > , , , , > - ; - * * = - - - * + . . @ $ _ _ % . . + * * * * & % # $ / $ $ $ $ % * > ' ! ! ~ ~ ~ { ~ { { { ] ^ ^ ^ ^ ^ ",
"x y B C O L +.O H =.9.8.7.6.}.^.).0.f.d.:.V #.C B y G z r t a a t J A 7 3 : | / / $ % & & + * = * = - ; ; > , , , > > > ; > - = * * = = = * * + @ # _ _ # . + % / | | | _ _ _ $ # # % @ * > ' ! ! ! ! ~ { { { { ] ] ^ ^ ^ ^ ^ ",
"w C C #.V ` V F O R %.h.y.A.A.x.s.n.9.2.U O D G z y P J 0 g 6 k 0 f a b d } _ # % % % & @ . + = = = = ; ; > > > > > > > > , > ; = + * * = - = * + @ # _ _ % @ @ @ # _ 9 : 9 _ # & & % & . . = ; > , ' ) ) ! ~ { { ] ] ] ^ ^ ^ ^ ^ ^ ",
"u y G F H V K D E R 9./.x.^.v.).J.l.b.*.U H F C P I f 6 j b 2 j 5 g 5 1 < 9 | / # % % & . + = - - - ; ; ; > > > > > ; > > > - * . + * = - - = + % | 4 $ @ & % # _ 9 } 9 _ # @ . . @ @ . + * = ; > , , , ( ' ) ! { ] ] ] ] ^ ^ ^ ^ ^ ^ ",
"N w C D O .H E M :.$.J.x.w.y.r.0.$.c.T L D P I f k j 8 1 m m m m 1 m 3 [ } 9 | / $ # & . + = - - - - - - ; > > , > ; > > > = + . . + * = - = . $ 9 / & @ & # / 4 9 4 / # & . . & & & + = - ; > , ( ( , ( ' ) ~ { { { ] ] ] ^ ] ^ ^ ",
"I r x D O .V +.Y ~.B.q.x.x.).-.n.b.T V z N A k b 1 h 3 c c c c d < d < } } 9 | / $ # @ . + + = = = = = * = - ; ; > > ; ; ; ; * . & + * = + & _ | % @ @ % / 4 4 / # & @ @ @ @ & $ / # & @ . + * - ; , ( ( , ( ' ) ~ ~ ~ { { { ] ] ] ^ ] ",
"J q v C #. .` R 2.k.0.E.y.y.E.|.k.,.L D s A 6 8 h c d < : } : [ [ : : : } } 9 _ $ # & + = = = * * * * + * = - - - ; - = * + . @ % # @ . . + $ _ # @ # / _ # & @ @ & & & % # _ 4 4 | | _ $ % . * - > > , ( ( ) ! ! ~ ~ { { { ] ] ] ] ",
"e o q v z H Z =.~.;.t.r.z.7.-.8.b.R K B o g 2 3 < [ [ : } 9 } : : : } } : } 4 $ # # @ . * - - * + . + . + * = = = * + . . . @ & % @ . . @ / $ @ @ % # # # & @ & # % & & # / | 9 } : [ : | $ @ + = - > , ( ' ) ! ! ~ { { { { ] ] ",
"l f J s x #.` :.b.B.|.q.E.r.t.l.W Z F N 0 j m < : } : [ : [ < < [ : : : 9 4 _ $ # & . = - = + . + + = - - - = = = = = + @ & + . % / # @ & # # % % . @ & % & . + @ & & # / | 9 } 9 | $ @ . * - > ( ' ) ! ! ~ { { { { ] ",
"n 0 A i P C M :.d.a.!.J.s.u.h.1.:.V y o g b 1 c d < d c c d < < : : [ } | / $ # & @ . = - * + + + + + * = = - ; > > ; ; > ; - * + + @ $ $ @ @ % % & & & . @ @ + * * * + + + . @ % $ / _ / % @ . * ; , ( ' ! ~ ~ { { ] ] ",
"g a 0 f I v F U ~.l.p.0.J./.m.b.Y O P t g j 8 h h h h 3 c d [ [ } 9 } 4 / % & @ . + = - = * = = = = - ; ; ; ; , , > > > ; ; = . . * + % $ & . & & @ @ & @ . . . + = = - = * * + * * * + % / / # & + = ; , ' ! ! ~ { ] ] ",
"6 k k n f p B .*.$.;.i.0.p.k.W ` D p 0 5 j 8 h c d d [ : [ [ : 4 | | / % @ . . . * = - - - - ; - ; ; ; ; ; ; ; > , > > > ; ; - . . * + & & @ & @ . & & . . . . . * = - - = * + + . * = = = * % $ # % & . * ; ( ) ! ~ { ] ^ ",
"6 6 6 g n A q G Q _.f.;.;.a.%.Y H v A 5 2 8 m d : } } } : : } _ $ $ / # @ . . . . + = - - - - ; ; - - ; ; ; - ; ; ; > > > > > ; - . = * . & @ . & & . . + = - - ; - = * + @ * = - - = . @ % & . * - , ) ~ { { ] ^ ",
"7 7 7 6 g g f s D U &.9.e.d.5.+.F p k b 1 h d } 4 9 } : } 4 $ % & % # % . + + + * - = = = = - ; - - - ; - - - ; ; ; > ; ; ; > = . - = * + @ & + . . . @ @ . . + = - ; ; > ; - = . # / # . = > > ; * + * - , ! { { { ] ] ",
"8 j 7 6 5 7 g A N G +.=.:.=.L E x e 5 8 m d : } } : : 9 _ % @ & % & . + + + + * = = = = = - - - - - - - - ; ; ; ; ; ; ; ; ; - . - = * . @ @ . * * + . . . . . + * = - ; > > > ; = @ | } / . - > > ; = * * - > ' ! ~ { { ] ] ",
"8 2 b b b b j 5 l N y E M H F C r l j 1 h d : } } } | $ & . + + . . . . . . + = = = * = = = = = = - = - - - - = - - - - - ; - . + - - * . @ + + + * + . . . . . * * = - ; ; > ; - + & 9 : / . - > > > > > , ' ! ~ ~ ] ] ] ] ",
"2 8 1 1 1 1 8 8 j f q w z G y v o 5 1 m 3 [ 4 | 4 _ # @ . * = * * + + + + . . . * - = * = - = * * * * = = - - = = = = = = = - ; ; + + - - * . * * * + + + . @ & & & @ . + * * = - - - ; ; - = + % } [ / . - > , ( ' ' ! ~ ~ { ] ^ ] ^ ",
"1 m 3 h h 3 h m 1 b 0 I P v v q n m d 3 c } _ $ / $ & . + * = = * + + + + + + + = = = = = = * * = = * * = = - - = = = = = - - ; ; * + = = + + - - = * + + @ % % % & @ . + * = - - - ; - - ; - * + # : [ $ + ; , ' ) ) ! { { { ^ ^ ^ ^ ",
"3 3 c c c 3 3 m h c 1 n i N s A 2 < : d < 9 _ / $ # & . + = = = * + + * * * = * = - ; - = * + * = = - - = = - - = * = = = - - - ; = * * * + + * - - - = * . @ & & & @ . . . + * = - - - ; > ; - - - = * . $ [ : % * > ' ) ) ! ~ ~ ] ^ ^ ^ ^ ",
"< c c < < d c 3 3 c d 1 g A l 7 c : : [ 9 / / / $ # % + * = = * + + * = = = = - > ; = * * * = = - ; - = = - - = = - - = = - - ; ; = * = = * * - - - - * . @ & @ @ . + + + * * - ; - ; > > ; - - = * + + _ [ 4 - ( ' ) ! ! ~ ] ^ ^ ^ ] ",
": < < [ [ < [ < d c d < 3 m m c : } [ : | # % % % % & . + * * + * * = - - - ; > ; - = - ; ; - - - - = = = - - ; ; - - = = - - ; ; - = ; - = = ; ; ; - * . @ & @ . + + + * = - ; ; ; ; ; > ; - = + . . + @ | } $ + > ( ) ~ ~ { ] ^ ^ ^ ] ",
": : : } } : : : [ < < : } : : } 9 9 : 9 / # % & @ @ @ @ @ . . + * = = - ; > , > > > > > > ; ; - - - = = - - - ; > ; - - = - ; > > ; - - = = - - - - - * & @ . + * * * * = - ; ; > ; ; > > ; - + . + + & 4 | @ = , ) ~ { { ] ^ ^ ^ ^ ",
"3 < : 9 9 9 9 } } : [ } 4 4 | | 4 } : 4 # % % & @ . @ @ . + = - ; > , , , , > > > ; ; ; - - - - - - - - - ; > ; ; - - ; > > > - * + * - - - - - * @ * = = = = - ; ; > > ; ; > > ; - + & % + . / 4 # . ; ' ! ~ ] ] ] ] ] ^ ",
"2 m 3 < : } 9 9 } } : : 9 | / _ 4 } } _ # % & @ . . . . . * - > , ( , , > ; > > ; ; ; - - - - - ; ; - ; ; ; > ; - - > , > > = + . * - ; ; ; - * . + = - - = ; > > > > > > > > ; - + # _ @ + * & | _ & * , ) ~ { ] ^ ^ ^ ] ",
"c 3 h h c [ } 9 } } 9 } 9 | / / | 9 | $ # # & @ . . . + * * + . . + = - > ( , , > ; ; ; ; ; ; - = = - - ; ; ; ; ; ; > ; - = - > , ; - * . = ; > > > - * + . . . . + = - - - ; > > > > , , , > > - + $ 9 # + = . / | # . ; ' ! { ] ^ ^ ^ ^ ",
"4 } : < d < : } } } 9 9 : } _ $ _ 4 _ / $ # % @ . + + = - ; - * * + + = > ( , > ; - - - - - - - = = - - = - ; ; ; ; > > - = = ; > > > - = - > , , > ; - * + + + . + = - - ; ; > > > > > , , , > = . $ : 4 = = & / $ @ = , ) ~ ] ] ] ^ ^ ",
"4 9 } [ [ [ [ : : : [ : : : 4 _ | 4 _ / $ $ % @ . + * = ; ; - - - - - - ; , , > ; - = = = - = = = = - = = = - ; ; - ; > ; - ; - ; , , > - - > , , , > - = * + + . * = - - - ; ; > > > > > , > ; * . % } 9 - ; * % # @ . - ' ~ { ] ^ ^ ^ ",
"$ _ 4 } : : : : [ [ [ [ } 9 9 9 4 4 _ $ # % @ . + + * * - ; - - - ; > ; > > > > > ; - * = = * * = - - - - - = = = = ; > ; ; > ; - > , ( > > > , ( , ; - = * * * + * = - = = ; > > > > > , , > - + . & } } @ = ; - % % @ * , ! ~ { ^ ^ ] ",
"& & % # $ / / | 4 4 | | | | 9 } 9 | / # % & + * + + * = - - - - - ; ; ; > ; - - - - = = * * * * * * + * = = * + + * ; > ; > , , > ; , ( ( , , , ( , ; - - = = = * * = - = = - > , > > , , > ; = . % } : & = > ; + % # @ + > ) ! ~ ] ] ^ "};

24
ede-tip/tips/ede Normal file
View File

@@ -0,0 +1,24 @@
To start any application is simple. Press on the button with your user
name, go to the Programs menu, select category and click on the wished program.
%
To exit the EDE, press button with your user name and then Logout.
%
To lock the computer, press button with your user name and then choose Lock.
%
To setup things on the computer, press button with your user name, Panel menu
and then the Control panel.
%
To add a program that is not in the Programs menu, click on the button with
your user name, Panel menu, and then Menu editor.
%
Notice that this is still development version, so please send your bug reports
or comments on EDE forum, EDE bug reporting system (on project page), or check mails of
current maintainers located in AUTHORS file.
%
You can download latest release on http://equinox-project.org.
%
If you are interested to help us, don't hesitate to write or visit our page.
You don't have to be a coding guru nor have expirience in GUI programming. If you don't have any
expirience in programming, there are always things you can do for us, like writing
or checking documentation, spreading a words or at the best, testing EDE to the limits.
%