OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

Compare Revisions

  • This comparison shows the changes necessary to convert path
    /openrisc/trunk/gnu-old/gcc-4.2.2/gcc/testsuite/treelang
    from Rev 154 to Rev 816
    Reverse comparison

Rev 154 → Rev 816

/output/output-1.c
0,0 → 1,43
/* Driver for treelang test pgm */
 
/*
 
Copyright (C) 2001, 2002, 2007 Free Software Foundation, Inc.
 
This program is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by the
Free Software Foundation; either version 3, or (at your option) any
later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with GCC; see the file COPYING3. If not see
<http://www.gnu.org/licenses/>.
In other words, you are welcome to use, share and improve this program.
You are forbidden to forbid anyone else to use, share and improve
what you give them. Help stamp out software-hoarding!
*/
 
int add(int, int);
int subtract(int, int);
int first_nonzero(int, int);
extern int printf(char *template, ...);
 
int
main (int argc, char *argv[])
{
printf("2:%d\n", add(1,1));
printf("7:%d\n", add(3,4));
printf("-1:%d\n", subtract(3,4));
printf("1:%d\n", subtract(2,1));
printf("3:%d\n", first_nonzero(0,3));
printf("0:%d\n", first_nonzero(0,0));
printf("1:%d\n", first_nonzero(1,0));
printf("15:%d\n", double_plus_one(7));
return 0;
}
output/output-1.c Property changes : Added: svn:eol-style ## -0,0 +1 ## +native \ No newline at end of property Added: svn:keywords ## -0,0 +1 ## +Id \ No newline at end of property Index: output/output-1.out =================================================================== --- output/output-1.out (nonexistent) +++ output/output-1.out (revision 816) @@ -0,0 +1,8 @@ +2:2 +7:7 +-1:-1 +1:1 +3:3 +0:0 +1:1 +15:15 Index: output/output.exp =================================================================== --- output/output.exp (nonexistent) +++ output/output.exp (revision 816) @@ -0,0 +1,58 @@ +proc test_treelang_output { testname srcfiles infile resfile args } { + set comp_output [treelang_target_compile $srcfiles $testname executable $args] + if { [treelang_check_compile $testname $args $testname $comp_output] == 0 } { + return 0; + } + + verbose "Expected output is in $resfile" + set id [open $resfile r] + set expected "" + append expected [read $id] + close $id + set output "" + set output [exec $testname $infile] + regsub -all "\r" "$output" "" output + regsub "\n*$" $expected "" expected + regsub "\n*$" $output "" output + regsub "^\n*" $expected "" expected + regsub "^\n*" $output "" output + regsub -all "\[ \t\]\[ \t\]*" $expected " " expected + regsub -all "\[ \t\]*\n\n*" $expected "\n" expected + regsub -all "\[ \t\]\[ \t\]*" $output " " output + regsub -all "\[ \t\]*\n\n*" $output "\n" output + verbose "expected is $expected" + verbose "actual is $output" + + if { $expected == $output } { + pass $testname + } else { + fail $testname + } + exec rm $testname +} +global srcdir subdir + +catch { lsort [glob -nocomplain ${srcdir}/${subdir}/*.out] } outfiles +verbose "Output files are $outfiles" + +set prefix "" +foreach x $outfiles { + regsub "\\.out$" $x "" prefix + set bname [file tail $prefix] + + if [file exists ${prefix}.inp] { + set inpfile ${prefix}.inp + } else { + set inpfile "" + } + + verbose "inpfile is $inpfile" + + set srcfiles [lsort [glob -nocomplain ${prefix}.{c,tree}]] + verbose "source files are $srcfiles" + test_treelang_output "treelang/$bname" $srcfiles $inpfile $x "" +} + +# Local Variables: +# tcl-indent-level:4 +# End: Index: output/output-1.tree =================================================================== --- output/output-1.tree (nonexistent) +++ output/output-1.tree (revision 816) @@ -0,0 +1,59 @@ +// -*- c -*- c mode in emacs + +// Copyright (C) 2001, 2002, 2007 Free Software Foundation, Inc. +// This program is free software; you can redistribute it and/or modify it +// under the terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) any +// later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with GCC; see the file COPYING3. If not see +// . +// +// In other words, you are welcome to use, share and improve this program. +// You are forbidden to forbid anyone else to use, share and improve +// what you give them. Help stamp out software-hoarding! + + +external_definition int add(int arg1, int arg2); +external_definition int subtract(int arg3, int arg4); +external_definition int first_nonzero(int arg5, int arg6); +external_definition int double_plus_one(int arg7); + +add +{ + return arg1 + arg2; +} + + +subtract +{ + return arg3 - arg4; +} + +double_plus_one +{ + automatic int aaa; + aaa=add(arg7, arg7); + aaa=add(aaa, aaa); + aaa=subtract(subtract(aaa, arg7), arg7) + 1; + return aaa; +} + +first_nonzero +{ + if (arg5) + { + return arg5; + } + else + { + } + return arg6; +} + Index: Makefile.in =================================================================== --- Makefile.in (nonexistent) +++ Makefile.in (revision 816) @@ -0,0 +1,28 @@ +# Copyright (C) 2001, 2002, 2007 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the +# Free Software Foundation; either version 3, or (at your option) any +# later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GCC; see the file COPYING3. If not see +# . +# +# In other words, you are welcome to use, share and improve this program. +# You are forbidden to forbid anyone else to use, share and improve +# what you give them. Help stamp out software-hoarding! +# +# +all: + +clean: + -rm -f *.o *.diff *~ *.bad core *.x + +distclean: clean + -rm -f Makefile config.status Index: execute/main.tree =================================================================== --- execute/main.tree (nonexistent) +++ execute/main.tree (revision 816) @@ -0,0 +1,14 @@ +// { dg-do run } +external_definition int main (int argc); + +main +{ + if (argc == 1) + { + return 0; + } + else + { + return argc; + } +} Index: execute/funccall-2.tree =================================================================== --- execute/funccall-2.tree (nonexistent) +++ execute/funccall-2.tree (revision 816) @@ -0,0 +1,28 @@ +// { dg-do run } +external_definition int main (int argc); + +static int foo (int bba); + +foo +{ + automatic int bar; + + bar = bba + +1; + return bar; +} + +main +{ + automatic int aaa = +3; + + aaa = foo (argc); + + if (aaa == +2) + { + return +0; + } + else + { + return +1; + } +} Index: execute/funccall.tree =================================================================== --- execute/funccall.tree (nonexistent) +++ execute/funccall.tree (revision 816) @@ -0,0 +1,33 @@ +// { dg-do run } +// Tests whether initializtion works properly. +external_reference void abort (); +external_reference void exit (int code); +external_definition int main (); + +static int foo (); + +foo +{ + automatic int bar; + + bar = +1; + bar = bar + +1; + return bar; +} + +main +{ + automatic int aaa; + + aaa = foo (); + + if (aaa == +2) + { + exit (0); + } + else + { + abort (); + } + return 0; +} Index: execute/static.tree =================================================================== --- execute/static.tree (nonexistent) +++ execute/static.tree (revision 816) @@ -0,0 +1,32 @@ +// { dg-do run } +external_reference void abort (); +external_reference void exit (int code); +external_definition int main (int argc, int argv); + +static int foo (); + +foo +{ + static int bar = +1; + + bar = bar + +1; + return bar; +} + +main +{ + automatic int aaa = +3; + + aaa = foo (); + aaa = foo (); + + if (aaa == 3) + { + exit (0); + } + else + { + abort (); + } + return 0; +} Index: execute/initial.tree =================================================================== --- execute/initial.tree (nonexistent) +++ execute/initial.tree (revision 816) @@ -0,0 +1,20 @@ +// { dg-do run } +// Tests whether initializtion works properly. +external_reference void abort (); +external_reference void exit (int code); +external_definition int main (); + +main +{ + automatic int aaa = +3; + + if (aaa == +3) + { + exit (0); + } + else + { + abort (); + } + return 0; +} Index: execute/execute.exp =================================================================== --- execute/execute.exp (nonexistent) +++ execute/execute.exp (revision 816) @@ -0,0 +1,30 @@ +# Tests for treelang; run from gcc/treelang/Make-lang.in => gcc/Makefile + +# Copyright (C) 2004, 2007 by The Free Software Foundation + +# This program is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the +# Free Software Foundation; either version 3, or (at your option) any +# later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GCC; see the file COPYING3. If not see +# . +# +# In other words, you are welcome to use, share and improve this program. +# You are forbidden to forbid anyone else to use, share and improve +# what you give them. Help stamp out software-hoarding! + +# Treelang tests that only need to compile. + +# Load support procs. +load_lib treelang-dg.exp + +dg-init +dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.tree]] "" "" +dg-finish Index: ChangeLog =================================================================== --- ChangeLog (nonexistent) +++ ChangeLog (revision 816) @@ -0,0 +1,136 @@ +2007-10-07 Release Manager + + * GCC 4.2.2 released. + +2007-07-19 Release Manager + + * GCC 4.2.1 released. + +2007-05-13 Release Manager + + * GCC 4.2.0 released. + +2005-08-06 James A. Morrison + + * treetests.exp: Remove. + * a01gcco01runpgm: Move to... + * output/output-1.out: here. + * a01gcci01.c: Move to... + * output/output-1.c: here. + * a01gcci01.tree: Move to... + * output/output-1.tree: here. + * output/output.exp: New. + +2005-07-23 James A. Morrison + + * compile/var_defs.tree: Remove extra lines. + +2005-07-19 James A. Morrison + + * compile/var_defs.tree: Remove duplicate variable. + * compile/var_defs-2.tree: Add duplicate variable test. + +2005-03-22 James A. Morrison + + * compile/memory.tree: New test. + +2005-02-26 James A. Morrison + + * compile/var_defs: Add uninitialized variables. + +2005-02-26 James A. Morrison + + * compile/extrafunc.tree, compile/extravar.tree: New tests. + +2005-02-26 James A. Morrison + + * compile/unsigned.tree: New test. + +2005-02-24 James A. Morrison + + PR other/19896 + * execute/execute.exp: New file. + * execute/funccall.tree, execute/funccall-2.tree, execute/initial.tree, + execute/main.tree, execute/static.tree: New tests. + +2005-02-24 James A. Morrison + + PR other/19897 + * compile/exit.tree, compile/extref.tree, compile/function-1.tree, + compile/syntax-1.tree: New tests. + +2004-10-02 James A. Morrison + + * compile/autofunc.tree: New File. + * compile/badchar.tree: New File. + * compile/externvar.tree: New File. + * compile/mismatch.tree: New File. + * compile/noproto.tree: New File. + * compile/novar.tree: New File. + * compile/var_defs.tree: Add duplicate variable. + +2004-07-31 James A. Morrison + + * compile/vars_def.tree: New File. + * compile/badreturn.tree: New File. + +2004-01-18 James A. Morrison + + * compile/compile.exp: New File. + * compile/tabs.tree: Test whether the front end + compiles code with tabs in it. + +2003-02-25 Tim Josling + + * treetests.exp (run3): set options to force aggressive GC, to + ensure GC is all set up correct, + +2002-05-07 Tim Josling + + * Makefile.in: Fix copyright + * a01gcci01.c: Ditto + * a01gcci01.tree: Ditto + * treetests.exp: Ditto + +2002-04-13 Tim Josling + + * treetree.c (tree_code_create_function_initial) + Remove duplicate call to layout_decl + +2001-12-02 Tim Josling + + * Make-lang.in + Ensure directory is built during install (installdirs dependency) + + * lex.l + Work around poisoned malloc (undef IN_GCC) + Remove fake definition of tree. + + * parse.y + Work around poisoned malloc (undef IN_GCC) + + * tree1.c + New front end interface. + (top level) New structure lang_hooks. + (tree_post_options) Remove. + errorcount now a macro so do not define it. + current_nesting_level => work_nesting_level due to clash. + + * treelang.h + errorcount now a macro so do not reference it. + + * treetree.c + Replace NULL_PTR by NULL. + (tree_code_get_expression) Mark op3 unused. + Do not init builtins. + +2001-06-11 Tim Josling + + * treelang.exp (global) remove COBOL specific code. + +2001-05-24 Tim Josling + + Created this directory and its tests. All derived from the cobol + test swamp which was also all written by me. + +
ChangeLog Property changes : Added: svn:eol-style ## -0,0 +1 ## +native \ No newline at end of property Added: svn:keywords ## -0,0 +1 ## +Id \ No newline at end of property Index: compile/function-1.tree =================================================================== --- compile/function-1.tree (nonexistent) +++ compile/function-1.tree (revision 816) @@ -0,0 +1,14 @@ +// { dg-do compile } +static int foo (); +static int bar (int a); + +foo +{ + return 1; +} + +bar +{ + a = a + foo (); + return a; +} Index: compile/autofunc.tree =================================================================== --- compile/autofunc.tree (nonexistent) +++ compile/autofunc.tree (revision 816) @@ -0,0 +1,6 @@ +// { dg-do compile } +automatic int bar (); // { dg-error "automatic" } + +bar () { + return -12; +} Index: compile/badchar.tree =================================================================== --- compile/badchar.tree (nonexistent) +++ compile/badchar.tree (revision 816) @@ -0,0 +1,2 @@ +// { dg-do compile } +static int bar = 1*; // { dg-error "Unrecognized" } Index: compile/syntax-1.tree =================================================================== --- compile/syntax-1.tree (nonexistent) +++ compile/syntax-1.tree (revision 816) @@ -0,0 +1,9 @@ +// { dg-do compile } +external_reference void exit(int); // { dg-error "(parse|syntax) error" } + +static int foo (int a); + +foo +{ + return a; +} Index: compile/compile.exp =================================================================== --- compile/compile.exp (nonexistent) +++ compile/compile.exp (revision 816) @@ -0,0 +1,30 @@ +# Tests for treelang; run from gcc/treelang/Make-lang.in => gcc/Makefile + +# Copyright (C) 2004, 2007 by The Free Software Foundation + +# This program is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the +# Free Software Foundation; either version 3, or (at your option) any +# later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GCC; see the file COPYING3. If not see +# . +# +# In other words, you are welcome to use, share and improve this program. +# You are forbidden to forbid anyone else to use, share and improve +# what you give them. Help stamp out software-hoarding! + +# Treelang tests that only need to compile. + +# Load support procs. +load_lib treelang-dg.exp + +dg-init +dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*.tree]] "" "" +dg-finish Index: compile/novar.tree =================================================================== --- compile/novar.tree (nonexistent) +++ compile/novar.tree (revision 816) @@ -0,0 +1,5 @@ +static void bar (); + +bar { + x = 3; // { dg-error "x" "not defined" } +} Index: compile/badreturn.tree =================================================================== --- compile/badreturn.tree (nonexistent) +++ compile/badreturn.tree (revision 816) @@ -0,0 +1,14 @@ +// { dg-do compile } + +external_definition void bar (); +external_definition int gar (int arg0); + +bar +{ + return 0; // { dg-warning "return" } +} + +gar +{ + return; // { dg-error "return" } +} Index: compile/var_defs-2.tree =================================================================== --- compile/var_defs-2.tree (nonexistent) +++ compile/var_defs-2.tree (revision 816) @@ -0,0 +1,20 @@ +// { dg-do compile } +external_definition int first_nonzero (int arg5, int arg6); + +first_nonzero +{ + automatic int y; + automatic int y; // { dg-error "Duplicate" } + if (arg5) + { + return arg5; + } + else + { + automatic int j; + j = arg6; + return j; + } + return arg6; +} + Index: compile/var_defs.tree =================================================================== --- compile/var_defs.tree (nonexistent) +++ compile/var_defs.tree (revision 816) @@ -0,0 +1,24 @@ +// { dg-do compile } +// { dg-options "-Wuninitialized -O" } +external_definition void boring (int arg0); +external_definition char condition (char arg1, char arg2); + +boring +{ + arg0 = +5 + +3; // Force 3 and 5 to be signed numbers. + arg0 = arg0 + +3; +} + +condition +{ + if (arg1) + { + automatic int i; // { dg-warning "was declared here" } + return i + 1; // { dg-warning "uninitialized" } + } + else + { + automatic int j; // { dg-warning "was declared here" } + return j; // { dg-warning "uninitialized" } + } +} Index: compile/tabs.tree =================================================================== --- compile/tabs.tree (nonexistent) +++ compile/tabs.tree (revision 816) @@ -0,0 +1,11 @@ +// { dg-do compile } +external_definition int main(int argc); + +main { + automatic int v1; + automatic int v2; + v1 = argc; + v2 = 3; + + return v2; +} Index: compile/extravar.tree =================================================================== --- compile/extravar.tree (nonexistent) +++ compile/extravar.tree (revision 816) @@ -0,0 +1,14 @@ +// { dg-do compile } +// { dg-options "-fdump-tree-optimized -O1 -Wunused-variable" } +external_definition int bar (int aaa, int ddd); + +static int foo = -3; // { dg-warning "defined but not used" } + +bar +{ + automatic int ccc; + + return aaa + ddd + +3; +} +// { dg-final { scan-tree-dump-not "ccc" "optimized" } } +// { dg-final { cleanup-tree-dump "optimized" } } Index: compile/extref.tree =================================================================== --- compile/extref.tree (nonexistent) +++ compile/extref.tree (revision 816) @@ -0,0 +1,9 @@ +// { dg-do compile } +external_reference void abort (); + +static int foo (int a); + +foo +{ + return a; +} Index: compile/extrafunc.tree =================================================================== --- compile/extrafunc.tree (nonexistent) +++ compile/extrafunc.tree (revision 816) @@ -0,0 +1,25 @@ +// { dg-do compile } +// { dg-options "-O2 -fdump-tree-optimized -Wunused-function" } +// Check to see that unused functions get removed at -O2 and +// above. +static int foo (int bar); +static int baz (int aaa); +external_definition int ext (int bbb); + +foo +{ + return bar; +} + +baz // { dg-warning "defined but not used" } +{ + return foo (aaa); +} + +ext +{ + return foo (bbb); +} + +// { dg-final { scan-tree-dump-not "baz" "optimized" } } +// { dg-final { cleanup-tree-dump "optimized" } } Index: compile/noproto.tree =================================================================== --- compile/noproto.tree (nonexistent) +++ compile/noproto.tree (revision 816) @@ -0,0 +1,5 @@ +// { dg-do compile } +foo // { dg-error "foo" "prototype" } +{ + x = 3; +} Index: compile/full_unit.tree =================================================================== --- compile/full_unit.tree (nonexistent) +++ compile/full_unit.tree (revision 816) @@ -0,0 +1,16 @@ +// { dg-do compile } +// { dg-options "-funit-at-a-time" } +external_definition int add (int arga, int argb); +external_definition char sub (char argc, char argd); + +add +{ + return arga + argb + +3; +} + +sub +{ + return argd - argc + +2; +} +// { dg-final { scan-assembler "add" } } +// { dg-final { scan-assembler "sub" } } Index: compile/mismatch.tree =================================================================== --- compile/mismatch.tree (nonexistent) +++ compile/mismatch.tree (revision 816) @@ -0,0 +1,8 @@ +// { dg-do compile } +static int bar (); +static void barf (); + +bar { + barf (1); // { dg-error "mismatch" "barf" } + return -12; +} Index: compile/memory.tree =================================================================== --- compile/memory.tree (nonexistent) +++ compile/memory.tree (revision 816) @@ -0,0 +1,18 @@ +external_definition int foo (int a, int b); +external_definition int bar (int c, int d); +external_definition int bart (int e); + +bar +{ + return c + d; +} + +foo +{ + return a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +a - a +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b +b - b; +} + +bart +{ + return e; +} Index: compile/exit.tree =================================================================== --- compile/exit.tree (nonexistent) +++ compile/exit.tree (revision 816) @@ -0,0 +1,12 @@ +// { dg-do compile } +external_reference void exit (int code); + +static int foo (); + +foo +{ + automatic int bar = +1; + bar = bar + +1; + exit (0); // Calling external references is currently broken. + return bar; +} Index: compile/unsigned.tree =================================================================== --- compile/unsigned.tree (nonexistent) +++ compile/unsigned.tree (revision 816) @@ -0,0 +1,20 @@ +// { dg-do compile } +// { dg-options "-fdump-tree-gimple" } +external_reference void abort (); +external_reference void exit (int status); +external_definition int main (int argc, int argv); + +main +{ + automatic unsigned int bar = 2147483649; + automatic unsigned int baz = 2147483649; + + if (bar == baz) { + abort (); + } else { + exit (0); + } + return +1; +} +// { dg-final { scan-tree-dump-not "\\\(int\\\)" "gimple" } } +// { dg-final { cleanup-tree-dump "gimple" } } Index: compile/externvar.tree =================================================================== --- compile/externvar.tree (nonexistent) +++ compile/externvar.tree (revision 816) @@ -0,0 +1,4 @@ +// { dg-do compile } +external_reference int bar = 0; // { dg-error "initial" } + +static char barf = 1;

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.