r4302 mikeL - in /branches/mikeL/netsurf/gtk: gtk_scaffolding.c gtk_selection.c res/netsurf.glade
by netsurf@semichrome.net
Author: mikeL
Date: Sat Jun 7 16:48:18 2008
New Revision: 4302
URL: http://source.netsurf-browser.org?rev=4302&view=rev
Log:
Implemented paste functionality
Modified:
branches/mikeL/netsurf/gtk/gtk_scaffolding.c
branches/mikeL/netsurf/gtk/gtk_selection.c
branches/mikeL/netsurf/gtk/res/netsurf.glade
Modified: branches/mikeL/netsurf/gtk/gtk_scaffolding.c
URL: http://source.netsurf-browser.org/branches/mikeL/netsurf/gtk/gtk_scaffold...
==============================================================================
--- branches/mikeL/netsurf/gtk/gtk_scaffolding.c (original)
+++ branches/mikeL/netsurf/gtk/gtk_scaffolding.c Sat Jun 7 16:48:18 2008
@@ -135,6 +135,7 @@
/* edit menu */
MENUPROTO(copy);
+MENUPROTO(paste);
MENUPROTO(select_all);
MENUPROTO(preferences);
@@ -176,6 +177,7 @@
/* edit menu */
MENUEVENT(copy),
+ MENUEVENT(paste),
MENUEVENT(select_all),
MENUEVENT(preferences),
@@ -453,6 +455,14 @@
struct browser_window *bw = nsgtk_get_browser_for_gui(gw->top_level);
LOG(("TEST"));
gui_copy_to_clipboard(bw->sel);
+}
+
+MENUHANDLER(paste)
+{
+ struct gtk_scaffolding *gw = (struct gtk_scaffolding *)g;
+ struct gui_window *gui = gw->top_level;
+
+ gui_paste_from_clipboard(gui, 0, 0);
}
MENUHANDLER(select_all)
Modified: branches/mikeL/netsurf/gtk/gtk_selection.c
URL: http://source.netsurf-browser.org/branches/mikeL/netsurf/gtk/gtk_selectio...
==============================================================================
--- branches/mikeL/netsurf/gtk/gtk_selection.c (original)
+++ branches/mikeL/netsurf/gtk/gtk_selection.c Sat Jun 7 16:48:18 2008
@@ -79,6 +79,11 @@
void gui_paste_from_clipboard(struct gui_window *g, int x, int y)
{
+ char *text;
+ clipboard = gtk_clipboard_get (GDK_SELECTION_CLIPBOARD);
+ text = gtk_clipboard_wait_for_text (clipboard);
+ browser_window_paste_text(g->bw, text,
+ strlen(text), true);
}
bool gui_empty_clipboard(void)
Modified: branches/mikeL/netsurf/gtk/res/netsurf.glade
URL: http://source.netsurf-browser.org/branches/mikeL/netsurf/gtk/res/netsurf....
==============================================================================
--- branches/mikeL/netsurf/gtk/res/netsurf.glade (original)
+++ branches/mikeL/netsurf/gtk/res/netsurf.glade Sat Jun 7 16:48:18 2008
@@ -207,7 +207,6 @@
<child>
<widget class="GtkImageMenuItem" id="paste">
<property name="visible">True</property>
- <property name="sensitive">False</property>
<property name="label">gtk-paste</property>
<property name="use_underline">True</property>
<property name="use_stock">True</property>
@@ -331,9 +330,9 @@
<property name="visible">True</property>
<property name="label" translatable="yes">Zoom _in</property>
<property name="use_underline">True</property>
+ <accelerator key="equal" modifiers="GDK_CONTROL_MASK" signal="activate"/>
+ <accelerator key="KP_Add" modifiers="GDK_CONTROL_MASK" signal="activate"/>
<accelerator key="plus" modifiers="GDK_CONTROL_MASK" signal="activate"/>
- <accelerator key="KP_Add" modifiers="GDK_CONTROL_MASK" signal="activate"/>
- <accelerator key="equal" modifiers="GDK_CONTROL_MASK" signal="activate"/>
<child internal-child="image">
<widget class="GtkImage" id="image564">
<property name="visible">True</property>
@@ -348,8 +347,8 @@
<property name="visible">True</property>
<property name="label" translatable="yes">_Normal size</property>
<property name="use_underline">True</property>
+ <accelerator key="KP_0" modifiers="GDK_CONTROL_MASK" signal="activate"/>
<accelerator key="0" modifiers="GDK_CONTROL_MASK" signal="activate"/>
- <accelerator key="KP_0" modifiers="GDK_CONTROL_MASK" signal="activate"/>
<child internal-child="image">
<widget class="GtkImage" id="image565">
<property name="visible">True</property>
@@ -364,8 +363,8 @@
<property name="visible">True</property>
<property name="label" translatable="yes">Zoom _out</property>
<property name="use_underline">True</property>
+ <accelerator key="KP_Subtract" modifiers="GDK_CONTROL_MASK" signal="activate"/>
<accelerator key="minus" modifiers="GDK_CONTROL_MASK" signal="activate"/>
- <accelerator key="KP_Subtract" modifiers="GDK_CONTROL_MASK" signal="activate"/>
<child internal-child="image">
<widget class="GtkImage" id="image566">
<property name="visible">True</property>
@@ -803,25 +802,17 @@
<placeholder/>
</child>
<child>
- <widget class="GtkHSeparator" id="hseparator3">
- <property name="visible">True</property>
- </widget>
- <packing>
- <property name="top_attach">1</property>
- <property name="bottom_attach">2</property>
- <property name="y_options">GTK_FILL</property>
- </packing>
- </child>
- <child>
- <widget class="GtkVScrollbar" id="coreScrollVertical">
- <property name="visible">True</property>
- <property name="adjustment">0 0 100 1 10 0</property>
+ <widget class="GtkStatusbar" id="statusbar1">
+ <property name="height_request">1</property>
+ <property name="visible">True</property>
</widget>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
- <property name="bottom_attach">2</property>
+ <property name="top_attach">2</property>
+ <property name="bottom_attach">3</property>
<property name="x_options">GTK_FILL</property>
+ <property name="y_options">GTK_SHRINK | GTK_FILL</property>
</packing>
</child>
<child>
@@ -862,17 +853,25 @@
</packing>
</child>
<child>
- <widget class="GtkStatusbar" id="statusbar1">
- <property name="height_request">1</property>
- <property name="visible">True</property>
+ <widget class="GtkVScrollbar" id="coreScrollVertical">
+ <property name="visible">True</property>
+ <property name="adjustment">0 0 100 1 10 0</property>
</widget>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
- <property name="top_attach">2</property>
- <property name="bottom_attach">3</property>
+ <property name="bottom_attach">2</property>
<property name="x_options">GTK_FILL</property>
- <property name="y_options">GTK_SHRINK | GTK_FILL</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkHSeparator" id="hseparator3">
+ <property name="visible">True</property>
+ </widget>
+ <packing>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="y_options">GTK_FILL</property>
</packing>
</child>
</widget>
@@ -916,18 +915,75 @@
<property name="column_spacing">11</property>
<property name="row_spacing">10</property>
<child>
- <widget class="GtkEntry" id="entryLoginUser">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="has_focus">True</property>
- <property name="text" translatable="yes">sesame</property>
+ <widget class="GtkLabel" id="labelLoginHost">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">moo.yoo.com</property>
</widget>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
+ <property name="x_options">GTK_FILL</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label57">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">Password</property>
+ </widget>
+ <packing>
+ <property name="top_attach">3</property>
+ <property name="bottom_attach">4</property>
+ <property name="x_options">GTK_FILL</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label56">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">Username</property>
+ </widget>
+ <packing>
<property name="top_attach">2</property>
<property name="bottom_attach">3</property>
- <property name="y_options"></property>
+ <property name="x_options">GTK_FILL</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label54">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">Host</property>
+ </widget>
+ <packing>
+ <property name="x_options">GTK_FILL</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label55">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">Realm</property>
+ </widget>
+ <packing>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="x_options">GTK_FILL</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="labelLoginRealm">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">my sekr3t area</property>
+ </widget>
+ <packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="x_options">GTK_FILL</property>
</packing>
</child>
<child>
@@ -947,75 +1003,18 @@
</packing>
</child>
<child>
- <widget class="GtkLabel" id="labelLoginRealm">
- <property name="visible">True</property>
- <property name="xalign">0</property>
- <property name="label" translatable="yes">my sekr3t area</property>
+ <widget class="GtkEntry" id="entryLoginUser">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="has_focus">True</property>
+ <property name="text" translatable="yes">sesame</property>
</widget>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
- <property name="top_attach">1</property>
- <property name="bottom_attach">2</property>
- <property name="x_options">GTK_FILL</property>
- </packing>
- </child>
- <child>
- <widget class="GtkLabel" id="label55">
- <property name="visible">True</property>
- <property name="xalign">0</property>
- <property name="label" translatable="yes">Realm</property>
- </widget>
- <packing>
- <property name="top_attach">1</property>
- <property name="bottom_attach">2</property>
- <property name="x_options">GTK_FILL</property>
- </packing>
- </child>
- <child>
- <widget class="GtkLabel" id="label54">
- <property name="visible">True</property>
- <property name="xalign">0</property>
- <property name="label" translatable="yes">Host</property>
- </widget>
- <packing>
- <property name="x_options">GTK_FILL</property>
- </packing>
- </child>
- <child>
- <widget class="GtkLabel" id="label56">
- <property name="visible">True</property>
- <property name="xalign">0</property>
- <property name="label" translatable="yes">Username</property>
- </widget>
- <packing>
<property name="top_attach">2</property>
<property name="bottom_attach">3</property>
- <property name="x_options">GTK_FILL</property>
- </packing>
- </child>
- <child>
- <widget class="GtkLabel" id="label57">
- <property name="visible">True</property>
- <property name="xalign">0</property>
- <property name="label" translatable="yes">Password</property>
- </widget>
- <packing>
- <property name="top_attach">3</property>
- <property name="bottom_attach">4</property>
- <property name="x_options">GTK_FILL</property>
- </packing>
- </child>
- <child>
- <widget class="GtkLabel" id="labelLoginHost">
- <property name="visible">True</property>
- <property name="xalign">0</property>
- <property name="label" translatable="yes">moo.yoo.com</property>
- </widget>
- <packing>
- <property name="left_attach">1</property>
- <property name="right_attach">2</property>
- <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
</packing>
</child>
</widget>
@@ -1348,39 +1347,30 @@
<property name="n_columns">2</property>
<property name="column_spacing">4</property>
<child>
- <widget class="GtkLabel" id="label117">
- <property name="visible">True</property>
- <property name="xalign">1</property>
- <property name="label" translatable="yes">Address</property>
+ <widget class="GtkLabel" id="labelHistoryAddress">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">http://netsurf.sf.net/</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_MIDDLE</property>
</widget>
<packing>
- <property name="x_options">GTK_FILL</property>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
<property name="y_options"></property>
</packing>
</child>
<child>
- <widget class="GtkLabel" id="label118">
- <property name="visible">True</property>
- <property name="xalign">1</property>
- <property name="label" translatable="yes">Last visited</property>
+ <widget class="GtkLabel" id="labelHistoryLastVisit">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">Fri Aug 09 00:00:00 2006</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_END</property>
</widget>
<packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
<property name="top_attach">1</property>
<property name="bottom_attach">2</property>
- <property name="x_options">GTK_FILL</property>
- <property name="y_options"></property>
- </packing>
- </child>
- <child>
- <widget class="GtkLabel" id="label119">
- <property name="visible">True</property>
- <property name="xalign">1</property>
- <property name="label" translatable="yes">Number of visits</property>
- </widget>
- <packing>
- <property name="top_attach">2</property>
- <property name="bottom_attach">3</property>
- <property name="x_options">GTK_FILL</property>
<property name="y_options"></property>
</packing>
</child>
@@ -1400,30 +1390,39 @@
</packing>
</child>
<child>
- <widget class="GtkLabel" id="labelHistoryLastVisit">
- <property name="visible">True</property>
- <property name="xalign">0</property>
- <property name="label" translatable="yes">Fri Aug 09 00:00:00 2006</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_END</property>
+ <widget class="GtkLabel" id="label119">
+ <property name="visible">True</property>
+ <property name="xalign">1</property>
+ <property name="label" translatable="yes">Number of visits</property>
</widget>
<packing>
- <property name="left_attach">1</property>
- <property name="right_attach">2</property>
+ <property name="top_attach">2</property>
+ <property name="bottom_attach">3</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label118">
+ <property name="visible">True</property>
+ <property name="xalign">1</property>
+ <property name="label" translatable="yes">Last visited</property>
+ </widget>
+ <packing>
<property name="top_attach">1</property>
<property name="bottom_attach">2</property>
+ <property name="x_options">GTK_FILL</property>
<property name="y_options"></property>
</packing>
</child>
<child>
- <widget class="GtkLabel" id="labelHistoryAddress">
- <property name="visible">True</property>
- <property name="xalign">0</property>
- <property name="label" translatable="yes">http://netsurf.sf.net/</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_MIDDLE</property>
+ <widget class="GtkLabel" id="label117">
+ <property name="visible">True</property>
+ <property name="xalign">1</property>
+ <property name="label" translatable="yes">Address</property>
</widget>
<packing>
- <property name="left_attach">1</property>
- <property name="right_attach">2</property>
+ <property name="x_options">GTK_FILL</property>
<property name="y_options"></property>
</packing>
</child>
15 years, 3 months
r4301 mikeL - in /branches/mikeL/netsurf: Makefile.sources gtk/gtk_scaffolding.c gtk/gtk_selection.c gtk/gtk_selection.h gtk/gtk_window.c gtk/gtk_window.h gtk/res/netsurf.glade
by netsurf@semichrome.net
Author: mikeL
Date: Sat Jun 7 16:37:28 2008
New Revision: 4301
URL: http://source.netsurf-browser.org?rev=4301&view=rev
Log:
Moved definitions of gui_window and browser_mouse to gtk_window.h. Moved all selection related functions to gtk_selection.c. Implemented copy functionality.
Added:
branches/mikeL/netsurf/gtk/gtk_selection.c
branches/mikeL/netsurf/gtk/gtk_selection.h
Modified:
branches/mikeL/netsurf/Makefile.sources
branches/mikeL/netsurf/gtk/gtk_scaffolding.c
branches/mikeL/netsurf/gtk/gtk_window.c
branches/mikeL/netsurf/gtk/gtk_window.h
branches/mikeL/netsurf/gtk/res/netsurf.glade
Modified: branches/mikeL/netsurf/Makefile.sources
URL: http://source.netsurf-browser.org/branches/mikeL/netsurf/Makefile.sources...
==============================================================================
--- branches/mikeL/netsurf/Makefile.sources (original)
+++ branches/mikeL/netsurf/Makefile.sources Sat Jun 7 16:37:28 2008
@@ -57,7 +57,7 @@
# S_GTK are sources purely for the GTK build
S_GTK := font_pango.c gtk_bitmap.c gtk_gui.c gtk_schedule.c \
gtk_thumbnail.c gtk_plotters.c gtk_treeview.c gtk_scaffolding.c \
- gtk_completion.c gtk_login.c gtk_throbber.c \
+ gtk_completion.c gtk_login.c gtk_throbber.c gtk_selection.c \
gtk_history.c gtk_window.c gtk_filetype.c gtk_download.c
S_GTK := $(addprefix gtk/,$(S_GTK))
Modified: branches/mikeL/netsurf/gtk/gtk_scaffolding.c
URL: http://source.netsurf-browser.org/branches/mikeL/netsurf/gtk/gtk_scaffold...
==============================================================================
--- branches/mikeL/netsurf/gtk/gtk_scaffolding.c (original)
+++ branches/mikeL/netsurf/gtk/gtk_scaffolding.c Sat Jun 7 16:37:28 2008
@@ -134,6 +134,7 @@
MENUPROTO(quit);
/* edit menu */
+MENUPROTO(copy);
MENUPROTO(select_all);
MENUPROTO(preferences);
@@ -174,6 +175,7 @@
MENUEVENT(quit),
/* edit menu */
+ MENUEVENT(copy),
MENUEVENT(select_all),
MENUEVENT(preferences),
@@ -443,6 +445,14 @@
{
netsurf_quit = true;
return TRUE;
+}
+
+MENUHANDLER(copy)
+{
+ struct gtk_scaffolding *gw = (struct gtk_scaffolding *)g;
+ struct browser_window *bw = nsgtk_get_browser_for_gui(gw->top_level);
+ LOG(("TEST"));
+ gui_copy_to_clipboard(bw->sel);
}
MENUHANDLER(select_all)
Added: branches/mikeL/netsurf/gtk/gtk_selection.c
URL: http://source.netsurf-browser.org/branches/mikeL/netsurf/gtk/gtk_selectio...
==============================================================================
--- branches/mikeL/netsurf/gtk/gtk_selection.c (added)
+++ branches/mikeL/netsurf/gtk/gtk_selection.c Sat Jun 7 16:37:28 2008
@@ -1,0 +1,93 @@
+/*
+ * Copyright 2008 Mike Lester <element3260(a)gmail.com>
+ *
+ * This file is part of NetSurf, http://www.netsurf-browser.org/
+ *
+ * NetSurf 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; version 2 of the License.
+ *
+ * NetSurf 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, see <http://www.gnu.org/licenses/>.
+ */
+#include <gtk/gtk.h>
+
+#include "utils/log.h"
+
+#include "desktop/gui.h"
+#include "desktop/textinput.h"
+#include "desktop/selection.h"
+#include "desktop/browser.h"
+#include "gtk/gtk_selection.h"
+#include "gtk/gtk_window.h"
+
+GString *current_selection;
+GtkClipboard *clipboard;
+
+static bool copy_handler(const char *text, size_t length, struct box *box,
+ void *handle, const char *whitespace_text,
+ size_t whitespace_length);
+
+
+bool gui_add_to_clipboard(const char *text, size_t length, bool space)
+{
+ LOG(("Text: %s", text));
+
+ /* add the text from this box */
+ current_selection = g_string_append_len (current_selection,
+ text, length);
+ if (space) g_string_append (current_selection, " ");
+ return true;
+}
+
+bool copy_handler(const char *text, size_t length, struct box *box,
+ void *handle, const char *whitespace_text,
+ size_t whitespace_length)
+{
+ /* add any whitespace which precedes the text from this box */
+ if (whitespace_text) {
+ if (!gui_add_to_clipboard(whitespace_text,
+ whitespace_length, false)) {
+ return false;
+ }
+ }
+ /* add the text from this box */
+ if (!gui_add_to_clipboard(text, length, box->space))
+ return false;
+
+ return true;
+}
+
+bool gui_copy_to_clipboard(struct selection *s)
+{
+ current_selection = g_string_new(NULL);
+ clipboard = gtk_clipboard_get (GDK_SELECTION_CLIPBOARD);
+ if (selection_traverse(s, copy_handler, NULL))
+ gtk_clipboard_set_text (clipboard, current_selection->str, -1);
+ return TRUE;
+}
+
+void gui_start_selection(struct gui_window *g)
+{
+
+}
+
+void gui_paste_from_clipboard(struct gui_window *g, int x, int y)
+{
+}
+
+bool gui_empty_clipboard(void)
+{
+ return true;
+}
+
+bool gui_commit_clipboard(void)
+{
+ return true;
+}
+
Added: branches/mikeL/netsurf/gtk/gtk_selection.h
URL: http://source.netsurf-browser.org/branches/mikeL/netsurf/gtk/gtk_selectio...
==============================================================================
--- branches/mikeL/netsurf/gtk/gtk_selection.h (added)
+++ branches/mikeL/netsurf/gtk/gtk_selection.h Sat Jun 7 16:37:28 2008
@@ -1,0 +1,25 @@
+/*
+ * Copyright 2008 Mike Lester <element3260(a)gmail.com>
+ *
+ * This file is part of NetSurf, http://www.netsurf-browser.org/
+ *
+ * NetSurf 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; version 2 of the License.
+ *
+ * NetSurf 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, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef GTK_SELECTION_H
+#define GTK_SELECTION_H
+
+#include <gtk/gtk.h>
+#include "desktop/gui.h"
+
+#endif
Modified: branches/mikeL/netsurf/gtk/gtk_window.c
URL: http://source.netsurf-browser.org/branches/mikeL/netsurf/gtk/gtk_window.c...
==============================================================================
--- branches/mikeL/netsurf/gtk/gtk_window.c (original)
+++ branches/mikeL/netsurf/gtk/gtk_window.c Sat Jun 7 16:37:28 2008
@@ -21,6 +21,7 @@
#include "desktop/browser.h"
#include "desktop/options.h"
#include "desktop/textinput.h"
+#include "desktop/selection.h"
#include "gtk/gtk_gui.h"
#include "gtk/gtk_scaffolding.h"
#include "gtk/gtk_plotters.h"
@@ -30,45 +31,6 @@
#include "utils/utils.h"
#include <gdk/gdkkeysyms.h>
#include <assert.h>
-
-struct gui_window {
- /* All gui_window objects have an ultimate scaffold */
- nsgtk_scaffolding *scaffold;
- /* A gui_window is the rendering of a browser_window */
- struct browser_window *bw;
- struct browser_mouse *mouse;
-
- /* These are the storage for the rendering */
- int caretx, carety, careth;
- gui_pointer_shape current_pointer;
- int last_x, last_y;
-
- /* Within GTK, a gui_window is a scrolled window
- * with a viewport inside
- * with a gtkfixed in that
- * with a drawing area in that
- * The scrolled window is optional and only chosen
- * for frames which need it. Otherwise we just use
- * a viewport.
- */
- GtkScrolledWindow *scrolledwindow;
- GtkViewport *viewport;
- GtkFixed *fixed;
- GtkDrawingArea *drawing_area;
-
- /* Keep gui_windows in a list for cleanup later */
- struct gui_window *next, *prev;
-};
-
-struct browser_mouse {
- struct gui_window *gui;
- struct box *box;
-
- gdouble pressed_x;
- gdouble pressed_y;
- gboolean waiting;
- browser_mouse_state state;
-};
static struct gui_window *window_list = 0; /**< first entry in win list*/
@@ -88,6 +50,7 @@
gpointer);
static gboolean nsgtk_window_size_allocate_event(GtkWidget *, GtkAllocation *,
gpointer);
+
/* Other useful bits */
static void nsgtk_redraw_caret(struct gui_window *g);
@@ -935,38 +898,6 @@
}
-void gui_start_selection(struct gui_window *g)
-{
-
-}
-
-void gui_paste_from_clipboard(struct gui_window *g, int x, int y)
-{
-
-}
-
-bool gui_empty_clipboard(void)
-{
- return true;
-}
-
-bool gui_add_to_clipboard(const char *text, size_t length, bool space)
-{
- return true;
-}
-
-bool gui_commit_clipboard(void)
-{
- return true;
-}
-
-
-bool gui_copy_to_clipboard(struct selection *s)
-{
- return true;
-}
-
-
void gui_window_get_dimensions(struct gui_window *g, int *width, int *height,
bool scaled)
{
Modified: branches/mikeL/netsurf/gtk/gtk_window.h
URL: http://source.netsurf-browser.org/branches/mikeL/netsurf/gtk/gtk_window.h...
==============================================================================
--- branches/mikeL/netsurf/gtk/gtk_window.h (original)
+++ branches/mikeL/netsurf/gtk/gtk_window.h Sat Jun 7 16:37:28 2008
@@ -23,6 +23,45 @@
#include "desktop/browser.h"
#include "gtk/gtk_scaffolding.h"
+struct gui_window {
+ /* All gui_window objects have an ultimate scaffold */
+ nsgtk_scaffolding *scaffold;
+ /* A gui_window is the rendering of a browser_window */
+ struct browser_window *bw;
+ struct browser_mouse *mouse;
+
+ /* These are the storage for the rendering */
+ int caretx, carety, careth;
+ gui_pointer_shape current_pointer;
+ int last_x, last_y;
+
+ /* Within GTK, a gui_window is a scrolled window
+ * with a viewport inside
+ * with a gtkfixed in that
+ * with a drawing area in that
+ * The scrolled window is optional and only chosen
+ * for frames which need it. Otherwise we just use
+ * a viewport.
+ */
+ GtkScrolledWindow *scrolledwindow;
+ GtkViewport *viewport;
+ GtkFixed *fixed;
+ GtkDrawingArea *drawing_area;
+
+ /* Keep gui_windows in a list for cleanup later */
+ struct gui_window *next, *prev;
+};
+
+struct browser_mouse {
+ struct gui_window *gui;
+ struct box *box;
+
+ gdouble pressed_x;
+ gdouble pressed_y;
+ gboolean waiting;
+ browser_mouse_state state;
+};
+
void nsgtk_reflow_all_windows(void);
void nsgtk_window_process_reformats(void);
Modified: branches/mikeL/netsurf/gtk/res/netsurf.glade
URL: http://source.netsurf-browser.org/branches/mikeL/netsurf/gtk/res/netsurf....
==============================================================================
--- branches/mikeL/netsurf/gtk/res/netsurf.glade (original)
+++ branches/mikeL/netsurf/gtk/res/netsurf.glade Sat Jun 7 16:37:28 2008
@@ -199,7 +199,6 @@
<child>
<widget class="GtkImageMenuItem" id="copy">
<property name="visible">True</property>
- <property name="sensitive">False</property>
<property name="label">gtk-copy</property>
<property name="use_underline">True</property>
<property name="use_stock">True</property>
@@ -332,9 +331,9 @@
<property name="visible">True</property>
<property name="label" translatable="yes">Zoom _in</property>
<property name="use_underline">True</property>
+ <accelerator key="plus" modifiers="GDK_CONTROL_MASK" signal="activate"/>
+ <accelerator key="KP_Add" modifiers="GDK_CONTROL_MASK" signal="activate"/>
<accelerator key="equal" modifiers="GDK_CONTROL_MASK" signal="activate"/>
- <accelerator key="KP_Add" modifiers="GDK_CONTROL_MASK" signal="activate"/>
- <accelerator key="plus" modifiers="GDK_CONTROL_MASK" signal="activate"/>
<child internal-child="image">
<widget class="GtkImage" id="image564">
<property name="visible">True</property>
@@ -349,8 +348,8 @@
<property name="visible">True</property>
<property name="label" translatable="yes">_Normal size</property>
<property name="use_underline">True</property>
+ <accelerator key="0" modifiers="GDK_CONTROL_MASK" signal="activate"/>
<accelerator key="KP_0" modifiers="GDK_CONTROL_MASK" signal="activate"/>
- <accelerator key="0" modifiers="GDK_CONTROL_MASK" signal="activate"/>
<child internal-child="image">
<widget class="GtkImage" id="image565">
<property name="visible">True</property>
@@ -365,8 +364,8 @@
<property name="visible">True</property>
<property name="label" translatable="yes">Zoom _out</property>
<property name="use_underline">True</property>
+ <accelerator key="minus" modifiers="GDK_CONTROL_MASK" signal="activate"/>
<accelerator key="KP_Subtract" modifiers="GDK_CONTROL_MASK" signal="activate"/>
- <accelerator key="minus" modifiers="GDK_CONTROL_MASK" signal="activate"/>
<child internal-child="image">
<widget class="GtkImage" id="image566">
<property name="visible">True</property>
@@ -804,17 +803,25 @@
<placeholder/>
</child>
<child>
- <widget class="GtkStatusbar" id="statusbar1">
- <property name="height_request">1</property>
- <property name="visible">True</property>
+ <widget class="GtkHSeparator" id="hseparator3">
+ <property name="visible">True</property>
+ </widget>
+ <packing>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="y_options">GTK_FILL</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkVScrollbar" id="coreScrollVertical">
+ <property name="visible">True</property>
+ <property name="adjustment">0 0 100 1 10 0</property>
</widget>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
- <property name="top_attach">2</property>
- <property name="bottom_attach">3</property>
+ <property name="bottom_attach">2</property>
<property name="x_options">GTK_FILL</property>
- <property name="y_options">GTK_SHRINK | GTK_FILL</property>
</packing>
</child>
<child>
@@ -855,25 +862,17 @@
</packing>
</child>
<child>
- <widget class="GtkVScrollbar" id="coreScrollVertical">
- <property name="visible">True</property>
- <property name="adjustment">0 0 100 1 10 0</property>
+ <widget class="GtkStatusbar" id="statusbar1">
+ <property name="height_request">1</property>
+ <property name="visible">True</property>
</widget>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
- <property name="bottom_attach">2</property>
+ <property name="top_attach">2</property>
+ <property name="bottom_attach">3</property>
<property name="x_options">GTK_FILL</property>
- </packing>
- </child>
- <child>
- <widget class="GtkHSeparator" id="hseparator3">
- <property name="visible">True</property>
- </widget>
- <packing>
- <property name="top_attach">1</property>
- <property name="bottom_attach">2</property>
- <property name="y_options">GTK_FILL</property>
+ <property name="y_options">GTK_SHRINK | GTK_FILL</property>
</packing>
</child>
</widget>
@@ -917,61 +916,34 @@
<property name="column_spacing">11</property>
<property name="row_spacing">10</property>
<child>
- <widget class="GtkLabel" id="labelLoginHost">
- <property name="visible">True</property>
- <property name="xalign">0</property>
- <property name="label" translatable="yes">moo.yoo.com</property>
+ <widget class="GtkEntry" id="entryLoginUser">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="has_focus">True</property>
+ <property name="text" translatable="yes">sesame</property>
</widget>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
- <property name="x_options">GTK_FILL</property>
+ <property name="top_attach">2</property>
+ <property name="bottom_attach">3</property>
+ <property name="y_options"></property>
</packing>
</child>
<child>
- <widget class="GtkLabel" id="label57">
- <property name="visible">True</property>
- <property name="xalign">0</property>
- <property name="label" translatable="yes">Password</property>
+ <widget class="GtkEntry" id="entryLoginPass">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="visibility">False</property>
+ <property name="activates_default">True</property>
+ <property name="text" translatable="yes">opensesame</property>
</widget>
<packing>
+ <property name="left_attach">1</property>
+ <property name="right_attach">2</property>
<property name="top_attach">3</property>
<property name="bottom_attach">4</property>
- <property name="x_options">GTK_FILL</property>
- </packing>
- </child>
- <child>
- <widget class="GtkLabel" id="label56">
- <property name="visible">True</property>
- <property name="xalign">0</property>
- <property name="label" translatable="yes">Username</property>
- </widget>
- <packing>
- <property name="top_attach">2</property>
- <property name="bottom_attach">3</property>
- <property name="x_options">GTK_FILL</property>
- </packing>
- </child>
- <child>
- <widget class="GtkLabel" id="label54">
- <property name="visible">True</property>
- <property name="xalign">0</property>
- <property name="label" translatable="yes">Host</property>
- </widget>
- <packing>
- <property name="x_options">GTK_FILL</property>
- </packing>
- </child>
- <child>
- <widget class="GtkLabel" id="label55">
- <property name="visible">True</property>
- <property name="xalign">0</property>
- <property name="label" translatable="yes">Realm</property>
- </widget>
- <packing>
- <property name="top_attach">1</property>
- <property name="bottom_attach">2</property>
- <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
</packing>
</child>
<child>
@@ -989,34 +961,61 @@
</packing>
</child>
<child>
- <widget class="GtkEntry" id="entryLoginPass">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="visibility">False</property>
- <property name="activates_default">True</property>
- <property name="text" translatable="yes">opensesame</property>
+ <widget class="GtkLabel" id="label55">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">Realm</property>
+ </widget>
+ <packing>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="x_options">GTK_FILL</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label54">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">Host</property>
+ </widget>
+ <packing>
+ <property name="x_options">GTK_FILL</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label56">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">Username</property>
+ </widget>
+ <packing>
+ <property name="top_attach">2</property>
+ <property name="bottom_attach">3</property>
+ <property name="x_options">GTK_FILL</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label57">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">Password</property>
+ </widget>
+ <packing>
+ <property name="top_attach">3</property>
+ <property name="bottom_attach">4</property>
+ <property name="x_options">GTK_FILL</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="labelLoginHost">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">moo.yoo.com</property>
</widget>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
- <property name="top_attach">3</property>
- <property name="bottom_attach">4</property>
- <property name="y_options"></property>
- </packing>
- </child>
- <child>
- <widget class="GtkEntry" id="entryLoginUser">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="has_focus">True</property>
- <property name="text" translatable="yes">sesame</property>
- </widget>
- <packing>
- <property name="left_attach">1</property>
- <property name="right_attach">2</property>
- <property name="top_attach">2</property>
- <property name="bottom_attach">3</property>
- <property name="y_options"></property>
+ <property name="x_options">GTK_FILL</property>
</packing>
</child>
</widget>
@@ -1349,15 +1348,54 @@
<property name="n_columns">2</property>
<property name="column_spacing">4</property>
<child>
- <widget class="GtkLabel" id="labelHistoryAddress">
+ <widget class="GtkLabel" id="label117">
+ <property name="visible">True</property>
+ <property name="xalign">1</property>
+ <property name="label" translatable="yes">Address</property>
+ </widget>
+ <packing>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label118">
+ <property name="visible">True</property>
+ <property name="xalign">1</property>
+ <property name="label" translatable="yes">Last visited</property>
+ </widget>
+ <packing>
+ <property name="top_attach">1</property>
+ <property name="bottom_attach">2</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label119">
+ <property name="visible">True</property>
+ <property name="xalign">1</property>
+ <property name="label" translatable="yes">Number of visits</property>
+ </widget>
+ <packing>
+ <property name="top_attach">2</property>
+ <property name="bottom_attach">3</property>
+ <property name="x_options">GTK_FILL</property>
+ <property name="y_options"></property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="labelHistoryVisits">
<property name="visible">True</property>
<property name="xalign">0</property>
- <property name="label" translatable="yes">http://netsurf.sf.net/</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_MIDDLE</property>
+ <property name="label" translatable="yes">2</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_END</property>
</widget>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
+ <property name="top_attach">2</property>
+ <property name="bottom_attach">3</property>
<property name="y_options"></property>
</packing>
</child>
@@ -1377,54 +1415,15 @@
</packing>
</child>
<child>
- <widget class="GtkLabel" id="labelHistoryVisits">
+ <widget class="GtkLabel" id="labelHistoryAddress">
<property name="visible">True</property>
<property name="xalign">0</property>
- <property name="label" translatable="yes">2</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_END</property>
+ <property name="label" translatable="yes">http://netsurf.sf.net/</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_MIDDLE</property>
</widget>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
- <property name="top_attach">2</property>
- <property name="bottom_attach">3</property>
- <property name="y_options"></property>
- </packing>
- </child>
- <child>
- <widget class="GtkLabel" id="label119">
- <property name="visible">True</property>
- <property name="xalign">1</property>
- <property name="label" translatable="yes">Number of visits</property>
- </widget>
- <packing>
- <property name="top_attach">2</property>
- <property name="bottom_attach">3</property>
- <property name="x_options">GTK_FILL</property>
- <property name="y_options"></property>
- </packing>
- </child>
- <child>
- <widget class="GtkLabel" id="label118">
- <property name="visible">True</property>
- <property name="xalign">1</property>
- <property name="label" translatable="yes">Last visited</property>
- </widget>
- <packing>
- <property name="top_attach">1</property>
- <property name="bottom_attach">2</property>
- <property name="x_options">GTK_FILL</property>
- <property name="y_options"></property>
- </packing>
- </child>
- <child>
- <widget class="GtkLabel" id="label117">
- <property name="visible">True</property>
- <property name="xalign">1</property>
- <property name="label" translatable="yes">Address</property>
- </widget>
- <packing>
- <property name="x_options">GTK_FILL</property>
<property name="y_options"></property>
</packing>
</child>
15 years, 3 months
r4300 mikeL - in /branches/mikeL/netsurf: Makefile.sources gtk/dialogs/gtk_about.c gtk/dialogs/gtk_about.h
by netsurf@semichrome.net
Author: mikeL
Date: Sat Jun 7 16:27:39 2008
New Revision: 4300
URL: http://source.netsurf-browser.org?rev=4300&view=rev
Log:
Fixed problem with about.h not linking properly.
Modified:
branches/mikeL/netsurf/Makefile.sources
branches/mikeL/netsurf/gtk/dialogs/gtk_about.c
branches/mikeL/netsurf/gtk/dialogs/gtk_about.h
Modified: branches/mikeL/netsurf/Makefile.sources
URL: http://source.netsurf-browser.org/branches/mikeL/netsurf/Makefile.sources...
==============================================================================
--- branches/mikeL/netsurf/Makefile.sources (original)
+++ branches/mikeL/netsurf/Makefile.sources Sat Jun 7 16:27:39 2008
@@ -51,14 +51,13 @@
# S_DIALOGS are sources related to dialogs but required only
# for the GTK build
-S_DIALOGS := gtk_options.c
+S_DIALOGS := gtk_options.c gtk_about.c
S_DIALOGS := $(addprefix gtk/dialogs/,$(S_DIALOGS))
# S_GTK are sources purely for the GTK build
S_GTK := font_pango.c gtk_bitmap.c gtk_gui.c gtk_schedule.c \
- gtk_thumbnail.c dialogs/gtk_options.c \
- gtk_plotters.c gtk_treeview.c gtk_scaffolding.c gtk_completion.c \
- gtk_login.c gtk_throbber.c \
+ gtk_thumbnail.c gtk_plotters.c gtk_treeview.c gtk_scaffolding.c \
+ gtk_completion.c gtk_login.c gtk_throbber.c \
gtk_history.c gtk_window.c gtk_filetype.c gtk_download.c
S_GTK := $(addprefix gtk/,$(S_GTK))
@@ -115,7 +114,7 @@
endif
ifeq ($(TARGET),gtk)
-SOURCES := $(S_COMMON) $(S_IMAGE) $(S_BROWSER) $(S_GTK)
+SOURCES := $(S_COMMON) $(S_IMAGE) $(S_BROWSER) $(S_GTK) $(S_DIALOGS)
EXETARGET := nsgtk
endif
Modified: branches/mikeL/netsurf/gtk/dialogs/gtk_about.c
URL: http://source.netsurf-browser.org/branches/mikeL/netsurf/gtk/dialogs/gtk_...
==============================================================================
--- branches/mikeL/netsurf/gtk/dialogs/gtk_about.c (original)
+++ branches/mikeL/netsurf/gtk/dialogs/gtk_about.c Sat Jun 7 16:27:39 2008
@@ -17,6 +17,7 @@
*/
#include "gtk/gtk_gui.h"
+#include "gtk/dialogs/gtk_about.h"
#include "desktop/browser.h"
GtkAboutDialog* about_dialog;
Modified: branches/mikeL/netsurf/gtk/dialogs/gtk_about.h
URL: http://source.netsurf-browser.org/branches/mikeL/netsurf/gtk/dialogs/gtk_...
==============================================================================
--- branches/mikeL/netsurf/gtk/dialogs/gtk_about.h (original)
+++ branches/mikeL/netsurf/gtk/dialogs/gtk_about.h Sat Jun 7 16:27:39 2008
@@ -16,8 +16,15 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
+#ifndef NETSURF_GTK_ABOUT_H
+#define NETSURF_GTK_ABOUT_H
+
+#include <gtk/gtk.h>
+
#include "gtk/gtk_gui.h"
-#include "desktop/version.c"
+#include "desktop/netsurf.h"
+#include "desktop/browser.h"
-void nsgtk_about_dialog_init(GtkWindow *parent,
- struct browser_window *bw, const char *version);
+void nsgtk_about_dialog_init(GtkWindow *parent, struct browser_window *bw, const char *version);
+
+#endif
15 years, 3 months
r4299 mikeL - in /branches/mikeL/netsurf/gtk: dialogs/gtk_about.h gtk_scaffolding.c
by netsurf@semichrome.net
Author: mikeL
Date: Sat Jun 7 15:32:15 2008
New Revision: 4299
URL: http://source.netsurf-browser.org?rev=4299&view=rev
Log:
Fixed inclusion of gtk_about source file instead of header
Added:
branches/mikeL/netsurf/gtk/dialogs/gtk_about.h
Modified:
branches/mikeL/netsurf/gtk/gtk_scaffolding.c
Added: branches/mikeL/netsurf/gtk/dialogs/gtk_about.h
URL: http://source.netsurf-browser.org/branches/mikeL/netsurf/gtk/dialogs/gtk_...
==============================================================================
--- branches/mikeL/netsurf/gtk/dialogs/gtk_about.h (added)
+++ branches/mikeL/netsurf/gtk/dialogs/gtk_about.h Sat Jun 7 15:32:15 2008
@@ -1,0 +1,23 @@
+/*
+ * Copyright 2008 Rob Kendrick <rjek(a)rjek.com>
+ *
+ * This file is part of NetSurf, http://www.netsurf-browser.org/
+ *
+ * NetSurf 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; version 2 of the License.
+ *
+ * NetSurf 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, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "gtk/gtk_gui.h"
+#include "desktop/version.c"
+
+void nsgtk_about_dialog_init(GtkWindow *parent,
+ struct browser_window *bw, const char *version);
Modified: branches/mikeL/netsurf/gtk/gtk_scaffolding.c
URL: http://source.netsurf-browser.org/branches/mikeL/netsurf/gtk/gtk_scaffold...
==============================================================================
--- branches/mikeL/netsurf/gtk/gtk_scaffolding.c (original)
+++ branches/mikeL/netsurf/gtk/gtk_scaffolding.c Sat Jun 7 15:32:15 2008
@@ -36,7 +36,7 @@
#include "gtk/gtk_plotters.h"
#include "gtk/gtk_scaffolding.h"
#include "gtk/dialogs/gtk_options.h"
-#include "gtk/dialogs/gtk_about.c"
+#include "gtk/dialogs/gtk_about.h"
#include "gtk/gtk_completion.h"
#include "gtk/gtk_throbber.h"
#include "gtk/gtk_history.h"
15 years, 3 months
r4298 bursa - /trunk/netsurf/riscos/gui.c
by netsurf@semichrome.net
Author: bursa
Date: Sat Jun 7 14:00:46 2008
New Revision: 4298
URL: http://source.netsurf-browser.org?rev=4298&view=rev
Log:
Save WimpSlot too when NetSurf$CoreDump is set and NetSurf crashes.
Modified:
trunk/netsurf/riscos/gui.c
Modified: trunk/netsurf/riscos/gui.c
URL: http://source.netsurf-browser.org/trunk/netsurf/riscos/gui.c?rev=4298&r1=...
==============================================================================
--- trunk/netsurf/riscos/gui.c (original)
+++ trunk/netsurf/riscos/gui.c Sat Jun 7 14:00:46 2008
@@ -1,6 +1,6 @@
/*
* Copyright 2003 Phil Mellor <monkeyson(a)users.sourceforge.net>
- * Copyright 2004-2007 James Bursa <bursa(a)users.sourceforge.net>
+ * Copyright 2004-2008 James Bursa <bursa(a)users.sourceforge.net>
* Copyright 2003 John M Bell <jmb202(a)ecs.soton.ac.uk>
* Copyright 2005 Richard Wilson <info(a)tinct.net>
* Copyright 2004 Andrew Timmins <atimmins(a)blueyonder.co.uk>
@@ -30,6 +30,7 @@
#include <string.h>
#include <time.h>
#include <features.h>
+#include <unixlib/sigstate.h>
#include <unixlib/local.h>
#include <curl/curl.h>
#include <oslib/font.h>
@@ -150,6 +151,7 @@
/* default filename handling */
int __riscosify_control = __RISCOSIFY_NO_SUFFIX |
__RISCOSIFY_NO_REVERSE_SUFFIX;
+extern int __dynamic_num;
const char * NETSURF_DIR;
@@ -848,19 +850,26 @@
__write_backtrace(sig);
- /* save DA to a file if NetSurf$CoreDump exists */
+ /* save WimpSlot and DA to files if NetSurf$CoreDump exists */
int used;
xos_read_var_val_size("NetSurf$CoreDump", 0, 0, &used, 0, 0);
if (used) {
- extern int __dynamic_num;
+ int curr_slot;
+ xwimp_slot_size(-1, -1, &curr_slot, 0, 0);
+ LOG(("saving WimpSlot, size 0x%x", curr_slot));
+ xosfile_save("$.NetSurf_Slot", 0x8000, 0,
+ (byte *) 0x8000,
+ (byte *) 0x8000 + curr_slot);
+
if (__dynamic_num != -1) {
int size;
byte *base_address;
xosdynamicarea_read(__dynamic_num, &size,
&base_address, 0, 0, 0, 0, 0);
- LOG(("saving DA %i %p %x\n", __dynamic_num,
+ LOG(("saving DA %i, base %p, size 0x%x",
+ __dynamic_num,
base_address, size));
- xosfile_save("$.netsurf_core",
+ xosfile_save("$.NetSurf_DA",
(bits) base_address, 0,
base_address,
base_address + size);
15 years, 3 months
r4297 mmu_man - in /trunk/netsurf/beos: beos_fetch_rsrc.cpp beos_fetch_rsrc.h beos_gui.cpp beos_res.rdef beos_throbber.cpp res/beosdefault.css
by netsurf@semichrome.net
Author: mmu_man
Date: Fri Jun 6 21:48:31 2008
New Revision: 4297
URL: http://source.netsurf-browser.org?rev=4297&view=rev
Log:
Use bundled resources instead of separate files. throbber uses 'data' type also now.
Modified:
trunk/netsurf/beos/beos_fetch_rsrc.cpp
trunk/netsurf/beos/beos_fetch_rsrc.h
trunk/netsurf/beos/beos_gui.cpp
trunk/netsurf/beos/beos_res.rdef
trunk/netsurf/beos/beos_throbber.cpp
trunk/netsurf/beos/res/beosdefault.css
Modified: trunk/netsurf/beos/beos_fetch_rsrc.cpp
URL: http://source.netsurf-browser.org/trunk/netsurf/beos/beos_fetch_rsrc.cpp?...
==============================================================================
--- trunk/netsurf/beos/beos_fetch_rsrc.cpp (original)
+++ trunk/netsurf/beos/beos_fetch_rsrc.cpp Fri Jun 6 21:48:31 2008
@@ -346,6 +346,11 @@
return err;
}
+BResources *get_app_resources()
+{
+ return gAppResources;
+}
+
void fetch_rsrc_register(void)
{
int err;
Modified: trunk/netsurf/beos/beos_fetch_rsrc.h
URL: http://source.netsurf-browser.org/trunk/netsurf/beos/beos_fetch_rsrc.h?re...
==============================================================================
--- trunk/netsurf/beos/beos_fetch_rsrc.h (original)
+++ trunk/netsurf/beos/beos_fetch_rsrc.h Fri Jun 6 21:48:31 2008
@@ -27,4 +27,7 @@
void fetch_rsrc_register(void);
void fetch_rsrc_unregister(void);
+class BResources;
+BResources *get_app_resources();
+
#endif
Modified: trunk/netsurf/beos/beos_gui.cpp
URL: http://source.netsurf-browser.org/trunk/netsurf/beos/beos_gui.cpp?rev=429...
==============================================================================
--- trunk/netsurf/beos/beos_gui.cpp (original)
+++ trunk/netsurf/beos/beos_gui.cpp Fri Jun 6 21:48:31 2008
@@ -341,10 +341,9 @@
*/
{
#define STROF(n) #n
-#define FIND_THROB(n) find_resource(filenames[(n)], \
- "throbber/throbber" STROF(n) ".png", \
- "./beos/res/throbber/throbber" STROF(n) ".png")
- char filenames[9][PATH_MAX];
+#define FIND_THROB(n) filenames[(n)] = \
+ "throbber" STROF(n) ".png";
+ char *filenames[9];
FIND_THROB(0);
FIND_THROB(1);
FIND_THROB(2);
@@ -448,13 +447,13 @@
beos_fetch_filetype_init(buf);
/* set up stylesheet urls */
- find_resource(buf, "beosdefault.css", "./beos/res/beosdefault.css");
- default_stylesheet_url = path_to_url(buf);
+ /*find_resource(buf, "beosdefault.css", "./beos/res/beosdefault.css");*/
+ default_stylesheet_url = strdup("rsrc:/beosdefault.css,text/css");
//default_stylesheet_url = generate_default_css();
LOG(("Using '%s' as Default CSS URL", default_stylesheet_url));
- find_resource(buf, "adblock.css", "./beos/res/adblock.css");
- adblock_stylesheet_url = path_to_url(buf);
+ /*find_resource(buf, "adblock.css", "./beos/res/adblock.css");*/
+ adblock_stylesheet_url = strdup("rsrc:/adblock.css,text/css");
LOG(("Using '%s' as AdBlock CSS URL", adblock_stylesheet_url));
urldb_load(option_url_file);
Modified: trunk/netsurf/beos/beos_res.rdef
URL: http://source.netsurf-browser.org/trunk/netsurf/beos/beos_res.rdef?rev=42...
==============================================================================
--- trunk/netsurf/beos/beos_res.rdef (original)
+++ trunk/netsurf/beos/beos_res.rdef Fri Jun 6 21:48:31 2008
@@ -37,15 +37,15 @@
/* resource(205, "netsurf.xpm") #'data' import "res/netsurf.xpm"; */
/* throbber */
-resource(400, "throbber0.png") #'PNG ' import "res/throbber/throbber0.png";
-resource(401, "throbber1.png") #'PNG ' import "res/throbber/throbber1.png";
-resource(402, "throbber2.png") #'PNG ' import "res/throbber/throbber2.png";
-resource(403, "throbber3.png") #'PNG ' import "res/throbber/throbber3.png";
-resource(404, "throbber4.png") #'PNG ' import "res/throbber/throbber4.png";
-resource(405, "throbber5.png") #'PNG ' import "res/throbber/throbber5.png";
-resource(406, "throbber6.png") #'PNG ' import "res/throbber/throbber6.png";
-resource(407, "throbber7.png") #'PNG ' import "res/throbber/throbber7.png";
-resource(408, "throbber8.png") #'PNG ' import "res/throbber/throbber8.png";
+resource(400, "throbber0.png") #'data' import "res/throbber/throbber0.png";
+resource(401, "throbber1.png") #'data' import "res/throbber/throbber1.png";
+resource(402, "throbber2.png") #'data' import "res/throbber/throbber2.png";
+resource(403, "throbber3.png") #'data' import "res/throbber/throbber3.png";
+resource(404, "throbber4.png") #'data' import "res/throbber/throbber4.png";
+resource(405, "throbber5.png") #'data' import "res/throbber/throbber5.png";
+resource(406, "throbber6.png") #'data' import "res/throbber/throbber6.png";
+resource(407, "throbber7.png") #'data' import "res/throbber/throbber7.png";
+resource(408, "throbber8.png") #'data' import "res/throbber/throbber8.png";
resource(1, "BEOS:APP_FLAGS") (#'APPF') $"01000000";
Modified: trunk/netsurf/beos/beos_throbber.cpp
URL: http://source.netsurf-browser.org/trunk/netsurf/beos/beos_throbber.cpp?re...
==============================================================================
--- trunk/netsurf/beos/beos_throbber.cpp (original)
+++ trunk/netsurf/beos/beos_throbber.cpp Fri Jun 6 21:48:31 2008
@@ -26,8 +26,10 @@
}
#include "beos/beos_throbber.h"
#include "beos/beos_bitmap.h"
+#include "beos/beos_fetch_rsrc.h"
#include <File.h>
+#include <Resources.h>
#include <TranslationUtils.h>
struct nsbeos_throbber *nsbeos_throbber = NULL;
@@ -44,7 +46,6 @@
bool nsbeos_throbber_initialise_from_png(const int frames, ...)
{
va_list filenames;
- status_t err;
struct nsbeos_throbber *throb; /**< structure we generate */
bool errors_when_loading = false; /**< true if a frame failed */
@@ -55,7 +56,13 @@
frames));
return false;
}
-
+
+ BResources *res = get_app_resources();
+ if (res == NULL) {
+ LOG(("Can't find resources for throbber!"));
+ return false;
+ }
+
throb = (struct nsbeos_throbber *)malloc(sizeof(throb));
throb->nframes = frames;
throb->framedata = (BBitmap **)malloc(sizeof(BBitmap *) * throb->nframes);
@@ -64,15 +71,17 @@
for (int i = 0; i < frames; i++) {
const char *fn = va_arg(filenames, const char *);
- BFile file(fn, B_READ_ONLY);
+ const void *data;
+ size_t size;
+ data = res->LoadResource('data', fn, &size);
throb->framedata[i] = NULL;
- err = file.InitCheck();
- if (err < B_OK) {
- LOG(("Error when loading %s: %s", fn, strerror(err)));
+ if (!data) {
+ LOG(("Error when loading resource %s", fn));
errors_when_loading = true;
continue;
}
- throb->framedata[i] = BTranslationUtils::GetBitmap(&file);
+ BMemoryIO mem(data, size);
+ throb->framedata[i] = BTranslationUtils::GetBitmap(&mem);
if (throb->framedata[i] == NULL) {
LOG(("Error when loading %s: GetBitmap() returned NULL", fn));
errors_when_loading = true;
Modified: trunk/netsurf/beos/res/beosdefault.css
URL: http://source.netsurf-browser.org/trunk/netsurf/beos/res/beosdefault.css?...
==============================================================================
--- trunk/netsurf/beos/res/beosdefault.css (original)
+++ trunk/netsurf/beos/res/beosdefault.css Fri Jun 6 21:48:31 2008
@@ -4,7 +4,7 @@
/* Load base stylesheet. */
-@import "default.css";
+@import "rsrc:/default.css,text/css";
/* Apply GTK specific rules. */
15 years, 3 months
r4295 mikeL - in /branches/mikeL/netsurf/gtk: gtk_schedule.h gtk_window.c
by netsurf@semichrome.net
Author: mikeL
Date: Fri Jun 6 21:40:11 2008
New Revision: 4295
URL: http://source.netsurf-browser.org?rev=4295&view=rev
Log:
Fixed bug where modifier keys were being detected incorrectly
Modified:
branches/mikeL/netsurf/gtk/gtk_schedule.h
branches/mikeL/netsurf/gtk/gtk_window.c
Modified: branches/mikeL/netsurf/gtk/gtk_schedule.h
URL: http://source.netsurf-browser.org/branches/mikeL/netsurf/gtk/gtk_schedule...
==============================================================================
--- branches/mikeL/netsurf/gtk/gtk_schedule.h (original)
+++ branches/mikeL/netsurf/gtk/gtk_schedule.h Fri Jun 6 21:40:11 2008
@@ -19,6 +19,6 @@
#ifndef NETSURF_GTK_CALLBACK_H
#define NETSURF_GTK_CALLBACK_H 1
-typedef void (*gtk_callback)(void *p);
+bool gui_copy_to_clipboard(struct selection *s);
#endif /* NETSURF_GTK_CALLBACK_H */
Modified: branches/mikeL/netsurf/gtk/gtk_window.c
URL: http://source.netsurf-browser.org/branches/mikeL/netsurf/gtk/gtk_window.c...
==============================================================================
--- branches/mikeL/netsurf/gtk/gtk_window.c (original)
+++ branches/mikeL/netsurf/gtk/gtk_window.c Fri Jun 6 21:40:11 2008
@@ -368,28 +368,29 @@
browser_window_mouse_click(g->bw, BROWSER_MOUSE_DRAG_1,
event->x / g->bw->scale,
event->y / g->bw->scale);
+ /* Button 1 drag in progress */
g->mouse->state = BROWSER_MOUSE_HOLDING_1;
- /* NOTE: fall though to HOLDING_1 */
- case BROWSER_MOUSE_HOLDING_1:
- /* Button 1 drag in progress */
g->mouse->state |= BROWSER_MOUSE_DRAG_ON;
+
if (shift) g->mouse->state |= BROWSER_MOUSE_MOD_1;
- if (ctrl) g->mouse->state |= BROWSER_MOUSE_MOD_2;
+ if (ctrl) g->mouse->state |= BROWSER_MOUSE_MOD_2;
break;
case BROWSER_MOUSE_PRESS_2:
/* Start button 2 drag */
browser_window_mouse_click(g->bw, BROWSER_MOUSE_DRAG_2,
event->x / g->bw->scale,
event->y / g->bw->scale);
+ /* Button 2 drag in progress */
g->mouse->state |= BROWSER_MOUSE_HOLDING_2;
- /* NOTE: fall though to HOLDING_2 */
- case BROWSER_MOUSE_HOLDING_2:
- /* Button 2 drag in progress */
g->mouse->state |= BROWSER_MOUSE_DRAG_ON;
+
if (shift) g->mouse->state |= BROWSER_MOUSE_MOD_1;
- if (ctrl) g->mouse->state |= BROWSER_MOUSE_MOD_2;
+ if (ctrl) g->mouse->state |= BROWSER_MOUSE_MOD_2;
break;
}
+ /* Handle modifiers being removed */
+ if (!shift) g->mouse->state ^= BROWSER_MOUSE_MOD_1;
+ if (!ctrl) g->mouse->state ^= BROWSER_MOUSE_MOD_2;
browser_window_mouse_track(g->bw, g->mouse->state, event->x / g->bw->scale,
event->y / g->bw->scale);
15 years, 3 months
r4294 mikeL - /branches/mikeL/netsurf/gtk/gtk_window.c
by netsurf@semichrome.net
Author: mikeL
Date: Fri Jun 6 21:21:03 2008
New Revision: 4294
URL: http://source.netsurf-browser.org?rev=4294&view=rev
Log:
Added ability to handle modifiers pressed during a drag event. Mouse movement handling now uses switch statements (Thanks tlsa)
Modified:
branches/mikeL/netsurf/gtk/gtk_window.c
Modified: branches/mikeL/netsurf/gtk/gtk_window.c
URL: http://source.netsurf-browser.org/branches/mikeL/netsurf/gtk/gtk_window.c...
==============================================================================
--- branches/mikeL/netsurf/gtk/gtk_window.c (original)
+++ branches/mikeL/netsurf/gtk/gtk_window.c Fri Jun 6 21:21:03 2008
@@ -359,23 +359,36 @@
GdkEventMotion *event, gpointer data)
{
struct gui_window *g = data;
-
- /* If the mouse moves during a press, it is considered a drag
- * so we emit a "drag click" */
- if (g->mouse->state & BROWSER_MOUSE_PRESS_1){
- browser_window_mouse_click(g->bw,
- /* Replaces PRESS with DRAG keeping any modifiers*/
- g->mouse->state ^ (BROWSER_MOUSE_PRESS_1 | BROWSER_MOUSE_DRAG_1),
- event->x / g->bw->scale, event->y / g->bw->scale);
- /* Replaces PRESS with HOLDING and DRAG_ON keeping any modifiers */
- g->mouse->state ^= BROWSER_MOUSE_PRESS_1 |
- BROWSER_MOUSE_HOLDING_1 | BROWSER_MOUSE_DRAG_ON;
- } else if (g->mouse->state & BROWSER_MOUSE_PRESS_2){
- browser_window_mouse_click(g->bw,
- g->mouse->state ^ (BROWSER_MOUSE_PRESS_1 | BROWSER_MOUSE_DRAG_1),
- event->x / g->bw->scale, event->y / g->bw->scale);
- g->mouse->state ^= BROWSER_MOUSE_PRESS_2 |
- BROWSER_MOUSE_HOLDING_2 | BROWSER_MOUSE_DRAG_ON;
+ bool shift = event->state & GDK_SHIFT_MASK;
+ bool ctrl = event->state & GDK_CONTROL_MASK;
+
+ switch (g->mouse->state) {
+ case BROWSER_MOUSE_PRESS_1:
+ /* Start button 1 drag */
+ browser_window_mouse_click(g->bw, BROWSER_MOUSE_DRAG_1,
+ event->x / g->bw->scale,
+ event->y / g->bw->scale);
+ g->mouse->state = BROWSER_MOUSE_HOLDING_1;
+ /* NOTE: fall though to HOLDING_1 */
+ case BROWSER_MOUSE_HOLDING_1:
+ /* Button 1 drag in progress */
+ g->mouse->state |= BROWSER_MOUSE_DRAG_ON;
+ if (shift) g->mouse->state |= BROWSER_MOUSE_MOD_1;
+ if (ctrl) g->mouse->state |= BROWSER_MOUSE_MOD_2;
+ break;
+ case BROWSER_MOUSE_PRESS_2:
+ /* Start button 2 drag */
+ browser_window_mouse_click(g->bw, BROWSER_MOUSE_DRAG_2,
+ event->x / g->bw->scale,
+ event->y / g->bw->scale);
+ g->mouse->state |= BROWSER_MOUSE_HOLDING_2;
+ /* NOTE: fall though to HOLDING_2 */
+ case BROWSER_MOUSE_HOLDING_2:
+ /* Button 2 drag in progress */
+ g->mouse->state |= BROWSER_MOUSE_DRAG_ON;
+ if (shift) g->mouse->state |= BROWSER_MOUSE_MOD_1;
+ if (ctrl) g->mouse->state |= BROWSER_MOUSE_MOD_2;
+ break;
}
browser_window_mouse_track(g->bw, g->mouse->state, event->x / g->bw->scale,
@@ -415,12 +428,17 @@
int button;
struct gui_window *g = data;
-/* If the mouse state is PRESS then we are waiting for a release to emit
- * a click event, otherwise just reset the state to nothing*/
- if (g->mouse->state & (BROWSER_MOUSE_PRESS_1|BROWSER_MOUSE_PRESS_2))
- browser_window_mouse_click(g->bw, g->mouse->state * 4, event->x / g->bw->scale,
+ /* If the mouse state is PRESS then we are waiting for a release to emit
+ * a click event, otherwise just reset the state to nothing*/
+ if (g->mouse->state & BROWSER_MOUSE_PRESS_1)
+ g->mouse->state = BROWSER_MOUSE_CLICK_1;
+ else if (g->mouse->state & BROWSER_MOUSE_PRESS_2)
+ g->mouse->state = BROWSER_MOUSE_CLICK_2;
+
+ if (g->mouse->state & (BROWSER_MOUSE_CLICK_1|BROWSER_MOUSE_CLICK_2))
+ browser_window_mouse_click(g->bw, g->mouse->state, event->x / g->bw->scale,
event->y / g->bw->scale);
- else if (g->bw->drag_type != DRAGGING_NONE)
+ else
browser_window_mouse_drag_end(g->bw, 0, event->x, event->y);
g->mouse->state = 0;
15 years, 3 months
r4293 mmu_man - in /trunk/netsurf/beos: beos_res.rdef res/netsurf.xpm
by netsurf@semichrome.net
Author: mmu_man
Date: Fri Jun 6 20:53:43 2008
New Revision: 4293
URL: http://source.netsurf-browser.org?rev=4293&view=rev
Log:
- We don't need the XPM icon.
- import res/* in the resource file to bundle them with the binary.
Removed:
trunk/netsurf/beos/res/netsurf.xpm
Modified:
trunk/netsurf/beos/beos_res.rdef
Modified: trunk/netsurf/beos/beos_res.rdef
URL: http://source.netsurf-browser.org/trunk/netsurf/beos/beos_res.rdef?rev=42...
==============================================================================
--- trunk/netsurf/beos/beos_res.rdef (original)
+++ trunk/netsurf/beos/beos_res.rdef Fri Jun 6 20:53:43 2008
@@ -29,10 +29,23 @@
};
-//resource(123, "beosdefault.css") import beos/beosdefault.css;
-//resource(123, "beosdefault.css") #'PNG ' import "beos/res/beosdefault.css";
-//import(123, "beosdefault.css") "beos/beosdefault.css";
-//resource(123, "beos/beosdefault.css") #'PNG ' read("beos/beosdefault.css");
+resource(200, "default.css") #'data' import "res/default.css";
+resource(201, "beosdefault.css") #'data' import "res/beosdefault.css";
+resource(202, "adblock.css") #'data' import "res/adblock.css";
+resource(203, "ca-bundle.txt") #'data' import "res/ca-bundle.txt";
+resource(204, "messages") #'data' import "res/messages";
+/* resource(205, "netsurf.xpm") #'data' import "res/netsurf.xpm"; */
+
+/* throbber */
+resource(400, "throbber0.png") #'PNG ' import "res/throbber/throbber0.png";
+resource(401, "throbber1.png") #'PNG ' import "res/throbber/throbber1.png";
+resource(402, "throbber2.png") #'PNG ' import "res/throbber/throbber2.png";
+resource(403, "throbber3.png") #'PNG ' import "res/throbber/throbber3.png";
+resource(404, "throbber4.png") #'PNG ' import "res/throbber/throbber4.png";
+resource(405, "throbber5.png") #'PNG ' import "res/throbber/throbber5.png";
+resource(406, "throbber6.png") #'PNG ' import "res/throbber/throbber6.png";
+resource(407, "throbber7.png") #'PNG ' import "res/throbber/throbber7.png";
+resource(408, "throbber8.png") #'PNG ' import "res/throbber/throbber8.png";
resource(1, "BEOS:APP_FLAGS") (#'APPF') $"01000000";
Removed: trunk/netsurf/beos/res/netsurf.xpm
URL: http://source.netsurf-browser.org/trunk/netsurf/beos/res/netsurf.xpm?rev=...
==============================================================================
--- trunk/netsurf/beos/res/netsurf.xpm (original)
+++ trunk/netsurf/beos/res/netsurf.xpm (removed)
@@ -1,317 +1,0 @@
-/* XPM */
-static char *netsurf[] = {
-/* columns rows colors chars-per-pixel */
-"132 135 176 2",
-" c black",
-". c #010101",
-"X c #010202",
-"o c #030406",
-"O c #040A0D",
-"+ c #060E14",
-"@ c #08141A",
-"# c #081720",
-"$ c #091B27",
-"% c #0F2430",
-"& c #142E3D",
-"* c #143548",
-"= c #153C53",
-"- c #194662",
-"; c #1E516E",
-": c #1D577A",
-"> c #175B87",
-", c #1A6595",
-"< c #1E6B9C",
-"1 c #26709C",
-"2 c #33789E",
-"3 c #3188BD",
-"4 c #3E89B3",
-"5 c #1F92DD",
-"6 c #0E9CFD",
-"7 c #0E9DFF",
-"8 c #0F9EFF",
-"9 c #1A95E7",
-"0 c #1898ED",
-"q c #1299F4",
-"w c #119BF9",
-"e c #119FFF",
-"r c #14A0FF",
-"t c #15A1FF",
-"y c #17A2FF",
-"u c #18A3FF",
-"i c #1AA3FE",
-"p c #1BA4FE",
-"a c #1CA5FE",
-"s c #1EA5FE",
-"d c #1FA6FE",
-"f c #268AC9",
-"g c #218ED3",
-"h c #20A6FE",
-"j c #21A7FE",
-"k c #23A8FE",
-"l c #24A8FE",
-"z c #25A8FE",
-"x c #26A9FE",
-"c c #27AAFE",
-"v c #28AAFE",
-"b c #2AABFF",
-"n c #2BACFF",
-"m c #2CADFF",
-"M c #2EAEFF",
-"N c #2FAEFF",
-"B c #31AFFE",
-"V c #31AFFF",
-"C c #32B0FF",
-"Z c #34B1FF",
-"A c #35B2FF",
-"S c #36B2FF",
-"D c #37B2FF",
-"F c #3AB2FB",
-"G c #38B3FE",
-"H c #39B3FE",
-"J c #3AB3FC",
-"K c #3BB4FE",
-"L c #3CB5FE",
-"P c #3DB5FE",
-"I c #3EB6FF",
-"U c #3FB7FF",
-"Y c #4182A4",
-"T c #4789AB",
-"R c #43B7FB",
-"E c #40B7FF",
-"W c #44B6FA",
-"Q c #42B8FE",
-"! c #44B9FE",
-"~ c #46BAFF",
-"^ c #47BAFF",
-"/ c #48BBFF",
-"( c #49BCFF",
-") c #4ABCFF",
-"_ c #4CBDFF",
-"` c #4EBEFF",
-"' c #50BFFE",
-"] c #50BFFF",
-"[ c #51BFFF",
-"{ c #5ABFF7",
-"} c #52C0FE",
-"| c #54C1FE",
-" . c #56C2FF",
-".. c #57C3FF",
-"X. c #58C3FE",
-"o. c #58C3FF",
-"O. c #5CC1F8",
-"+. c #5DC4FD",
-"@. c #5CC5FE",
-"#. c #5DC5FE",
-"$. c #5DC6FF",
-"%. c #5EC6FF",
-"&. c #5FC7FF",
-"*. c #61C8FF",
-"=. c #62C8FF",
-"-. c #63C9FF",
-";. c #65CAFF",
-":. c #66CBFF",
-">. c #67CBFF",
-",. c #68CCFF",
-"<. c #69CDFF",
-"1. c #6BCDFF",
-"2. c #6CCEFF",
-"3. c #6DCEFF",
-"4. c #6FCFFF",
-"5. c #70D0FF",
-"6. c #72D1FF",
-"7. c #73D1FF",
-"8. c #74D2FF",
-"9. c #76D3FF",
-"0. c #77D3FF",
-"q. c #78D4FF",
-"w. c #79D5FF",
-"e. c #7AD5FF",
-"r. c #7CD6FF",
-"t. c #7ED7FF",
-"y. c #7FD8FF",
-"u. c #81CBE7",
-"i. c #82CBE7",
-"p. c #83CEEB",
-"a. c #81D4F7",
-"s. c #84D3F4",
-"d. c #80D7FE",
-"f. c #80D8FF",
-"g. c #84DAFF",
-"h. c #85DAFF",
-"j. c #86DBFF",
-"k. c #87DBFF",
-"l. c #89DCFF",
-"z. c #8ADDFF",
-"x. c #8BDEFF",
-"c. c #8DDEFF",
-"v. c #8EDEFF",
-"b. c #8FDFFF",
-"n. c #91E0FF",
-"m. c #92E1FF",
-"M. c #93E2FF",
-"N. c #95E3FF",
-"B. c #97E3FF",
-"V. c #98E4FF",
-"C. c #99E4FE",
-"Z. c #9BE5FE",
-"A. c #9CE6FE",
-"S. c #9EE6FF",
-"D. c #9FE7FF",
-"F. c #A1E8FF",
-"G. c #A3E9FF",
-"H. c #A5EBFF",
-"J. c #A6ECFF",
-"K. c #A8EDFF",
-"L. c #ABEEFF",
-"P. c #ADEFFF",
-"I. c #B0F0FF",
-"U. c #B3F1FF",
-"Y. c #B7F2FF",
-"T. c #C7F3FF",
-"R. c #DCF6FF",
-"E. c #EAF8FF",
-"W. c #F1FAFF",
-"Q. c #F8FCFF",
-"!. c #FCFEFF",
-"~. c #FDFEFF",
-"^. c #FEFEFF",
-"/. c #FEFFFF",
-"(. c gray100",
-"). c None",
-/* pixels */
-").).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).",
-").).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).",
-").).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).). ).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).",
-").).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).). ).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).",
-").).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).). ).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).",
-").).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).). ).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).",
-").).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).). % ).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).",
-").).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).). O & ; 2 T O.O.a.r.e.e.e.q.9.9.4.{ { T 2 ; % O ).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).",
-").).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).). @ - T r.l.k.k.k.y.t.t.t.t.r.e.e.q.9.8.8.8.8.4.4.1.1.1.{ T ; # ).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).",
-").).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).). = Y p.v.x.x.s.v.k.k.k.a.g.t.y.t.r.e.e.q.9.8.8.8.2.4.4.4.4.,.,.;.;.;.O.4 = o ).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).",
-").).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).). % 2 u.m.m.v.v.c.x.x.l.k.k.k.k.g.t.y.t.t.r.e.e.q.9.8.8.8.8.4.4.1.1.,.,.;.;.-.-.-.{ 2 & ).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).",
-").).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).). O ; u.B.m.m.m.m.m.v.c.c.x.x.x.k.k.k.g.g.g.t.t.r.e.e.q.9.9.8.8.2.2.8.2.1.1.,.,.;.;.-.*.*.$.$.! : + ).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).",
-").).).).).).).).).).).).).).).).).).).).).).).).).).).).).).). O : p.C.C.B.B.B.m.m.m.m.c.c.c.c.x.k.l.k.k.g.y.g.t.t.r.e.e.q.q.8.9.2.2.4.2.1.1.1.,.;.;.-.-.-.&.$.$.+.O.2 @ ).).).).).).).).).).).).).).).).).).).).).).).).).).).).).",
-").).).).).).).).).).).).).).).).).).).).).).).).).).).).). + 2 s.A.A.C.C.C.B.m.N.m.M.m.m.m.c.l.x.x.l.k.k.g.g.t.f.t.r.r.e.q.9.9.8.8.8.8.8.1.2.,.,.,.;.-.-.&.&.&.$.+... .| 2 @ ).).).).).).).).).).).).).).).).).).).).).).).).).).).).",
-").).).).).).).).).).).).).).).).).).).).).).).).).).).). = p.F.F.A.A.A.C.C.C.C.N.N.m.m.m.m.v.v.c.x.l.l.g.k.g.t.f.f.t.r.e.e.q.9.8.8.8.2.8.2.2.1.,.,.,.;.-.&.-.&.+.+....... .` 1 O ).).).).).).).).).).).).).).).).).).).).).).).).).).).",
-").).).).).).).).).).).).).).).).).).).).).).).).).).). ; A.F.F.A.A.A.A.C.C.C.N.N.N.m.m.m.v.c.x.x.l.k.k.g.g.f.f.t.r.e.e.q.9.q.8.8.8.2.2.2.1.,.,.;.;.-.-.&.&.$.+.$..... .| | W = ).).).).).).).).).).).).).).).).).).).).).).).).).",
-").).).).).).).).).).).).).).).).).).).).).).).).). o T F.F.F.A.F.S.A.A.C.C.C.N.M.M.m.m.c.c.c.x.l.k.k.g.g.f.f.f.t.t.e.e.q.9.9.8.5.5.4.1.1.1.;.,.-.-.-.-.$.*.$.+.o. . . .| | ` T # ).).).).).).).).).).).).).).).).).).).).).).).).",
-").).).).).).).).).).).).).).).).).).).).).).).). * & p.F.F.F.A.F.F.A.A.A.C.C.N.N.M.M.m.m.c.c.x.x.k.k.k.g.h.f.f.t.r.r.e.q.9.9.8.5.5.4.4.4.1.1.;.,.;.-.-.&.$.$.+. . . . .| | ` ` W ; ).).).).).).).).).).).).).).).).).).).).).).).",
-").).).).).).).).).).).).).).).).).).).).).).). 2 A. % J.J.F.J.F.F.S.F.F.A.A.C.C.C.N.M.m.m.c.c.c.x.x.l.k.k.f.t.t.t.t.r.e.q.0.9.9.8.5.4.4.1.1.,.,.;.-.-.&.-.$.$.$.o.+... .| | ` ) ) ) 2 O ).).).).).).).).).).).).).).).).).).).).).).",
-").).).).).).).).).).).).).).).).).).).).).). @ u.J.T ; J.J.J.F.J.F.F.F.A.A.D.C.N.C.N.M.M.m.m.m.x.x.x.l.k.k.k.k.f.f.t.r.r.q.0.9.5.5.5.5.4.4.1.,.,.;.;.-.-.&.$.$.+.o. ... .| | ` | [ ) ( 5 $ ).).).).).).).).).).).).).).).).).).).).).",
-").).).).).).).).).).).).).).).).).).).).). & p.K.K.: T J.J.J.J.F.G.F.F.F.F.A.A.N.C.C.N.M.m.m.c.c.c.x.x.l.k.g.g.t.t.t.r.r.q.0.0.9.8.5.5.4.3.1.,.,.,.;.-.-.&.h.k.+.$.o. . . .| ` ` ` | ( ( W - ).).).).).).).).).).).).).).).).).).).).",
-").).).).).).).).).).).).).).).).).).).). = F.K.P.K.& p.K.J.J.J.J.F.F.F.A.F.D.A.A.C.C.N.M.M.m.m.c.c.x.l.l.k.k.g.g.g.t.r.r.r.e.0.9.9.5.5.4.4.1.1.,.;.,.-.-.,.Q./.8.o.o.o. .[ ` | | ` ) ) ( ( ( ; ).).).).).).).).).).).).).).).).).).).",
-").).).).).).).).).).).).).).).).).).). ; J.K.P.P.F. % K.P.K.J.J.J.G.G.G.F.A.D.A.A.C.C.N.N.M.m.m.m.v.x.x.l.k.g.g.t.y.t.t.r.q.0.0.9.7.9.5.4.4.2.1.,.,.;.;.-.F././.T.$.o.o. . .| ) ` ) ) ) ( ( ! ! , ).).).).).).).).).).).).).).).).).).",
-").).).).).).).).).).).).).).).).).). : K.K.P.P.P.u. ; P.K.P.K.K.J.J.J.G.F.F.D.D.D.C.C.N.N.M.m.m.c.v.c.x.l.k.k.g.k.y.t.r.r.r.0.0.9.9.5.5.4.4.2.1.,.;.,.;.,.W./././.l.o. . . . .| | ` ) ) ( ( ^ ! Q 1 ).).).).).).).).).).).).).).).).).",
-").).).).).).).).).).).).).).).).). Y K.K.P.P.P.I.Y T P.P.P.K.K.J.J.J.F.G.F.D.D.A.A.N.N.N.N.M.m.m.c.c.c.x.l.k.g.g.y.t.t.t.r.w.q.q.8.7.5.5.4.2.1.,.,.;.;.F././././.E.+. . . .| | ) ` ) ) ) ( / ! ! W 2 ).).).).).).).).).).).).).).).).",
-").).).).).).).).).).).).).).).). 2 K.P.P.P.P.P.I.P.u.T ; % i.I.I.P.P.P.K.J.J.J.G.F.D.D.D.A.C.C.N.N.m.m.m.c.c.x.l.l.g.k.g.y.t.t.r.r.w.q.8.8.7.5.5.5.2.1.,.,.;.;.E./././././.P. . . .| | | ) ) ` ( 1.K.0.! E Q 1 ).).).).).).).).).).).).).).).",
-").).).).).).).).).).).).).).).). ; J.K.P.P.P.I.I.U.U.U.U.U.U.U.I.I.P.P.P.K.J.J.J.G.G.D.D.D.A.D.C.C.N.N.m.N.c.c.x.l.l.g.k.g.y.g.t.r.r.r.q.q.8.7.5.5.5.2.2.,.,.;.C./././././././.4.o.o.| | ) | $.C.R././.U.! ! U L > ).).).).).).).).).).).).).).",
-").).).).).).).).).).).).).).). * F.J.K.K.P.I.I.U.U.U.U.U.U.U.U.U.I.I.P.K.K.J.J.J.G.G.D.D.D.D.C.N.C.N.m.m.m.c.c.x.x.l.k.k.k.y.t.t.r.r.q.q.8.8.9.5.5.5.2.2.,.,.;.E./././././././.T.o.[ | .v.T./.!././.!.k.! E Q L L - ).).).).).).).).).).).).).).",
-").).).).).).).).).).).).).). & C.J.K.K.P.P.I.I.U.U.U.Y.Y.Y.U.U.U.I.I.P.P.P.K.J.G.J.F.D.D.D.A.C.C.N.N.M.m.m.m.c.x.l.l.k.k.g.y.y.y.r.r.r.M.R.U.C.9.5.5.2.2.1.,.v.!././././././././.k.d.T././././././././.+.! ! E E L G * ).).).).).).).).).).).).).",
-").).).).).).).).).).).).). + p.J.J.K.P.P.P.I.I.U.U.Y.Y.Y.Y.Y.U.U.U.I.P.P.K.K.J.J.J.F.F.D.D.A.D.N.C.N.M.m.m.c.c.x.x.l.z.g.g.y.g.y.r.r.r.L./.!././.R.U.m.2.1.>.R./././././././././././././././././././.W.! ! E E E L L F $ ).).).).).).).).).).).).",
-").).).).).).).).).).).).). T G.J.J.K.K.P.P.I.I.U.U.Y.Y.Y.Y.Y.U.U.I.I.P.P.P.K.J.J.J.G.F.D.D.A.D.C.C.N.M.m.M.c.c.x.x.l.k.k.g.y.t.y.t.r.q.r.!./././././././.R.T././././././././././././././././././././.Y.! ! ! E L L L K g o ).).).).).).).).).).).).",
-").).).).).).).).).).).). ; J.G.J.J.K.K.P.P.I.I.U.U.U.Y.Y.Y.U.U.U.I.I.P.P.P.K.J.G.J.G.F.D.D.D.C.N.C.N.M.m.M.c.c.x.l.l.k.g.g.y.t.y.r.r.r.q.T.!././././././././.!././././././././././././././././././.Q.v.! ! E E E L L K G , ).).).).).).).).).).).",
-").).).).).).).).).).). & A.J.F.J.J.J.J.L.P.P.I.U.U.U.U.U.U.U.U.U.I.I.P.P.P.K.J.J.F.F.F.D.D.A.A.N.C.N.M.m.m.c.c.x.l.l.k.k.h.f.f.f.r.r.r.0.A.^././././././././././././././././././././././././././././.*.! ! E E E L L L G D * ).).).).).).).).).).",
-").).).).).).).).).).). O u.A.F.F.J.J.J.K.K.P.P.I.I.U.U.U.U.U.U.U.I.I.P.P.K.K.J.J.J.F.J.D.D.D.A.A.C.N.N.M.m.m.m.c.x.x.l.k.k.f.f.f.r.r.r.0.0.0.Q./././././././././././././././././././././././././././.W.! ! ! E E L L L P G D B @ ).).).).).).).).).).",
-").).).).).).).).).). Y F.D.F.J.J.J.J.K.L.P.P.P.I.I.I.U.U.U.U.I.I.I.P.P.K.K.J.J.J.G.F.D.D.D.A.C.C.C.N.m.m.m.c.c.x.l.l.k.k.h.f.f.r.r.r.e.0.9.T.^././././././././././././././././././././././././././.T./ ! ! ! E E L L G G D D 1 ).).).).).).).).).",
-").).).).).).).).).). $ N.D.D.F.F.G.J.J.K.K.L.L.P.P.I.I.I.I.I.I.I.I.P.P.P.K.J.J.J.G.G.F.D.D.A.D.C.N.N.M.N.m.m.c.c.x.x.l.k.f.h.f.f.f.r.e.e.e.9.n.^./././././././././././././././././././././././././.Q.K.! ! ! E E L L L G D D B V & ).).).).).).).).).",
-").).).).).).).).). T A.F.D.D.F.F.J.J.J.J.K.L.L.T : T i.J.I.I.P.P.P.K.K.K.J.J.G.G.G.F.D.D.A.C.C.N.N.M.m.m.m.v.v.l.x.k.k.g.g.t.f.f.r.e.e.e.9.9.W./././././././././././././././././././././././././.^.^.R.g.W E E P P P G G D D V g ).).).).).).).).",
-").).).).).).).).). ; C.A.A.D.D.F.F.F.J.J.J.K.K.L.& K.P.P.P.P.K.K.J.J.J.F.G.F.A.D.D.A.C.C.C.N.M.m.m.c.c.x.x.k.k.k.g.f.f.f.r.r.e.0.0.9.8.Y./././././././././././././././././././././././././././././.E.v.W P P G G G D V V N - ).).).).).).).).",
-").).).).).).).). o u.C.C.A.D.D.F.F.F.J.G.J.J.J.K.+ % P.K.K.P.K.K.K.J.J.G.F.F.F.F.D.A.D.C.C.N.M.M.m.m.m.l.x.x.l.k.k.g.f.f.f.r.r.e.9.9.9.8.h./././././././././././././././././././././././././././././././.W.n.^ P G G D D V V b + ).).).).).).).",
-").).).).).).).). ; B.C.C.A.A.D.D.D.F.F.G.J.G.K.A. = K.K.K.K.J.J.K.G.J.G.G.F.F.A.A.A.C.C.N.N.M.m.m.c.v.v.x.l.l.k.k.k.f.f.r.r.r.e.0.9.8.8.B.^./././././././././././././././././././././././././././././././.!.Q.F./ G D V V V N : ).).).).).).).",
-").).).).).).). p.B.N.C.C.D.A.D.D.F.F.G.G.G.J.r. ; J.J.J.J.J.J.J.F.G.G.F.F.S.F.A.C.C.C.N.N.M.m.N.c.x.x.z.z.z.g.g.g.g.t.t.r.r.q.0.0.h.R./././././././././././././././././././././././././././././././././././.Q./.2.A C C V N 0 O ).).).).).).",
-").).).).).).). ; N.N.N.N.C.C.D.D.D.D.F.F.G.G.K.i. 2 J.J.G.J.J.J.G.G.F.F.F.A.A.A.A.C.C.N.N.N.M.m.m.c.c.x.z.z.g.k.g.t.y.y.t.r.r.q.0.Y./././././././././././././././././././././././././././././././././././././.Q.E.&.A C C N N m ; ).).).).).).",
-").).).).).). r.m.B.B.N.C.C.A.A.D.D.D.F.F.G.G.Y X Y J.G.J.J.G.G.G.F.F.S.F.S.A.A.C.C.C.N.M.M.m.M.c.c.x.x.z.k.k.g.g.g.t.t.r.r.q.D.W././././././././././././././././././././././././././././././././././././.^./.G.U A A C C V N m 9 o ).).).).).",
-").).).).).). = n.m.m.m.N.C.C.C.A.A.D.D.A.F.G.G.Y X T G.G.G.F.G.F.F.F.A.F.S.A.A.A.C.C.N.N.M.m.m.c.c.c.x.z.z.k.g.g.g.t.t.t.r.k.R././././././././././././././././././././././././././././././././././././././.T.o.G K A C C V V N m N - ).).).).).",
-").).).).).). X X T n.n.n.n.N.N.C.C.C.A.A.A.F.A.F.A.: u.F.F.F.F.F.A.F.A.A.F.A.A.C.C.N.C.N.M.M.m.m.c.c.x.x.x.k.k.k.g.f.f.t.t.N./.!./././././././././././././././././././././././././././././././././././.Q.W.r.P G G A A D V V V N m b f ).).).).).",
-").).).).). X @ s.n.n.C.n.m.B.N.N.C.C.A.A.Z.F.S.F.; u.F.F.F.F.A.F.F.F.A.A.A.C.C.C.C.N.m.M.m.M.c.c.c.x.l.l.k.k.g.g.f.f.t.r.m.W././././././././././././././././././././././././././././././././././.^.^.G./ L P P G A A D V V N m m b b # ).).).).",
-").).).).). - n.b.M.n.n.m.m.B.m.C.B.C.C.A.A.A.F.= B.A.F.F.A.A.F.A.A.A.C.C.B.C.B.N.M.M.m.m.c.c.c.x.l.l.k.k.g.g.g.f.f.t.r.e.e.J.E././././././././././././././././././././././././././././././././.^.*.E E L L P G A A V V V N m N N b : ).).).).",
-").).).).). e.b.b.s.n.n.m.m.m.B.B.B.C.C.C.C.A.A.* F.F.A.A.A.A.A.A.C.C.B.C.C.m.B.M.M.m.m.c.m.c.x.x.x.l.k.k.g.t.t.f.t.e.e.e.e.9.9.A.R././././././././././././././././././././././././././././././.Q.r.E L L L P G K A A V N N m b b b g ).).).).",
-").).).). % x.l.x.c.c.c.M.m.m.M.M.N.N.C.C.C.C.C.C.D.D.A.A.A.A.A.A.C.A.C.C.C.N.C.N.N.M.M.M.m.m.c.m.l.c.x.x.k.k.k.g.g.g.t.t.t.r.e.e.q.9.8.8.8.m.R./././././././././././././././././././././././././././././.T.Q L L L K K D V V C V N m m b c c % ).).).",
-").).).). 2 l.x.x.x.c.c.c.m.m.m.M.M.N.N.N.C.N.C.N.C.C.C.C.C.C.C.C.C.C.C.C.C.C.N.N.M.m.m.m.m.m.c.v.v.c.l.k.k.k.g.g.y.y.t.t.r.e.e.q.9.9.8.8.4.2.4.l.T././././././././././././././././././././././././././././.) E L J A A D V C V N N m m b c c > ).).).",
-").).).). T k.k.x.x.x.c.c.c.m.m.m.M.M.M.N.N.N.N.C.C.C.C.C.N.C.C.N.C.N.C.N.N.N.M.M.M.m.m.m.c.m.c.c.x.x.l.k.k.k.g.y.g.t.t.r.e.e.e.q.9.8.8.2.8.4.4.1.1.J.!./././././././././././././././././././././././././.!.N.L L L J D A A C V N m m m b c c f ).).).",
-").).).). O a.k.k.l.l.x.x.c.c.c.m.m.m.m.M.N.m.N.N.N.N.N.N.B.B.N.C.N.N.N.N.M.M.M.M.m.m.m.m.c.v.v.l.x.l.l.k.k.g.g.g.y.y.t.t.r.e.e.q.8.8.8.8.8.2.4.1.1.,.T./././././././././././././././././././././././././././.R.L L L A D A C C V N m b b b c c k + ).).",
-").).). * g.k.g.k.l.x.l.x.c.c.c.c.m.m.m.m.m.m.M.M.M.M.M.N.N.N.m.B.M.M.M.M.M.m.m.m.m.c.c.c.x.x.x.x.l.k.k.k.g.g.g.f.t.t.r.r.e.q.9.9.8.8.8.2.4.4.4.1.,.W././././././././././././././././././././././././././././.;.K K A D A V V V N N b m b c c k * ).).",
-").).). 2 k.g.k.k.k.l.l.l.x.x.c.c.m.v.m.m.m.m.m.m.M.M.M.M.M.m.m.m.m.m.m.m.M.m.m.c.m.c.c.c.x.x.x.l.k.k.k.g.k.t.y.t.t.r.r.e.e.q.9.8.8.8.2.8.4.1.1.1.e././././././././././././././././././././././././././././.W.P.K A G D A V V V N m m b c c c k > ).).",
-").).). O.t.g.g.k.k.k.l.l.x.x.x.c.c.v.c.c.m.m.m.m.m.M.M.m.m.m.m.m.m.m.m.m.c.m.c.c.c.c.x.x.l.x.k.k.k.k.g.g.t.f.t.t.t.e.e.e.q.9.9.8.8.4.2.4.4.1.1.;.A.!./././././././././././././././././././.Q././././././././.Q.U K A A A V V V m m m b c c k k g ).).",
-").).). X a.f.t.t.g.g.k.k.k.l.x.l.x.l.v.v.c.c.c.c.m.c.c.M.m.m.m.m.m.c.m.c.c.c.c.c.c.x.x.x.x.l.k.g.k.g.g.g.t.g.t.t.r.r.e.e.q.q.9.8.8.8.4.4.4.1.4.;.1.T././././././././././././././././././././.C.U.W./.W././././.Q.g.K A A V V V N m b b b c c k k k o ).).",
-").).). $ d.f.f.f.f.h.h.k.k.k.k.l.x.z.x.x.x.x.x.c.c.c.c.c.c.c.c.m.c.c.c.c.c.c.x.x.x.x.x.k.l.k.k.k.g.g.g.g.t.y.t.r.e.e.e.q.9.9.8.8.8.8.2.8.1.1.,.,.,.W./././././././././.W.^./././././././.^.T./ ! ! *.C.T./.Q.E.!.T.D A A V V V N b N v v c c k k j $ ).).",
-").). = r.r.f.f.f.f.h.f.k.k.k.k.z.k.z.z.z.x.x.x.x.c.c.c.v.v.v.v.c.c.c.x.x.x.l.x.x.k.k.k.k.k.g.g.k.t.t.y.t.t.r.r.e.q.q.q.9.8.8.8.4.2.8.2.4.1.,.,.9./././././././.E.K.1.8.^./././././././.^.9./ / ! ! ! L Q 8.F.R.R.A A A V V N b N v N v c j k j j * ).",
-").). : r.r.t.t.f.f.f.f.g.g.k.k.k.k.x.k.l.x.x.l.x.x.x.x.x.x.l.x.x.x.x.l.l.x.l.l.z.k.g.k.k.g.g.g.g.t.t.t.r.r.r.r.q.q.9.q.8.8.8.4.2.2.2.2.1.,.,.,.A./././.!.Q.U.w.$. .o. .P./././././././.R./ / ! ! E E E U K K K J D V C C V N b b b v v c j k j d ; ).",
-").). Y e.r.r.t.t.f.f.f.t.g.g.g.k.g.k.k.k.l.l.l.Y ; ; = & s.x.l.l.l.l.l.l.l.k.k.g.k.k.g.g.k.t.t.y.y.t.t.r.r.r.w.q.q.8.8.8.8.8.2.4.8.1.1.,.,.,.;.T././.T.x.&.&.+.+. .o. .+.W././././././.d.! / W ! ! E L U K K A D D C V V V N N b b v c c j k j d , ).",
-").). T e.e.e.e.r.r.t.f.t.g.t.k.g.g.g.k.k.k.k.g.; r.l.l.l.h.k.k.k.k.k.k.k.g.g.g.t.y.y.g.t.t.r.r.r.r.q.q.q.8.8.8.8.4.2.8.4.4.1.,.>.1.;.;.9.A.;.*.&.$.$.$.o.o. . .[ k./././././.E.( / ! ! ! ! L E L L K K A A C C V N N m v v v v j c j d d f ).",
-").). { q.e.e.e.r.r.t.r.t.t.t.g.t.g.g.g.g.g.k.k.; i.h.h.k.k.k.k.k.g.g.g.g.g.g.y.t.g.y.t.t.r.r.w.w.w.q.q.q.8.8.8.4.4.4.4.4.1.1.,.1.>.;.;.*.*.*.*.$.$.+...o. . . . .[ T././././.v./ / ! ! E E E L K K K A A C C V V N m b N v v c z j j d d g ).",
-").). { 9.9.e.e.e.r.r.r.t.t.y.y.y.g.t.t.g.k.g.k.2 T h.h.h.h.f.k.g.g.g.t.t.y.g.t.t.t.t.r.r.r.r.w.q.q.q.8.8.8.8.8.2.4.4.1.1.1.,.,.;.;.;.-.-.*.$.$.+.+.+.o. . . . .[ [ ;./././.Q.) / / ! Q ! L L L U K K A A A C V V m m m v v c c j c j d d 9 ).",
-").). 5.8.9.9.q.e.e.e.r.r.r.t.t.y.y.t.g.t.t.t.t.T Y h.h.f.k.f.f.t.t.y.g.y.y.t.t.t.r.r.r.r.w.q.q.q.8.q.8.8.8.2.2.8.4.4.1.1.,.,.1.;.;.-.-.*.*.*.$.+.+.+.o. . . .[ [ [ [ K.!.!.B./ ! ! ! Q E E E L K A K A A V C V N m m b v c c z j j d d d 0 ).",
-").). 8.8.8.9.8.q.q.q.e.e.r.r.r.r.t.r.f.f.f.f.f.{ ; f.f.f.f.f.f.f.f.t.f.t.t.r.r.r.e.e.e.e.q.q.9.q.8.8.8.8.2.5.5.4.4.1.1.,.,.,.,.-.-.-.-.&.&.$.$.+....... . .| | ) | ) | E.!.[ / / ! Q Q E L L L K A K A A V V V N m b m v c c k k j d d p p ).",
-").). O 8.8.8.8.8.9.9.q.q.e.e.e.e.r.r.r.r.t.t.t.t.u. = f.f.f.t.f.f.t.t.t.t.r.r.r.e.e.e.e.q.q.9.9.8.8.8.8.8.8.8.2.2.1.1.1.,.,.;.;.;.-.-.&.-.&.$.$.$.+. ..... .| | | | ) ) ( ;.-.! ! ! ! Q E L E L L K A A C C V N N m m b b c c c k j d d d i i O ).",
-").). @ 2.4.8.8.8.8.9.9.9.q.q.e.e.e.e.e.r.r.r.r.r.r.O % t.t.t.t.r.r.r.r.r.r.r.e.e.e.e.q.q.9.9.9.8.8.8.8.8.2.2.2.5.2.1.1.,.,.;.,.;.-.-.-.&.&.$.$.$.+...+. . .| ` | ` ` | ) ) ( / / ! ! Q Q E E L L L A K A A C V V N m m m b c c k k j j d p p y + ).",
-").). @ 4.4.4.8.8.8.8.8.8.9.q.q.q.e.e.e.e.e.e.r.r.r.% + r.r.r.r.r.e.r.e.e.e.e.e.q.q.e.9.9.9.8.8.8.8.8.2.8.2.2.8.2.2.1.,.1.;.,.;.-.-.-.&.&.$.$.+.$. ... . . .| | ` ` ) ` ) ) / ( ! ! ! Q E L L L L G K A C C C V V N m b b c c c k k j d d p p i @ ).",
-").). O 4.4.4.2.8.8.8.8.8.8.9.9.9.9.q.q.q.e.e.e.e.e.* r.e.e.e.e.e.e.e.q.q.q.q.9.9.9.9.8.8.9.8.8.8.2.2.8.2.2.2.2.2.,.,.,.;.-.-.-.&.&.&.$.$.+.+..... . . .| | | | ) ) ` ( ( ( ! ! ! W E E E L L P G K A C C V N N m b m b c c k k d d d d p p y O ).",
-").). 4.1.4.8.2.2.8.8.8.8.8.8.8.9.8.9.9.q.q.q.q.e.: Y e.q.e.q.q.e.e.q.q.9.9.9.8.8.8.8.8.8.2.4.2.2.8.2.4.2.2.:.:.,.,.,.;.-.-.-.-.&.&.$.+.+....... . . .| [ ) | [ ) ) ( ( / / ! Q Q E L L L P G G A C C C V N m m b b c c c k k k d d p p y y ).",
-").). O.1.4.4.4.2.8.2.8.8.8.8.8.8.8.8.9.9.9.9.9.9.T O * : Y O.e.9.9.9.9.9.9.9.9.8.8.8.9.8.8.8.4.2.8.2.8.2.2.4.1.:.2.:.:.;.,.-.-.-.-.&.&.&.$.+.+......... .| | | ) | | ) ` ) ( ( ! ! ! Q E L L L P G G G A A C V V N m b m b c c k k k d d d p p p q ).",
-").). { 1.1.1.4.2.8.2.8.2.2.4.8.8.8.8.8.8.8.8.8.9.9.9.9.e.q.q.q.9.9.9.8.8.8.8.8.8.8.8.8.8.8.2.4.4.8.2.2.2.1.1.1.2.:.:.;.-.;.-.-.-.&.&.$.$.$.+...+... ... .| ) [ | ) ) ) ) ( ( ! ! ! ! Q E E P P G G D D C C C V N m m m b c c c k k d d d p p y 9 9 ).",
-").). { ,.,.1.1.2.2.2.2.2.8.2.8.2.8.8.2.9.8.8.8.8.8.8.8.9.9.9.6.9.6.6.9.8.8.8.8.2.8.8.2.4.4.8.2.2.2.2.2.2.,.,.,.,.;.;.;.;.;.;.&.&.&.$.$.$.$...........| | | ` | ) ) ) ) ( ^ ^ ! Q Q Q Q L E L L K A A V V V V V N m b b v c c c j j d d d i p w $ % ).",
-").). T ,.,.,.1.1.2.2.2.4.4.4.8.2.8.2.8.2.8.8.8.8.2.8.8.7.7.6.9.7.7.6.6.8.8.4.4.8.2.2.8.4.4.2.2.2.2.4.1.,.,.,.,.;.;.;.;.-.;.&.&.&.$.$.+.+...........| | ` | ` ` ` ` ( ( ( ( ^ ! ! Q Q L L L L L K A A D V V V V m m m b v c z j j j d d p p y = ).",
-").). Y ,.;.,.,.,.1.1.2.1.1.4.2.4.4.2.8.8.2.2.8.2.2.8.2.7.7.3.3.3.7.3.6.8.2.8.2.4.4.4.2.1.1.4.1.1.1.,.,.,.,.;.;.;.;.&.;.&.&.&.&.&.$.+.+......... .| | | | ` ` ` ) ( ( ( ^ ^ ! ! Q Q Q L L L G G K A V D V V V N N b b b c c j z j j d d p i - ).",
-").). : -.,.;.,.,.,.,.,.1.1.1.1.1.1.4.4.2.8.2.2.8.4.4.4.3.3.3.7.3.3.7.3.2.8.2.2.4.1.1.1.1.1.1.,.,.,.,.,.;.,.;.;.;.;.;.&.-.&.&.$.$.$.+. .......| | | | ` ` | ` ( ` ( ( ( ^ Q Q Q Q U U L L L G G A A A V V V N b b b b c c c c j j d d p p : ).",
-").). = -.;.;.,.,.,.,.,.,.,.,.,.1.1.4.1.2.2.2.2.2.8.2.2.4.4.4.4.7.3.6.3.2.2.2.2.2.1.1.1.,.,.,.,.,.;.,.-.;.;.-.;.;.&.&.&.&.&.$.$.$.+...+... . .| | | ` ` ` ` ` ` ( ( ^ ^ ! ! Q Q Q L U L P P D D D V V V V N m m b b c c z z j j d d d p - ).",
-").).). % -.-.-.;.-.-.,.,.,.,.,.,.,.,.1.1.2.2.2.2.2.2.2.2.2.2.2.1.1.1.3.1.2.1.1.1.1.,.,.,.,.,.,.;.;.,.;.;.-.;.-.&.&.;.&.&.$.$.$.+......... . .| | | ` ` | ` _ _ ( ( ^ ^ ^ ! Q Q Q L U L L P G D D D V V V V N m m m b c c z j c j d d i = ).).",
-").).). o $.&.-.-.-.-.;.;.,.-.,.,.,.,.,.,.,.,.2.:.2.,.:.2.1.1.1.1.,.1.1.,.,.,.,.,.,.,.,.,.,.-.,.,.;.-.-.-.;.&.-.&.&.&.$.$.$.+.+......... . .| | ` ` | ) ` _ _ ( ( ( ^ ^ Q Q Q U U U L K K G G D D V V V V N m m b b c c c z j j d d 0 & O o ).).",
-").).). g -.&.-.-.-.-.-.;.;.-.,.-.,.;.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.;.,.,.-.,.,.;.;.-.-.-.-.-.-.&.&.&.&.$.$.$.$.$....... . . .| | | ` | ) | ) ` ( ( ^ ^ ^ ! Q Q Q U L L K K K G D D B V V V V m m m b b c c k j j d d d - O , ).).",
-").).). 2 $.*.*.*.*.*.;.;.-.-.;.;.;.;.;.,.;.;.,.,.;.,.,.,.,.,.;.;.1.;.;.,.;.;.,.;.;.;.;.;.;.&.;.&.&.&.&.&.&.&.$.$.+.+.$........... .| | | [ [ | ) ) ) ) ) ) / / / ! ! E Q U U U K K K A A A C C V V N N N n N v c c c k c j d d p 0 $ + g , ).).",
-").).). * $.$.$.$.*.*.*.-.&.-.-.-.-.;.;.;.;.;.;.;.;.;.;.,.;.T : # 2 ;.;.;.;.;.;.-.-.-.-.&.;.&.;.&.;.&.&.&.&.$.+.+.+.| ........| .| | | | ) ) [ [ ) ( ( ) ( ! / ! ! E ! U U K K K K K A A A C C V N N m v n v v c c j k j d d p p i g O # 5 e = ).).",
-").).). + $.$.$.$.$.$.*.&.-.-.&.&.;.-.;.;.;.;.&.;.;.;.;.O.O $ -.-.-.-.-.-.-.-.-.&.&.;.&.&.&.&.&.$.$.$.+.$...+...........| | ` ` ` | | ) [ ) ) ) ( ( / ! ! ! Q ! E U L L L K A K A A V C V V N N b N v v v c j k j j d d p i y y < * 0 y e O ).).",
-").).).). T $.$.$.$.$.$.&.&.&.&.&.-.&.&.&.&.&.;.&.;.;.;.-.$ T -.-.-.-.&.&.-.&.-.&.&.&.$.$.$.$.$.+.+........... ...| | | | | ` | ) | ) ) ) ) ( ( / ! ! ! Q Q E L U L L K A K A A A C V V N m b N N v c c c j k j d d d i i y y y y e 8 g ).).).",
-").).).). > o.$.$.+.$.$.$.$.$.$.&.&.&.&.&.;.&.&.;.&.&.&.-.2 - -.&.-.&.&.&.&.&.$.$.$.$.$.$.+.+.+.| ............ .| | ) | ` | ` ) [ ) ) ) ( / ( ! ! ! ! Q Q Q L L L L K K K A A C V C V V N b b b v v c c k k j j d p p i y y y y y e e > ).).).",
-").).).). & o.o.o.o.$.+.+.$.$.$.$.$.$.&.$.&.$.$.&.&.&.&.$.{ o O.&.&.&.$.$.$.$.$.$.+.$.+.+.............| ....| | | | | | | ) | ) ) ) ) ) / ( ! ! ! Q Q Q E L E L L K A J A A A C C V N N b N b b v c z > 5 j d d p d p y y y y e e e 8 & ).).).",
-").).).).). W .o.o. .o...+.$.+.+.+.+.$.$.$.$.$.$.$.&.$.$.$.= 2 &.$.$.$.$.+.$.+.+.$.+.............| ....| | | | ) | | ` ) | ( ) ) ) / ( / ! ! ! Q Q Q L L L L L K K K A A C C C V V N m N b v c c , @ = j d d d i i i y y e y e e 5 ).).).",
-").).).).). : . . .o. ...........$.+.+.$.$.+.$.$.$.+.$.$.$.4 % $.+.+.+.+.$................. . .....| | ` | ` ` | ) ) | ) ` ) ( ( / / ! / ! ! Q Q Q Q L E L L L K A A A A C C V V N m m v v c > + g d d i i i y y y e e e 8 > ).).).).",
-").).).).). # | . . . . . .....+. ......... .$.+.$.+.$.+.+.+.@ 4 ....+...............| ...... .| | | | ` } } ` ) | ) ) ) ) ) / / / / ! ! ! Q Q Q L Q L K K K A K D V C C C V V N m m m 5 ; + * d p i y i i y y e e 8 8 $ ).).).).",
-").).).).).). 4 .| | . . . . .........+. .+............... .: * ..............| ......| | | | | | ` ` } ` ` _ ) ) ) ) ( ( ( / / ! ! ! Q Q Q E L L L L K K A K D D A V C V V N m m 3 = $ 0 p i i y e e e e e 8 g ).).).).).",
-").).).).).). - | | | | | | . . . . . .| .......... . ..... .W o 4 .. . . . . ...| | | | | ` ` ` ` ` } ` ` _ _ ) ) ) ) / / ( ! ! ! ! E W E E L L L L L L K A D A A V C N V N m m b % @ , i p i y y i y e e 8 8 8 - ).).).).).",
-").).).).).). W | ) [ [ | | | | | | . . . . . . . .| ... . .; O : R . . .| | | | | ` | ` | ` | | ` ` ` _ _ _ _ ) ( ( ( / / ! ! ! ! E ! E L E E L L L G A D D D A C C V N N m m b m , $ < d d p i y y y e i e e 8 7 9 O ).).).).).",
-").).).).).).). + 4 ) | | [ [ | | | | | | | | | | | | | | | | | W + : W | .| | | | | | | | ` | | ` ` _ ` ` _ _ _ ( _ ( ( ( ( ! / ! ! ! E ! E E L L L L L L G G G D D V V V V V N m m m b b 0 & < d d d p i y y y y e y e e 8 7 : ).).).).).).",
-").).).).).).). % 2 ( [ ) | ) | ) | | ` | | | | [ | | ` | | .) | | | | ) | ) | | ) ` ` ` ` ` ` ` _ _ _ _ _ _ _ ^ ^ ( / ! ! ! ! Q Q E E E E E L L G P G G G D B 1 3 C V V N m m b m b c c * o - g k d d d p p y y y y e e e 8 8 8 q O ).).).).).).",
-").).).).).).).). + ; 4 | | ) | ` ` ` ) | ) | [ | ) | ` | | [ | ) ) | | | ) | ) | ` ` ` _ _ _ _ _ ( _ ^ _ ^ ^ ^ ^ ! ! ! ! Q Q Q Q E E L L L L P G G G 3 : % * V V N m m m b b b c c 5 0 k k d d d p p i y y y y e e e 8 8 8 > ).).).).).).).",
-").).).).).).).). $ : W ` ` ` | ` ` | | ) ` | ` | ) | ) [ | | ) ) | ) | ) ) _ _ _ _ _ _ _ ( ( ( ^ ^ ^ ^ ^ ! ! ! ! Q Q E E L E L L L P 5 1 ; & o + N N m m m b b c c c k k k k d d d p p i i y i y e e e 8 8 8 w + ).).).).).).).",
-").).).).).).).).). o W ) ) [ ) [ [ ) ) | ) [ ) | [ ) | | ) | [ ) ) ) ) [ ) ) ) ( ( ) ( / / ^ ( ^ ^ ^ ! ^ Q Q Q Q Q Q L L U L K U K , f b N v n v c c c k k k k d d d d i i i y y y e e e e e 8 8 : ).).).).).).).",
-").).).).).).).).). * ( ) ) [ ) ) ) ) [ ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ( ( ) ) ) ( / / / / / ^ ^ ^ Q ! ! Q Q Q G U L L U L L L K K A f > N v N v c c c k k k k d d d p i i y y y y y e e e 8 7 8 5 o ).).).).).).).).",
-").).).).).).).).).). O 1 ( ( ( ( ) ) ) ) ) ) W $ % - ; 1 1 2 f f f W ( ( / / ( / / / ! / 5 f 1 1 > - - % % # : L Q L L K K K K K K V X # - < v b v n v v z z k k d d d d p p i y y y e y e e e 8 7 7 8 * ).).).).).).).).",
-").).).).).).).).).). > : % F / / / / / / / ( ) ) g P / / / ( / / ! / ! ! - - L L L L K J K A A A A % X # = < 5 N N b N b v c c c c j k k d d d p p i i y y i y e e e 8 7 7 7 < ).).).).).).).).).",
-").).).).).).).).).).). O G ! F ! / ! / ! / / ( ( ( ( 3 W / / ! ! ! ! ! ! ! ! ; % L L L K A A A D V A C < > 3 v V N b b N b b v v c c c z j z k d d d p p i y y y e e e e 8 8 7 7 8 q # ).).).).).).).).).).",
-").).).).).).).).).).). & ! ! ! ! ! ! ! ! / ! / ! ! , W ! 2 # 3 ! ! Q Q ! E ; + L G A K K D A D A V C V V V N N b N N b b b v c c c j z j j d d d p p i y y i y e y e e 8 7 7 7 8 - ).).).).).).).).).).",
-").).).).).).).).).).).). : ! Q Q Q ! ! ! ! ! ! ! ! 2 % @ g & @ G ! Q E E E ; % % - F G A A A A A C V V V V V N m N N b N v v c c c j j j j j d d d p p p y y y y e e e e 8 7 7 7 7 , ).).).).).).).).).).).",
-").).).).).).).).).).).).). 3 E Q Q Q Q ! Q Q Q Q Q ! Q Q Q G f 2 1 1 : - - O = E Q L L E 2 : 1 1 f f 9 L J A G G D D A A A C V V V V V N N m m b b b v v c c z z j c j j d j d p p p y y y y e y e e 8 8 7 7 7 g O ).).).).).).).).).).).",
-").).).).).).).).).).).).). + F E L E L Q E E E E ! Q Q Q Q Q Q Q Q Q U Q U 1 1 L L L L L L L K K K K A K K D D A D D V V V V V V N N m m m b m b b b c c c c j j j j d d p p p i y y y e e i e e e 7 7 7 7 w $ ).).).).).).).).).).).).",
-").).).).).).).).).).).).).). & F E E E L L E E L E L U L L Q L L L L L L U U * + G L L L L L K K K D K A A A V D A V V V V V V N N b m m m b b b c c c c k k j j j j j p d i p y y y y y y e e e 7 7 7 7 7 7 - ).).).).).).).).).).).).).",
-").).).).).).).).).).).).).).). * G L L L E L E L L E L U U L Q L L Q U L L L J + * L L K K A A K D D A A A C D V V V V V V V N b N b b m b b b c c c c k k k d j d d p p p i y y y y y e e e e 8 7 7 8 8 8 > ).).).).).).).).).).).).).).",
-").).).).).).).).).).).).).).).). - L L L L L L L L L L L L K L L L L L L K U K 1 < A K A K A A V D A A C C V V V V V N N N N b b N b b b b c c c k k k k d d d d d d p i i y y y y e y e e 8 7 7 7 8 8 , ).).).).).).).).).).).).).).",
-").).).).).).).).).).).).).).).). : K K K K L G L P K K K K K K K L L K K K K K = o g D A A A D A A V V V C V V N N N m m m N b N v v v c c c c k k k d k d d d p p i i y i y y y e y e 8 8 7 7 7 7 7 < ).).).).).).).).).).).).).).).",
-").).).).).).).).).).).).).).).).). , G G G G G G G K K K D K A K A K D A D A K N @ $ V V D V V V V A V V V V N N m m m b m v N v v v v z c j k k k k d d d d d p p y i y i y e e y e e 8 7 7 7 8 8 f o ).).).).).).).).).).).).).).).).",
-").).).).).).).).).).).).).).).).).). : G D D D G D A A K A D D A K A K D D A A A 3 > D V V V V V V V V N N N m N m m b m b v v v v c c c j j c j j d d d d p p i y y y i e e e e e 8 8 7 7 7 7 7 < o ).).).).).).).).).).).).).).).).).",
-").).).).).).).).).).).).).).).).).).). - V D V D D A A A A V D A V D V D V A C A C : + 3 V V V V V V V V N N N b m m b m b b b c v c c z c j j j j j d d d d p i p p y y y y i e y 8 e e 8 8 7 7 7 7 , ).).).).).).).).).).).).).).).).).).",
-").).).).).).).).).).).).).).).).).).).). = B D V D A C A A A C A V C C C C C C C C V ; 5 N V N V V N N N b b N N v m b m b v c c c c z c z j j j j d d d d d i p p y y y y i y e e e 8 8 7 7 7 8 8 8 > ).).).).).).).).).).).).).).).).).).).",
-").).).).).).).).).).).).).).).).).).).).). & N V V C V V C C V C V C C C V V V V V V V V N N N N N m N b N b b b N b b b c c c c c z j j j c j j d d d d i p p y p y y y y e e e e e 8 7 7 7 7 7 8 - ).).).).).).).).).).).).).).).).).).).).",
-").).).).).).).).).).).).).).).).).).).).).). + 3 V V V V V V V V V V V V V N V N N N N N m b N N b m b b b N b v v c c c c c c k k j c j j j j d d d p p i i y y y y y e y e e e 8 8 8 7 7 7 7 9 % ).).).).).).).).).).).).).).).).).).).).).",
-").).).).).).).).).).).).).).).).).).).).).).). > N N N N V N N N N N N N N m m m m m m m m b b b m b b b b c c c c k c c k k k k j j j j d d d p p p i i i y y y y e y e e e 8 8 7 7 7 7 7 < + ).).).).).).).).).).).).).).).).).).).).).).",
-").).).).).).).).).).).).).).).).).).).).).).).). * 0 N m b N N b m m m m m m N m m b m b b N v b b b c c c c c c c k k k k k d k d d d d p j p p i y y y y i e i e y e e e 8 7 7 7 7 7 7 : ).).).).).).).).).).).).).).).).).).).).).).).",
-").).).).).).).).).).).).).).).).).).).).).).).).). O , m b b b N b m m b m b b b b m b b v v v v c c c c c c j k k k k k k d d d d d d d p p p i i y y y e i e e e 8 e 8 8 7 7 7 7 7 f $ ).).).).).).).).).).).).).).).).).).).).).).).).",
-").).).).).).).).).).).).).).).).).).).).).).).).).).). % g b b b m b m b b b b b b c c c c c c c c c c k g k k k k k d k d d d d p d i p i i i i y y y i e y e e e 8 8 7 7 7 7 7 q - ).).).).).).).).).).).).).).).).).).).).).).).).).",
-").).).).).).).).).).).).).).).).).).).).).).).).).).).). X ; c v b b c c c b c c c c c c c c c k k k d = o f j k k d d d d d d p i i i i i y y y y i e e e e e e e 8 8 8 7 7 7 , + ).).).).).).).).).).).).).).).).).).).).).).).).).).).",
-").).).).).).).).).).).).).).).).).).).).).).).).).).).).). O : 0 c c c c c c c c c c k k k k k k 0 & + 5 d d d p d d d p i i y y y y y y e y e e e e e 8 8 7 7 8 8 8 , $ ).).).).).).).).).).).).).).).).).).).).).).).).).).).).",
-").).).).).).).).).).).).).).).).).).).).).).).).).).).).).).). O ; 0 c z j j c k k k k k k k k d @ # 9 d d p p i p i y i y y y y y e y y e e e 8 e 7 7 7 8 7 , $ ).).).).).).).).).).).).).).).).).).).).).).).).).).).).).",
-").).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).). o - f j k k k k d d j k d d d : % 0 i p p y y i y y y y y y e y e e e e 8 8 7 7 7 9 > # ).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).",
-").).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).). $ > 9 k d d k d d d d d d = % w y p y y y y y e e y e y e e e 8 8 8 7 w < * ).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).",
-").).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).). & > g d d d d p d p i & * w y y y y y y e y e e e e 8 8 8 0 < - O ).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).",
-").).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).). + = , 5 i p p i 6 % * w y e e e e e 8 e e 8 q < : % ).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).",
-").).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).). % = : < f # = y e y g f < , - & @ ).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).",
-").).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).). o ).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).",
-").).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).). ).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).",
-").).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).). ).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).",
-").).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).). ).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).",
-").).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).). ).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).",
-").).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).",
-").).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).",
-").).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).).)."
-};
15 years, 3 months