From sabre at nondot.org Mon May 14 01:56:29 2007 From: sabre at nondot.org (Chris Lattner) Date: Mon, 14 May 2007 01:56:29 -0500 Subject: [llvm-commits] CVS: llvm/docs/ReleaseNotes.html Message-ID: <200705140656.l4E6uTq9031806@zion.cs.uiuc.edu> Changes in directory llvm/docs: ReleaseNotes.html updated: 1.374 -> 1.375 --- Log message: Add a skeleton for future contents --- Diffs of the changes: (+75 -69) ReleaseNotes.html | 144 ++++++++++++++++++++++++++++-------------------------- 1 files changed, 75 insertions(+), 69 deletions(-) Index: llvm/docs/ReleaseNotes.html diff -u llvm/docs/ReleaseNotes.html:1.374 llvm/docs/ReleaseNotes.html:1.375 --- llvm/docs/ReleaseNotes.html:1.374 Fri May 11 21:36:41 2007 +++ llvm/docs/ReleaseNotes.html Mon May 14 01:56:09 2007 @@ -90,11 +90,39 @@ +
Major Changes
+
+

blah +

+ + + +
+ + + +
llvm-gcc +Improvements
+
+

New features include: +

+ + + +
+ +
Optimizer Improvements
-

The mid-level optimizer is now faster and produces better code in many cases. - Significant changes include:

+

New features include: +

+
Integer Type
+ +
+ +
Overview:
+

The integer type is a very simple derived type that simply specifies an +arbitrary bit width for the integer type desired. Any bit width from 1 bit to +2^23-1 (about 8 million) can be specified.

+ +
Syntax:
+ +
+  iN
+
+ +

The number of bits the integer will occupy is specified by the N +value.

+ +
Examples:
+ + + + + +
+ i1
+ i4
+ i8
+ i16
+ i32
+ i42
+ i64
+ i1942652
+
+ A boolean integer of 1 bit
+ A nibble sized integer of 4 bits.
+ A byte sized integer of 8 bits.
+ A half word sized integer of 16 bits.
+ A word sized integer of 32 bits.
+ An integer whose bit width is the answer.
+ A double word sized integer of 64 bits.
+ A really big integer of over 1 million bits.
+
+ +
@@ -4751,7 +4791,7 @@ Chris Lattner
The LLVM Compiler Infrastructure
- Last modified: $Date: 2007/05/14 16:50:20 $ + Last modified: $Date: 2007/05/16 18:44:01 $ From reid at x10sys.com Wed May 16 13:47:06 2007 From: reid at x10sys.com (Reid Spencer) Date: Wed, 16 May 2007 13:47:06 -0500 Subject: [llvm-commits] [release_20] CVS: llvm/docs/LangRef.html Message-ID: <200705161847.l4GIl6pi021119@zion.cs.uiuc.edu> Changes in directory llvm/docs: LangRef.html updated: 1.242 -> 1.242.2.1 --- Log message: Merge arbitrary precision integer documentation from mainline. --- Diffs of the changes: (+49 -9) LangRef.html | 58 +++++++++++++++++++++++++++++++++++++++++++++++++--------- 1 files changed, 49 insertions(+), 9 deletions(-) Index: llvm/docs/LangRef.html diff -u llvm/docs/LangRef.html:1.242 llvm/docs/LangRef.html:1.242.2.1 --- llvm/docs/LangRef.html:1.242 Sun Apr 29 13:35:00 2007 +++ llvm/docs/LangRef.html Wed May 16 13:46:48 2007 @@ -908,9 +908,6 @@ TypeDescription voidNo value - i88-bit value - i3232-bit value - float32-bit floating point value labelBranch destination @@ -919,9 +916,7 @@ - - - +
TypeDescription
i1True or False value
i1616-bit value
i6464-bit value
float32-bit floating point value
double64-bit floating point value
@@ -942,7 +937,7 @@ ClassificationTypes integer - i1, i8, i16, i32, i64 + i1, i2, i3, ... i8, ... i16, ... i32, ... i64, ... floating point @@ -950,7 +945,7 @@ first class - i1, i8, i16, i32, i64, float, double,
+ i1, ..., float, double,
pointer,vector
@@ -977,6 +972,51 @@
+ + +
+ +
Overview:
+

The integer type is a very simple derived type that simply specifies an +arbitrary bit width for the integer type desired. Any bit width from 1 bit to +2^23-1 (about 8 million) can be specified.

+ +
Syntax:
+ +
+  iN
+
+ +

The number of bits the integer will occupy is specified by the N +value.

+ +
Examples:
+ + + + + +
+ i1
+ i4
+ i8
+ i16
+ i32
+ i42
+ i64
+ i1942652
+
+ A boolean integer of 1 bit
+ A nibble sized integer of 4 bits.
+ A byte sized integer of 8 bits.
+ A half word sized integer of 16 bits.
+ A word sized integer of 32 bits.
+ An integer whose bit width is the answer.
+ A double word sized integer of 64 bits.
+ A really big integer of over 1 million bits.
+
+ +
@@ -4756,7 +4796,7 @@ Chris Lattner
The LLVM Compiler Infrastructure
- Last modified: $Date: 2007/04/29 18:35:00 $ + Last modified: $Date: 2007/05/16 18:46:48 $ From evan.cheng at apple.com Wed May 16 14:07:55 2007 From: evan.cheng at apple.com (Evan Cheng) Date: Wed, 16 May 2007 12:07:55 -0700 Subject: [llvm-commits] CVS: llvm/lib/Target/ARM/ARMInstrInfo.cpp ARMInstrInfo.h ARMTargetMachine.cpp ARMTargetMachine.h In-Reply-To: <2108A5A5-A228-4C8A-89C0-4975F7D4A315@apple.com> References: <200705160202.l4G227gp024237@zion.cs.uiuc.edu> <642A90E4-404B-47FE-9913-CD20F577BFDE@apple.com> <2108A5A5-A228-4C8A-89C0-4975F7D4A315@apple.com> Message-ID: <836B1585-119C-49EE-87B4-D664ADC2A98E@apple.com> On May 16, 2007, at 11:42 AM, Chris Lattner wrote: >>> Yes, I think this should be the distinction between M_PREDICATED >>> (the >>> instr already has a predicate field, but may be set to 'always') vs >>> M_PREDICABLE (the instr may or may not have a predicate field, but >>> PredicateInstruction can change it into one that does). >> >> I dunno if that's the right solution. To me, whether something is >> "predicated" is a dynamic property. It's dependent on the value of >> its predicated field. > > Okay, lets put this another way. You need to know whether you *can* > predicate something, this is the isPredicable() property we were > talking about. > > Why do you need to know if something is predicated? What does that > mean? > > Does that mean it can be predicated and the predicate is not set to > always? What client do you expect for this? Right. The only potential client is the if-converter. If anything is already predicated on a non-always predicate before if-conversion, it needs to know. You proposed having two separate properties. I think we have need one, i.e. whether something has a predicate field. Agreed? > >>> Another thing that occurred to me is that predicates have >>> implications for livevar analysis (specifically, the scavenger). >>> Consider this code: >>> >>> R3 = add [lt] ... >>> R3 = sub [ge] ... >>> >>> Note that the add is not dead. :) >> >> Yeah, this is a problematic issue. > > yes. > >> For now, I think the if-converter >> has to be a pre-emit pass. That means it will have to do some basic >> CFG xform (i.e. remove dead blocks) unless we can move branch folding >> past it. :-( > > Ick. :( :( Indeed. But I don't see any other solution unless we want to teach the scavenger all about predication. That may come one day, but not now. >>>> Come to think of it, perhaps we should not have selects if the >>>> target >>>> uses if-conversion. >>> >>> That would be very nice. Alternatively, we could have the isel >>> "know" about predicated moves and generate them? >> >> I think the right solution is to transform select's back to control >> flow. However, this requires doing the ugly hack to do the lowering >> at scheduling time, right? > > Yes. The PPC and Sparc backend (in v8 mode) both do this. > > However, why not just emit the predicated instructions from the > isel? That would be much more efficient and clean, no? I don't think so, we can't have isel / scheduler producing code that have multiple instructions targeting the same register. And I don't want to teach the if-converter about already predicated code. e.g. extern void foo(int); int t1(int a, int b) { int x = a ? b+1 : b-1; foo(x); return x; } i.e. define i32 @t1(i32 %a, i32 %b) { entry: %tmp2 = icmp eq i32 %a, 0 ; [#uses=1] %iftmp.0.0.v = select i1 %tmp2, i32 -1, i32 1 ; [#uses=1] %iftmp.0.0 = add i32 %iftmp.0.0.v, %b ; [#uses=2] tail call void @foo( i32 %iftmp.0.0 ) ret i32 %iftmp.0.0 } We currently produce: _t1: stmfd sp!, {r4, r7, lr} add r7, sp, #4 mvn r3, #0 mov r2, #1 cmp r0, #0 moveq r2, r3 add r4, r2, r1 mov r0, r4 bl L_foo$stub mov r0, r4 ldmfd sp!, {r4, r7, pc} But what we really want is _t1: stmfd sp!, {r4, r7, lr} add r7, sp, #4 cmp r0, #0 mvneq r2, #0 <== We can't produce this if we isel predicated code movne r2, #1 <== add r4, r2, r1 mov r0, r4 bl L_foo$stub mov r0, r4 ldmfd sp!, {r4, r7, pc} And then somehow turn this into: _t1: stmfd sp!, {r4, r7, lr} add r7, sp, #4 cmp r0, #0 subeq r2, r1, #1 addne r2, r1, #1 mov r0, r4 bl L_foo$stub mov r0, r4 ldmfd sp!, {r4, r7, pc} Evan > > -Chris > _______________________________________________ > llvm-commits mailing list > llvm-commits at cs.uiuc.edu > http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits From reid at x10sys.com Wed May 16 14:18:40 2007 From: reid at x10sys.com (Reid Spencer) Date: Wed, 16 May 2007 14:18:40 -0500 Subject: [llvm-commits] CVS: llvm/lib/Support/APInt.cpp Message-ID: <200705161918.l4GJIewl021981@zion.cs.uiuc.edu> Changes in directory llvm/lib/Support: APInt.cpp updated: 1.82 -> 1.83 --- Log message: Fix a bug in the "fromString" method where radix 2,8 and 16 values were not being generated correctly because the shl operator does not mutate its object but returns a new value. Also, make the distinction between radix 16 and the others more clear. --- Diffs of the changes: (+13 -8) APInt.cpp | 21 +++++++++++++-------- 1 files changed, 13 insertions(+), 8 deletions(-) Index: llvm/lib/Support/APInt.cpp diff -u llvm/lib/Support/APInt.cpp:1.82 llvm/lib/Support/APInt.cpp:1.83 --- llvm/lib/Support/APInt.cpp:1.82 Sun May 13 19:15:28 2007 +++ llvm/lib/Support/APInt.cpp Wed May 16 14:18:22 2007 @@ -1861,21 +1861,26 @@ // Get a digit uint32_t digit = 0; char cdigit = str[i]; - if (isdigit(cdigit)) - digit = cdigit - '0'; - else if (isxdigit(cdigit)) - if (cdigit >= 'a') + if (radix == 16) { + if (!isxdigit(cdigit)) + assert(0 && "Invalid hex digit in string"); + if (isdigit(cdigit)) + digit = cdigit - '0'; + else if (cdigit >= 'a') digit = cdigit - 'a' + 10; else if (cdigit >= 'A') digit = cdigit - 'A' + 10; else - assert(0 && "huh?"); - else + assert(0 && "huh? we shouldn't get here"); + } else if (isdigit(cdigit)) { + digit = cdigit - '0'; + } else { assert(0 && "Invalid character in digit string"); + } - // Shift or multiple the value by the radix + // Shift or multiply the value by the radix if (shift) - this->shl(shift); + *this <<= shift; else *this *= apradix; From reid at x10sys.com Wed May 16 14:34:09 2007 From: reid at x10sys.com (Reid Spencer) Date: Wed, 16 May 2007 14:34:09 -0500 Subject: [llvm-commits] CVS: llvm-test/SingleSource/UnitTests/Integer/bits.h Message-ID: <200705161934.l4GJY9Y6022257@zion.cs.uiuc.edu> Changes in directory llvm-test/SingleSource/UnitTests/Integer: bits.h updated: 1.7 -> 1.8 --- Log message: Add macros for doing octal and binary conversions from strings. --- Diffs of the changes: (+12 -0) bits.h | 12 ++++++++++++ 1 files changed, 12 insertions(+) Index: llvm-test/SingleSource/UnitTests/Integer/bits.h diff -u llvm-test/SingleSource/UnitTests/Integer/bits.h:1.7 llvm-test/SingleSource/UnitTests/Integer/bits.h:1.8 --- llvm-test/SingleSource/UnitTests/Integer/bits.h:1.7 Mon May 14 14:11:08 2007 +++ llvm-test/SingleSource/UnitTests/Integer/bits.h Wed May 16 14:33:49 2007 @@ -124,3 +124,15 @@ __builtin_bit_from_string(&Result, str, 16); \ Result; \ }) + +#define bitsFromOctalString(str,bits) ({ \ + int __attribute__((bitwidth(bits))) Result; \ + __builtin_bit_from_string(&Result, str, 8); \ + Result; \ +}) + +#define bitsFromBinaryString(str,bits) ({ \ + int __attribute__((bitwidth(bits))) Result; \ + __builtin_bit_from_string(&Result, str, 2); \ + Result; \ +}) From reid at x10sys.com Wed May 16 14:34:55 2007 From: reid at x10sys.com (Reid Spencer) Date: Wed, 16 May 2007 14:34:55 -0500 Subject: [llvm-commits] CVS: llvm-test/SingleSource/UnitTests/Integer/constval.cpp constval.reference_output Message-ID: <200705161934.l4GJYt1T022282@zion.cs.uiuc.edu> Changes in directory llvm-test/SingleSource/UnitTests/Integer: constval.cpp updated: 1.1 -> 1.2 constval.reference_output updated: 1.1 -> 1.2 --- Log message: Augment this test case to check conversions of radix 2, 8 and 16 values as well as just radix 10. --- Diffs of the changes: (+22 -4) constval.cpp | 19 +++++++++++++++++-- constval.reference_output | 7 +++++-- 2 files changed, 22 insertions(+), 4 deletions(-) Index: llvm-test/SingleSource/UnitTests/Integer/constval.cpp diff -u llvm-test/SingleSource/UnitTests/Integer/constval.cpp:1.1 llvm-test/SingleSource/UnitTests/Integer/constval.cpp:1.2 --- llvm-test/SingleSource/UnitTests/Integer/constval.cpp:1.1 Tue Apr 17 19:53:49 2007 +++ llvm-test/SingleSource/UnitTests/Integer/constval.cpp Wed May 16 14:34:37 2007 @@ -15,9 +15,24 @@ void my_test() { uint21 x = bitsFromString("123456", 21); + printf( "x = %d = ", int(x)); + printBits(x); + uint16 y = bitsFromString("123456", 16); - printf( "x = %d\n", int(x)); - printf( "y = %d\n", int(y)); + printf( "\ny = %d = ", int(y)); + printBits(y); + + int256 z = bitsFromHexString("0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", 256); + printf( "\nz = " ); + printBits(z); + + int69 a = bitsFromOctalString("01234567012345670123456", 69); + printf( "\na = " ); + printBits(a); + int68 b = bitsFromBinaryString("10101010101010101010101010101010101010101010101010101010101010101010", 68); + printf( "\nb = " ); + printBits(b); + printf("\n"); } int main(int argc, char** argv) Index: llvm-test/SingleSource/UnitTests/Integer/constval.reference_output diff -u llvm-test/SingleSource/UnitTests/Integer/constval.reference_output:1.1 llvm-test/SingleSource/UnitTests/Integer/constval.reference_output:1.2 --- llvm-test/SingleSource/UnitTests/Integer/constval.reference_output:1.1 Tue Apr 17 19:53:49 2007 +++ llvm-test/SingleSource/UnitTests/Integer/constval.reference_output Wed May 16 14:34:37 2007 @@ -1,3 +1,6 @@ -x = 123456 -y = 57920 +x = 123456 = 000011110001001000000 +y = 57920 = 1110001001000000 +z = 0000111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 +a = 000001010011100101110111000001010011100101110111000001010011100101110 +b = 10101010101010101010101010101010101010101010101010101010101010101010 exit 0 From criswell at cs.uiuc.edu Wed May 16 14:50:01 2007 From: criswell at cs.uiuc.edu (John Criswell) Date: Wed, 16 May 2007 14:50:01 -0500 Subject: [llvm-commits] [see] CVS: llvm/lib/Target/CBackend/Writer.cpp Message-ID: <200705161950.l4GJo1Ql022521@zion.cs.uiuc.edu> Changes in directory llvm/lib/Target/CBackend: Writer.cpp updated: 1.280.4.2 -> 1.280.4.3 --- Log message: Hack to see branch to label functions as pure and const. Also fixed the creation of function prototypes with extern linkage. --- Diffs of the changes: (+14 -4) Writer.cpp | 18 ++++++++++++++---- 1 files changed, 14 insertions(+), 4 deletions(-) Index: llvm/lib/Target/CBackend/Writer.cpp diff -u llvm/lib/Target/CBackend/Writer.cpp:1.280.4.2 llvm/lib/Target/CBackend/Writer.cpp:1.280.4.3 --- llvm/lib/Target/CBackend/Writer.cpp:1.280.4.2 Mon Mar 19 00:37:44 2007 +++ llvm/lib/Target/CBackend/Writer.cpp Wed May 16 14:49:42 2007 @@ -1247,11 +1247,20 @@ Out << " __ATTRIBUTE_DTOR__"; #if 1 - if ((I->getName() == "exactcheck") || (I->getName() == "exactcheck2") || - (I->getName() == "poolcheck") || - (I->getName() == "poolcheckarray") || (I->getName() == "poolcheckarray_i") || - (I->getName() == "pchk_bounds") || (I->getName() == "pchk_bounds_i")) { + if ((I->getName() == "exactcheck") || + (I->getName() == "exactcheck2") || + (I->getName() == "exactcheck3")) Out << " __attribute__ ((const))"; + if ((I->getName() == "poolcheck") || + (I->getName() == "poolcheckarray") || + (I->getName() == "poolcheckarray_i") || + (I->getName() == "getBounds") || + (I->getName() == "getBounds_i") || + (I->getName() == "getBegin") || + (I->getName() == "getEnd") || + (I->getName() == "pchk_bounds") || + (I->getName() == "pchk_bounds_i")) { + Out << " __attribute__ ((pure))"; } #endif if (I->hasName() && I->getName()[0] == 1) @@ -1453,6 +1462,7 @@ bool isCStructReturn = F->getCallingConv() == CallingConv::CSRet; if (F->hasInternalLinkage()) Out << "static "; + if (F->isExternal()) Out << "extern "; if (F->hasDLLImportLinkage()) Out << "__declspec(dllimport) "; if (F->hasDLLExportLinkage()) Out << "__declspec(dllexport) "; switch (F->getCallingConv()) { From greened at obbligato.org Wed May 16 15:01:47 2007 From: greened at obbligato.org (David Greene) Date: Wed, 16 May 2007 15:01:47 -0500 Subject: [llvm-commits] Regalloc Refactoring In-Reply-To: <3CBCE7D6-1A4D-4B84-BB38-9AAB4C44D77C@apple.com> References: <463E6E94.60909@obbligato.org> <46425F43.1020602@obbligato.org> <3CBCE7D6-1A4D-4B84-BB38-9AAB4C44D77C@apple.com> Message-ID: <464B632B.2020707@obbligato.org> Chris Lattner wrote: >> I think your suggestion of createRegisterCoalescer() is the right >> solution in the long run. My goal here was to submit the first phase >> of a larger refactoring effort that separated coalescing from >> live interval analysis but tried not to do anything else dramatic. > > I think this part of the patch is right-minded. I took a quick look > at the patch and it looks good to me! Just to be clear, are you saying the patch should be merged as-is or that I should make the changes Evan suggested and resubmit? -Dave From rspencer at reidspencer.com Wed May 16 15:08:29 2007 From: rspencer at reidspencer.com (Reid Spencer) Date: Wed, 16 May 2007 20:08:29 +0000 Subject: [llvm-commits] [see] CVS: llvm/lib/Target/CBackend/Writer.cpp In-Reply-To: <200705161950.l4GJo1Ql022521@zion.cs.uiuc.edu> References: <200705161950.l4GJo1Ql022521@zion.cs.uiuc.edu> Message-ID: <1179346109.1233.444.camel@bashful.x10sys.com> John, On Wed, 2007-05-16 at 14:50 -0500, John Criswell wrote: > > Changes in directory llvm/lib/Target/CBackend: > > Writer.cpp updated: 1.280.4.2 -> 1.280.4.3 > --- > Log message: > > Hack to see branch to label functions as pure and const. > Also fixed the creation of function prototypes with extern linkage. Does the second chunk need to be merged to mainline? Reid. > > > --- > Diffs of the changes: (+14 -4) > > Writer.cpp | 18 ++++++++++++++---- > 1 files changed, 14 insertions(+), 4 deletions(-) > > > Index: llvm/lib/Target/CBackend/Writer.cpp > diff -u llvm/lib/Target/CBackend/Writer.cpp:1.280.4.2 llvm/lib/Target/CBackend/Writer.cpp:1.280.4.3 > --- llvm/lib/Target/CBackend/Writer.cpp:1.280.4.2 Mon Mar 19 00:37:44 2007 > +++ llvm/lib/Target/CBackend/Writer.cpp Wed May 16 14:49:42 2007 > @@ -1247,11 +1247,20 @@ > Out << " __ATTRIBUTE_DTOR__"; > > #if 1 > - if ((I->getName() == "exactcheck") || (I->getName() == "exactcheck2") || > - (I->getName() == "poolcheck") || > - (I->getName() == "poolcheckarray") || (I->getName() == "poolcheckarray_i") || > - (I->getName() == "pchk_bounds") || (I->getName() == "pchk_bounds_i")) { > + if ((I->getName() == "exactcheck") || > + (I->getName() == "exactcheck2") || > + (I->getName() == "exactcheck3")) > Out << " __attribute__ ((const))"; > + if ((I->getName() == "poolcheck") || > + (I->getName() == "poolcheckarray") || > + (I->getName() == "poolcheckarray_i") || > + (I->getName() == "getBounds") || > + (I->getName() == "getBounds_i") || > + (I->getName() == "getBegin") || > + (I->getName() == "getEnd") || > + (I->getName() == "pchk_bounds") || > + (I->getName() == "pchk_bounds_i")) { > + Out << " __attribute__ ((pure))"; > } > #endif > if (I->hasName() && I->getName()[0] == 1) > @@ -1453,6 +1462,7 @@ > bool isCStructReturn = F->getCallingConv() == CallingConv::CSRet; > > if (F->hasInternalLinkage()) Out << "static "; > + if (F->isExternal()) Out << "extern "; > if (F->hasDLLImportLinkage()) Out << "__declspec(dllimport) "; > if (F->hasDLLExportLinkage()) Out << "__declspec(dllexport) "; > switch (F->getCallingConv()) { > > > > _______________________________________________ > llvm-commits mailing list > llvm-commits at cs.uiuc.edu > http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits From clattner at apple.com Wed May 16 15:30:34 2007 From: clattner at apple.com (Chris Lattner) Date: Wed, 16 May 2007 13:30:34 -0700 Subject: [llvm-commits] CVS: llvm/lib/Support/APInt.cpp In-Reply-To: <200705161918.l4GJIewl021981@zion.cs.uiuc.edu> References: <200705161918.l4GJIewl021981@zion.cs.uiuc.edu> Message-ID: <669E65AE-B95A-4F86-98F4-CED13FC97438@apple.com> > Fix a bug in the "fromString" method where radix 2,8 and 16 values > were > not being generated correctly because the shl operator does not > mutate its > object but returns a new value. Also, make the distinction between > radix > 16 and the others more clear. FWIW, I find this part of the API extremely confusing. What do you think about changing the "in place" operators to not return *this? That would make it very clear which ones mutate in place and which ones return their result. -Chris From clattner at apple.com Wed May 16 15:32:14 2007 From: clattner at apple.com (Chris Lattner) Date: Wed, 16 May 2007 13:32:14 -0700 Subject: [llvm-commits] Regalloc Refactoring In-Reply-To: <464B632B.2020707@obbligato.org> References: <463E6E94.60909@obbligato.org> <46425F43.1020602@obbligato.org> <3CBCE7D6-1A4D-4B84-BB38-9AAB4C44D77C@apple.com> <464B632B.2020707@obbligato.org> Message-ID: On May 16, 2007, at 1:01 PM, David Greene wrote: > Chris Lattner wrote: > >>> I think your suggestion of createRegisterCoalescer() is the right >>> solution in the long run. My goal here was to submit the first >>> phase >>> of a larger refactoring effort that separated coalescing from >>> live interval analysis but tried not to do anything else dramatic. >> >> I think this part of the patch is right-minded. I took a quick look >> at the patch and it looks good to me! > > Just to be clear, are you saying the patch should be merged as-is > or that I should make the changes Evan suggested and resubmit? What did Evan ask for? Are you referring to the addrequired bit? -Chris From rspencer at reidspencer.com Wed May 16 15:38:47 2007 From: rspencer at reidspencer.com (Reid Spencer) Date: Wed, 16 May 2007 13:38:47 -0700 Subject: [llvm-commits] CVS: llvm/lib/Support/APInt.cpp In-Reply-To: <669E65AE-B95A-4F86-98F4-CED13FC97438@apple.com> References: <200705161918.l4GJIewl021981@zion.cs.uiuc.edu> <669E65AE-B95A-4F86-98F4-CED13FC97438@apple.com> Message-ID: <1179347927.1233.454.camel@bashful.x10sys.com> On Wed, 2007-05-16 at 13:30 -0700, Chris Lattner wrote: > > Fix a bug in the "fromString" method where radix 2,8 and 16 values > > were > > not being generated correctly because the shl operator does not > > mutate its > > object but returns a new value. Also, make the distinction between > > radix > > 16 and the others more clear. > > FWIW, I find this part of the API extremely confusing. What do you > think about changing the "in place" operators to not return *this? Yeah, that might help, but it would break some code, I think. We want to be able to do things like: Y = X.zext(25).shr(10) with your change we'd have to: X.zext(25) Y = X.shr(10) Although, this makes it more clear what's going on because in the first case, its not clear that X is changing. One might be fooled into thinking that it wasn't zext. > That would make it very clear which ones mutate in place and which > ones return their result. Yeah, it would. Another thing we could do is just make none of them work in-place, but then that has performance implcations because two temporaries are being constructed and since these are 12-byte things they don't fit in registers and consume stack and ... Reid. > > -Chris > _______________________________________________ > llvm-commits mailing list > llvm-commits at cs.uiuc.edu > http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits From evan.cheng at apple.com Wed May 16 15:44:00 2007 From: evan.cheng at apple.com (Evan Cheng) Date: Wed, 16 May 2007 15:44:00 -0500 Subject: [llvm-commits] CVS: llvm/include/llvm/CodeGen/MachineInstr.h Message-ID: <200705162044.l4GKi066023624@zion.cs.uiuc.edu> Changes in directory llvm/include/llvm/CodeGen: MachineInstr.h updated: 1.219 -> 1.220 --- Log message: Rename M_PREDICATED to M_PREDICABLE; Move TargetInstrInfo::isPredicatable() to MachineInstr::isPredicable(). --- Diffs of the changes: (+4 -0) MachineInstr.h | 4 ++++ 1 files changed, 4 insertions(+) Index: llvm/include/llvm/CodeGen/MachineInstr.h diff -u llvm/include/llvm/CodeGen/MachineInstr.h:1.219 llvm/include/llvm/CodeGen/MachineInstr.h:1.220 --- llvm/include/llvm/CodeGen/MachineInstr.h:1.219 Mon May 14 20:25:06 2007 +++ llvm/include/llvm/CodeGen/MachineInstr.h Wed May 16 15:43:42 2007 @@ -394,6 +394,10 @@ return true; } + /// isPredicable - True if the instruction can be converted into a + /// predicated instruction. + bool isPredicable() const; + /// clone - Create a copy of 'this' instruction that is identical in /// all ways except the the instruction has no parent, prev, or next. MachineInstr* clone() const { return new MachineInstr(*this); } From evan.cheng at apple.com Wed May 16 15:44:05 2007 From: evan.cheng at apple.com (Evan Cheng) Date: Wed, 16 May 2007 15:44:05 -0500 Subject: [llvm-commits] CVS: llvm/include/llvm/Target/TargetInstrInfo.h Message-ID: <200705162044.l4GKi5YM023629@zion.cs.uiuc.edu> Changes in directory llvm/include/llvm/Target: TargetInstrInfo.h updated: 1.117 -> 1.118 --- Log message: Rename M_PREDICATED to M_PREDICABLE; Move TargetInstrInfo::isPredicatable() to MachineInstr::isPredicable(). --- Diffs of the changes: (+6 -15) TargetInstrInfo.h | 21 ++++++--------------- 1 files changed, 6 insertions(+), 15 deletions(-) Index: llvm/include/llvm/Target/TargetInstrInfo.h diff -u llvm/include/llvm/Target/TargetInstrInfo.h:1.117 llvm/include/llvm/Target/TargetInstrInfo.h:1.118 --- llvm/include/llvm/Target/TargetInstrInfo.h:1.117 Wed May 16 00:09:34 2007 +++ llvm/include/llvm/Target/TargetInstrInfo.h Wed May 16 15:43:42 2007 @@ -74,9 +74,9 @@ // operands in addition to the minimum number operands specified. const unsigned M_VARIABLE_OPS = 1 << 11; -// M_PREDICATED - Set if this instruction has a predicate that controls its -// execution. -const unsigned M_PREDICATED = 1 << 12; +// M_PREDICABLE - Set if this instruction has a predicate operand that +// controls execution. It may be set to 'always'. +const unsigned M_PREDICABLE = 1 << 12; // M_REMATERIALIZIBLE - Set if this instruction can be trivally re-materialized // at any time, e.g. constant generation, load from constant pool. @@ -208,8 +208,8 @@ return get(Opcode).Flags & M_RET_FLAG; } - bool isPredicated(MachineOpCode Opcode) const { - return get(Opcode).Flags & M_PREDICATED; + bool isPredicable(MachineOpCode Opcode) const { + return get(Opcode).Flags & M_PREDICABLE; } bool isReMaterializable(MachineOpCode Opcode) const { return get(Opcode).Flags & M_REMATERIALIZIBLE; @@ -389,19 +389,10 @@ abort(); } - /// isPredicatable - True if the instruction can be converted into a - /// predicated instruction. - virtual bool isPredicatable(MachineInstr *MI) const { - return false; - } - /// PredicateInstruction - Convert the instruction into a predicated /// instruction. virtual void PredicateInstruction(MachineInstr *MI, - std::vector &Cond) const { - assert(0 && "Target didn't implement PredicateInstruction!"); - abort(); - } + std::vector &Cond) const; /// getPointerRegClass - Returns a TargetRegisterClass used for pointer /// values. From evan.cheng at apple.com Wed May 16 15:45:43 2007 From: evan.cheng at apple.com (Evan Cheng) Date: Wed, 16 May 2007 15:45:43 -0500 Subject: [llvm-commits] CVS: llvm/utils/TableGen/CodeGenInstruction.h CodeGenTarget.cpp InstrInfoEmitter.cpp Message-ID: <200705162045.l4GKjhpE023672@zion.cs.uiuc.edu> Changes in directory llvm/utils/TableGen: CodeGenInstruction.h updated: 1.26 -> 1.27 CodeGenTarget.cpp updated: 1.88 -> 1.89 InstrInfoEmitter.cpp updated: 1.58 -> 1.59 --- Log message: Rename M_PREDICATED to M_PREDICABLE; opcode can be specified isPredicable without having a PredicateOperand. --- Diffs of the changes: (+4 -4) CodeGenInstruction.h | 2 +- CodeGenTarget.cpp | 4 ++-- InstrInfoEmitter.cpp | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) Index: llvm/utils/TableGen/CodeGenInstruction.h diff -u llvm/utils/TableGen/CodeGenInstruction.h:1.26 llvm/utils/TableGen/CodeGenInstruction.h:1.27 --- llvm/utils/TableGen/CodeGenInstruction.h:1.26 Mon Mar 19 01:20:37 2007 +++ llvm/utils/TableGen/CodeGenInstruction.h Wed May 16 15:45:24 2007 @@ -87,7 +87,7 @@ bool isCall; bool isLoad; bool isStore; - bool isPredicated; + bool isPredicable; bool isConvertibleToThreeAddress; bool isCommutable; bool isTerminator; Index: llvm/utils/TableGen/CodeGenTarget.cpp diff -u llvm/utils/TableGen/CodeGenTarget.cpp:1.88 llvm/utils/TableGen/CodeGenTarget.cpp:1.89 --- llvm/utils/TableGen/CodeGenTarget.cpp:1.88 Sun Apr 1 02:20:02 2007 +++ llvm/utils/TableGen/CodeGenTarget.cpp Wed May 16 15:45:24 2007 @@ -356,7 +356,7 @@ isLoad = R->getValueAsBit("isLoad"); isStore = R->getValueAsBit("isStore"); bool isTwoAddress = R->getValueAsBit("isTwoAddress"); - isPredicated = false; // set below. + isPredicable = R->getValueAsBit("isPredicable"); isConvertibleToThreeAddress = R->getValueAsBit("isConvertibleToThreeAddress"); isCommutable = R->getValueAsBit("isCommutable"); isTerminator = R->getValueAsBit("isTerminator"); @@ -404,7 +404,7 @@ if (unsigned NumArgs = MIOpInfo->getNumArgs()) NumOps = NumArgs; - isPredicated |= Rec->isSubClassOf("PredicateOperand"); + isPredicable |= Rec->isSubClassOf("PredicateOperand"); } else if (Rec->getName() == "variable_ops") { hasVariableNumberOfOperands = true; continue; Index: llvm/utils/TableGen/InstrInfoEmitter.cpp diff -u llvm/utils/TableGen/InstrInfoEmitter.cpp:1.58 llvm/utils/TableGen/InstrInfoEmitter.cpp:1.59 --- llvm/utils/TableGen/InstrInfoEmitter.cpp:1.58 Mon May 14 20:20:36 2007 +++ llvm/utils/TableGen/InstrInfoEmitter.cpp Wed May 16 15:45:24 2007 @@ -236,7 +236,7 @@ if (Inst.isCall) OS << "|M_CALL_FLAG"; if (Inst.isLoad) OS << "|M_LOAD_FLAG"; if (Inst.isStore || isStore) OS << "|M_STORE_FLAG"; - if (Inst.isPredicated) OS << "|M_PREDICATED"; + if (Inst.isPredicable) OS << "|M_PREDICABLE"; if (Inst.isConvertibleToThreeAddress) OS << "|M_CONVERTIBLE_TO_3_ADDR"; if (Inst.isCommutable) OS << "|M_COMMUTABLE"; if (Inst.isTerminator) OS << "|M_TERMINATOR_FLAG"; From evan.cheng at apple.com Wed May 16 15:47:19 2007 From: evan.cheng at apple.com (Evan Cheng) Date: Wed, 16 May 2007 15:47:19 -0500 Subject: [llvm-commits] CVS: llvm/lib/Target/Target.td Message-ID: <200705162047.l4GKlJRA023712@zion.cs.uiuc.edu> Changes in directory llvm/lib/Target: Target.td updated: 1.100 -> 1.101 --- Log message: Added isPredicable bit to class Instruction. --- Diffs of the changes: (+1 -0) Target.td | 1 + 1 files changed, 1 insertion(+) Index: llvm/lib/Target/Target.td diff -u llvm/lib/Target/Target.td:1.100 llvm/lib/Target/Target.td:1.101 --- llvm/lib/Target/Target.td:1.100 Tue May 8 16:05:24 2007 +++ llvm/lib/Target/Target.td Wed May 16 15:47:01 2007 @@ -183,6 +183,7 @@ bit isCommutable = 0; // Is this 3 operand instruction commutable? bit isTerminator = 0; // Is this part of the terminator for a basic block? bit isReMaterializable = 0; // Is this instruction re-materializable? + bit isPredicable = 0; // Is this instruction predicable? bit hasDelaySlot = 0; // Does this instruction have an delay slot? bit usesCustomDAGSchedInserter = 0; // Pseudo instr needing special help. bit hasCtrlDep = 0; // Does this instruction r/w ctrl-flow chains? From evan.cheng at apple.com Wed May 16 15:50:19 2007 From: evan.cheng at apple.com (Evan Cheng) Date: Wed, 16 May 2007 15:50:19 -0500 Subject: [llvm-commits] CVS: llvm/lib/Target/ARM/ARMInstrInfo.td Message-ID: <200705162050.l4GKoJdx023778@zion.cs.uiuc.edu> Changes in directory llvm/lib/Target/ARM: ARMInstrInfo.td updated: 1.102 -> 1.103 --- Log message: Make ARM::B isPredicable; Make Bcc and MOVCC condition option a normal operand so they are not predicable. --- Diffs of the changes: (+6 -5) ARMInstrInfo.td | 11 ++++++----- 1 files changed, 6 insertions(+), 5 deletions(-) Index: llvm/lib/Target/ARM/ARMInstrInfo.td diff -u llvm/lib/Target/ARM/ARMInstrInfo.td:1.102 llvm/lib/Target/ARM/ARMInstrInfo.td:1.103 --- llvm/lib/Target/ARM/ARMInstrInfo.td:1.102 Wed May 16 02:45:54 2007 +++ llvm/lib/Target/ARM/ARMInstrInfo.td Wed May 16 15:50:01 2007 @@ -278,7 +278,7 @@ } // ARM branch / cmov condition code operand. -def ccop : PredicateOperand { +def ccop : Operand { let PrintMethod = "printPredicateOperand"; } @@ -364,7 +364,7 @@ let Pattern = pattern; } -// Almost all ARM instructions are predicatable. +// Almost all ARM instructions are predicable. class I pattern> // FIXME: Set all opcodes to 0 for now. @@ -591,10 +591,11 @@ } let isBranch = 1, isTerminator = 1, noResults = 1 in { - // B can changed into a Bcc, but it is not "predicated". + // B is "predicable" since it can be xformed into a Bcc. let isBarrier = 1 in { - def B : AXI<(ops brtarget:$dst), "b $dst", - [(br bb:$dst)]>; + let isPredicable = 1 in + def B : AXI<(ops brtarget:$dst), "b $dst", + [(br bb:$dst)]>; def BR_JTr : JTI<(ops GPR:$dst, jtblock_operand:$jt, i32imm:$id), "mov", " pc, $dst \n$jt", From evan.cheng at apple.com Wed May 16 15:50:41 2007 From: evan.cheng at apple.com (Evan Cheng) Date: Wed, 16 May 2007 15:50:41 -0500 Subject: [llvm-commits] CVS: llvm/lib/Target/ARM/ARMInstrInfo.h ARMInstrInfo.cpp Message-ID: <200705162050.l4GKofxu023799@zion.cs.uiuc.edu> Changes in directory llvm/lib/Target/ARM: ARMInstrInfo.h updated: 1.8 -> 1.9 ARMInstrInfo.cpp updated: 1.25 -> 1.26 --- Log message: Removed isPredicable(). --- Diffs of the changes: (+0 -10) ARMInstrInfo.cpp | 9 --------- ARMInstrInfo.h | 1 - 2 files changed, 10 deletions(-) Index: llvm/lib/Target/ARM/ARMInstrInfo.h diff -u llvm/lib/Target/ARM/ARMInstrInfo.h:1.8 llvm/lib/Target/ARM/ARMInstrInfo.h:1.9 --- llvm/lib/Target/ARM/ARMInstrInfo.h:1.8 Tue May 15 21:01:49 2007 +++ llvm/lib/Target/ARM/ARMInstrInfo.h Wed May 16 15:50:23 2007 @@ -104,7 +104,6 @@ virtual bool ReverseBranchCondition(std::vector &Cond) const; // Predication support. - virtual bool isPredicatable(MachineInstr *MI) const; virtual void PredicateInstruction(MachineInstr *MI, std::vector &Cond) const; }; Index: llvm/lib/Target/ARM/ARMInstrInfo.cpp diff -u llvm/lib/Target/ARM/ARMInstrInfo.cpp:1.25 llvm/lib/Target/ARM/ARMInstrInfo.cpp:1.26 --- llvm/lib/Target/ARM/ARMInstrInfo.cpp:1.25 Tue May 15 21:01:49 2007 +++ llvm/lib/Target/ARM/ARMInstrInfo.cpp Wed May 16 15:50:23 2007 @@ -423,15 +423,6 @@ return false; } -bool ARMInstrInfo::isPredicatable(MachineInstr *MI) const { - const TargetInstrDescriptor *TID = MI->getInstrDescriptor(); - if (TID->Flags & M_PREDICATED) - return true; - - unsigned Opc = MI->getOpcode(); - return Opc == ARM::B || Opc == ARM::tB; -} - void ARMInstrInfo::PredicateInstruction(MachineInstr *MI, std::vector &Cond) const { unsigned Opc = MI->getOpcode(); From clattner at apple.com Wed May 16 15:50:49 2007 From: clattner at apple.com (Chris Lattner) Date: Wed, 16 May 2007 13:50:49 -0700 Subject: [llvm-commits] CVS: llvm/lib/Target/ARM/ARMInstrInfo.cpp ARMInstrInfo.h ARMTargetMachine.cpp ARMTargetMachine.h In-Reply-To: <836B1585-119C-49EE-87B4-D664ADC2A98E@apple.com> References: <200705160202.l4G227gp024237@zion.cs.uiuc.edu> <642A90E4-404B-47FE-9913-CD20F577BFDE@apple.com> <2108A5A5-A228-4C8A-89C0-4975F7D4A315@apple.com> <836B1585-119C-49EE-87B4-D664ADC2A98E@apple.com> Message-ID: <7BE7C23D-2B5F-4D68-BD38-9CD284493C7A@apple.com> >> Does that mean it can be predicated and the predicate is not set to >> always? What client do you expect for this? > > Right. The only potential client is the if-converter. If anything is > already predicated on a non-always predicate before if-conversion, it > needs to know. Random thought, please don't run ifcvt when -fast is enabled. > You proposed having two separate properties. I think we have need > one, i.e. whether something has a predicate field. Agreed? I think there are really two separate things here. 1. Can we predicate this instruction. If this bit is set, the if cvt pass can call "PredicateInstruction". I'd actually propose that we let PredicateInstruction return failure as well, if it can't predicate the instruction for some reason. 2. Does this instruction have a non-always predicate (i.e. is it conditionally executed). The second predicate could be used by livevars and the scavenger: if an instruction has a predicate, all defs should become read/modify/ write operations (or partial defs, or however you want to think about it). >>> For now, I think the if-converter >>> has to be a pre-emit pass. That means it will have to do some basic >>> CFG xform (i.e. remove dead blocks) unless we can move branch >>> folding >>> past it. :-( >> >> Ick. :( :( > > Indeed. But I don't see any other solution unless we want to teach > the scavenger all about predication. That may come one day, but not > now. Yes, that is fine. Long term, the scavenger should do the right thing. ideally we'd like to be able to ifcvt before RA. We *really* want to ifcvt before block layout / constant islands. >> However, why not just emit the predicated instructions from the >> isel? That would be much more efficient and clean, no? > > I don't think so, we can't have isel / scheduler producing code that > have multiple instructions targeting the same register. Right now the isel and sched work fine. The cmovs are marked as two- address instrs that r/m/w their operand and everything is fine. > And I don't > want to teach the if-converter about already predicated code. There are short-term vs long-term issues here. In the short term, I think is important that the ifcvt pass handle already predicated code, even if it is just very conservatively. Given that, we're talking about performance, not correctness. Agree? > We currently produce: > > mvn r3, #0 > cmp r0, #0 > mov r2, #1 > moveq r2, r3 > > But what we really want is > > cmp r0, #0 > mvneq r2, #0 > movne r2, #1 Given the input above, this seems like something the ifcvt pass could do on its own, before RA. All it needs to know is that the mvn is predicable and that 'moveq' is mov, and that moveq is predicated. Turning the former into the later is just a copy propagation issue then. The trick is that this has to be done before RA, because before RA the input code looks like: vr1 = mvn #0 cmp ... vr2 = mov #1 vr3 = moveq vr1, vr2 This is trivial to ifcvt into: vr1 = mvn #0 cmp ... vr3 = moveq vr1, #1 which is the code you want. > And then somehow turn this into: > _t1: > stmfd sp!, {r4, r7, lr} > add r7, sp, #4 > cmp r0, #0 > subeq r2, r1, #1 > addne r2, r1, #1 > mov r0, r4 > bl L_foo$stub > mov r0, r4 > ldmfd sp!, {r4, r7, pc} This is a separate issue, which needs to be addressed at isel time. -Chris From evan.cheng at apple.com Wed May 16 15:52:07 2007 From: evan.cheng at apple.com (Evan Cheng) Date: Wed, 16 May 2007 15:52:07 -0500 Subject: [llvm-commits] CVS: llvm/lib/Target/ARM/ARMTargetMachine.cpp Message-ID: <200705162052.l4GKq7BS023833@zion.cs.uiuc.edu> Changes in directory llvm/lib/Target/ARM: ARMTargetMachine.cpp updated: 1.27 -> 1.28 --- Log message: Move if-conversion after all passes that may use register scavenger. --- Diffs of the changes: (+3 -8) ARMTargetMachine.cpp | 11 +++-------- 1 files changed, 3 insertions(+), 8 deletions(-) Index: llvm/lib/Target/ARM/ARMTargetMachine.cpp diff -u llvm/lib/Target/ARM/ARMTargetMachine.cpp:1.27 llvm/lib/Target/ARM/ARMTargetMachine.cpp:1.28 --- llvm/lib/Target/ARM/ARMTargetMachine.cpp:1.27 Tue May 15 21:01:49 2007 +++ llvm/lib/Target/ARM/ARMTargetMachine.cpp Wed May 16 15:51:47 2007 @@ -88,19 +88,14 @@ return false; } -bool ARMTargetMachine::addPostRegAlloc(FunctionPassManager &PM, bool Fast) { - if (Fast || !EnableIfConversion || Subtarget.isThumb()) - return false; - - PM.add(createIfConverterPass()); - return true; -} - bool ARMTargetMachine::addPreEmitPass(FunctionPassManager &PM, bool Fast) { // FIXME: temporarily disabling load / store optimization pass for Thumb mode. if (!Fast && !DisableLdStOpti && !Subtarget.isThumb()) PM.add(createARMLoadStoreOptimizationPass()); + if (!Fast && EnableIfConversion && !Subtarget.isThumb()) + PM.add(createIfConverterPass()); + PM.add(createARMConstantIslandPass()); return true; } From evan.cheng at apple.com Wed May 16 15:53:04 2007 From: evan.cheng at apple.com (Evan Cheng) Date: Wed, 16 May 2007 15:53:04 -0500 Subject: [llvm-commits] CVS: llvm/lib/Target/ARM/ARMTargetMachine.h Message-ID: <200705162053.l4GKr4h3023862@zion.cs.uiuc.edu> Changes in directory llvm/lib/Target/ARM: ARMTargetMachine.h updated: 1.10 -> 1.11 --- Log message: Move if-conversion after all passes that may use register scavenger. --- Diffs of the changes: (+0 -1) ARMTargetMachine.h | 1 - 1 files changed, 1 deletion(-) Index: llvm/lib/Target/ARM/ARMTargetMachine.h diff -u llvm/lib/Target/ARM/ARMTargetMachine.h:1.10 llvm/lib/Target/ARM/ARMTargetMachine.h:1.11 --- llvm/lib/Target/ARM/ARMTargetMachine.h:1.10 Tue May 15 21:01:49 2007 +++ llvm/lib/Target/ARM/ARMTargetMachine.h Wed May 16 15:52:46 2007 @@ -53,7 +53,6 @@ // Pass Pipeline Configuration virtual bool addInstSelector(FunctionPassManager &PM, bool Fast); - virtual bool addPostRegAlloc(FunctionPassManager &PM, bool Fast); virtual bool addPreEmitPass(FunctionPassManager &PM, bool Fast); virtual bool addAssemblyEmitter(FunctionPassManager &PM, bool Fast, std::ostream &Out); From evan.cheng at apple.com Wed May 16 15:55:52 2007 From: evan.cheng at apple.com (Evan Cheng) Date: Wed, 16 May 2007 15:55:52 -0500 Subject: [llvm-commits] CVS: llvm/lib/CodeGen/MachineInstr.cpp Message-ID: <200705162055.l4GKtqWt023930@zion.cs.uiuc.edu> Changes in directory llvm/lib/CodeGen: MachineInstr.cpp updated: 1.149 -> 1.150 --- Log message: Rename M_PREDICATED to M_PREDICABLE; Moved isPredicable() to MachineInstr. --- Diffs of the changes: (+6 -2) MachineInstr.cpp | 8 ++++++-- 1 files changed, 6 insertions(+), 2 deletions(-) Index: llvm/lib/CodeGen/MachineInstr.cpp diff -u llvm/lib/CodeGen/MachineInstr.cpp:1.149 llvm/lib/CodeGen/MachineInstr.cpp:1.150 --- llvm/lib/CodeGen/MachineInstr.cpp:1.149 Mon May 14 20:26:09 2007 +++ llvm/lib/CodeGen/MachineInstr.cpp Wed May 16 15:55:34 2007 @@ -184,6 +184,10 @@ } } +bool MachineInstr::isPredicable() const { + return TID->Flags & M_PREDICABLE; +} + /// findRegisterUseOperandIdx() - Returns the MachineOperand that is a use of /// the specific register or -1 if it is not found. It further tightening /// the search criteria to a use that kills the register if isKill is true. @@ -212,7 +216,7 @@ // is used to represent the predicate. MachineOperand *MachineInstr::findFirstPredOperand() { const TargetInstrDescriptor *TID = getInstrDescriptor(); - if (TID->Flags & M_PREDICATED) { + if (TID->Flags & M_PREDICABLE) { for (unsigned i = 0, e = getNumOperands(); i != e; ++i) if ((TID->OpInfo[i].Flags & M_PREDICATE_OPERAND)) return &getOperand(i); @@ -244,7 +248,7 @@ /// copyPredicates - Copies predicate operand(s) from MI. void MachineInstr::copyPredicates(const MachineInstr *MI) { const TargetInstrDescriptor *TID = MI->getInstrDescriptor(); - if (TID->Flags & M_PREDICATED) { + if (TID->Flags & M_PREDICABLE) { for (unsigned i = 0, e = MI->getNumOperands(); i != e; ++i) { if ((TID->OpInfo[i].Flags & M_PREDICATE_OPERAND)) { const MachineOperand &MO = MI->getOperand(i); From evan.cheng at apple.com Wed May 16 15:56:28 2007 From: evan.cheng at apple.com (Evan Cheng) Date: Wed, 16 May 2007 15:56:28 -0500 Subject: [llvm-commits] CVS: llvm/lib/CodeGen/IfConversion.cpp Message-ID: <200705162056.l4GKuSNb023968@zion.cs.uiuc.edu> Changes in directory llvm/lib/CodeGen: IfConversion.cpp updated: 1.2 -> 1.3 --- Log message: Rename M_PREDICATED to M_PREDICABLE; Moved isPredicable() to MachineInstr. --- Diffs of the changes: (+12 -12) IfConversion.cpp | 24 ++++++++++++------------ 1 files changed, 12 insertions(+), 12 deletions(-) Index: llvm/lib/CodeGen/IfConversion.cpp diff -u llvm/lib/CodeGen/IfConversion.cpp:1.2 llvm/lib/CodeGen/IfConversion.cpp:1.3 --- llvm/lib/CodeGen/IfConversion.cpp:1.2 Wed May 16 00:11:10 2007 +++ llvm/lib/CodeGen/IfConversion.cpp Wed May 16 15:56:08 2007 @@ -68,7 +68,7 @@ std::vector &Candidates); bool IfConvertDiamond(BBInfo &BBI); bool IfConvertTriangle(BBInfo &BBI); - bool isBlockPredicatable(MachineBasicBlock *BB, + bool isBlockPredicable(MachineBasicBlock *BB, bool IgnoreTerm = false) const; void PredicateBlock(MachineBasicBlock *BB, std::vector &Cond, @@ -190,7 +190,7 @@ } bool IfConverter::IfConvertTriangle(BBInfo &BBI) { - if (isBlockPredicatable(BBI.TBB, true)) { + if (isBlockPredicable(BBI.TBB, true)) { // Predicate the 'true' block after removing its branch. TII->RemoveBranch(*BBI.TBB); PredicateBlock(BBI.TBB, BBI.Cond); @@ -214,28 +214,28 @@ } bool IfConverter::IfConvertDiamond(BBInfo &BBI) { - if (isBlockPredicatable(BBI.TBB, true) && - isBlockPredicatable(BBI.FBB, true)) { + if (isBlockPredicable(BBI.TBB, true) && + isBlockPredicable(BBI.FBB, true)) { std::vector Dups; if (!BBI.CMBB) { // No common merge block. Check if the terminators (e.g. return) are - // the same or predicatable. + // the same or predicable. MachineBasicBlock::iterator TT = BBI.TBB->getFirstTerminator(); MachineBasicBlock::iterator FT = BBI.FBB->getFirstTerminator(); while (TT != BBI.TBB->end() && FT != BBI.FBB->end()) { if (TT->isIdenticalTo(FT)) Dups.push_back(TT); // Will erase these later. - else if (!TII->isPredicatable(TT) && !TII->isPredicatable(FT)) + else if (!TT->isPredicable() && !FT->isPredicable()) return false; // Can't if-convert. Abort! ++TT; ++FT; } while (TT != BBI.TBB->end()) - if (!TII->isPredicatable(TT)) + if (!TT->isPredicable()) return false; // Can't if-convert. Abort! while (FT != BBI.FBB->end()) - if (!TII->isPredicatable(FT)) + if (!FT->isPredicable()) return false; // Can't if-convert. Abort! } @@ -270,17 +270,17 @@ return false; } -/// isBlockPredicatable - Returns true if the block is predicatable. In most -/// cases, that means all the instructions in the block has M_PREDICATED flag. +/// isBlockPredicable - Returns true if the block is predicable. In most +/// cases, that means all the instructions in the block has M_PREDICABLE flag. /// If IgnoreTerm is true, assume all the terminator instructions can be /// converted or deleted. -bool IfConverter::isBlockPredicatable(MachineBasicBlock *BB, +bool IfConverter::isBlockPredicable(MachineBasicBlock *BB, bool IgnoreTerm) const { for (MachineBasicBlock::iterator I = BB->begin(), E = BB->end(); I != E; ++I) { if (IgnoreTerm && TII->isTerminatorInstr(I->getOpcode())) continue; - if (!TII->isPredicatable(I)) + if (!I->isPredicable()) return false; } return true; From reid at x10sys.com Wed May 16 16:14:47 2007 From: reid at x10sys.com (Reid Spencer) Date: Wed, 16 May 2007 16:14:47 -0500 Subject: [llvm-commits] CVS: llvm-test/SingleSource/CustomChecked/Makefile flops.c oopack_v1p8.cpp stepanov_v1p2.cpp Message-ID: <200705162114.l4GLElpd024374@zion.cs.uiuc.edu> Changes in directory llvm-test/SingleSource/CustomChecked: Makefile updated: 1.13 -> 1.14 flops.c updated: 1.5 -> 1.6 oopack_v1p8.cpp updated: 1.3 -> 1.4 stepanov_v1p2.cpp updated: 1.2 -> 1.3 --- Log message: Excise the need for TestRunner or dejagnu from this directory. These test cases only need two things: a GREP pattern and special program ARGS. So, we simply provide that capability contained in this directory. This removes the dependency of CustomChecked on TestRunner, the vagaries of Tcl and DejaGnu, etc. --- Diffs of the changes: (+21 -9) Makefile | 23 +++++++++++++++++------ flops.c | 2 +- oopack_v1p8.cpp | 3 ++- stepanov_v1p2.cpp | 2 +- 4 files changed, 21 insertions(+), 9 deletions(-) Index: llvm-test/SingleSource/CustomChecked/Makefile diff -u llvm-test/SingleSource/CustomChecked/Makefile:1.13 llvm-test/SingleSource/CustomChecked/Makefile:1.14 --- llvm-test/SingleSource/CustomChecked/Makefile:1.13 Fri Nov 10 13:40:33 2006 +++ llvm-test/SingleSource/CustomChecked/Makefile Wed May 16 16:14:29 2007 @@ -36,24 +36,35 @@ $(PROGRAMS_TO_TEST:%=Output/%.run-lli): \ Output/%.run-lli: Output/%.llvm.bc $(LLI) - -$(TESTRUNR) $(SourceDir)/$(filter $*.%, $(Source)) "$(LLI) $(LLI_OPTS) $<" $@ + -ARGS=`grep ARGS: $(SourceDir)/$(filter $*.%, $(Source)) | sed 's/.*ARGS://'` ; \ + GREP=`grep GREP: $(SourceDir)/$(filter $*.%, $(Source)) | sed 's/.*GREP: *//'` ; \ + $(LLI) $(LLI_OPTS) $< $$ARGS | grep "$$GREP" > $@ ; \ + if test "$$?" -ne 0 ; then \ + echo $(PROGRAMS_TO_TEST:%=Output/%.run-jit): \ Output/%.run-jit: Output/%.llvm.bc $(LLI) - -$(TESTRUNR) $(SourceDir)/$(filter $*.%, $(Source)) "$(LLI) $(JIT_OPTS) $<" $@ + -ARGS=`grep ARGS: $(SourceDir)/$(filter $*.%, $(Source)) | sed 's/.*ARGS://'` ; \ + GREP=`grep GREP: $(SourceDir)/$(filter $*.%, $(Source)) | sed 's/.*GREP: *//'` ; \ + $(LLI) $(JIT_OPTS) $< $$ARGS | grep "$$GREP" > $@ $(PROGRAMS_TO_TEST:%=Output/%.run-llc): \ Output/%.run-llc: Output/%.llc - -$(TESTRUNR) $(SourceDir)/$(filter $*.%, $(Source)) "$< $(RUN_OPTIONS)" $@ + -ARGS=`grep ARGS: $(SourceDir)/$(filter $*.%, $(Source)) | sed 's/.*ARGS://'` ; \ + GREP=`grep GREP: $(SourceDir)/$(filter $*.%, $(Source)) | sed 's/.*GREP: *//'` ; \ + $< $(RUN_OPTIONS) $$ARGS | grep "$$GREP" > $@ $(PROGRAMS_TO_TEST:%=Output/%.run-llc-ls): \ Output/%.run-llc-ls: Output/%.llc-ls - -$(TESTRUNR) $(SourceDir)/$(filter $*.%, $(Source)) "$< $(RUN_OPTIONS)" $@ + -ARGS=`grep ARGS: $(SourceDir)/$(filter $*.%, $(Source)) | sed 's/.*ARGS://'` ; \ + GREP=`grep GREP: $(SourceDir)/$(filter $*.%, $(Source)) | sed 's/.*GREP: *//'` ; \ + $< $(RUN_OPTIONS) $$ARGS | grep "$$GREP" > $@ $(PROGRAMS_TO_TEST:%=Output/%.run-cbe): \ Output/%.run-cbe: Output/%.cbe - -$(TESTRUNR) $(SourceDir)/$(filter $*.%, $(Source)) "$< $(RUN_OPTIONS)" $@ - + -ARGS=`grep ARGS: $(SourceDir)/$(filter $*.%, $(Source)) | sed 's/.*ARGS://'` ; \ + GREP=`grep GREP: $(SourceDir)/$(filter $*.%, $(Source)) | sed 's/.*GREP: *//'` ; \ + $< $(RUN_OPTIONS) $$ARGS | grep "$$GREP" > $@ $(PROGRAMS_TO_TEST:%=Output/%.exe-lli): \ Output/%.exe-lli: Output/%.run-lli Index: llvm-test/SingleSource/CustomChecked/flops.c diff -u llvm-test/SingleSource/CustomChecked/flops.c:1.5 llvm-test/SingleSource/CustomChecked/flops.c:1.6 --- llvm-test/SingleSource/CustomChecked/flops.c:1.5 Fri Jun 24 21:50:00 2005 +++ llvm-test/SingleSource/CustomChecked/flops.c Wed May 16 16:14:29 2007 @@ -1,4 +1,4 @@ -/* RUN: %s | grep 'MFLOPS.4.' +/* GREP: MFLOPS.4. */ /*--------------------- Start flops.c source code ----------------------*/ Index: llvm-test/SingleSource/CustomChecked/oopack_v1p8.cpp diff -u llvm-test/SingleSource/CustomChecked/oopack_v1p8.cpp:1.3 llvm-test/SingleSource/CustomChecked/oopack_v1p8.cpp:1.4 --- llvm-test/SingleSource/CustomChecked/oopack_v1p8.cpp:1.3 Fri Oct 10 13:19:24 2003 +++ llvm-test/SingleSource/CustomChecked/oopack_v1p8.cpp Wed May 16 16:14:29 2007 @@ -1,4 +1,5 @@ -// RUN: %s Max=15000 Matrix=200 Complex=20000 Iterator=20000 | grep DONE +// ARGS: Max=15000 Matrix=200 Complex=20000 Iterator=20000 +// GREP: DONE //============================================================================= // Index: llvm-test/SingleSource/CustomChecked/stepanov_v1p2.cpp diff -u llvm-test/SingleSource/CustomChecked/stepanov_v1p2.cpp:1.2 llvm-test/SingleSource/CustomChecked/stepanov_v1p2.cpp:1.3 --- llvm-test/SingleSource/CustomChecked/stepanov_v1p2.cpp:1.2 Sat Oct 18 01:48:19 2003 +++ llvm-test/SingleSource/CustomChecked/stepanov_v1p2.cpp Wed May 16 16:14:29 2007 @@ -1,4 +1,4 @@ -// RUN: %s | grep 'Abstraction Penalty' +// GREP: Abstraction Penalty /* KAI's version of Stepanov Benchmark -- Version 1.2 Version 1.2 -- removed some special code for GNU systems that From lauro.venancio at gmail.com Wed May 16 16:16:02 2007 From: lauro.venancio at gmail.com (Lauro Ramos Venancio) Date: Wed, 16 May 2007 18:16:02 -0300 Subject: [llvm-commits] CVS: llvm/include/llvm/Target/TargetInstrInfo.h In-Reply-To: <200705162044.l4GKi5YM023629@zion.cs.uiuc.edu> References: <200705162044.l4GKi5YM023629@zion.cs.uiuc.edu> Message-ID: <9c10c9f0705161416i1211705fx2742f156902395a6@mail.gmail.com> > > > /// PredicateInstruction - Convert the instruction into a predicated > /// instruction. > virtual void PredicateInstruction(MachineInstr *MI, > - std::vector &Cond) > const { > - assert(0 && "Target didn't implement PredicateInstruction!"); > - abort(); > - } > + std::vector &Cond) > const; > I'm getting a build error because the function PredicateInstruction wasn't implemented. Lauro llvm[2]: Linking Debug executable llc /home/laurov/llvm/llvm/build/Debug/lib/LLVMIA64.o:(.rodata._ZTVN4llvm13IA64InstrInfoE[vtable for llvm::IA64InstrInfo]+0x3c): undefined reference to `llvm::TargetInstrInfo::PredicateInstruction(llvm::MachineInstr*, std::vector >&) const' /home/laurov/llvm/llvm/build/Debug/lib/LLVMAlpha.o:(.rodata._ZTVN4llvm14AlphaInstrInfoE[vtable for llvm::AlphaInstrInfo]+0x3c): undefined reference to `llvm::TargetInstrInfo::PredicateInstruction(llvm::MachineInstr*, std::vector >&) const' /home/laurov/llvm/llvm/build/Debug/lib/LLVMPowerPC.o:(.rodata._ZTVN4llvm12PPCInstrInfoE[vtable for llvm::PPCInstrInfo]+0x3c): undefined reference to `llvm::TargetInstrInfo::PredicateInstruction(llvm::MachineInstr*, std::vector >&) const' /home/laurov/llvm/llvm/build/Debug/lib/LLVMSparc.o:(.rodata._ZTVN4llvm14SparcInstrInfoE[vtable for llvm::SparcInstrInfo]+0x3c): undefined reference to `llvm::TargetInstrInfo::PredicateInstruction(llvm::MachineInstr*, std::vector >&) const' /home/laurov/llvm/llvm/build/Debug/lib/LLVMX86.o:(.rodata._ZTVN4llvm12X86InstrInfoE[vtable for llvm::X86InstrInfo]+0x3c): undefined reference to `llvm::TargetInstrInfo::PredicateInstruction(llvm::MachineInstr*, std::vector >&) const' /home/laurov/llvm/llvm/build/Debug/lib/libLLVMTarget.a(TargetInstrInfo.o):(.rodata._ZTVN4llvm15TargetInstrInfoE[vtable for llvm::TargetInstrInfo]+0x3c): more undefined references to `llvm::TargetInstrInfo::PredicateInstruction(llvm::MachineInstr*, std::vector >&) const' follow collect2: ld returned 1 exit status -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.cs.uiuc.edu/pipermail/llvm-commits/attachments/20070516/a619ee6d/attachment.html From evan.cheng at apple.com Wed May 16 16:17:55 2007 From: evan.cheng at apple.com (Evan Cheng) Date: Wed, 16 May 2007 14:17:55 -0700 Subject: [llvm-commits] CVS: llvm/lib/Target/ARM/ARMInstrInfo.cpp ARMInstrInfo.h ARMTargetMachine.cpp ARMTargetMachine.h In-Reply-To: <7BE7C23D-2B5F-4D68-BD38-9CD284493C7A@apple.com> References: <200705160202.l4G227gp024237@zion.cs.uiuc.edu> <642A90E4-404B-47FE-9913-CD20F577BFDE@apple.com> <2108A5A5-A228-4C8A-89C0-4975F7D4A315@apple.com> <836B1585-119C-49EE-87B4-D664ADC2A98E@apple.com> <7BE7C23D-2B5F-4D68-BD38-9CD284493C7A@apple.com> Message-ID: On May 16, 2007, at 1:50 PM, Chris Lattner wrote: >>> Does that mean it can be predicated and the predicate is not set to >>> always? What client do you expect for this? >> >> Right. The only potential client is the if-converter. If anything is >> already predicated on a non-always predicate before if-conversion, it >> needs to know. > > Random thought, please don't run ifcvt when -fast is enabled. > > >> You proposed having two separate properties. I think we have need >> one, i.e. whether something has a predicate field. Agreed? > > I think there are really two separate things here. > > 1. Can we predicate this instruction. If this bit is set, the if cvt > pass can call "PredicateInstruction". I'd actually propose that we > let PredicateInstruction return failure as well, if it can't > predicate the instruction for some reason. > > 2. Does this instruction have a non-always predicate (i.e. is it > conditionally executed). > > The second predicate could be used by livevars and the scavenger: if > an instruction has a predicate, all defs should become read/modify/ > write operations (or partial defs, or however you want to think about > it). These are two separate properties, yes. But only the former should be specified on the TargetInstrDescriptor. The later is a dynamic property and doesn't belong there. If we are doing ifcvt before reg allocation, livevars had better be smarter than just treating predicated instructions as read/mod/write. That's going to artificially lengthen a lot of live intervals. But that's a worry for another day. This scheme may work well enough for the scavenger though. > >>>> For now, I think the if-converter >>>> has to be a pre-emit pass. That means it will have to do some basic >>>> CFG xform (i.e. remove dead blocks) unless we can move branch >>>> folding >>>> past it. :-( >>> >>> Ick. :( :( >> >> Indeed. But I don't see any other solution unless we want to teach >> the scavenger all about predication. That may come one day, but not >> now. > > Yes, that is fine. Long term, the scavenger should do the right > thing. ideally we'd like to be able to ifcvt before RA. We *really* > want to ifcvt before block layout / constant islands. Let's talk short term. Is it possible to move branch folding and debug label folding passes to post-ifcvt? I don't see why not? > >>> However, why not just emit the predicated instructions from the >>> isel? That would be much more efficient and clean, no? >> >> I don't think so, we can't have isel / scheduler producing code that >> have multiple instructions targeting the same register. > > Right now the isel and sched work fine. The cmovs are marked as two- > address instrs that r/m/w their operand and everything is fine. > >> And I don't >> want to teach the if-converter about already predicated code. > > There are short-term vs long-term issues here. In the short term, I > think is important that the ifcvt pass handle already predicated > code, even if it is just very conservatively. Given that, we're > talking about performance, not correctness. Agree? For now selects are not predicable. The post register allocation ifcvg is not capable of dealing with them. It will know how to deal with already predicated code, but on the whole BB granularity only. > >> We currently produce: >> >> mvn r3, #0 >> cmp r0, #0 >> mov r2, #1 >> moveq r2, r3 >> >> But what we really want is >> >> cmp r0, #0 >> mvneq r2, #0 >> movne r2, #1 > > Given the input above, this seems like something the ifcvt pass could > do on its own, before RA. All it needs to know is that the mvn is > predicable and that 'moveq' is mov, and that moveq is predicated. > Turning the former into the later is just a copy propagation issue > then. > > The trick is that this has to be done before RA, because before RA > the input code looks like: Yeah, before RA. Evan > > vr1 = mvn #0 > cmp ... > vr2 = mov #1 > vr3 = moveq vr1, vr2 > > This is trivial to ifcvt into: > > vr1 = mvn #0 > cmp ... > vr3 = moveq vr1, #1 > > which is the code you want. > > > >> And then somehow turn this into: >> _t1: >> stmfd sp!, {r4, r7, lr} >> add r7, sp, #4 >> cmp r0, #0 >> subeq r2, r1, #1 >> addne r2, r1, #1 >> mov r0, r4 >> bl L_foo$stub >> mov r0, r4 >> ldmfd sp!, {r4, r7, pc} > > This is a separate issue, which needs to be addressed at isel time. > > -Chris > _______________________________________________ > llvm-commits mailing list > llvm-commits at cs.uiuc.edu > http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits From evan.cheng at apple.com Wed May 16 16:20:56 2007 From: evan.cheng at apple.com (Evan Cheng) Date: Wed, 16 May 2007 16:20:56 -0500 Subject: [llvm-commits] CVS: llvm/lib/Target/TargetInstrInfo.cpp Message-ID: <200705162120.l4GLKugV024537@zion.cs.uiuc.edu> Changes in directory llvm/lib/Target: TargetInstrInfo.cpp updated: 1.26 -> 1.27 --- Log message: Add default implementation of PredicateInstruction(). --- Diffs of the changes: (+20 -0) TargetInstrInfo.cpp | 20 ++++++++++++++++++++ 1 files changed, 20 insertions(+) Index: llvm/lib/Target/TargetInstrInfo.cpp diff -u llvm/lib/Target/TargetInstrInfo.cpp:1.26 llvm/lib/Target/TargetInstrInfo.cpp:1.27 --- llvm/lib/Target/TargetInstrInfo.cpp:1.26 Fri Dec 8 12:45:14 2006 +++ llvm/lib/Target/TargetInstrInfo.cpp Wed May 16 16:20:37 2007 @@ -59,3 +59,23 @@ MI->getOperand(1).unsetIsKill(); return MI; } + +void TargetInstrInfo::PredicateInstruction(MachineInstr *MI, + std::vector &Cond) const { + const TargetInstrDescriptor *TID = MI->getInstrDescriptor(); + assert((TID->Flags & M_PREDICABLE) && + "Predicating an unpredicable instruction!"); + + for (unsigned j = 0, i = 0, e = MI->getNumOperands(); i != e; ++i) { + if ((TID->OpInfo[i].Flags & M_PREDICATE_OPERAND)) { + MachineOperand &MO = MI->getOperand(i); + if (MO.isReg()) + MO.setReg(Cond[j].getReg()); + else if (MO.isImm()) + MO.setImm(Cond[j].getImmedValue()); + else if (MO.isMBB()) + MO.setMachineBasicBlock(Cond[j].getMachineBasicBlock()); + ++j; + } + } +} From evan.cheng at apple.com Wed May 16 16:20:59 2007 From: evan.cheng at apple.com (Evan Cheng) Date: Wed, 16 May 2007 14:20:59 -0700 Subject: [llvm-commits] CVS: llvm/include/llvm/Target/TargetInstrInfo.h In-Reply-To: <9c10c9f0705161416i1211705fx2742f156902395a6@mail.gmail.com> References: <200705162044.l4GKi5YM023629@zion.cs.uiuc.edu> <9c10c9f0705161416i1211705fx2742f156902395a6@mail.gmail.com> Message-ID: <6EAC615A-A0B6-426D-B644-202249BA8245@apple.com> It's there now. Evan On May 16, 2007, at 2:16 PM, Lauro Ramos Venancio wrote: > > /// PredicateInstruction - Convert the instruction into a > predicated > /// instruction. > virtual void PredicateInstruction(MachineInstr *MI, > - std::vector > &Cond) const { > - assert(0 && "Target didn't implement PredicateInstruction!"); > - abort(); > - } > + std::vector > &Cond) const; > > > I'm getting a build error because the function PredicateInstruction > wasn't implemented. > > Lauro > > llvm[2]: Linking Debug executable llc > /home/laurov/llvm/llvm/build/Debug/lib/LLVMIA64.o: > (.rodata._ZTVN4llvm13IA64InstrInfoE[vtable for llvm::IA64InstrInfo] > +0x3c): undefined reference to > `llvm::TargetInstrInfo::PredicateInstruction(llvm::MachineInstr*, > std::vector std::allocator >&) const' > /home/laurov/llvm/llvm/build/Debug/lib/LLVMAlpha.o: > (.rodata._ZTVN4llvm14AlphaInstrInfoE[vtable for > llvm::AlphaInstrInfo]+0x3c): undefined reference to > `llvm::TargetInstrInfo::PredicateInstruction(llvm::MachineInstr*, > std::vector std::allocator >&) const' > /home/laurov/llvm/llvm/build/Debug/lib/LLVMPowerPC.o: > (.rodata._ZTVN4llvm12PPCInstrInfoE[vtable for llvm::PPCInstrInfo] > +0x3c): undefined reference to > `llvm::TargetInstrInfo::PredicateInstruction(llvm::MachineInstr*, > std::vector std::allocator >&) const' > /home/laurov/llvm/llvm/build/Debug/lib/LLVMSparc.o: > (.rodata._ZTVN4llvm14SparcInstrInfoE[vtable for > llvm::SparcInstrInfo]+0x3c): undefined reference to > `llvm::TargetInstrInfo::PredicateInstruction(llvm::MachineInstr*, > std::vector std::allocator >&) const' > /home/laurov/llvm/llvm/build/Debug/lib/LLVMX86.o: > (.rodata._ZTVN4llvm12X86InstrInfoE[vtable for llvm::X86InstrInfo] > +0x3c): undefined reference to > `llvm::TargetInstrInfo::PredicateInstruction(llvm::MachineInstr*, > std::vector std::allocator >&) const' > /home/laurov/llvm/llvm/build/Debug/lib/libLLVMTarget.a > (TargetInstrInfo.o):(.rodata._ZTVN4llvm15TargetInstrInfoE[vtable > for llvm::TargetInstrInfo]+0x3c): more undefined references to > `llvm::TargetInstrInfo::PredicateInstruction(llvm::MachineInstr*, > std::vector std::allocator >&) const' follow > collect2: ld returned 1 exit status > From evan.cheng at apple.com Wed May 16 16:51:24 2007 From: evan.cheng at apple.com (Evan Cheng) Date: Wed, 16 May 2007 16:51:24 -0500 Subject: [llvm-commits] CVS: llvm/include/llvm/Target/TargetInstrInfo.h Message-ID: <200705162151.l4GLpOXL025701@zion.cs.uiuc.edu> Changes in directory llvm/include/llvm/Target: TargetInstrInfo.h updated: 1.118 -> 1.119 --- Log message: PredicateInstruction returns true if the operation was successful. --- Diffs of the changes: (+2 -2) TargetInstrInfo.h | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-) Index: llvm/include/llvm/Target/TargetInstrInfo.h diff -u llvm/include/llvm/Target/TargetInstrInfo.h:1.118 llvm/include/llvm/Target/TargetInstrInfo.h:1.119 --- llvm/include/llvm/Target/TargetInstrInfo.h:1.118 Wed May 16 15:43:42 2007 +++ llvm/include/llvm/Target/TargetInstrInfo.h Wed May 16 16:51:06 2007 @@ -390,8 +390,8 @@ } /// PredicateInstruction - Convert the instruction into a predicated - /// instruction. - virtual void PredicateInstruction(MachineInstr *MI, + /// instruction. It returns true if the operation was successful. + virtual bool PredicateInstruction(MachineInstr *MI, std::vector &Cond) const; /// getPointerRegClass - Returns a TargetRegisterClass used for pointer From evan.cheng at apple.com Wed May 16 16:52:54 2007 From: evan.cheng at apple.com (Evan Cheng) Date: Wed, 16 May 2007 16:52:54 -0500 Subject: [llvm-commits] CVS: llvm/lib/Target/TargetInstrInfo.cpp Message-ID: <200705162152.l4GLqsBW025788@zion.cs.uiuc.edu> Changes in directory llvm/lib/Target: TargetInstrInfo.cpp updated: 1.27 -> 1.28 --- Log message: PredicateInstruction returns true if the operation was successful. --- Diffs of the changes: (+19 -14) TargetInstrInfo.cpp | 33 +++++++++++++++++++-------------- 1 files changed, 19 insertions(+), 14 deletions(-) Index: llvm/lib/Target/TargetInstrInfo.cpp diff -u llvm/lib/Target/TargetInstrInfo.cpp:1.27 llvm/lib/Target/TargetInstrInfo.cpp:1.28 --- llvm/lib/Target/TargetInstrInfo.cpp:1.27 Wed May 16 16:20:37 2007 +++ llvm/lib/Target/TargetInstrInfo.cpp Wed May 16 16:52:35 2007 @@ -60,22 +60,27 @@ return MI; } -void TargetInstrInfo::PredicateInstruction(MachineInstr *MI, +bool TargetInstrInfo::PredicateInstruction(MachineInstr *MI, std::vector &Cond) const { + bool MadeChange = false; const TargetInstrDescriptor *TID = MI->getInstrDescriptor(); - assert((TID->Flags & M_PREDICABLE) && - "Predicating an unpredicable instruction!"); - - for (unsigned j = 0, i = 0, e = MI->getNumOperands(); i != e; ++i) { - if ((TID->OpInfo[i].Flags & M_PREDICATE_OPERAND)) { - MachineOperand &MO = MI->getOperand(i); - if (MO.isReg()) - MO.setReg(Cond[j].getReg()); - else if (MO.isImm()) - MO.setImm(Cond[j].getImmedValue()); - else if (MO.isMBB()) - MO.setMachineBasicBlock(Cond[j].getMachineBasicBlock()); - ++j; + if (TID->Flags & M_PREDICABLE) { + for (unsigned j = 0, i = 0, e = MI->getNumOperands(); i != e; ++i) { + if ((TID->OpInfo[i].Flags & M_PREDICATE_OPERAND)) { + MachineOperand &MO = MI->getOperand(i); + if (MO.isReg()) { + MO.setReg(Cond[j].getReg()); + MadeChange = true; + } else if (MO.isImm()) { + MO.setImm(Cond[j].getImmedValue()); + MadeChange = true; + } else if (MO.isMBB()) { + MO.setMachineBasicBlock(Cond[j].getMachineBasicBlock()); + MadeChange = true; + } + ++j; + } } } + return MadeChange; } From evan.cheng at apple.com Wed May 16 16:53:27 2007 From: evan.cheng at apple.com (Evan Cheng) Date: Wed, 16 May 2007 16:53:27 -0500 Subject: [llvm-commits] CVS: llvm/lib/Target/ARM/ARMInstrInfo.h ARMInstrInfo.cpp Message-ID: <200705162153.l4GLrRFq025832@zion.cs.uiuc.edu> Changes in directory llvm/lib/Target/ARM: ARMInstrInfo.h updated: 1.9 -> 1.10 ARMInstrInfo.cpp updated: 1.26 -> 1.27 --- Log message: PredicateInstruction returns true if the operation was successful. --- Diffs of the changes: (+8 -4) ARMInstrInfo.cpp | 10 +++++++--- ARMInstrInfo.h | 2 +- 2 files changed, 8 insertions(+), 4 deletions(-) Index: llvm/lib/Target/ARM/ARMInstrInfo.h diff -u llvm/lib/Target/ARM/ARMInstrInfo.h:1.9 llvm/lib/Target/ARM/ARMInstrInfo.h:1.10 --- llvm/lib/Target/ARM/ARMInstrInfo.h:1.9 Wed May 16 15:50:23 2007 +++ llvm/lib/Target/ARM/ARMInstrInfo.h Wed May 16 16:53:07 2007 @@ -104,7 +104,7 @@ virtual bool ReverseBranchCondition(std::vector &Cond) const; // Predication support. - virtual void PredicateInstruction(MachineInstr *MI, + virtual bool PredicateInstruction(MachineInstr *MI, std::vector &Cond) const; }; Index: llvm/lib/Target/ARM/ARMInstrInfo.cpp diff -u llvm/lib/Target/ARM/ARMInstrInfo.cpp:1.26 llvm/lib/Target/ARM/ARMInstrInfo.cpp:1.27 --- llvm/lib/Target/ARM/ARMInstrInfo.cpp:1.26 Wed May 16 15:50:23 2007 +++ llvm/lib/Target/ARM/ARMInstrInfo.cpp Wed May 16 16:53:07 2007 @@ -423,17 +423,21 @@ return false; } -void ARMInstrInfo::PredicateInstruction(MachineInstr *MI, +bool ARMInstrInfo::PredicateInstruction(MachineInstr *MI, std::vector &Cond) const { unsigned Opc = MI->getOpcode(); if (Opc == ARM::B || Opc == ARM::tB) { MI->setInstrDescriptor(get(Opc == ARM::B ? ARM::Bcc : ARM::tBcc)); MI->addImmOperand(Cond[0].getImmedValue()); - return; + return true; } MachineOperand *PMO = MI->findFirstPredOperand(); - PMO->setImm(Cond[0].getImmedValue()); + if (PMO) { + PMO->setImm(Cond[0].getImmedValue()); + return true; + } + return false; } From evan.cheng at apple.com Wed May 16 16:54:01 2007 From: evan.cheng at apple.com (Evan Cheng) Date: Wed, 16 May 2007 16:54:01 -0500 Subject: [llvm-commits] CVS: llvm/lib/Target/ARM/ARMInstrThumb.td Message-ID: <200705162154.l4GLs1hX025881@zion.cs.uiuc.edu> Changes in directory llvm/lib/Target/ARM: ARMInstrThumb.td updated: 1.27 -> 1.28 --- Log message: ARM::tB is also predicable. --- Diffs of the changes: (+5 -2) ARMInstrThumb.td | 7 +++++-- 1 files changed, 5 insertions(+), 2 deletions(-) Index: llvm/lib/Target/ARM/ARMInstrThumb.td diff -u llvm/lib/Target/ARM/ARMInstrThumb.td:1.27 llvm/lib/Target/ARM/ARMInstrThumb.td:1.28 --- llvm/lib/Target/ARM/ARMInstrThumb.td:1.27 Mon May 14 20:29:07 2007 +++ llvm/lib/Target/ARM/ARMInstrThumb.td Wed May 16 16:53:43 2007 @@ -207,8 +207,10 @@ [(ARMcall_nolink GPR:$dst)]>; } -let isBranch = 1, isTerminator = 1, isBarrier = 1 in { - def tB : TI<(ops brtarget:$dst), "b $dst", [(br bb:$dst)]>; +let isBranch = 1, isTerminator = 1, noResults = 1 in { + let isBarrier = 1 in { + let isPredicable = 1 in + def tB : TI<(ops brtarget:$dst), "b $dst", [(br bb:$dst)]>; // Far jump def tBfar : TIx2<(ops brtarget:$dst), "bl $dst\t@ far jump", []>; @@ -216,6 +218,7 @@ def tBR_JTr : TJTI<(ops GPR:$dst, jtblock_operand:$jt, i32imm:$id), "cpy pc, $dst \n\t.align\t2\n$jt", [(ARMbrjt GPR:$dst, tjumptable:$jt, imm:$id)]>; + } } let isBranch = 1, isTerminator = 1, noResults = 1, isBarrier = 1 in From evan.cheng at apple.com Wed May 16 16:54:55 2007 From: evan.cheng at apple.com (Evan Cheng) Date: Wed, 16 May 2007 16:54:55 -0500 Subject: [llvm-commits] CVS: llvm/lib/CodeGen/IfConversion.cpp Message-ID: <200705162154.l4GLstBK025937@zion.cs.uiuc.edu> Changes in directory llvm/lib/CodeGen: IfConversion.cpp updated: 1.3 -> 1.4 --- Log message: isBlockPredicable() always ignore terminal instructions; add comments. --- Diffs of the changes: (+23 -13) IfConversion.cpp | 36 +++++++++++++++++++++++------------- 1 files changed, 23 insertions(+), 13 deletions(-) Index: llvm/lib/CodeGen/IfConversion.cpp diff -u llvm/lib/CodeGen/IfConversion.cpp:1.3 llvm/lib/CodeGen/IfConversion.cpp:1.4 --- llvm/lib/CodeGen/IfConversion.cpp:1.3 Wed May 16 15:56:08 2007 +++ llvm/lib/CodeGen/IfConversion.cpp Wed May 16 16:54:37 2007 @@ -68,8 +68,7 @@ std::vector &Candidates); bool IfConvertDiamond(BBInfo &BBI); bool IfConvertTriangle(BBInfo &BBI); - bool isBlockPredicable(MachineBasicBlock *BB, - bool IgnoreTerm = false) const; + bool isBlockPredicable(MachineBasicBlock *BB) const; void PredicateBlock(MachineBasicBlock *BB, std::vector &Cond, bool IgnoreTerm = false); @@ -134,15 +133,19 @@ if (TII->AnalyzeBranch(*BB, BBI.TBB, BBI.FBB, BBI.Cond) || !BBI.TBB || BBI.Cond.size() == 0) return; + // Can't do it if 'true' block is already marked as to be if-converted. AnalyzeBlock(BBI.TBB); BBInfo &TBBI = BBAnalysis[BBI.TBB->getNumber()]; if (TBBI.Kind != ICNotClassfied) return; - + + // No false branch. This BB must end with a conditional branch and a + // fallthrough. if (!BBI.FBB) BBI.FBB = findFalseBlock(BB, BBI.TBB); assert(BBI.FBB && "Expected to find the fallthrough block!"); + // Can't do it if 'false' block is already marked as to be if-converted. AnalyzeBlock(BBI.FBB); BBInfo &FBBI = BBAnalysis[BBI.FBB->getNumber()]; if (FBBI.Kind != ICNotClassfied) @@ -178,6 +181,8 @@ return; } +/// InitialFunctionAnalysis - Analyze all blocks and find entries for all +/// if-conversion candidates. void IfConverter::InitialFunctionAnalysis(MachineFunction &MF, std::vector &Candidates) { for (MachineFunction::iterator I = MF.begin(), E = MF.end(); I != E; ++I) { @@ -189,8 +194,10 @@ } } +/// IfConvertTriangle - If convert a triangle sub-CFG. +/// bool IfConverter::IfConvertTriangle(BBInfo &BBI) { - if (isBlockPredicable(BBI.TBB, true)) { + if (isBlockPredicable(BBI.TBB)) { // Predicate the 'true' block after removing its branch. TII->RemoveBranch(*BBI.TBB); PredicateBlock(BBI.TBB, BBI.Cond); @@ -213,9 +220,10 @@ return false; } +/// IfConvertDiamond - If convert a diamond sub-CFG. +/// bool IfConverter::IfConvertDiamond(BBInfo &BBI) { - if (isBlockPredicable(BBI.TBB, true) && - isBlockPredicable(BBI.FBB, true)) { + if (isBlockPredicable(BBI.TBB) && isBlockPredicable(BBI.FBB)) { std::vector Dups; if (!BBI.CMBB) { // No common merge block. Check if the terminators (e.g. return) are @@ -230,7 +238,8 @@ ++TT; ++FT; } - + // One of the two pathes have more terminators, make sure they are all + // predicable. while (TT != BBI.TBB->end()) if (!TT->isPredicable()) return false; // Can't if-convert. Abort! @@ -272,13 +281,11 @@ /// isBlockPredicable - Returns true if the block is predicable. In most /// cases, that means all the instructions in the block has M_PREDICABLE flag. -/// If IgnoreTerm is true, assume all the terminator instructions can be -/// converted or deleted. -bool IfConverter::isBlockPredicable(MachineBasicBlock *BB, - bool IgnoreTerm) const { +/// It assume all the terminator instructions can be converted or deleted. +bool IfConverter::isBlockPredicable(MachineBasicBlock *BB) const { for (MachineBasicBlock::iterator I = BB->begin(), E = BB->end(); I != E; ++I) { - if (IgnoreTerm && TII->isTerminatorInstr(I->getOpcode())) + if (TII->isTerminatorInstr(I->getOpcode())) continue; if (!I->isPredicable()) return false; @@ -295,7 +302,10 @@ I != E; ++I) { if (IgnoreTerm && TII->isTerminatorInstr(I->getOpcode())) continue; - TII->PredicateInstruction(&*I, Cond); + if (!TII->PredicateInstruction(&*I, Cond)) { + cerr << "Unable to predication " << *I << "!\n"; + abort(); + } } } From sabre at nondot.org Wed May 16 17:27:55 2007 From: sabre at nondot.org (Chris Lattner) Date: Wed, 16 May 2007 17:27:55 -0500 Subject: [llvm-commits] CVS: llvm-test/SingleSource/Benchmarks/Misc-C++/stepanov_v1p2.cpp Message-ID: <200705162227.l4GMRtcE026681@zion.cs.uiuc.edu> Changes in directory llvm-test/SingleSource/Benchmarks/Misc-C++: stepanov_v1p2.cpp added (r1.1) --- Log message: move this out of customchecked --- Diffs of the changes: (+341 -0) stepanov_v1p2.cpp | 341 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 341 insertions(+) Index: llvm-test/SingleSource/Benchmarks/Misc-C++/stepanov_v1p2.cpp diff -c /dev/null llvm-test/SingleSource/Benchmarks/Misc-C++/stepanov_v1p2.cpp:1.1 *** /dev/null Wed May 16 17:27:46 2007 --- llvm-test/SingleSource/Benchmarks/Misc-C++/stepanov_v1p2.cpp Wed May 16 17:27:36 2007 *************** *** 0 **** --- 1,341 ---- + /* KAI's version of Stepanov Benchmark -- Version 1.2 + + Version 1.2 -- removed some special code for GNU systems that + GNU complained about without -O + + To verify how efficiently C++ (and in particular STL) is compiled by + the present day compilers, I composed a little benchmark. It outputs + 13 numbers. In the ideal world these numbers should be the same. In + the real world, however, ... + + The final number printed by the benchmark is a geometric mean of the + performance degradation factors of individual tests. It claims to + represent the factor by which you will be punished by your + compiler if you attempt to use C++ data abstraction features. I call + this number "Abstraction Penalty." + + As with any benchmark it is hard to prove such a claim; some people + told me that it does not represent typical C++ usage. It is, however, + a noteworthy fact that majority of the people who so object are + responsible for C++ compilers with disproportionatly large Abstraction + Penalty. + + The structure of the benchmark is really quite simple. It adds 2000 + doubles in an array 25000 times. It does it in 13 different ways that + introduce more and more abstract ways of doing it: + + 0 - uses simple Fortran-like for loop. + 1 - 12 use STL style accumulate template function with plus function object. + 1, 3, 5, 7 ,9, 11 use doubles. + 2, 4, 6, 8, 10, 12 use Double - double wrapped in a class. + 1, 2 - use regular pointers. + 3, 4 - use pointers wrapped in a class. + 5, 6 - use pointers wrapped in a reverse-iterator adaptor. + 7, 8 - use wrapped pointers wrapped in a reverse-iterator adaptor. + 9, 10 - use pointers wrapped in a reverse-iterator adaptor wrapped in a + reverse-iterator adaptor. + 11, 12 - use wrapped pointers wrapped in a reverse-iterator adaptor wrapped + in a reverse-iterator adaptor. + + All the operators on Double and different pointer-like classes are + declared inline. The only thing that is really measured is the penalty + for data abstraction. While templates are used, they do not cause any + performance degradation. They are used only to simplify the code. + + Since many of you are interested in the C++ performance issues, I + decided to post the benchmark here. I would appreciate if you run it + and (if possible) send me the results indicating what you have + compiled it with (CPU, clock rate, compiler, optimization level). It + is self contained and written so that it could be compiled even with + those compilers that at present cannot compile STL at all. + + It takes a fairly long time to run - on a really slow machine it might + take a full hour. (For those of you who want to run it faster - give + it a command line argument that specifies the number of + iterations. The default is 25000, but it gives an accurate predictions + even with 500 or a thousand.) + + + Alex Stepanov + stepanov at mti.sgi.com + + */ + + + #include + #include + #include + #include + #include + + template + inline int operator!=(const T& x, const T& y) { + return !(x == y); + } + + struct Double { + double value; + Double() {} + Double(const double& x) : value(x) {} + operator double() { return value; } + }; + + inline Double operator+(const Double& x, const Double& y) { + return Double(x.value + y.value); + } + + struct double_pointer { + double* current; + double_pointer() {} + double_pointer(double* x) : current(x) {} + double& operator*() const { return *current; } + double_pointer& operator++() { + ++current; + return *this; + } + double_pointer operator++(int) { + double_pointer tmp = *this; + ++*this; + return tmp; + } + double_pointer& operator--() { + --current; + return *this; + } + double_pointer operator--(int) { + double_pointer tmp = *this; + --*this; + return tmp; + } + }; + + + inline int operator==(const double_pointer& x, + const double_pointer& y) { + return x.current == y.current; + } + + struct Double_pointer { + Double* current; + Double_pointer() {} + Double_pointer(Double* x) : current(x) {} + Double& operator*() const { return *current; } + Double_pointer& operator++() { + ++current; + return *this; + } + Double_pointer operator++(int) { + Double_pointer tmp = *this; + ++*this; + return tmp; + } + Double_pointer& operator--() { + --current; + return *this; + } + Double_pointer operator--(int) { + Double_pointer tmp = *this; + --*this; + return tmp; + } + }; + + + inline int operator==(const Double_pointer& x, + const Double_pointer& y) { + return x.current == y.current; + } + + template + struct reverse_iterator { + RandomAccessIterator current; + reverse_iterator(RandomAccessIterator x) : current(x) {} + T& operator*() const { + RandomAccessIterator tmp = current; + return *(--tmp); + } + reverse_iterator& operator++() { + --current; + return *this; + } + reverse_iterator operator++(int) { + reverse_iterator tmp = *this; + ++*this; + return tmp; + } + reverse_iterator& operator--() { + ++current; + return *this; + } + reverse_iterator operator--(int) { + reverse_iterator tmp = *this; + --*this; + return tmp; + } + }; + + template + inline int operator==(const reverse_iterator& x, + const reverse_iterator& y) { + return x.current == y.current; + } + + struct { + double operator()(const double& x, const double& y) {return x + y; } + Double operator()(const Double& x, const Double& y) {return x + y; } + } plus; + + + template + Number accumulate(Iterator first, Iterator last, Number result) { + while (first != last) result = plus(result, *first++); + return result; + } + + int iterations = 25000; + #define SIZE 2000 + + int current_test = 0; + + double result_times[20]; + + void summarize() { + printf("\ntest absolute additions ratio with\n"); + printf("number time per second test0\n\n"); + int i; + double millions = (double(SIZE) * iterations)/1000000.; + for (i = 0; i < current_test; ++i) + printf("%2i %5.2fsec %5.2fM %.2f\n", + i, + result_times[i]/*make the output stable*/ * 0.00001, + millions/result_times[i]/*make the output stable*/ * 0.00001, + result_times[i]/result_times[0]/*make the output stable*/ * 0.00001); + double gmean_times = 0.; + double total_absolute_times = 0.; // sam added 12/05/95 + double gmean_rate = 0.; + double gmean_ratio = 0.; + for (i = 0; i < current_test; ++i) { + total_absolute_times += result_times[i]; // sam added 12/05/95 + gmean_times += log(result_times[i]); + gmean_rate += log(millions/result_times[i]); + gmean_ratio += log(result_times[i]/result_times[0]); + } + printf("mean: %5.2fsec %5.2fM %.2f\n", + exp(gmean_times/current_test/*make the output stable*/ * 0.00001), + exp(gmean_rate/current_test/*make the output stable*/ * 0.00001), + exp(gmean_ratio/current_test)/*make the output stable*/ * 0.00001); + printf("\nTotal absolute time: %.2f sec\n", total_absolute_times + /*make the output stable*/ * 0.00001); // sam added 12/05/95 + printf("\nAbstraction Penalty: %.2f\n\n", exp(gmean_ratio/current_test) + /*make the output stable*/ * 0.00001); + } + + clock_t start_time, end_time; + + inline void start_timer() { start_time = clock(); } + + inline double timer() { + end_time = clock(); + return (end_time - start_time)/double(CLOCKS_PER_SEC); + } + + const double init_value = 3.; + + + + double data[SIZE]; + + Double Data[SIZE]; + + inline void check(double result) { + if (result != SIZE * init_value) printf("test %i failed\n", current_test); + } + + void test0(double* first, double* last) { + start_timer(); + for(int i = 0; i < iterations; ++i) { + double result = 0; + for (int n = 0; n < last - first; ++n) result += first[n]; + check(result); + } + result_times[current_test++] = timer(); + } + + + template + void test(Iterator first, Iterator last, T zero) { + int i; + start_timer(); + for(i = 0; i < iterations; ++i) + check(double(accumulate(first, last, zero))); + result_times[current_test++] = timer(); + } + + template + void fill(Iterator first, Iterator last, T value) { + while (first != last) *first++ = value; + } + + + double d = 0.; + Double D = 0.; + typedef double* dp; + dp dpb = data; + dp dpe = data + SIZE; + typedef Double* Dp; + Dp Dpb = Data; + Dp Dpe = Data + SIZE; + typedef double_pointer dP; + dP dPb(dpb); + dP dPe(dpe); + typedef Double_pointer DP; + DP DPb(Dpb); + DP DPe(Dpe); + typedef reverse_iterator rdp; + rdp rdpb(dpe); + rdp rdpe(dpb); + typedef reverse_iterator rDp; + rDp rDpb(Dpe); + rDp rDpe(Dpb); + typedef reverse_iterator rdP; + rdP rdPb(dPe); + rdP rdPe(dPb); + typedef reverse_iterator rDP; + rDP rDPb(DPe); + rDP rDPe(DPb); + typedef reverse_iterator rrdp; + rrdp rrdpb(rdpe); + rrdp rrdpe(rdpb); + typedef reverse_iterator rrDp; + rrDp rrDpb(rDpe); + rrDp rrDpe(rDpb); + typedef reverse_iterator rrdP; + rrdP rrdPb(rdPe); + rrdP rrdPe(rdPb); + typedef reverse_iterator rrDP; + rrDP rrDPb(rDPe); + rrDP rrDPe(rDPb); + + int main(int argv, char** argc) { + if (argv > 1) iterations = atoi(argc[1]); + fill(dpb, dpe, double(init_value)); + fill(Dpb, Dpe, Double(init_value)); + test0(dpb, dpe); + test(dpb, dpe, d); + test(Dpb, Dpe, D); + test(dPb, dPe, d); + test(DPb, DPe, D); + test(rdpb, rdpe, d); + test(rDpb, rDpe, D); + test(rdPb, rdPe, d); + test(rDPb, rDPe, D); + test(rrdpb, rrdpe, d); + test(rrDpb, rrDpe, D); + test(rrdPb, rrdPe, d); + test(rrDPb, rrDPe, D); + summarize(); + return 0; + } + + + From sabre at nondot.org Wed May 16 17:29:05 2007 From: sabre at nondot.org (Chris Lattner) Date: Wed, 16 May 2007 17:29:05 -0500 Subject: [llvm-commits] CVS: llvm-test/SingleSource/Benchmarks/Misc-C++/stepanov_v1p2.cpp Message-ID: <200705162229.l4GMT5Gq026770@zion.cs.uiuc.edu> Changes in directory llvm-test/SingleSource/Benchmarks/Misc-C++: stepanov_v1p2.cpp updated: 1.1 -> 1.2 --- Log message: increase runtime --- Diffs of the changes: (+1 -1) stepanov_v1p2.cpp | 2 +- 1 files changed, 1 insertion(+), 1 deletion(-) Index: llvm-test/SingleSource/Benchmarks/Misc-C++/stepanov_v1p2.cpp diff -u llvm-test/SingleSource/Benchmarks/Misc-C++/stepanov_v1p2.cpp:1.1 llvm-test/SingleSource/Benchmarks/Misc-C++/stepanov_v1p2.cpp:1.2 --- llvm-test/SingleSource/Benchmarks/Misc-C++/stepanov_v1p2.cpp:1.1 Wed May 16 17:27:36 2007 +++ llvm-test/SingleSource/Benchmarks/Misc-C++/stepanov_v1p2.cpp Wed May 16 17:28:47 2007 @@ -192,7 +192,7 @@ return result; } -int iterations = 25000; +int iterations = 250000; #define SIZE 2000 int current_test = 0; From clattner at apple.com Wed May 16 17:40:24 2007 From: clattner at apple.com (clattner at apple.com) Date: Wed, 16 May 2007 15:40:24 -0700 (PDT) Subject: [llvm-commits] [127324] fix a crash on invalid code. Message-ID: <20070516224024.080D6301200B@src> Revision: 127324 Author: clattner Date: 2007-05-16 15:40:23 -0700 (Wed, 16 May 2007) Log Message: ----------- fix a crash on invalid code. Modified Paths: -------------- apple-local/branches/llvm/gcc/llvm-backend.cpp Modified: apple-local/branches/llvm/gcc/llvm-backend.cpp =================================================================== --- apple-local/branches/llvm/gcc/llvm-backend.cpp 2007-05-16 21:39:35 UTC (rev 127323) +++ apple-local/branches/llvm/gcc/llvm-backend.cpp 2007-05-16 22:40:23 UTC (rev 127324) @@ -1028,7 +1028,10 @@ // void llvm_emit_ctor_dtor(tree FnDecl, int InitPrio, int isCtor) { mark_decl_referenced(FnDecl); // Inform cgraph that we used the global. - Function *F = cast(DECL_LLVM(FnDecl)); + + if (errorcount || sorrycount) return; + + Function *F = cast_or_null(DECL_LLVM(FnDecl)); (isCtor ? &StaticCtors:&StaticDtors)->push_back(std::make_pair(F, InitPrio)); } From dalej at apple.com Wed May 16 17:45:49 2007 From: dalej at apple.com (Dale Johannesen) Date: Wed, 16 May 2007 17:45:49 -0500 Subject: [llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp Message-ID: <200705162245.l4GMjnld027196@zion.cs.uiuc.edu> Changes in directory llvm/lib/CodeGen/SelectionDAG: DAGCombiner.cpp updated: 1.306 -> 1.307 --- Log message: Don't fold bitconvert(load) for preinc/postdec loads. Likewise stores. --- Diffs of the changes: (+3 -1) DAGCombiner.cpp | 4 +++- 1 files changed, 3 insertions(+), 1 deletion(-) Index: llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp diff -u llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp:1.306 llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp:1.307 --- llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp:1.306 Wed May 16 01:37:59 2007 +++ llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp Wed May 16 17:45:30 2007 @@ -2685,6 +2685,7 @@ // fold (conv (load x)) -> (load (conv*)x) // If the resultant load doesn't need a higher alignment than the original! if (ISD::isNON_EXTLoad(N0.Val) && N0.hasOneUse() && + ISD::isUNINDEXEDLoad(N0.Val) && TLI.isOperationLegal(ISD::LOAD, VT)) { LoadSDNode *LN0 = cast(N0); unsigned Align = TLI.getTargetMachine().getTargetData()-> @@ -3563,7 +3564,8 @@ // If this is a store of a bit convert, store the input value if the // resultant store does not need a higher alignment than the original. - if (Value.getOpcode() == ISD::BIT_CONVERT && !ST->isTruncatingStore()) { + if (Value.getOpcode() == ISD::BIT_CONVERT && !ST->isTruncatingStore() && + ST->getAddressingMode() == ISD::UNINDEXED) { unsigned Align = ST->getAlignment(); MVT::ValueType SVT = Value.getOperand(0).getValueType(); unsigned OrigAlign = TLI.getTargetMachine().getTargetData()-> From lattner at cs.uiuc.edu Wed May 16 17:30:00 2007 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Wed, 16 May 2007 17:30:00 -0500 Subject: [llvm-commits] CVS: llvm-test/SingleSource/CustomChecked/stepanov_v1p2.cpp Message-ID: <200705162230.l4GMU0Jw026894@zion.cs.uiuc.edu> Changes in directory llvm-test/SingleSource/CustomChecked: stepanov_v1p2.cpp (r1.3) removed --- Log message: moved to Misc-C++ --- Diffs of the changes: (+0 -0) 0 files changed From tonic at nondot.org Wed May 16 18:26:01 2007 From: tonic at nondot.org (Tanya Lattner) Date: Wed, 16 May 2007 18:26:01 -0500 Subject: [llvm-commits] CVS: llvm/docs/ReleaseNotes.html Message-ID: <200705162326.l4GNQ1d5027923@zion.cs.uiuc.edu> Changes in directory llvm/docs: ReleaseNotes.html updated: 1.376 -> 1.377 --- Log message: Merged in both release announcement guts. --- Diffs of the changes: (+242 -13) ReleaseNotes.html | 255 +++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 files changed, 242 insertions(+), 13 deletions(-) Index: llvm/docs/ReleaseNotes.html diff -u llvm/docs/ReleaseNotes.html:1.376 llvm/docs/ReleaseNotes.html:1.377 --- llvm/docs/ReleaseNotes.html:1.376 Tue May 15 04:21:28 2007 +++ llvm/docs/ReleaseNotes.html Wed May 16 18:25:46 2007 @@ -96,8 +96,58 @@

    -
  • ding dong llvm-gcc3 is dead
  • -
  • bytecode -> bitcode
  • + +
  • llvm-gcc3 is now officially unsupported. Users are required to + upgrade to llvm-gcc4. llvm-gcc4 includes many features over + llvm-gcc3, is faster, and is much easier to build.
  • + +
  • Integer types are now completely signless. This means that we + have types like i8/i16/i32 instead of ubyte/sbyte/short/ushort/int + etc. LLVM operations that depend on sign have been split up into + separate instructions (PR950).
  • + +
  • Arbitrary bitwidth integers (e.g. i13, i36, i42, etc) are now + supported in the LLVM IR and optimizations. However, neither llvm-gcc nor + the native code generators support non-standard width integers + (PR1043).
  • + +
  • 'type planes' have been removed (PR411). + It is no longer possible to have two values with the same name in the + same symbol table. This simplifies LLVM internals, allowing significant + speedups.
  • + +
  • Global variables and functions in .ll files are now prefixed with + @ instead of % (PR645).
  • + +
  • The LLVM 1.x "bytecode" format has been replaced with a + completely new binary representation, named 'bitcode'. Because we + plan to maintain binary compatibility between LLVM 2.x ".bc" files, + this is an important change to get right. Bitcode brings a number of + advantages to the LLVM over the old bytecode format. It is denser + (files are smaller), more extensible, requires less memory to read, + is easier to keep backwards compatible (so LLVM 2.5 will read 2.0 .bc + files), and has many other nice features.
  • + +
  • Support was added for alignment values on load and store + instructions (PR400). This + allows the IR to express loads that are not + sufficiently aligned (e.g. due to pragma packed) or to capture extra + alignment information.
  • + +
  • LLVM now has a new MSIL backend. llc - march=msil will now turn LLVM + into MSIL (".net") bytecode. This is still fairly early development + with a number of limitations.
  • + +
  • Support has been added for 'protected visibility' in ELF.
  • + +
  • Thread Local Storage with the __thread keyword was implemented along + with added codegen support for Linux on X86 and ARM.
  • + +
  • ELF symbol aliases supported has been added.
  • + +
  • Added support for 'polymorphic intrinsics', allowing things like + llvm.ctpop to work on arbitrary width integers.
  • +
@@ -111,8 +161,30 @@

    -
  • many new supported things
  • -
  • easier to configure on linux
  • +
  • Precompiled Headers (PCH) support has been implemented.
  • + +
  • Support for external weak linkage and hidden visibility has been added.
  • + +
  • Packed structure types are now supported , which allows LLVM to express + unaligned data more naturally.
  • + +
  • Inline assembly support has been improved and many bugs were fixed. + The two large missing features are support for 80-bit floating point stack + registers on X86 (PR879), and support for inline asm in the C backend (PR802).
  • + +
  • Ada support, such as nested functions, has been improved.
  • + +
  • Tracking function parameter/result attributes is now possible.
  • + +
  • Its is now easier to configure llvm-gcc for linux.
  • + +
  • Many enhancements have been added, such as improvements to NON_LVALUE_EXPR, + arrays with non-zero base, structs with variable sized fields, + VIEW_CONVERT_EXPR, CEIL_DIV_EXPR, and many other things.
  • + +
  • Improved "attribute packed" support in the CFE, and handle many + other obscure struct layout cases correctly.
  • +
@@ -125,7 +197,29 @@

    -
  • +
  • The pass manager has been entirely rewritten, making it significantly + smaller, simpler, and more extensible. Support has been added to run + FunctionPasses interlaced with CallGraphSCCPasses.
  • + +
  • The -scalarrepl pass can now promote unions containing FP values into + a register, it can also handle unions of vectors of the same size.
  • + +
  • The predicate simplifier pass has been improved, making it able to do + simple value range propagation and eliminate more conditionals.
  • + +
  • There is a new new LoopPass class. The passmanager has been + modified to support it, and all existing loop xforms have been + converted to use it.
  • + +
  • There is a new loop rotation pass, which converts "for loops" into + "do/while loops", where the condition is at the bottom of the loop.
  • + +
  • ModulePasses may now use the result of FunctionPasses.
  • + +
  • The [Post]DominatorSet classes have been removed from LLVM and clients switched to use the far-more-efficient ETForest class instead.
  • + +
  • The ImmediateDominator class has also been removed, and clients have been switched to use DominatorTree instead.
  • +
@@ -140,14 +234,64 @@

In addition, the LLVM target description format has itself been extended in several ways:

Further, several significant target-specific enhancements are included in @@ -165,25 +309,110 @@

-

New features include: +

X86-Specific Code Generator Enhancements:

    -
  • +
  • The scheduler was improved to better reduce register pressure on + X86 and other targets that are register pressure sensitive
  • +
  • Linux/x86-64 support has been improved.
  • +
  • PIC support for linux/x86 has been added.
  • +
  • Support now exists for the GCC regparm attribute, and code in the X86 + backend to respect it.
  • +
  • Various improvements have been made for the X86-64 JIT, allowing it to + generate code in the large code model
  • +
  • LLVM now supports inline asm with multiple constraint letters per operand + (like "ri") which is common in X86 inline asms.
  • +
  • Early support has been added for X86 inline asm in the C backend.
  • +
  • Added support for the X86 MMX instruction set.
  • +
- + +

ARM-Specific Code Generator Enhancements: +

+ +
    +
  • Several improvements have been made to the ARM backend, including basic + inline asm support, weak linkage support, static ctor/dtor support and + many bug fixes.
  • +
  • There are major enhancements to the ARM backend, including support for ARM + v4-v6, vfp support, soft float, pre/postinc support, load/store multiple + generation, constant pool entry motion (to support large functions), + and enhancements to ARM constant island pass. +
  • +
  • Added support for Thumb code generation (an ARM subtarget).
  • +
  • More aggressive size analysis for ARM inline asm strings was + implemented.
  • +
+ +
+ +

Other Target-Specific Code Generator Enhancements: +

+ + +
-

+ +

This release includes many other improvements, including +performance work, specifically designed to tune datastructure +usage. This makes several critical components faster.

More specific changes include:

    -
  • +
  • ConstantBool, ConstantIntegral and ConstantInt classes have been merged + together, we now just have ConstantInt
  • + +
  • LLVM no longer relies on static destructors to shut itself down. Instead, + it lazily initializes itself and shuts down when llvm_shutdown() is + explicitly called.
  • + +
  • LLVM now has significantly fewer static constructors, reducing startup time. +
  • + +
  • Several classes have been refactored to reduce the amount of code that + gets linked into apps that use the JIT.
  • + +
  • Construction of intrinsic function declarations has been simplified.
  • + +
  • The llvm-upgrade tool now exists. This migrates LLVM 1.9 .ll files to + LLVM 2.0 syntax.
  • + +
  • The gccas/gccld tools have been removed.
  • + +
  • Support has been added to llvm-test for running on low-memory + or slow machines (make SMALL_PROBLEM_SIZE=1).
  • + +
  • llvm-test is now more portable and should build with MS Visual Studio.
  • +
@@ -610,7 +839,7 @@ src="http://www.w3.org/Icons/valid-html401" alt="Valid HTML 4.01!" /> The LLVM Compiler Infrastructure
- Last modified: $Date: 2007/05/15 09:21:28 $ + Last modified: $Date: 2007/05/16 23:25:46 $ From sabre at nondot.org Wed May 16 18:35:57 2007 From: sabre at nondot.org (Chris Lattner) Date: Wed, 16 May 2007 18:35:57 -0500 Subject: [llvm-commits] CVS: llvm-test/SingleSource/Benchmarks/Misc-C++/oopack_v1p8.cpp Message-ID: <200705162335.l4GNZvoR028137@zion.cs.uiuc.edu> Changes in directory llvm-test/SingleSource/Benchmarks/Misc-C++: oopack_v1p8.cpp added (r1.1) --- Log message: move this out of customchecked --- Diffs of the changes: (+707 -0) oopack_v1p8.cpp | 707 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 707 insertions(+) Index: llvm-test/SingleSource/Benchmarks/Misc-C++/oopack_v1p8.cpp diff -c /dev/null llvm-test/SingleSource/Benchmarks/Misc-C++/oopack_v1p8.cpp:1.1 *** /dev/null Wed May 16 18:35:49 2007 --- llvm-test/SingleSource/Benchmarks/Misc-C++/oopack_v1p8.cpp Wed May 16 18:35:39 2007 *************** *** 0 **** --- 1,707 ---- + //============================================================================= + // + // OOPACK - a benchmark for comparing OOP vs. C-style programming. + // Copyright (C) 1995 Arch D. Robison + // + // This program is free software; you can redistribute it and/or modify + // it under the terms of the GNU General Public License as published by + // the Free Software Foundation; either version 2 of the License, or + // (at your option) any later version. + // + // This program is distributed in the hope that it will be useful, + // but WITHOUT ANY WARRANTY; without even the implied warranty of + // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + // GNU General Public License for more details. + // + // For a copy of the GNU General Public License, write to the Free Software + // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + // + //============================================================================= + // + // OOPACK: a benchmark for comparing OOP vs. C-style programming. + // + // Version: 1.7 + // + // Author: Arch D. Robison (robison at kai.com) + // Kuck & Associates + // 1906 Fox Dr. + // Champaign IL 61820 + // + // Web Info: http://www.kai.com/oopack/oopack.html + // + // Code last revised: November 21, 1995 + // Comments last revised: March 23, 1998 + // + // This benchmark program contains a suite of tests that measure the relative + // performance of object-oriented-programming (OOP) in C++ versus just writing + // plain C-style code in C++. All of the tests are written so that a + // compiler can in principle transform the OOP code into the C-style code. + // After you run this benchmark and discover just how much you are paying to + // use object-oriented programming, you will probably say: OOP? ACK! + // (Unless, of course, you have Kuck & Associates' C++ compiler.) + // + // TO COMPILE + // + // Compile with your favorite C++ compiler. E.g. ``CC -O2 oopack.C''. + // On most machines, no special command-line options are required. + // For Suns only, you need to define the symbol ``sun4''. + // E.g. ``g++ -O -Dsun4 oopack.C''. + // + // TO RUN + // + // To run the benchmark, run + // + // a.out Max=50000 Matrix=500 Complex=20000 Iterator=50000 + // + // This runs the four tests for the specified number of iterations. + // E.g., the Max test is run for 50000 iterations. You may want to + // adjust the number of iterations to be small enough to get + // an answer in reasonable time, but large enough to get a reasonably + // accurate answer. + // + // INTERPRETING THE RESULTS + // + // Below is an example command line and the program's output. + // We used an SGI Origin 200 running IRIX 6.4 (64bit). + // + // % KCC_3.3a +K3 -O2 oopack.C + // + // % a.out Max=100000 Matrix=2000 Complex=200000 Iterator=200000 + // OOPACK Version 1.7 + // + // For results on various systems and compilers, examine this Web Page: + // http://www.kai.com/oopack/oopack.html + // + // Report your results by sending e-mail to oopack at kai.com. + // For a run to be accepted, adjust the number of iterations for each test + // so that each time reported is greater than 10 seconds. + // + // Send this output, along with: + // + // * your + // + name ------------------- + // + company/institution ---- + // + // * the compiler + // + name ------------------- + // + version number --------- + // + options used ----------- + // + // * the operating system + // + name ------------------- + // + version number --------- + // + // * the machine + // + manufacturer ----------- + // + model number ----------- + // + processor clock speed -- + // + cache memory size ------ + // + // Seconds Mflops + // Test Iterations C OOP C OOP Ratio + // ---- ---------- ----------- ----------- ----- + // Max 100000 1.4 1.4 71.4 71.4 1.0 + // Matrix 2000 3.4 3.3 147.9 150.2 1.0 + // Complex 200000 7.8 7.3 204.9 218.9 0.9 + // Iterator 200000 2.2 2.2 177.8 177.8 1.0 + // + // + // The ``Test'' column gives the names of the four tests that are run. + // The ``Iterations'' column gives the number of iterations that a test + // was run. The two ``Seconds'' columns give the C-style and OOP-style + // running times for a test. The two ``Mflops'' columns give the + // corresponding megaflop rates. The ``Ratio'' column gives the ratio + // between the times. + // + // Beware that a low ``Ratio'' could indicate either that the OOP-style + // code is compiled very well, or that the C-style code is compiled poorly. + // OOPACK performance figures for KAI's C++ and some other compilers + // can be found in http://www.kai.com/oopack/oopack.html. + // + // Revision History + // 9/17/93 Version 1.0 released + // 10/5/93 Allow results to be printed even if checksums do not match. + // 10/5/93 Increased ``Tolerance'' to allow 10-second runs on RS/6000. + // 10/5/93 Version 1.1 released + // 1/10/94 Change author's address from Shell to KAI + // 1/13/94 Added #define's for conditional compilation of individual tests + // 1/21/94 Converted test functions to virtual members of class Benchmark. + // 10/11/94 Added routine to inform user of command-line usage. + // 10/11/94 Version 1.5 released. + // 11/21/95 V1.6 Added "mail results to oopack at kai.com" message in output + // 11/28/95 V1.7 Added company/institution to requested information + + //============================================================================= + + #include + #include + #include + #include + #include + #include + #include + #include + + // + // The source-code begins with the benchmark computations themselves and + // ends with code for collecting statistics. Each benchmark ``Foo'' is + // a class FooBenchmark derived from class Benchmark. The relevant methods + // are: + // + // init - Initialize the input data for the benchmark + // + // c_style - C-style code + // + // oop_style - OOP-style code + // + // check - computes number of floating-point operations and a checksum. + // + const int BenchmarkListMax = 4; + + class Benchmark { + public: + void time_both( int iteration_count ) const; + void time_one( void (Benchmark::*function)() const, int iterations, double& sec, double& Mflop, double& checksum ) const; + virtual const char * name() const = 0; + virtual void init() const = 0; + virtual void c_style() const = 0; + virtual void oop_style() const = 0; + virtual void check( int iterations, double& flops, double& checksum ) const = 0; + static Benchmark * find( const char * name ); + private: + static Benchmark * list[BenchmarkListMax]; + static int count; + protected: + Benchmark() {list[count++] = this;} + }; + + // The initializer for Benchmark::count *must* precede the declarations + // of derived of class Benchmark. + int Benchmark::count = 0; + Benchmark * Benchmark::list[BenchmarkListMax]; + + // + // The ``iterations'' argument is the number of times that the benchmark + // computation was called. The computed checksum that ensures that the + // C-style code and OOP code are computing the same result. This + // variable also prevents really clever optimizers from removing the + // the guts of the computations that otherwise would be unused. + // + + // Each of the following symbols must be defined to enable a test, or + // undefined to disable a test. The reason for doing this with the + // preprocessor is that some compilers may choke on specific tests. + #define HAVE_MAX 1 + #define HAVE_MATRIX 1 + #define HAVE_COMPLEX 1 + #define HAVE_ITERATOR 1 + + const int N = 1000; + + #if HAVE_MAX + //============================================================================= + // + // Max benchmark + // + // This benchmark measures how well a C++ compiler inlines a function that + // returns the result of a comparison. + // + // The functions C_Max and OOP_Max compute the maximum over a vector. + // The only difference is that C_Max writes out the comparison operation + // explicitly, and OOP_Max calls an inline function to do the comparison. + // + // This benchmark is included because some compilers do not compile + // inline functions into conditional branches as well as they might. + // + const int M = 1000; // Dimension of vector + double U[M]; // The vector + double MaxResult; // Result of max computation + + class MaxBenchmark: public Benchmark { + private: + const char * name() const {return "Max";} + void init() const; + void c_style() const; + void oop_style() const; + void check( int iterations, double& flops, double& checksum ) const; + } TheMaxBenchmark; + + void MaxBenchmark::c_style() const // Compute max of vector (C-style) + { + double max = U[0]; + for( int k=1; k max ) + max=U[k]; + MaxResult = max; + } + + inline int Greater( double i, double j ) + { + return i>j; + } + + void MaxBenchmark::oop_style() const // Compute max of vector (OOP-style) + { + double max = U[0]; + for( int k=1; k=limit;} // True iff no more elements + Iterator( double * array1, int limit1 ) : + index(0), + limit(limit1), + array(array1) + {} + }; + + void IteratorBenchmark::oop_style() const // Compute dot-product with OOP-style code + { + double sum = 0; + for( Iterator ai(A,N), bi(B,N); !ai.done(); ai.next(), bi.next() ) + sum += ai.look()*bi.look(); + IteratorResult = sum; + } + + void IteratorBenchmark::init() const + { + for( int i=0; i*function)(); + + // Initialize and run code. + init(); + clock_t t0 = clock(); + for( int k=0; k*function)(); + clock_t t1 = clock(); + + // Update checksum and compute number of floating-point operations. + double flops; + check( iterations, flops, checksum ); + + sec = (t1-t0) / (double)CLOCKS_PER_SEC; + Mflop = flops/sec*1e-6; + + } + + // + // The variable ``C_Seconds'' is the time in seconds in which to run the + // C-style benchmarks. + // + double C_Seconds = 1; + + // + // The variable ``Tolerance'' is the maximum allowed relative difference + // between the C and OOP checksums. Machines with multiply-add + // instructions may produce different answers when they use those + // instructions rather than separate instructions. + // + // There is nothing magic about the 32, it's just the result of tweaking. + // + const double Tolerance = 64*DBL_EPSILON; + + Benchmark * Benchmark::find( const char * name ) { + for( int i=0; iname() )== 0 ) + return list[i]; + return NULL; + } + + // + // Benchmark::time_both + // + // Runs the C and Oop versions of a benchmark computation, and print the + // results. + // + // Inputs + // name = name of the benchmark + // c_style = benchmark written in C-style code + // oop_style = benchmark written in OOP-style code + // check = routine to compute checksum on answer + // + void Benchmark::time_both( int iterations ) const { + // Run the C-style code. + double c_sec, c_Mflop, c_checksum; + time_one( &Benchmark::c_style, iterations, c_sec, c_Mflop, c_checksum ); + + // Run the OOP-style code. + double oop_sec, oop_Mflop, oop_checksum; + time_one( &Benchmark::oop_style, iterations, oop_sec, oop_Mflop, oop_checksum ); + + // Compute execution-time ratio of OOP to C. This is also the + // reciprocal of the Megaflop ratios. + double ratio = oop_sec/c_sec; + + // Compute the absolute and relative differences between the checksums + // for the two codes. + double diff = c_checksum - oop_checksum; + double min = c_checksum < oop_checksum ? c_checksum : oop_checksum; + double rel = diff/min; + + // If the relative difference exceeds the tolerance, print an error-message, + // otherwise print the statistics. + if( rel > Tolerance || rel < -Tolerance ) { + printf( "%-10s: warning: relative checksum error of %g between C (%g) and oop (%g)\n", + name(), rel, c_checksum, oop_checksum ); + } + + #if 0 + // original, useful for getting timings + printf( "%-10s %10d %5.1f %5.1f %5.1f %5.1f %5.1f\n", + name(), iterations, c_sec, oop_sec, c_Mflop, oop_Mflop, ratio ); + #else + // hacked to not produce output. + printf( "%-10s %10d\n", + name(), iterations); + #endif + } + + const char * Version = "Version 1.7"; // The OOPACK version number + + void Usage( int /*argc*/, char * argv[] ) { + printf( "Usage:\t%s test1=iterations1 test2=iterations2 ...\n", argv[0] ); + printf( "E.g.:\ta.out Max=5000 Matrix=50 Complex=2000 Iterator=5000\n" ); + exit(1); + } + + int main( int argc, char **argv ) + { + // The available benchmarks are automatically put into the list of available benchmarks + // by the constructor for Benchmark. + char str1[] = "a.out"; + char str2[] = "Max=15000"; + char str3[] = "Matrix=200"; + char str4[] = "Complex=2000"; + char str5[] = "Iterator=20000"; + const char *ActualArgs[] = { str1, str2, str3, str4, str5, 0 }; + argv = (char**)ActualArgs; + argc = 5; + + // Check if user does not know command-line format. + if( argc==1 ) { + Usage( argc, argv ); + } + int i; + for( i=1; itime_both( test_count ); + } + } + } + + /* Print blank line. */ + printf("\nDONE!\n"); + + return 0; + } From lattner at cs.uiuc.edu Wed May 16 18:38:27 2007 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Wed, 16 May 2007 18:38:27 -0500 Subject: [llvm-commits] CVS: llvm-test/SingleSource/CustomChecked/oopack_v1p8.cpp Message-ID: <200705162338.l4GNcR1B028225@zion.cs.uiuc.edu> Changes in directory llvm-test/SingleSource/CustomChecked: oopack_v1p8.cpp (r1.4) removed --- Log message: this is now in SingleSource/Benchmarks/Misc-C++ --- Diffs of the changes: (+0 -0) 0 files changed From evan.cheng at apple.com Wed May 16 18:44:28 2007 From: evan.cheng at apple.com (Evan Cheng) Date: Wed, 16 May 2007 18:44:28 -0500 Subject: [llvm-commits] CVS: llvm/include/llvm/Target/TargetInstrInfo.h TargetLowering.h Message-ID: <200705162344.l4GNiSuF028359@zion.cs.uiuc.edu> Changes in directory llvm/include/llvm/Target: TargetInstrInfo.h updated: 1.119 -> 1.120 TargetLowering.h updated: 1.124 -> 1.125 --- Log message: Add target hook to specify block size limit for if-conversion. --- Diffs of the changes: (+21 -0) TargetInstrInfo.h | 5 +++++ TargetLowering.h | 16 ++++++++++++++++ 2 files changed, 21 insertions(+) Index: llvm/include/llvm/Target/TargetInstrInfo.h diff -u llvm/include/llvm/Target/TargetInstrInfo.h:1.119 llvm/include/llvm/Target/TargetInstrInfo.h:1.120 --- llvm/include/llvm/Target/TargetInstrInfo.h:1.119 Wed May 16 16:51:06 2007 +++ llvm/include/llvm/Target/TargetInstrInfo.h Wed May 16 18:44:08 2007 @@ -394,6 +394,11 @@ virtual bool PredicateInstruction(MachineInstr *MI, std::vector &Cond) const; + /// getBlockSize - Calculate the size of the specified MachineBasicBlock. + /// Note the result may not be 100% accurate especially if there are inline + /// asm's in the block. + virtual unsigned getBlockSize(MachineBasicBlock *MBB) const; + /// getPointerRegClass - Returns a TargetRegisterClass used for pointer /// values. virtual const TargetRegisterClass *getPointerRegClass() const { Index: llvm/include/llvm/Target/TargetLowering.h diff -u llvm/include/llvm/Target/TargetLowering.h:1.124 llvm/include/llvm/Target/TargetLowering.h:1.125 --- llvm/include/llvm/Target/TargetLowering.h:1.124 Sat Apr 28 00:42:38 2007 +++ llvm/include/llvm/Target/TargetLowering.h Wed May 16 18:44:08 2007 @@ -434,6 +434,12 @@ return JumpBufAlignment; } + /// getIfCvtBlockLimit - returns the target specific if-conversion block size + /// limit. Any block whose size is greater should not be predicated. + virtual unsigned getIfCvtBlockSizeLimit() const { + return IfCvtBlockSizeLimit; + } + /// getPreIndexedAddressParts - returns true by value, base pointer and /// offset pointer and addressing mode by reference if the node's address /// can be legally represented as pre-indexed load / store address. @@ -750,6 +756,12 @@ void setJumpBufAlignment(unsigned Align) { JumpBufAlignment = Align; } + + /// setIfCvtBlockSizeLimit - Set the target's if-conversion block size limit; + /// default is 2. + void setIfCvtBlockSizeLimit(unsigned Limit) { + IfCvtBlockSizeLimit = Limit; + } public: @@ -982,6 +994,10 @@ /// JumpBufAlignment - The alignment, in bytes, of the target's jmp_buf /// buffers unsigned JumpBufAlignment; + + /// IfCvtBlockSizeLimit - The maximum allowed block size for if-conversion. + /// + unsigned IfCvtBlockSizeLimit; /// StackPointerRegisterToSaveRestore - If set to a physical register, this /// specifies the register that llvm.savestack/llvm.restorestack should save From evan.cheng at apple.com Wed May 16 18:46:11 2007 From: evan.cheng at apple.com (Evan Cheng) Date: Wed, 16 May 2007 18:46:11 -0500 Subject: [llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/TargetLowering.cpp Message-ID: <200705162346.l4GNkB6j028404@zion.cs.uiuc.edu> Changes in directory llvm/lib/CodeGen/SelectionDAG: TargetLowering.cpp updated: 1.113 -> 1.114 --- Log message: Add target hook to specify block size limit for if-conversion. --- Diffs of the changes: (+1 -0) TargetLowering.cpp | 1 + 1 files changed, 1 insertion(+) Index: llvm/lib/CodeGen/SelectionDAG/TargetLowering.cpp diff -u llvm/lib/CodeGen/SelectionDAG/TargetLowering.cpp:1.113 llvm/lib/CodeGen/SelectionDAG/TargetLowering.cpp:1.114 --- llvm/lib/CodeGen/SelectionDAG/TargetLowering.cpp:1.113 Thu May 3 11:54:34 2007 +++ llvm/lib/CodeGen/SelectionDAG/TargetLowering.cpp Wed May 16 18:45:53 2007 @@ -157,6 +157,7 @@ SchedPreferenceInfo = SchedulingForLatency; JumpBufSize = 0; JumpBufAlignment = 0; + IfCvtBlockSizeLimit = 2; InitLibcallNames(LibcallRoutineNames); InitCmpLibcallCCs(CmpLibcallCCs); From sabre at nondot.org Wed May 16 18:49:21 2007 From: sabre at nondot.org (Chris Lattner) Date: Wed, 16 May 2007 18:49:21 -0500 Subject: [llvm-commits] CVS: llvm-test/SingleSource/Benchmarks/Misc/flops.c Message-ID: <200705162349.l4GNnLE8028527@zion.cs.uiuc.edu> Changes in directory llvm-test/SingleSource/Benchmarks/Misc: flops.c added (r1.1) --- Log message: move this from SingleSource/CustomChecked --- Diffs of the changes: (+1175 -0) flops.c | 1175 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 1175 insertions(+) Index: llvm-test/SingleSource/Benchmarks/Misc/flops.c diff -c /dev/null llvm-test/SingleSource/Benchmarks/Misc/flops.c:1.1 *** /dev/null Wed May 16 18:49:13 2007 --- llvm-test/SingleSource/Benchmarks/Misc/flops.c Wed May 16 18:49:03 2007 *************** *** 0 **** --- 1,1175 ---- + /*--------------------- Start flops.c source code ----------------------*/ + + /*****************************/ + /* flops.c */ + /* Version 2.0, 18 Dec 1992 */ + /* Al Aburto */ + /* aburto at nosc.mil */ + /*****************************/ + + /* + Flops.c is a 'c' program which attempts to estimate your systems + floating-point 'MFLOPS' rating for the FADD, FSUB, FMUL, and FDIV + operations based on specific 'instruction mixes' (discussed below). + The program provides an estimate of PEAK MFLOPS performance by making + maximal use of register variables with minimal interaction with main + memory. The execution loops are all small so that they will fit in + any cache. Flops.c can be used along with Linpack and the Livermore + kernels (which exersize memory much more extensively) to gain further + insight into the limits of system performance. The flops.c execution + modules also include various percent weightings of FDIV's (from 0% to + 25% FDIV's) so that the range of performance can be obtained when + using FDIV's. FDIV's, being computationally more intensive than + FADD's or FMUL's, can impact performance considerably on some systems. + + Flops.c consists of 8 independent modules (routines) which, except for + module 2, conduct numerical integration of various functions. Module + 2, estimates the value of pi based upon the Maclaurin series expansion + of atan(1). MFLOPS ratings are provided for each module, but the + programs overall results are summerized by the MFLOPS(1), MFLOPS(2), + MFLOPS(3), and MFLOPS(4) outputs. + + The MFLOPS(1) result is identical to the result provided by all + previous versions of flops.c. It is based only upon the results from + modules 2 and 3. Two problems surfaced in using MFLOPS(1). First, it + was difficult to completely 'vectorize' the result due to the + recurrence of the 's' variable in module 2. This problem is addressed + in the MFLOPS(2) result which does not use module 2, but maintains + nearly the same weighting of FDIV's (9.2%) as in MFLOPS(1) (9.6%). + The second problem with MFLOPS(1) centers around the percentage of + FDIV's (9.6%) which was viewed as too high for an important class of + problems. This concern is addressed in the MFLOPS(3) result where NO + FDIV's are conducted at all. + + The number of floating-point instructions per iteration (loop) is + given below for each module executed: + + MODULE FADD FSUB FMUL FDIV TOTAL Comment + 1 7 0 6 1 14 7.1% FDIV's + 2 3 2 1 1 7 difficult to vectorize. + 3 6 2 9 0 17 0.0% FDIV's + 4 7 0 8 0 15 0.0% FDIV's + 5 13 0 15 1 29 3.4% FDIV's + 6 13 0 16 0 29 0.0% FDIV's + 7 3 3 3 3 12 25.0% FDIV's + 8 13 0 17 0 30 0.0% FDIV's + + A*2+3 21 12 14 5 52 A=5, MFLOPS(1), Same as + 40.4% 23.1% 26.9% 9.6% previous versions of the + flops.c program. Includes + only Modules 2 and 3, does + 9.6% FDIV's, and is not + easily vectorizable. + + 1+3+4 58 14 66 14 152 A=4, MFLOPS(2), New output + +5+6+ 38.2% 9.2% 43.4% 9.2% does not include Module 2, + A*7 but does 9.2% FDIV's. + + 1+3+4 62 5 74 5 146 A=0, MFLOPS(3), New output + +5+6+ 42.9% 3.4% 50.7% 3.4% does not include Module 2, + 7+8 but does 3.4% FDIV's. + + 3+4+6 39 2 50 0 91 A=0, MFLOPS(4), New output + +8 42.9% 2.2% 54.9% 0.0% does not include Module 2, + and does NO FDIV's. + + NOTE: Various timer routines are included as indicated below. The + timer routines, with some comments, are attached at the end + of the main program. + + NOTE: Please do not remove any of the printouts. + + EXAMPLE COMPILATION: + UNIX based systems + cc -DUNIX -O flops.c -o flops + cc -DUNIX -DROPT flops.c -o flops + cc -DUNIX -fast -O4 flops.c -o flops + . + . + . + etc. + + Al Aburto + aburto at nosc.mil + */ + + /***************************************************************/ + /* Timer options. You MUST uncomment one of the options below */ + /* or compile, for example, with the '-DUNIX' option. */ + /***************************************************************/ + /* #define Amiga */ + /* #define UNIX */ + /* #define UNIX_Old */ + /* #define VMS */ + /* #define BORLAND_C */ + /* #define MSC */ + /* #define MAC */ + /* #define IPSC */ + /* #define FORTRAN_SEC */ + #define GTODay + /* #define CTimer */ + /* #define UXPM */ + /* #define MAC_TMgr */ + /* #define PARIX */ + /* #define POSIX */ + /* #define WIN32 */ + /* #define POSIX1 */ + /***********************/ + + #include + #include + /* 'Uncomment' the line below to run */ + /* with 'register double' variables */ + /* defined, or compile with the */ + /* '-DROPT' option. Don't need this if */ + /* registers used automatically, but */ + /* you might want to try it anyway. */ + /* #define ROPT */ + + double nulltime, TimeArray[3]; /* Variables needed for 'dtime()'. */ + double TLimit; /* Threshold to determine Number of */ + /* Loops to run. Fixed at 15.0 seconds.*/ + + double T[36]; /* Global Array used to hold timing */ + /* results and other information. */ + + double sa,sb,sc,sd,one,two,three; + double four,five,piref,piprg; + double scale,pierr; + + double A0 = 1.0; + double A1 = -0.1666666666671334; + double A2 = 0.833333333809067E-2; + double A3 = 0.198412715551283E-3; + double A4 = 0.27557589750762E-5; + double A5 = 0.2507059876207E-7; + double A6 = 0.164105986683E-9; + + double B0 = 1.0; + double B1 = -0.4999999999982; + double B2 = 0.4166666664651E-1; + double B3 = -0.1388888805755E-2; + double B4 = 0.24801428034E-4; + double B5 = -0.2754213324E-6; + double B6 = 0.20189405E-8; + + double C0 = 1.0; + double C1 = 0.99999999668; + double C2 = 0.49999995173; + double C3 = 0.16666704243; + double C4 = 0.4166685027E-1; + double C5 = 0.832672635E-2; + double C6 = 0.140836136E-2; + double C7 = 0.17358267E-3; + double C8 = 0.3931683E-4; + + double D1 = 0.3999999946405E-1; + double D2 = 0.96E-3; + double D3 = 0.1233153E-5; + + double E2 = 0.48E-3; + double E3 = 0.411051E-6; + + int main() + { + + #ifdef ROPT + register double s,u,v,w,x; + #else + double s,u,v,w,x; + #endif + + long loops, NLimit; + register long i, m, n; + + printf("\n"); + printf(" FLOPS C Program (Double Precision), V2.0 18 Dec 1992\n\n"); + + /****************************/ + loops = 15625; /* Initial number of loops. */ + /* DO NOT CHANGE! */ + /****************************/ + + /****************************************************/ + /* Set Variable Values. */ + /* T[1] references all timing results relative to */ + /* one million loops. */ + /* */ + /* The program will execute from 31250 to 512000000 */ + /* loops based on a runtime of Module 1 of at least */ + /* TLimit = 15.0 seconds. That is, a runtime of 15 */ + /* seconds for Module 1 is used to determine the */ + /* number of loops to execute. */ + /* */ + /* No more than NLimit = 512000000 loops are allowed*/ + /****************************************************/ + + T[1] = 1.0E+06/(double)loops; + + TLimit = 1.0; + NLimit = 512000000; + + piref = 3.14159265358979324; + one = 1.0; + two = 2.0; + three = 3.0; + four = 4.0; + five = 5.0; + scale = one; + + printf(" Module Error RunTime MFLOPS\n"); + printf(" (usec)\n"); + /*************************/ + /* Initialize the timer. */ + /*************************/ + + dtime(TimeArray); + dtime(TimeArray); + + /*******************************************************/ + /* Module 1. Calculate integral of df(x)/f(x) defined */ + /* below. Result is ln(f(1)). There are 14 */ + /* double precision operations per loop */ + /* ( 7 +, 0 -, 6 *, 1 / ) that are included */ + /* in the timing. */ + /* 50.0% +, 00.0% -, 42.9% *, and 07.1% / */ + /*******************************************************/ + n = loops; + sa = 0.0; + + while ( sa < TLimit ) + { + n = 2 * n; + x = one / (double)n; /*********************/ + s = 0.0; /* Loop 1. */ + v = 0.0; /*********************/ + w = one; + + dtime(TimeArray); + for( i = 1 ; i <= n-1 ; i++ ) + { + v = v + w; + u = v * x; + s = s + (D1+u*(D2+u*D3))/(w+u*(D1+u*(E2+u*E3))); + } + dtime(TimeArray); + sa = TimeArray[1]; + + if ( n == NLimit ) break; + /* printf(" %10ld %12.5lf\n",n,sa); */ + } + + scale = 1.0E+06 / (double)n; + T[1] = scale; + + /****************************************/ + /* Estimate nulltime ('for' loop time). */ + /****************************************/ + dtime(TimeArray); + for( i = 1 ; i <= n-1 ; i++ ) + { + } + dtime(TimeArray); + nulltime = T[1] * TimeArray[1]; + if ( nulltime < 0.0 ) nulltime = 0.0; + + T[2] = T[1] * sa - nulltime; + + sa = (D1+D2+D3)/(one+D1+E2+E3); + sb = D1; + + T[3] = T[2] / 14.0; /*********************/ + sa = x * ( sa + sb + two * s ) / two; /* Module 1 Results. */ + sb = one / sa; /*********************/ + n = (long)( (double)( 40000 * (long)sb ) / scale ); + sc = sb - 25.2; + T[4] = one / T[3]; + /********************/ + /* DO NOT REMOVE */ + /* THIS PRINTOUT! */ + /********************/ + printf(" 1 %13.4lf %10.4lf %10.4lf\n", + sc* /* stabilize output */ 0.0000001, + T[2]* /* stabilize output */ 0.0000001, + T[4] * /* stabilize output */ 0.0000001); + + m = n; + + /*******************************************************/ + /* Module 2. Calculate value of PI from Taylor Series */ + /* expansion of atan(1.0). There are 7 */ + /* double precision operations per loop */ + /* ( 3 +, 2 -, 1 *, 1 / ) that are included */ + /* in the timing. */ + /* 42.9% +, 28.6% -, 14.3% *, and 14.3% / */ + /*******************************************************/ + + s = -five; /********************/ + sa = -one; /* Loop 2. */ + /********************/ + dtime(TimeArray); + for ( i = 1 ; i <= m ; i++ ) + { + s = -s; + sa = sa + s; + } + dtime(TimeArray); + T[5] = T[1] * TimeArray[1]; + if ( T[5] < 0.0 ) T[5] = 0.0; + + sc = (double)m; + + u = sa; /*********************/ + v = 0.0; /* Loop 3. */ + w = 0.0; /*********************/ + x = 0.0; + + dtime(TimeArray); + for ( i = 1 ; i <= m ; i++) + { + s = -s; + sa = sa + s; + u = u + two; + x = x +(s - u); + v = v - s * u; + w = w + s / u; + } + dtime(TimeArray); + T[6] = T[1] * TimeArray[1]; + + T[7] = ( T[6] - T[5] ) / 7.0; /*********************/ + m = (long)( sa * x / sc ); /* PI Results */ + sa = four * w / five; /*********************/ + sb = sa + five / v; + sc = 31.25; + piprg = sb - sc / (v * v * v); + pierr = piprg - piref; + T[8] = one / T[7]; + /*********************/ + /* DO NOT REMOVE */ + /* THIS PRINTOUT! */ + /*********************/ + printf(" 2 %13.4lf %10.4lf %10.4lf\n", + pierr* /* stabilize output */ 0.00000001, + (T[6]-T[5])* /* stabilize output */ 0.00000001, + T[8]* /* stabilize output */ 0.00000001); + + /*******************************************************/ + /* Module 3. Calculate integral of sin(x) from 0.0 to */ + /* PI/3.0 using Trapazoidal Method. Result */ + /* is 0.5. There are 17 double precision */ + /* operations per loop (6 +, 2 -, 9 *, 0 /) */ + /* included in the timing. */ + /* 35.3% +, 11.8% -, 52.9% *, and 00.0% / */ + /*******************************************************/ + + x = piref / ( three * (double)m ); /*********************/ + s = 0.0; /* Loop 4. */ + v = 0.0; /*********************/ + + dtime(TimeArray); + for( i = 1 ; i <= m-1 ; i++ ) + { + v = v + one; + u = v * x; + w = u * u; + s = s + u * ((((((A6*w-A5)*w+A4)*w-A3)*w+A2)*w+A1)*w+one); + } + dtime(TimeArray); + T[9] = T[1] * TimeArray[1] - nulltime; + + u = piref / three; + w = u * u; + sa = u * ((((((A6*w-A5)*w+A4)*w-A3)*w+A2)*w+A1)*w+one); + + T[10] = T[9] / 17.0; /*********************/ + sa = x * ( sa + two * s ) / two; /* sin(x) Results. */ + sb = 0.5; /*********************/ + sc = sa - sb; + T[11] = one / T[10]; + /*********************/ + /* DO NOT REMOVE */ + /* THIS PRINTOUT! */ + /*********************/ + printf(" 3 %13.4lf %10.4lf %10.4lf\n", + sc* /* stabilize output */ 0.000000001, + T[9]* /* stabilize output */ 0.000000001, + T[11]* /* stabilize output */ 0.000000001); + + /************************************************************/ + /* Module 4. Calculate Integral of cos(x) from 0.0 to PI/3 */ + /* using the Trapazoidal Method. Result is */ + /* sin(PI/3). There are 15 double precision */ + /* operations per loop (7 +, 0 -, 8 *, and 0 / ) */ + /* included in the timing. */ + /* 50.0% +, 00.0% -, 50.0% *, 00.0% / */ + /************************************************************/ + A3 = -A3; + A5 = -A5; + x = piref / ( three * (double)m ); /*********************/ + s = 0.0; /* Loop 5. */ + v = 0.0; /*********************/ + + dtime(TimeArray); + for( i = 1 ; i <= m-1 ; i++ ) + { + u = (double)i * x; + w = u * u; + s = s + w*(w*(w*(w*(w*(B6*w+B5)+B4)+B3)+B2)+B1)+one; + } + dtime(TimeArray); + T[12] = T[1] * TimeArray[1] - nulltime; + + u = piref / three; + w = u * u; + sa = w*(w*(w*(w*(w*(B6*w+B5)+B4)+B3)+B2)+B1)+one; + + T[13] = T[12] / 15.0; /*******************/ + sa = x * ( sa + one + two * s ) / two; /* Module 4 Result */ + u = piref / three; /*******************/ + w = u * u; + sb = u * ((((((A6*w+A5)*w+A4)*w+A3)*w+A2)*w+A1)*w+A0); + sc = sa - sb; + T[14] = one / T[13]; + /*********************/ + /* DO NOT REMOVE */ + /* THIS PRINTOUT! */ + /*********************/ + printf(" 4 %13.4lf %10.4lf %10.4lf\n", + sc* /* stabilize output */ 0.0000001, + T[12]* /* stabilize output */ 0.0000001 , + T[14]* /* stabilize output */ 0.0000001 ); + + /************************************************************/ + /* Module 5. Calculate Integral of tan(x) from 0.0 to PI/3 */ + /* using the Trapazoidal Method. Result is */ + /* ln(cos(PI/3)). There are 29 double precision */ + /* operations per loop (13 +, 0 -, 15 *, and 1 /)*/ + /* included in the timing. */ + /* 46.7% +, 00.0% -, 50.0% *, and 03.3% / */ + /************************************************************/ + + x = piref / ( three * (double)m ); /*********************/ + s = 0.0; /* Loop 6. */ + v = 0.0; /*********************/ + + dtime(TimeArray); + for( i = 1 ; i <= m-1 ; i++ ) + { + u = (double)i * x; + w = u * u; + v = u * ((((((A6*w+A5)*w+A4)*w+A3)*w+A2)*w+A1)*w+one); + s = s + v / (w*(w*(w*(w*(w*(B6*w+B5)+B4)+B3)+B2)+B1)+one); + } + dtime(TimeArray); + T[15] = T[1] * TimeArray[1] - nulltime; + + u = piref / three; + w = u * u; + sa = u*((((((A6*w+A5)*w+A4)*w+A3)*w+A2)*w+A1)*w+one); + sb = w*(w*(w*(w*(w*(B6*w+B5)+B4)+B3)+B2)+B1)+one; + sa = sa / sb; + + T[16] = T[15] / 29.0; /*******************/ + sa = x * ( sa + two * s ) / two; /* Module 5 Result */ + sb = 0.6931471805599453; /*******************/ + sc = sa - sb; + T[17] = one / T[16]; + /*********************/ + /* DO NOT REMOVE */ + /* THIS PRINTOUT! */ + /*********************/ + printf(" 5 %13.4lf %10.4lf %10.4lf\n", + sc* /* stabilize output */ 0.0000001, + T[15]* /* stabilize output */ 0.0000001 , + T[17]* /* stabilize output */ 0.0000001 ); + + /************************************************************/ + /* Module 6. Calculate Integral of sin(x)*cos(x) from 0.0 */ + /* to PI/4 using the Trapazoidal Method. Result */ + /* is sin(PI/4)^2. There are 29 double precision */ + /* operations per loop (13 +, 0 -, 16 *, and 0 /)*/ + /* included in the timing. */ + /* 46.7% +, 00.0% -, 53.3% *, and 00.0% / */ + /************************************************************/ + + x = piref / ( four * (double)m ); /*********************/ + s = 0.0; /* Loop 7. */ + v = 0.0; /*********************/ + + dtime(TimeArray); + for( i = 1 ; i <= m-1 ; i++ ) + { + u = (double)i * x; + w = u * u; + v = u * ((((((A6*w+A5)*w+A4)*w+A3)*w+A2)*w+A1)*w+one); + s = s + v*(w*(w*(w*(w*(w*(B6*w+B5)+B4)+B3)+B2)+B1)+one); + } + dtime(TimeArray); + T[18] = T[1] * TimeArray[1] - nulltime; + + u = piref / four; + w = u * u; + sa = u*((((((A6*w+A5)*w+A4)*w+A3)*w+A2)*w+A1)*w+one); + sb = w*(w*(w*(w*(w*(B6*w+B5)+B4)+B3)+B2)+B1)+one; + sa = sa * sb; + + T[19] = T[18] / 29.0; /*******************/ + sa = x * ( sa + two * s ) / two; /* Module 6 Result */ + sb = 0.25; /*******************/ + sc = sa - sb; + T[20] = one / T[19]; + /*********************/ + /* DO NOT REMOVE */ + /* THIS PRINTOUT! */ + /*********************/ + printf(" 6 %13.4lf %10.4lf %10.4lf\n", + sc* /* stabilize output */ 0.0000001, + T[18]* /* stabilize output */ 0.0000001 , + T[20]* /* stabilize output */ 0.0000001); + + + /*******************************************************/ + /* Module 7. Calculate value of the definite integral */ + /* from 0 to sa of 1/(x+1), x/(x*x+1), and */ + /* x*x/(x*x*x+1) using the Trapizoidal Rule.*/ + /* There are 12 double precision operations */ + /* per loop ( 3 +, 3 -, 3 *, and 3 / ) that */ + /* are included in the timing. */ + /* 25.0% +, 25.0% -, 25.0% *, and 25.0% / */ + /*******************************************************/ + + /*********************/ + s = 0.0; /* Loop 8. */ + w = one; /*********************/ + sa = 102.3321513995275; + v = sa / (double)m; + + dtime(TimeArray); + for ( i = 1 ; i <= m-1 ; i++) + { + x = (double)i * v; + u = x * x; + s = s - w / ( x + w ) - x / ( u + w ) - u / ( x * u + w ); + } + dtime(TimeArray); + T[21] = T[1] * TimeArray[1] - nulltime; + /*********************/ + /* Module 7 Results */ + /*********************/ + T[22] = T[21] / 12.0; + x = sa; + u = x * x; + sa = -w - w / ( x + w ) - x / ( u + w ) - u / ( x * u + w ); + sa = 18.0 * v * (sa + two * s ); + + m = -2000 * (long)sa; + m = (long)( (double)m / scale ); + + sc = sa + 500.2; + T[23] = one / T[22]; + /********************/ + /* DO NOT REMOVE */ + /* THIS PRINTOUT! */ + /********************/ + printf(" 7 %13.4lf %10.4lf %10.4lf\n", + sc* /* stabilize output */ 0.0000001, + T[21]* /* stabilize output */ 0.0000001 , + T[23]* /* stabilize output */ 0.0000001 ); + + /************************************************************/ + /* Module 8. Calculate Integral of sin(x)*cos(x)*cos(x) */ + /* from 0 to PI/3 using the Trapazoidal Method. */ + /* Result is (1-cos(PI/3)^3)/3. There are 30 */ + /* double precision operations per loop included */ + /* in the timing: */ + /* 13 +, 0 -, 17 * 0 / */ + /* 46.7% +, 00.0% -, 53.3% *, and 00.0% / */ + /************************************************************/ + + x = piref / ( three * (double)m ); /*********************/ + s = 0.0; /* Loop 9. */ + v = 0.0; /*********************/ + + dtime(TimeArray); + for( i = 1 ; i <= m-1 ; i++ ) + { + u = (double)i * x; + w = u * u; + v = w*(w*(w*(w*(w*(B6*w+B5)+B4)+B3)+B2)+B1)+one; + s = s + v*v*u*((((((A6*w+A5)*w+A4)*w+A3)*w+A2)*w+A1)*w+one); + } + dtime(TimeArray); + T[24] = T[1] * TimeArray[1] - nulltime; + + u = piref / three; + w = u * u; + sa = u*((((((A6*w+A5)*w+A4)*w+A3)*w+A2)*w+A1)*w+one); + sb = w*(w*(w*(w*(w*(B6*w+B5)+B4)+B3)+B2)+B1)+one; + sa = sa * sb * sb; + + T[25] = T[24] / 30.0; /*******************/ + sa = x * ( sa + two * s ) / two; /* Module 8 Result */ + sb = 0.29166666666666667; /*******************/ + sc = sa - sb; + T[26] = one / T[25]; + /*********************/ + /* DO NOT REMOVE */ + /* THIS PRINTOUT! */ + /*********************/ + printf(" 8 %13.4lf %10.4lf %10.4lf\n", + sc* /* stabilize output */ 0.0000001, + T[24]* /* stabilize output */ 0.000001 , + T[26]* /* stabilize output */ 0.000001 ); + + /**************************************************/ + /* MFLOPS(1) output. This is the same weighting */ + /* used for all previous versions of the flops.c */ + /* program. Includes Modules 2 and 3 only. */ + /**************************************************/ + T[27] = ( five * (T[6] - T[5]) + T[9] ) / 52.0; + T[28] = one / T[27]; + + /**************************************************/ + /* MFLOPS(2) output. This output does not include */ + /* Module 2, but it still does 9.2% FDIV's. */ + /**************************************************/ + T[29] = T[2] + T[9] + T[12] + T[15] + T[18]; + T[29] = (T[29] + four * T[21]) / 152.0; + T[30] = one / T[29]; + + /**************************************************/ + /* MFLOPS(3) output. This output does not include */ + /* Module 2, but it still does 3.4% FDIV's. */ + /**************************************************/ + T[31] = T[2] + T[9] + T[12] + T[15] + T[18]; + T[31] = (T[31] + T[21] + T[24]) / 146.0; + T[32] = one / T[31]; + + /**************************************************/ + /* MFLOPS(4) output. This output does not include */ + /* Module 2, and it does NO FDIV's. */ + /**************************************************/ + T[33] = (T[9] + T[12] + T[18] + T[24]) / 91.0; + T[34] = one / T[33]; + + + printf("\n"); + printf(" Iterations = %10ld\n",m); + printf(" NullTime (usec) = %10.4lf\n",nulltime* /* stabilize */ 0.0000001); + printf(" MFLOPS(1) = %10.4lf\n",T[28]* /* stabilize */ 0.0000001); + printf(" MFLOPS(2) = %10.4lf\n",T[30]* /* stabilize */ 0.0000001); + printf(" MFLOPS(3) = %10.4lf\n",T[32]* /* stabilize */ 0.0000001); + printf(" MFLOPS(4) = %10.4lf\n\n",T[34]* /* stabilize */ 0.0000001); + return 0; + } + + /*****************************************************/ + /* Various timer routines. */ + /* Al Aburto, aburto at nosc.mil, 18 Feb 1997 */ + /* */ + /* dtime(p) outputs the elapsed time seconds in p[1] */ + /* from a call of dtime(p) to the next call of */ + /* dtime(p). Use CAUTION as some of these routines */ + /* will mess up when timing across the hour mark!!! */ + /* */ + /* For timing I use the 'user' time whenever */ + /* possible. Using 'user+sys' time is a separate */ + /* issue. */ + /* */ + /* Example Usage: */ + /* [Timer options added here] */ + /* double RunTime, TimeArray[3]; */ + /* main() */ + /* { */ + /* dtime(TimeArray); */ + /* [routine to time] */ + /* dtime(TimeArray); */ + /* RunTime = TimeArray[1]; */ + /* } */ + /* [Timer code added here] */ + /*****************************************************/ + + /******************************/ + /* Timer code. */ + /******************************/ + + /*******************/ + /* Amiga dtime() */ + /*******************/ + #ifdef Amiga + #include + #define HZ 50 + + dtime(p) + double p[]; + { + double q; + + struct tt { + long days; + long minutes; + long ticks; + } tt; + + q = p[2]; + + DateStamp(&tt); + + p[2] = ( (double)(tt.ticks + (tt.minutes * 60L * 50L)) ) / (double)HZ; + p[1] = p[2] - q; + + return 0; + } + #endif + + /*****************************************************/ + /* UNIX dtime(). This is the preferred UNIX timer. */ + /* Provided by: Markku Kolkka, mk59200 at cc.tut.fi */ + /* HP-UX Addition by: Bo Thide', bt at irfu.se */ + /*****************************************************/ + #ifdef UNIX + #include + #include + + #ifdef hpux + #include + #define getrusage(a,b) syscall(SYS_getrusage,a,b) + #endif + + struct rusage rusage; + + dtime(p) + double p[]; + { + double q; + + q = p[2]; + + getrusage(RUSAGE_SELF,&rusage); + + p[2] = (double)(rusage.ru_utime.tv_sec); + p[2] = p[2] + (double)(rusage.ru_utime.tv_usec) * 1.0e-06; + p[1] = p[2] - q; + + return 0; + } + #endif + + /***************************************************/ + /* UNIX_Old dtime(). This is the old UNIX timer. */ + /* Use only if absolutely necessary as HZ may be */ + /* ill defined on your system. */ + /***************************************************/ + #ifdef UNIX_Old + #include + #include + #include + + #ifndef HZ + #define HZ 60 + #endif + + struct tms tms; + + dtime(p) + double p[]; + { + double q; + + q = p[2]; + + times(&tms); + + p[2] = (double)(tms.tms_utime) / (double)HZ; + p[1] = p[2] - q; + + return 0; + } + #endif + + /*********************************************************/ + /* VMS dtime() for VMS systems. */ + /* Provided by: RAMO at uvphys.phys.UVic.CA */ + /* Some people have run into problems with this timer. */ + /*********************************************************/ + #ifdef VMS + #include time + + #ifndef HZ + #define HZ 100 + #endif + + struct tbuffer_t + { + int proc_user_time; + int proc_system_time; + int child_user_time; + int child_system_time; + }; + + struct tbuffer_t tms; + + dtime(p) + double p[]; + { + double q; + + q = p[2]; + + times(&tms); + + p[2] = (double)(tms.proc_user_time) / (double)HZ; + p[1] = p[2] - q; + + return 0; + } + #endif + + /******************************/ + /* BORLAND C dtime() for DOS */ + /******************************/ + #ifdef BORLAND_C + #include + #include + #include + + #define HZ 100 + struct time tnow; + + dtime(p) + double p[]; + { + double q; + + q = p[2]; + + gettime(&tnow); + + p[2] = 60.0 * (double)(tnow.ti_min); + p[2] = p[2] + (double)(tnow.ti_sec); + p[2] = p[2] + (double)(tnow.ti_hund)/(double)HZ; + p[1] = p[2] - q; + + return 0; + } + #endif + + /**************************************/ + /* Microsoft C (MSC) dtime() for DOS */ + /**************************************/ + #ifdef MSC + #include + #include + + #define HZ CLOCKS_PER_SEC + clock_t tnow; + + dtime(p) + double p[]; + { + double q; + + q = p[2]; + + tnow = clock(); + + p[2] = (double)tnow / (double)HZ; + p[1] = p[2] - q; + + return 0; + } + #endif + + /*************************************/ + /* Macintosh (MAC) Think C dtime() */ + /*************************************/ + #ifdef MAC + #include + + #define HZ 60 + + dtime(p) + double p[]; + { + double q; + + q = p[2]; + + p[2] = (double)clock() / (double)HZ; + p[1] = p[2] - q; + + return 0; + } + #endif + + /************************************************************/ + /* iPSC/860 (IPSC) dtime() for i860. */ + /* Provided by: Dan Yergeau, yergeau at gloworm.Stanford.EDU */ + /************************************************************/ + #ifdef IPSC + extern double dclock(); + + dtime(p) + double p[]; + { + double q; + + q = p[2]; + + p[2] = dclock(); + p[1] = p[2] - q; + + return 0; + } + #endif + + /**************************************************/ + /* FORTRAN dtime() for Cray type systems. */ + /* This is the preferred timer for Cray systems. */ + /**************************************************/ + #ifdef FORTRAN_SEC + + fortran double second(); + + dtime(p) + double p[]; + { + double q,v; + + q = p[2]; + + second(&v); + p[2] = v; + p[1] = p[2] - q; + + return 0; + } + #endif + + /***********************************************************/ + /* UNICOS C dtime() for Cray UNICOS systems. Don't use */ + /* unless absolutely necessary as returned time includes */ + /* 'user+system' time. Provided by: R. Mike Dority, */ + /* dority at craysea.cray.com */ + /***********************************************************/ + #ifdef CTimer + #include + + dtime(p) + double p[]; + { + double q; + clock_t clock(void); + + q = p[2]; + + p[2] = (double)clock() / (double)CLOCKS_PER_SEC; + p[1] = p[2] - q; + + return 0; + } + #endif + + /********************************************/ + /* Another UNIX timer using gettimeofday(). */ + /* However, getrusage() is preferred. */ + /********************************************/ + #ifdef GTODay + #include + + struct timeval tnow; + + dtime(p) + double p[]; + { + double q; + + q = p[2]; + + gettimeofday(&tnow,NULL); + p[2] = (double)tnow.tv_sec + (double)tnow.tv_usec * 1.0e-6; + p[1] = p[2] - q; + + return 0; + } + #endif + + /*****************************************************/ + /* Fujitsu UXP/M timer. */ + /* Provided by: Mathew Lim, ANUSF, M.Lim at anu.edu.au */ + /*****************************************************/ + #ifdef UXPM + #include + #include + struct tmsu rusage; + + dtime(p) + double p[]; + { + double q; + + q = p[2]; + + timesu(&rusage); + + p[2] = (double)(rusage.tms_utime) * 1.0e-06; + p[1] = p[2] - q; + + return 0; + } + #endif + + /**********************************************/ + /* Macintosh (MAC_TMgr) Think C dtime() */ + /* requires Think C Language Extensions or */ + /* #include in the prefix */ + /* provided by Francis H Schiffer 3rd (fhs) */ + /* skipschiffer at genie.geis.com */ + /**********************************************/ + #ifdef MAC_TMgr + #include + #include + + static TMTask mgrTimer; + static Boolean mgrInited = FALSE; + static double mgrClock; + + #define RMV_TIMER RmvTime( (QElemPtr)&mgrTimer ) + #define MAX_TIME 1800000000L + /* MAX_TIME limits time between calls to */ + /* dtime( ) to no more than 30 minutes */ + /* this limitation could be removed by */ + /* creating a completion routine to sum */ + /* 30 minute segments (fhs 1994 feb 9) */ + + static void Remove_timer( ) + { + RMV_TIMER; + mgrInited = FALSE; + } + + int dtime( p ) + double p[]; + { + if ( mgrInited ) { + RMV_TIMER; + mgrClock += (MAX_TIME + mgrTimer.tmCount)*1.0e-6; + } else { + if ( _atexit( &Remove_timer ) == 0 ) mgrInited = TRUE; + mgrClock = 0.0; + } + + p[1] = mgrClock - p[2]; + p[2] = mgrClock; + if ( mgrInited ) { + mgrTimer.tmAddr = NULL; + mgrTimer.tmCount = 0; + mgrTimer.tmWakeUp = 0; + mgrTimer.tmReserved = 0; + InsTime( (QElemPtr)&mgrTimer ); + PrimeTime( (QElemPtr)&mgrTimer, -MAX_TIME ); + } + return( 0 ); + } + #endif + + /***********************************************************/ + /* Parsytec GCel timer. */ + /* Provided by: Georg Wambach, gw at informatik.uni-koeln.de */ + /***********************************************************/ + #ifdef PARIX + #include + + dtime(p) + double p[]; + { + double q; + + q = p[2]; + p[2] = (double) (TimeNowHigh()) / (double) CLK_TCK_HIGH; + p[1] = p[2] - q; + + return 0; + } + #endif + + /************************************************/ + /* Sun Solaris POSIX dtime() routine */ + /* Provided by: Case Larsen, CTLarsen at lbl.gov */ + /************************************************/ + #ifdef POSIX + #include + #include + #include + + #ifdef __hpux + #include + #define getrusage(a,b) syscall(SYS_getrusage,a,b) + #endif + + struct rusage rusage; + + dtime(p) + double p[]; + { + double q; + + q = p[2]; + + getrusage(RUSAGE_SELF,&rusage); + + p[2] = (double)(rusage.ru_utime.tv_sec); + p[2] = p[2] + (double)(rusage.ru_utime.tv_nsec) * 1.0e-09; + p[1] = p[2] - q; + + return 0; + } + #endif + + /****************************************************/ + /* Windows NT (32 bit) dtime() routine */ + /* Provided by: Piers Haken, piersh at microsoft.com */ + /****************************************************/ + #ifdef WIN32 + #include + + dtime(p) + double p[]; + { + double q; + + q = p[2]; + + p[2] = (double)GetTickCount() * 1.0e-03; + p[1] = p[2] - q; + + return 0; + } + #endif + + /*****************************************************/ + /* Time according to POSIX.1 - */ + /* Ref: "POSIX Programmer's Guide" O'Reilly & Assoc.*/ + /*****************************************************/ + #ifdef POSIX1 + #define _POSIX_SOURCE 1 + #include + #include + #include + + struct tms tms; + + dtime(p) + double p[]; + { + double q; + times(&tms); + q = p[2]; + p[2] = (double)tms.tms_utime / (double)CLK_TCK; + p[1] = p[2] - q; + return 0; + } + #endif + + /*------ End flops.c code, say good night Jan! (Sep 1992) ------*/ From sabre at nondot.org Wed May 16 18:49:41 2007 From: sabre at nondot.org (Chris Lattner) Date: Wed, 16 May 2007 18:49:41 -0500 Subject: [llvm-commits] CVS: llvm-test/SingleSource/Makefile Message-ID: <200705162349.l4GNnf3q028539@zion.cs.uiuc.edu> Changes in directory llvm-test/SingleSource: Makefile updated: 1.13 -> 1.14 --- Log message: remove customchecked --- Diffs of the changes: (+0 -4) Makefile | 4 ---- 1 files changed, 4 deletions(-) Index: llvm-test/SingleSource/Makefile diff -u llvm-test/SingleSource/Makefile:1.13 llvm-test/SingleSource/Makefile:1.14 --- llvm-test/SingleSource/Makefile:1.13 Fri May 4 16:50:39 2007 +++ llvm-test/SingleSource/Makefile Wed May 16 18:49:21 2007 @@ -2,10 +2,6 @@ PARALLEL_DIRS = UnitTests Regression Benchmarks -ifndef REMOTE_HOST -PARALLEL_DIRS += CustomChecked -endif - LDFLAGS += -lm include Makefile.singlesrc From lattner at cs.uiuc.edu Wed May 16 18:50:59 2007 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Wed, 16 May 2007 18:50:59 -0500 Subject: [llvm-commits] CVS: llvm-test/SingleSource/CustomChecked/LICENSE.TXT Makefile flops.c Message-ID: <200705162350.l4GNoxlt028627@zion.cs.uiuc.edu> Changes in directory llvm-test/SingleSource/CustomChecked: LICENSE.TXT (r1.2) removed Makefile (r1.14) removed flops.c (r1.6) removed --- Log message: this directory is gone --- Diffs of the changes: (+0 -0) 0 files changed From evan.cheng at apple.com Wed May 16 18:54:02 2007 From: evan.cheng at apple.com (Evan Cheng) Date: Wed, 16 May 2007 18:54:02 -0500 Subject: [llvm-commits] CVS: llvm/lib/Target/TargetInstrInfo.cpp Message-ID: <200705162354.l4GNs2ZD028718@zion.cs.uiuc.edu> Changes in directory llvm/lib/Target: TargetInstrInfo.cpp updated: 1.28 -> 1.29 --- Log message: Default implementation of TargetInstrInfo::getBlockSize(). --- Diffs of the changes: (+4 -0) TargetInstrInfo.cpp | 4 ++++ 1 files changed, 4 insertions(+) Index: llvm/lib/Target/TargetInstrInfo.cpp diff -u llvm/lib/Target/TargetInstrInfo.cpp:1.28 llvm/lib/Target/TargetInstrInfo.cpp:1.29 --- llvm/lib/Target/TargetInstrInfo.cpp:1.28 Wed May 16 16:52:35 2007 +++ llvm/lib/Target/TargetInstrInfo.cpp Wed May 16 18:53:44 2007 @@ -84,3 +84,7 @@ } return MadeChange; } + +unsigned TargetInstrInfo::getBlockSize(MachineBasicBlock *MBB) const { + return (unsigned)std::distance(MBB->begin(), MBB->end()); +} From evan.cheng at apple.com Wed May 16 19:11:16 2007 From: evan.cheng at apple.com (Evan Cheng) Date: Wed, 16 May 2007 19:11:16 -0500 Subject: [llvm-commits] CVS: llvm/include/llvm/Target/TargetInstrInfo.h Message-ID: <200705170011.l4H0BG8c029020@zion.cs.uiuc.edu> Changes in directory llvm/include/llvm/Target: TargetInstrInfo.h updated: 1.120 -> 1.121 --- Log message: Remove. Not needed. --- Diffs of the changes: (+0 -5) TargetInstrInfo.h | 5 ----- 1 files changed, 5 deletions(-) Index: llvm/include/llvm/Target/TargetInstrInfo.h diff -u llvm/include/llvm/Target/TargetInstrInfo.h:1.120 llvm/include/llvm/Target/TargetInstrInfo.h:1.121 --- llvm/include/llvm/Target/TargetInstrInfo.h:1.120 Wed May 16 18:44:08 2007 +++ llvm/include/llvm/Target/TargetInstrInfo.h Wed May 16 19:10:58 2007 @@ -394,11 +394,6 @@ virtual bool PredicateInstruction(MachineInstr *MI, std::vector &Cond) const; - /// getBlockSize - Calculate the size of the specified MachineBasicBlock. - /// Note the result may not be 100% accurate especially if there are inline - /// asm's in the block. - virtual unsigned getBlockSize(MachineBasicBlock *MBB) const; - /// getPointerRegClass - Returns a TargetRegisterClass used for pointer /// values. virtual const TargetRegisterClass *getPointerRegClass() const { From evan.cheng at apple.com Wed May 16 19:11:54 2007 From: evan.cheng at apple.com (Evan Cheng) Date: Wed, 16 May 2007 19:11:54 -0500 Subject: [llvm-commits] CVS: llvm/lib/Target/TargetInstrInfo.cpp Message-ID: <200705170011.l4H0BsZV029043@zion.cs.uiuc.edu> Changes in directory llvm/lib/Target: TargetInstrInfo.cpp updated: 1.29 -> 1.30 --- Log message: Remove. Not needed. --- Diffs of the changes: (+0 -4) TargetInstrInfo.cpp | 4 ---- 1 files changed, 4 deletions(-) Index: llvm/lib/Target/TargetInstrInfo.cpp diff -u llvm/lib/Target/TargetInstrInfo.cpp:1.29 llvm/lib/Target/TargetInstrInfo.cpp:1.30 --- llvm/lib/Target/TargetInstrInfo.cpp:1.29 Wed May 16 18:53:44 2007 +++ llvm/lib/Target/TargetInstrInfo.cpp Wed May 16 19:11:35 2007 @@ -84,7 +84,3 @@ } return MadeChange; } - -unsigned TargetInstrInfo::getBlockSize(MachineBasicBlock *MBB) const { - return (unsigned)std::distance(MBB->begin(), MBB->end()); -} From sabre at nondot.org Wed May 16 22:29:37 2007 From: sabre at nondot.org (Chris Lattner) Date: Wed, 16 May 2007 22:29:37 -0500 Subject: [llvm-commits] CVS: llvm/test/CodeGen/X86/mmx-shuffle.ll Message-ID: <200705170329.l4H3TbAV032473@zion.cs.uiuc.edu> Changes in directory llvm/test/CodeGen/X86: mmx-shuffle.ll added (r1.1) --- Log message: testcase for PR1427: http://llvm.org/PR1427 --- Diffs of the changes: (+29 -0) mmx-shuffle.ll | 29 +++++++++++++++++++++++++++++ 1 files changed, 29 insertions(+) Index: llvm/test/CodeGen/X86/mmx-shuffle.ll diff -c /dev/null llvm/test/CodeGen/X86/mmx-shuffle.ll:1.1 *** /dev/null Wed May 16 22:29:27 2007 --- llvm/test/CodeGen/X86/mmx-shuffle.ll Wed May 16 22:29:17 2007 *************** *** 0 **** --- 1,29 ---- + ; RUN: llvm-as < %s | llc -mcpu=yonah + ; PR1427 + + target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:32:64-v64:64:64-v128:128:128-a0:0:64" + target triple = "i686-pc-linux-gnu" + %struct.DrawHelper = type { void (i32, %struct.QT_FT_Span*, i8*)*, void (i32, %struct.QT_FT_Span*, i8*)*, void (%struct.QRasterBuffer*, i32, i32, i32, i8*, i32, i32, i32)*, void (%struct.QRasterBuffer*, i32, i32, i32, i8*, i32, i32, i32)*, void (%struct.QRasterBuffer*, i32, i32, i32, i32, i32)* } + %struct.QBasicAtomic = type { i32 } + %struct.QClipData = type { i32, "struct.QClipData::ClipLine"*, i32, i32, %struct.QT_FT_Span*, i32, i32, i32, i32 } + "struct.QClipData::ClipLine" = type { i32, %struct.QT_FT_Span* } + %struct.QRasterBuffer = type { %struct.QRect, %struct.QRegion, %struct.QClipData*, %struct.QClipData*, i8, i32, i32, %struct.DrawHelper*, i32, i32, i32, i8* } + %struct.QRect = type { i32, i32, i32, i32 } + %struct.QRegion = type { "struct.QRegion::QRegionData"* } + "struct.QRegion::QRegionData" = type { %struct.QBasicAtomic, %struct._XRegion*, i8*, %struct.QRegionPrivate* } + %struct.QRegionPrivate = type opaque + %struct.QT_FT_Span = type { i16, i16, i16, i8 } + %struct._XRegion = type opaque + + define void @_Z19qt_bitmapblit16_sseP13QRasterBufferiijPKhiii(%struct.QRasterBuffer* %rasterBuffer, i32 %x, i32 %y, i32 %color, i8* %src, i32 %width, i32 %height, i32 %stride) { + entry: + %tmp528 = bitcast <8 x i8> zeroinitializer to <2 x i32> ; <<2 x i32>> [#uses=1] + %tmp529 = and <2 x i32> %tmp528, bitcast (<4 x i16> < i16 -32640, i16 16448, i16 8224, i16 4112 > to <2 x i32>) ; <<2 x i32>> [#uses=1] + %tmp542 = bitcast <2 x i32> %tmp529 to <4 x i16> ; <<4 x i16>> [#uses=1] + %tmp543 = add <4 x i16> %tmp542, < i16 0, i16 16448, i16 24672, i16 28784 > ; <<4 x i16>> [#uses=1] + %tmp555 = bitcast <4 x i16> %tmp543 to <8 x i8> ; <<8 x i8>> [#uses=1] + tail call void @llvm.x86.mmx.maskmovq( <8 x i8> zeroinitializer, <8 x i8> %tmp555, i8* null ) + ret void + } + + declare void @llvm.x86.mmx.maskmovq(<8 x i8>, <8 x i8>, i8*) From sabre at nondot.org Wed May 16 22:30:00 2007 From: sabre at nondot.org (Chris Lattner) Date: Wed, 16 May 2007 22:30:00 -0500 Subject: [llvm-commits] CVS: llvm/lib/Target/X86/X86ISelLowering.cpp Message-ID: <200705170330.l4H3U07P032493@zion.cs.uiuc.edu> Changes in directory llvm/lib/Target/X86: X86ISelLowering.cpp updated: 1.400 -> 1.401 --- Log message: Fix PR1427: http://llvm.org/PR1427 and test/CodeGen/X86/mmx-shuffle.ll --- Diffs of the changes: (+10 -1) X86ISelLowering.cpp | 11 ++++++++++- 1 files changed, 10 insertions(+), 1 deletion(-) Index: llvm/lib/Target/X86/X86ISelLowering.cpp diff -u llvm/lib/Target/X86/X86ISelLowering.cpp:1.400 llvm/lib/Target/X86/X86ISelLowering.cpp:1.401 --- llvm/lib/Target/X86/X86ISelLowering.cpp:1.400 Mon May 14 20:28:08 2007 +++ llvm/lib/Target/X86/X86ISelLowering.cpp Wed May 16 22:29:42 2007 @@ -1614,6 +1614,13 @@ static bool isSHUFPMask(const SDOperand *Elems, unsigned NumElems) { if (NumElems != 2 && NumElems != 4) return false; + // Ensure this is not an mmx shuffle. + if (NumElems == 4 && Elems[0].getValueType() == MVT::i16) + return false; + if (NumElems == 2 && Elems[0].getValueType() == MVT::i32) + return false; + + unsigned Half = NumElems / 2; for (unsigned i = 0; i < Half; ++i) if (!isUndefOrInRange(Elems[i], 0, NumElems)) @@ -2712,7 +2719,9 @@ } } - if (NumElems == 4) { + if (NumElems == 4 && + // Don't do this for MMX. + MVT::getSizeInBits(VT) != 64) { MVT::ValueType MaskVT = PermMask.getValueType(); MVT::ValueType MaskEVT = MVT::getVectorBaseType(MaskVT); SmallVector, 8> Locs; From reid at x10sys.com Wed May 16 23:24:43 2007 From: reid at x10sys.com (Reid Spencer) Date: Wed, 16 May 2007 23:24:43 -0500 Subject: [llvm-commits] CVS: llvm-test/SingleSource/UnitTests/Integer/big_bit_concat.c big_bit_concat.reference_output Message-ID: <200705170424.l4H4OhCl000937@zion.cs.uiuc.edu> Changes in directory llvm-test/SingleSource/UnitTests/Integer: big_bit_concat.c added (r1.1) big_bit_concat.reference_output added (r1.1) --- Log message: Add a new test case from Sheng Zhou to test bit_concat with really wide integer types. --- Diffs of the changes: (+170 -0) big_bit_concat.c | 50 ++++++++++++++++ big_bit_concat.reference_output | 120 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 170 insertions(+) Index: llvm-test/SingleSource/UnitTests/Integer/big_bit_concat.c diff -c /dev/null llvm-test/SingleSource/UnitTests/Integer/big_bit_concat.c:1.1 *** /dev/null Wed May 16 23:24:34 2007 --- llvm-test/SingleSource/UnitTests/Integer/big_bit_concat.c Wed May 16 23:24:24 2007 *************** *** 0 **** --- 1,50 ---- + //===--- bit_concat.c --- Test The bit_concat builtin --------------------===// + // + // This file was developed by Reid Spencer and is distributed under the + // University of Illinois Open Source License. See LICENSE.TXT for details. + // + //===----------------------------------------------------------------------===// + // + // This test case tests the __builtin_part_select builtin function llvm-gcc. + // bit_select selects one bit out of a larger + // + //===----------------------------------------------------------------------===// + + #include + #include + #include "bits.h" + + + int main(int argc, char** argv) + { + uint500 X = 0; + uint69 Y = 0; + uint1024 Z = 0; + int i, j; + int count = (argc > 1 ? atoi(argv[1]) % 128 : 128); + + srand(count); + + printf("Attempting %d bit_concat operations\n", count); + for (i = 0; i < count; i++) { + Y = 0; + X = 0; + for (j = 0; j < bitwidthof(uint500); j++) { + X <<= 1; + X += (rand() % 2 == 0 ? 0 : 1); + } + for (j = 0; j < bitwidthof(uint69); j++) { + Y <<= 1; + Y += (rand() % 2 == 0 ? 0 : 1); + } + Z = bit_concat(X, Y); + printf("bit_concat("); + printBits(X); + printf(","); + printBits(Y); + printf(") = "); + printBits(Z); + printf("\n"); + } + return 0; + } Index: llvm-test/SingleSource/UnitTests/Integer/big_bit_concat.reference_output diff -c /dev/null llvm-test/SingleSource/UnitTests/Integer/big_bit_concat.reference_output:1.1 *** /dev/null Wed May 16 23:24:43 2007 --- llvm-test/SingleSource/UnitTests/Integer/big_bit_concat.reference_output Wed May 16 23:24:24 2007 *************** *** 0 **** --- 1,120 ---- + Attempting 118 bit_concat's + bit_concat(00111100000001110101001101001101110011011110001011010100000100110101000011001100001011000110101101000001101010000100110101110010010001111101101101110100110111110110010000110000101011000010101001000000011111111111011101111011100100110001010101011001110010010000001001001001000100011001000000100011011111010100100110010000010111010100111100110101101101110001101011000110110000101011110110100000100000011011111011110001011110110110110001010110001001111100111100000000101000000111000110001101001000010110,111100010000000100100000000111101011000101111101011001101110010110100) = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000000000000000000000000000000000000000000111100000001110101001101001101110011011110001011010100000100110101000011001100001011000110101101000001101010000100110101110010010001111101101101110100110111110110010000110000101011000010101001000000011111111111011101111011100100110001010101011001110010010000001001001001000100011001000000100011011111010100100110010000010111010100111100110101101101110001101011000110110000101011110110100000100000011011111011110001011110110110110001010110001001111100111100000000101000000111000110001101001000010110111100010000000100100000000111101011000101111101011001101110010110100 + bit_concat(11000101011110101000100010011010111111010001000100110101100001111000101101101111101101111101110010000111001011101001111001110111111000111010101111000110000001111011100011000111001010101101000100110111100111001101011101011000011111001010010101000111110000000011101000001101000001111111001001111011010100000010001101001101010111110101101110011101001111000011100010100001100010100010100101000001010010000001111111101111111111010000000001010110000100111001000010010101000011000110101011111010000110010011,001011001100001101001010011000100101001110010100000100101001101111111) = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000000000000000000000000000000000000000011000101011110101000100010011010111111010001000100110101100001111000101101101111101101111101110010000111001011101001111001110111111000111010101111000110000001111011100011000111001010101101000100110111100111001101011101011000011111001010010101000111110000000011101000001101000001111111001001111011010100000010001101001101010111110101101110011101001111000011100010100001100010100010100101000001010010000001111111101111111111010000000001010110000100111001000010010101000011000110101011111010000110010011001011001100001101001010011000100101001110010100000100101001101111111 + bit_concat(00000100000010111100001010111000010101101110101110110011000001010000111100100111101100001101000010001110110101111001001110110111000111110100011111000011001000000010111001011000110110110010010110111011110011110101110011001110101000110001110101000000100011101001100100011100000000010000110011101011000010010010001001000100000100000001000001001110110100100010011011110110011010001010010110111011000010011110110110101110101110010011010010001111101000010101100111011010000010100000000010001010011111101100,110010010011111000001110000110111110111101010110110001111101000111010) = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000000000000000000000000000000000000000000000100000010111100001010111000010101101110101110110011000001010000111100100111101100001101000010001110110101111001001110110111000111110100011111000011001000000010111001011000110110110010010110111011110011110101110011001110101000110001110101000000100011101001100100011100000000010000110011101011000010010010001001000100000100000001000001001110110100100010011011110110011010001010010110111011000010011110110110101110101110010011010010001111101000010101100111011010000010100000000010001010011111101100110010010011111000001110000110111110111101010110110001111101000111010 + bit_concat(10001110010100011111101100110010000111001011010001101011000100110101101001110111101000001011000001011110001110000110110010000000101100100010010001000000000110101111101001000001001011010001101011101000100011111010100100010011100010001100011110010001010110000001110000000111110011100111111001110110010000111011101100011111010101100000000101010100101111010100001101101111100110110001101111001111001001111000011111010101101010001101010110001110111110000000000100001001001110001110100001001001000110010111,110101101001100000000011001010111101111011001011011011011110101001111) = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000000000000000000000000000000000000000010001110010100011111101100110010000111001011010001101011000100110101101001110111101000001011000001011110001110000110110010000000101100100010010001000000000110101111101001000001001011010001101011101000100011111010100100010011100010001100011110010001010110000001110000000111110011100111111001110110010000111011101100011111010101100000000101010100101111010100001101101111100110110001101111001111001001111000011111010101101010001101010110001110111110000000000100001001001110001110100001001001000110010111110101101001100000000011001010111101111011001011011011011110101001111 + bit_concat(11001101011110000111010010001110101011010101101110010011001011001110011101001010001000110110010111110001111010010101110001000011001001110011111101000001101001101010001011000111001001101101010101101100000010110000110000000000110000101110100110001010110110100100111010100101100001010101111101001100110100110101000011110001101011001101111001101101010110001110011101100000110000111100000111111011101101110111110000000111010111111001000010111111100111010110001001101011000101011010010001011111100001101111,101000101110011110000001101111001111100111110001001010100111000111011) = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000000000000000000000000000000000000000011001101011110000111010010001110101011010101101110010011001011001110011101001010001000110110010111110001111010010101110001000011001001110011111101000001101001101010001011000111001001101101010101101100000010110000110000000000110000101110100110001010110110100100111010100101100001010101111101001100110100110101000011110001101011001101111001101101010110001110011101100000110000111100000111111011101101110111110000000111010111111001000010111111100111010110001001101011000101011010010001011111100001101111101000101110011110000001101111001111100111110001001010100111000111011 + bit_concat(00011101111111011110000001011100101011101000101010000001100111101001011111110011001000100010100001100110001000000111101000010000111000011111110011101000001011001101000110011010101101100001001100000110111000110000110100000010010001011101110111100100100001001111011111000101011011100100111000101000101111010001110100011111110010110000111111100101100110001000011110101000010000110001011110101111101001000010100100101011011000110010011010100101111111000100111110111000011101010101001011000110111011100010,110100011010101010011111101100011001010110000101100100010101100001110) = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000000000000000000000000000000000000000000011101111111011110000001011100101011101000101010000001100111101001011111110011001000100010100001100110001000000111101000010000111000011111110011101000001011001101000110011010101101100001001100000110111000110000110100000010010001011101110111100100100001001111011111000101011011100100111000101000101111010001110100011111110010110000111111100101100110001000011110101000010000110001011110101111101001000010100100101011011000110010011010100101111111000100111110111000011101010101001011000110111011100010110100011010101010011111101100011001010110000101100100010101100001110 + bit_concat(00100101011000000101010000111011001111011101101101001001010011101110010110000100100011110110010101100101100000010111001010011001110010100100111000100001110010010011001000111011111111100110011010110010000111000110100101100001010110100111101111101001111001100010010001011111001001101101011111110100000011101000010100011101010000100100010100101110111101010010100111110110100101110001100111100111011100100010100000111100010001010101111110010010001111110100101111001110111110100011111101011110110011001000,010100011111011100111110101001000110100011100010010001011111000111101) = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000000000000000000000000000000000000000000100101011000000101010000111011001111011101101101001001010011101110010110000100100011110110010101100101100000010111001010011001110010100100111000100001110010010011001000111011111111100110011010110010000111000110100101100001010110100111101111101001111001100010010001011111001001101101011111110100000011101000010100011101010000100100010100101110111101010010100111110110100101110001100111100111011100100010100000111100010001010101111110010010001111110100101111001110111110100011111101011110110011001000010100011111011100111110101001000110100011100010010001011111000111101 + bit_concat(10101100010110001100111110011001011100111000000100010101100001100111110010011011110100010110010001110111011110001011000011010010111000101011011111011010011010111010100010111111010100101001010001011010010001100110100101000000101011110110000001111101001100110101011000001001110011111000001111010110010111000001111111101010011010111100000100001111101000101010101011101110010111001101110101111110000001001010100010110100011100011011011110100100111111110011110011110001011101100011111110001000110110000110,000100011100111011111100110101011001000101010101010101010010011111100) = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000000000000000000000000000000000000000010101100010110001100111110011001011100111000000100010101100001100111110010011011110100010110010001110111011110001011000011010010111000101011011111011010011010111010100010111111010100101001010001011010010001100110100101000000101011110110000001111101001100110101011000001001110011111000001111010110010111000001111111101010011010111100000100001111101000101010101011101110010111001101110101111110000001001010100010110100011100011011011110100100111111110011110011110001011101100011111110001000110110000110000100011100111011111100110101011001000101010101010101010010011111100 + bit_concat(11001100101000010011101010111111111000100000010111001101110111000100110111000011111101010001101100111011111110001111010011001111111110001110110000101101001001110001001110101001011111010010111110000110110011110001111110101111111100111010101100111010000011100000011010000000011110111110001001010110110110111000110001000100001110100111001111001001100100001110001000101010010110010000101000001101011100100111110101011111111011111001111100011101000111111010011111000110101011010001010100101010111100110011,110101100110100001110000011111000100010001101101110110001110011101100) = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000000000000000000000000000000000000000011001100101000010011101010111111111000100000010111001101110111000100110111000011111101010001101100111011111110001111010011001111111110001110110000101101001001110001001110101001011111010010111110000110110011110001111110101111111100111010101100111010000011100000011010000000011110111110001001010110110110111000110001000100001110100111001111001001100100001110001000101010010110010000101000001101011100100111110101011111111011111001111100011101000111111010011111000110101011010001010100101010111100110011110101100110100001110000011111000100010001101101110110001110011101100 + bit_concat(01010011100010010011110001110110000001011000000001010011100100000010110010100100001000111011011010001001011001000110000101000101011111001101110101101110010011110001011100011001100111101100001001000111100001001010100011001101100101011100000101111000100001111101111001001011100000111111010000111001101010101011001110001000111001010101011110000110000100111101001011110100110001001000011101111011110101110110111011010011100101010000100111001110010011111101100100000010110001101110001101011000000101101101,110001001011110111101110000110100100011110100111001010000010000011110) = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000000000000000000000000000000000000000001010011100010010011110001110110000001011000000001010011100100000010110010100100001000111011011010001001011001000110000101000101011111001101110101101110010011110001011100011001100111101100001001000111100001001010100011001101100101011100000101111000100001111101111001001011100000111111010000111001101010101011001110001000111001010101011110000110000100111101001011110100110001001000011101111011110101110110111011010011100101010000100111001110010011111101100100000010110001101110001101011000000101101101110001001011110111101110000110100100011110100111001010000010000011110 + bit_concat(01100101100110100100000111000000110101011010000011011100010010001010111000100111011001000101101110100010100111101001100010111100110111101001111011001001000110101000111111010111011110000011011111001110011001100000000011110111010101001101010110100101001110011011011101010001011100000111100001100011100100111001001001111001110001111110101001111011111011000000110101111011100010001110010011100111000100010101100011010011101011111100111001111110011011111111000111110110001000001010101010110010101110100000,001100110100111010001110100100001111111101110110110000110111011101010) = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000000000000000000000000000000000000000001100101100110100100000111000000110101011010000011011100010010001010111000100111011001000101101110100010100111101001100010111100110111101001111011001001000110101000111111010111011110000011011111001110011001100000000011110111010101001101010110100101001110011011011101010001011100000111100001100011100100111001001001111001110001111110101001111011111011000000110101111011100010001110010011100111000100010101100011010011101011111100111001111110011011111111000111110110001000001010101010110010101110100000001100110100111010001110100100001111111101110110110000110111011101010 + bit_concat(10000111110011110001111000011110011010101100010000011101001100100001011101011011010110011101011001100000101001100011010110010110000000110000110011101010001010000100111001011110010110110001001010011011111000111100100100110010001000111000111001101110101110110010010010001111001011001110110011000000000111111010110100101100100110110011101100100010000100111000001100010101001000000110101000010000001100000100100111011110101101101111111101110111010100100010110100011000111100101110110111110000001101100110,100100111110001101100100010100100010000111111100000010110100100001001) = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000000000000000000000000000000000000000010000111110011110001111000011110011010101100010000011101001100100001011101011011010110011101011001100000101001100011010110010110000000110000110011101010001010000100111001011110010110110001001010011011111000111100100100110010001000111000111001101110101110110010010010001111001011001110110011000000000111111010110100101100100110110011101100100010000100111000001100010101001000000110101000010000001100000100100111011110101101101111111101110111010100100010110100011000111100101110110111110000001101100110100100111110001101100100010100100010000111111100000010110100100001001 + bit_concat(01010011010010101101100110101101001100011010110000111010000100101011000100111001010111100010000100100110110010111011101100111001010011000011001000100011010110110111011100001101111011100111100111000010011111101000110100000010100001000101110010010100110110110110010110001001100110101001010011010001111011100111010110011010110010101111001001000011000101000001010001111011111111011011111111111111000110101001100011000101111000101010000110001110010100011111011111111100011100101111001110111000111110111001,011101101000010010010001010100001101010110011010001001101111111001010) = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000000000000000000000000000000000000000001010011010010101101100110101101001100011010110000111010000100101011000100111001010111100010000100100110110010111011101100111001010011000011001000100011010110110111011100001101111011100111100111000010011111101000110100000010100001000101110010010100110110110110010110001001100110101001010011010001111011100111010110011010110010101111001001000011000101000001010001111011111111011011111111111111000110101001100011000101111000101010000110001110010100011111011111111100011100101111001110111000111110111001011101101000010010010001010100001101010110011010001001101111111001010 + bit_concat(00100110011011001010100000110000010101111010000100100100010010101110101010010001011111111110100101110011010110001110001101011001010011100110110001101001101101001100010101110100011111111001100010100110100110011100011111010011101100110101100011110000011010101111110000101000110100101001111001100100110011100100110100010110000010100111000110101011010011111100011000110101111111000101011011010110101101011000110101100001110101100110001100011001111010101011111101101101100000100001010111110000101011101101,011011101110101110000111001101000001111011101010011000100010100100110) = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000000000000000000000000000000000000000000100110011011001010100000110000010101111010000100100100010010101110101010010001011111111110100101110011010110001110001101011001010011100110110001101001101101001100010101110100011111111001100010100110100110011100011111010011101100110101100011110000011010101111110000101000110100101001111001100100110011100100110100010110000010100111000110101011010011111100011000110101111111000101011011010110101101011000110101100001110101100110001100011001111010101011111101101101100000100001010111110000101011101101011011101110101110000111001101000001111011101010011000100010100100110 + bit_concat(00111111010000000110010001000001010101011011110101110110101101001111010101111101010010100010100011010010001111011110100101101100000011111000001110101111001010010001110010011100011100011010010000011000100000000110011110110100101001110110100111010100001011011110101111111100000000000000101110101010101010110100100000000110100000100000011101100000000111101110100000010100110110100011100111111111110100010001101100110100011100001111111101111001111101101011001111100000111110001100110000100101011011100010,000010000000000010111110001110110110010001001010101010101010001111110) = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000000000000000000000000000000000000000000111111010000000110010001000001010101011011110101110110101101001111010101111101010010100010100011010010001111011110100101101100000011111000001110101111001010010001110010011100011100011010010000011000100000000110011110110100101001110110100111010100001011011110101111111100000000000000101110101010101010110100100000000110100000100000011101100000000111101110100000010100110110100011100111111111110100010001101100110100011100001111111101111001111101101011001111100000111110001100110000100101011011100010000010000000000010111110001110110110010001001010101010101010001111110 + bit_concat(11001110011001010000101110001010111100100010111011001111111010110000011010101000010101000000011011100001011100101111001000001111001001101111101010110110101010100000000111001100111000010100110100100111011101111011101111110100000011000110110011101001110010010110010111100100110000110111000011011000000010001111101100000001011111111101101010011101111011110000011101010001000111000101101101101101001001011000110101111011100010000101000110101100011110101110110101001010101011000011001110001001101110100000,110111010011010010110101111000011010111110101101110100101001001100111) = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000000000000000000000000000000000000000011001110011001010000101110001010111100100010111011001111111010110000011010101000010101000000011011100001011100101111001000001111001001101111101010110110101010100000000111001100111000010100110100100111011101111011101111110100000011000110110011101001110010010110010111100100110000110111000011011000000010001111101100000001011111111101101010011101111011110000011101010001000111000101101101101101001001011000110101111011100010000101000110101100011110101110110101001010101011000011001110001001101110100000110111010011010010110101111000011010111110101101110100101001001100111 + bit_concat(11110111100001100111111101100011101110000010000011100110000000000110100101101110000111111000000011001110000011010101001001001000110101101100111100000100000100101111000110101111100110101111111100010000100010000011001111100010101100110001001000100101011011001001011011111011011001100000100000000101011110011111101111100010011001001110110101010011101100011111011100001010111110011001000010101110110111110000111011110011011101110100011101110011101100101001111011011101010111011100010100110011110001110100,001001001011100100001000101011001101001101011100100010000100000010100) = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000000000000000000000000000000000000000011110111100001100111111101100011101110000010000011100110000000000110100101101110000111111000000011001110000011010101001001001000110101101100111100000100000100101111000110101111100110101111111100010000100010000011001111100010101100110001001000100101011011001001011011111011011001100000100000000101011110011111101111100010011001001110110101010011101100011111011100001010111110011001000010101110110111110000111011110011011101110100011101110011101100101001111011011101010111011100010100110011110001110100001001001011100100001000101011001101001101011100100010000100000010100 + bit_concat(11000011010110001000101101100101011011110100000110101011100010101100000010011000100001100101011100000011011101111110100100001010010011101011010101111101111111110110100011110101000111110001110001011010101010110111000000101100001001011011000001101010000000000100011011111111100001011011010000011010101010001011110001000011010011001010011110101101100101010010110011100011001100110101010011010110000101000000011001100100011100101111000000001101101111100010101010110100100001111000000001111010010100100000,101000000110000001000011011111101100100111101101100111010101101011000) = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000000000000000000000000000000000000000011000011010110001000101101100101011011110100000110101011100010101100000010011000100001100101011100000011011101111110100100001010010011101011010101111101111111110110100011110101000111110001110001011010101010110111000000101100001001011011000001101010000000000100011011111111100001011011010000011010101010001011110001000011010011001010011110101101100101010010110011100011001100110101010011010110000101000000011001100100011100101111000000001101101111100010101010110100100001111000000001111010010100100000101000000110000001000011011111101100100111101101100111010101101011000 + bit_concat(11100100111010111010111100000001110110101001110001010001001001010001000100010010001001101001100000100101000010010110010110011011000100000001000010011000101000101111111001101010011101111111101001110010111010011101010101000000101101000101110000011000010010000111011001110101100100101100100000101010101001111100110101101001010111101101011001001011101101000001110100010110110011110100001111000011100111100001100110011100010010100111010010000001101011010010010000011010010100010111110110101001000100111101,000001010000000100101111100110011101000100110100110011001011100010110) = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000000000000000000000000000000000000000011100100111010111010111100000001110110101001110001010001001001010001000100010010001001101001100000100101000010010110010110011011000100000001000010011000101000101111111001101010011101111111101001110010111010011101010101000000101101000101110000011000010010000111011001110101100100101100100000101010101001111100110101101001010111101101011001001011101101000001110100010110110011110100001111000011100111100001100110011100010010100111010010000001101011010010010000011010010100010111110110101001000100111101000001010000000100101111100110011101000100110100110011001011100010110 + bit_concat(10111000000010100101110110001100011111000001011101010000000100100011011011100011010011011001111111010010100011110111000000111100010011000001110111011010011100001000110111010001011110101111111010011000111010111010100010001101100010101001000101010001000010111110100111011011011011101100011101111100000111110011101001000010100010101110001000110110000101111111001110111011011000100110111001101011100000101011101111000110001010101101110001111100001000000101011111001011100010111011001010011100111010110110,101001101110110000111011000011010010111000011011101000101110111111100) = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000000000000000000000000000000000000000010111000000010100101110110001100011111000001011101010000000100100011011011100011010011011001111111010010100011110111000000111100010011000001110111011010011100001000110111010001011110101111111010011000111010111010100010001101100010101001000101010001000010111110100111011011011011101100011101111100000111110011101001000010100010101110001000110110000101111111001110111011011000100110111001101011100000101011101111000110001010101101110001111100001000000101011111001011100010111011001010011100111010110110101001101110110000111011000011010010111000011011101000101110111111100 + bit_concat(00001111010101100010101010001000100010101011101101111000001001010011011110001011111011001101101100011000010110101000100000110001100000111100110010101101000000110101010100000001110010110111110100001000100100010011100111000101101111101110111101011001011001110101011000001111000001100010001010101000000111101100010011010011001101101101111001010111001000001111110000111001100110100000000101110111110010111000010011001011100010101100001100101001101000011010001101001111101101011101101000111001101100010001,100110010111000100001111110111011101100001100110110001111000111001110) = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000000000000000000000000000000000000000000001111010101100010101010001000100010101011101101111000001001010011011110001011111011001101101100011000010110101000100000110001100000111100110010101101000000110101010100000001110010110111110100001000100100010011100111000101101111101110111101011001011001110101011000001111000001100010001010101000000111101100010011010011001101101101111001010111001000001111110000111001100110100000000101110111110010111000010011001011100010101100001100101001101000011010001101001111101101011101101000111001101100010001100110010111000100001111110111011101100001100110110001111000111001110 + bit_concat(11010011111001011101110000000001100001111011010101010000000000000000011100001011111111011000100100001111011100111010110010000000001010110110101100111111101101011111100111111101110110000100101010101000111101001110110100110101110010111000000111100110010000011001010110110100010010111111110010111111100001000011000110001101100111010010110011101010000111001110011000011111011010010101010101101111110100011110111001100110111000111100101010011110100100011111100011011111100111101101100011101001110001101111,001011111010110111000000100111001101110011110101001000110101101001111) = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000000000000000000000000000000000000000011010011111001011101110000000001100001111011010101010000000000000000011100001011111111011000100100001111011100111010110010000000001010110110101100111111101101011111100111111101110110000100101010101000111101001110110100110101110010111000000111100110010000011001010110110100010010111111110010111111100001000011000110001101100111010010110011101010000111001110011000011111011010010101010101101111110100011110111001100110111000111100101010011110100100011111100011011111100111101101100011101001110001101111001011111010110111000000100111001101110011110101001000110101101001111 + bit_concat(11010110110101100101100011010100001100111110000011011010111001000110101100101110011110011111110101110000110011010010011000111101110101110111111110101001011111001111000011000100110000101000000111011001101111101101111101100011111111001110110000101011001000101010110000011011001010111111101110101010011101001000001110101010110011011001101000110001111001010011000100010111100110000000101100000010011011101100000000010101101001000011100000100101000011101100010011000000010010110011111000001100000000000011,000001110100100011001000010011100100100110000000100100101111101101111) = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000000000000000000000000000000000000000011010110110101100101100011010100001100111110000011011010111001000110101100101110011110011111110101110000110011010010011000111101110101110111111110101001011111001111000011000100110000101000000111011001101111101101111101100011111111001110110000101011001000101010110000011011001010111111101110101010011101001000001110101010110011011001101000110001111001010011000100010111100110000000101100000010011011101100000000010101101001000011100000100101000011101100010011000000010010110011111000001100000000000011000001110100100011001000010011100100100110000000100100101111101101111 + bit_concat(10010001000001000100011000011111010000100010111001000110111010110010010111101001100111100111100100111000110001011011101110111101100000010100001100011000011110100110011001001101000101110101110111110011011101100110011100011000111010111010000010001011010100011110000111111010010111011011010100100101010111011000000101000010011101010100001110010001101101110000101010000111110010100011110110010110110001101000011110011001000001010010010110111001100000101111010000101110001110000001101010100100110011011000,010011101100110111100111010011010101010100100011111100110111011001000) = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000000000000000000000000000000000000000010010001000001000100011000011111010000100010111001000110111010110010010111101001100111100111100100111000110001011011101110111101100000010100001100011000011110100110011001001101000101110101110111110011011101100110011100011000111010111010000010001011010100011110000111111010010111011011010100100101010111011000000101000010011101010100001110010001101101110000101010000111110010100011110110010110110001101000011110011001000001010010010110111001100000101111010000101110001110000001101010100100110011011000010011101100110111100111010011010101010100100011111100110111011001000 + bit_concat(01101101010111010110010101011011001110001010110001000000101001101111111010110110011111111111010101011110001010001111000111110110011111011111011110010010001010110011110101000101101110110111100111000011111001110011000011110001111011110011000011110101010011110111000001100001110100110111010001001000000001110111000011100000100111111111000111011011111011000111000101001010010111010111110101000010110000001011000011000011111111100000010110010001100001111010101001000100101111001001011100110011001011000011,111100001111101010110011001000110000010001101000111111111011100111110) = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000000000000000000000000000000000000000001101101010111010110010101011011001110001010110001000000101001101111111010110110011111111111010101011110001010001111000111110110011111011111011110010010001010110011110101000101101110110111100111000011111001110011000011110001111011110011000011110101010011110111000001100001110100110111010001001000000001110111000011100000100111111111000111011011111011000111000101001010010111010111110101000010110000001011000011000011111111100000010110010001100001111010101001000100101111001001011100110011001011000011111100001111101010110011001000110000010001101000111111111011100111110 + bit_concat(11001011000110101011000011100101001111111110101000001010000010000111001100010100101000000010010101010100101111011110100101110101100100111010011101111001100010101111100011110000101000010011100011110111100110000110110111100101010010100111010011100101010000000011001100000001111101110110111100000110000001100011000011111001011001101101011101001001110010111100010101010000100001110100011101100011100100010010111001001101110111001001000000001001100010001001101111011100100000100101100100000111111001011010,010000001011011000010100000111110101001100001001001011111110000100000) = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000000000000000000000000000000000000000011001011000110101011000011100101001111111110101000001010000010000111001100010100101000000010010101010100101111011110100101110101100100111010011101111001100010101111100011110000101000010011100011110111100110000110110111100101010010100111010011100101010000000011001100000001111101110110111100000110000001100011000011111001011001101101011101001001110010111100010101010000100001110100011101100011100100010010111001001101110111001001000000001001100010001001101111011100100000100101100100000111111001011010010000001011011000010100000111110101001100001001001011111110000100000 + bit_concat(11011001010100011010111110110111010010101110011110000101111110010011011100100101100110101010010011010101001011101100110111110101100111011010110100101010100000110001111010001010110011101101100101010111011111100111001010100010111110011100001010100101111110101010011110110001011001111000011010010001000000110110010110000101101101001100101110011011011001011110010001001110111110001101001110101000100011001110010101101001011111101100100000001110000100000101010110101001001110111011010010011010000100001100,010111000001001000010101111001101110000001011110111101000001111001101) = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000000000000000000000000000000000000000011011001010100011010111110110111010010101110011110000101111110010011011100100101100110101010010011010101001011101100110111110101100111011010110100101010100000110001111010001010110011101101100101010111011111100111001010100010111110011100001010100101111110101010011110110001011001111000011010010001000000110110010110000101101101001100101110011011011001011110010001001110111110001101001110101000100011001110010101101001011111101100100000001110000100000101010110101001001110111011010010011010000100001100010111000001001000010101111001101110000001011110111101000001111001101 + bit_concat(11101000101110101111000111000011110010010101011110010000100110101110111111011100001001000111101010000011110010010110100110000100000000101100111101111000000000000101111001110001110011011001001111000110001101001000110110000010110001001010110000111101111110101001111111100110100110001110111011100011100011011000100011100001110011110111010100110111101101100100011010011011100100110001011001010111111100010100111100001100011100000110111001011011011111110001111100101000101000100001010001110000010010001111,000010111111010010101100001110010011000000101010000010010100111011101) = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000000000000000000000000000000000000000011101000101110101111000111000011110010010101011110010000100110101110111111011100001001000111101010000011110010010110100110000100000000101100111101111000000000000101111001110001110011011001001111000110001101001000110110000010110001001010110000111101111110101001111111100110100110001110111011100011100011011000100011100001110011110111010100110111101101100100011010011011100100110001011001010111111100010100111100001100011100000110111001011011011111110001111100101000101000100001010001110000010010001111000010111111010010101100001110010011000000101010000010010100111011101 + bit_concat(00101011110100000010011101111111101000011001010011010010100011101000001000101110011010110111011110100101111010010101010000001110110000110011110100001111111001000100111110001111100111000000100110111001011101011000110110000010101001100110010100111110110111101011001010110100111100111011101110011010000010010000010011111000101001011011100100101101010000010011110001111101110110010010001000111111110000000011010010010110111100011100100101000111110111100011000010000000101110001010101000110111010010100010,010110000101110011110111101000001000000111000001100110010111111011001) = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000000000000000000000000000000000000000000101011110100000010011101111111101000011001010011010010100011101000001000101110011010110111011110100101111010010101010000001110110000110011110100001111111001000100111110001111100111000000100110111001011101011000110110000010101001100110010100111110110111101011001010110100111100111011101110011010000010010000010011111000101001011011100100101101010000010011110001111101110110010010001000111111110000000011010010010110111100011100100101000111110111100011000010000000101110001010101000110111010010100010010110000101110011110111101000001000000111000001100110010111111011001 + bit_concat(01011101110101101000111011101101001111010000110011000101000110100010101101001000111001111101111010000101001101000101010010100001000110000110010100010011001000000010010001011101100101001011010011011011010100000110001000101100111010111000010101101001001110101000000000001011110110000010010111101101001101110101111011010001111011111101011001100101000000100101000010110010000010010011111101001000001000101110010011100010011111001100010111110110110110011111011001001010011000011111110001100001001111110010,000011100100100101001010101101111110000010000101001101011100001110100) = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000000000000000000000000000000000000000001011101110101101000111011101101001111010000110011000101000110100010101101001000111001111101111010000101001101000101010010100001000110000110010100010011001000000010010001011101100101001011010011011011010100000110001000101100111010111000010101101001001110101000000000001011110110000010010111101101001101110101111011010001111011111101011001100101000000100101000010110010000010010011111101001000001000101110010011100010011111001100010111110110110110011111011001001010011000011111110001100001001111110010000011100100100101001010101101111110000010000101001101011100001110100 + bit_concat(10101000010011101011111101000000100000000001111100010100001111101101101100011101000000001110100010010100111100000100111000011000001010011001000010111010001101011111100000000000011010000111110011101111111010011111111010100101001010111110110001111010100110000100011100011001110000010000100110111010011111001111110100110101101100111000010101011001000010110001010110111001100001101100001001110100001100110101011110010110111100100100111101011000001000011000000010001110101001000100101101101100000100110010,010000010101011010010100101100101101101111001000001011101010100011001) = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000000000000000000000000000000000000000010101000010011101011111101000000100000000001111100010100001111101101101100011101000000001110100010010100111100000100111000011000001010011001000010111010001101011111100000000000011010000111110011101111111010011111111010100101001010111110110001111010100110000100011100011001110000010000100110111010011111001111110100110101101100111000010101011001000010110001010110111001100001101100001001110100001100110101011110010110111100100100111101011000001000011000000010001110101001000100101101101100000100110010010000010101011010010100101100101101101111001000001011101010100011001 + bit_concat(10100110110101100110111100110101111001010111001010000000011001101001101010110011000000001101111011110011001000000010010110001001110101101011011110110001001001100110001100011100011011101000110101000110111001001100010110101101101110101100000111010000100010000111011101101000101100110001000111010010101101111111101101011000000001101010101010101011100000101111001100111110101010000011101010110100101010101010010111001100001010100011101000001011011110010111101110000000001000100001000011110101111011011111,000010110101010001100001100000000001011001100011101111001011011111010) = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000000000000000000000000000000000000000010100110110101100110111100110101111001010111001010000000011001101001101010110011000000001101111011110011001000000010010110001001110101101011011110110001001001100110001100011100011011101000110101000110111001001100010110101101101110101100000111010000100010000111011101101000101100110001000111010010101101111111101101011000000001101010101010101011100000101111001100111110101010000011101010110100101010101010010111001100001010100011101000001011011110010111101110000000001000100001000011110101111011011111000010110101010001100001100000000001011001100011101111001011011111010 + bit_concat(11000110001010100011111000101000111100000101001000111110100000111001001000100000001010000010001001100100110110110011010011001101011001010001110110111111011101010111000001110110101111010101000011111010101110110101000010110111110011001011010100000101100011100011111111000010010000100100010111011000100101101101111001001010001101111001111001010110111000000010101101000000100001011111011010110001001001100100001100001101110000100001111101111001011000101101111110001100011001100101111001010111111111111011,111000111010111110000111100000101001010011001110010000110111101011110) = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000000000000000000000000000000000000000011000110001010100011111000101000111100000101001000111110100000111001001000100000001010000010001001100100110110110011010011001101011001010001110110111111011101010111000001110110101111010101000011111010101110110101000010110111110011001011010100000101100011100011111111000010010000100100010111011000100101101101111001001010001101111001111001010110111000000010101101000000100001011111011010110001001001100100001100001101110000100001111101111001011000101101111110001100011001100101111001010111111111111011111000111010111110000111100000101001010011001110010000110111101011110 + bit_concat(11111101001101100111001111001100111001101010100111101010110000111001011100111010100101110001010010110110101000100110100100011110100111111110100001011000011100010010101010011011110100101001001000010110001100001011000000100000011100100011011110100100110100101010000100001101111101110100111110111101100110001111000010111000011100100110110000100100111011000110100011000000010101110010110111100001100010010100010011001010010011101100010000000001010111110111010000001001111110011000010011010011001000111100,110010010001000000100100100010001001100110010010011001111110110100011) = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000000000000000000000000000000000000000011111101001101100111001111001100111001101010100111101010110000111001011100111010100101110001010010110110101000100110100100011110100111111110100001011000011100010010101010011011110100101001001000010110001100001011000000100000011100100011011110100100110100101010000100001101111101110100111110111101100110001111000010111000011100100110110000100100111011000110100011000000010101110010110111100001100010010100010011001010010011101100010000000001010111110111010000001001111110011000010011010011001000111100110010010001000000100100100010001001100110010010011001111110110100011 + bit_concat(00010110001111100001101110110000001011001110110110111000011010010010110011000010101001000101110011000001101001011110010011100101001001001101001010010011101110010111011111111010011000110111110111011110001101100010000011100101101000000100010101100111000100010110111101110000111110110100111100001110011011100001011001110001101010011100011111010110101111000101011101010101000001010101011001000101000010110110011000101011010000100101110001000010000111010010010000101101000001001110001101110010010000111111,000011011000101100101000001110100101001001011101100100100000010100000) = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000000000000000000000000000000000000000000010110001111100001101110110000001011001110110110111000011010010010110011000010101001000101110011000001101001011110010011100101001001001101001010010011101110010111011111111010011000110111110111011110001101100010000011100101101000000100010101100111000100010110111101110000111110110100111100001110011011100001011001110001101010011100011111010110101111000101011101010101000001010101011001000101000010110110011000101011010000100101110001000010000111010010010000101101000001001110001101110010010000111111000011011000101100101000001110100101001001011101100100100000010100000 + bit_concat(10110001101100101111111010011110101010100010000111010011000110000101101100110000111010110011010000000111010010001100000001000000000100001000010001001011111111010000000100111010110001110011111111100110011110100000111010101001011010011000000000011010011011110011000001001111110110101000110011111011100011100110110010111110001001111110000100111100111000001101001110101011000110101101100010000110110011111000010000100101001011010011110010011010010000001110011001110101100110111101100011100000100110010101,111001111100010111111100111001110010100000101110011100001101110101011) = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000000000000000000000000000000000000000010110001101100101111111010011110101010100010000111010011000110000101101100110000111010110011010000000111010010001100000001000000000100001000010001001011111111010000000100111010110001110011111111100110011110100000111010101001011010011000000000011010011011110011000001001111110110101000110011111011100011100110110010111110001001111110000100111100111000001101001110101011000110101101100010000110110011111000010000100101001011010011110010011010010000001110011001110101100110111101100011100000100110010101111001111100010111111100111001110010100000101110011100001101110101011 + bit_concat(00101010111010110100111010000010010111101010101111100001111110011000011100110001101101010111110110110000011011101010011000001011100111110000110100101000100011101010100100111001011100110111011010000010010010110100101110101000100110011010011001011101011101011000000101110010001110011111010011001010011010110010011010111011101000001111000001011010001001111001000001101101110011010110000100110110000111000101000000100101110101001010111101010110100110001001101000100010101111101011001001101100110111011100,000000100000000111100100101011101101110110010011100000010111001001110) = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000000000000000000000000000000000000000000101010111010110100111010000010010111101010101111100001111110011000011100110001101101010111110110110000011011101010011000001011100111110000110100101000100011101010100100111001011100110111011010000010010010110100101110101000100110011010011001011101011101011000000101110010001110011111010011001010011010110010011010111011101000001111000001011010001001111001000001101101110011010110000100110110000111000101000000100101110101001010111101010110100110001001101000100010101111101011001001101100110111011100000000100000000111100100101011101101110110010011100000010111001001110 + bit_concat(11001101001101101000110010000111011100110000110010001000101100001001010010001000001101010100110010111010010010010101100111100101000101000001110100011100011011111101000010101110101010111010101110010011101011001010001100010101110011101110010111111011011001100100010101101110100001000100010100100110101000011011110100010000111100111011100001101111010000011100011101011011101001000000101001001011110011101111011011100010010111000001101010011111101110110101000000110011110010100111100110110110101001110001,011000000011100111011110001101001011011111001101000011001110110011100) = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000000000000000000000000000000000000000011001101001101101000110010000111011100110000110010001000101100001001010010001000001101010100110010111010010010010101100111100101000101000001110100011100011011111101000010101110101010111010101110010011101011001010001100010101110011101110010111111011011001100100010101101110100001000100010100100110101000011011110100010000111100111011100001101111010000011100011101011011101001000000101001001011110011101111011011100010010111000001101010011111101110110101000000110011110010100111100110110110101001110001011000000011100111011110001101001011011111001101000011001110110011100 + bit_concat(11001010001001011010111011011010110001100010110011000001100000011001010011000001101101100100110110011010100100000111101101110100111011011001011101011101001111110010101001010101000011111000011001011101100110000101011101101101010100010110110000101011011100001011111100101100110100001011011110001100110110101111101000101011011011001010000100110000110001100101000101100000011011001011101110100111011011010010110011100111101111000001110011000011001010101100000001100101001000101000001111011010100110010010,001101001100001100100111100101001101000010010000000110010100000010100) = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000000000000000000000000000000000000000011001010001001011010111011011010110001100010110011000001100000011001010011000001101101100100110110011010100100000111101101110100111011011001011101011101001111110010101001010101000011111000011001011101100110000101011101101101010100010110110000101011011100001011111100101100110100001011011110001100110110101111101000101011011011001010000100110000110001100101000101100000011011001011101110100111011011010010110011100111101111000001110011000011001010101100000001100101001000101000001111011010100110010010001101001100001100100111100101001101000010010000000110010100000010100 + bit_concat(10110010101100000101000010011001010000110000001001000001000100000110101101101001001000100101001010000110010111111010000100001100001010111101010000000010110010010111000101000100101110000001100101100110000111101010110100011001111110110001101001110100001100001110110010100101010011111000000011000001101110011110001111111110101101111010011001001000110111101010001110010110001001010001001101101100100111001101001011011100000010000000000110110011110111111110000000000001010110001110000101101100010010001010,011000001011001101100000000011010111001101001101011110100101001000100) = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000000000000000000000000000000000000000010110010101100000101000010011001010000110000001001000001000100000110101101101001001000100101001010000110010111111010000100001100001010111101010000000010110010010111000101000100101110000001100101100110000111101010110100011001111110110001101001110100001100001110110010100101010011111000000011000001101110011110001111111110101101111010011001001000110111101010001110010110001001010001001101101100100111001101001011011100000010000000000110110011110111111110000000000001010110001110000101101100010010001010011000001011001101100000000011010111001101001101011110100101001000100 + bit_concat(11101110110101000011001110101100010110101111100101111001011001001110100010100100011011100000100011001101101111100100010110100010110101011100100110111100101000011000101000110101000111011111110011011011000001101110011100011101000101100100010111011111011101001000010001010001101000001110000100101000101101100000000111111010000001011110000000001010010111111010111000010010100000001000111111100011110101011010010100110101010001110100101010010110101110111101010011101000110101111011000010110011101011100110,000101011110101100011100110101001011100011000100100000011001101000010) = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000000000000000000000000000000000000000011101110110101000011001110101100010110101111100101111001011001001110100010100100011011100000100011001101101111100100010110100010110101011100100110111100101000011000101000110101000111011111110011011011000001101110011100011101000101100100010111011111011101001000010001010001101000001110000100101000101101100000000111111010000001011110000000001010010111111010111000010010100000001000111111100011110101011010010100110101010001110100101010010110101110111101010011101000110101111011000010110011101011100110000101011110101100011100110101001011100011000100100000011001101000010 + bit_concat(01101000000000001111001011101000000100000001011101101011101101101101101100001001110011101011000110100000000100111100011100001010001011011110101111111001101010011100001010010101110000111010011111110111110010100000011110111110000011011010100100111000001110011000101000011001010111111110111011101010111000101001110001000101110001010010001101010111011111001001110011011100011101000111001100001000101101100010111000110101111011011101010111111011100111000101000010101111100011101011101110000100110111001000,110010100111101111101110010010001111101111001000110010011011001010101) = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000000000000000000000000000000000000000001101000000000001111001011101000000100000001011101101011101101101101101100001001110011101011000110100000000100111100011100001010001011011110101111111001101010011100001010010101110000111010011111110111110010100000011110111110000011011010100100111000001110011000101000011001010111111110111011101010111000101001110001000101110001010010001101010111011111001001110011011100011101000111001100001000101101100010111000110101111011011101010111111011100111000101000010101111100011101011101110000100110111001000110010100111101111101110010010001111101111001000110010011011001010101 + bit_concat(01011101101011110100011011110100010000111010011001001110001000101101100001000100111000010110101011111110100111000100101101011101010011001011111100010110010000101100000010101000001110101101110100101000010100100110110100001011101000001001110101100111111000110111111011001001111010100010001010101110011111100001110111111001011100111000111001111100010010111000111001111011110000111110101001010100110011100111100011001101011001110111001110000001101010111001111100001010011111000001001101000110000100101011,001000100010110110110000010100000000010001010111100100100100100100101) = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000000000000000000000000000000000000000001011101101011110100011011110100010000111010011001001110001000101101100001000100111000010110101011111110100111000100101101011101010011001011111100010110010000101100000010101000001110101101110100101000010100100110110100001011101000001001110101100111111000110111111011001001111010100010001010101110011111100001110111111001011100111000111001111100010010111000111001111011110000111110101001010100110011100111100011001101011001110111001110000001101010111001111100001010011111000001001101000110000100101011001000100010110110110000010100000000010001010111100100100100100100101 + bit_concat(10101110001010111110110011011110101010010101111000100101001110010110101111110011001011001111110101111111000101000111011101010001000111011001000011110110011001101010100100001000100111110010010110000010001101001010111111010011011011111011111111100111011000101010101000011100000010011111100001001101000101001010011000110110010101001101000101110010001000001101000110110100011010011111101011110101111101001100000111001100101110011100100001001011011100010101110101111111001000101000001010011001111100010011,001001011111110000011101110011111010011110000010011100111110101011010) = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000000000000000000000000000000000000000010101110001010111110110011011110101010010101111000100101001110010110101111110011001011001111110101111111000101000111011101010001000111011001000011110110011001101010100100001000100111110010010110000010001101001010111111010011011011111011111111100111011000101010101000011100000010011111100001001101000101001010011000110110010101001101000101110010001000001101000110110100011010011111101011110101111101001100000111001100101110011100100001001011011100010101110101111111001000101000001010011001111100010011001001011111110000011101110011111010011110000010011100111110101011010 + bit_concat(10101001100011010100101101010111011111001001000011001101100100001010110100000001110100010100110011001011011001110101110001010111011111010110100100011111000011110011110011000010101011011010001000000001001010000101000111111110110100000101001010000011010100111111111011111111111100101111111100001000111101010110100110011101101101101111011000110101110000001111101010111001011001000001101000110110101111010101101101010110111000010101111101011111111110101001001001010101010101011100010111111001100011110100,100000000011101101001100011001011011111101011100010100101001101110000) = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000000000000000000000000000000000000000010101001100011010100101101010111011111001001000011001101100100001010110100000001110100010100110011001011011001110101110001010111011111010110100100011111000011110011110011000010101011011010001000000001001010000101000111111110110100000101001010000011010100111111111011111111111100101111111100001000111101010110100110011101101101101111011000110101110000001111101010111001011001000001101000110110101111010101101101010110111000010101111101011111111110101001001001010101010101011100010111111001100011110100100000000011101101001100011001011011111101011100010100101001101110000 + bit_concat(01011101001101100111110101000000101101000110001110001011000000001111011000110001001000100101001110001101110110000101111010110000000110000111111001111010001101101110100111100000011101101010100010010001111100101011100101110111110111000010000101101111000011010001111010010101011000110011110001110111100010110010011011100000100111001000010011110011110010000011010110010001111010111110010001000011011011010111100101101001101000110011110101100110100000101001010000011010000011001000010110101101101110110111,010110110111101110010101110101100111111100100011010110001101011101010) = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000000000000000000000000000000000000000001011101001101100111110101000000101101000110001110001011000000001111011000110001001000100101001110001101110110000101111010110000000110000111111001111010001101101110100111100000011101101010100010010001111100101011100101110111110111000010000101101111000011010001111010010101011000110011110001110111100010110010011011100000100111001000010011110011110010000011010110010001111010111110010001000011011011010111100101101001101000110011110101100110100000101001010000011010000011001000010110101101101110110111010110110111101110010101110101100111111100100011010110001101011101010 + bit_concat(11010010111110000011010101111111000000001110110010101111011000100101101000111110110000011111101011111011001100111000001110000101010110110000000000000111111100001111100101011011011000111001001010101101000101000100111011100001110000110000110000001000100100111110111111100101111011001100111101110001111000111010110100101011100100011011000101101111001100100110000101100110100011111110100011011011001010000100001010000000111110010010000111111010110111110101101000010001111010000101010000101001100100101001,011001001001111001111000010010101001001111001001110110100101111110010) = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000000000000000000000000000000000000000011010010111110000011010101111111000000001110110010101111011000100101101000111110110000011111101011111011001100111000001110000101010110110000000000000111111100001111100101011011011000111001001010101101000101000100111011100001110000110000110000001000100100111110111111100101111011001100111101110001111000111010110100101011100100011011000101101111001100100110000101100110100011111110100011011011001010000100001010000000111110010010000111111010110111110101101000010001111010000101010000101001100100101001011001001001111001111000010010101001001111001001110110100101111110010 + bit_concat(00111101110111000001011110110010110000100111111101101000011010101100110111100010001101100011000010000001111110011101010011101100000000111001000111110110010100100100011111000111001010011000010011010100110101000101011111101000111101110100110101000101111010001101011111100011111111001000001111010101101100010001101001101010101110100000101101001100010110100001010010000111011001001010001011010001000001101001000111110001100100101101001100100111011011111001011101011000010000011110011110011110011011011001,000110011100101110110011111001001000001111111100111111100010111011001) = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000000000000000000000000000000000000000000111101110111000001011110110010110000100111111101101000011010101100110111100010001101100011000010000001111110011101010011101100000000111001000111110110010100100100011111000111001010011000010011010100110101000101011111101000111101110100110101000101111010001101011111100011111111001000001111010101101100010001101001101010101110100000101101001100010110100001010010000111011001001010001011010001000001101001000111110001100100101101001100100111011011111001011101011000010000011110011110011110011011011001000110011100101110110011111001001000001111111100111111100010111011001 + bit_concat(11001110111001110000101011101110100011010110010010000100010110100101000010101100110100111000000010100000010100111110101001101101001001001011101010000101111010110010000101011100100000110011010011011000111001000000111110001001110111110010000000011101101101000010101100000001100011111000000001001111010000111010111011011000100001001001000101010110101001000000000100010000101001011111101100100111110010011011110001111100110100001001100001110110010000010000010010101101011000011011110111100001010100100000,001010101011101101010000110110100101111110001111000001010000000010001) = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000000000000000000000000000000000000000011001110111001110000101011101110100011010110010010000100010110100101000010101100110100111000000010100000010100111110101001101101001001001011101010000101111010110010000101011100100000110011010011011000111001000000111110001001110111110010000000011101101101000010101100000001100011111000000001001111010000111010111011011000100001001001000101010110101001000000000100010000101001011111101100100111110010011011110001111100110100001001100001110110010000010000010010101101011000011011110111100001010100100000001010101011101101010000110110100101111110001111000001010000000010001 + bit_concat(11101110100110100100100101001100010001010101101011000100001111100000100110010111110100100010110110000000001100011000010100111110110110111001010010001011001110101010011110001000000001111000000100101100100010010111010010000110111001011110110001110110110001010110001010000000011000000000000001101000111111111101101111010010100111100011001111011000101101101010100111010101000001001010110011101110111111010110000100111110000001010001101110010010001101101101010110001100000001111001100110001110111011111111,000111101110100111101010101010011000110000100111101010000111110011010) = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000000000000000000000000000000000000000011101110100110100100100101001100010001010101101011000100001111100000100110010111110100100010110110000000001100011000010100111110110110111001010010001011001110101010011110001000000001111000000100101100100010010111010010000110111001011110110001110110110001010110001010000000011000000000000001101000111111111101101111010010100111100011001111011000101101101010100111010101000001001010110011101110111111010110000100111110000001010001101110010010001101101101010110001100000001111001100110001110111011111111000111101110100111101010101010011000110000100111101010000111110011010 + bit_concat(11110110001011101000101000110001010001001101001101111110101111110110100011101011010101111100011111101000100000101101010100010101011111001000010100000000101111001110011001001001100110100111011101000100001111101110100111000010111101010101011100010000010011101011110101000101100001000011101000010010111011101101000001101001100111101000110011011000110000111100110001010001101101110110101011001101000010000110001010110010000111011010111100001110001001001110011100010100101000100000111000000110011001000100,110100011101101101100001001001011011010000111111001011111011011110011) = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000000000000000000000000000000000000000011110110001011101000101000110001010001001101001101111110101111110110100011101011010101111100011111101000100000101101010100010101011111001000010100000000101111001110011001001001100110100111011101000100001111101110100111000010111101010101011100010000010011101011110101000101100001000011101000010010111011101101000001101001100111101000110011011000110000111100110001010001101101110110101011001101000010000110001010110010000111011010111100001110001001001110011100010100101000100000111000000110011001000100110100011101101101100001001001011011010000111111001011111011011110011 + bit_concat(01111000110000110000100011111000011111110110101101011010001101100010101110110000001110010100101100101010011010010111110101011111101011110001001100011111011100010001111111001111111000001111100100111001101000011100100010100110001101011101101111101100110101100000100100010101011111100100111101111101111101011100000010100010111000001111000111101000011010001010010101001101011111101000111010011001001111011100100001010101100010110100011100010010100110010011010101100000000001101111100101110100011011101101,011001111111000110101001111001011111001110110101001100001100101000100) = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000000000000000000000000000000000000000001111000110000110000100011111000011111110110101101011010001101100010101110110000001110010100101100101010011010010111110101011111101011110001001100011111011100010001111111001111111000001111100100111001101000011100100010100110001101011101101111101100110101100000100100010101011111100100111101111101111101011100000010100010111000001111000111101000011010001010010101001101011111101000111010011001001111011100100001010101100010110100011100010010100110010011010101100000000001101111100101110100011011101101011001111111000110101001111001011111001110110101001100001100101000100 + bit_concat(00101000100110110110011001000101111010000111111100101011111001110011000011000111111010110010100101011010010000111110101100010001110111111001011100101111111011110100011111111001001111100000111001010100111010100111001000001100001111101000000010110111101011001110101001011110111101011110000111001100011000011001110000010101000010001101100101010110101110010010110000000011110100010101110010001010010011110001000001110111110111110101010011111011101100010001111101100110001001111001111111011101010111111010,111110001110101010101110000001000110110010100001011010010011011010001) = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000000000000000000000000000000000000000000101000100110110110011001000101111010000111111100101011111001110011000011000111111010110010100101011010010000111110101100010001110111111001011100101111111011110100011111111001001111100000111001010100111010100111001000001100001111101000000010110111101011001110101001011110111101011110000111001100011000011001110000010101000010001101100101010110101110010010110000000011110100010101110010001010010011110001000001110111110111110101010011111011101100010001111101100110001001111001111111011101010111111010111110001110101010101110000001000110110010100001011010010011011010001 + bit_concat(11010010001001101010000110011100011010000100011010010011010100101001011101110011011010111110000111010100001000011110110001001100000000000011010001010011101111110110010011100100101111001010111100101011101001011000111010001100110011110010111111100001100010001111000011000110110111101111111000111110000110101100011000111010111000010000010100011111100000011111010000001100101110000100110001101011011001001110110101110110111010111010010101010001100110001100111001000011110001111110111001011011101100000100,011100101001010110000110100110111100110100001110110100110011000010011) = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000000000000000000000000000000000000000011010010001001101010000110011100011010000100011010010011010100101001011101110011011010111110000111010100001000011110110001001100000000000011010001010011101111110110010011100100101111001010111100101011101001011000111010001100110011110010111111100001100010001111000011000110110111101111111000111110000110101100011000111010111000010000010100011111100000011111010000001100101110000100110001101011011001001110110101110110111010111010010101010001100110001100111001000011110001111110111001011011101100000100011100101001010110000110100110111100110100001110110100110011000010011 + bit_concat(00100101000111111111001001001111110100110101100011111011011101110110101110100101110001001111001010100001010000110100100011100001010000001011001001011010000011110100101000000110011100101000111111001111110101000110000100110011011100111101001000101111001000101001110000001101011110010110101001110100000110010101110101101001101111111100000010101110010110010100001110010010000010011000011100110001001100111110110010111000011001000110101000111100110110100000100110010110000110011000010011001101100111010011,010110111000101011101100100101000111100100111000111011101111011000100) = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000000000000000000000000000000000000000000100101000111111111001001001111110100110101100011111011011101110110101110100101110001001111001010100001010000110100100011100001010000001011001001011010000011110100101000000110011100101000111111001111110101000110000100110011011100111101001000101111001000101001110000001101011110010110101001110100000110010101110101101001101111111100000010101110010110010100001110010010000010011000011100110001001100111110110010111000011001000110101000111100110110100000100110010110000110011000010011001101100111010011010110111000101011101100100101000111100100111000111011101111011000100 + bit_concat(11100011010001110101011101000011101100010110000010110000101100010010011000100101110111001110101100100110101011101000101010000010001010110011101001111000000101110011000001100100010010000111000011010000010001010010010101011010110100001000101010011000101000100110110000010111111111100010000010001001011100000111100101101010010100101010000011001011111010010000010010000001100001110011110111100100100100111111001100010101011011001001110001101010101110011010101101010110010010000111100101111000111101100001,000001111101001001000110011011010010101110010110110110011100001000010) = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000000000000000000000000000000000000000011100011010001110101011101000011101100010110000010110000101100010010011000100101110111001110101100100110101011101000101010000010001010110011101001111000000101110011000001100100010010000111000011010000010001010010010101011010110100001000101010011000101000100110110000010111111111100010000010001001011100000111100101101010010100101010000011001011111010010000010010000001100001110011110111100100100100111111001100010101011011001001110001101010101110011010101101010110010010000111100101111000111101100001000001111101001001000110011011010010101110010110110110011100001000010 + bit_concat(00101000001111011000000011011111001101100101000100100101000001101111000010110101111110010010110001000011001001111110111101010000000001100000001110100010111101101001111100100111101100100110010010101101111100000111111100101100101111000011011100011111100100110001111010111001001010110100010000011110000100111010001001101101100100100111000101101111001110000110110100000011111100000001000011100101101011100010100100101100011111001100011000010100110001110001100010100000011101111001110110100100110110101011,001101010111101011001000010001100010110101001100100000000100000001100) = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000000000000000000000000000000000000000000101000001111011000000011011111001101100101000100100101000001101111000010110101111110010010110001000011001001111110111101010000000001100000001110100010111101101001111100100111101100100110010010101101111100000111111100101100101111000011011100011111100100110001111010111001001010110100010000011110000100111010001001101101100100100111000101101111001110000110110100000011111100000001000011100101101011100010100100101100011111001100011000010100110001110001100010100000011101111001110110100100110110101011001101010111101011001000010001100010110101001100100000000100000001100 + bit_concat(11100111110110101100000001010011001010101010000100100000101111011111101001011101101001010001100011101100001111111011010010100111001111110011000101101100011000000100111100000111001100001100100100110100100011100010010000011011100110110110000001011011111010100110101110100100111010101001011101111011001001010010000011110001110111010110001100100101011101011000000011001111100110100010111010110110010001111110000001010100111001000001100011011111011111100000100001111110100011011100010001011010101001111110,011100101001101010001011100011011111100100011100000101011010110011001) = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000000000000000000000000000000000000000011100111110110101100000001010011001010101010000100100000101111011111101001011101101001010001100011101100001111111011010010100111001111110011000101101100011000000100111100000111001100001100100100110100100011100010010000011011100110110110000001011011111010100110101110100100111010101001011101111011001001010010000011110001110111010110001100100101011101011000000011001111100110100010111010110110010001111110000001010100111001000001100011011111011111100000100001111110100011011100010001011010101001111110011100101001101010001011100011011111100100011100000101011010110011001 + bit_concat(01000111111000010010110110000000001010110110111010010001100100000101100111101100111111101100100111001100010101000111100010000111001111111111011001011001001011111000011110011000101001100101011111111000111011001001101111110000111010001010110110010001110010011111101000010001110111100100001100010000000010001010101001000110101001000011111010111011111100110110001000111000111010101001011100110011010110001100011111100011000111010010110001100000110111011000000011000100011011000001100111111110000011110010,100100001010101100100011100100110000000101100010100101111111100100010) = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000000000000000000000000000000000000000001000111111000010010110110000000001010110110111010010001100100000101100111101100111111101100100111001100010101000111100010000111001111111111011001011001001011111000011110011000101001100101011111111000111011001001101111110000111010001010110110010001110010011111101000010001110111100100001100010000000010001010101001000110101001000011111010111011111100110110001000111000111010101001011100110011010110001100011111100011000111010010110001100000110111011000000011000100011011000001100111111110000011110010100100001010101100100011100100110000000101100010100101111111100100010 + bit_concat(00100100001001100011111010000101011001001011101101000101001000101000100001011100010000000110100110101111111001010011011110101010000101110011100001111000110010000010001001101101110010000001001111111110010100011110111101100011110101100111110000001111100111000010100011101101111101011000001000101100111001100111010101001100110010101001111000100100000010000011001101010011001001001000101100000110001001101111010000011101100111111111010101100100111001001010111101000010100011010010110110111101001010001000,111111000010011101001100001101100111010001000100000000000111101110110) = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000000000000000000000000000000000000000000100100001001100011111010000101011001001011101101000101001000101000100001011100010000000110100110101111111001010011011110101010000101110011100001111000110010000010001001101101110010000001001111111110010100011110111101100011110101100111110000001111100111000010100011101101111101011000001000101100111001100111010101001100110010101001111000100100000010000011001101010011001001001000101100000110001001101111010000011101100111111111010101100100111001001010111101000010100011010010110110111101001010001000111111000010011101001100001101100111010001000100000000000111101110110 + bit_concat(10000010010100101110001011010111111000000010100011011000100111011111011011001001010110000010111000101100001111010101101000001100100011011100111100110011111001011110001110001101110010101010111101101100101011110111100101110001101011101001110101001011100001101000010110001011101000100001111011011010011100010001011111000101001100001111101001100010110101011100100110010110000100111100001001010001010001011101110000011111110111000100011001110011000111000111001010011011110011111111011001101100111011100101,010001101001100010001000111101001001010100010001101001110000101011011) = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000000000000000000000000000000000000000010000010010100101110001011010111111000000010100011011000100111011111011011001001010110000010111000101100001111010101101000001100100011011100111100110011111001011110001110001101110010101010111101101100101011110111100101110001101011101001110101001011100001101000010110001011101000100001111011011010011100010001011111000101001100001111101001100010110101011100100110010110000100111100001001010001010001011101110000011111110111000100011001110011000111000111001010011011110011111111011001101100111011100101010001101001100010001000111101001001010100010001101001110000101011011 + bit_concat(00100011000100111101101011111001010011101111001111111011100100001000100111010111000001111101111010010101001000000000011100111010001011010100100101100001010110000101100110100111001111010010010000111000011110011100101110111100011110101010110000011110001101101110100011100101100011010010100011101110100110000110011010011010101100110001011100100011110000010100101100001011001010000000001100110110110010100001101111110000001010000101111110100011001011011100000010101101111111111010110110110010000010101001,110110101110111010011010101011100011011101000101000100110001110111010) = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000000000000000000000000000000000000000000100011000100111101101011111001010011101111001111111011100100001000100111010111000001111101111010010101001000000000011100111010001011010100100101100001010110000101100110100111001111010010010000111000011110011100101110111100011110101010110000011110001101101110100011100101100011010010100011101110100110000110011010011010101100110001011100100011110000010100101100001011001010000000001100110110110010100001101111110000001010000101111110100011001011011100000010101101111111111010110110110010000010101001110110101110111010011010101011100011011101000101000100110001110111010 + bit_concat(01111110100101101111101000001101010101011001000111001100000100000000100000100111001010010000001001111111110001111111110111011100011101010010011100011100000110111101010010011011010000001000010100001101110011111111100000111100110101010011000110000010001010001011110101001110110101101100101010100100000111100110111001110011001011010001110001010100111110010101100110001000011001110001101101111100001111110111000111001111000000001110111100001110000111100100000101110000011100100110100100100110001100101001,111110101111101010010000000100010111101000110011000001001111111100010) = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000000000000000000000000000000000000000001111110100101101111101000001101010101011001000111001100000100000000100000100111001010010000001001111111110001111111110111011100011101010010011100011100000110111101010010011011010000001000010100001101110011111111100000111100110101010011000110000010001010001011110101001110110101101100101010100100000111100110111001110011001011010001110001010100111110010101100110001000011001110001101101111100001111110111000111001111000000001110111100001110000111100100000101110000011100100110100100100110001100101001111110101111101010010000000100010111101000110011000001001111111100010 + bit_concat(10011010100111101110000111110101101000001110010101011001100110101001011101100110011010110101011111000010110100111111100110010101011111100010001110000010111100011000110111111111111001010101100000011001100111001101000100010001000111001110010111011001001101001000101010000111000101111000100000101000010000100010101001011100110010111101111111001110111001000001111011000100000011001111111100111010111111111010111010001111100100111010100001101000000101110100100101101100110010011011100111011001111010001001,100001111111010110101000010010100100110011110111101101110010000111100) = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000000000000000000000000000000000000000010011010100111101110000111110101101000001110010101011001100110101001011101100110011010110101011111000010110100111111100110010101011111100010001110000010111100011000110111111111111001010101100000011001100111001101000100010001000111001110010111011001001101001000101010000111000101111000100000101000010000100010101001011100110010111101111111001110111001000001111011000100000011001111111100111010111111111010111010001111100100111010100001101000000101110100100101101100110010011011100111011001111010001001100001111111010110101000010010100100110011110111101101110010000111100 + bit_concat(11100100011000000100000011001000101011011111011010010001001100100001000111010011011001001111101111011001100000101011111000001110101001101000010101110001101010000111001101100000110010100001000111011110000000101101111110010000101110111101011101010001001011000011001101100010001001001100011010011111001000000110010101000111110001101000100111010000101110011111011011001000001001100011000110011110011101101001111111111100101011110000110011110100011110100010101000011111000010010001011000010010001110011010,100100000100011011111000111010000010110111110011100010001101001011100) = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000000000000000000000000000000000000000011100100011000000100000011001000101011011111011010010001001100100001000111010011011001001111101111011001100000101011111000001110101001101000010101110001101010000111001101100000110010100001000111011110000000101101111110010000101110111101011101010001001011000011001101100010001001001100011010011111001000000110010101000111110001101000100111010000101110011111011011001000001001100011000110011110011101101001111111111100101011110000110011110100011110100010101000011111000010010001011000010010001110011010100100000100011011111000111010000010110111110011100010001101001011100 + bit_concat(11100000010010101110100001110111010010010001111011001101010000101100010010101100011101101101110010111111101010111011101011010011000011100011001100010101000100000100010001001101101101001111101110111001100110000110011100010011001101101110110111010111110011110010100011001010111000100101111100110001101010000000010010000110101101000101111110011000100111100010010001110011010010000111001010111111001000111010011100011010001000100010001100010100101001011111100111011110011001011000101000010011111000001101,010010001101100101110001001100001000100010101101111111011001000100111) = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000000000000000000000000000000000000000011100000010010101110100001110111010010010001111011001101010000101100010010101100011101101101110010111111101010111011101011010011000011100011001100010101000100000100010001001101101101001111101110111001100110000110011100010011001101101110110111010111110011110010100011001010111000100101111100110001101010000000010010000110101101000101111110011000100111100010010001110011010010000111001010111111001000111010011100011010001000100010001100010100101001011111100111011110011001011000101000010011111000001101010010001101100101110001001100001000100010101101111111011001000100111 + bit_concat(11010100101010101011011010011000111000010111101000101000000100101101100111001111101111110110000110100111110001001110100101101011001101010011111110100110000000110000101011100011011000111111100000001000110110111011100001111010000100111000011100011111000000010000001101101011010101011110111111111001111010110110011000011100011011110111111100011110011100001101100111100001000111110110110001111110100100000010111100111010111000010010110100111111100101110011110101011001000111000010000011101011110000100001,100111010011111010100110000000001010111110011110011000000011111010000) = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000000000000000000000000000000000000000011010100101010101011011010011000111000010111101000101000000100101101100111001111101111110110000110100111110001001110100101101011001101010011111110100110000000110000101011100011011000111111100000001000110110111011100001111010000100111000011100011111000000010000001101101011010101011110111111111001111010110110011000011100011011110111111100011110011100001101100111100001000111110110110001111110100100000010111100111010111000010010110100111111100101110011110101011001000111000010000011101011110000100001100111010011111010100110000000001010111110011110011000000011111010000 + bit_concat(10110010010100100010101011111110110011010001001000010011101110111111010111011111010011011100111110011000101000100101000110010101000101001101001010100010011011111001101000000101111011000101000101011011011011101100000011011001110111011010100011111101000101000011010111111111000000100101001010111101010001110110000010101000001011100100011000000110100010010110000010101001110101111100000001000011001100111111000100001001111110100011000111010110110010101101111010101110100111100111101111010110100011101110,001010110000001010000011000111010111100100100011010001001010111100110) = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000000000000000000000000000000000000000010110010010100100010101011111110110011010001001000010011101110111111010111011111010011011100111110011000101000100101000110010101000101001101001010100010011011111001101000000101111011000101000101011011011011101100000011011001110111011010100011111101000101000011010111111111000000100101001010111101010001110110000010101000001011100100011000000110100010010110000010101001110101111100000001000011001100111111000100001001111110100011000111010110110010101101111010101110100111100111101111010110100011101110001010110000001010000011000111010111100100100011010001001010111100110 + bit_concat(11000101001100110100101011110011111000100000011011001000111100011010000010010101001101111001010110110011011001101010001100001010011110011101011000000110110011000111111011110010010011000010010011000111001010110101101110110111011100001110001011100001110111011101010101101000011001110101001111110101011100101001110000100000011000101111101011000000101101100110100011001110111111001100010001010001100011100001100110111110111111001001111111111100111000011000110111010100111001110000100000101111010100110000,110110100111001110001011101101110101110011111000010111001111010000000) = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000000000000000000000000000000000000000011000101001100110100101011110011111000100000011011001000111100011010000010010101001101111001010110110011011001101010001100001010011110011101011000000110110011000111111011110010010011000010010011000111001010110101101110110111011100001110001011100001110111011101010101101000011001110101001111110101011100101001110000100000011000101111101011000000101101100110100011001110111111001100010001010001100011100001100110111110111111001001111111111100111000011000110111010100111001110000100000101111010100110000110110100111001110001011101101110101110011111000010111001111010000000 + bit_concat(00111001001110100100110001001001010110000111100000011011110000100101101001111111110101011001111111000000101011010000000110001110111111101011110010010001001000010101110011110111111001100100111101110101010011101001001010001101011001100001110000100101100010111011101001100100000010000001010101010110010001101110010010011001001010011110000101100101100010010111110100100110100111101110011000010000011110101010101000101001100111110001101001011111101010100011101111101001100100010001011010001100010010110000,000000001111011101100100101101001000000101000010101011001111011110110) = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000000000000000000000000000000000000000000111001001110100100110001001001010110000111100000011011110000100101101001111111110101011001111111000000101011010000000110001110111111101011110010010001001000010101110011110111111001100100111101110101010011101001001010001101011001100001110000100101100010111011101001100100000010000001010101010110010001101110010010011001001010011110000101100101100010010111110100100110100111101110011000010000011110101010101000101001100111110001101001011111101010100011101111101001100100010001011010001100010010110000000000001111011101100100101101001000000101000010101011001111011110110 + bit_concat(01011001101111011000000111111001100110001100001110110101111001111100011101111100101110001101011011010101010000010000010101110011110010110110100000001010101000101000010001111111111101111010010110011001110100011001111010011010010110001111100001010110101100111100111000110010111101101111100101110000111110000100010101100110001011001110011011010111001010000001111001100001111100000111111010111111000000011111110111000000001110011011111000011000111111111000101011100001000001010111100010100001111000100101,010001110101111011110110101111000101000010111011100011001100100111001) = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000000000000000000000000000000000000000001011001101111011000000111111001100110001100001110110101111001111100011101111100101110001101011011010101010000010000010101110011110010110110100000001010101000101000010001111111111101111010010110011001110100011001111010011010010110001111100001010110101100111100111000110010111101101111100101110000111110000100010101100110001011001110011011010111001010000001111001100001111100000111111010111111000000011111110111000000001110011011111000011000111111111000101011100001000001010111100010100001111000100101010001110101111011110110101111000101000010111011100011001100100111001 + bit_concat(10010110000100010100101110101110111110010000011001010101011100101010110110011101100101000111101000110111111101011101001010100011100111000111000011111111111010100111100111001100011101000001010101011011011101000101001001010000100111010101001001100010111111000011110100001011101110001100101100010000011110000001000010000110011011000111100000100101110101101000010000000000010011100100111001000101101101100101000010101001111000110001111100110111100000001101110010101010001010001011011001100001011011001101,101000011110100100111010110101011100001110100101110011110100001011011) = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000000000000000000000000000000000000000010010110000100010100101110101110111110010000011001010101011100101010110110011101100101000111101000110111111101011101001010100011100111000111000011111111111010100111100111001100011101000001010101011011011101000101001001010000100111010101001001100010111111000011110100001011101110001100101100010000011110000001000010000110011011000111100000100101110101101000010000000000010011100100111001000101101101100101000010101001111000110001111100110111100000001101110010101010001010001011011001100001011011001101101000011110100100111010110101011100001110100101110011110100001011011 + bit_concat(11110110101000011110111111001000111100101101101010000111001101110001101011100001100101001101110101011110100110000010011101110110011110101110110001000110000101100101111010000000110101010000110100100001111110111101000000010110100101010001010101011110101110000001100101100111000011001100001001101010100100000001001101001100000101110000010011111011011100100110111111110110001000101101111111100011100011001101010100111000110111011011111001000001010111010000011110011111010110011010111010011110111011110100,101010101001000111001100001110110011100010111010111001011001010011000) = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000000000000000000000000000000000000000011110110101000011110111111001000111100101101101010000111001101110001101011100001100101001101110101011110100110000010011101110110011110101110110001000110000101100101111010000000110101010000110100100001111110111101000000010110100101010001010101011110101110000001100101100111000011001100001001101010100100000001001101001100000101110000010011111011011100100110111111110110001000101101111111100011100011001101010100111000110111011011111001000001010111010000011110011111010110011010111010011110111011110100101010101001000111001100001110110011100010111010111001011001010011000 + bit_concat(01100010100010101001011111001101010001111100111011110001001110111101011001010101010000100110101011000100000000101111101111101111011101101101110101011001101010111001101111010000101100010101010101111000011011110000000010111011101001000010101101011010010111101001100001001111010110111110000100110111011100000111111000010000011001100011101111000100101100101100000000110101011001001011011101101000001010111011111011110010100100100001010111101000110111111100010011000010000111100100011011010011111001001010,101001000101000010101101001110001101001010010011010000101110110001101) = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000000000000000000000000000000000000000001100010100010101001011111001101010001111100111011110001001110111101011001010101010000100110101011000100000000101111101111101111011101101101110101011001101010111001101111010000101100010101010101111000011011110000000010111011101001000010101101011010010111101001100001001111010110111110000100110111011100000111111000010000011001100011101111000100101100101100000000110101011001001011011101101000001010111011111011110010100100100001010111101000110111111100010011000010000111100100011011010011111001001010101001000101000010101101001110001101001010010011010000101110110001101 + bit_concat(11111011010110111100000010000111000111010001011001000001111100001010111001100000010011100010010111110010101111110010100100101101010001111010101000010000011001100110000101011110011000101000110101001001101010010000010111100011111111001111010010011010100000101011011110010111111110110011001100001000001010011101110111011111110110100100101111000000101000110101101010000110010010001001000011011110110000001001111010110101000111110010010111000001010010110010101000001100001001101100001000011111100010110011,101010010000001101111100111110000011011011001111001111100001001000000) = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000000000000000000000000000000000000000011111011010110111100000010000111000111010001011001000001111100001010111001100000010011100010010111110010101111110010100100101101010001111010101000010000011001100110000101011110011000101000110101001001101010010000010111100011111111001111010010011010100000101011011110010111111110110011001100001000001010011101110111011111110110100100101111000000101000110101101010000110010010001001000011011110110000001001111010110101000111110010010111000001010010110010101000001100001001101100001000011111100010110011101010010000001101111100111110000011011011001111001111100001001000000 + bit_concat(10100110110100111110100011001100110011000010001000010010100010001000000010110010110101111100101111110011000010101111011001001110101101001010000010111011101110101111010101001000001101101010101010110110010111101111001110101000110111110111001111111000100000010001110111110011101101111010001000101010100111101011111110110001011010011000110010011100111011101000001110101011010100111010000100111100100001100110100001100110011100110110110101001001110111010100111101110110010111100101000110111100001010001110,001011001010101010010011001011011111011100010110101101101000111100010) = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000000000000000000000000000000000000000010100110110100111110100011001100110011000010001000010010100010001000000010110010110101111100101111110011000010101111011001001110101101001010000010111011101110101111010101001000001101101010101010110110010111101111001110101000110111110111001111111000100000010001110111110011101101111010001000101010100111101011111110110001011010011000110010011100111011101000001110101011010100111010000100111100100001100110100001100110011100110110110101001001110111010100111101110110010111100101000110111100001010001110001011001010101010010011001011011111011100010110101101101000111100010 + bit_concat(10010110011011000110110001101000001110100001111100011001111010010100110100011111111011100101100111100100000101110001111101011010100000001011100100010100000111101001011111011100111100010001100000001101000010011100101001111101000110000000101011010110100000000011001001011101100101111111111111111001001101011001110110001001110010111011110100011100111011100001011100011001011001010111011011011111110001000100011100011010110001110000101111110001010011001011101001011100111110001000000111000100010100110111,111001000011011010011011101110001001101110010011010101010101100100001) = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000000000000000000000000000000000000000010010110011011000110110001101000001110100001111100011001111010010100110100011111111011100101100111100100000101110001111101011010100000001011100100010100000111101001011111011100111100010001100000001101000010011100101001111101000110000000101011010110100000000011001001011101100101111111111111111001001101011001110110001001110010111011110100011100111011100001011100011001011001010111011011011111110001000100011100011010110001110000101111110001010011001011101001011100111110001000000111000100010100110111111001000011011010011011101110001001101110010011010101010101100100001 + bit_concat(01000100010101111011010111110100100111110110000111010101001011000111001010110111011101011111101111011111100011101011010110000011110011100001101000000001001000111100111111011010010000101011001001010100101000010110110011000100001001011110001010001011011001001101010100100001101010111011111100001111110110001110001110101011001110101111111000001100110010100011101010111111100010011110110110000110101010110110101010101111111000011110101001011100110101000100001110100100000110111101001011011100101111010001,010100000000101110100011010010111001011111101010010011111110110010111) = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000000000000000000000000000000000000000001000100010101111011010111110100100111110110000111010101001011000111001010110111011101011111101111011111100011101011010110000011110011100001101000000001001000111100111111011010010000101011001001010100101000010110110011000100001001011110001010001011011001001101010100100001101010111011111100001111110110001110001110101011001110101111111000001100110010100011101010111111100010011110110110000110101010110110101010101111111000011110101001011100110101000100001110100100000110111101001011011100101111010001010100000000101110100011010010111001011111101010010011111110110010111 + bit_concat(00011100000101100010011110001110001110110011101100101111111010010001001000110000001010100001010110010110111110000101111111010001110100001110110100001110100100111110110001101111001111001001011000001001111011011100001101110010010111000011110001011100011010111100010111000101000100100011001111100011111001100100110101101001111010111110000010000100010010100001000111111000001011000101111110110101100000101010110100001110101100010110100001111101001101011111110100100001110011011101001000111010000000100001,100000001101100001000000100101011011010100010100000011101111010011111) = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000000000000000000000000000000000000000000011100000101100010011110001110001110110011101100101111111010010001001000110000001010100001010110010110111110000101111111010001110100001110110100001110100100111110110001101111001111001001011000001001111011011100001101110010010111000011110001011100011010111100010111000101000100100011001111100011111001100100110101101001111010111110000010000100010010100001000111111000001011000101111110110101100000101010110100001110101100010110100001111101001101011111110100100001110011011101001000111010000000100001100000001101100001000000100101011011010100010100000011101111010011111 + bit_concat(11101100111111000010100000100111001110001100001110101111001010111110111001001110001100000000011100011111000111010100110110111110111101001010010000011010000111110100000111111111011110010000101111111100011110111000001000010101010000011000011010010001000001100101110010110011001101001001110000111110100111111001101011000000011001001010000100111000000001100001111110111111001101101111001100001110100001001111000111001111111000111101001110010001101010011111001111011100111111011010011011111001100011000111,010110001100011001111100000001001000000010000000111101110010110000100) = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000000000000000000000000000000000000000011101100111111000010100000100111001110001100001110101111001010111110111001001110001100000000011100011111000111010100110110111110111101001010010000011010000111110100000111111111011110010000101111111100011110111000001000010101010000011000011010010001000001100101110010110011001101001001110000111110100111111001101011000000011001001010000100111000000001100001111110111111001101101111001100001110100001001111000111001111111000111101001110010001101010011111001111011100111111011010011011111001100011000111010110001100011001111100000001001000000010000000111101110010110000100 + bit_concat(10001001000111111011010111100001001101001111010111010111001000110101011001100101001010110111110100001001110100000100101011100110100101010001001100110011101110110000101111010000011001111011000100110111011011011011100001110100110001110010001101011010011001000001110001001111010010011111001001101101101010001000000111111010010100010101101001011000011101100110110100110010011100001111011000101111100111111101101000001110000111100111100010101011011000000001111100011010101000111011110110101001101010001101,110011000001010110000101011101000100000100001011001110011001111000000) = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000000000000000000000000000000000000000010001001000111111011010111100001001101001111010111010111001000110101011001100101001010110111110100001001110100000100101011100110100101010001001100110011101110110000101111010000011001111011000100110111011011011011100001110100110001110010001101011010011001000001110001001111010010011111001001101101101010001000000111111010010100010101101001011000011101100110110100110010011100001111011000101111100111111101101000001110000111100111100010101011011000000001111100011010101000111011110110101001101010001101110011000001010110000101011101000100000100001011001110011001111000000 + bit_concat(01110100111110010000010110110010101100011100101101011000001000011011010100010101100000000100110011110100101001110110111001010001110111101001010001000100100110101100011001101001101001010001011011011111111011101101010011100101001100011110001011100000100110110010011010011110110111101110101000010011010110001010110001000000001000110001001110101110010010100001100100001110100111111100110111001011111000000011000110101011101001110011011000100111001100010011100100001101111110011101011010101011000110110001,110000101010100000100101010011100100101100110011011001100000110101101) = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000000000000000000000000000000000000000001110100111110010000010110110010101100011100101101011000001000011011010100010101100000000100110011110100101001110110111001010001110111101001010001000100100110101100011001101001101001010001011011011111111011101101010011100101001100011110001011100000100110110010011010011110110111101110101000010011010110001010110001000000001000110001001110101110010010100001100100001110100111111100110111001011111000000011000110101011101001110011011000100111001100010011100100001101111110011101011010101011000110110001110000101010100000100101010011100100101100110011011001100000110101101 + bit_concat(01100110000110010010111000111100010001111101000011001101110000001110001011110111011101011001000011001100010001101001001111011011111001110110010110111000111011110011100111100010001100111100011001111111101100111101101011010010110001111010101011101000111011000000100101111011111110111110010000010001110110011100111000000000111110011101100010011010000001010011010100010010001000000011110111111111011000000100001010101001110001001111111010010111110110001011010101010111100010111100100001000010110111101101,100010010110011110100101111000100101110100001111111101010001011011100) = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000000000000000000000000000000000000000001100110000110010010111000111100010001111101000011001101110000001110001011110111011101011001000011001100010001101001001111011011111001110110010110111000111011110011100111100010001100111100011001111111101100111101101011010010110001111010101011101000111011000000100101111011111110111110010000010001110110011100111000000000111110011101100010011010000001010011010100010010001000000011110111111111011000000100001010101001110001001111111010010111110110001011010101010111100010111100100001000010110111101101100010010110011110100101111000100101110100001111111101010001011011100 + bit_concat(00000111000100010100110100010000000011100010011011100110010000000010100101101110000110111111110011011000100011011101100010011011110010000111011001111101100101010011001110010110100000110100001000110101101100011011010001011110111001111011110010111111010000011111010111100101110011010010010101000100010101000101001110110110111101110000100111101010000001110001100100110000110011101101010011101111110010000001111000001011101001110111011011101111110011111111011000100001100011000001100010011111100100110101,001000110011010101001011100110110010011011110101001110001110100011010) = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000000000000000000000000000000000000000000000111000100010100110100010000000011100010011011100110010000000010100101101110000110111111110011011000100011011101100010011011110010000111011001111101100101010011001110010110100000110100001000110101101100011011010001011110111001111011110010111111010000011111010111100101110011010010010101000100010101000101001110110110111101110000100111101010000001110001100100110000110011101101010011101111110010000001111000001011101001110111011011101111110011111111011000100001100011000001100010011111100100110101001000110011010101001011100110110010011011110101001110001110100011010 + bit_concat(00111011001111001010110010110010011011101011111110101101110001000000110001110001001010111111010110100110001010110011000011101110001010010111101100111110100001001100101010110001110011001101001001011011010110000001111001001101111010111101001000111001101010001110101100000101110010100100100011010100100010111110010000011110011001001001010101100110011100111110000000111101000111110101100111111110101011101111000111011000111101111011101100000010111011010000111010100010011100110001100100111000011000100010,001001010000110010111001010011010000100100010001011111110101000000100) = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000000000000000000000000000000000000000000111011001111001010110010110010011011101011111110101101110001000000110001110001001010111111010110100110001010110011000011101110001010010111101100111110100001001100101010110001110011001101001001011011010110000001111001001101111010111101001000111001101010001110101100000101110010100100100011010100100010111110010000011110011001001001010101100110011100111110000000111101000111110101100111111110101011101111000111011000111101111011101100000010111011010000111010100010011100110001100100111000011000100010001001010000110010111001010011010000100100010001011111110101000000100 + bit_concat(11111011011101010011001000111110001011110110011010110000011101101100000011010110101101110100001111011010111100110101010100100001000101010100001011111101000000000000001011111000010110010011011001001101110000100111110001101011011111001101111100001001010111010111011100001110100100001010110001110101111000000011011101010011110100011110000001110100000001110110011111111111010101101100101110010111000101100110010001011110010001111101010111110011110011010011100110010001000000111010111000110101111111011101,110011111011100111100001101111000110001100010111001001110001110001001) = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000000000000000000000000000000000000000011111011011101010011001000111110001011110110011010110000011101101100000011010110101101110100001111011010111100110101010100100001000101010100001011111101000000000000001011111000010110010011011001001101110000100111110001101011011111001101111100001001010111010111011100001110100100001010110001110101111000000011011101010011110100011110000001110100000001110110011111111111010101101100101110010111000101100110010001011110010001111101010111110011110011010011100110010001000000111010111000110101111111011101110011111011100111100001101111000110001100010111001001110001110001001 + bit_concat(10110111001011011111001101111100101010110111010101100010100000010111110101000101011011101101101010101011110000111010100110010111001100101100111010011000001000101011001111100000101001001001011111111011001010000101001000111101010101000001011001111110101011111011111111010101010001011101010111011100110100011010111101001000001100111101110111110000001101101111110001100011100000000111011001110010100101001100100000101001100101011000000110110010001101001011110000001010011110110001001100110110000101110101,110000100010001001001011000010010010100101000110010101101101000011001) = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000000000000000000000000000000000000000010110111001011011111001101111100101010110111010101100010100000010111110101000101011011101101101010101011110000111010100110010111001100101100111010011000001000101011001111100000101001001001011111111011001010000101001000111101010101000001011001111110101011111011111111010101010001011101010111011100110100011010111101001000001100111101110111110000001101101111110001100011100000000111011001110010100101001100100000101001100101011000000110110010001101001011110000001010011110110001001100110110000101110101110000100010001001001011000010010010100101000110010101101101000011001 + bit_concat(01111111011011000001011111001011101110000101000000001110110011011100100110100100101000010011110000000110100010001101000001111011001111101101111000100101100000100111001110011011010000110010011000101010001101100100100001000100010110100110000010010010010010111101111100101100011010110101010100001110010101100111101111010010010010011001110101101010100101110011010110010000110010100110011010011001100110100011000011010011010000111100110111111110001101000100111001001110000011001011110100000100110000000000,010111100111111111000000001111110101011001100011011001100011100010110) = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000000000000000000000000000000000000000001111111011011000001011111001011101110000101000000001110110011011100100110100100101000010011110000000110100010001101000001111011001111101101111000100101100000100111001110011011010000110010011000101010001101100100100001000100010110100110000010010010010010111101111100101100011010110101010100001110010101100111101111010010010010011001110101101010100101110011010110010000110010100110011010011001100110100011000011010011010000111100110111111110001101000100111001001110000011001011110100000100110000000000010111100111111111000000001111110101011001100011011001100011100010110 + bit_concat(10001000000110111011101001100101111010010011100001001101010000011101100111100100100010010000000010110101111110100000001001111111100110100011011111110000011100010000110100001110001011110000111110101011010101110011000010101011011011110101110111010001011010101000111011100110011011110010100010101000010001010011111010001010000101000011010011010110110011011100000011111110111100101000111100100101100010001000010010011001011000010011000000001001010010111111111100000000001001110111100010101011100100011111,000111000101110001011000001110100111111101010000001100100000010001110) = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000000000000000000000000000000000000000010001000000110111011101001100101111010010011100001001101010000011101100111100100100010010000000010110101111110100000001001111111100110100011011111110000011100010000110100001110001011110000111110101011010101110011000010101011011011110101110111010001011010101000111011100110011011110010100010101000010001010011111010001010000101000011010011010110110011011100000011111110111100101000111100100101100010001000010010011001011000010011000000001001010010111111111100000000001001110111100010101011100100011111000111000101110001011000001110100111111101010000001100100000010001110 + bit_concat(00111001001001000101101000011000011111100000110000111011011011000111101110101101110001000100000001110101111000111101000010011011000010101001010000100111010101000001010110000000111110111101101101000010110110101000011001111101011110101111111011100001010101110001110001110110000110011000111101110110011100101110111001011111000011010100011100110000101000100111111111011101111111101111100001110001000110011100001010100100001100000110101111101000011111111100110100110001001101011100011000011011000011011101,100010000100100001111010111010100000000010110110011111000101111011001) = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000000000000000000000000000000000000000000111001001001000101101000011000011111100000110000111011011011000111101110101101110001000100000001110101111000111101000010011011000010101001010000100111010101000001010110000000111110111101101101000010110110101000011001111101011110101111111011100001010101110001110001110110000110011000111101110110011100101110111001011111000011010100011100110000101000100111111111011101111111101111100001110001000110011100001010100100001100000110101111101000011111111100110100110001001101011100011000011011000011011101100010000100100001111010111010100000000010110110011111000101111011001 + bit_concat(00101000100000110111111101001011101001101101100110111001101011101000110010000000011111101000110111100101100010011110000100001010100010101100101010010011011110110111001100110000101110011111100101001011001001011010010011101101001100100011110011101100010100101011100101010100010100101011001110101111001011010010000101010101011100000111011000000001000000100010011110011101100010110110100101001110101011010011000011101101101011001100101100000011100010100001101001110000101100110111100100001101010000110000,011000110100000111000000011010011110111100100010110110010111111100111) = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000000000000000000000000000000000000000000101000100000110111111101001011101001101101100110111001101011101000110010000000011111101000110111100101100010011110000100001010100010101100101010010011011110110111001100110000101110011111100101001011001001011010010011101101001100100011110011101100010100101011100101010100010100101011001110101111001011010010000101010101011100000111011000000001000000100010011110011101100010110110100101001110101011010011000011101101101011001100101100000011100010100001101001110000101100110111100100001101010000110000011000110100000111000000011010011110111100100010110110010111111100111 + bit_concat(00000010011110110010011100001100000001000101111010011111010100100000101011110011111000001001010010011110001010001100100000100101010101110111111101110110011001100011110101011101111110111010000000101111100011100011110011010100110010100101010101010110001011101100110100111101000110100001011111100100111001000011001010111000111101010110110100000011000110001101000010001011000101001110111101001100101010010000110000111000110001011110010010101111101101110110011011010010100001011101010111111110001000011101,000011110001101010010111000110010011111011101010111111011100101001100) = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000000000000000000000000000000000000000000000010011110110010011100001100000001000101111010011111010100100000101011110011111000001001010010011110001010001100100000100101010101110111111101110110011001100011110101011101111110111010000000101111100011100011110011010100110010100101010101010110001011101100110100111101000110100001011111100100111001000011001010111000111101010110110100000011000110001101000010001011000101001110111101001100101010010000110000111000110001011110010010101111101101110110011011010010100001011101010111111110001000011101000011110001101010010111000110010011111011101010111111011100101001100 + bit_concat(00101110001010101010011011001001011001011110101000000001101011010110011100000100110110001110011001110001101111010001110001010110001110000110011101010011110101010101101010010100011110011001100100010111011001010100101001110010011111010111110100110010001000010101000101010000001000000101000000100110011010010110111111010010000110111111110100111000011010000011000011100110111110111110110001100001110011000010011101110010111111101100010110111001110010011100110001010001010110011111110010000000101101010000,011000111110110110010101110110101001010001010110111001110110100110011) = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000000000000000000000000000000000000000000101110001010101010011011001001011001011110101000000001101011010110011100000100110110001110011001110001101111010001110001010110001110000110011101010011110101010101101010010100011110011001100100010111011001010100101001110010011111010111110100110010001000010101000101010000001000000101000000100110011010010110111111010010000110111111110100111000011010000011000011100110111110111110110001100001110011000010011101110010111111101100010110111001110010011100110001010001010110011111110010000000101101010000011000111110110110010101110110101001010001010110111001110110100110011 + bit_concat(11100011110000111000100001101010001000101101010100010010100011111010000110010010111111001000011110110100001010001110010001000010011100100001101001100100010110111001010100011011101100001010001110111101110010100110111000001100111100011100110101011111111011000010000110101110011101000001110011011000010000001100000100001000001111010010011011011000010010010011111010000101000001000001011010001100110100010110011011110011010100001010101110011110001110010010110010000101100011011100010011000111110110000011,110011110111010001110101100101010101010001101101011111000000100010111) = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000000000000000000000000000000000000000011100011110000111000100001101010001000101101010100010010100011111010000110010010111111001000011110110100001010001110010001000010011100100001101001100100010110111001010100011011101100001010001110111101110010100110111000001100111100011100110101011111111011000010000110101110011101000001110011011000010000001100000100001000001111010010011011011000010010010011111010000101000001000001011010001100110100010110011011110011010100001010101110011110001110010010110010000101100011011100010011000111110110000011110011110111010001110101100101010101010001101101011111000000100010111 + bit_concat(01111100101010100001010010010100111000010111111010111110011011000100101100011010001101100001101111110000011011011001111111101011000000001100011011100111001010110110111101110111001111001000011100111000001010010100010010011001000001001110111100111110111010100000101010001111110001001000000000010111111001000000010111111011010111000010110111110001100001100111000001010101011011101101010001001001110100000101110000000000101101010100110100111101101100010101010101110010000010100100101110011101000001001000,001011001010001110010010010101001110010111111000001010010100000111111) = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000000000000000000000000000000000000000001111100101010100001010010010100111000010111111010111110011011000100101100011010001101100001101111110000011011011001111111101011000000001100011011100111001010110110111101110111001111001000011100111000001010010100010010011001000001001110111100111110111010100000101010001111110001001000000000010111111001000000010111111011010111000010110111110001100001100111000001010101011011101101010001001001110100000101110000000000101101010100110100111101101100010101010101110010000010100100101110011101000001001000001011001010001110010010010101001110010111111000001010010100000111111 + bit_concat(10001000000101001100100011100111100100100110011001000101011101001011001111100001001011100011111000100111011011110011101010100010000010111100010001010111001000001000000110011001101110011011010100000001001101111010010111101111111011111011101000101101011100010011111110010110100110001111101100111001010001000011111001011111100101000000100101110000100011101011111111111001111001011000110010101011110010000100011111111110111110011010011001000010101000111001000001011111100101110000111010110111100011101101,111101110011010100010011110100011101010000101011011010111100101100001) = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000000000000000000000000000000000000000010001000000101001100100011100111100100100110011001000101011101001011001111100001001011100011111000100111011011110011101010100010000010111100010001010111001000001000000110011001101110011011010100000001001101111010010111101111111011111011101000101101011100010011111110010110100110001111101100111001010001000011111001011111100101000000100101110000100011101011111111111001111001011000110010101011110010000100011111111110111110011010011001000010101000111001000001011111100101110000111010110111100011101101111101110011010100010011110100011101010000101011011010111100101100001 + bit_concat(11110000110100010101101000000011110010000110101110110010010010011010110100100111100101000010011110101010010001110000101010011110101000001001000001011110110001111000000011111011110010101110001101100001100001110111100111111011001000110110001000011000110001101000011001001101001101111111001011010100000000101011001100001100001001000000000101101011010100101101001000010000111110000010111001100010011000111001011010101001110101000110100100001111101100011011110001001011111000110100110011010010110001110010,110100011011110111100000111001010000101000110101000100110110001001010) = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000000000000000000000000000000000000000011110000110100010101101000000011110010000110101110110010010010011010110100100111100101000010011110101010010001110000101010011110101000001001000001011110110001111000000011111011110010101110001101100001100001110111100111111011001000110110001000011000110001101000011001001101001101111111001011010100000000101011001100001100001001000000000101101011010100101101001000010000111110000010111001100010011000111001011010101001110101000110100100001111101100011011110001001011111000110100110011010010110001110010110100011011110111100000111001010000101000110101000100110110001001010 + bit_concat(10011011011010010011111101001100101101010111000000111010110000000111010001101001011110101101101000101110000001100000010111101001110001011110000010010111001100111100001110110001001010110110100010010100101001100011001010100111110110100100001000010110100111001000010101111011010100110100100000010000111001000011000101111110011011010010111100001111000101100001100000011111010101000000110100010111100011011001100100111101111000110110111010110101100111010110001010000001000011111000101100100000010011011010,111011100010100100101010111011010011101110100110010111000100001000101) = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000000000000000000000000000000000000000010011011011010010011111101001100101101010111000000111010110000000111010001101001011110101101101000101110000001100000010111101001110001011110000010010111001100111100001110110001001010110110100010010100101001100011001010100111110110100100001000010110100111001000010101111011010100110100100000010000111001000011000101111110011011010010111100001111000101100001100000011111010101000000110100010111100011011001100100111101111000110110111010110101100111010110001010000001000011111000101100100000010011011010111011100010100100101010111011010011101110100110010111000100001000101 + bit_concat(01001000100010100111110000000010011111110011011000101101000011011100111111010110010100101100011101010100001001100110001111100011110111111101011001001111101100010111000110111010100110000101100111010111101100100110110000111110110101001111001010011111101010101110000111011000001010110010000010010001111011011011010111100101101101110011111010101111101111011101110111100010000001111000101000111101011010001001110010100000011000101001111011110111101111010110100110001101010001110001100100110101101111010010,101100010100110100101010010011100000000110100100010111110101110110100) = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000000000000000000000000000000000000000001001000100010100111110000000010011111110011011000101101000011011100111111010110010100101100011101010100001001100110001111100011110111111101011001001111101100010111000110111010100110000101100111010111101100100110110000111110110101001111001010011111101010101110000111011000001010110010000010010001111011011011010111100101101101110011111010101111101111011101110111100010000001111000101000111101011010001001110010100000011000101001111011110111101111010110100110001101010001110001100100110101101111010010101100010100110100101010010011100000000110100100010111110101110110100 + bit_concat(11000000000111100010001100101111011011001010101010010111101010111011101100101000001110000101000100000110000110110001101100100110100111010001110101111001011011101100100100010010101101011010100000010001100101101010111010001101110010100110100001001100011101010010000000010111001111010100000101100100111000100000101010010001011010001101111011011110110000100001001110001001100101110110000010110011010010111101010010110111001000011011000110011110101100100001000101011000011000011001011111010010111000001101,110010110001001000011011010100001000000000001101111010010000000001001) = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000000000000000000000000000000000000000011000000000111100010001100101111011011001010101010010111101010111011101100101000001110000101000100000110000110110001101100100110100111010001110101111001011011101100100100010010101101011010100000010001100101101010111010001101110010100110100001001100011101010010000000010111001111010100000101100100111000100000101010010001011010001101111011011110110000100001001110001001100101110110000010110011010010111101010010110111001000011011000110011110101100100001000101011000011000011001011111010010111000001101110010110001001000011011010100001000000000001101111010010000000001001 + bit_concat(01111000011101011111110100110001110010001110001010111101100000110111111001001100101110010110101110101001111000100011010001001110100011100110100101011111001011011110011000010100001111101000101111110010001011111011101001101011100110110001110111011110000111001100110100011000001111111110011001010000000110011100000011000101000111111110011100110111011111010001100111110101100111000011111111011101010101011000110111100000101111000011110011100111101101100011111010111110000000110101001000001100011101011011,010101001111111001000001100001010000101010001101100100010000001001101) = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000000000000000000000000000000000000000001111000011101011111110100110001110010001110001010111101100000110111111001001100101110010110101110101001111000100011010001001110100011100110100101011111001011011110011000010100001111101000101111110010001011111011101001101011100110110001110111011110000111001100110100011000001111111110011001010000000110011100000011000101000111111110011100110111011111010001100111110101100111000011111111011101010101011000110111100000101111000011110011100111101101100011111010111110000000110101001000001100011101011011010101001111111001000001100001010000101010001101100100010000001001101 + bit_concat(00000010001100101101111100101111001000010101011100011001001111011101100100000010010110010000101011100000000001100110101000010110100100111111000011011011010001010100111001001011110111010100000010110010111110011001100110101100011001010100101101011001101011011011100111111000101100010111001100010100001101101111111100000100001010010110000111100010001111111101100101100001110011011101000010101111101101000001001101001100110011100110010100001111101010101110100111101011011110000001010111001011001100011100,110011110101001010111001000111000001100010101100111011011000100111001) = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000000000000000000000000000000000000000000000010001100101101111100101111001000010101011100011001001111011101100100000010010110010000101011100000000001100110101000010110100100111111000011011011010001010100111001001011110111010100000010110010111110011001100110101100011001010100101101011001101011011011100111111000101100010111001100010100001101101111111100000100001010010110000111100010001111111101100101100001110011011101000010101111101101000001001101001100110011100110010100001111101010101110100111101011011110000001010111001011001100011100110011110101001010111001000111000001100010101100111011011000100111001 + bit_concat(00010001000111001111011010101011000000110001111000101011101001111011010111000000011000110011100001010001101101011111100101001000001011001100101010100110000101101010111101111010000011011110000111000111000100100100011000001010010000100011001010001001001100100010001000101110110010100011011010111011010101010010100101000011000100101101000001011011011010000010001111011001101010111111111000001100000110100011000110011111010110110111100001101011000111110101101110110110000101001001110001111000011000001001,000110001101000100110110101001001000001111011000001010100011111011110) = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000000000000000000000000000000000000000000010001000111001111011010101011000000110001111000101011101001111011010111000000011000110011100001010001101101011111100101001000001011001100101010100110000101101010111101111010000011011110000111000111000100100100011000001010010000100011001010001001001100100010001000101110110010100011011010111011010101010010100101000011000100101101000001011011011010000010001111011001101010111111111000001100000110100011000110011111010110110111100001101011000111110101101110110110000101001001110001111000011000001001000110001101000100110110101001001000001111011000001010100011111011110 + bit_concat(00110110110101000110001111010110100111110100010001001111110101011001110100111111101010101101000000111100111100010000010010110010001011010101100000010011100100010110111101011110111100010101100101110000111101110010011000110110001010001011100101001111101000000011010111000000001110010110111010111101101111111001000101110010011000110001000100011001110000001101111001101010001101000100101011111011001100110001111001011110101010111001000101000100001100110111100001001011111101100010011100010100000100001010,110110101011010000000111101000011111101010111100000010100010111000111) = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000000000000000000000000000000000000000000110110110101000110001111010110100111110100010001001111110101011001110100111111101010101101000000111100111100010000010010110010001011010101100000010011100100010110111101011110111100010101100101110000111101110010011000110110001010001011100101001111101000000011010111000000001110010110111010111101101111111001000101110010011000110001000100011001110000001101111001101010001101000100101011111011001100110001111001011110101010111001000101000100001100110111100001001011111101100010011100010100000100001010110110101011010000000111101000011111101010111100000010100010111000111 + bit_concat(01000100100000100000101000101010010010000001101100110110101010010111101000110000001110101000111100010111100111111000100000011101101000111110001110100100000110101001010111110111101101101110000101010001001010100010100000000011110010110011001100111011011000111110010011000110000101001111100000001000000001000010011100010010010101001001001010011101100001011101001111111010111011001000011101000111000111000101100010011101101111011000100101111110101111001010111010100100011001011000111110100101110110011111,000101010101101111101110111011111111010001111010000111101000111000111) = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000000000000000000000000000000000000000001000100100000100000101000101010010010000001101100110110101010010111101000110000001110101000111100010111100111111000100000011101101000111110001110100100000110101001010111110111101101101110000101010001001010100010100000000011110010110011001100111011011000111110010011000110000101001111100000001000000001000010011100010010010101001001001010011101100001011101001111111010111011001000011101000111000111000101100010011101101111011000100101111110101111001010111010100100011001011000111110100101110110011111000101010101101111101110111011111111010001111010000111101000111000111 + bit_concat(01111101001000111100101000001101110000100100110100111011001011101001000110100110000111011111111010110101001011011000000101010011001001101001100111111101110111110010100100000011100101010101010011011001001100001111010000110111000100010001001110011010101110010101110010110010011101111001100111010011000101101011110110000000101110010100010101010000000110101000001010001011101001010001111011010111111111001101100110001100101110011000101001110001001011001010001001010110101101011110011110100100001000011101,000111011100110000011011000110100111110000001100101000110100110111001) = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000000000000000000000000000000000000000001111101001000111100101000001101110000100100110100111011001011101001000110100110000111011111111010110101001011011000000101010011001001101001100111111101110111110010100100000011100101010101010011011001001100001111010000110111000100010001001110011010101110010101110010110010011101111001100111010011000101101011110110000000101110010100010101010000000110101000001010001011101001010001111011010111111111001101100110001100101110011000101001110001001011001010001001010110101101011110011110100100001000011101000111011100110000011011000110100111110000001100101000110100110111001 + bit_concat(00100101101011011100000101010000001111011110111011011001011011001111010111100101000011110011011110010011101011101000111100000011000001100001111111101111101100000111001011000110110000110010010101010111011011000100111110110100101111010101001011000011001001110001101011101101011111011101110110010110000010101010110110001110111010011010000011001010000111000101001100111010110000000001101010110001100001010000001011101100100100010010110000000111000110000001000110101101110001111101001001110001011110101101,000111011000111111010011000110010100011111101000100001101110001011010) = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000000000000000000000000000000000000000000100101101011011100000101010000001111011110111011011001011011001111010111100101000011110011011110010011101011101000111100000011000001100001111111101111101100000111001011000110110000110010010101010111011011000100111110110100101111010101001011000011001001110001101011101101011111011101110110010110000010101010110110001110111010011010000011001010000111000101001100111010110000000001101010110001100001010000001011101100100100010010110000000111000110000001000110101101110001111101001001110001011110101101000111011000111111010011000110010100011111101000100001101110001011010 + bit_concat(00110000010010101111111101010100111110011000010101010100101111111000000100101101001001010001110011101110110000111011000000111000110000011111100010110110101001110100101010011010011000000001110010001010011111100000010111000001110011010011101110111000100111100101000001110101100001011000110100001101001011101001100001100111001110010101111011001011101011111000011001111000101000000101011111100101000100000101101101000101111100010100100011101011100110001000001011010111000101111101101001000101110101001011,000110001011110110101111111001001011101000110111001110101011111111001) = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000000000000000000000000000000000000000000110000010010101111111101010100111110011000010101010100101111111000000100101101001001010001110011101110110000111011000000111000110000011111100010110110101001110100101010011010011000000001110010001010011111100000010111000001110011010011101110111000100111100101000001110101100001011000110100001101001011101001100001100111001110010101111011001011101011111000011001111000101000000101011111100101000100000101101101000101111100010100100011101011100110001000001011010111000101111101101001000101110101001011000110001011110110101111111001001011101000110111001110101011111111001 + bit_concat(10100001111101100110010101111100010000111111001011000010100000100100011100100000110111010010000000001010000111100101000000000010010010000011100110110100100011011110110101111110100110110111111000010110001010000010001110001100011000000101011010000110110111110010110101100011111110100011100111100110001010001110011010101110000011000101101100101000110001001001101101010100000100011011011111011101111101101100101001100000101001010101011001011110000100111011110000111011010101111001010111001001010101000011,110010111110110001100000100010101110101000010010100000001100110001010) = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000000000000000000000000000000000000000010100001111101100110010101111100010000111111001011000010100000100100011100100000110111010010000000001010000111100101000000000010010010000011100110110100100011011110110101111110100110110111111000010110001010000010001110001100011000000101011010000110110111110010110101100011111110100011100111100110001010001110011010101110000011000101101100101000110001001001101101010100000100011011011111011101111101101100101001100000101001010101011001011110000100111011110000111011010101111001010111001001010101000011110010111110110001100000100010101110101000010010100000001100110001010 + bit_concat(11001101001001111100101001001101001111011111000010000001101111011100011100011110111011110001101011010101100011110010101101111010111001111101010011001101010111100000111101000011110010111110000011000111111110100101110001000001101001110000110101010011011000110010101010001010111011110010000111100101101010001000110101000011111100010111100000110100000000101111100111111111100111101000000111001011100111010101001100100111111010101110101110010000000011100011001101011100101101101101011010101111010110100001,111110011101011100000011001001101110111001101011110111010100110001010) = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000000000000000000000000000000000000000011001101001001111100101001001101001111011111000010000001101111011100011100011110111011110001101011010101100011110010101101111010111001111101010011001101010111100000111101000011110010111110000011000111111110100101110001000001101001110000110101010011011000110010101010001010111011110010000111100101101010001000110101000011111100010111100000110100000000101111100111111111100111101000000111001011100111010101001100100111111010101110101110010000000011100011001101011100101101101101011010101111010110100001111110011101011100000011001001101110111001101011110111010100110001010 + bit_concat(10111100111010010111110100110100111001010100101110111101011001010100000100110011000110110000100100100110100101101100010010000010001100111111000110011010000001111001011110110111111010010011100000011100110101010111010011100110111100111100001001100100100111110100111011010000110110100010101011000011111111100101011010011110011110011101001111011000001100000111100011101110010110000110011000110000110001010000000101101001111111100101010110101111001111100010110101010001111000101000110111100011100100011011,001101110111101101011001011110011011101000110101010111000111000101010) = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000000000000000000000000000000000000000010111100111010010111110100110100111001010100101110111101011001010100000100110011000110110000100100100110100101101100010010000010001100111111000110011010000001111001011110110111111010010011100000011100110101010111010011100110111100111100001001100100100111110100111011010000110110100010101011000011111111100101011010011110011110011101001111011000001100000111100011101110010110000110011000110000110001010000000101101001111111100101010110101111001111100010110101010001111000101000110111100011100100011011001101110111101101011001011110011011101000110101010111000111000101010 + bit_concat(11011100110011001001111100110110011101100100000001100010010001001001111010010011101000001011010110011010010011110010111000001011010111010001110101011111111010111111010010000000001110000101101010101000000010010101001010100001001100100011010110010011001010110110100101111100001000000101101110100011100000000101101000110011001100001001011001100100111100001111111010111001011001011101001111010010011111011011111011110101000000001010100001011100011001001010010110010010111001011111010001000000001000010000,101001000000101111111001100100101101001000110011101011101110000110011) = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000000000000000000000000000000000000000011011100110011001001111100110110011101100100000001100010010001001001111010010011101000001011010110011010010011110010111000001011010111010001110101011111111010111111010010000000001110000101101010101000000010010101001010100001001100100011010110010011001010110110100101111100001000000101101110100011100000000101101000110011001100001001011001100100111100001111111010111001011001011101001111010010011111011011111011110101000000001010100001011100011001001010010110010010111001011111010001000000001000010000101001000000101111111001100100101101001000110011101011101110000110011 + bit_concat(10111101010000111110010111011001000110010010010101110001100101001010111110111100001001111000100010001111100101101011100001011110110001100010100001110110000011001101001000010110001011101100000110100000111100000110000110110110000000111011110101111100101010010001010011100101010110100100101001110110100100000001111100100101010101111111010000111000000110011001111010011011000101111100101000011110111010010011100000010000001110000101001010100110110110110011111101000111101000010011001010101011010011101001,111110000101101000000001111000011100100101111001100100010110111001111) = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000000000000000000000000000000000000000010111101010000111110010111011001000110010010010101110001100101001010111110111100001001111000100010001111100101101011100001011110110001100010100001110110000011001101001000010110001011101100000110100000111100000110000110110110000000111011110101111100101010010001010011100101010110100100101001110110100100000001111100100101010101111111010000111000000110011001111010011011000101111100101000011110111010010011100000010000001110000101001010100110110110110011111101000111101000010011001010101011010011101001111110000101101000000001111000011100100101111001100100010110111001111 + bit_concat(11100110111110110010111100111110001010001010000101101011001110010110100100100111101010110010011101111101101011101000000001010000111000100001110110110111000000011011001001100111000000100110111010010110110101100110100101111000000011100101111100101111110010000000010010101110100011100000010110110101011100100101100100101111000000100010010001111111001101001101111111010010100001101111001111100001100101000000100011011100111101111111111110100101000000010100011110101010000011111111000011000111001110010001,111110010110010001000101000000000111110001000010111101001111111100010) = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000000000000000000000000000000000000000011100110111110110010111100111110001010001010000101101011001110010110100100100111101010110010011101111101101011101000000001010000111000100001110110110111000000011011001001100111000000100110111010010110110101100110100101111000000011100101111100101111110010000000010010101110100011100000010110110101011100100101100100101111000000100010010001111111001101001101111111010010100001101111001111100001100101000000100011011100111101111111111110100101000000010100011110101010000011111111000011000111001110010001111110010110010001000101000000000111110001000010111101001111111100010 + bit_concat(01011111001110101010101001001100111001001110100001011011110010001001101010011011101000010011001001110111110010000100101100010110101110011110110101101010001110100110101110100010100000000111110001011100100101011011000011010010110100110010111111001000001000101111101000001010110001001000010001101000000101010010100101100101001101111100001111101011101110010110001000000111010111000011001010000000001010001010100100100001001001101011011010000100110110011011100101010111111001010101110010000011110101000101,100111110111111011100111011011101011100101011110001110010101011110001) = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000000000000000000000000000000000000000001011111001110101010101001001100111001001110100001011011110010001001101010011011101000010011001001110111110010000100101100010110101110011110110101101010001110100110101110100010100000000111110001011100100101011011000011010010110100110010111111001000001000101111101000001010110001001000010001101000000101010010100101100101001101111100001111101011101110010110001000000111010111000011001010000000001010001010100100100001001001101011011010000100110110011011100101010111111001010101110010000011110101000101100111110111111011100111011011101011100101011110001110010101011110001 + bit_concat(01101011011000010111101111011100010001100001100101111000111100101101011000110100010100111101110000000110101001001001110001010001001010011111111001111111011111001100011100010110101000100011111010111001101110101001001001000101110000010100110011111101001010011011110100101000100010110111110000011000100000110111100110001111110011001011100111101111111100011101001110000011101000110100110100000111011011001101001011000010010111010011111010010111011101100011100000111110111100010100010110010110101010100010,111111111100111100111010101110100111000111010100001100111000100111011) = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000000000000000000000000000000000000000001101011011000010111101111011100010001100001100101111000111100101101011000110100010100111101110000000110101001001001110001010001001010011111111001111111011111001100011100010110101000100011111010111001101110101001001001000101110000010100110011111101001010011011110100101000100010110111110000011000100000110111100110001111110011001011100111101111111100011101001110000011101000110100110100000111011011001101001011000010010111010011111010010111011101100011100000111110111100010100010110010110101010100010111111111100111100111010101110100111000111010100001100111000100111011 + bit_concat(01011110010001011001000001111100001101100001100000010010011101101111001001100100101111110000100111011010110100001110011011011000101101100110110010011100101011100010100110011010000110000111100101100011010100000001000011001011111111110100101101101110011110001000111100000111001110111000111011100010010100000110011110001110000001011101100111110110110001001000101011001000110001010010010110110010110010110110010011011010001011000110101110011010110011111010101010000101100001010001110111111010011001111111,010000111101100001110010111000111111011101011000111110101000011000101) = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000000000000000000000000000000000000000001011110010001011001000001111100001101100001100000010010011101101111001001100100101111110000100111011010110100001110011011011000101101100110110010011100101011100010100110011010000110000111100101100011010100000001000011001011111111110100101101101110011110001000111100000111001110111000111011100010010100000110011110001110000001011101100111110110110001001000101011001000110001010010010110110010110010110110010011011010001011000110101110011010110011111010101010000101100001010001110111111010011001111111010000111101100001110010111000111111011101011000111110101000011000101 + bit_concat(00000111110000111100100010100110110010101110101101110101011001000101110001001111101111010010100110101100010101111000110111101010000011010010100000011000010110000000101100010010011001001110110100110110111010010010100011101111010001110011101100110101011101000110001101011101010000011100010001001010101010111100001111100000111110100000011001001101011111110001111111100101001011111000101001110110000110000101110011001001101010010000000000111110010111111010011010010010001110100011100001000111110001001001,011010001001000001010010001101000110010111011001101000000100001100101) = 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000000000000000000000000000000000000000000000111110000111100100010100110110010101110101101110101011001000101110001001111101111010010100110101100010101111000110111101010000011010010100000011000010110000000101100010010011001001110110100110110111010010010100011101111010001110011101100110101011101000110001101011101010000011100010001001010101010111100001111100000111110100000011001001101011111110001111111100101001011111000101001110110000110000101110011001001101010010000000000111110010111111010011010010010001110100011100001000111110001001001011010001001000001010010001101000110010111011001101000000100001100101 + exit 0 From reid at x10sys.com Wed May 16 23:34:52 2007 From: reid at x10sys.com (Reid Spencer) Date: Wed, 16 May 2007 23:34:52 -0500 Subject: [llvm-commits] CVS: llvm-test/SingleSource/UnitTests/Integer/bits.h Message-ID: <200705170434.l4H4YqPW001107@zion.cs.uiuc.edu> Changes in directory llvm-test/SingleSource/UnitTests/Integer: bits.h updated: 1.8 -> 1.9 --- Log message: Add 500 and 1024 bit wide unsigned integer types. --- Diffs of the changes: (+2 -0) bits.h | 2 ++ 1 files changed, 2 insertions(+) Index: llvm-test/SingleSource/UnitTests/Integer/bits.h diff -u llvm-test/SingleSource/UnitTests/Integer/bits.h:1.8 llvm-test/SingleSource/UnitTests/Integer/bits.h:1.9 --- llvm-test/SingleSource/UnitTests/Integer/bits.h:1.8 Wed May 16 14:33:49 2007 +++ llvm-test/SingleSource/UnitTests/Integer/bits.h Wed May 16 23:34:32 2007 @@ -43,6 +43,8 @@ typedef unsigned int __attribute__((bitwidth(128))) uint128; typedef unsigned int __attribute__((bitwidth(250))) uint250; typedef unsigned int __attribute__((bitwidth(256))) uint256; +typedef unsigned int __attribute__((bitwidth(500))) uint500; +typedef unsigned int __attribute__((bitwidth(1024))) uint1024; typedef int __attribute__((bitwidth(9))) int9; typedef int __attribute__((bitwidth(10))) int10; From reid at x10sys.com Wed May 16 23:35:33 2007 From: reid at x10sys.com (Reid Spencer) Date: Wed, 16 May 2007 23:35:33 -0500 Subject: [llvm-commits] CVS: llvm-test/SingleSource/UnitTests/Integer/multiple_assign.c part_select2.c Message-ID: <200705170435.l4H4ZXMt001135@zion.cs.uiuc.edu> Changes in directory llvm-test/SingleSource/UnitTests/Integer: multiple_assign.c added (r1.1) part_select2.c added (r1.1) --- Log message: Add new test cases. --- Diffs of the changes: (+43 -0) multiple_assign.c | 8 ++++++++ part_select2.c | 35 +++++++++++++++++++++++++++++++++++ 2 files changed, 43 insertions(+) Index: llvm-test/SingleSource/UnitTests/Integer/multiple_assign.c diff -c /dev/null llvm-test/SingleSource/UnitTests/Integer/multiple_assign.c:1.1 *** /dev/null Wed May 16 23:35:23 2007 --- llvm-test/SingleSource/UnitTests/Integer/multiple_assign.c Wed May 16 23:35:13 2007 *************** *** 0 **** --- 1,8 ---- + #include "bits.h" + + int main(int argc, char**argv) { + int69 X; + int169 Y; + X = Y = 0; + return X: + } Index: llvm-test/SingleSource/UnitTests/Integer/part_select2.c diff -c /dev/null llvm-test/SingleSource/UnitTests/Integer/part_select2.c:1.1 *** /dev/null Wed May 16 23:35:33 2007 --- llvm-test/SingleSource/UnitTests/Integer/part_select2.c Wed May 16 23:35:13 2007 *************** *** 0 **** --- 1,35 ---- + + #include "bits.h" + + typedef int __attribute__ ((bitwidth(128))) int128; + typedef int __attribute__ ((bitwidth(8))) int8; + // typedef unsigned int __attribute__ ((bitwidth(19))) uint19; + + int main() + { + int128 X = 0xde7ed959bcfdb200ULL; + int X0 = 0xde7ed959bcfdb200ULL; + + int8 X1 = X0; // Truncate to 0x00 + + uint19 r, r0, r1; + + printf("\n X="); + printBits(X); + + r0 = part_select(X0, 0, 18); + r = part_select(X, 0, 18); + r1 = part_select(X1, 0, 18); + + printf("\n r0 ="); + printBits(r0); + + printf("\n r ="); // Wrong! + printBits(r); + + printf("\n r1 ="); // Wrong! + printBits(r1); + printf("\n"); + + return 0; + } From reid at x10sys.com Wed May 16 23:36:46 2007 From: reid at x10sys.com (Reid Spencer) Date: Wed, 16 May 2007 23:36:46 -0500 Subject: [llvm-commits] CVS: llvm-test/SingleSource/UnitTests/Integer/part_set.c part_set.reference_output Message-ID: <200705170436.l4H4akPG001172@zion.cs.uiuc.edu> Changes in directory llvm-test/SingleSource/UnitTests/Integer: part_set.c added (r1.1) part_set.reference_output added (r1.1) --- Log message: Add a new test case. --- Diffs of the changes: (+24 -0) part_set.c | 19 +++++++++++++++++++ part_set.reference_output | 5 +++++ 2 files changed, 24 insertions(+) Index: llvm-test/SingleSource/UnitTests/Integer/part_set.c diff -c /dev/null llvm-test/SingleSource/UnitTests/Integer/part_set.c:1.1 *** /dev/null Wed May 16 23:36:36 2007 --- llvm-test/SingleSource/UnitTests/Integer/part_set.c Wed May 16 23:36:26 2007 *************** *** 0 **** --- 1,19 ---- + #include "bits.h" + #include + + int main(int argc, char** argv) { + uint68 x = 0xF0F0F0F0F0F0F0F0ULL; + uint60 y = 0x0F0F0F0F0F0F0F0FULL; + uint68 z = part_set(x, y, 0, (bitwidthof(y)-1)); + uint68 z2= part_set(x, y, (bitwidthof(y)-1), 0); + printf("x = "); + printBits(x); + printf("\ny = "); + printBits(y); + printf("\npart_set(x, y, 0, 59) = "); + printBits(z); + printf("\npart_set(x, y, 59, 0) = "); + printBits(z2); + printf("\n"); + return (int) z; + } Index: llvm-test/SingleSource/UnitTests/Integer/part_set.reference_output diff -c /dev/null llvm-test/SingleSource/UnitTests/Integer/part_set.reference_output:1.1 *** /dev/null Wed May 16 23:36:46 2007 --- llvm-test/SingleSource/UnitTests/Integer/part_set.reference_output Wed May 16 23:36:26 2007 *************** *** 0 **** --- 1,5 ---- + x = 00001111000011110000111100001111000011110000111100001111000011110000 + y = 111100001111000011110000111100001111000011110000111100001111 + part_set(x, y, 0, 59) = 00001111111100001111000011110000111100001111000011110000111100001111 + part_set(x, y, 59, 0) = 00001111111100001111000011110000111100001111000011110000111100001111 + exit 15 From reid at x10sys.com Wed May 16 23:37:49 2007 From: reid at x10sys.com (Reid Spencer) Date: Wed, 16 May 2007 23:37:49 -0500 Subject: [llvm-commits] CVS: llvm-test/SingleSource/UnitTests/Integer/cppfield.cpp Message-ID: <200705170437.l4H4bn2k001206@zion.cs.uiuc.edu> Changes in directory llvm-test/SingleSource/UnitTests/Integer: cppfield.cpp updated: 1.5 -> 1.6 --- Log message: Fix indentation. --- Diffs of the changes: (+8 -8) cppfield.cpp | 16 ++++++++-------- 1 files changed, 8 insertions(+), 8 deletions(-) Index: llvm-test/SingleSource/UnitTests/Integer/cppfield.cpp diff -u llvm-test/SingleSource/UnitTests/Integer/cppfield.cpp:1.5 llvm-test/SingleSource/UnitTests/Integer/cppfield.cpp:1.6 --- llvm-test/SingleSource/UnitTests/Integer/cppfield.cpp:1.5 Mon Jan 29 18:48:44 2007 +++ llvm-test/SingleSource/UnitTests/Integer/cppfield.cpp Wed May 16 23:37:30 2007 @@ -18,18 +18,18 @@ class bitFieldStruct { public: - int i; - unsigned char c:7; - int s:17; - char c2; + int i; + unsigned char c:7; + int s:17; + char c2; }; class bitAccurateStruct { public: - int32 i; - int7 c; - int17 s; - int8 c2; + int32 i; + int7 c; + int17 s; + int8 c2; }; int main() From reid at x10sys.com Thu May 17 00:15:02 2007 From: reid at x10sys.com (Reid Spencer) Date: Thu, 17 May 2007 00:15:02 -0500 Subject: [llvm-commits] CVS: llvm-test/SingleSource/UnitTests/Integer/big_bit_concat.c Message-ID: <200705170515.l4H5F2qN001919@zion.cs.uiuc.edu> Changes in directory llvm-test/SingleSource/UnitTests/Integer: big_bit_concat.c updated: 1.1 -> 1.2 --- Log message: Don't shy away from multiple assignments now that its fixed. --- Diffs of the changes: (+1 -2) big_bit_concat.c | 3 +-- 1 files changed, 1 insertion(+), 2 deletions(-) Index: llvm-test/SingleSource/UnitTests/Integer/big_bit_concat.c diff -u llvm-test/SingleSource/UnitTests/Integer/big_bit_concat.c:1.1 llvm-test/SingleSource/UnitTests/Integer/big_bit_concat.c:1.2 --- llvm-test/SingleSource/UnitTests/Integer/big_bit_concat.c:1.1 Wed May 16 23:24:24 2007 +++ llvm-test/SingleSource/UnitTests/Integer/big_bit_concat.c Thu May 17 00:14:44 2007 @@ -27,8 +27,7 @@ printf("Attempting %d bit_concat operations\n", count); for (i = 0; i < count; i++) { - Y = 0; - X = 0; + Y = X = 0; for (j = 0; j < bitwidthof(uint500); j++) { X <<= 1; X += (rand() % 2 == 0 ? 0 : 1); From reid at x10sys.com Thu May 17 00:15:30 2007 From: reid at x10sys.com (Reid Spencer) Date: Thu, 17 May 2007 00:15:30 -0500 Subject: [llvm-commits] CVS: llvm-test/SingleSource/UnitTests/Integer/multiple_assign.c Message-ID: <200705170515.l4H5FUnF001937@zion.cs.uiuc.edu> Changes in directory llvm-test/SingleSource/UnitTests/Integer: multiple_assign.c updated: 1.1 -> 1.2 --- Log message: : is not a statement terminator, but ; is --- Diffs of the changes: (+1 -1) multiple_assign.c | 2 +- 1 files changed, 1 insertion(+), 1 deletion(-) Index: llvm-test/SingleSource/UnitTests/Integer/multiple_assign.c diff -u llvm-test/SingleSource/UnitTests/Integer/multiple_assign.c:1.1 llvm-test/SingleSource/UnitTests/Integer/multiple_assign.c:1.2 --- llvm-test/SingleSource/UnitTests/Integer/multiple_assign.c:1.1 Wed May 16 23:35:13 2007 +++ llvm-test/SingleSource/UnitTests/Integer/multiple_assign.c Thu May 17 00:15:12 2007 @@ -4,5 +4,5 @@ int69 X; int169 Y; X = Y = 0; - return X: + return X; } From reid at x10sys.com Thu May 17 00:25:56 2007 From: reid at x10sys.com (Reid Spencer) Date: Thu, 17 May 2007 00:25:56 -0500 Subject: [llvm-commits] CVS: llvm-test/SingleSource/UnitTests/Integer/part_select2.c Message-ID: <200705170525.l4H5Puw8002115@zion.cs.uiuc.edu> Changes in directory llvm-test/SingleSource/UnitTests/Integer: part_select2.c updated: 1.1 -> 1.2 --- Log message: Don't attempt to select more bits than there are present. --- Diffs of the changes: (+1 -1) part_select2.c | 2 +- 1 files changed, 1 insertion(+), 1 deletion(-) Index: llvm-test/SingleSource/UnitTests/Integer/part_select2.c diff -u llvm-test/SingleSource/UnitTests/Integer/part_select2.c:1.1 llvm-test/SingleSource/UnitTests/Integer/part_select2.c:1.2 --- llvm-test/SingleSource/UnitTests/Integer/part_select2.c:1.1 Wed May 16 23:35:13 2007 +++ llvm-test/SingleSource/UnitTests/Integer/part_select2.c Thu May 17 00:25:37 2007 @@ -19,7 +19,7 @@ r0 = part_select(X0, 0, 18); r = part_select(X, 0, 18); - r1 = part_select(X1, 0, 18); + r1 = part_select(X1, 0, 7); printf("\n r0 ="); printBits(r0); From reid at x10sys.com Thu May 17 01:04:23 2007 From: reid at x10sys.com (Reid Spencer) Date: Thu, 17 May 2007 01:04:23 -0500 Subject: [llvm-commits] CVS: llvm-test/Makefile.tests Message-ID: <200705170604.l4H64Nwi002734@zion.cs.uiuc.edu> Changes in directory llvm-test: Makefile.tests updated: 1.15 -> 1.16 --- Log message: TESTRUNR is dead. --- Diffs of the changes: (+0 -4) Makefile.tests | 4 ---- 1 files changed, 4 deletions(-) Index: llvm-test/Makefile.tests diff -u llvm-test/Makefile.tests:1.15 llvm-test/Makefile.tests:1.16 --- llvm-test/Makefile.tests:1.15 Thu Feb 8 21:38:16 2007 +++ llvm-test/Makefile.tests Thu May 17 01:04:04 2007 @@ -38,10 +38,6 @@ LCXXFLAGS += -O2 LLCFLAGS = FAILURE = $(LLVM_SRC_ROOT)/test/Failure.sh -TESTRUNR = @echo Running test: $<; \ - PATH="$(LLVMTOOLCURRENT):$(LLVM_SRC_ROOT)/test/Scripts:$(PATH)" \ - $(LLVM_SRC_ROOT)/test/TestRunner.sh - LLCLIBS := $(LLCLIBS) -lm clean:: From dpatel at apple.com Thu May 17 01:22:30 2007 From: dpatel at apple.com (Devang Patel) Date: Thu, 17 May 2007 01:22:30 -0500 Subject: [llvm-commits] CVS: llvm/test/C++Frontend/2007-05-16-ReverseBitFieldCrash.cpp Message-ID: <200705170622.l4H6MU7o003017@zion.cs.uiuc.edu> Changes in directory llvm/test/C++Frontend: 2007-05-16-ReverseBitFieldCrash.cpp added (r1.1) --- Log message: New test. --- Diffs of the changes: (+24 -0) 2007-05-16-ReverseBitFieldCrash.cpp | 24 ++++++++++++++++++++++++ 1 files changed, 24 insertions(+) Index: llvm/test/C++Frontend/2007-05-16-ReverseBitFieldCrash.cpp diff -c /dev/null llvm/test/C++Frontend/2007-05-16-ReverseBitFieldCrash.cpp:1.1 *** /dev/null Thu May 17 01:22:22 2007 --- llvm/test/C++Frontend/2007-05-16-ReverseBitFieldCrash.cpp Thu May 17 01:22:12 2007 *************** *** 0 **** --- 1,24 ---- + // RUN: %llvmgxx %s -emit-llvm -S -o - + + #pragma reverse_bitfields on + typedef unsigned long UINT32; + + extern void abort(void); + + typedef struct TestStruct + { + long first: 15, + second: 17; + } TestStruct; + + int main (int argc, char * const argv[]) { + + TestStruct testStruct = {1, 0}; + + UINT32 dw = *(UINT32 *)(&testStruct); + + if(!(dw & 0xFFFF)) + abort (); + + return 0; + } From dpatel at apple.com Thu May 17 01:23:29 2007 From: dpatel at apple.com (dpatel at apple.com) Date: Wed, 16 May 2007 23:23:29 -0700 (PDT) Subject: [llvm-commits] [127336] Fix http://lists.cs.uiuc.edu/pipermail/llvm-commits/ Week-of-Mon-20070514/049736.html Message-ID: <20070517062329.3B4F93190872@src> Revision: 127336 Author: dpatel Date: 2007-05-16 23:23:29 -0700 (Wed, 16 May 2007) Log Message: ----------- Fix http://lists.cs.uiuc.edu/pipermail/llvm-commits/Week-of-Mon-20070514/049736.html Modified Paths: -------------- apple-local/branches/llvm/gcc/llvm-types.cpp Modified: apple-local/branches/llvm/gcc/llvm-types.cpp =================================================================== --- apple-local/branches/llvm/gcc/llvm-types.cpp 2007-05-17 05:58:55 UTC (rev 127335) +++ apple-local/branches/llvm/gcc/llvm-types.cpp 2007-05-17 06:23:29 UTC (rev 127336) @@ -1017,6 +1017,7 @@ Elements.pop_back(); ElementOffsetInBytes.pop_back(); ElementSizeInBytes.pop_back(); + PaddingElement.pop_back(); } } @@ -1060,6 +1061,8 @@ ElementOffsetInBytes.end()); ElementSizeInBytes.erase(ElementSizeInBytes.begin()+FieldNo, ElementSizeInBytes.end()); + PaddingElement.erase(PaddingElement.begin()+FieldNo, + PaddingElement.end()); } /// getNewElementByteOffset - If we add a new element with the specified @@ -1181,6 +1184,7 @@ ElementOffsetInBytes[x-1] + ElementSizeInBytes[x-1]); ElementSizeInBytes.insert(ElementSizeInBytes.begin() + x, padding); Elements.insert(Elements.begin() + x, Pad); + PaddingElement.insert(PaddingElement.begin() + x, true); } } } From reid at x10sys.com Thu May 17 01:25:55 2007 From: reid at x10sys.com (Reid Spencer) Date: Thu, 17 May 2007 01:25:55 -0500 Subject: [llvm-commits] CVS: llvm-test/SingleSource/UnitTests/Integer/part_select2.reference_output part_select2.c Message-ID: <200705170625.l4H6PtsB003084@zion.cs.uiuc.edu> Changes in directory llvm-test/SingleSource/UnitTests/Integer: part_select2.reference_output added (r1.1) part_select2.c updated: 1.2 -> 1.3 --- Log message: Add the reference output. The bug here was caused by APInt. --- Diffs of the changes: (+8 -2) part_select2.c | 4 ++-- part_select2.reference_output | 6 ++++++ 2 files changed, 8 insertions(+), 2 deletions(-) Index: llvm-test/SingleSource/UnitTests/Integer/part_select2.reference_output diff -c /dev/null llvm-test/SingleSource/UnitTests/Integer/part_select2.reference_output:1.1 *** /dev/null Thu May 17 01:25:47 2007 --- llvm-test/SingleSource/UnitTests/Integer/part_select2.reference_output Thu May 17 01:25:37 2007 *************** *** 0 **** --- 1,6 ---- + + X=11111111111111111111111111111111111111111111111111111111111111111101111001111110110110010101100110111100111111011011001000000000 + r0 =1011011001000000000 + r =1011011001000000000 + r1 =0000000000000000000 + exit 0 Index: llvm-test/SingleSource/UnitTests/Integer/part_select2.c diff -u llvm-test/SingleSource/UnitTests/Integer/part_select2.c:1.2 llvm-test/SingleSource/UnitTests/Integer/part_select2.c:1.3 --- llvm-test/SingleSource/UnitTests/Integer/part_select2.c:1.2 Thu May 17 00:25:37 2007 +++ llvm-test/SingleSource/UnitTests/Integer/part_select2.c Thu May 17 01:25:37 2007 @@ -27,9 +27,9 @@ printf("\n r ="); // Wrong! printBits(r); - printf("\n r1 ="); // Wrong! + printf("\n r1 ="); // Zero printBits(r1); printf("\n"); - return 0; + return r; } From reid at x10sys.com Thu May 17 01:26:47 2007 From: reid at x10sys.com (Reid Spencer) Date: Thu, 17 May 2007 01:26:47 -0500 Subject: [llvm-commits] CVS: llvm/lib/Support/APInt.cpp Message-ID: <200705170626.l4H6Qlw4003107@zion.cs.uiuc.edu> Changes in directory llvm/lib/Support: APInt.cpp updated: 1.83 -> 1.84 --- Log message: For lshr by 0 bits, just return *this as a short cut. This also prevents undefined behavior when the width > 64 bits. --- Diffs of the changes: (+6 -0) APInt.cpp | 6 ++++++ 1 files changed, 6 insertions(+) Index: llvm/lib/Support/APInt.cpp diff -u llvm/lib/Support/APInt.cpp:1.83 llvm/lib/Support/APInt.cpp:1.84 --- llvm/lib/Support/APInt.cpp:1.83 Wed May 16 14:18:22 2007 +++ llvm/lib/Support/APInt.cpp Thu May 17 01:26:29 2007 @@ -1149,6 +1149,12 @@ if (shiftAmt == BitWidth) return APInt(BitWidth, 0); + // If none of the bits are shifted out, the result is *this. This avoids + // issues with shifting byt he size of the integer type, which produces + // undefined results in the code below. This is also an optimization. + if (shiftAmt == 0) + return *this; + // Create some space for the result. uint64_t * val = new uint64_t[getNumWords()]; From clattner at apple.com Thu May 17 01:27:45 2007 From: clattner at apple.com (clattner at apple.com) Date: Wed, 16 May 2007 23:27:45 -0700 (PDT) Subject: [llvm-commits] [127337] Enable 128-bit integer types in the front-end, accessible with Message-ID: <20070517062745.4F8AE31909F9@src> Revision: 127337 Author: clattner Date: 2007-05-16 23:27:45 -0700 (Wed, 16 May 2007) Log Message: ----------- Enable 128-bit integer types in the front-end, accessible with things like: typedef int TI __attribute__((mode(TI))); on 64-bit targets. Modified Paths: -------------- apple-local/branches/llvm/gcc/llvm-types.cpp Modified: apple-local/branches/llvm/gcc/llvm-types.cpp =================================================================== --- apple-local/branches/llvm/gcc/llvm-types.cpp 2007-05-17 06:23:29 UTC (rev 127336) +++ apple-local/branches/llvm/gcc/llvm-types.cpp 2007-05-17 06:27:45 UTC (rev 127337) @@ -494,6 +494,7 @@ case 16: case 32: case 64: + case 128: break; default: static bool Warned = false; From sabre at nondot.org Thu May 17 01:35:30 2007 From: sabre at nondot.org (Chris Lattner) Date: Thu, 17 May 2007 01:35:30 -0500 Subject: [llvm-commits] CVS: llvm/lib/Target/X86/X86InstrX86-64.td Message-ID: <200705170635.l4H6ZUHF003310@zion.cs.uiuc.edu> Changes in directory llvm/lib/Target/X86: X86InstrX86-64.td updated: 1.15 -> 1.16 --- Log message: add support for 128-bit integer add/sub --- Diffs of the changes: (+20 -0) X86InstrX86-64.td | 20 ++++++++++++++++++++ 1 files changed, 20 insertions(+) Index: llvm/lib/Target/X86/X86InstrX86-64.td diff -u llvm/lib/Target/X86/X86InstrX86-64.td:1.15 llvm/lib/Target/X86/X86InstrX86-64.td:1.16 --- llvm/lib/Target/X86/X86InstrX86-64.td:1.15 Thu Apr 26 16:06:48 2007 +++ llvm/lib/Target/X86/X86InstrX86-64.td Thu May 17 01:35:11 2007 @@ -1104,6 +1104,26 @@ (srl GR64:$src2, (sub 64, CL:$amt))), addr:$dst), (SHLD64mrCL addr:$dst, GR64:$src2)>; +// X86 specific add which produces a flag. +def : Pat<(addc GR64:$src1, GR64:$src2), + (ADD64rr GR64:$src1, GR64:$src2)>; +def : Pat<(addc GR64:$src1, (load addr:$src2)), + (ADD64rm GR64:$src1, addr:$src2)>; +def : Pat<(addc GR64:$src1, i64immSExt32:$src2), + (ADD64ri32 GR64:$src1, imm:$src2)>; +def : Pat<(addc GR64:$src1, i64immSExt8:$src2), + (ADD64ri8 GR64:$src1, i64immSExt8:$src2)>; + +def : Pat<(subc GR64:$src1, GR64:$src2), + (SUB64rr GR64:$src1, GR64:$src2)>; +def : Pat<(subc GR64:$src1, (load addr:$src2)), + (SUB64rm GR64:$src1, addr:$src2)>; +def : Pat<(subc GR64:$src1, imm:$src2), + (SUB64ri32 GR64:$src1, i64immSExt32:$src2)>; +def : Pat<(subc GR64:$src1, i64immSExt8:$src2), + (SUB64ri8 GR64:$src1, i64immSExt8:$src2)>; + + //===----------------------------------------------------------------------===// // X86-64 SSE Instructions //===----------------------------------------------------------------------===// From reid at x10sys.com Thu May 17 01:47:27 2007 From: reid at x10sys.com (Reid Spencer) Date: Thu, 17 May 2007 01:47:27 -0500 Subject: [llvm-commits] CVS: llvm-test/SingleSource/UnitTests/Integer/multiple_assign.reference_output Message-ID: <200705170647.l4H6lRbW003530@zion.cs.uiuc.edu> Changes in directory llvm-test/SingleSource/UnitTests/Integer: multiple_assign.reference_output added (r1.1) --- Log message: Add reference output for this test. --- Diffs of the changes: (+1 -0) multiple_assign.reference_output | 1 + 1 files changed, 1 insertion(+) Index: llvm-test/SingleSource/UnitTests/Integer/multiple_assign.reference_output diff -c /dev/null llvm-test/SingleSource/UnitTests/Integer/multiple_assign.reference_output:1.1 *** /dev/null Thu May 17 01:47:16 2007 --- llvm-test/SingleSource/UnitTests/Integer/multiple_assign.reference_output Thu May 17 01:47:06 2007 *************** *** 0 **** --- 1 ---- + exit 0 From reid at x10sys.com Thu May 17 01:48:12 2007 From: reid at x10sys.com (Reid Spencer) Date: Thu, 17 May 2007 01:48:12 -0500 Subject: [llvm-commits] CVS: llvm/lib/ExecutionEngine/Interpreter/Execution.cpp Message-ID: <200705170648.l4H6mCnA003559@zion.cs.uiuc.edu> Changes in directory llvm/lib/ExecutionEngine/Interpreter: Execution.cpp updated: 1.183 -> 1.184 --- Log message: Print integer values as both decimal and hexadecimal for convenience of verifying result values when debugging. --- Diffs of the changes: (+1 -1) Execution.cpp | 2 +- 1 files changed, 1 insertion(+), 1 deletion(-) Index: llvm/lib/ExecutionEngine/Interpreter/Execution.cpp diff -u llvm/lib/ExecutionEngine/Interpreter/Execution.cpp:1.183 llvm/lib/ExecutionEngine/Interpreter/Execution.cpp:1.184 --- llvm/lib/ExecutionEngine/Interpreter/Execution.cpp:1.183 Wed May 16 11:39:29 2007 +++ llvm/lib/ExecutionEngine/Interpreter/Execution.cpp Thu May 17 01:47:54 2007 @@ -1347,7 +1347,7 @@ case Type::PointerTyID: DOUT << "void* " << intptr_t(Val.PointerVal); break; case Type::IntegerTyID: DOUT << "i" << Val.IntVal.getBitWidth() << " " << Val.IntVal.toString(10) - << "\n"; + << " (0x" << Val.IntVal.toString(16) << ")\n"; break; } } From reid at x10sys.com Thu May 17 01:50:45 2007 From: reid at x10sys.com (Reid Spencer) Date: Thu, 17 May 2007 01:50:45 -0500 Subject: [llvm-commits] CVS: llvm-test/SingleSource/UnitTests/Integer/big_bit_concat.reference_output Message-ID: <200705170650.l4H6ojp3003615@zion.cs.uiuc.edu> Changes in directory llvm-test/SingleSource/UnitTests/Integer: big_bit_concat.reference_output updated: 1.1 -> 1.2 --- Log message: Update to match test program's static output. --- Diffs of the changes: (+1 -1) big_bit_concat.reference_output | 2 +- 1 files changed, 1 insertion(+), 1 deletion(-) Index: llvm-test/SingleSource/UnitTests/Integer/big_bit_concat.reference_output diff -u llvm-test/SingleSource/UnitTests/Integer/big_bit_concat.reference_output:1.1 llvm-test/SingleSource/UnitTests/Integer/big_bit_concat.reference_output:1.2 --- llvm-test/SingleSource/UnitTests/Integer/big_bit_concat.reference_output:1.1 Wed May 16 23:24:24 2007 +++ llvm-test/SingleSource/UnitTests/Integer/big_bit_concat.reference_output Thu May 17 01:50:27 2007 @@ -1,4 +1,4 @@ -Attempting 118 bit_concat's +Attempting 118 bit_concat operations bit_concat(00111100000001110101001101001101110011011110001011010100000100110101000011001100001011000110101101000001101010000100110101110010010001111101101101110100110111110110010000110000101011000010101001000000011111111111011101111011100100110001010101011001110010010000001001001001000100011001000000100011011111010100100110010000010111010100111100110101101101110001101011000110110000101011110110100000100000011011111011110001011110110110110001010110001001111100111100000000101000000111000110001101001000010110,111100010000000100100000000111101011000101111101011001101110010110100) = 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 000000000000000000000000000000000000000000000000000000111100000001110101001101001101110011011110001011010100000100110101000011001100001011000110101101000001101010000100110101110010010001111101101101110100110111110110010000110000101011000010101001000000011111111111011101111011100100110001010101011001110010010000001001001001000100011001000000100011011111010100100110010000010111010100111100110101101101110001101011000110110000101011110110100000100000011011111011110001011110110110110001010110001001111100111100000000101000000111000110001101001000010110111100010000000100100000000111101011000101111101011001101110010110100 bit_concat(11000101011110101000100010011010111111010001000100110101100001111000101101101111101101111101110010000111001011101001111001110111111000111010101111000110000001111011100011000111001010101101000100110111100111001101011101011000011111001010010101000111110000000011101000001101000001111111001001111011010100000010001101001101010111110101101110011101001111000011100010100001100010100010100101000001010010000001111111101111111111010000000001010110000100111001000010010101000011000110101011111010000110010011,001011001100001101001010011000100101001110010100000100101001101111111) = 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 000000000000000000000000000000000000000000000000000011000101011110101000100010011010111111010001000100110101100001111000101101101111101101111101110010000111001011101001111001110111111000111010101111000110000001111011100011000111001010101101000100110111100111001101011101011000011111001010010101000111110000000011101000001101000001111111001001111011010100000010001101001101010111110101101110011101001111000011100010100001100010100010100101000001010010000001111111101111111111010000000001010110000100111001000010010101000011000110101011111010000110010011001011001100001101001010011000100101001110010100000100101001101111111 bit_concat(00000100000010111100001010111000010101101110101110110011000001010000111100100111101100001101000010001110110101111001001110110111000111110100011111000011001000000010111001011000110110110010010110111011110011110101110011001110101000110001110101000000100011101001100100011100000000010000110011101011000010010010001001000100000100000001000001001110110100100010011011110110011010001010010110111011000010011110110110101110101110010011010010001111101000010101100111011010000010100000000010001010011111101100,110010010011111000001110000110111110111101010110110001111101000111010) = 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 000000000000000000000000000000000000000000000000000000000100000010111100001010111000010101101110101110110011000001010000111100100111101100001101000010001110110101111001001110110111000111110100011111000011001000000010111001011000110110110010010110111011110011110101110011001110101000110001110101000000100011101001100100011100000000010000110011101011000010010010001001000100000100000001000001001110110100100010011011110110011010001010010110111011000010011110110110101110101110010011010010001111101000010101100111011010000010100000000010001010011111101100110010010011111000001110000110111110111101010110110001111101000111010 From sabre at nondot.org Thu May 17 01:53:04 2007 From: sabre at nondot.org (Chris Lattner) Date: Thu, 17 May 2007 01:53:04 -0500 Subject: [llvm-commits] CVS: llvm/lib/Target/PowerPC/PPCInstr64Bit.td Message-ID: <200705170653.l4H6r4YN003708@zion.cs.uiuc.edu> Changes in directory llvm/lib/Target/PowerPC: PPCInstr64Bit.td updated: 1.44 -> 1.45 --- Log message: add support for 128-bit add/sub on ppc64 --- Diffs of the changes: (+34 -0) PPCInstr64Bit.td | 34 ++++++++++++++++++++++++++++++++++ 1 files changed, 34 insertions(+) Index: llvm/lib/Target/PowerPC/PPCInstr64Bit.td diff -u llvm/lib/Target/PowerPC/PPCInstr64Bit.td:1.44 llvm/lib/Target/PowerPC/PPCInstr64Bit.td:1.45 --- llvm/lib/Target/PowerPC/PPCInstr64Bit.td:1.44 Tue Apr 3 07:35:28 2007 +++ llvm/lib/Target/PowerPC/PPCInstr64Bit.td Thu May 17 01:52:46 2007 @@ -212,6 +212,15 @@ def ADD8 : XOForm_1<31, 266, 0, (ops G8RC:$rT, G8RC:$rA, G8RC:$rB), "add $rT, $rA, $rB", IntGeneral, [(set G8RC:$rT, (add G8RC:$rA, G8RC:$rB))]>; + +def ADDC8 : XOForm_1<31, 10, 0, (ops G8RC:$rT, G8RC:$rA, G8RC:$rB), + "addc $rT, $rA, $rB", IntGeneral, + [(set G8RC:$rT, (addc G8RC:$rA, G8RC:$rB))]>, + PPC970_DGroup_Cracked; +def ADDE8 : XOForm_1<31, 138, 0, (ops G8RC:$rT, G8RC:$rA, G8RC:$rB), + "adde $rT, $rA, $rB", IntGeneral, + [(set G8RC:$rT, (adde G8RC:$rA, G8RC:$rB))]>; + def ADDI8 : DForm_2<14, (ops G8RC:$rD, G8RC:$rA, s16imm64:$imm), "addi $rD, $rA, $imm", IntGeneral, [(set G8RC:$rD, (add G8RC:$rA, immSExt16:$imm))]>; @@ -226,6 +235,31 @@ "subf $rT, $rA, $rB", IntGeneral, [(set G8RC:$rT, (sub G8RC:$rB, G8RC:$rA))]>; +def SUBFC8 : XOForm_1<31, 8, 0, (ops G8RC:$rT, G8RC:$rA, G8RC:$rB), + "subfc $rT, $rA, $rB", IntGeneral, + [(set G8RC:$rT, (subc G8RC:$rB, G8RC:$rA))]>, + PPC970_DGroup_Cracked; + +def SUBFE8 : XOForm_1<31, 136, 0, (ops G8RC:$rT, G8RC:$rA, G8RC:$rB), + "subfe $rT, $rA, $rB", IntGeneral, + [(set G8RC:$rT, (sube G8RC:$rB, G8RC:$rA))]>; +def ADDME8 : XOForm_3<31, 234, 0, (ops G8RC:$rT, G8RC:$rA), + "addme $rT, $rA", IntGeneral, + [(set G8RC:$rT, (adde G8RC:$rA, immAllOnes))]>; +def ADDZE8 : XOForm_3<31, 202, 0, (ops G8RC:$rT, G8RC:$rA), + "addze $rT, $rA", IntGeneral, + [(set G8RC:$rT, (adde G8RC:$rA, 0))]>; +def NEG8 : XOForm_3<31, 104, 0, (ops G8RC:$rT, G8RC:$rA), + "neg $rT, $rA", IntGeneral, + [(set G8RC:$rT, (ineg G8RC:$rA))]>; +def SUBFME8 : XOForm_3<31, 232, 0, (ops G8RC:$rT, G8RC:$rA), + "subfme $rT, $rA", IntGeneral, + [(set G8RC:$rT, (sube immAllOnes, G8RC:$rA))]>; +def SUBFZE8 : XOForm_3<31, 200, 0, (ops G8RC:$rT, G8RC:$rA), + "subfze $rT, $rA", IntGeneral, + [(set G8RC:$rT, (sube 0, G8RC:$rA))]>; + + def MULHD : XOForm_1<31, 73, 0, (ops G8RC:$rT, G8RC:$rA, G8RC:$rB), "mulhd $rT, $rA, $rB", IntMulHW, From asl at math.spbu.ru Thu May 17 02:50:44 2007 From: asl at math.spbu.ru (Anton Korobeynikov) Date: Thu, 17 May 2007 02:50:44 -0500 Subject: [llvm-commits] CVS: llvm/lib/Target/X86/X86ISelLowering.cpp Message-ID: <200705170750.l4H7oiVj013789@zion.cs.uiuc.edu> Changes in directory llvm/lib/Target/X86: X86ISelLowering.cpp updated: 1.401 -> 1.402 --- Log message: Revert patch for PR1427: http://llvm.org/PR1427 . It breaks almost all vector tests. --- Diffs of the changes: (+1 -10) X86ISelLowering.cpp | 11 +---------- 1 files changed, 1 insertion(+), 10 deletions(-) Index: llvm/lib/Target/X86/X86ISelLowering.cpp diff -u llvm/lib/Target/X86/X86ISelLowering.cpp:1.401 llvm/lib/Target/X86/X86ISelLowering.cpp:1.402 --- llvm/lib/Target/X86/X86ISelLowering.cpp:1.401 Wed May 16 22:29:42 2007 +++ llvm/lib/Target/X86/X86ISelLowering.cpp Thu May 17 02:50:14 2007 @@ -1614,13 +1614,6 @@ static bool isSHUFPMask(const SDOperand *Elems, unsigned NumElems) { if (NumElems != 2 && NumElems != 4) return false; - // Ensure this is not an mmx shuffle. - if (NumElems == 4 && Elems[0].getValueType() == MVT::i16) - return false; - if (NumElems == 2 && Elems[0].getValueType() == MVT::i32) - return false; - - unsigned Half = NumElems / 2; for (unsigned i = 0; i < Half; ++i) if (!isUndefOrInRange(Elems[i], 0, NumElems)) @@ -2719,9 +2712,7 @@ } } - if (NumElems == 4 && - // Don't do this for MMX. - MVT::getSizeInBits(VT) != 64) { + if (NumElems == 4) { MVT::ValueType MaskVT = PermMask.getValueType(); MVT::ValueType MaskEVT = MVT::getVectorBaseType(MaskVT); SmallVector, 8> Locs; From asl at math.spbu.ru Thu May 17 04:53:35 2007 From: asl at math.spbu.ru (Anton Korobeynikov) Date: Thu, 17 May 2007 13:53:35 +0400 Subject: [llvm-commits] PCH fix Message-ID: <1179395615.20870.56.camel@asl.dorms.spbu.ru> Hello, Everyone. Attached patch fixes PCHs for both TOT and 2.0 release. There were 2 problems: 1. flush() method of oFILEstream doesn't actually flush the file. This can lead to incorrect offsets calculations in the PCH handling code and junk output. This problem seems to be highly platform-dependent: it fails for linux & mingw32, but passes for darwin. There are two possible solutions: either use stdio_sync_buf for oFILEstream or flush the asm_out_file by hands. I preferred second. 2. This problem is not platform specific. We have the following sequence of calls during PCH's read: 1) llvm_start_asm_file() 2) llvm_read_pch() 3) llvm_end_asm_file() In llvm_start_asm_file() routine 2 FunctionPassManagers (PerFunctionPasses and CodeGenPasses) are created having TheModule used during construction, later in the llvm_read_pch() TheModule is freed and recreated, but ... PassManagers still holds pointer to old module. This causes uninitialised memory reads (and segfaults later) during doFinalization() calls in the llvm_end_asm_file(). The solutions was: factor out passmanagers' creation code to separate routine and call it in llvm_read_pch() in order to recreate passes. I think, this patch should be propagated to 2.0 release branch, or, otherwise PCHs should be marked as "broken in 2.0". Patch tested with Qt compilation on x86/linux. -------------- next part -------------- A non-text attachment was scrubbed... Name: pch_fix.diff Type: text/x-patch Size: 2454 bytes Desc: not available Url : http://lists.cs.uiuc.edu/pipermail/llvm-commits/attachments/20070517/975bde4c/attachment.bin From dpatel at apple.com Thu May 17 09:35:28 2007 From: dpatel at apple.com (Devang Patel) Date: Thu, 17 May 2007 07:35:28 -0700 Subject: [llvm-commits] PCH fix In-Reply-To: <1179395615.20870.56.camel@asl.dorms.spbu.ru> References: <1179395615.20870.56.camel@asl.dorms.spbu.ru> Message-ID: Anton, This patch is good. I installed this patch in mainline sources. I agree, this should also go in 2.0 release branch. Thanks Anton for taking care of this bug. - Devang On May 17, 2007, at 2:53 AM, Anton Korobeynikov wrote: > Hello, Everyone. > > Attached patch fixes PCHs for both TOT and 2.0 release. > > There were 2 problems: > > 1. flush() method of oFILEstream doesn't actually flush the file. This > can lead to incorrect offsets calculations in the PCH handling code > and > junk output. This problem seems to be highly platform-dependent: it > fails for linux & mingw32, but passes for darwin. > > There are two possible solutions: either use stdio_sync_buf for > oFILEstream or flush the asm_out_file by hands. I preferred second. > > 2. This problem is not platform specific. We have the following > sequence > of calls during PCH's read: > > 1) llvm_start_asm_file() > 2) llvm_read_pch() > 3) llvm_end_asm_file() > > In llvm_start_asm_file() routine 2 FunctionPassManagers > (PerFunctionPasses and CodeGenPasses) are created having TheModule > used > during construction, later in the llvm_read_pch() TheModule is > freed and > recreated, but ... PassManagers still holds pointer to old module. > This > causes uninitialised memory reads (and segfaults later) during > doFinalization() calls in the llvm_end_asm_file(). > > The solutions was: factor out passmanagers' creation code to separate > routine and call it in llvm_read_pch() in order to recreate passes. > > I think, this patch should be propagated to 2.0 release branch, or, > otherwise PCHs should be marked as "broken in 2.0". > > Patch tested with Qt compilation on x86/linux. > From dpatel at apple.com Thu May 17 09:35:47 2007 From: dpatel at apple.com (dpatel at apple.com) Date: Thu, 17 May 2007 07:35:47 -0700 (PDT) Subject: [llvm-commits] [127364] Fix PCH. Message-ID: <20070517143547.2657A3275623@src> Revision: 127364 Author: dpatel Date: 2007-05-17 07:35:46 -0700 (Thu, 17 May 2007) Log Message: ----------- Fix PCH. Patch by Anton Korobeynikov. Modified Paths: -------------- apple-local/branches/llvm/gcc/llvm-backend.cpp Modified: apple-local/branches/llvm/gcc/llvm-backend.cpp =================================================================== --- apple-local/branches/llvm/gcc/llvm-backend.cpp 2007-05-17 09:01:27 UTC (rev 127363) +++ apple-local/branches/llvm/gcc/llvm-backend.cpp 2007-05-17 14:35:46 UTC (rev 127364) @@ -88,6 +88,8 @@ static PassManager *PerModulePasses = 0; static FunctionPassManager *CodeGenPasses = 0; +static void createOptimizationPasses(); + void llvm_initialize_backend(void) { // Initialize LLVM options. std::vector Args; @@ -209,13 +211,21 @@ std::string ErrMsg; TheModule = ParseBitcodeFile(MB, &ErrMsg); delete MB; - + if (!TheModule) { cerr << "Error reading bytecodes from PCH file\n"; cerr << ErrMsg << "\n"; exit(1); } + if (PerFunctionPasses || PerModulePasses || CodeGenPasses) { + delete PerFunctionPasses; + delete PerModulePasses; + delete CodeGenPasses; + + createOptimizationPasses(); + } + // Read LLVM Types string table readLLVMTypesStringTable(); readLLVMValues(); @@ -225,7 +235,6 @@ // Initialize PCH writing. void llvm_pch_write_init(void) { - timevar_push(TV_LLVM_INIT); AsmOutStream = new oFILEstream(asm_out_file); AsmOutFile = new OStream(*AsmOutStream); @@ -246,14 +255,7 @@ timevar_pop(TV_LLVM_INIT); } -// llvm_asm_file_start - Start the .s file. -void llvm_asm_file_start(void) { - timevar_push(TV_LLVM_INIT); - AsmOutStream = new oFILEstream(asm_out_file); - AsmOutFile = new OStream(*AsmOutStream); - - flag_llvm_pch_read = 0; - +static void createOptimizationPasses() { // Create and set up the per-function pass manager. // FIXME: Move the code generator to be function-at-a-time. PerFunctionPasses = @@ -411,7 +413,19 @@ delete PerModulePasses; PerModulePasses = 0; } +} + + +// llvm_asm_file_start - Start the .s file. +void llvm_asm_file_start(void) { + timevar_push(TV_LLVM_INIT); + AsmOutStream = new oFILEstream(asm_out_file); + AsmOutFile = new OStream(*AsmOutStream); + flag_llvm_pch_read = 0; + + createOptimizationPasses(); + timevar_pop(TV_LLVM_INIT); } @@ -480,8 +494,9 @@ CodeGenPasses->run(*I); CodeGenPasses->doFinalization(); } - + AsmOutStream->flush(); + fflush(asm_out_file); delete AsmOutStream; AsmOutStream = 0; delete AsmOutFile; From sabre at nondot.org Thu May 17 12:13:36 2007 From: sabre at nondot.org (Chris Lattner) Date: Thu, 17 May 2007 12:13:36 -0500 Subject: [llvm-commits] CVS: llvm/lib/Target/X86/X86ISelLowering.cpp Message-ID: <200705171713.l4HHDaJd024055@zion.cs.uiuc.edu> Changes in directory llvm/lib/Target/X86: X86ISelLowering.cpp updated: 1.402 -> 1.403 --- Log message: This is the correct fix for PR1427: http://llvm.org/PR1427 . This fixes mmx-shuffle.ll and doesn't cause other regressions. --- Diffs of the changes: (+5 -2) X86ISelLowering.cpp | 7 +++++-- 1 files changed, 5 insertions(+), 2 deletions(-) Index: llvm/lib/Target/X86/X86ISelLowering.cpp diff -u llvm/lib/Target/X86/X86ISelLowering.cpp:1.402 llvm/lib/Target/X86/X86ISelLowering.cpp:1.403 --- llvm/lib/Target/X86/X86ISelLowering.cpp:1.402 Thu May 17 02:50:14 2007 +++ llvm/lib/Target/X86/X86ISelLowering.cpp Thu May 17 12:13:13 2007 @@ -2675,7 +2675,8 @@ return Op; } - if (X86::isSHUFPMask(PermMask.Val)) + if (X86::isSHUFPMask(PermMask.Val) && + MVT::getSizeInBits(VT) != 64) // Don't do this for MMX. return Op; // Handle v8i16 shuffle high / low shuffle node pair. @@ -2712,7 +2713,9 @@ } } - if (NumElems == 4) { + if (NumElems == 4 && + // Don't do this for MMX. + MVT::getSizeInBits(VT) != 64) { MVT::ValueType MaskVT = PermMask.getValueType(); MVT::ValueType MaskEVT = MVT::getVectorBaseType(MaskVT); SmallVector, 8> Locs; From tonic at nondot.org Thu May 17 13:08:48 2007 From: tonic at nondot.org (Tanya M. Lattner) Date: Thu, 17 May 2007 11:08:48 -0700 (PDT) Subject: [llvm-commits] PCH fix In-Reply-To: References: <1179395615.20870.56.camel@asl.dorms.spbu.ru> Message-ID: > This patch is good. I installed this patch in mainline sources. I agree, this > should also go in 2.0 release branch. Devang - Can you please apply this patch to the release-2.0 branch? Also, it would be great if we could push this to the mirror ASAP, so I can begin making new tarballs tonight. I think Bill might be able to do that if you ask. Thanks!! -Tanya > > Thanks Anton for taking care of this bug. > - > Devang > > On May 17, 2007, at 2:53 AM, Anton Korobeynikov wrote: > >> Hello, Everyone. >> >> Attached patch fixes PCHs for both TOT and 2.0 release. >> >> There were 2 problems: >> >> 1. flush() method of oFILEstream doesn't actually flush the file. This >> can lead to incorrect offsets calculations in the PCH handling code and >> junk output. This problem seems to be highly platform-dependent: it >> fails for linux & mingw32, but passes for darwin. >> >> There are two possible solutions: either use stdio_sync_buf for >> oFILEstream or flush the asm_out_file by hands. I preferred second. >> >> 2. This problem is not platform specific. We have the following sequence >> of calls during PCH's read: >> >> 1) llvm_start_asm_file() >> 2) llvm_read_pch() >> 3) llvm_end_asm_file() >> >> In llvm_start_asm_file() routine 2 FunctionPassManagers >> (PerFunctionPasses and CodeGenPasses) are created having TheModule used >> during construction, later in the llvm_read_pch() TheModule is freed and >> recreated, but ... PassManagers still holds pointer to old module. This >> causes uninitialised memory reads (and segfaults later) during >> doFinalization() calls in the llvm_end_asm_file(). >> >> The solutions was: factor out passmanagers' creation code to separate >> routine and call it in llvm_read_pch() in order to recreate passes. >> >> I think, this patch should be propagated to 2.0 release branch, or, >> otherwise PCHs should be marked as "broken in 2.0". >> >> Patch tested with Qt compilation on x86/linux. >> > > From dpatel at apple.com Thu May 17 12:27:04 2007 From: dpatel at apple.com (Devang Patel) Date: Thu, 17 May 2007 10:27:04 -0700 Subject: [llvm-commits] PCH fix In-Reply-To: References: <1179395615.20870.56.camel@asl.dorms.spbu.ru> Message-ID: On May 17, 2007, at 11:08 AM, Tanya M. Lattner wrote: > >> This patch is good. I installed this patch in mainline sources. I >> agree, this should also go in 2.0 release branch. > > Devang - Can you please apply this patch to the release-2.0 branch? Done. > Also, it would be great if we could push this to the mirror ASAP, so > I can begin making new tarballs tonight. I think Bill might be able > to do that if you ask. I'll ask Bill. > Thanks!! np :) - Devang From reid at x10sys.com Thu May 17 12:30:17 2007 From: reid at x10sys.com (Reid Spencer) Date: Thu, 17 May 2007 12:30:17 -0500 Subject: [llvm-commits] CVS: llvm-test/SingleSource/UnitTests/Integer/constval.cpp constval.reference_output Message-ID: <200705171730.l4HHUHEq024460@zion.cs.uiuc.edu> Changes in directory llvm-test/SingleSource/UnitTests/Integer: constval.cpp updated: 1.2 -> 1.3 constval.reference_output updated: 1.2 -> 1.3 --- Log message: Update to include a test case with a signed value to ensure sign extension is working correctly. --- Diffs of the changes: (+7 -0) constval.cpp | 6 ++++++ constval.reference_output | 1 + 2 files changed, 7 insertions(+) Index: llvm-test/SingleSource/UnitTests/Integer/constval.cpp diff -u llvm-test/SingleSource/UnitTests/Integer/constval.cpp:1.2 llvm-test/SingleSource/UnitTests/Integer/constval.cpp:1.3 --- llvm-test/SingleSource/UnitTests/Integer/constval.cpp:1.2 Wed May 16 14:34:37 2007 +++ llvm-test/SingleSource/UnitTests/Integer/constval.cpp Thu May 17 12:29:58 2007 @@ -29,9 +29,15 @@ int69 a = bitsFromOctalString("01234567012345670123456", 69); printf( "\na = " ); printBits(a); + int68 b = bitsFromBinaryString("10101010101010101010101010101010101010101010101010101010101010101010", 68); printf( "\nb = " ); printBits(b); + + int169 c = bitsFromString("-1234567890123456789012345678901234567890", 169); + printf( "\nc = " ); + printBits(c); + printf("\n"); } Index: llvm-test/SingleSource/UnitTests/Integer/constval.reference_output diff -u llvm-test/SingleSource/UnitTests/Integer/constval.reference_output:1.2 llvm-test/SingleSource/UnitTests/Integer/constval.reference_output:1.3 --- llvm-test/SingleSource/UnitTests/Integer/constval.reference_output:1.2 Wed May 16 14:34:37 2007 +++ llvm-test/SingleSource/UnitTests/Integer/constval.reference_output Thu May 17 12:29:58 2007 @@ -3,4 +3,5 @@ z = 0000111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 a = 000001010011100101110111000001010011100101110111000001010011100101110 b = 10101010101010101010101010101010101010101010101010101010101010101010 +c = 1111111111111111111111111111111111111110001011111001101101101111110001010001111110010010000001100010001110101001101000011101000000110100100110001110000001111010100101110 exit 0 From zhousheng00 at gmail.com Thu May 17 13:03:00 2007 From: zhousheng00 at gmail.com (Zhou Sheng) Date: Thu, 17 May 2007 13:03:00 -0500 Subject: [llvm-commits] CVS: llvm-test/SingleSource/UnitTests/Integer/bits.h Message-ID: <200705171803.l4HI30Zb025546@zion.cs.uiuc.edu> Changes in directory llvm-test/SingleSource/UnitTests/Integer: bits.h updated: 1.9 -> 1.10 --- Log message: Add some new int types. --- Diffs of the changes: (+10 -1) bits.h | 11 ++++++++++- 1 files changed, 10 insertions(+), 1 deletion(-) Index: llvm-test/SingleSource/UnitTests/Integer/bits.h diff -u llvm-test/SingleSource/UnitTests/Integer/bits.h:1.9 llvm-test/SingleSource/UnitTests/Integer/bits.h:1.10 --- llvm-test/SingleSource/UnitTests/Integer/bits.h:1.9 Wed May 16 23:34:32 2007 +++ llvm-test/SingleSource/UnitTests/Integer/bits.h Thu May 17 13:02:42 2007 @@ -44,8 +44,12 @@ typedef unsigned int __attribute__((bitwidth(250))) uint250; typedef unsigned int __attribute__((bitwidth(256))) uint256; typedef unsigned int __attribute__((bitwidth(500))) uint500; +typedef unsigned int __attribute__((bitwidth(512))) uint512; +typedef unsigned int __attribute__((bitwidth(768))) uint768; +typedef unsigned int __attribute__((bitwidth(1000))) uint1000; typedef unsigned int __attribute__((bitwidth(1024))) uint1024; +typedef int __attribute__((bitwidth(3))) int3; typedef int __attribute__((bitwidth(9))) int9; typedef int __attribute__((bitwidth(10))) int10; typedef int __attribute__((bitwidth(21))) int21; @@ -56,10 +60,15 @@ typedef int __attribute__((bitwidth(63))) int63; typedef int __attribute__((bitwidth(68))) int68; typedef int __attribute__((bitwidth(69))) int69; +typedef int __attribute__((bitwidth(128))) int128; typedef int __attribute__((bitwidth(169))) int169; typedef int __attribute__((bitwidth(250))) int250; typedef int __attribute__((bitwidth(256))) int256; -typedef int __attribute__((bitwidth(256))) int500; +typedef int __attribute__((bitwidth(500))) int500; +typedef int __attribute__((bitwidth(512))) int512; +typedef int __attribute__((bitwidth(768))) int768; +typedef int __attribute__((bitwidth(1000))) int1000; +typedef int __attribute__((bitwidth(1024))) int1024; #define bitwidthof(TORV) (__bitwidthof__(typeof(TORV))) From zhousheng00 at gmail.com Thu May 17 13:05:00 2007 From: zhousheng00 at gmail.com (Zhou Sheng) Date: Thu, 17 May 2007 13:05:00 -0500 Subject: [llvm-commits] CVS: llvm-test/SingleSource/UnitTests/Integer/big_part_set.c big_part_set.reference_output Message-ID: <200705171805.l4HI508s025592@zion.cs.uiuc.edu> Changes in directory llvm-test/SingleSource/UnitTests/Integer: big_part_set.c added (r1.1) big_part_set.reference_output added (r1.1) --- Log message: Add a new test case for part_set of big integer. Add its reference output. --- Diffs of the changes: (+1034 -0) big_part_set.c | 33 + big_part_set.reference_output | 1001 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 1034 insertions(+) Index: llvm-test/SingleSource/UnitTests/Integer/big_part_set.c diff -c /dev/null llvm-test/SingleSource/UnitTests/Integer/big_part_set.c:1.1 *** /dev/null Thu May 17 13:04:51 2007 --- llvm-test/SingleSource/UnitTests/Integer/big_part_set.c Thu May 17 13:04:41 2007 *************** *** 0 **** --- 1,33 ---- + //===--- big_part_set.c --- Test The part_set builtin ---------------------===// + // + // This file was developed by Sheng Zhou and is distributed under the + // University of Illinois Open Source License. See LICENSE.TXT for details. + // + //===----------------------------------------------------------------------===// + // + // This test case tests the __builtin_part_set builtin function llvm-gcc. + // + //===----------------------------------------------------------------------===// + + #include + #include "bits.h" + + typedef uint1000 BitType; + BitType X = 0; + + int main(int argc, char** argv) + { + int i; + + printf("0b0"); + printBits(X); + printf("\n"); + for (i = bitwidthof(BitType); i > 0; --i) { + X = part_set(X, 1, i-1, bitwidthof(BitType)-1); + printf("0b0"); + printBits(X); + printf("\n"); + } + + return 0; + } Index: llvm-test/SingleSource/UnitTests/Integer/big_part_set.reference_output diff -c /dev/null llvm-test/SingleSource/UnitTests/Integer/big_part_set.reference_output:1.1 *** /dev/null Thu May 17 13:05:00 2007 --- llvm-test/SingleSource/UnitTests/Integer/big_part_set.reference_output Thu May 17 13:04:41 2007 *************** *** 0 **** --- 1,1001 ---- + 0b0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111000! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111! 0000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111! 1000000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111! 1100000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111! 1110000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111! 1111000000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111! 1111100000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111! 1111110000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111! 1111111000000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111! 1111111100000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111! 1111111110000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111! 1111111111000000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111! 1111111111100000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111! 1111111111110000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111! 1111111111111000 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111! 1111111111111100 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111! 1111111111111110 + 0b0111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111! 1111111111111111 From reid at x10sys.com Thu May 17 13:06:37 2007 From: reid at x10sys.com (Reid Spencer) Date: Thu, 17 May 2007 13:06:37 -0500 Subject: [llvm-commits] CVS: llvm/autoconf/configure.ac Message-ID: <200705171806.l4HI6bx3025631@zion.cs.uiuc.edu> Changes in directory llvm/autoconf: configure.ac updated: 1.270 -> 1.271 --- Log message: Make Perl a required dependency and cause configure script to fail if it is not found. --- Diffs of the changes: (+1 -0) configure.ac | 1 + 1 files changed, 1 insertion(+) Index: llvm/autoconf/configure.ac diff -u llvm/autoconf/configure.ac:1.270 llvm/autoconf/configure.ac:1.271 --- llvm/autoconf/configure.ac:1.270 Mon May 7 23:22:59 2007 +++ llvm/autoconf/configure.ac Thu May 17 13:06:19 2007 @@ -495,6 +495,7 @@ AC_SUBST(PERL) if test x"$PERL" = xnone; then AC_SUBST(HAVE_PERL,0) + AC_MSG_ERROR([perl is required but was not found, please install it]) else AC_SUBST(HAVE_PERL,1) fi From reid at x10sys.com Thu May 17 13:07:43 2007 From: reid at x10sys.com (Reid Spencer) Date: Thu, 17 May 2007 13:07:43 -0500 Subject: [llvm-commits] [release_20] CVS: llvm/autoconf/configure.ac Message-ID: <200705171807.l4HI7hEE025671@zion.cs.uiuc.edu> Changes in directory llvm/autoconf: configure.ac updated: 1.269.2.1 -> 1.269.2.2 --- Log message: Make Perl required - merge from mainline. --- Diffs of the changes: (+1 -0) configure.ac | 1 + 1 files changed, 1 insertion(+) Index: llvm/autoconf/configure.ac diff -u llvm/autoconf/configure.ac:1.269.2.1 llvm/autoconf/configure.ac:1.269.2.2 --- llvm/autoconf/configure.ac:1.269.2.1 Mon May 7 23:45:12 2007 +++ llvm/autoconf/configure.ac Thu May 17 13:07:24 2007 @@ -495,6 +495,7 @@ AC_SUBST(PERL) if test x"$PERL" = xnone; then AC_SUBST(HAVE_PERL,0) + AC_MSG_ERROR([perl is required but was not found, please install it]) else AC_SUBST(HAVE_PERL,1) fi From reid at x10sys.com Thu May 17 13:11:23 2007 From: reid at x10sys.com (Reid Spencer) Date: Thu, 17 May 2007 13:11:23 -0500 Subject: [llvm-commits] CVS: llvm/configure Message-ID: <200705171811.l4HIBNJs025753@zion.cs.uiuc.edu> Changes in directory llvm: configure updated: 1.276 -> 1.277 --- Log message: Regenerate. --- Diffs of the changes: (+27 -24) configure | 51 +++++++++++++++++++++++++++------------------------ 1 files changed, 27 insertions(+), 24 deletions(-) Index: llvm/configure diff -u llvm/configure:1.276 llvm/configure:1.277 --- llvm/configure:1.276 Mon May 7 23:32:07 2007 +++ llvm/configure Thu May 17 13:11:03 2007 @@ -7374,6 +7374,9 @@ if test x"$PERL" = xnone; then HAVE_PERL=0 + { { echo "$as_me:$LINENO: error: perl is required but was not found, please install it" >&5 +echo "$as_me: error: perl is required but was not found, please install it" >&2;} + { (exit 1); exit 1; }; } else HAVE_PERL=1 @@ -10340,7 +10343,7 @@ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext < conftest.$ac_ext + echo '#line 12490 "configure"' > conftest.$ac_ext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? @@ -14202,11 +14205,11 @@ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:14205: $lt_compile\"" >&5) + (eval echo "\"\$as_me:14208: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 - echo "$as_me:14209: \$? = $ac_status" >&5 + echo "$as_me:14212: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. @@ -14470,11 +14473,11 @@ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:14473: $lt_compile\"" >&5) + (eval echo "\"\$as_me:14476: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 - echo "$as_me:14477: \$? = $ac_status" >&5 + echo "$as_me:14480: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. @@ -14574,11 +14577,11 @@ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:14577: $lt_compile\"" >&5) + (eval echo "\"\$as_me:14580: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 - echo "$as_me:14581: \$? = $ac_status" >&5 + echo "$as_me:14584: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized @@ -17026,7 +17029,7 @@ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext < conftest.$ac_ext <&5) + (eval echo "\"\$as_me:19500: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 - echo "$as_me:19501: \$? = $ac_status" >&5 + echo "$as_me:19504: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. @@ -19598,11 +19601,11 @@ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:19601: $lt_compile\"" >&5) + (eval echo "\"\$as_me:19604: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 - echo "$as_me:19605: \$? = $ac_status" >&5 + echo "$as_me:19608: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized @@ -21168,11 +21171,11 @@ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:21171: $lt_compile\"" >&5) + (eval echo "\"\$as_me:21174: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 - echo "$as_me:21175: \$? = $ac_status" >&5 + echo "$as_me:21178: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. @@ -21272,11 +21275,11 @@ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:21275: $lt_compile\"" >&5) + (eval echo "\"\$as_me:21278: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 - echo "$as_me:21279: \$? = $ac_status" >&5 + echo "$as_me:21282: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized @@ -23507,11 +23510,11 @@ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:23510: $lt_compile\"" >&5) + (eval echo "\"\$as_me:23513: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 - echo "$as_me:23514: \$? = $ac_status" >&5 + echo "$as_me:23517: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. @@ -23775,11 +23778,11 @@ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:23778: $lt_compile\"" >&5) + (eval echo "\"\$as_me:23781: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 - echo "$as_me:23782: \$? = $ac_status" >&5 + echo "$as_me:23785: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. @@ -23879,11 +23882,11 @@ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:23882: $lt_compile\"" >&5) + (eval echo "\"\$as_me:23885: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 - echo "$as_me:23886: \$? = $ac_status" >&5 + echo "$as_me:23889: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized From reid at x10sys.com Thu May 17 13:12:48 2007 From: reid at x10sys.com (Reid Spencer) Date: Thu, 17 May 2007 13:12:48 -0500 Subject: [llvm-commits] [release_20] CVS: llvm/configure Message-ID: <200705171812.l4HICmBg025793@zion.cs.uiuc.edu> Changes in directory llvm: configure updated: 1.275.2.1 -> 1.275.2.2 --- Log message: Merge from mainline to require Perl for build system. --- Diffs of the changes: (+27 -24) configure | 51 +++++++++++++++++++++++++++------------------------ 1 files changed, 27 insertions(+), 24 deletions(-) Index: llvm/configure diff -u llvm/configure:1.275.2.1 llvm/configure:1.275.2.2 --- llvm/configure:1.275.2.1 Mon May 7 23:45:26 2007 +++ llvm/configure Thu May 17 13:12:30 2007 @@ -7374,6 +7374,9 @@ if test x"$PERL" = xnone; then HAVE_PERL=0 + { { echo "$as_me:$LINENO: error: perl is required but was not found, please install it" >&5 +echo "$as_me: error: perl is required but was not found, please install it" >&2;} + { (exit 1); exit 1; }; } else HAVE_PERL=1 @@ -10340,7 +10343,7 @@ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext < conftest.$ac_ext + echo '#line 12490 "configure"' > conftest.$ac_ext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? @@ -14202,11 +14205,11 @@ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:14205: $lt_compile\"" >&5) + (eval echo "\"\$as_me:14208: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 - echo "$as_me:14209: \$? = $ac_status" >&5 + echo "$as_me:14212: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. @@ -14470,11 +14473,11 @@ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:14473: $lt_compile\"" >&5) + (eval echo "\"\$as_me:14476: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 - echo "$as_me:14477: \$? = $ac_status" >&5 + echo "$as_me:14480: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. @@ -14574,11 +14577,11 @@ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:14577: $lt_compile\"" >&5) + (eval echo "\"\$as_me:14580: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 - echo "$as_me:14581: \$? = $ac_status" >&5 + echo "$as_me:14584: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized @@ -17026,7 +17029,7 @@ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext < conftest.$ac_ext <&5) + (eval echo "\"\$as_me:19500: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 - echo "$as_me:19501: \$? = $ac_status" >&5 + echo "$as_me:19504: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. @@ -19598,11 +19601,11 @@ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:19601: $lt_compile\"" >&5) + (eval echo "\"\$as_me:19604: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 - echo "$as_me:19605: \$? = $ac_status" >&5 + echo "$as_me:19608: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized @@ -21168,11 +21171,11 @@ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:21171: $lt_compile\"" >&5) + (eval echo "\"\$as_me:21174: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 - echo "$as_me:21175: \$? = $ac_status" >&5 + echo "$as_me:21178: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. @@ -21272,11 +21275,11 @@ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:21275: $lt_compile\"" >&5) + (eval echo "\"\$as_me:21278: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 - echo "$as_me:21279: \$? = $ac_status" >&5 + echo "$as_me:21282: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized @@ -23507,11 +23510,11 @@ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:23510: $lt_compile\"" >&5) + (eval echo "\"\$as_me:23513: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 - echo "$as_me:23514: \$? = $ac_status" >&5 + echo "$as_me:23517: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. @@ -23775,11 +23778,11 @@ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:23778: $lt_compile\"" >&5) + (eval echo "\"\$as_me:23781: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 - echo "$as_me:23782: \$? = $ac_status" >&5 + echo "$as_me:23785: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. @@ -23879,11 +23882,11 @@ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:23882: $lt_compile\"" >&5) + (eval echo "\"\$as_me:23885: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 - echo "$as_me:23886: \$? = $ac_status" >&5 + echo "$as_me:23889: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized From sabre at nondot.org Thu May 17 13:16:00 2007 From: sabre at nondot.org (Chris Lattner) Date: Thu, 17 May 2007 13:16:00 -0500 Subject: [llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp Message-ID: <200705171816.l4HIG0bs025902@zion.cs.uiuc.edu> Changes in directory llvm/lib/CodeGen/SelectionDAG: LegalizeDAG.cpp updated: 1.492 -> 1.493 --- Log message: add expand support for ADDC/SUBC/ADDE/SUBE so we can codegen 128-bit add/sub on 32-bit (or less) targets --- Diffs of the changes: (+42 -0) LegalizeDAG.cpp | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 42 insertions(+) Index: llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp diff -u llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.492 llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.493 --- llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp:1.492 Sat May 5 14:39:05 2007 +++ llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp Thu May 17 13:15:41 2007 @@ -5222,6 +5222,48 @@ } break; } + + case ISD::ADDC: + case ISD::SUBC: { + // Expand the subcomponents. + SDOperand LHSL, LHSH, RHSL, RHSH; + ExpandOp(Node->getOperand(0), LHSL, LHSH); + ExpandOp(Node->getOperand(1), RHSL, RHSH); + SDVTList VTList = DAG.getVTList(LHSL.getValueType(), MVT::Flag); + SDOperand LoOps[2] = { LHSL, RHSL }; + SDOperand HiOps[3] = { LHSH, RHSH }; + + if (Node->getOpcode() == ISD::ADDC) { + Lo = DAG.getNode(ISD::ADDC, VTList, LoOps, 2); + HiOps[2] = Lo.getValue(1); + Hi = DAG.getNode(ISD::ADDE, VTList, HiOps, 3); + } else { + Lo = DAG.getNode(ISD::SUBC, VTList, LoOps, 2); + HiOps[2] = Lo.getValue(1); + Hi = DAG.getNode(ISD::SUBE, VTList, HiOps, 3); + } + // Remember that we legalized the flag. + AddLegalizedOperand(Op.getValue(1), LegalizeOp(Hi.getValue(1))); + break; + } + case ISD::ADDE: + case ISD::SUBE: { + // Expand the subcomponents. + SDOperand LHSL, LHSH, RHSL, RHSH; + ExpandOp(Node->getOperand(0), LHSL, LHSH); + ExpandOp(Node->getOperand(1), RHSL, RHSH); + SDVTList VTList = DAG.getVTList(LHSL.getValueType(), MVT::Flag); + SDOperand LoOps[3] = { LHSL, RHSL, Node->getOperand(2) }; + SDOperand HiOps[3] = { LHSH, RHSH }; + + Lo = DAG.getNode(Node->getOpcode(), VTList, LoOps, 3); + HiOps[2] = Lo.getValue(1); + Hi = DAG.getNode(Node->getOpcode(), VTList, HiOps, 3); + + // Remember that we legalized the flag. + AddLegalizedOperand(Op.getValue(1), LegalizeOp(Hi.getValue(1))); + break; + } case ISD::MUL: { // If the target wants to custom expand this, let them. if (TLI.getOperationAction(ISD::MUL, VT) == TargetLowering::Custom) { From sabre at nondot.org Thu May 17 13:19:41 2007 From: sabre at nondot.org (Chris Lattner) Date: Thu, 17 May 2007 13:19:41 -0500 Subject: [llvm-commits] CVS: llvm/lib/CodeGen/SelectionDAG/TargetLowering.cpp Message-ID: <200705171819.l4HIJfO0025987@zion.cs.uiuc.edu> Changes in directory llvm/lib/CodeGen/SelectionDAG: TargetLowering.cpp updated: 1.114 -> 1.115 --- Log message: disable MaskedValueIsZero, ComputeMaskedBits, and SimplifyDemandedBits for i128 integers. The 64-bit masks are not wide enough to represent the results. These should be converted to APInt someday. --- Diffs of the changes: (+13 -0) TargetLowering.cpp | 13 +++++++++++++ 1 files changed, 13 insertions(+) Index: llvm/lib/CodeGen/SelectionDAG/TargetLowering.cpp diff -u llvm/lib/CodeGen/SelectionDAG/TargetLowering.cpp:1.114 llvm/lib/CodeGen/SelectionDAG/TargetLowering.cpp:1.115 --- llvm/lib/CodeGen/SelectionDAG/TargetLowering.cpp:1.114 Wed May 16 18:45:53 2007 +++ llvm/lib/CodeGen/SelectionDAG/TargetLowering.cpp Thu May 17 13:19:23 2007 @@ -365,6 +365,11 @@ TargetLoweringOpt &TLO, unsigned Depth) const { KnownZero = KnownOne = 0; // Don't know anything. + + // The masks are not wide enough to represent this type! Should use APInt. + if (Op.getValueType() == MVT::i128) + return false; + // Other users may use these bits. if (!Op.Val->hasOneUse()) { if (Depth != 0) { @@ -874,6 +879,10 @@ /// for bits that V cannot have. bool TargetLowering::MaskedValueIsZero(SDOperand Op, uint64_t Mask, unsigned Depth) const { + // The masks are not wide enough to represent this type! Should use APInt. + if (Op.getValueType() == MVT::i128) + return false; + uint64_t KnownZero, KnownOne; ComputeMaskedBits(Op, Mask, KnownZero, KnownOne, Depth); assert((KnownZero & KnownOne) == 0 && "Bits known to be one AND zero?"); @@ -891,6 +900,10 @@ if (Depth == 6 || Mask == 0) return; // Limit search depth. + // The masks are not wide enough to represent this type! Should use APInt. + if (Op.getValueType() == MVT::i128) + return; + uint64_t KnownZero2, KnownOne2; switch (Op.getOpcode()) { From sabre at nondot.org Thu May 17 13:22:55 2007 From: sabre at nondot.org (Chris Lattner) Date: Thu, 17 May 2007 13:22:55 -0500 Subject: [llvm-commits] CVS: llvm/test/CodeGen/Generic/i128-addsub.ll Message-ID: <200705171822.l4HIMthu026107@zion.cs.uiuc.edu> Changes in directory llvm/test/CodeGen/Generic: i128-addsub.ll added (r1.1) --- Log message: add testcase for 128-bit add/sub --- Diffs of the changes: (+39 -0) i128-addsub.ll | 39 +++++++++++++++++++++++++++++++++++++++ 1 files changed, 39 insertions(+) Index: llvm/test/CodeGen/Generic/i128-addsub.ll diff -c /dev/null llvm/test/CodeGen/Generic/i128-addsub.ll:1.1 *** /dev/null Thu May 17 13:22:47 2007 --- llvm/test/CodeGen/Generic/i128-addsub.ll Thu May 17 13:22:37 2007 *************** *** 0 **** --- 1,39 ---- + ; RUN: llvm-as < %s | llc + + define void @test_add(i64 %AL, i64 %AH, i64 %BL, i64 %BH, i64* %RL, i64* %RH) { + entry: + %tmp1 = zext i64 %AL to i128 ; [#uses=1] + %tmp23 = zext i64 %AH to i128 ; [#uses=1] + %tmp4 = shl i128 %tmp23, 64 ; [#uses=1] + %tmp5 = or i128 %tmp4, %tmp1 ; [#uses=1] + %tmp67 = zext i64 %BL to i128 ; [#uses=1] + %tmp89 = zext i64 %BH to i128 ; [#uses=1] + %tmp11 = shl i128 %tmp89, 64 ; [#uses=1] + %tmp12 = or i128 %tmp11, %tmp67 ; [#uses=1] + %tmp15 = add i128 %tmp12, %tmp5 ; [#uses=2] + %tmp1617 = trunc i128 %tmp15 to i64 ; [#uses=1] + store i64 %tmp1617, i64* %RL + %tmp21 = lshr i128 %tmp15, 64 ; [#uses=1] + %tmp2122 = trunc i128 %tmp21 to i64 ; [#uses=1] + store i64 %tmp2122, i64* %RH + ret void + } + + define void @test_sub(i64 %AL, i64 %AH, i64 %BL, i64 %BH, i64* %RL, i64* %RH) { + entry: + %tmp1 = zext i64 %AL to i128 ; [#uses=1] + %tmp23 = zext i64 %AH to i128 ; [#uses=1] + %tmp4 = shl i128 %tmp23, 64 ; [#uses=1] + %tmp5 = or i128 %tmp4, %tmp1 ; [#uses=1] + %tmp67 = zext i64 %BL to i128 ; [#uses=1] + %tmp89 = zext i64 %BH to i128 ; [#uses=1] + %tmp11 = shl i128 %tmp89, 64 ; [#uses=1] + %tmp12 = or i128 %tmp11, %tmp67 ; [#uses=1] + %tmp15 = sub i128 %tmp5, %tmp12 ; [#uses=2] + %tmp1617 = trunc i128 %tmp15 to i64 ; [#uses=1] + store i64 %tmp1617, i64* %RL + %tmp21 = lshr i128 %tmp15, 64 ; [#uses=1] + %tmp2122 = trunc i128 %tmp21 to i64 ; [#uses=1] + store i64 %tmp2122, i64* %RH + ret void + } From djg at cray.com Thu May 17 13:29:19 2007 From: djg at cray.com (Dan Gohman) Date: Thu, 17 May 2007 13:29:19 -0500 Subject: [llvm-commits] CVS: llvm/include/llvm/ADT/SmallVector.h Message-ID: <200705171829.l4HITJYU026257@zion.cs.uiuc.edu> Changes in directory llvm/include/llvm/ADT: SmallVector.h updated: 1.28 -> 1.29 --- Log message: Fix some sporadic segfaults that are triggered when SmallVector's heap storage lands near the end of the available address space. In the expression Begin+N > Capacity, the Begin+N was overflowing. Fix this by replacing it by with an expression that doesn't involve computation of an address beyond the end of allocated memory. --- Diffs of the changes: (+3 -3) SmallVector.h | 6 +++--- 1 files changed, 3 insertions(+), 3 deletions(-) Index: llvm/include/llvm/ADT/SmallVector.h diff -u llvm/include/llvm/ADT/SmallVector.h:1.28 llvm/include/llvm/ADT/SmallVector.h:1.29 --- llvm/include/llvm/ADT/SmallVector.h:1.28 Wed Apr 18 21:04:09 2007 +++ llvm/include/llvm/ADT/SmallVector.h Thu May 17 13:29:01 2007 @@ -147,7 +147,7 @@ destroy_range(Begin+N, End); End = Begin+N; } else if (N > size()) { - if (Begin+N > Capacity) + if (Capacity-Begin < N) grow(N); construct_range(End, Begin+N, T()); End = Begin+N; @@ -159,7 +159,7 @@ destroy_range(Begin+N, End); End = Begin+N; } else if (N > size()) { - if (Begin+N > Capacity) + if (Capacity-Begin < N) grow(N); construct_range(End, Begin+N, NV); End = Begin+N; @@ -189,7 +189,7 @@ void assign(unsigned NumElts, const T &Elt) { clear(); - if (Begin+NumElts > Capacity) + if (Capacity-Begin < NumElts) grow(NumElts); End = Begin+NumElts; construct_range(Begin, End, Elt); From evan.cheng at apple.com Thu May 17 13:44:55 2007 From: evan.cheng at apple.com (Evan Cheng) Date: Thu, 17 May 2007 13:44:55 -0500 Subject: [llvm-commits] CVS: llvm/lib/Target/X86/X86InstrSSE.td Message-ID: <200705171844.l4HIitr4026566@zion.cs.uiuc.edu> Changes in directory llvm/lib/Target/X86: X86InstrSSE.td updated: 1.182 -> 1.183 --- Log message: Added missing patterns for UNPCKH* and PUNPCKH*. --- Diffs of the changes: (+20 -0) X86InstrSSE.td | 20 ++++++++++++++++++++ 1 files changed, 20 insertions(+) Index: llvm/lib/Target/X86/X86InstrSSE.td diff -u llvm/lib/Target/X86/X86InstrSSE.td:1.182 llvm/lib/Target/X86/X86InstrSSE.td:1.183 --- llvm/lib/Target/X86/X86InstrSSE.td:1.182 Wed May 2 18:11:52 2007 +++ llvm/lib/Target/X86/X86InstrSSE.td Thu May 17 13:44:37 2007 @@ -170,6 +170,10 @@ return X86::isUNPCKL_v_undef_Mask(N); }]>; +def UNPCKH_v_undef_shuffle_mask : PatLeaf<(build_vector), [{ + return X86::isUNPCKH_v_undef_Mask(N); +}]>; + def PSHUFD_shuffle_mask : PatLeaf<(build_vector), [{ return X86::isPSHUFDMask(N); }], SHUFFLE_get_shuf_imm>; @@ -2266,6 +2270,22 @@ (PUNPCKLDQrr VR128:$src, VR128:$src)>, Requires<[HasSSE1]>; } +// vector_shuffle v1, , <2, 2, 3, 3, ...> +let AddedComplexity = 10 in { +def : Pat<(v4f32 (vector_shuffle VR128:$src, (undef), + UNPCKH_v_undef_shuffle_mask)), + (UNPCKHPSrr VR128:$src, VR128:$src)>, Requires<[HasSSE2]>; +def : Pat<(v16i8 (vector_shuffle VR128:$src, (undef), + UNPCKH_v_undef_shuffle_mask)), + (PUNPCKHBWrr VR128:$src, VR128:$src)>, Requires<[HasSSE2]>; +def : Pat<(v8i16 (vector_shuffle VR128:$src, (undef), + UNPCKH_v_undef_shuffle_mask)), + (PUNPCKHWDrr VR128:$src, VR128:$src)>, Requires<[HasSSE2]>; +def : Pat<(v4i32 (vector_shuffle VR128:$src, (undef), + UNPCKH_v_undef_shuffle_mask)), + (PUNPCKHDQrr VR128:$src, VR128:$src)>, Requires<[HasSSE1]>; +} + let AddedComplexity = 15 in { // vector_shuffle v1, v2 <0, 1, 4, 5> using MOVLHPS def : Pat<(v4i32 (vector_shuffle VR128:$src1, VR128:$src2, From evan.cheng at apple.com Thu May 17 13:46:09 2007 From: evan.cheng at apple.com (Evan Cheng) Date: Thu, 17 May 2007 13:46:09 -0500 Subject: [llvm-commits] CVS: llvm/lib/Target/X86/X86ISelLowering.cpp Message-ID: <200705171846.l4HIk9En026598@zion.cs.uiuc.edu> Changes in directory llvm/lib/Target/X86: X86ISelLowering.cpp updated: 1.403 -> 1.404 --- Log message: Fix a bogus check that prevented folding VECTOR_SHUFFLE to UNDEF; add an optimization to fold VECTOR_SHUFFLE to a zero vector. --- Diffs of the changes: (+61 -24) X86ISelLowering.cpp | 85 +++++++++++++++++++++++++++++++++++++--------------- 1 files changed, 61 insertions(+), 24 deletions(-) Index: llvm/lib/Target/X86/X86ISelLowering.cpp diff -u llvm/lib/Target/X86/X86ISelLowering.cpp:1.403 llvm/lib/Target/X86/X86ISelLowering.cpp:1.404 --- llvm/lib/Target/X86/X86ISelLowering.cpp:1.403 Thu May 17 12:13:13 2007 +++ llvm/lib/Target/X86/X86ISelLowering.cpp Thu May 17 13:45:50 2007 @@ -1630,7 +1630,7 @@ return ::isSHUFPMask(N->op_begin(), N->getNumOperands()); } -/// isCommutedSHUFP - Returns true if the shuffle mask is except +/// isCommutedSHUFP - Returns true if the shuffle mask is exactly /// the reverse of what x86 shuffles want. x86 shuffles requires the lower /// half elements to come from vector 1 (which would equal the dest.) and /// the upper half to come from vector 2. @@ -2188,7 +2188,7 @@ /// isUndefShuffle - Returns true if N is a VECTOR_SHUFFLE that can be resolved /// to an undef. static bool isUndefShuffle(SDNode *N) { - if (N->getOpcode() != ISD::BUILD_VECTOR) + if (N->getOpcode() != ISD::VECTOR_SHUFFLE) return false; SDOperand V1 = N->getOperand(0); @@ -2208,6 +2208,61 @@ return true; } +/// isZeroNode - Returns true if Elt is a constant zero or a floating point +/// constant +0.0. +static inline bool isZeroNode(SDOperand Elt) { + return ((isa(Elt) && + cast(Elt)->getValue() == 0) || + (isa(Elt) && + cast(Elt)->isExactlyValue(0.0))); +} + +/// isZeroShuffle - Returns true if N is a VECTOR_SHUFFLE that can be resolved +/// to an zero vector. +static bool isZeroShuffle(SDNode *N) { + if (N->getOpcode() != ISD::VECTOR_SHUFFLE) + return false; + + SDOperand V1 = N->getOperand(0); + SDOperand V2 = N->getOperand(1); + SDOperand Mask = N->getOperand(2); + unsigned NumElems = Mask.getNumOperands(); + for (unsigned i = 0; i != NumElems; ++i) { + SDOperand Arg = Mask.getOperand(i); + if (Arg.getOpcode() != ISD::UNDEF) { + unsigned Idx = cast(Arg)->getValue(); + if (Idx < NumElems) { + unsigned Opc = V1.Val->getOpcode(); + if (Opc == ISD::UNDEF) + continue; + if (Opc != ISD::BUILD_VECTOR || + !isZeroNode(V1.Val->getOperand(Idx))) + return false; + } else if (Idx >= NumElems) { + unsigned Opc = V2.Val->getOpcode(); + if (Opc == ISD::UNDEF) + continue; + if (Opc != ISD::BUILD_VECTOR || + !isZeroNode(V2.Val->getOperand(Idx - NumElems))) + return false; + } + } + } + return true; +} + +/// getZeroVector - Returns a vector of specified type with all zero elements. +/// +static SDOperand getZeroVector(MVT::ValueType VT, SelectionDAG &DAG) { + assert(MVT::isVector(VT) && "Expected a vector type"); + unsigned NumElems = getVectorNumElements(VT); + MVT::ValueType EVT = MVT::getVectorBaseType(VT); + bool isFP = MVT::isFloatingPoint(EVT); + SDOperand Zero = isFP ? DAG.getConstantFP(0.0, EVT) : DAG.getConstant(0, EVT); + SmallVector ZeroVec(NumElems, Zero); + return DAG.getNode(ISD::BUILD_VECTOR, VT, &ZeroVec[0], ZeroVec.size()); +} + /// NormalizeMask - V2 is a splat, modify the mask (if needed) so all elements /// that point to V2 points to its first element. static SDOperand NormalizeMask(SDOperand Mask, SelectionDAG &DAG) { @@ -2274,18 +2329,6 @@ return DAG.getNode(ISD::BUILD_VECTOR, MaskVT, &MaskVec[0], MaskVec.size()); } -/// getZeroVector - Returns a vector of specified type with all zero elements. -/// -static SDOperand getZeroVector(MVT::ValueType VT, SelectionDAG &DAG) { - assert(MVT::isVector(VT) && "Expected a vector type"); - unsigned NumElems = getVectorNumElements(VT); - MVT::ValueType EVT = MVT::getVectorBaseType(VT); - bool isFP = MVT::isFloatingPoint(EVT); - SDOperand Zero = isFP ? DAG.getConstantFP(0.0, EVT) : DAG.getConstant(0, EVT); - SmallVector ZeroVec(NumElems, Zero); - return DAG.getNode(ISD::BUILD_VECTOR, VT, &ZeroVec[0], ZeroVec.size()); -} - /// PromoteSplat - Promote a splat of v8i16 or v16i8 to v4i32. /// static SDOperand PromoteSplat(SDOperand Op, SelectionDAG &DAG) { @@ -2307,17 +2350,8 @@ return DAG.getNode(ISD::BIT_CONVERT, VT, Shuffle); } -/// isZeroNode - Returns true if Elt is a constant zero or a floating point -/// constant +0.0. -static inline bool isZeroNode(SDOperand Elt) { - return ((isa(Elt) && - cast(Elt)->getValue() == 0) || - (isa(Elt) && - cast(Elt)->isExactlyValue(0.0))); -} - /// getShuffleVectorZeroOrUndef - Return a vector_shuffle of the specified -/// vector and zero or undef vector. +/// vector of zero or undef vector. static SDOperand getShuffleVectorZeroOrUndef(SDOperand V2, MVT::ValueType VT, unsigned NumElems, unsigned Idx, bool isZero, SelectionDAG &DAG) { @@ -2584,6 +2618,9 @@ if (isUndefShuffle(Op.Val)) return DAG.getNode(ISD::UNDEF, VT); + if (isZeroShuffle(Op.Val)) + return getZeroVector(VT, DAG); + if (isSplatMask(PermMask.Val)) { if (NumElems <= 4) return Op; // Promote it to a v4i32 splat. From evan.cheng at apple.com Thu May 17 13:50:08 2007 From: evan.cheng at apple.com (Evan Cheng) Date: Thu, 17 May 2007 13:50:08 -0500 Subject: [llvm-commits] CVS: llvm/test/CodeGen/X86/2007-05-17-ShuffleISelBug.ll Message-ID: <200705171850.l4HIo8F8026725@zion.cs.uiuc.edu> Changes in directory llvm/test/CodeGen/X86: 2007-05-17-ShuffleISelBug.ll added (r1.1) --- Log message: New test case. --- Diffs of the changes: (+23 -0) 2007-05-17-ShuffleISelBug.ll | 23 +++++++++++++++++++++++ 1 files changed, 23 insertions(+) Index: llvm/test/CodeGen/X86/2007-05-17-ShuffleISelBug.ll diff -c /dev/null llvm/test/CodeGen/X86/2007-05-17-ShuffleISelBug.ll:1.1 *** /dev/null Thu May 17 13:50:00 2007 --- llvm/test/CodeGen/X86/2007-05-17-ShuffleISelBug.ll Thu May 17 13:49:50 2007 *************** *** 0 **** --- 1,23 ---- + ; RUN: llvm-as < %s | llc -march=x86 -mattr=+sse2 + ; RUN: llvm-as < %s | llc -march=x86 -mattr=+sse2 | not grep punpckhwd + + declare <8 x i16> @llvm.x86.sse2.packuswb.128(<8 x i16>, <8 x i16>) + + declare <8 x i16> @llvm.x86.sse2.psrl.w(<8 x i16>, <4 x i32>) + + define fastcc void @test(i32* %src, i32 %sbpr, i32* %dst, i32 %dbpr, i32 %w, i32 %h, i32 %dstalpha, i32 %mask) { + %tmp633 = shufflevector <8 x i16> zeroinitializer, <8 x i16> undef, <8 x i32> < i32 4, i32 4, i32 5, i32 5, i32 6, i32 6, i32 7, i32 7 > + %tmp715 = mul <8 x i16> zeroinitializer, %tmp633 + %tmp776 = bitcast <8 x i16> %tmp715 to <4 x i32> + %tmp777 = add <4 x i32> %tmp776, shufflevector (<4 x i32> < i32 65537, i32 0, i32 0, i32 0 >, <4 x i32> < i32 65537, i32 0, i32 0, i32 0 >, <4 x i32> zeroinitializer) + %tmp805 = add <4 x i32> %tmp777, zeroinitializer + %tmp832 = bitcast <4 x i32> %tmp805 to <8 x i16> + %tmp838 = tail call <8 x i16> @llvm.x86.sse2.psrl.w( <8 x i16> %tmp832, <4 x i32> < i32 8, i32 undef, i32 undef, i32 undef > ) + %tmp1020 = tail call <8 x i16> @llvm.x86.sse2.packuswb.128( <8 x i16> zeroinitializer, <8 x i16> %tmp838 ) + %tmp1030 = bitcast <8 x i16> %tmp1020 to <4 x i32> + %tmp1033 = add <4 x i32> zeroinitializer, %tmp1030 + %tmp1048 = bitcast <4 x i32> %tmp1033 to <2 x i64> + %tmp1049 = or <2 x i64> %tmp1048, zeroinitializer + store <2 x i64> %tmp1049, <2 x i64>* null + ret void + } From reid at x10sys.com Thu May 17 14:23:20 2007 From: reid at x10sys.com (Reid Spencer) Date: Thu, 17 May 2007 14:23:20 -0500 Subject: [llvm-commits] CVS: llvm/lib/Support/APInt.cpp Message-ID: <200705171923.l4HJNKPK027769@zion.cs.uiuc.edu> Changes in directory llvm/lib/Support: APInt.cpp updated: 1.84 -> 1.85 --- Log message: Get rid of leading zeros in the output of toString. --- Diffs of the changes: (+27 -8) APInt.cpp | 35 +++++++++++++++++++++++++++-------- 1 files changed, 27 insertions(+), 8 deletions(-) Index: llvm/lib/Support/APInt.cpp diff -u llvm/lib/Support/APInt.cpp:1.84 llvm/lib/Support/APInt.cpp:1.85 --- llvm/lib/Support/APInt.cpp:1.84 Thu May 17 01:26:29 2007 +++ llvm/lib/Support/APInt.cpp Thu May 17 14:23:02 2007 @@ -1938,14 +1938,33 @@ } if (radix != 10) { - uint64_t mask = radix - 1; - uint32_t shift = (radix == 16 ? 4 : radix == 8 ? 3 : 1); - uint32_t nibbles = APINT_BITS_PER_WORD / shift; - for (uint32_t i = 0; i < getNumWords(); ++i) { - uint64_t value = pVal[i]; - for (uint32_t j = 0; j < nibbles; ++j) { - result.insert(0, digits[ value & mask ]); - value >>= shift; + // For the 2, 8 and 16 bit cases, we can just shift instead of divide + // because the number of bits per digit (1,3 and 4 respectively) divides + // equaly. We just shift until there value is zero. + + // First, check for a zero value and just short circuit the logic below. + if (*this == 0) + result = "0"; + else { + APInt tmp(*this); + size_t insert_at = 0; + if (wantSigned && this->isNegative()) { + // They want to print the signed version and it is a negative value + // Flip the bits and add one to turn it into the equivalent positive + // value and put a '-' in the result. + tmp.flip(); + tmp++; + result = "-"; + insert_at = 1; + } + // Just shift tmp right for each digit width until it becomes zero + uint32_t shift = (radix == 16 ? 4 : (radix == 8 ? 3 : 1)); + uint64_t mask = radix - 1; + APInt zero(tmp.getBitWidth(), 0); + while (tmp.ne(zero)) { + unsigned digit = tmp.getZExtValue() & mask; + tmp = tmp.lshr(shift); + result.insert(insert_at, digits[digit]); } } return result; From sabre at nondot.org Thu May 17 14:59:15 2007 From: sabre at nondot.org (Chris Lattner) Date: Thu, 17 May 2007 14:59:15 -0500 Subject: [llvm-commits] CVS: llvm/docs/ReleaseNotes.html Message-ID: <200705171959.l4HJxFFC028480@zion.cs.uiuc.edu> Changes in directory llvm/docs: ReleaseNotes.html updated: 1.377 -> 1.378 --- Log message: minor tweak --- Diffs of the changes: (+5 -4) ReleaseNotes.html | 9 +++++---- 1 files changed, 5 insertions(+), 4 deletions(-) Index: llvm/docs/ReleaseNotes.html diff -u llvm/docs/ReleaseNotes.html:1.377 llvm/docs/ReleaseNotes.html:1.378 --- llvm/docs/ReleaseNotes.html:1.377 Wed May 16 18:25:46 2007 +++ llvm/docs/ReleaseNotes.html Thu May 17 14:58:57 2007 @@ -67,8 +67,9 @@ break backwards compatibility with the LLVM 1.x bytecode and .ll file format. If you have LLVM 1.9 .ll files that you would like to upgrade to LLVM 2.x, we recommend the use of the stand alone llvm-upgrade -tool. We intend to keep compatibility with .ll and .bc formats within the 2.x -release series, like we did within the 1.x series. +tool (which is included with 2.0). We intend to keep compatibility with .ll +and .bc formats within the 2.x release series, like we did within the 1.x +series.
  • There are several significant change to the LLVM IR and internal APIs, such as a major overhaul of the type system, the completely new bitcode file format, etc.
  • @@ -356,7 +357,7 @@
  • Improved support for the Linux/ppc ABI and the linux/ppc JIT is fully functional now. llvm-gcc and static compilation are not fully supported - yet though.<
  • + yet though.
  • Many bugs fixed for PowerPC 64.
  • @@ -839,7 +840,7 @@ src="http://www.w3.org/Icons/valid-html401" alt="Valid HTML 4.01!" /> The LLVM Compiler Infrastructure
    - Last modified: $Date: 2007/05/16 23:25:46 $ + Last modified: $Date: 2007/05/17 19:58:57 $ From sabre at nondot.org Thu May 17 15:01:59 2007 From: sabre at nondot.org (Chris Lattner) Date: Thu, 17 May 2007 15:01:59 -0500 Subject: [llvm-commits] CVS: llvm/include/llvm/ADT/SmallVector.h Message-ID: <200705172001.l4HK1xXl028565@zion.cs.uiuc.edu> Changes in directory llvm/include/llvm/ADT: SmallVector.h updated: 1.29 -> 1.30 --- Log message: silence some "comparison between signed and unsigned integer expressions" warnings --- Diffs of the changes: (+3 -3) SmallVector.h | 6 +++--- 1 files changed, 3 insertions(+), 3 deletions(-) Index: llvm/include/llvm/ADT/SmallVector.h diff -u llvm/include/llvm/ADT/SmallVector.h:1.29 llvm/include/llvm/ADT/SmallVector.h:1.30 --- llvm/include/llvm/ADT/SmallVector.h:1.29 Thu May 17 13:29:01 2007 +++ llvm/include/llvm/ADT/SmallVector.h Thu May 17 15:01:40 2007 @@ -147,7 +147,7 @@ destroy_range(Begin+N, End); End = Begin+N; } else if (N > size()) { - if (Capacity-Begin < N) + if (unsigned(Capacity-Begin) < N) grow(N); construct_range(End, Begin+N, T()); End = Begin+N; @@ -159,7 +159,7 @@ destroy_range(Begin+N, End); End = Begin+N; } else if (N > size()) { - if (Capacity-Begin < N) + if (unsigned(Capacity-Begin) < N) grow(N); construct_range(End, Begin+N, NV); End = Begin+N; @@ -189,7 +189,7 @@ void assign(unsigned NumElts, const T &Elt) { clear(); - if (Capacity-Begin < NumElts) + if (unsigned(Capacity-Begin) < NumElts) grow(NumElts); End = Begin+NumElts; construct_range(Begin, End, Elt); From djg at cray.com Thu May 17 16:31:00 2007 From: djg at cray.com (Dan Gohman) Date: Thu, 17 May 2007 16:31:00 -0500 Subject: [llvm-commits] CVS: llvm/include/llvm/Type.h Message-ID: <200705172131.l4HLV0J3005668@zion.cs.uiuc.edu> Changes in directory llvm/include/llvm: Type.h updated: 1.107 -> 1.108 --- Log message: Correct a name in a comment. --- Diffs of the changes: (+4 -3) Type.h | 7 ++++--- 1 files changed, 4 insertions(+), 3 deletions(-) Index: llvm/include/llvm/Type.h diff -u llvm/include/llvm/Type.h:1.107 llvm/include/llvm/Type.h:1.108 --- llvm/include/llvm/Type.h:1.107 Fri Apr 20 17:33:47 2007 +++ llvm/include/llvm/Type.h Thu May 17 16:30:39 2007 @@ -229,9 +229,10 @@ return !isAbstract() || isSizedDerivedType(); } - /// getPrimitiveSize - Return the basic size of this type if it is a primitive - /// type. These are fixed by LLVM and are not target dependent. This will - /// return zero if the type does not have a size or is not a primitive type. + /// getPrimitiveSizeInBits - Return the basic size of this type if it is a + /// primitive type. These are fixed by LLVM and are not target dependent. + /// This will return zero if the type does not have a size or is not a + /// primitive type. /// unsigned getPrimitiveSizeInBits() const; From dalej at apple.com Thu May 17 16:31:39 2007 From: dalej at apple.com (Dale Johannesen) Date: Thu, 17 May 2007 16:31:39 -0500 Subject: [llvm-commits] CVS: llvm/lib/Target/ARM/ARMISelLowering.h ARMISelLowering.cpp Message-ID: <200705172131.l4HLVdmI005691@zion.cs.uiuc.edu> Changes in directory llvm/lib/Target/ARM: ARMISelLowering.h updated: 1.15 -> 1.16 ARMISelLowering.cpp updated: 1.52 -> 1.53 --- Log message: More effective breakdown of memcpy into repeated load/store. These are now in the order lod;lod;lod;sto;sto;sto which means the load-store optimizer has a better chance of producing ldm/stm. Ideally you would get cooperation from the RA as well but this is not there yet. --- Diffs of the changes: (+77 -1) ARMISelLowering.cpp | 77 +++++++++++++++++++++++++++++++++++++++++++++++++++- ARMISelLowering.h | 1 2 files changed, 77 insertions(+), 1 deletion(-) Index: llvm/lib/Target/ARM/ARMISelLowering.h diff -u llvm/lib/Target/ARM/ARMISelLowering.h:1.15 llvm/lib/Target/ARM/ARMISelLowering.h:1.16 --- llvm/lib/Target/ARM/ARMISelLowering.h:1.15 Fri Apr 27 08:54:47 2007 +++ llvm/lib/Target/ARM/ARMISelLowering.h Thu May 17 16:31:21 2007 @@ -135,6 +135,7 @@ SDOperand LowerGLOBAL_OFFSET_TABLE(SDOperand Op, SelectionDAG &DAG); SDOperand LowerFORMAL_ARGUMENTS(SDOperand Op, SelectionDAG &DAG); SDOperand LowerBR_JT(SDOperand Op, SelectionDAG &DAG); + SDOperand LowerMEMCPY(SDOperand Op, SelectionDAG &DAG); }; } Index: llvm/lib/Target/ARM/ARMISelLowering.cpp diff -u llvm/lib/Target/ARM/ARMISelLowering.cpp:1.52 llvm/lib/Target/ARM/ARMISelLowering.cpp:1.53 --- llvm/lib/Target/ARM/ARMISelLowering.cpp:1.52 Mon May 14 18:20:21 2007 +++ llvm/lib/Target/ARM/ARMISelLowering.cpp Thu May 17 16:31:21 2007 @@ -187,7 +187,7 @@ // Expand mem operations genericly. setOperationAction(ISD::MEMSET , MVT::Other, Expand); - setOperationAction(ISD::MEMCPY , MVT::Other, Expand); + setOperationAction(ISD::MEMCPY , MVT::Other, Custom); setOperationAction(ISD::MEMMOVE , MVT::Other, Expand); // Use the default implementation. @@ -255,6 +255,8 @@ setSchedulingPreference(SchedulingForRegPressure); computeRegisterProperties(); + + maxStoresPerMemcpy = 1; //// temporary - rewrite interface to use type } @@ -1328,6 +1330,78 @@ return DAG.getNode(ISD::BUILD_PAIR, MVT::i64, Lo, Hi); } +SDOperand ARMTargetLowering::LowerMEMCPY(SDOperand Op, SelectionDAG &DAG) { + SDOperand Chain = Op.getOperand(0); + SDOperand Dest = Op.getOperand(1); + SDOperand Src = Op.getOperand(2); + SDOperand Count = Op.getOperand(3); + unsigned Align = + (unsigned)cast(Op.getOperand(4))->getValue(); + if (Align == 0) Align = 1; + + ConstantSDNode *I = dyn_cast(Count); + // Just call memcpy if: + // not 4-byte aligned + // size is unknown + // size is >= the threshold. + if ((Align & 3) != 0 || + !I || + I->getValue() >= 64 || + (I->getValue() & 3) != 0) { + MVT::ValueType IntPtr = getPointerTy(); + TargetLowering::ArgListTy Args; + TargetLowering::ArgListEntry Entry; + Entry.Ty = getTargetData()->getIntPtrType(); + Entry.Node = Op.getOperand(1); Args.push_back(Entry); + Entry.Node = Op.getOperand(2); Args.push_back(Entry); + Entry.Node = Op.getOperand(3); Args.push_back(Entry); + std::pair CallResult = + LowerCallTo(Chain, Type::VoidTy, false, false, CallingConv::C, false, + DAG.getExternalSymbol("memcpy", IntPtr), Args, DAG); + return CallResult.second; + } + + // Otherwise do repeated 4-byte loads and stores. To be improved. + assert((I->getValue() & 3) == 0); + assert((Align & 3) == 0); + unsigned NumMemOps = I->getValue() >> 2; + unsigned EmittedNumMemOps = 0; + unsigned SrcOff = 0, DstOff = 0; + MVT::ValueType VT = MVT::i32; + unsigned VTSize = 4; + const int MAX_LOADS_IN_LDM = 6; + SDOperand LoadChains[MAX_LOADS_IN_LDM]; + SDOperand Loads[MAX_LOADS_IN_LDM]; + + // Emit up to 4 loads, then a TokenFactor barrier, then the same + // number of stores. The loads and stores will get combined into + // ldm/stm later on. + while(EmittedNumMemOps < NumMemOps) { + unsigned int i; + for (i=0; i Changes in directory llvm-test/SingleSource/UnitTests/Integer: big_part_set.c updated: 1.1 -> 1.2 --- Log message: Change this code to match the reference output. --- Diffs of the changes: (+1 -1) big_part_set.c | 2 +- 1 files changed, 1 insertion(+), 1 deletion(-) Index: llvm-test/SingleSource/UnitTests/Integer/big_part_set.c diff -u llvm-test/SingleSource/UnitTests/Integer/big_part_set.c:1.1 llvm-test/SingleSource/UnitTests/Integer/big_part_set.c:1.2 --- llvm-test/SingleSource/UnitTests/Integer/big_part_set.c:1.1 Thu May 17 13:04:41 2007 +++ llvm-test/SingleSource/UnitTests/Integer/big_part_set.c Thu May 17 16:32:37 2007 @@ -23,7 +23,7 @@ printBits(X); printf("\n"); for (i = bitwidthof(BitType); i > 0; --i) { - X = part_set(X, 1, i-1, bitwidthof(BitType)-1); + X = part_set(X, 1, i-1, i-1); printf("0b0"); printBits(X); printf("\n"); From sabre at nondot.org Thu May 17 16:41:49 2007 From: sabre at nondot.org (Chris Lattner) Date: Thu, 17 May 2007 16:41:49 -0500 Subject: [llvm-commits] CVS: llvm/docs/ReleaseNotes.html Message-ID: <200705172141.l4HLfn9p005966@zion.cs.uiuc.edu> Changes in directory llvm/docs: ReleaseNotes.html updated: 1.378 -> 1.379 --- Log message: add a section about API changes. --- Diffs of the changes: (+60 -11) ReleaseNotes.html | 71 +++++++++++++++++++++++++++++++++++++++++++++--------- 1 files changed, 60 insertions(+), 11 deletions(-) Index: llvm/docs/ReleaseNotes.html diff -u llvm/docs/ReleaseNotes.html:1.378 llvm/docs/ReleaseNotes.html:1.379 --- llvm/docs/ReleaseNotes.html:1.378 Thu May 17 14:58:57 2007 +++ llvm/docs/ReleaseNotes.html Thu May 17 16:41:31 2007 @@ -295,13 +295,6 @@ -

    Further, several significant target-specific enhancements are included in -LLVM 2.0:

    - -
      -
    • -
    - @@ -389,9 +382,6 @@

    More specific changes include:

      -
    • ConstantBool, ConstantIntegral and ConstantInt classes have been merged - together, we now just have ConstantInt
    • -
    • LLVM no longer relies on static destructors to shut itself down. Instead, it lazily initializes itself and shuts down when llvm_shutdown() is explicitly called.
    • @@ -417,6 +407,65 @@
    + + +
    + +

    LLVM 2.0 contains a revamp of the type system and several other significant +internal changes. If you are programming to the C++ API, be aware of the +following major changes:

    + +
      +
    • Pass registration is slightly different in LLVM 2.0 (you now needs an + intptr_t in your constructor), as explained in the Writing an LLVM Pass + document.
    • + +
    • ConstantBool, ConstantIntegral and ConstantInt + classes have been merged together, we now just have + ConstantInt.
    • + +
    • Type::IntTy, Type::UIntTy, Type::SByteTy, ... are + replaced by Type::Int8Ty, Type::Int16Ty, etc. LLVM types + have always corresponded to fixed size types + (e.g. long was always 64-bits), but the type system no longer includes + information about the sign of the type.
    • + +
    • Several classes (CallInst, GetElementPtrInst, + ConstantArray, etc), that once took std::vector as + arguments now take ranges instead. For example, you can create a + GetElementPtrInst with code like: + +
      +      Value *Ops[] = { Op1, Op2, Op3 };
      +      GEP = new GetElementPtrInst(BasePtr, Ops, 3);
      +    
      + + This avoids creation of a temporary vector (and a call to malloc/free). If + you have an std::vector, use code like this: +
      +      std::vector<Value*> Ops = ...;
      +      GEP = new GetElementPtrInst(BasePtr, &Ops[0], Ops.size());
      +    
      + +
    • + +
    • CastInst is now abstract and its functionality is split into several parts, + one for each of the new cast + instructions.
    • + +
    • Instruction::getNext()/getPrev() are now private (along with + BasicBlock::getNext, etc), for efficiency reasons (they are now no + longer just simple pointers). Please use BasicBlock::iterator, etc instead. +
    • + +
    • Module::getNamedFunction() is now called + Module::getFunction().
    • + +
    • SymbolTable.h has been split into ValueSymbolTable.h and +TypeSymbolTable.h.
    • +
    +
    @@ -840,7 +889,7 @@ src="http://www.w3.org/Icons/valid-html401" alt="Valid HTML 4.01!" /> The LLVM Compiler Infrastructure
    - Last modified: $Date: 2007/05/17 19:58:57 $ + Last modified: $Date: 2007/05/17 21:41:31 $ From sabre at nondot.org Thu May 17 17:02:51 2007 From: sabre at nondot.org (Chris Lattner) Date: Thu, 17 May 2007 17:02:51 -0500 Subject: [llvm-commits] CVS: llvm/docs/ReleaseNotes.html Message-ID: <200705172202.l4HM2pvk025137@zion.cs.uiuc.edu> Changes in directory llvm/docs: ReleaseNotes.html updated: 1.379 -> 1.380 --- Log message: llvm-gcc now supports almost all gcc extensions. The key missing one is builtin_apply. --- Diffs of the changes: (+27 -62) ReleaseNotes.html | 89 ++++++++++++++++-------------------------------------- 1 files changed, 27 insertions(+), 62 deletions(-) Index: llvm/docs/ReleaseNotes.html diff -u llvm/docs/ReleaseNotes.html:1.379 llvm/docs/ReleaseNotes.html:1.380 --- llvm/docs/ReleaseNotes.html:1.379 Thu May 17 16:41:31 2007 +++ llvm/docs/ReleaseNotes.html Thu May 17 17:02:24 2007 @@ -679,8 +679,6 @@ Optimization on most platforms "out-of-the-box". Please inquire on the llvmdev mailing list if you are interested.

    -

    FIXME: the list of supported stuff below needs to be updated. We do support -tls now, what else??

    @@ -689,85 +687,52 @@
    -
      -
    • "long double" is transformed by the front-end into "double". There is no -support for floating point data types of any size other than 32 and 64 -bits.
    • +
    • "long double" is silently transformed by the front-end into "double". There +is no support for floating point data types of any size other than 32 and 64 +bits.

    • -
    • Although many GCC extensions are supported, some are not. In particular, - the following extensions are known to not be supported: -
        -
      1. Local Labels: Labels local to a block.
      2. -
      3. Nested Functions: As in Algol and Pascal, lexical scoping of functions.
      4. -
      5. Constructing Calls: Dispatching a call to another function.
      6. -
      7. Thread-Local: Per-thread variables.
      8. -
      9. Pragmas: Pragmas accepted by GCC.
      10. -
      - -

      The following GCC extensions are partially supported. An ignored - attribute means that the LLVM compiler ignores the presence of the attribute, - but the code should still work. An unsupported attribute is one which is - ignored by the LLVM compiler and will cause a different interpretation of - the program.

      +
    • llvm-gcc does not support __builtin_apply yet. + See Constructing Calls: Dispatching a call to another function.

      +
    • +
    • llvm-gcc partially supports tthese GCC extensions:

        -
      1. Variable Length: - Arrays whose length is computed at run time.
        - Supported, but allocated stack space is not freed until the function returns (noted above).
      2. +
      3. Nested Functions: As in Algol and Pascal, lexical scoping of functions.
        + Nested functions are supported, but llvm-gcc does not support non-local + gotos or taking the address of a nested function.
      4. Function Attributes: Declaring that functions have no side effects or that they can never return.
        - Supported: alias, constructor, destructor, + Supported: alias, always_inline, cdecl, + constructor, destructor, deprecated, fastcall, format, format_arg, non_null, noreturn, regparm section, stdcall, unused, used, visibility, warn_unused_result, weak
        - Ignored: noinline, - always_inline, pure, const, nothrow, - malloc, no_instrument_function, cdecl
        - - Unsupported: All other target specific attributes
      5. - -
      6. Variable Attributes: - Specifying attributes of variables.
        - Supported: alias, cleanup, common, - nocommon, deprecated, dllimport, - dllexport, section, transparent_union, - unused, used, weak
        - - Unsupported: aligned, mode, packed, - shared, tls_model, - vector_size, all target specific attributes. -
      7. - -
      8. Type Attributes: Specifying attributes of types.
        - Supported: transparent_union, unused, - deprecated, may_alias
        - - Unsupported: aligned, packed, - all target specific attributes.
      9. - -
      10. Other Builtins: - Other built-in functions.
        - We support all builtins which have a C language equivalent (e.g., - __builtin_cos), __builtin_alloca, - __builtin_types_compatible_p, __builtin_choose_expr, - __builtin_constant_p, and __builtin_expect - (currently ignored). We also support builtins for ISO C99 floating - point comparison macros (e.g., __builtin_islessequal), - __builtin_prefetch, __builtin_popcount[ll], - __builtin_clz[ll], and __builtin_ctz[ll].
      11. + Ignored: noinline, pure, const, nothrow, + malloc, no_instrument_function
      +
    • -

      The following extensions are known to be supported:

      +
    • llvm-gcc supports the vast majority of GCC extensions, including:

        +
      1. Pragmas: Pragmas accepted by GCC.
      2. +
      3. Local Labels: Labels local to a block.
      4. +
      5. Other Builtins: + Other built-in functions.
      6. +
      7. Variable Attributes: + Specifying attributes of variables.
      8. +
      9. Type Attributes: Specifying attributes of types.
      10. +
      11. Thread-Local: Per-thread variables.
      12. +
      13. Variable Length: + Arrays whose length is computed at run time.
      14. Labels as Values: Getting pointers to labels and computed gotos.
      15. Statement Exprs: Putting statements and declarations inside expressions.
      16. Typeof: typeof: referring to the type of an expression.
      17. @@ -889,7 +854,7 @@ src="http://www.w3.org/Icons/valid-html401" alt="Valid HTML 4.01!" /> The LLVM Compiler Infrastructure
        - Last modified: $Date: 2007/05/17 21:41:31 $ + Last modified: $Date: 2007/05/17 22:02:24 $ From sabre at nondot.org Thu May 17 17:04:05 2007 From: sabre at nondot.org (Chris Lattner) Date: Thu, 17 May 2007 17:04:05 -0500 Subject: [llvm-commits] CVS: llvm/docs/ReleaseNotes.html Message-ID: <200705172204.l4HM45lG025206@zion.cs.uiuc.edu> Changes in directory llvm/docs: ReleaseNotes.html updated: 1.380 -> 1.381 --- Log message: validation fixes --- Diffs of the changes: (+2 -4) ReleaseNotes.html | 6 ++---- 1 files changed, 2 insertions(+), 4 deletions(-) Index: llvm/docs/ReleaseNotes.html diff -u llvm/docs/ReleaseNotes.html:1.380 llvm/docs/ReleaseNotes.html:1.381 --- llvm/docs/ReleaseNotes.html:1.380 Thu May 17 17:02:24 2007 +++ llvm/docs/ReleaseNotes.html Thu May 17 17:03:43 2007 @@ -339,8 +339,6 @@ implemented.
    -
    -

    Other Target-Specific Code Generator Enhancements:

    @@ -584,7 +582,7 @@
  • Compilation for ARM Linux OABI (old ABI) is supported, but not fully tested.
  • QEMU-ARM (<= 0.9.0) wrongly executes programs compiled with LLVM. A non-affected QEMU version must be used or this - + patch must be applied on QEMU.
  • @@ -854,7 +852,7 @@ src="http://www.w3.org/Icons/valid-html401" alt="Valid HTML 4.01!" /> The LLVM Compiler Infrastructure
    - Last modified: $Date: 2007/05/17 22:02:24 $ + Last modified: $Date: 2007/05/17 22:03:43 $ From dpatel at apple.com Thu May 17 17:05:42 2007 From: dpatel at apple.com (Devang Patel) Date: Thu, 17 May 2007 17:05:42 -0500 Subject: [llvm-commits] CVS: llvm/test/Transforms/SCCP/2007-05-16-InvokeCrash.ll Message-ID: <200705172205.l4HM5gv0025276@zion.cs.uiuc.edu> Changes in directory llvm/test/Transforms/SCCP: 2007-05-16-InvokeCrash.ll added (r1.1) --- Log message: New test. --- Diffs of the changes: (+50 -0) 2007-05-16-InvokeCrash.ll | 50 ++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 50 insertions(+) Index: llvm/test/Transforms/SCCP/2007-05-16-InvokeCrash.ll diff -c /dev/null llvm/test/Transforms/SCCP/2007-05-16-InvokeCrash.ll:1.1 *** /dev/null Thu May 17 17:05:31 2007 --- llvm/test/Transforms/SCCP/2007-05-16-InvokeCrash.ll Thu May 17 17:05:20 2007 *************** *** 0 **** --- 1,50 ---- + ; RUN: llvm-upgrade < %s | llvm-as | opt -sccp -disable-output + ; PR 1431 + + void @_ada_bench() { + entry: + br label %cond_next + + cond_next: ; preds = %cond_next, %entry + %indvar46 = phi i32 [ 0, %entry ], [ %indvar.next47, %cond_next ] ; [#uses=1] + %indvar.next47 = add i32 %indvar46, 1 ; [#uses=2] + %exitcond48 = icmp eq i32 %indvar.next47, 10000 ; [#uses=1] + br i1 %exitcond48, label %cond_next40, label %cond_next + + cond_next40: ; preds = %cond_next40, %cond_next + %indvar43 = phi i32 [ %indvar.next44, %cond_next40 ], [ 0, %cond_next ] ; [#uses=1] + %indvar.next44 = add i32 %indvar43, 1 ; [#uses=2] + %exitcond45 = icmp eq i32 %indvar.next44, 10000 ; [#uses=1] + br i1 %exitcond45, label %cond_next53, label %cond_next40 + + cond_next53: ; preds = %cond_next53, %cond_next40 + %indvar41 = phi i32 [ %indvar.next42, %cond_next53 ], [ 0, %cond_next40 ] ; [#uses=1] + %indvar.next42 = add i32 %indvar41, 1 ; [#uses=2] + %exitcond = icmp eq i32 %indvar.next42, 10000 ; [#uses=1] + br i1 %exitcond, label %bb67, label %cond_next53 + + bb67: ; preds = %cond_next53 + %tmp112 = invoke double @sin( double 5.000000e-01 ) + to label %bb114 unwind label %cleanup ; [#uses=0] + + bb114: ; preds = %bb67 + %tmp147 = invoke double @log( double 5.000000e-01 ) + to label %bb149 unwind label %cleanup ; [#uses=0] + + bb149: ; preds = %bb114 + %tmp175 = invoke double @sqrt( double 5.000000e-01 ) + to label %bb177 unwind label %cleanup ; [#uses=0] + + bb177: ; preds = %bb149 + unreachable + + cleanup: ; preds = %bb149, %bb114, %bb67 + unwind + } + + declare double @sin(double) + + declare double @log(double) + + declare double @sqrt(double) + From dpatel at apple.com Thu May 17 17:10:33 2007 From: dpatel at apple.com (Devang Patel) Date: Thu, 17 May 2007 17:10:33 -0500 Subject: [llvm-commits] CVS: llvm/lib/Transforms/Scalar/SCCP.cpp Message-ID: <200705172210.l4HMAXnp025639@zion.cs.uiuc.edu> Changes in directory llvm/lib/Transforms/Scalar: SCCP.cpp updated: 1.169 -> 1.170 --- Log message: Fix PR1431: http://llvm.org/PR1431 Test case at Transformations/SCCP/2007-05-16-InvokeCrash.ll --- Diffs of the changes: (+1 -1) SCCP.cpp | 2 +- 1 files changed, 1 insertion(+), 1 deletion(-) Index: llvm/lib/Transforms/Scalar/SCCP.cpp diff -u llvm/lib/Transforms/Scalar/SCCP.cpp:1.169 llvm/lib/Transforms/Scalar/SCCP.cpp:1.170 --- llvm/lib/Transforms/Scalar/SCCP.cpp:1.169 Sun May 6 08:37:16 2007 +++ llvm/lib/Transforms/Scalar/SCCP.cpp Thu May 17 17:10:15 2007 @@ -1417,7 +1417,7 @@ Instruction *Inst = BI++; if (Inst->getType() != Type::VoidTy) { LatticeVal &IV = Values[Inst]; - if (IV.isConstant() || IV.isUndefined() && + if ((IV.isConstant() || IV.isUndefined()) && !isa(Inst)) { Constant *Const = IV.isConstant() ? IV.getConstant() : UndefValue::get(Inst->getType()); From alenhar2 at cs.uiuc.edu Thu May 17 17:17:37 2007 From: alenhar2 at cs.uiuc.edu (Andrew Lenharth) Date: Thu, 17 May 2007 17:17:37 -0500 Subject: [llvm-commits] [see] CVS: llvm/lib/Analysis/BasicAliasAnalysis.cpp Message-ID: <200705172217.l4HMHbm8021174@apoc.cs.uiuc.edu> Changes in directory llvm/lib/Analysis: BasicAliasAnalysis.cpp updated: 1.89 -> 1.89.4.1 --- Log message: aa info for some runtime functions --- Diffs of the changes: (+7 -1) BasicAliasAnalysis.cpp | 8 +++++++- 1 files changed, 7 insertions(+), 1 deletion(-) Index: llvm/lib/Analysis/BasicAliasAnalysis.cpp diff -u llvm/lib/Analysis/BasicAliasAnalysis.cpp:1.89 llvm/lib/Analysis/BasicAliasAnalysis.cpp:1.89.4.1 --- llvm/lib/Analysis/BasicAliasAnalysis.cpp:1.89 Fri Nov 3 15:58:48 2006 +++ llvm/lib/Analysis/BasicAliasAnalysis.cpp Thu May 17 17:16:56 2007 @@ -786,6 +786,9 @@ // ISO C99: "__signbit", "__signbitf", "__signbitl", + + //Kernel hack + "exactcheck1", "exactcheck2", "exactcheck3" }; @@ -810,7 +813,10 @@ // File I/O "feof", "ferror", "fileno", - "feof_unlocked", "ferror_unlocked", "fileno_unlocked" + "feof_unlocked", "ferror_unlocked", "fileno_unlocked", + + //Kernel hack + "getBounds", "getBegin", "getEnd" }; static ManagedStatic > NoMemoryTable; From reid at x10sys.com Thu May 17 17:42:47 2007 From: reid at x10sys.com (Reid Spencer) Date: Thu, 17 May 2007 17:42:47 -0500 Subject: [llvm-commits] [release_20] CVS: llvm/Makefile.rules Message-ID: <200705172242.l4HMglGq027190@zion.cs.uiuc.edu> Changes in directory llvm: Makefile.rules updated: 1.434 -> 1.434.2.1 --- Log message: Fix the rules for handling the case when BISON is not available. We want this to succeed by copying the .h.cvs file to .h and the .cpp.cvs file to .cpp. --- Diffs of the changes: (+11 -4) Makefile.rules | 15 +++++++++++---- 1 files changed, 11 insertions(+), 4 deletions(-) Index: llvm/Makefile.rules diff -u llvm/Makefile.rules:1.434 llvm/Makefile.rules:1.434.2.1 --- llvm/Makefile.rules:1.434 Wed May 2 16:31:09 2007 +++ llvm/Makefile.rules Thu May 17 17:42:28 2007 @@ -1359,15 +1359,12 @@ %.h: %.y # Rule for building the bison based parsers... -$(PROJ_SRC_DIR)/%.cpp $(PROJ_SRC_DIR)/%.h : $(PROJ_SRC_DIR)/%.y ifneq ($(BISON),) +$(PROJ_SRC_DIR)/%.cpp $(PROJ_SRC_DIR)/%.h : $(PROJ_SRC_DIR)/%.y $(Echo) "Bisoning $*.y" $(Verb) $(BISON) -v -d -p $( Changes in directory llvm: Makefile.rules updated: 1.434 -> 1.435 --- Log message: Fix a problem with building .y files when BISON is not present. Merged from the release_20 branch. --- Diffs of the changes: (+11 -4) Makefile.rules | 15 +++++++++++---- 1 files changed, 11 insertions(+), 4 deletions(-) Index: llvm/Makefile.rules diff -u llvm/Makefile.rules:1.434 llvm/Makefile.rules:1.435 --- llvm/Makefile.rules:1.434 Wed May 2 16:31:09 2007 +++ llvm/Makefile.rules Thu May 17 17:51:35 2007 @@ -1359,15 +1359,12 @@ %.h: %.y # Rule for building the bison based parsers... -$(PROJ_SRC_DIR)/%.cpp $(PROJ_SRC_DIR)/%.h : $(PROJ_SRC_DIR)/%.y ifneq ($(BISON),) +$(PROJ_SRC_DIR)/%.cpp $(PROJ_SRC_DIR)/%.h : $(PROJ_SRC_DIR)/%.y $(Echo) "Bisoning $*.y" $(Verb) $(BISON) -v -d -p $( Changes in directory llvm/tools/llvm-upgrade: UpgradeLexer.cpp.cvs updated: 1.23 -> 1.23.2.1 UpgradeParser.cpp.cvs updated: 1.77 -> 1.77.2.1 UpgradeParser.h.cvs updated: 1.57 -> 1.57.2.1 UpgradeParser.y.cvs updated: 1.76 -> 1.76.2.1 --- Log message: Regenerate these for the release. They weren't up to date and would cause non-bison builds to fail. --- Diffs of the changes: (+548 -504) UpgradeLexer.cpp.cvs | 334 +++++++++++++------------- UpgradeParser.cpp.cvs | 626 +++++++++++++++++++++++++------------------------- UpgradeParser.h.cvs | 2 UpgradeParser.y.cvs | 90 ++++--- 4 files changed, 548 insertions(+), 504 deletions(-) Index: llvm/tools/llvm-upgrade/UpgradeLexer.cpp.cvs diff -u llvm/tools/llvm-upgrade/UpgradeLexer.cpp.cvs:1.23 llvm/tools/llvm-upgrade/UpgradeLexer.cpp.cvs:1.23.2.1 --- llvm/tools/llvm-upgrade/UpgradeLexer.cpp.cvs:1.23 Wed Mar 21 12:15:50 2007 +++ llvm/tools/llvm-upgrade/UpgradeLexer.cpp.cvs Thu May 17 17:59:29 2007 @@ -20,7 +20,7 @@ /* A lexical scanner generated by flex*/ /* Scanner skeleton version: - * $Header: /var/cvs/llvm/llvm/tools/llvm-upgrade/UpgradeLexer.cpp.cvs,v 1.23 2007/03/21 17:15:50 reid Exp $ + * $Header: /var/cvs/llvm/llvm/tools/llvm-upgrade/UpgradeLexer.cpp.cvs,v 1.23.2.1 2007/05/17 22:59:29 reid Exp $ */ #define FLEX_SCANNER @@ -934,7 +934,7 @@ #define YY_MORE_ADJ 0 #define YY_RESTORE_YY_MORE_OFFSET char *yytext; -#line 1 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 1 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l" #define INITIAL 0 /*===-- UpgradeLexer.l - Scanner for 1.9 assembly files --------*- C++ -*--===// // @@ -949,7 +949,7 @@ // //===----------------------------------------------------------------------===*/ #define YY_NEVER_INTERACTIVE 1 -#line 28 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 28 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l" #include "UpgradeInternals.h" #include "llvm/Module.h" #include @@ -1241,7 +1241,7 @@ register char *yy_cp = NULL, *yy_bp = NULL; register int yy_act; -#line 194 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 194 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l" #line 1248 "UpgradeLexer.cpp" @@ -1337,742 +1337,742 @@ { /* beginning of action switch */ case 1: YY_RULE_SETUP -#line 196 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 196 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l" { /* Ignore comments for now */ } YY_BREAK case 2: YY_RULE_SETUP -#line 198 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 198 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l" { return BEGINTOK; } YY_BREAK case 3: YY_RULE_SETUP -#line 199 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 199 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l" { return ENDTOK; } YY_BREAK case 4: YY_RULE_SETUP -#line 200 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 200 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l" { return TRUETOK; } YY_BREAK case 5: YY_RULE_SETUP -#line 201 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 201 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l" { return FALSETOK; } YY_BREAK case 6: YY_RULE_SETUP -#line 202 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 202 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l" { return DECLARE; } YY_BREAK case 7: YY_RULE_SETUP -#line 203 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 203 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l" { return GLOBAL; } YY_BREAK case 8: YY_RULE_SETUP -#line 204 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 204 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l" { return CONSTANT; } YY_BREAK case 9: YY_RULE_SETUP -#line 205 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 205 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l" { return INTERNAL; } YY_BREAK case 10: YY_RULE_SETUP -#line 206 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 206 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l" { return LINKONCE; } YY_BREAK case 11: YY_RULE_SETUP -#line 207 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 207 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l" { return WEAK; } YY_BREAK case 12: YY_RULE_SETUP -#line 208 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 208 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l" { return APPENDING; } YY_BREAK case 13: YY_RULE_SETUP -#line 209 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 209 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l" { return DLLIMPORT; } YY_BREAK case 14: YY_RULE_SETUP -#line 210 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 210 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l" { return DLLEXPORT; } YY_BREAK case 15: YY_RULE_SETUP -#line 211 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 211 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l" { return EXTERN_WEAK; } YY_BREAK case 16: YY_RULE_SETUP -#line 212 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 212 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l" { return EXTERNAL; } /* Deprecated, turn into external */ YY_BREAK case 17: YY_RULE_SETUP -#line 213 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 213 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l" { return EXTERNAL; } YY_BREAK case 18: YY_RULE_SETUP -#line 214 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 214 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l" { return IMPLEMENTATION; } YY_BREAK case 19: YY_RULE_SETUP -#line 215 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 215 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l" { return ZEROINITIALIZER; } YY_BREAK case 20: YY_RULE_SETUP -#line 216 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 216 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l" { return DOTDOTDOT; } YY_BREAK case 21: YY_RULE_SETUP -#line 217 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 217 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l" { return UNDEF; } YY_BREAK case 22: YY_RULE_SETUP -#line 218 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 218 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l" { return NULL_TOK; } YY_BREAK case 23: YY_RULE_SETUP -#line 219 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 219 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l" { return TO; } YY_BREAK case 24: YY_RULE_SETUP -#line 220 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 220 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l" { return EXCEPT; } YY_BREAK case 25: YY_RULE_SETUP -#line 221 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 221 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l" { return NOT; } /* Deprecated, turned into XOR */ YY_BREAK case 26: YY_RULE_SETUP -#line 222 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 222 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l" { return TAIL; } YY_BREAK case 27: YY_RULE_SETUP -#line 223 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 223 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l" { return TARGET; } YY_BREAK case 28: YY_RULE_SETUP -#line 224 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 224 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l" { return TRIPLE; } YY_BREAK case 29: YY_RULE_SETUP -#line 225 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 225 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l" { return DEPLIBS; } YY_BREAK case 30: YY_RULE_SETUP -#line 226 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 226 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l" { return ENDIAN; } YY_BREAK case 31: YY_RULE_SETUP -#line 227 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 227 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l" { return POINTERSIZE; } YY_BREAK case 32: YY_RULE_SETUP -#line 228 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 228 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l" { return DATALAYOUT; } YY_BREAK case 33: YY_RULE_SETUP -#line 229 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 229 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l" { return LITTLE; } YY_BREAK case 34: YY_RULE_SETUP -#line 230 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 230 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l" { return BIG; } YY_BREAK case 35: YY_RULE_SETUP -#line 231 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 231 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l" { return VOLATILE; } YY_BREAK case 36: YY_RULE_SETUP -#line 232 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 232 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l" { return ALIGN; } YY_BREAK case 37: YY_RULE_SETUP -#line 233 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 233 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l" { return SECTION; } YY_BREAK case 38: YY_RULE_SETUP -#line 234 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 234 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l" { return MODULE; } YY_BREAK case 39: YY_RULE_SETUP -#line 235 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 235 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l" { return ASM_TOK; } YY_BREAK case 40: YY_RULE_SETUP -#line 236 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 236 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l" { return SIDEEFFECT; } YY_BREAK case 41: YY_RULE_SETUP -#line 238 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 238 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l" { return CC_TOK; } YY_BREAK case 42: YY_RULE_SETUP -#line 239 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 239 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l" { return CCC_TOK; } YY_BREAK case 43: YY_RULE_SETUP -#line 240 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 240 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l" { return CSRETCC_TOK; } YY_BREAK case 44: YY_RULE_SETUP -#line 241 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 241 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l" { return FASTCC_TOK; } YY_BREAK case 45: YY_RULE_SETUP -#line 242 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 242 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l" { return COLDCC_TOK; } YY_BREAK case 46: YY_RULE_SETUP -#line 243 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 243 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l" { return X86_STDCALLCC_TOK; } YY_BREAK case 47: YY_RULE_SETUP -#line 244 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 244 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l" { return X86_FASTCALLCC_TOK; } YY_BREAK case 48: YY_RULE_SETUP -#line 246 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 246 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l" { RET_TY(SBYTE, Type::Int8Ty, 2); } YY_BREAK case 49: YY_RULE_SETUP -#line 247 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 247 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l" { RET_TY(UBYTE, Type::Int8Ty, 1); } YY_BREAK case 50: YY_RULE_SETUP -#line 248 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 248 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l" { RET_TY(UBYTE, Type::Int8Ty, 1); } YY_BREAK case 51: YY_RULE_SETUP -#line 249 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 249 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l" { RET_TY(SHORT, Type::Int16Ty, 2); } YY_BREAK case 52: YY_RULE_SETUP -#line 250 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 250 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l" { RET_TY(USHORT, Type::Int16Ty, 1); } YY_BREAK case 53: YY_RULE_SETUP -#line 251 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 251 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l" { RET_TY(USHORT, Type::Int16Ty, 1); } YY_BREAK case 54: YY_RULE_SETUP -#line 252 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 252 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l" { RET_TY(INT, Type::Int32Ty, 2); } YY_BREAK case 55: YY_RULE_SETUP -#line 253 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 253 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l" { RET_TY(UINT, Type::Int32Ty, 1); } YY_BREAK case 56: YY_RULE_SETUP -#line 254 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 254 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l" { RET_TY(UINT, Type::Int32Ty, 1); } YY_BREAK case 57: YY_RULE_SETUP -#line 255 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 255 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l" { RET_TY(LONG, Type::Int64Ty, 2); } YY_BREAK case 58: YY_RULE_SETUP -#line 256 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 256 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l" { RET_TY(ULONG, Type::Int64Ty, 1); } YY_BREAK case 59: YY_RULE_SETUP -#line 257 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 257 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l" { RET_TY(ULONG, Type::Int64Ty, 1); } YY_BREAK case 60: YY_RULE_SETUP -#line 258 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 258 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l" { RET_TY(VOID, Type::VoidTy, 0); } YY_BREAK case 61: YY_RULE_SETUP -#line 259 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 259 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l" { RET_TY(BOOL, Type::Int1Ty, 1); } YY_BREAK case 62: YY_RULE_SETUP -#line 260 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 260 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l" { RET_TY(BOOL, Type::Int1Ty, 1); } YY_BREAK case 63: YY_RULE_SETUP -#line 261 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 261 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l" { RET_TY(FLOAT, Type::FloatTy, 0); } YY_BREAK case 64: YY_RULE_SETUP -#line 262 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 262 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l" { RET_TY(DOUBLE, Type::DoubleTy,0); } YY_BREAK case 65: YY_RULE_SETUP -#line 263 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 263 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l" { RET_TY(LABEL, Type::LabelTy, 0); } YY_BREAK case 66: YY_RULE_SETUP -#line 264 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 264 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l" { return TYPE; } YY_BREAK case 67: YY_RULE_SETUP -#line 265 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 265 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l" { return OPAQUE; } YY_BREAK case 68: YY_RULE_SETUP -#line 267 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 267 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(BinaryOpVal, AddOp, ADD); } YY_BREAK case 69: YY_RULE_SETUP -#line 268 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 268 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(BinaryOpVal, SubOp, SUB); } YY_BREAK case 70: YY_RULE_SETUP -#line 269 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 269 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(BinaryOpVal, MulOp, MUL); } YY_BREAK case 71: YY_RULE_SETUP -#line 270 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 270 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(BinaryOpVal, DivOp, DIV); } YY_BREAK case 72: YY_RULE_SETUP -#line 271 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 271 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(BinaryOpVal, UDivOp, UDIV); } YY_BREAK case 73: YY_RULE_SETUP -#line 272 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 272 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(BinaryOpVal, SDivOp, SDIV); } YY_BREAK case 74: YY_RULE_SETUP -#line 273 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 273 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(BinaryOpVal, FDivOp, FDIV); } YY_BREAK case 75: YY_RULE_SETUP -#line 274 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 274 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(BinaryOpVal, RemOp, REM); } YY_BREAK case 76: YY_RULE_SETUP -#line 275 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 275 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(BinaryOpVal, URemOp, UREM); } YY_BREAK case 77: YY_RULE_SETUP -#line 276 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 276 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(BinaryOpVal, SRemOp, SREM); } YY_BREAK case 78: YY_RULE_SETUP -#line 277 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 277 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(BinaryOpVal, FRemOp, FREM); } YY_BREAK case 79: YY_RULE_SETUP -#line 278 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 278 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(BinaryOpVal, AndOp, AND); } YY_BREAK case 80: YY_RULE_SETUP -#line 279 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 279 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(BinaryOpVal, OrOp , OR ); } YY_BREAK case 81: YY_RULE_SETUP -#line 280 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 280 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(BinaryOpVal, XorOp, XOR); } YY_BREAK case 82: YY_RULE_SETUP -#line 281 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 281 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(BinaryOpVal, SetNE, SETNE); } YY_BREAK case 83: YY_RULE_SETUP -#line 282 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 282 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(BinaryOpVal, SetEQ, SETEQ); } YY_BREAK case 84: YY_RULE_SETUP -#line 283 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 283 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(BinaryOpVal, SetLT, SETLT); } YY_BREAK case 85: YY_RULE_SETUP -#line 284 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 284 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(BinaryOpVal, SetGT, SETGT); } YY_BREAK case 86: YY_RULE_SETUP -#line 285 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 285 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(BinaryOpVal, SetLE, SETLE); } YY_BREAK case 87: YY_RULE_SETUP -#line 286 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 286 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(BinaryOpVal, SetGE, SETGE); } YY_BREAK case 88: YY_RULE_SETUP -#line 287 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 287 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(BinaryOpVal, ShlOp, SHL); } YY_BREAK case 89: YY_RULE_SETUP -#line 288 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 288 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(BinaryOpVal, ShrOp, SHR); } YY_BREAK case 90: YY_RULE_SETUP -#line 289 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 289 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(BinaryOpVal, LShrOp, LSHR); } YY_BREAK case 91: YY_RULE_SETUP -#line 290 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 290 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(BinaryOpVal, AShrOp, ASHR); } YY_BREAK case 92: YY_RULE_SETUP -#line 292 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 292 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(OtherOpVal, ICmpOp, ICMP); } YY_BREAK case 93: YY_RULE_SETUP -#line 293 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 293 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(OtherOpVal, FCmpOp, FCMP); } YY_BREAK case 94: YY_RULE_SETUP -#line 295 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 295 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l" { return EQ; } YY_BREAK case 95: YY_RULE_SETUP -#line 296 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 296 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l" { return NE; } YY_BREAK case 96: YY_RULE_SETUP -#line 297 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 297 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l" { return SLT; } YY_BREAK case 97: YY_RULE_SETUP -#line 298 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 298 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l" { return SGT; } YY_BREAK case 98: YY_RULE_SETUP -#line 299 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 299 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l" { return SLE; } YY_BREAK case 99: YY_RULE_SETUP -#line 300 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 300 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l" { return SGE; } YY_BREAK case 100: YY_RULE_SETUP -#line 301 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 301 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l" { return ULT; } YY_BREAK case 101: YY_RULE_SETUP -#line 302 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 302 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l" { return UGT; } YY_BREAK case 102: YY_RULE_SETUP -#line 303 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 303 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l" { return ULE; } YY_BREAK case 103: YY_RULE_SETUP -#line 304 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 304 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l" { return UGE; } YY_BREAK case 104: YY_RULE_SETUP -#line 305 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 305 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l" { return OEQ; } YY_BREAK case 105: YY_RULE_SETUP -#line 306 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 306 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l" { return ONE; } YY_BREAK case 106: YY_RULE_SETUP -#line 307 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 307 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l" { return OLT; } YY_BREAK case 107: YY_RULE_SETUP -#line 308 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 308 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l" { return OGT; } YY_BREAK case 108: YY_RULE_SETUP -#line 309 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 309 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l" { return OLE; } YY_BREAK case 109: YY_RULE_SETUP -#line 310 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 310 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l" { return OGE; } YY_BREAK case 110: YY_RULE_SETUP -#line 311 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 311 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l" { return ORD; } YY_BREAK case 111: YY_RULE_SETUP -#line 312 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 312 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l" { return UNO; } YY_BREAK case 112: YY_RULE_SETUP -#line 313 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 313 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l" { return UEQ; } YY_BREAK case 113: YY_RULE_SETUP -#line 314 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 314 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l" { return UNE; } YY_BREAK case 114: YY_RULE_SETUP -#line 316 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 316 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(OtherOpVal, PHIOp, PHI_TOK); } YY_BREAK case 115: YY_RULE_SETUP -#line 317 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 317 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(OtherOpVal, CallOp, CALL); } YY_BREAK case 116: YY_RULE_SETUP -#line 318 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 318 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(CastOpVal, CastOp, CAST); } YY_BREAK case 117: YY_RULE_SETUP -#line 319 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 319 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(CastOpVal, TruncOp, TRUNC); } YY_BREAK case 118: YY_RULE_SETUP -#line 320 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 320 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(CastOpVal, ZExtOp , ZEXT); } YY_BREAK case 119: YY_RULE_SETUP -#line 321 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 321 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(CastOpVal, SExtOp, SEXT); } YY_BREAK case 120: YY_RULE_SETUP -#line 322 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 322 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(CastOpVal, FPTruncOp, FPTRUNC); } YY_BREAK case 121: YY_RULE_SETUP -#line 323 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 323 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(CastOpVal, FPExtOp, FPEXT); } YY_BREAK case 122: YY_RULE_SETUP -#line 324 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 324 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(CastOpVal, FPToUIOp, FPTOUI); } YY_BREAK case 123: YY_RULE_SETUP -#line 325 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 325 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(CastOpVal, FPToSIOp, FPTOSI); } YY_BREAK case 124: YY_RULE_SETUP -#line 326 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 326 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(CastOpVal, UIToFPOp, UITOFP); } YY_BREAK case 125: YY_RULE_SETUP -#line 327 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 327 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(CastOpVal, SIToFPOp, SITOFP); } YY_BREAK case 126: YY_RULE_SETUP -#line 328 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 328 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(CastOpVal, PtrToIntOp, PTRTOINT); } YY_BREAK case 127: YY_RULE_SETUP -#line 329 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 329 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(CastOpVal, IntToPtrOp, INTTOPTR); } YY_BREAK case 128: YY_RULE_SETUP -#line 330 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 330 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(CastOpVal, BitCastOp, BITCAST); } YY_BREAK case 129: YY_RULE_SETUP -#line 331 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 331 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(OtherOpVal, SelectOp, SELECT); } YY_BREAK case 130: YY_RULE_SETUP -#line 332 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 332 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l" { return VANEXT_old; } YY_BREAK case 131: YY_RULE_SETUP -#line 333 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 333 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l" { return VAARG_old; } YY_BREAK case 132: YY_RULE_SETUP -#line 334 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 334 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(OtherOpVal, VAArg , VAARG); } YY_BREAK case 133: YY_RULE_SETUP -#line 335 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 335 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(TermOpVal, RetOp, RET); } YY_BREAK case 134: YY_RULE_SETUP -#line 336 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 336 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(TermOpVal, BrOp, BR); } YY_BREAK case 135: YY_RULE_SETUP -#line 337 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 337 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(TermOpVal, SwitchOp, SWITCH); } YY_BREAK case 136: YY_RULE_SETUP -#line 338 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 338 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(TermOpVal, InvokeOp, INVOKE); } YY_BREAK case 137: YY_RULE_SETUP -#line 339 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 339 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l" { return UNWIND; } YY_BREAK case 138: YY_RULE_SETUP -#line 340 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 340 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(TermOpVal, UnreachableOp, UNREACHABLE); } YY_BREAK case 139: YY_RULE_SETUP -#line 342 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 342 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(MemOpVal, MallocOp, MALLOC); } YY_BREAK case 140: YY_RULE_SETUP -#line 343 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 343 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(MemOpVal, AllocaOp, ALLOCA); } YY_BREAK case 141: YY_RULE_SETUP -#line 344 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 344 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(MemOpVal, FreeOp, FREE); } YY_BREAK case 142: YY_RULE_SETUP -#line 345 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 345 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(MemOpVal, LoadOp, LOAD); } YY_BREAK case 143: YY_RULE_SETUP -#line 346 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 346 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(MemOpVal, StoreOp, STORE); } YY_BREAK case 144: YY_RULE_SETUP -#line 347 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 347 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(MemOpVal, GetElementPtrOp, GETELEMENTPTR); } YY_BREAK case 145: YY_RULE_SETUP -#line 349 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 349 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(OtherOpVal, ExtractElementOp, EXTRACTELEMENT); } YY_BREAK case 146: YY_RULE_SETUP -#line 350 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 350 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(OtherOpVal, InsertElementOp, INSERTELEMENT); } YY_BREAK case 147: YY_RULE_SETUP -#line 351 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 351 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l" { RET_TOK(OtherOpVal, ShuffleVectorOp, SHUFFLEVECTOR); } YY_BREAK case 148: YY_RULE_SETUP -#line 354 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 354 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l" { UnEscapeLexed(yytext+1); Upgradelval.StrVal = strdup(yytext+1); // Skip % @@ -2081,7 +2081,7 @@ YY_BREAK case 149: YY_RULE_SETUP -#line 359 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 359 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l" { yytext[strlen(yytext)-1] = 0; // nuke colon UnEscapeLexed(yytext); @@ -2091,7 +2091,7 @@ YY_BREAK case 150: YY_RULE_SETUP -#line 365 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 365 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l" { yytext[strlen(yytext)-2] = 0; // nuke colon, end quote UnEscapeLexed(yytext+1); @@ -2101,7 +2101,7 @@ YY_BREAK case 151: YY_RULE_SETUP -#line 372 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 372 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l" { // Note that we cannot unescape a string constant here! The // string constant might contain a \00 which would not be // understood by the string stuff. It is valid to make a @@ -2114,12 +2114,12 @@ YY_BREAK case 152: YY_RULE_SETUP -#line 383 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 383 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l" { Upgradelval.UInt64Val = atoull(yytext); return EUINT64VAL; } YY_BREAK case 153: YY_RULE_SETUP -#line 384 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 384 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l" { uint64_t Val = atoull(yytext+1); // +1: we have bigger negative range @@ -2131,7 +2131,7 @@ YY_BREAK case 154: YY_RULE_SETUP -#line 392 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 392 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l" { Upgradelval.UInt64Val = HexIntToVal(yytext+3); return yytext[0] == 's' ? ESINT64VAL : EUINT64VAL; @@ -2139,7 +2139,7 @@ YY_BREAK case 155: YY_RULE_SETUP -#line 397 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 397 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l" { uint64_t Val = atoull(yytext+1); if ((unsigned)Val != Val) @@ -2150,7 +2150,7 @@ YY_BREAK case 156: YY_RULE_SETUP -#line 404 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 404 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l" { uint64_t Val = atoull(yytext+2); // +1: we have bigger negative range @@ -2162,16 +2162,16 @@ YY_BREAK case 157: YY_RULE_SETUP -#line 413 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 413 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l" { Upgradelval.FPVal = atof(yytext); return FPVAL; } YY_BREAK case 158: YY_RULE_SETUP -#line 414 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 414 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l" { Upgradelval.FPVal = HexToFP(yytext); return FPVAL; } YY_BREAK case YY_STATE_EOF(INITIAL): -#line 416 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 416 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l" { /* Make sure to free the internal buffers for flex when we are * done reading our input! @@ -2182,17 +2182,17 @@ YY_BREAK case 159: YY_RULE_SETUP -#line 424 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 424 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l" { /* Ignore whitespace */ } YY_BREAK case 160: YY_RULE_SETUP -#line 425 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 425 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l" { return yytext[0]; } YY_BREAK case 161: YY_RULE_SETUP -#line 427 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 427 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l" YY_FATAL_ERROR( "flex scanner jammed" ); YY_BREAK #line 2199 "UpgradeLexer.cpp" @@ -3073,5 +3073,5 @@ return 0; } #endif -#line 427 "/proj/llvm/llvm-1/tools/llvm-upgrade/UpgradeLexer.l" +#line 427 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeLexer.l" Index: llvm/tools/llvm-upgrade/UpgradeParser.cpp.cvs diff -u llvm/tools/llvm-upgrade/UpgradeParser.cpp.cvs:1.77 llvm/tools/llvm-upgrade/UpgradeParser.cpp.cvs:1.77.2.1 --- llvm/tools/llvm-upgrade/UpgradeParser.cpp.cvs:1.77 Sun Apr 15 22:05:01 2007 +++ llvm/tools/llvm-upgrade/UpgradeParser.cpp.cvs Thu May 17 17:59:29 2007 @@ -370,7 +370,7 @@ /* Copy the first part of user declarations. */ -#line 14 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 14 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" #include "UpgradeInternals.h" #include "llvm/CallingConv.h" @@ -422,6 +422,7 @@ static bool NewVarArgs; static BasicBlock *CurBB; static GlobalVariable *CurGV; +static unsigned lastCallingConv; // This contains info used when building the body of a function. It is // destroyed when the function is completed. @@ -740,19 +741,18 @@ if (F1->getReturnType() != F2->getReturnType() || F1->getNumParams() != F2->getNumParams()) return false; - ParamAttrsList PAL1; - if (F1->getParamAttrs()) - PAL1 = *F1->getParamAttrs(); - ParamAttrsList PAL2; - if (F2->getParamAttrs()) - PAL2 = *F2->getParamAttrs(); - if (PAL1.getParamAttrs(0) != PAL2.getParamAttrs(0)) + const ParamAttrsList *PAL1 = F1->getParamAttrs(); + const ParamAttrsList *PAL2 = F2->getParamAttrs(); + if (PAL1 && !PAL2 || PAL2 && !PAL1) + return false; + if (PAL1 && PAL2 && ((PAL1->size() != PAL2->size()) || + (PAL1->getParamAttrs(0) != PAL2->getParamAttrs(0)))) return false; unsigned SRetMask = ~unsigned(ParamAttr::StructRet); for (unsigned i = 0; i < F1->getNumParams(); ++i) { - if (F1->getParamType(i) != F2->getParamType(i) || - unsigned(PAL1.getParamAttrs(i+1)) & SRetMask != - unsigned(PAL2.getParamAttrs(i+1)) & SRetMask) + if (F1->getParamType(i) != F2->getParamType(i) || (PAL1 && PAL2 && + (unsigned(PAL1->getParamAttrs(i+1)) & SRetMask != + unsigned(PAL2->getParamAttrs(i+1)) & SRetMask))) return false; } return true; @@ -1820,6 +1820,10 @@ std::vector& Args) { std::string Name = ID.Type == ValID::NameVal ? ID.Name : ""; + if (Name.length() <= 5 || Name[0] != 'l' || Name[1] != 'l' || + Name[2] != 'v' || Name[3] != 'm' || Name[4] != '.') + return 0; + switch (Name[5]) { case 'i': if (Name == "llvm.isunordered.f32" || Name == "llvm.isunordered.f64") { @@ -2147,7 +2151,7 @@ #endif #if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED) -#line 1771 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 1775 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" typedef union YYSTYPE { llvm::Module *ModuleVal; llvm::Function *FunctionVal; @@ -2190,7 +2194,7 @@ llvm::Module::Endianness Endianness; } YYSTYPE; /* Line 196 of yacc.c. */ -#line 2194 "UpgradeParser.tab.c" +#line 2198 "UpgradeParser.tab.c" # define yystype YYSTYPE /* obsolescent; will be withdrawn */ # define YYSTYPE_IS_DECLARED 1 # define YYSTYPE_IS_TRIVIAL 1 @@ -2202,7 +2206,7 @@ /* Line 219 of yacc.c. */ -#line 2206 "UpgradeParser.tab.c" +#line 2210 "UpgradeParser.tab.c" #if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__) # define YYSIZE_T __SIZE_TYPE__ @@ -2562,38 +2566,38 @@ /* YYRLINE[YYN] -- source line where rule number YYN was defined. */ static const unsigned short int yyrline[] = { - 0, 1911, 1911, 1912, 1920, 1921, 1931, 1931, 1931, 1931, - 1931, 1931, 1931, 1931, 1931, 1931, 1931, 1935, 1935, 1935, - 1939, 1939, 1939, 1939, 1939, 1939, 1943, 1943, 1944, 1944, - 1945, 1945, 1946, 1946, 1947, 1947, 1951, 1951, 1952, 1952, - 1953, 1953, 1954, 1954, 1955, 1955, 1956, 1956, 1957, 1957, - 1958, 1959, 1962, 1962, 1962, 1962, 1966, 1966, 1966, 1966, - 1966, 1966, 1966, 1967, 1967, 1967, 1967, 1967, 1967, 1973, - 1973, 1973, 1973, 1977, 1977, 1977, 1977, 1981, 1981, 1985, - 1985, 1990, 1993, 1998, 1999, 2000, 2001, 2002, 2003, 2004, - 2005, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2026, - 2027, 2035, 2036, 2044, 2053, 2054, 2061, 2062, 2066, 2070, - 2086, 2087, 2094, 2095, 2102, 2110, 2110, 2110, 2110, 2110, - 2110, 2110, 2111, 2111, 2111, 2111, 2111, 2116, 2120, 2124, - 2129, 2138, 2156, 2162, 2175, 2186, 2190, 2203, 2207, 2221, - 2225, 2232, 2233, 2239, 2246, 2258, 2288, 2301, 2324, 2352, - 2374, 2385, 2407, 2418, 2427, 2432, 2491, 2498, 2506, 2513, - 2520, 2524, 2528, 2537, 2552, 2564, 2573, 2601, 2614, 2623, - 2629, 2635, 2646, 2652, 2658, 2669, 2670, 2679, 2680, 2692, - 2701, 2702, 2703, 2704, 2705, 2721, 2741, 2743, 2745, 2745, - 2752, 2752, 2760, 2760, 2768, 2768, 2777, 2779, 2781, 2786, - 2800, 2801, 2805, 2808, 2816, 2820, 2827, 2831, 2835, 2839, - 2847, 2847, 2851, 2852, 2856, 2864, 2869, 2877, 2878, 2885, - 2892, 2896, 3083, 3083, 3087, 3087, 3097, 3097, 3101, 3106, - 3107, 3108, 3112, 3113, 3112, 3125, 3126, 3131, 3132, 3133, - 3134, 3138, 3142, 3143, 3144, 3145, 3166, 3170, 3184, 3185, - 3190, 3190, 3198, 3208, 3211, 3220, 3231, 3236, 3245, 3256, - 3256, 3259, 3263, 3267, 3272, 3282, 3300, 3309, 3379, 3383, - 3390, 3402, 3417, 3447, 3457, 3467, 3471, 3478, 3479, 3483, - 3486, 3492, 3511, 3529, 3545, 3559, 3573, 3584, 3602, 3611, - 3620, 3627, 3648, 3672, 3678, 3684, 3690, 3706, 3796, 3804, - 3805, 3809, 3810, 3814, 3820, 3827, 3833, 3840, 3847, 3860, - 3886 + 0, 1915, 1915, 1916, 1924, 1925, 1935, 1935, 1935, 1935, + 1935, 1935, 1935, 1935, 1935, 1935, 1935, 1939, 1939, 1939, + 1943, 1943, 1943, 1943, 1943, 1943, 1947, 1947, 1948, 1948, + 1949, 1949, 1950, 1950, 1951, 1951, 1955, 1955, 1956, 1956, + 1957, 1957, 1958, 1958, 1959, 1959, 1960, 1960, 1961, 1961, + 1962, 1963, 1966, 1966, 1966, 1966, 1970, 1970, 1970, 1970, + 1970, 1970, 1970, 1971, 1971, 1971, 1971, 1971, 1971, 1977, + 1977, 1977, 1977, 1981, 1981, 1981, 1981, 1985, 1985, 1989, + 1989, 1994, 1997, 2002, 2003, 2004, 2005, 2006, 2007, 2008, + 2009, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2030, + 2031, 2039, 2040, 2048, 2057, 2058, 2065, 2066, 2070, 2074, + 2090, 2091, 2098, 2099, 2106, 2114, 2114, 2114, 2114, 2114, + 2114, 2114, 2115, 2115, 2115, 2115, 2115, 2120, 2124, 2128, + 2133, 2142, 2169, 2175, 2188, 2199, 2203, 2216, 2220, 2234, + 2238, 2245, 2246, 2252, 2259, 2271, 2301, 2314, 2337, 2365, + 2387, 2398, 2420, 2431, 2440, 2445, 2504, 2511, 2519, 2526, + 2533, 2537, 2541, 2550, 2565, 2577, 2586, 2614, 2627, 2636, + 2642, 2648, 2659, 2665, 2671, 2682, 2683, 2692, 2693, 2705, + 2714, 2715, 2716, 2717, 2718, 2734, 2754, 2756, 2758, 2758, + 2765, 2765, 2773, 2773, 2781, 2781, 2790, 2792, 2794, 2799, + 2813, 2814, 2818, 2821, 2829, 2833, 2840, 2844, 2848, 2852, + 2860, 2860, 2864, 2865, 2869, 2877, 2882, 2890, 2891, 2898, + 2905, 2909, 3099, 3099, 3103, 3103, 3113, 3113, 3117, 3122, + 3123, 3124, 3128, 3129, 3128, 3141, 3142, 3147, 3148, 3149, + 3150, 3154, 3158, 3159, 3160, 3161, 3182, 3186, 3200, 3201, + 3206, 3206, 3214, 3224, 3227, 3236, 3247, 3252, 3261, 3272, + 3272, 3275, 3279, 3283, 3288, 3298, 3316, 3325, 3398, 3402, + 3409, 3421, 3436, 3466, 3476, 3486, 3490, 3497, 3498, 3502, + 3505, 3511, 3530, 3548, 3564, 3578, 3592, 3603, 3621, 3630, + 3639, 3646, 3667, 3691, 3697, 3703, 3709, 3725, 3818, 3826, + 3827, 3831, 3832, 3836, 3842, 3849, 3855, 3862, 3869, 3882, + 3908 }; #endif @@ -3983,7 +3987,7 @@ switch (yyn) { case 3: -#line 1912 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 1916 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { if ((yyvsp[0].UIntVal) > (uint32_t)INT32_MAX) // Outside of my range! error("Value too large for type"); @@ -3992,7 +3996,7 @@ break; case 5: -#line 1921 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 1925 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { if ((yyvsp[0].UInt64Val) > (uint64_t)INT64_MAX) // Outside of my range! error("Value too large for type"); @@ -4001,240 +4005,240 @@ break; case 26: -#line 1943 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 1947 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { (yyval.IPred) = ICmpInst::ICMP_EQ; ;} break; case 27: -#line 1943 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 1947 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { (yyval.IPred) = ICmpInst::ICMP_NE; ;} break; case 28: -#line 1944 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 1948 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { (yyval.IPred) = ICmpInst::ICMP_SLT; ;} break; case 29: -#line 1944 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 1948 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { (yyval.IPred) = ICmpInst::ICMP_SGT; ;} break; case 30: -#line 1945 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 1949 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { (yyval.IPred) = ICmpInst::ICMP_SLE; ;} break; case 31: -#line 1945 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 1949 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { (yyval.IPred) = ICmpInst::ICMP_SGE; ;} break; case 32: -#line 1946 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 1950 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { (yyval.IPred) = ICmpInst::ICMP_ULT; ;} break; case 33: -#line 1946 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 1950 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { (yyval.IPred) = ICmpInst::ICMP_UGT; ;} break; case 34: -#line 1947 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 1951 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { (yyval.IPred) = ICmpInst::ICMP_ULE; ;} break; case 35: -#line 1947 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 1951 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { (yyval.IPred) = ICmpInst::ICMP_UGE; ;} break; case 36: -#line 1951 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 1955 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { (yyval.FPred) = FCmpInst::FCMP_OEQ; ;} break; case 37: -#line 1951 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 1955 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { (yyval.FPred) = FCmpInst::FCMP_ONE; ;} break; case 38: -#line 1952 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 1956 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { (yyval.FPred) = FCmpInst::FCMP_OLT; ;} break; case 39: -#line 1952 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 1956 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { (yyval.FPred) = FCmpInst::FCMP_OGT; ;} break; case 40: -#line 1953 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 1957 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { (yyval.FPred) = FCmpInst::FCMP_OLE; ;} break; case 41: -#line 1953 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 1957 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { (yyval.FPred) = FCmpInst::FCMP_OGE; ;} break; case 42: -#line 1954 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 1958 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { (yyval.FPred) = FCmpInst::FCMP_ORD; ;} break; case 43: -#line 1954 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 1958 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { (yyval.FPred) = FCmpInst::FCMP_UNO; ;} break; case 44: -#line 1955 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 1959 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { (yyval.FPred) = FCmpInst::FCMP_UEQ; ;} break; case 45: -#line 1955 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 1959 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { (yyval.FPred) = FCmpInst::FCMP_UNE; ;} break; case 46: -#line 1956 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 1960 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { (yyval.FPred) = FCmpInst::FCMP_ULT; ;} break; case 47: -#line 1956 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 1960 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { (yyval.FPred) = FCmpInst::FCMP_UGT; ;} break; case 48: -#line 1957 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 1961 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { (yyval.FPred) = FCmpInst::FCMP_ULE; ;} break; case 49: -#line 1957 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 1961 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { (yyval.FPred) = FCmpInst::FCMP_UGE; ;} break; case 50: -#line 1958 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 1962 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { (yyval.FPred) = FCmpInst::FCMP_TRUE; ;} break; case 51: -#line 1959 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 1963 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { (yyval.FPred) = FCmpInst::FCMP_FALSE; ;} break; case 81: -#line 1990 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 1994 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { (yyval.StrVal) = (yyvsp[-1].StrVal); ;} break; case 82: -#line 1993 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 1997 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { (yyval.StrVal) = 0; ;} break; case 83: -#line 1998 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 2002 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { (yyval.Linkage) = GlobalValue::InternalLinkage; ;} break; case 84: -#line 1999 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 2003 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { (yyval.Linkage) = GlobalValue::LinkOnceLinkage; ;} break; case 85: -#line 2000 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 2004 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { (yyval.Linkage) = GlobalValue::WeakLinkage; ;} break; case 86: -#line 2001 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 2005 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { (yyval.Linkage) = GlobalValue::AppendingLinkage; ;} break; case 87: -#line 2002 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 2006 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { (yyval.Linkage) = GlobalValue::DLLImportLinkage; ;} break; case 88: -#line 2003 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 2007 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { (yyval.Linkage) = GlobalValue::DLLExportLinkage; ;} break; case 89: -#line 2004 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 2008 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { (yyval.Linkage) = GlobalValue::ExternalWeakLinkage; ;} break; case 90: -#line 2005 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 2009 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { (yyval.Linkage) = GlobalValue::ExternalLinkage; ;} break; case 91: -#line 2009 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" - { (yyval.UIntVal) = OldCallingConv::C; ;} +#line 2013 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" + { (yyval.UIntVal) = lastCallingConv = OldCallingConv::C; ;} break; case 92: -#line 2010 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" - { (yyval.UIntVal) = OldCallingConv::C; ;} +#line 2014 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" + { (yyval.UIntVal) = lastCallingConv = OldCallingConv::C; ;} break; case 93: -#line 2011 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" - { (yyval.UIntVal) = OldCallingConv::CSRet; ;} +#line 2015 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" + { (yyval.UIntVal) = lastCallingConv = OldCallingConv::CSRet; ;} break; case 94: -#line 2012 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" - { (yyval.UIntVal) = OldCallingConv::Fast; ;} +#line 2016 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" + { (yyval.UIntVal) = lastCallingConv = OldCallingConv::Fast; ;} break; case 95: -#line 2013 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" - { (yyval.UIntVal) = OldCallingConv::Cold; ;} +#line 2017 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" + { (yyval.UIntVal) = lastCallingConv = OldCallingConv::Cold; ;} break; case 96: -#line 2014 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" - { (yyval.UIntVal) = OldCallingConv::X86_StdCall; ;} +#line 2018 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" + { (yyval.UIntVal) = lastCallingConv = OldCallingConv::X86_StdCall; ;} break; case 97: -#line 2015 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" - { (yyval.UIntVal) = OldCallingConv::X86_FastCall; ;} +#line 2019 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" + { (yyval.UIntVal) = lastCallingConv = OldCallingConv::X86_FastCall; ;} break; case 98: -#line 2016 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 2020 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { if ((unsigned)(yyvsp[0].UInt64Val) != (yyvsp[0].UInt64Val)) error("Calling conv too large"); - (yyval.UIntVal) = (yyvsp[0].UInt64Val); + (yyval.UIntVal) = lastCallingConv = (yyvsp[0].UInt64Val); ;} break; case 99: -#line 2026 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 2030 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { (yyval.UIntVal) = 0; ;} break; case 100: -#line 2027 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 2031 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { (yyval.UIntVal) = (yyvsp[0].UInt64Val); if ((yyval.UIntVal) != 0 && !isPowerOf2_32((yyval.UIntVal))) @@ -4243,12 +4247,12 @@ break; case 101: -#line 2035 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 2039 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { (yyval.UIntVal) = 0; ;} break; case 102: -#line 2036 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 2040 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { (yyval.UIntVal) = (yyvsp[0].UInt64Val); if ((yyval.UIntVal) != 0 && !isPowerOf2_32((yyval.UIntVal))) @@ -4257,7 +4261,7 @@ break; case 103: -#line 2044 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 2048 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { for (unsigned i = 0, e = strlen((yyvsp[0].StrVal)); i != e; ++i) if ((yyvsp[0].StrVal)[i] == '"' || (yyvsp[0].StrVal)[i] == '\\') @@ -4267,27 +4271,27 @@ break; case 104: -#line 2053 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 2057 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { (yyval.StrVal) = 0; ;} break; case 105: -#line 2054 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 2058 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { (yyval.StrVal) = (yyvsp[0].StrVal); ;} break; case 106: -#line 2061 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 2065 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" {;} break; case 107: -#line 2062 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 2066 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" {;} break; case 108: -#line 2066 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 2070 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { CurGV->setSection((yyvsp[0].StrVal)); free((yyvsp[0].StrVal)); @@ -4295,7 +4299,7 @@ break; case 109: -#line 2070 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 2074 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { if ((yyvsp[0].UInt64Val) != 0 && !isPowerOf2_32((yyvsp[0].UInt64Val))) error("Alignment must be a power of two"); @@ -4305,7 +4309,7 @@ break; case 111: -#line 2087 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 2091 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { (yyval.TypeVal).PAT = new PATypeHolder((yyvsp[0].PrimType).T); (yyval.TypeVal).S.makeSignless(); @@ -4313,7 +4317,7 @@ break; case 113: -#line 2095 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 2099 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { (yyval.TypeVal).PAT = new PATypeHolder((yyvsp[0].PrimType).T); (yyval.TypeVal).S.makeSignless(); @@ -4321,7 +4325,7 @@ break; case 114: -#line 2102 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 2106 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { if (!UpRefs.empty()) error("Invalid upreference in type: " + (*(yyvsp[0].TypeVal).PAT)->getDescription()); @@ -4330,7 +4334,7 @@ break; case 127: -#line 2116 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 2120 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { (yyval.TypeVal).PAT = new PATypeHolder((yyvsp[0].PrimType).T); (yyval.TypeVal).S.copy((yyvsp[0].PrimType).S); @@ -4338,7 +4342,7 @@ break; case 128: -#line 2120 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 2124 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { (yyval.TypeVal).PAT = new PATypeHolder(OpaqueType::get()); (yyval.TypeVal).S.makeSignless(); @@ -4346,7 +4350,7 @@ break; case 129: -#line 2124 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 2128 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { // Named types are also simple types... (yyval.TypeVal).S.copy(getTypeSign((yyvsp[0].ValIDVal))); const Type* tmp = getType((yyvsp[0].ValIDVal)); @@ -4355,7 +4359,7 @@ break; case 130: -#line 2129 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 2133 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { // Type UpReference if ((yyvsp[0].UInt64Val) > (uint64_t)~0U) error("Value out of range"); @@ -4368,7 +4372,7 @@ break; case 131: -#line 2138 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 2142 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { // Function derived type? (yyval.TypeVal).S.makeComposite((yyvsp[-3].TypeVal).S); std::vector Params; @@ -4380,8 +4384,17 @@ bool isVarArg = Params.size() && Params.back() == Type::VoidTy; if (isVarArg) Params.pop_back(); + ParamAttrsList *PAL = 0; + if (lastCallingConv == OldCallingConv::CSRet) { + ParamAttrsVector Attrs; + ParamAttrsWithIndex PAWI; + PAWI.index = 1; PAWI.attrs = ParamAttr::StructRet; // first arg + Attrs.push_back(PAWI); + PAL = ParamAttrsList::get(Attrs); + } + const FunctionType *FTy = - FunctionType::get((yyvsp[-3].TypeVal).PAT->get(), Params, isVarArg, 0); + FunctionType::get((yyvsp[-3].TypeVal).PAT->get(), Params, isVarArg, PAL); (yyval.TypeVal).PAT = new PATypeHolder( HandleUpRefs(FTy, (yyval.TypeVal).S) ); delete (yyvsp[-3].TypeVal).PAT; // Delete the return type handle @@ -4390,7 +4403,7 @@ break; case 132: -#line 2156 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 2169 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { // Sized array type? (yyval.TypeVal).S.makeComposite((yyvsp[-1].TypeVal).S); (yyval.TypeVal).PAT = new PATypeHolder(HandleUpRefs(ArrayType::get((yyvsp[-1].TypeVal).PAT->get(), @@ -4400,7 +4413,7 @@ break; case 133: -#line 2162 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 2175 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { // Vector type? const llvm::Type* ElemTy = (yyvsp[-1].TypeVal).PAT->get(); if ((unsigned)(yyvsp[-3].UInt64Val) != (yyvsp[-3].UInt64Val)) @@ -4417,7 +4430,7 @@ break; case 134: -#line 2175 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 2188 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { // Structure type? std::vector Elements; (yyval.TypeVal).S.makeComposite(); @@ -4432,7 +4445,7 @@ break; case 135: -#line 2186 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 2199 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { // Empty structure type? (yyval.TypeVal).PAT = new PATypeHolder(StructType::get(std::vector())); (yyval.TypeVal).S.makeComposite(); @@ -4440,7 +4453,7 @@ break; case 136: -#line 2190 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 2203 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { // Packed Structure type? (yyval.TypeVal).S.makeComposite(); std::vector Elements; @@ -4457,7 +4470,7 @@ break; case 137: -#line 2203 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 2216 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { // Empty packed structure type? (yyval.TypeVal).PAT = new PATypeHolder(StructType::get(std::vector(),true)); (yyval.TypeVal).S.makeComposite(); @@ -4465,7 +4478,7 @@ break; case 138: -#line 2207 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 2220 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { // Pointer type? if ((yyvsp[-1].TypeVal).PAT->get() == Type::LabelTy) error("Cannot form a pointer to a basic block"); @@ -4477,7 +4490,7 @@ break; case 139: -#line 2221 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 2234 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { (yyval.TypeList) = new std::list(); (yyval.TypeList)->push_back((yyvsp[0].TypeVal)); @@ -4485,14 +4498,14 @@ break; case 140: -#line 2225 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 2238 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { ((yyval.TypeList)=(yyvsp[-2].TypeList))->push_back((yyvsp[0].TypeVal)); ;} break; case 142: -#line 2233 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 2246 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { PATypeInfo VoidTI; VoidTI.PAT = new PATypeHolder(Type::VoidTy); @@ -4502,7 +4515,7 @@ break; case 143: -#line 2239 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 2252 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { (yyval.TypeList) = new std::list(); PATypeInfo VoidTI; @@ -4513,14 +4526,14 @@ break; case 144: -#line 2246 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 2259 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { (yyval.TypeList) = new std::list(); ;} break; case 145: -#line 2258 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 2271 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { // Nonempty unsized arr const ArrayType *ATy = dyn_cast((yyvsp[-3].TypeVal).PAT->get()); if (ATy == 0) @@ -4554,7 +4567,7 @@ break; case 146: -#line 2288 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 2301 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { const ArrayType *ATy = dyn_cast((yyvsp[-2].TypeVal).PAT->get()); if (ATy == 0) @@ -4571,7 +4584,7 @@ break; case 147: -#line 2301 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 2314 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { const ArrayType *ATy = dyn_cast((yyvsp[-2].TypeVal).PAT->get()); if (ATy == 0) @@ -4598,7 +4611,7 @@ break; case 148: -#line 2324 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 2337 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { // Nonempty unsized arr const VectorType *PTy = dyn_cast((yyvsp[-3].TypeVal).PAT->get()); if (PTy == 0) @@ -4630,7 +4643,7 @@ break; case 149: -#line 2352 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 2365 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { const StructType *STy = dyn_cast((yyvsp[-3].TypeVal).PAT->get()); if (STy == 0) @@ -4656,7 +4669,7 @@ break; case 150: -#line 2374 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 2387 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { const StructType *STy = dyn_cast((yyvsp[-2].TypeVal).PAT->get()); if (STy == 0) @@ -4671,7 +4684,7 @@ break; case 151: -#line 2385 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 2398 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { const StructType *STy = dyn_cast((yyvsp[-5].TypeVal).PAT->get()); if (STy == 0) @@ -4697,7 +4710,7 @@ break; case 152: -#line 2407 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 2420 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { const StructType *STy = dyn_cast((yyvsp[-4].TypeVal).PAT->get()); if (STy == 0) @@ -4712,7 +4725,7 @@ break; case 153: -#line 2418 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 2431 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { const PointerType *PTy = dyn_cast((yyvsp[-1].TypeVal).PAT->get()); if (PTy == 0) @@ -4725,7 +4738,7 @@ break; case 154: -#line 2427 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 2440 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { (yyval.ConstVal).C = UndefValue::get((yyvsp[-1].TypeVal).PAT->get()); (yyval.ConstVal).S.copy((yyvsp[-1].TypeVal).S); @@ -4734,7 +4747,7 @@ break; case 155: -#line 2432 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 2445 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { const PointerType *Ty = dyn_cast((yyvsp[-1].TypeVal).PAT->get()); if (Ty == 0) @@ -4797,7 +4810,7 @@ break; case 156: -#line 2491 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 2504 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { if ((yyvsp[-1].TypeVal).PAT->get() != (yyvsp[0].ConstVal).C->getType()) error("Mismatched types for constant expression"); @@ -4808,7 +4821,7 @@ break; case 157: -#line 2498 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 2511 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { const Type *Ty = (yyvsp[-1].TypeVal).PAT->get(); if (isa(Ty) || Ty == Type::LabelTy || isa(Ty)) @@ -4820,7 +4833,7 @@ break; case 158: -#line 2506 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 2519 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { // integral constants const Type *Ty = (yyvsp[-1].PrimType).T; if (!ConstantInt::isValueValidForType(Ty, (yyvsp[0].SInt64Val))) @@ -4831,7 +4844,7 @@ break; case 159: -#line 2513 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 2526 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { // integral constants const Type *Ty = (yyvsp[-1].PrimType).T; if (!ConstantInt::isValueValidForType(Ty, (yyvsp[0].UInt64Val))) @@ -4842,7 +4855,7 @@ break; case 160: -#line 2520 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 2533 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { // Boolean constants (yyval.ConstVal).C = ConstantInt::get(Type::Int1Ty, true); (yyval.ConstVal).S.makeUnsigned(); @@ -4850,7 +4863,7 @@ break; case 161: -#line 2524 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 2537 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { // Boolean constants (yyval.ConstVal).C = ConstantInt::get(Type::Int1Ty, false); (yyval.ConstVal).S.makeUnsigned(); @@ -4858,7 +4871,7 @@ break; case 162: -#line 2528 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 2541 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { // Float & Double constants if (!ConstantFP::isValueValidForType((yyvsp[-1].PrimType).T, (yyvsp[0].FPVal))) error("Floating point constant invalid for type"); @@ -4868,7 +4881,7 @@ break; case 163: -#line 2537 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 2550 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { const Type* SrcTy = (yyvsp[-3].ConstVal).C->getType(); const Type* DstTy = (yyvsp[-1].TypeVal).PAT->get(); @@ -4887,7 +4900,7 @@ break; case 164: -#line 2552 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 2565 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { const Type *Ty = (yyvsp[-2].ConstVal).C->getType(); if (!isa(Ty)) @@ -4903,7 +4916,7 @@ break; case 165: -#line 2564 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 2577 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { if (!(yyvsp[-5].ConstVal).C->getType()->isInteger() || cast((yyvsp[-5].ConstVal).C->getType())->getBitWidth() != 1) @@ -4916,7 +4929,7 @@ break; case 166: -#line 2573 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 2586 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { const Type *Ty = (yyvsp[-3].ConstVal).C->getType(); if (Ty != (yyvsp[-1].ConstVal).C->getType()) @@ -4948,7 +4961,7 @@ break; case 167: -#line 2601 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 2614 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { const Type* Ty = (yyvsp[-3].ConstVal).C->getType(); if (Ty != (yyvsp[-1].ConstVal).C->getType()) @@ -4965,7 +4978,7 @@ break; case 168: -#line 2614 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 2627 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { const Type* Ty = (yyvsp[-3].ConstVal).C->getType(); if (Ty != (yyvsp[-1].ConstVal).C->getType()) @@ -4978,7 +4991,7 @@ break; case 169: -#line 2623 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 2636 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { if ((yyvsp[-3].ConstVal).C->getType() != (yyvsp[-1].ConstVal).C->getType()) error("icmp operand types must match"); @@ -4988,7 +5001,7 @@ break; case 170: -#line 2629 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 2642 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { if ((yyvsp[-3].ConstVal).C->getType() != (yyvsp[-1].ConstVal).C->getType()) error("fcmp operand types must match"); @@ -4998,7 +5011,7 @@ break; case 171: -#line 2635 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 2648 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { if (!(yyvsp[-1].ConstVal).C->getType()->isInteger() || cast((yyvsp[-1].ConstVal).C->getType())->getBitWidth() != 8) @@ -5013,7 +5026,7 @@ break; case 172: -#line 2646 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 2659 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { if (!ExtractElementInst::isValidOperands((yyvsp[-3].ConstVal).C, (yyvsp[-1].ConstVal).C)) error("Invalid extractelement operands"); @@ -5023,7 +5036,7 @@ break; case 173: -#line 2652 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 2665 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { if (!InsertElementInst::isValidOperands((yyvsp[-5].ConstVal).C, (yyvsp[-3].ConstVal).C, (yyvsp[-1].ConstVal).C)) error("Invalid insertelement operands"); @@ -5033,7 +5046,7 @@ break; case 174: -#line 2658 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 2671 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { if (!ShuffleVectorInst::isValidOperands((yyvsp[-5].ConstVal).C, (yyvsp[-3].ConstVal).C, (yyvsp[-1].ConstVal).C)) error("Invalid shufflevector operands"); @@ -5043,12 +5056,12 @@ break; case 175: -#line 2669 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 2682 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { ((yyval.ConstVector) = (yyvsp[-2].ConstVector))->push_back((yyvsp[0].ConstVal)); ;} break; case 176: -#line 2670 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 2683 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { (yyval.ConstVector) = new std::vector(); (yyval.ConstVector)->push_back((yyvsp[0].ConstVal)); @@ -5056,17 +5069,17 @@ break; case 177: -#line 2679 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 2692 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { (yyval.BoolVal) = false; ;} break; case 178: -#line 2680 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 2693 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { (yyval.BoolVal) = true; ;} break; case 179: -#line 2692 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 2705 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { (yyval.ModuleVal) = ParserResult = (yyvsp[0].ModuleVal); CurModule.ModuleDone(); @@ -5074,27 +5087,27 @@ break; case 180: -#line 2701 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 2714 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { (yyval.ModuleVal) = (yyvsp[-1].ModuleVal); CurFun.FunctionDone(); ;} break; case 181: -#line 2702 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 2715 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { (yyval.ModuleVal) = (yyvsp[-1].ModuleVal); ;} break; case 182: -#line 2703 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 2716 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { (yyval.ModuleVal) = (yyvsp[-3].ModuleVal); ;} break; case 183: -#line 2704 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 2717 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { (yyval.ModuleVal) = (yyvsp[-1].ModuleVal); ;} break; case 184: -#line 2705 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 2718 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { (yyval.ModuleVal) = CurModule.CurrentModule; // Emit an error if there are any unresolved types left. @@ -5110,7 +5123,7 @@ break; case 185: -#line 2721 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 2734 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { // Eagerly resolve types. This is not an optimization, this is a // requirement that is due to the fact that we could have this: @@ -5134,19 +5147,19 @@ break; case 186: -#line 2741 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 2754 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { // Function prototypes can be in const pool ;} break; case 187: -#line 2743 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 2756 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { // Asm blocks can be in the const pool ;} break; case 188: -#line 2745 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 2758 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { if ((yyvsp[0].ConstVal).C == 0) error("Global value initializer is not a constant"); @@ -5155,14 +5168,14 @@ break; case 189: -#line 2749 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 2762 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { CurGV = 0; ;} break; case 190: -#line 2752 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 2765 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { const Type *Ty = (yyvsp[0].TypeVal).PAT->get(); CurGV = ParseGlobalVariable((yyvsp[-3].StrVal), GlobalValue::ExternalLinkage, (yyvsp[-1].BoolVal), Ty, 0, @@ -5172,14 +5185,14 @@ break; case 191: -#line 2757 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 2770 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { CurGV = 0; ;} break; case 192: -#line 2760 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 2773 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { const Type *Ty = (yyvsp[0].TypeVal).PAT->get(); CurGV = ParseGlobalVariable((yyvsp[-3].StrVal), GlobalValue::DLLImportLinkage, (yyvsp[-1].BoolVal), Ty, 0, @@ -5189,14 +5202,14 @@ break; case 193: -#line 2765 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 2778 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { CurGV = 0; ;} break; case 194: -#line 2768 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 2781 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { const Type *Ty = (yyvsp[0].TypeVal).PAT->get(); CurGV = @@ -5207,32 +5220,32 @@ break; case 195: -#line 2774 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 2787 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { CurGV = 0; ;} break; case 196: -#line 2777 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 2790 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { ;} break; case 197: -#line 2779 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 2792 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { ;} break; case 198: -#line 2781 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 2794 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { ;} break; case 199: -#line 2786 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 2799 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { const std::string &AsmSoFar = CurModule.CurrentModule->getModuleInlineAsm(); char *EndStr = UnEscapeLexed((yyvsp[0].StrVal), true); @@ -5247,24 +5260,24 @@ break; case 200: -#line 2800 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 2813 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { (yyval.Endianness) = Module::BigEndian; ;} break; case 201: -#line 2801 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 2814 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { (yyval.Endianness) = Module::LittleEndian; ;} break; case 202: -#line 2805 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 2818 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { CurModule.setEndianness((yyvsp[0].Endianness)); ;} break; case 203: -#line 2808 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 2821 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { if ((yyvsp[0].UInt64Val) == 32) CurModule.setPointerSize(Module::Pointer32); @@ -5276,7 +5289,7 @@ break; case 204: -#line 2816 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 2829 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { CurModule.CurrentModule->setTargetTriple((yyvsp[0].StrVal)); free((yyvsp[0].StrVal)); @@ -5284,7 +5297,7 @@ break; case 205: -#line 2820 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 2833 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { CurModule.CurrentModule->setDataLayout((yyvsp[0].StrVal)); free((yyvsp[0].StrVal)); @@ -5292,7 +5305,7 @@ break; case 207: -#line 2831 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 2844 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { CurModule.CurrentModule->addLibrary((yyvsp[0].StrVal)); free((yyvsp[0].StrVal)); @@ -5300,7 +5313,7 @@ break; case 208: -#line 2835 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 2848 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { CurModule.CurrentModule->addLibrary((yyvsp[0].StrVal)); free((yyvsp[0].StrVal)); @@ -5308,17 +5321,17 @@ break; case 209: -#line 2839 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 2852 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { ;} break; case 213: -#line 2852 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 2865 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { (yyval.StrVal) = 0; ;} break; case 214: -#line 2856 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 2869 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { if ((yyvsp[-1].TypeVal).PAT->get() == Type::VoidTy) error("void typed arguments are invalid"); @@ -5327,7 +5340,7 @@ break; case 215: -#line 2864 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 2877 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { (yyval.ArgList) = (yyvsp[-2].ArgList); (yyval.ArgList)->push_back(*(yyvsp[0].ArgVal)); @@ -5336,7 +5349,7 @@ break; case 216: -#line 2869 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 2882 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { (yyval.ArgList) = new std::vector >(); (yyval.ArgList)->push_back(*(yyvsp[0].ArgVal)); @@ -5345,12 +5358,12 @@ break; case 217: -#line 2877 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 2890 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { (yyval.ArgList) = (yyvsp[0].ArgList); ;} break; case 218: -#line 2878 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 2891 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { (yyval.ArgList) = (yyvsp[-2].ArgList); PATypeInfo VoidTI; @@ -5361,7 +5374,7 @@ break; case 219: -#line 2885 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 2898 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { (yyval.ArgList) = new std::vector >(); PATypeInfo VoidTI; @@ -5372,12 +5385,12 @@ break; case 220: -#line 2892 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 2905 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { (yyval.ArgList) = 0; ;} break; case 221: -#line 2896 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 2909 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { UnEscapeLexed((yyvsp[-5].StrVal)); std::string FunctionName((yyvsp[-5].StrVal)); @@ -5415,15 +5428,17 @@ // Convert the CSRet calling convention into the corresponding parameter // attribute. - ParamAttrsList *ParamAttrs = 0; + ParamAttrsList *PAL = 0; if ((yyvsp[-7].UIntVal) == OldCallingConv::CSRet) { - ParamAttrs = new ParamAttrsList(); - ParamAttrs->addAttributes(0, ParamAttr::None); // result - ParamAttrs->addAttributes(1, ParamAttr::StructRet); // first arg + ParamAttrsVector Attrs; + ParamAttrsWithIndex PAWI; + PAWI.index = 1; PAWI.attrs = ParamAttr::StructRet; // first arg + Attrs.push_back(PAWI); + PAL = ParamAttrsList::get(Attrs); } const FunctionType *FT = - FunctionType::get(RetTy, ParamTyList, isVarArg, ParamAttrs); + FunctionType::get(RetTy, ParamTyList, isVarArg, PAL); const PointerType *PFT = PointerType::get(FT); delete (yyvsp[-6].TypeVal).PAT; @@ -5561,16 +5576,17 @@ } delete (yyvsp[-3].ArgList); // We're now done with the argument list } + lastCallingConv = OldCallingConv::C; ;} break; case 224: -#line 3087 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 3103 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { CurFun.Linkage = (yyvsp[0].Linkage); ;} break; case 225: -#line 3087 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 3103 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { (yyval.FunctionVal) = CurFun.CurrentFunction; @@ -5581,39 +5597,39 @@ break; case 228: -#line 3101 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 3117 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { (yyval.FunctionVal) = (yyvsp[-1].FunctionVal); ;} break; case 229: -#line 3106 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 3122 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { (yyval.Linkage) = GlobalValue::ExternalLinkage; ;} break; case 230: -#line 3107 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 3123 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { (yyval.Linkage) = GlobalValue::DLLImportLinkage; ;} break; case 231: -#line 3108 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 3124 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { (yyval.Linkage) = GlobalValue::ExternalWeakLinkage; ;} break; case 232: -#line 3112 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 3128 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { CurFun.isDeclare = true; ;} break; case 233: -#line 3113 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 3129 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { CurFun.Linkage = (yyvsp[0].Linkage); ;} break; case 234: -#line 3113 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 3129 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { (yyval.FunctionVal) = CurFun.CurrentFunction; CurFun.FunctionDone(); @@ -5622,32 +5638,32 @@ break; case 235: -#line 3125 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 3141 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { (yyval.BoolVal) = false; ;} break; case 236: -#line 3126 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 3142 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { (yyval.BoolVal) = true; ;} break; case 237: -#line 3131 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 3147 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { (yyval.ValIDVal) = ValID::create((yyvsp[0].SInt64Val)); ;} break; case 238: -#line 3132 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 3148 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { (yyval.ValIDVal) = ValID::create((yyvsp[0].UInt64Val)); ;} break; case 239: -#line 3133 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 3149 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { (yyval.ValIDVal) = ValID::create((yyvsp[0].FPVal)); ;} break; case 240: -#line 3134 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 3150 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { (yyval.ValIDVal) = ValID::create(ConstantInt::get(Type::Int1Ty, true)); (yyval.ValIDVal).S.makeUnsigned(); @@ -5655,7 +5671,7 @@ break; case 241: -#line 3138 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 3154 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { (yyval.ValIDVal) = ValID::create(ConstantInt::get(Type::Int1Ty, false)); (yyval.ValIDVal).S.makeUnsigned(); @@ -5663,22 +5679,22 @@ break; case 242: -#line 3142 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 3158 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { (yyval.ValIDVal) = ValID::createNull(); ;} break; case 243: -#line 3143 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 3159 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { (yyval.ValIDVal) = ValID::createUndef(); ;} break; case 244: -#line 3144 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 3160 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { (yyval.ValIDVal) = ValID::createZeroInit(); ;} break; case 245: -#line 3145 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 3161 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { // Nonempty unsized packed vector const Type *ETy = (*(yyvsp[-1].ConstVector))[0].C->getType(); int NumElements = (yyvsp[-1].ConstVector)->size(); @@ -5703,7 +5719,7 @@ break; case 246: -#line 3166 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 3182 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { (yyval.ValIDVal) = ValID::create((yyvsp[0].ConstVal).C); (yyval.ValIDVal).S.copy((yyvsp[0].ConstVal).S); @@ -5711,7 +5727,7 @@ break; case 247: -#line 3170 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 3186 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { char *End = UnEscapeLexed((yyvsp[-2].StrVal), true); std::string AsmStr = std::string((yyvsp[-2].StrVal), End); @@ -5724,17 +5740,17 @@ break; case 248: -#line 3184 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 3200 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { (yyval.ValIDVal) = ValID::create((yyvsp[0].SIntVal)); (yyval.ValIDVal).S.makeSignless(); ;} break; case 249: -#line 3185 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 3201 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { (yyval.ValIDVal) = ValID::create((yyvsp[0].StrVal)); (yyval.ValIDVal).S.makeSignless(); ;} break; case 252: -#line 3198 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 3214 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { const Type *Ty = (yyvsp[-1].TypeVal).PAT->get(); (yyvsp[0].ValIDVal).S.copy((yyvsp[-1].TypeVal).S); @@ -5745,21 +5761,21 @@ break; case 253: -#line 3208 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 3224 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { (yyval.FunctionVal) = (yyvsp[-1].FunctionVal); ;} break; case 254: -#line 3211 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 3227 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { // Do not allow functions with 0 basic blocks (yyval.FunctionVal) = (yyvsp[-1].FunctionVal); ;} break; case 255: -#line 3220 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 3236 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { ValueInfo VI; VI.V = (yyvsp[0].TermInstVal).TI; VI.S.copy((yyvsp[0].TermInstVal).S); setValueName(VI, (yyvsp[-1].StrVal)); @@ -5771,7 +5787,7 @@ break; case 256: -#line 3231 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 3247 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { if ((yyvsp[0].InstVal).I) (yyvsp[-1].BasicBlockVal)->getInstList().push_back((yyvsp[0].InstVal).I); @@ -5780,7 +5796,7 @@ break; case 257: -#line 3236 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 3252 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { (yyval.BasicBlockVal) = CurBB = getBBVal(ValID::create((int)CurFun.NextBBNum++),true); // Make sure to move the basic block to the correct location in the @@ -5793,7 +5809,7 @@ break; case 258: -#line 3245 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 3261 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { (yyval.BasicBlockVal) = CurBB = getBBVal(ValID::create((yyvsp[0].StrVal)), true); // Make sure to move the basic block to the correct location in the @@ -5806,7 +5822,7 @@ break; case 261: -#line 3259 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 3275 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { // Return with a result... (yyval.TermInstVal).TI = new ReturnInst((yyvsp[0].ValueVal).V); (yyval.TermInstVal).S.makeSignless(); @@ -5814,7 +5830,7 @@ break; case 262: -#line 3263 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 3279 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { // Return with no result... (yyval.TermInstVal).TI = new ReturnInst(); (yyval.TermInstVal).S.makeSignless(); @@ -5822,7 +5838,7 @@ break; case 263: -#line 3267 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 3283 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { // Unconditional Branch... BasicBlock* tmpBB = getBBVal((yyvsp[0].ValIDVal)); (yyval.TermInstVal).TI = new BranchInst(tmpBB); @@ -5831,7 +5847,7 @@ break; case 264: -#line 3272 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 3288 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { (yyvsp[-3].ValIDVal).S.makeSignless(); (yyvsp[0].ValIDVal).S.makeSignless(); @@ -5845,7 +5861,7 @@ break; case 265: -#line 3282 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 3298 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { (yyvsp[-6].ValIDVal).S.copy((yyvsp[-7].PrimType).S); Value* tmpVal = getVal((yyvsp[-7].PrimType).T, (yyvsp[-6].ValIDVal)); @@ -5867,7 +5883,7 @@ break; case 266: -#line 3300 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 3316 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { (yyvsp[-5].ValIDVal).S.copy((yyvsp[-6].PrimType).S); Value* tmpVal = getVal((yyvsp[-6].PrimType).T, (yyvsp[-5].ValIDVal)); @@ -5880,7 +5896,7 @@ break; case 267: -#line 3310 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 3326 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { const PointerType *PFTy; const FunctionType *Ty; @@ -5898,15 +5914,17 @@ FTySign.add(I->S); } } - ParamAttrsList *ParamAttrs = 0; + ParamAttrsList *PAL = 0; if ((yyvsp[-11].UIntVal) == OldCallingConv::CSRet) { - ParamAttrs = new ParamAttrsList(); - ParamAttrs->addAttributes(0, ParamAttr::None); // Function result - ParamAttrs->addAttributes(1, ParamAttr::StructRet); // first param + ParamAttrsVector Attrs; + ParamAttrsWithIndex PAWI; + PAWI.index = 1; PAWI.attrs = ParamAttr::StructRet; // first arg + Attrs.push_back(PAWI); + PAL = ParamAttrsList::get(Attrs); } bool isVarArg = ParamTypes.size() && ParamTypes.back() == Type::VoidTy; if (isVarArg) ParamTypes.pop_back(); - Ty = FunctionType::get((yyvsp[-10].TypeVal).PAT->get(), ParamTypes, isVarArg, ParamAttrs); + Ty = FunctionType::get((yyvsp[-10].TypeVal).PAT->get(), ParamTypes, isVarArg, PAL); PFTy = PointerType::get(Ty); (yyval.TermInstVal).S.copy((yyvsp[-10].TypeVal).S); } else { @@ -5949,11 +5967,12 @@ cast((yyval.TermInstVal).TI)->setCallingConv(upgradeCallingConv((yyvsp[-11].UIntVal))); delete (yyvsp[-10].TypeVal).PAT; delete (yyvsp[-7].ValueList); + lastCallingConv = OldCallingConv::C; ;} break; case 268: -#line 3379 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 3398 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { (yyval.TermInstVal).TI = new UnwindInst(); (yyval.TermInstVal).S.makeSignless(); @@ -5961,7 +5980,7 @@ break; case 269: -#line 3383 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 3402 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { (yyval.TermInstVal).TI = new UnreachableInst(); (yyval.TermInstVal).S.makeSignless(); @@ -5969,7 +5988,7 @@ break; case 270: -#line 3390 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 3409 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { (yyval.JumpTable) = (yyvsp[-5].JumpTable); (yyvsp[-3].ValIDVal).S.copy((yyvsp[-4].PrimType).S); @@ -5985,7 +6004,7 @@ break; case 271: -#line 3402 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 3421 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { (yyval.JumpTable) = new std::vector >(); (yyvsp[-3].ValIDVal).S.copy((yyvsp[-4].PrimType).S); @@ -6001,7 +6020,7 @@ break; case 272: -#line 3417 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 3436 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { bool omit = false; if ((yyvsp[-1].StrVal)) @@ -6034,7 +6053,7 @@ break; case 273: -#line 3447 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 3466 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { // Used for PHI nodes (yyval.PHIList).P = new std::list >(); (yyval.PHIList).S.copy((yyvsp[-5].TypeVal).S); @@ -6048,7 +6067,7 @@ break; case 274: -#line 3457 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 3476 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { (yyval.PHIList) = (yyvsp[-6].PHIList); (yyvsp[-3].ValIDVal).S.copy((yyvsp[-6].PHIList).S); @@ -6060,7 +6079,7 @@ break; case 275: -#line 3467 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 3486 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { // Used for call statements, and memory insts... (yyval.ValueList) = new std::vector(); (yyval.ValueList)->push_back((yyvsp[0].ValueVal)); @@ -6068,7 +6087,7 @@ break; case 276: -#line 3471 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 3490 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { (yyval.ValueList) = (yyvsp[-2].ValueList); (yyvsp[-2].ValueList)->push_back((yyvsp[0].ValueVal)); @@ -6076,26 +6095,26 @@ break; case 278: -#line 3479 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 3498 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { (yyval.ValueList) = 0; ;} break; case 279: -#line 3483 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 3502 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { (yyval.BoolVal) = true; ;} break; case 280: -#line 3486 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 3505 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { (yyval.BoolVal) = false; ;} break; case 281: -#line 3492 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 3511 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { (yyvsp[-2].ValIDVal).S.copy((yyvsp[-3].TypeVal).S); (yyvsp[0].ValIDVal).S.copy((yyvsp[-3].TypeVal).S); @@ -6118,7 +6137,7 @@ break; case 282: -#line 3511 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 3530 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { (yyvsp[-2].ValIDVal).S.copy((yyvsp[-3].TypeVal).S); (yyvsp[0].ValIDVal).S.copy((yyvsp[-3].TypeVal).S); @@ -6140,7 +6159,7 @@ break; case 283: -#line 3529 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 3548 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { (yyvsp[-2].ValIDVal).S.copy((yyvsp[-3].TypeVal).S); (yyvsp[0].ValIDVal).S.copy((yyvsp[-3].TypeVal).S); @@ -6160,7 +6179,7 @@ break; case 284: -#line 3545 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 3564 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { (yyvsp[-2].ValIDVal).S.copy((yyvsp[-3].TypeVal).S); (yyvsp[0].ValIDVal).S.copy((yyvsp[-3].TypeVal).S); @@ -6178,7 +6197,7 @@ break; case 285: -#line 3559 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 3578 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { (yyvsp[-2].ValIDVal).S.copy((yyvsp[-3].TypeVal).S); (yyvsp[0].ValIDVal).S.copy((yyvsp[-3].TypeVal).S); @@ -6196,7 +6215,7 @@ break; case 286: -#line 3573 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 3592 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { warning("Use of obsolete 'not' instruction: Replacing with 'xor"); const Type *Ty = (yyvsp[0].ValueVal).V->getType(); @@ -6211,7 +6230,7 @@ break; case 287: -#line 3584 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 3603 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { if (!(yyvsp[0].ValueVal).V->getType()->isInteger() || cast((yyvsp[0].ValueVal).V->getType())->getBitWidth() != 8) @@ -6233,7 +6252,7 @@ break; case 288: -#line 3602 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 3621 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { const Type *DstTy = (yyvsp[0].TypeVal).PAT->get(); if (!DstTy->isFirstClassType()) @@ -6246,7 +6265,7 @@ break; case 289: -#line 3611 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 3630 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { if (!(yyvsp[-4].ValueVal).V->getType()->isInteger() || cast((yyvsp[-4].ValueVal).V->getType())->getBitWidth() != 1) @@ -6259,7 +6278,7 @@ break; case 290: -#line 3620 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 3639 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { const Type *Ty = (yyvsp[0].TypeVal).PAT->get(); NewVarArgs = true; @@ -6270,7 +6289,7 @@ break; case 291: -#line 3627 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 3646 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { const Type* ArgTy = (yyvsp[-2].ValueVal).V->getType(); const Type* DstTy = (yyvsp[0].TypeVal).PAT->get(); @@ -6295,7 +6314,7 @@ break; case 292: -#line 3648 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 3667 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { const Type* ArgTy = (yyvsp[-2].ValueVal).V->getType(); const Type* DstTy = (yyvsp[0].TypeVal).PAT->get(); @@ -6323,7 +6342,7 @@ break; case 293: -#line 3672 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 3691 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { if (!ExtractElementInst::isValidOperands((yyvsp[-2].ValueVal).V, (yyvsp[0].ValueVal).V)) error("Invalid extractelement operands"); @@ -6333,7 +6352,7 @@ break; case 294: -#line 3678 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 3697 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { if (!InsertElementInst::isValidOperands((yyvsp[-4].ValueVal).V, (yyvsp[-2].ValueVal).V, (yyvsp[0].ValueVal).V)) error("Invalid insertelement operands"); @@ -6343,7 +6362,7 @@ break; case 295: -#line 3684 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 3703 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { if (!ShuffleVectorInst::isValidOperands((yyvsp[-4].ValueVal).V, (yyvsp[-2].ValueVal).V, (yyvsp[0].ValueVal).V)) error("Invalid shufflevector operands"); @@ -6353,7 +6372,7 @@ break; case 296: -#line 3690 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 3709 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { const Type *Ty = (yyvsp[0].PHIList).P->front().first->getType(); if (!Ty->isFirstClassType()) @@ -6373,7 +6392,7 @@ break; case 297: -#line 3706 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 3725 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { // Handle the short call syntax const PointerType *PFTy; @@ -6400,14 +6419,16 @@ error("Functions cannot return aggregate types"); // Deal with CSRetCC - ParamAttrsList *ParamAttrs = 0; + ParamAttrsList *PAL = 0; if ((yyvsp[-5].UIntVal) == OldCallingConv::CSRet) { - ParamAttrs = new ParamAttrsList(); - ParamAttrs->addAttributes(0, ParamAttr::None); // function result - ParamAttrs->addAttributes(1, ParamAttr::StructRet); // first parameter + ParamAttrsVector Attrs; + ParamAttrsWithIndex PAWI; + PAWI.index = 1; PAWI.attrs = ParamAttr::StructRet; // first arg + Attrs.push_back(PAWI); + PAL = ParamAttrsList::get(Attrs); } - FTy = FunctionType::get(RetTy, ParamTypes, isVarArg, ParamAttrs); + FTy = FunctionType::get(RetTy, ParamTypes, isVarArg, PAL); PFTy = PointerType::get(FTy); (yyval.InstVal).S.copy((yyvsp[-4].TypeVal).S); } else { @@ -6463,38 +6484,39 @@ } delete (yyvsp[-4].TypeVal).PAT; delete (yyvsp[-1].ValueList); + lastCallingConv = OldCallingConv::C; ;} break; case 298: -#line 3796 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 3818 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { (yyval.InstVal) = (yyvsp[0].InstVal); ;} break; case 299: -#line 3804 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 3826 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { (yyval.ValueList) = (yyvsp[0].ValueList); ;} break; case 300: -#line 3805 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 3827 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { (yyval.ValueList) = new std::vector(); ;} break; case 301: -#line 3809 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 3831 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { (yyval.BoolVal) = true; ;} break; case 302: -#line 3810 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 3832 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { (yyval.BoolVal) = false; ;} break; case 303: -#line 3814 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 3836 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { const Type *Ty = (yyvsp[-1].TypeVal).PAT->get(); (yyval.InstVal).S.makeComposite((yyvsp[-1].TypeVal).S); @@ -6504,7 +6526,7 @@ break; case 304: -#line 3820 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 3842 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { const Type *Ty = (yyvsp[-4].TypeVal).PAT->get(); (yyvsp[-1].ValIDVal).S.makeUnsigned(); @@ -6515,7 +6537,7 @@ break; case 305: -#line 3827 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 3849 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { const Type *Ty = (yyvsp[-1].TypeVal).PAT->get(); (yyval.InstVal).S.makeComposite((yyvsp[-1].TypeVal).S); @@ -6525,7 +6547,7 @@ break; case 306: -#line 3833 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 3855 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { const Type *Ty = (yyvsp[-4].TypeVal).PAT->get(); (yyvsp[-1].ValIDVal).S.makeUnsigned(); @@ -6536,7 +6558,7 @@ break; case 307: -#line 3840 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 3862 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { const Type *PTy = (yyvsp[0].ValueVal).V->getType(); if (!isa(PTy)) @@ -6547,7 +6569,7 @@ break; case 308: -#line 3847 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 3869 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { const Type* Ty = (yyvsp[-1].TypeVal).PAT->get(); (yyvsp[0].ValIDVal).S.copy((yyvsp[-1].TypeVal).S); @@ -6564,7 +6586,7 @@ break; case 309: -#line 3860 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 3882 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { (yyvsp[0].ValIDVal).S.copy((yyvsp[-1].TypeVal).S); const PointerType *PTy = dyn_cast((yyvsp[-1].TypeVal).PAT->get()); @@ -6594,7 +6616,7 @@ break; case 310: -#line 3886 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 3908 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" { (yyvsp[-1].ValIDVal).S.copy((yyvsp[-2].TypeVal).S); const Type* Ty = (yyvsp[-2].TypeVal).PAT->get(); @@ -6618,7 +6640,7 @@ } /* Line 1126 of yacc.c. */ -#line 6622 "UpgradeParser.tab.c" +#line 6644 "UpgradeParser.tab.c" yyvsp -= yylen; yyssp -= yylen; @@ -6886,7 +6908,7 @@ } -#line 3904 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 3926 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" int yyerror(const char *ErrorMsg) { Index: llvm/tools/llvm-upgrade/UpgradeParser.h.cvs diff -u llvm/tools/llvm-upgrade/UpgradeParser.h.cvs:1.57 llvm/tools/llvm-upgrade/UpgradeParser.h.cvs:1.57.2.1 --- llvm/tools/llvm-upgrade/UpgradeParser.h.cvs:1.57 Sun Apr 15 22:05:01 2007 +++ llvm/tools/llvm-upgrade/UpgradeParser.h.cvs Thu May 17 17:59:30 2007 @@ -335,7 +335,7 @@ #if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED) -#line 1771 "/proj/llvm/llvm-2/tools/llvm-upgrade/UpgradeParser.y" +#line 1775 "/proj/llvm/llvm-20/tools/llvm-upgrade/UpgradeParser.y" typedef union YYSTYPE { llvm::Module *ModuleVal; llvm::Function *FunctionVal; Index: llvm/tools/llvm-upgrade/UpgradeParser.y.cvs diff -u llvm/tools/llvm-upgrade/UpgradeParser.y.cvs:1.76 llvm/tools/llvm-upgrade/UpgradeParser.y.cvs:1.76.2.1 --- llvm/tools/llvm-upgrade/UpgradeParser.y.cvs:1.76 Sun Apr 15 22:05:01 2007 +++ llvm/tools/llvm-upgrade/UpgradeParser.y.cvs Thu May 17 17:59:30 2007 @@ -62,6 +62,7 @@ static bool NewVarArgs; static BasicBlock *CurBB; static GlobalVariable *CurGV; +static unsigned lastCallingConv; // This contains info used when building the body of a function. It is // destroyed when the function is completed. @@ -380,19 +381,18 @@ if (F1->getReturnType() != F2->getReturnType() || F1->getNumParams() != F2->getNumParams()) return false; - ParamAttrsList PAL1; - if (F1->getParamAttrs()) - PAL1 = *F1->getParamAttrs(); - ParamAttrsList PAL2; - if (F2->getParamAttrs()) - PAL2 = *F2->getParamAttrs(); - if (PAL1.getParamAttrs(0) != PAL2.getParamAttrs(0)) + const ParamAttrsList *PAL1 = F1->getParamAttrs(); + const ParamAttrsList *PAL2 = F2->getParamAttrs(); + if (PAL1 && !PAL2 || PAL2 && !PAL1) + return false; + if (PAL1 && PAL2 && ((PAL1->size() != PAL2->size()) || + (PAL1->getParamAttrs(0) != PAL2->getParamAttrs(0)))) return false; unsigned SRetMask = ~unsigned(ParamAttr::StructRet); for (unsigned i = 0; i < F1->getNumParams(); ++i) { - if (F1->getParamType(i) != F2->getParamType(i) || - unsigned(PAL1.getParamAttrs(i+1)) & SRetMask != - unsigned(PAL2.getParamAttrs(i+1)) & SRetMask) + if (F1->getParamType(i) != F2->getParamType(i) || (PAL1 && PAL2 && + (unsigned(PAL1->getParamAttrs(i+1)) & SRetMask != + unsigned(PAL2->getParamAttrs(i+1)) & SRetMask))) return false; } return true; @@ -1460,6 +1460,10 @@ std::vector& Args) { std::string Name = ID.Type == ValID::NameVal ? ID.Name : ""; + if (Name.length() <= 5 || Name[0] != 'l' || Name[1] != 'l' || + Name[2] != 'v' || Name[3] != 'm' || Name[4] != '.') + return 0; + switch (Name[5]) { case 'i': if (Name == "llvm.isunordered.f32" || Name == "llvm.isunordered.f64") { @@ -2006,17 +2010,17 @@ ; OptCallingConv - : /*empty*/ { $$ = OldCallingConv::C; } - | CCC_TOK { $$ = OldCallingConv::C; } - | CSRETCC_TOK { $$ = OldCallingConv::CSRet; } - | FASTCC_TOK { $$ = OldCallingConv::Fast; } - | COLDCC_TOK { $$ = OldCallingConv::Cold; } - | X86_STDCALLCC_TOK { $$ = OldCallingConv::X86_StdCall; } - | X86_FASTCALLCC_TOK { $$ = OldCallingConv::X86_FastCall; } + : /*empty*/ { $$ = lastCallingConv = OldCallingConv::C; } + | CCC_TOK { $$ = lastCallingConv = OldCallingConv::C; } + | CSRETCC_TOK { $$ = lastCallingConv = OldCallingConv::CSRet; } + | FASTCC_TOK { $$ = lastCallingConv = OldCallingConv::Fast; } + | COLDCC_TOK { $$ = lastCallingConv = OldCallingConv::Cold; } + | X86_STDCALLCC_TOK { $$ = lastCallingConv = OldCallingConv::X86_StdCall; } + | X86_FASTCALLCC_TOK { $$ = lastCallingConv = OldCallingConv::X86_FastCall; } | CC_TOK EUINT64VAL { if ((unsigned)$2 != $2) error("Calling conv too large"); - $$ = $2; + $$ = lastCallingConv = $2; } ; @@ -2146,8 +2150,17 @@ bool isVarArg = Params.size() && Params.back() == Type::VoidTy; if (isVarArg) Params.pop_back(); + ParamAttrsList *PAL = 0; + if (lastCallingConv == OldCallingConv::CSRet) { + ParamAttrsVector Attrs; + ParamAttrsWithIndex PAWI; + PAWI.index = 1; PAWI.attrs = ParamAttr::StructRet; // first arg + Attrs.push_back(PAWI); + PAL = ParamAttrsList::get(Attrs); + } + const FunctionType *FTy = - FunctionType::get($1.PAT->get(), Params, isVarArg, 0); + FunctionType::get($1.PAT->get(), Params, isVarArg, PAL); $$.PAT = new PATypeHolder( HandleUpRefs(FTy, $$.S) ); delete $1.PAT; // Delete the return type handle @@ -2930,15 +2943,17 @@ // Convert the CSRet calling convention into the corresponding parameter // attribute. - ParamAttrsList *ParamAttrs = 0; + ParamAttrsList *PAL = 0; if ($1 == OldCallingConv::CSRet) { - ParamAttrs = new ParamAttrsList(); - ParamAttrs->addAttributes(0, ParamAttr::None); // result - ParamAttrs->addAttributes(1, ParamAttr::StructRet); // first arg + ParamAttrsVector Attrs; + ParamAttrsWithIndex PAWI; + PAWI.index = 1; PAWI.attrs = ParamAttr::StructRet; // first arg + Attrs.push_back(PAWI); + PAL = ParamAttrsList::get(Attrs); } const FunctionType *FT = - FunctionType::get(RetTy, ParamTyList, isVarArg, ParamAttrs); + FunctionType::get(RetTy, ParamTyList, isVarArg, PAL); const PointerType *PFT = PointerType::get(FT); delete $2.PAT; @@ -3076,6 +3091,7 @@ } delete $5; // We're now done with the argument list } + lastCallingConv = OldCallingConv::C; } ; @@ -3324,15 +3340,17 @@ FTySign.add(I->S); } } - ParamAttrsList *ParamAttrs = 0; + ParamAttrsList *PAL = 0; if ($2 == OldCallingConv::CSRet) { - ParamAttrs = new ParamAttrsList(); - ParamAttrs->addAttributes(0, ParamAttr::None); // Function result - ParamAttrs->addAttributes(1, ParamAttr::StructRet); // first param + ParamAttrsVector Attrs; + ParamAttrsWithIndex PAWI; + PAWI.index = 1; PAWI.attrs = ParamAttr::StructRet; // first arg + Attrs.push_back(PAWI); + PAL = ParamAttrsList::get(Attrs); } bool isVarArg = ParamTypes.size() && ParamTypes.back() == Type::VoidTy; if (isVarArg) ParamTypes.pop_back(); - Ty = FunctionType::get($3.PAT->get(), ParamTypes, isVarArg, ParamAttrs); + Ty = FunctionType::get($3.PAT->get(), ParamTypes, isVarArg, PAL); PFTy = PointerType::get(Ty); $$.S.copy($3.S); } else { @@ -3375,6 +3393,7 @@ cast($$.TI)->setCallingConv(upgradeCallingConv($2)); delete $3.PAT; delete $6; + lastCallingConv = OldCallingConv::C; } | Unwind { $$.TI = new UnwindInst(); @@ -3729,14 +3748,16 @@ error("Functions cannot return aggregate types"); // Deal with CSRetCC - ParamAttrsList *ParamAttrs = 0; + ParamAttrsList *PAL = 0; if ($2 == OldCallingConv::CSRet) { - ParamAttrs = new ParamAttrsList(); - ParamAttrs->addAttributes(0, ParamAttr::None); // function result - ParamAttrs->addAttributes(1, ParamAttr::StructRet); // first parameter + ParamAttrsVector Attrs; + ParamAttrsWithIndex PAWI; + PAWI.index = 1; PAWI.attrs = ParamAttr::StructRet; // first arg + Attrs.push_back(PAWI); + PAL = ParamAttrsList::get(Attrs); } - FTy = FunctionType::get(RetTy, ParamTypes, isVarArg, ParamAttrs); + FTy = FunctionType::get(RetTy, ParamTypes, isVarArg, PAL); PFTy = PointerType::get(FTy); $$.S.copy($3.S); } else { @@ -3792,6 +3813,7 @@ } delete $3.PAT; delete $6; + lastCallingConv = OldCallingConv::C; } | MemoryInst { $$ = $1; From johannes at apple.com Thu May 17 18:47:23 2007 From: johannes at apple.com (johannes at apple.com) Date: Thu, 17 May 2007 16:47:23 -0700 (PDT) Subject: [llvm-commits] [127367] Make ARM more aggressive about using target-dependent Message-ID: <20070517234723.2D37F349975C@src> Revision: 127367 Author: johannes Date: 2007-05-17 16:47:22 -0700 (Thu, 17 May 2007) Log Message: ----------- Make ARM more aggressive about using target-dependent memcpy expansion for aggregate copy. Modified Paths: -------------- apple-local/branches/llvm/gcc/config/arm/arm.h apple-local/branches/llvm/gcc/llvm-convert.cpp Modified: apple-local/branches/llvm/gcc/config/arm/arm.h =================================================================== --- apple-local/branches/llvm/gcc/config/arm/arm.h 2007-05-17 21:04:42 UTC (rev 127366) +++ apple-local/branches/llvm/gcc/config/arm/arm.h 2007-05-17 23:47:22 UTC (rev 127367) @@ -2923,4 +2923,8 @@ #define LLVM_OVERRIDE_TARGET_ARCH() \ (TARGET_THUMB ? "thumb" : "") +/* Doing struct copy by partial-word loads and stores is not a good idea on ARM. */ +#define TARGET_LLVM_MIN_BYTES_COPY_BY_MEMCPY 4 +/* APPLE LOCAL end llvm */ + #endif /* ! GCC_ARM_H */ Modified: apple-local/branches/llvm/gcc/llvm-convert.cpp =================================================================== --- apple-local/branches/llvm/gcc/llvm-convert.cpp 2007-05-17 21:04:42 UTC (rev 127366) +++ apple-local/branches/llvm/gcc/llvm-convert.cpp 2007-05-17 23:47:22 UTC (rev 127367) @@ -1120,6 +1120,10 @@ } } +#ifndef TARGET_LLVM_MIN_BYTES_COPY_BY_MEMCPY +#define TARGET_LLVM_MIN_BYTES_COPY_BY_MEMCPY 64 +#endif + /// EmitAggregateCopy - Copy the elements from SrcPtr to DestPtr, using the /// GCC type specified by GCCType to know which elements to copy. void TreeToLLVM::EmitAggregateCopy(Value *DestPtr, Value *SrcPtr, tree type, @@ -1129,7 +1133,8 @@ // If the type is small, copy the elements instead of using a block copy. if (TREE_CODE(TYPE_SIZE(type)) == INTEGER_CST && - TREE_INT_CST_LOW(TYPE_SIZE_UNIT(type)) < 64) { + TREE_INT_CST_LOW(TYPE_SIZE_UNIT(type)) < + TARGET_LLVM_MIN_BYTES_COPY_BY_MEMCPY) { const Type *LLVMTy = ConvertType(type); if (CountAggregateElements(LLVMTy) <= 8) { DestPtr = CastToType(Instruction::BitCast, DestPtr, From evan.cheng at apple.com Thu May 17 18:59:16 2007 From: evan.cheng at apple.com (Evan Cheng) Date: Thu, 17 May 2007 18:59:16 -0500 Subject: [llvm-commits] CVS: llvm/include/llvm/CodeGen/MachineBasicBlock.h Message-ID: <200705172359.l4HNxGLq028661@zion.cs.uiuc.edu> Changes in directory llvm/include/llvm/CodeGen: MachineBasicBlock.h updated: 1.63 -> 1.64 --- Log message: Move isSuccessor() offline, change it to use std::find. --- Diffs of the changes: (+1 -6) MachineBasicBlock.h | 7 +------ 1 files changed, 1 insertion(+), 6 deletions(-) Index: llvm/include/llvm/CodeGen/MachineBasicBlock.h diff -u llvm/include/llvm/CodeGen/MachineBasicBlock.h:1.63 llvm/include/llvm/CodeGen/MachineBasicBlock.h:1.64 --- llvm/include/llvm/CodeGen/MachineBasicBlock.h:1.63 Tue May 8 13:55:03 2007 +++ llvm/include/llvm/CodeGen/MachineBasicBlock.h Thu May 17 18:58:52 2007 @@ -217,12 +217,7 @@ /// isSuccessor - Return true if the specified MBB is a successor of this /// block. - bool isSuccessor(MachineBasicBlock *MBB) const { - for (const_succ_iterator I = succ_begin(), E = succ_end(); I != E; ++I) - if (*I == MBB) - return true; - return false; - } + bool isSuccessor(MachineBasicBlock *MBB) const; /// getFirstTerminator - returns an iterator to the first terminator /// instruction of this basic block. If a terminator does not exist, From evan.cheng at apple.com Thu May 17 18:59:16 2007 From: evan.cheng at apple.com (Evan Cheng) Date: Thu, 17 May 2007 18:59:16 -0500 Subject: [llvm-commits] CVS: llvm/lib/CodeGen/MachineBasicBlock.cpp Message-ID: <200705172359.l4HNxGHr028659@zion.cs.uiuc.edu> Changes in directory llvm/lib/CodeGen: MachineBasicBlock.cpp updated: 1.44 -> 1.45 --- Log message: Move isSuccessor() offline, change it to use std::find. --- Diffs of the changes: (+6 -0) MachineBasicBlock.cpp | 6 ++++++ 1 files changed, 6 insertions(+) Index: llvm/lib/CodeGen/MachineBasicBlock.cpp diff -u llvm/lib/CodeGen/MachineBasicBlock.cpp:1.44 llvm/lib/CodeGen/MachineBasicBlock.cpp:1.45 --- llvm/lib/CodeGen/MachineBasicBlock.cpp:1.44 Mon Apr 30 18:12:53 2007 +++ llvm/lib/CodeGen/MachineBasicBlock.cpp Thu May 17 18:58:53 2007 @@ -192,3 +192,9 @@ assert(I != Predecessors.end() && "Pred is not a predecessor of this block!"); Predecessors.erase(I); } + +bool MachineBasicBlock::isSuccessor(MachineBasicBlock *MBB) const { + std::vector::const_iterator I = + std::find(Successors.begin(), Successors.end(), MBB); + return I != Successors.end(); +} From evan.cheng at apple.com Thu May 17 19:00:48 2007 From: evan.cheng at apple.com (Evan Cheng) Date: Thu, 17 May 2007 19:00:48 -0500 Subject: [llvm-commits] CVS: llvm/include/llvm/Target/TargetLowering.h Message-ID: <200705180000.l4I00mEa028710@zion.cs.uiuc.edu> Changes in directory llvm/include/llvm/Target: TargetLowering.h updated: 1.125 -> 1.126 --- Log message: Fix comment. --- Diffs of the changes: (+2 -2) TargetLowering.h | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-) Index: llvm/include/llvm/Target/TargetLowering.h diff -u llvm/include/llvm/Target/TargetLowering.h:1.125 llvm/include/llvm/Target/TargetLowering.h:1.126 --- llvm/include/llvm/Target/TargetLowering.h:1.125 Wed May 16 18:44:08 2007 +++ llvm/include/llvm/Target/TargetLowering.h Thu May 17 19:00:30 2007 @@ -757,8 +757,8 @@ JumpBufAlignment = Align; } - /// setIfCvtBlockSizeLimit - Set the target's if-conversion block size limit; - /// default is 2. + /// setIfCvtBlockSizeLimit - Set the target's if-conversion block size + /// (in number of instructions); default is 2. void setIfCvtBlockSizeLimit(unsigned Limit) { IfCvtBlockSizeLimit = Limit; } From evan.cheng at apple.com Thu May 17 19:01:28 2007 From: evan.cheng at apple.com (Evan Cheng) Date: Thu, 17 May 2007 19:01:28 -0500 Subject: [llvm-commits] CVS: llvm/include/llvm/Target/TargetInstrInfo.h Message-ID: <200705180001.l4I01S27028740@zion.cs.uiuc.edu> Changes in directory llvm/include/llvm/Target: TargetInstrInfo.h updated: 1.121 -> 1.122 --- Log message: RemoveBranch() and InsertBranch() now returns number of instructions deleted / inserted. --- Diffs of the changes: (+8 -4) TargetInstrInfo.h | 12 ++++++++---- 1 files changed, 8 insertions(+), 4 deletions(-) Index: llvm/include/llvm/Target/TargetInstrInfo.h diff -u llvm/include/llvm/Target/TargetInstrInfo.h:1.121 llvm/include/llvm/Target/TargetInstrInfo.h:1.122 --- llvm/include/llvm/Target/TargetInstrInfo.h:1.121 Wed May 16 19:10:58 2007 +++ llvm/include/llvm/Target/TargetInstrInfo.h Thu May 17 19:01:09 2007 @@ -350,20 +350,24 @@ } /// RemoveBranch - Remove the branching code at the end of the specific MBB. - /// this is only invoked in cases where AnalyzeBranch returns success. - virtual void RemoveBranch(MachineBasicBlock &MBB) const { + /// this is only invoked in cases where AnalyzeBranch returns success. It + /// returns the number of instructions that were removed. + virtual unsigned RemoveBranch(MachineBasicBlock &MBB) const { assert(0 && "Target didn't implement TargetInstrInfo::RemoveBranch!"); + return 0; } /// InsertBranch - Insert a branch into the end of the specified /// MachineBasicBlock. This operands to this method are the same as those /// returned by AnalyzeBranch. This is invoked in cases where AnalyzeBranch /// returns success and when an unconditional branch (TBB is non-null, FBB is - /// null, Cond is empty) needs to be inserted. - virtual void InsertBranch(MachineBasicBlock &MBB, MachineBasicBlock *TBB, + /// null, Cond is empty) needs to be inserted. It returns the number of + /// instructions inserted. + virtual unsigned InsertBranch(MachineBasicBlock &MBB, MachineBasicBlock *TBB, MachineBasicBlock *FBB, const std::vector &Cond) const { assert(0 && "Target didn't implement TargetInstrInfo::InsertBranch!"); + return 0; } /// BlockHasNoFallThrough - Return true if the specified block does not From evan.cheng at apple.com Thu May 17 19:03:19 2007 From: evan.cheng at apple.com (Evan Cheng) Date: Thu, 17 May 2007 19:03:19 -0500 Subject: [llvm-commits] CVS: llvm/lib/Target/Alpha/AlphaInstrInfo.cpp AlphaInstrInfo.h Message-ID: <200705180003.l4I03Jqq028787@zion.cs.uiuc.edu> Changes in directory llvm/lib/Target/Alpha: AlphaInstrInfo.cpp updated: 1.17 -> 1.18 AlphaInstrInfo.h updated: 1.7 -> 1.8 --- Log message: RemoveBranch() and InsertBranch() now returns number of instructions deleted / inserted. --- Diffs of the changes: (+11 -9) AlphaInstrInfo.cpp | 16 +++++++++------- AlphaInstrInfo.h | 4 ++-- 2 files changed, 11 insertions(+), 9 deletions(-) Index: llvm/lib/Target/Alpha/AlphaInstrInfo.cpp diff -u llvm/lib/Target/Alpha/AlphaInstrInfo.cpp:1.17 llvm/lib/Target/Alpha/AlphaInstrInfo.cpp:1.18 --- llvm/lib/Target/Alpha/AlphaInstrInfo.cpp:1.17 Wed Apr 25 02:12:14 2007 +++ llvm/lib/Target/Alpha/AlphaInstrInfo.cpp Thu May 17 19:02:59 2007 @@ -99,7 +99,7 @@ } } -void AlphaInstrInfo::InsertBranch(MachineBasicBlock &MBB,MachineBasicBlock *TBB, +unsigned AlphaInstrInfo::InsertBranch(MachineBasicBlock &MBB,MachineBasicBlock *TBB, MachineBasicBlock *FBB, const std::vector &Cond)const{ assert(TBB && "InsertBranch must not be told to insert a fallthrough"); @@ -117,7 +117,7 @@ else BuildMI(&MBB, get(Alpha::COND_BRANCH_F)) .addImm(Cond[0].getImm()).addReg(Cond[1].getReg()).addMBB(TBB); - return; + return 1; } // Two-way Conditional Branch. @@ -128,6 +128,7 @@ BuildMI(&MBB, get(Alpha::COND_BRANCH_F)) .addImm(Cond[0].getImm()).addReg(Cond[1].getReg()).addMBB(TBB); BuildMI(&MBB, get(Alpha::BR)).addMBB(FBB); + return 2; } static unsigned AlphaRevCondCode(unsigned Opcode) { @@ -203,28 +204,29 @@ return true; } -void AlphaInstrInfo::RemoveBranch(MachineBasicBlock &MBB) const { +unsigned AlphaInstrInfo::RemoveBranch(MachineBasicBlock &MBB) const { MachineBasicBlock::iterator I = MBB.end(); - if (I == MBB.begin()) return; + if (I == MBB.begin()) return 0; --I; if (I->getOpcode() != Alpha::BR && I->getOpcode() != Alpha::COND_BRANCH_I && I->getOpcode() != Alpha::COND_BRANCH_F) - return; + return 0; // Remove the branch. I->eraseFromParent(); I = MBB.end(); - if (I == MBB.begin()) return; + if (I == MBB.begin()) return 1; --I; if (I->getOpcode() != Alpha::COND_BRANCH_I && I->getOpcode() != Alpha::COND_BRANCH_F) - return; + return 1; // Remove the branch. I->eraseFromParent(); + return 2; } void AlphaInstrInfo::insertNoop(MachineBasicBlock &MBB, Index: llvm/lib/Target/Alpha/AlphaInstrInfo.h diff -u llvm/lib/Target/Alpha/AlphaInstrInfo.h:1.7 llvm/lib/Target/Alpha/AlphaInstrInfo.h:1.8 --- llvm/lib/Target/Alpha/AlphaInstrInfo.h:1.7 Tue Oct 31 10:49:55 2006 +++ llvm/lib/Target/Alpha/AlphaInstrInfo.h Thu May 17 19:02:59 2007 @@ -39,13 +39,13 @@ virtual unsigned isLoadFromStackSlot(MachineInstr *MI, int &FrameIndex) const; virtual unsigned isStoreToStackSlot(MachineInstr *MI, int &FrameIndex) const; - virtual void InsertBranch(MachineBasicBlock &MBB, MachineBasicBlock *TBB, + virtual unsigned InsertBranch(MachineBasicBlock &MBB, MachineBasicBlock *TBB, MachineBasicBlock *FBB, const std::vector &Cond) const; bool AnalyzeBranch(MachineBasicBlock &MBB,MachineBasicBlock *&TBB, MachineBasicBlock *&FBB, std::vector &Cond) const; - void RemoveBranch(MachineBasicBlock &MBB) const; + unsigned RemoveBranch(MachineBasicBlock &MBB) const; void insertNoop(MachineBasicBlock &MBB, MachineBasicBlock::iterator MI) const; bool BlockHasNoFallThrough(MachineBasicBlock &MBB) const; From evan.cheng at apple.com Thu May 17 19:04:25 2007 From: evan.cheng at apple.com (Evan Cheng) Date: Thu, 17 May 2007 19:04:25 -0500 Subject: [llvm-commits] CVS: llvm/lib/Target/IA64/IA64InstrInfo.cpp IA64InstrInfo.h Message-ID: <200705180004.l4I04PFZ028818@zion.cs.uiuc.edu> Changes in directory llvm/lib/Target/IA64: IA64InstrInfo.cpp updated: 1.8 -> 1.9 IA64InstrInfo.h updated: 1.3 -> 1.4 --- Log message: RemoveBranch() and InsertBranch() now returns number of instructions deleted / inserted. --- Diffs of the changes: (+8 -6) IA64InstrInfo.cpp | 8 +++++--- IA64InstrInfo.h | 6 +++--- 2 files changed, 8 insertions(+), 6 deletions(-) Index: llvm/lib/Target/IA64/IA64InstrInfo.cpp diff -u llvm/lib/Target/IA64/IA64InstrInfo.cpp:1.8 llvm/lib/Target/IA64/IA64InstrInfo.cpp:1.9 --- llvm/lib/Target/IA64/IA64InstrInfo.cpp:1.8 Wed Apr 25 02:12:14 2007 +++ llvm/lib/Target/IA64/IA64InstrInfo.cpp Thu May 17 19:04:06 2007 @@ -47,10 +47,12 @@ // move instruction } -void IA64InstrInfo::InsertBranch(MachineBasicBlock &MBB,MachineBasicBlock *TBB, - MachineBasicBlock *FBB, - const std::vector &Cond)const { +unsigned +IA64InstrInfo::InsertBranch(MachineBasicBlock &MBB,MachineBasicBlock *TBB, + MachineBasicBlock *FBB, + const std::vector &Cond)const { // Can only insert uncond branches so far. assert(Cond.empty() && !FBB && TBB && "Can only handle uncond branches!"); BuildMI(&MBB, get(IA64::BRL_NOTCALL)).addMBB(TBB); + return 1; } Index: llvm/lib/Target/IA64/IA64InstrInfo.h diff -u llvm/lib/Target/IA64/IA64InstrInfo.h:1.3 llvm/lib/Target/IA64/IA64InstrInfo.h:1.4 --- llvm/lib/Target/IA64/IA64InstrInfo.h:1.3 Tue Oct 24 11:44:55 2006 +++ llvm/lib/Target/IA64/IA64InstrInfo.h Thu May 17 19:04:06 2007 @@ -37,9 +37,9 @@ virtual bool isMoveInstr(const MachineInstr& MI, unsigned& sourceReg, unsigned& destReg) const; - virtual void InsertBranch(MachineBasicBlock &MBB, MachineBasicBlock *TBB, - MachineBasicBlock *FBB, - const std::vector &Cond) const; + virtual unsigned InsertBranch(MachineBasicBlock &MBB, MachineBasicBlock *TBB, + MachineBasicBlock *FBB, + const std::vector &Cond) const; }; From evan.cheng at apple.com Thu May 17 19:06:07 2007 From: evan.cheng at apple.com (Evan Cheng) Date: Thu, 17 May 2007 19:06:07 -0500 Subject: [llvm-commits] CVS: llvm/lib/Target/PowerPC/PPCInstrInfo.cpp PPCInstrInfo.h Message-ID: <200705180006.l4I067xI028869@zion.cs.uiuc.edu> Changes in directory llvm/lib/Target/PowerPC: PPCInstrInfo.cpp updated: 1.37 -> 1.38 PPCInstrInfo.h updated: 1.21 -> 1.22 --- Log message: RemoveBranch() and InsertBranch() now returns number of instructions deleted / inserted. --- Diffs of the changes: (+16 -13) PPCInstrInfo.cpp | 21 ++++++++++++--------- PPCInstrInfo.h | 8 ++++---- 2 files changed, 16 insertions(+), 13 deletions(-) Index: llvm/lib/Target/PowerPC/PPCInstrInfo.cpp diff -u llvm/lib/Target/PowerPC/PPCInstrInfo.cpp:1.37 llvm/lib/Target/PowerPC/PPCInstrInfo.cpp:1.38 --- llvm/lib/Target/PowerPC/PPCInstrInfo.cpp:1.37 Wed Apr 25 02:12:14 2007 +++ llvm/lib/Target/PowerPC/PPCInstrInfo.cpp Thu May 17 19:05:48 2007 @@ -224,30 +224,32 @@ return true; } -void PPCInstrInfo::RemoveBranch(MachineBasicBlock &MBB) const { +unsigned PPCInstrInfo::RemoveBranch(MachineBasicBlock &MBB) const { MachineBasicBlock::iterator I = MBB.end(); - if (I == MBB.begin()) return; + if (I == MBB.begin()) return 0; --I; if (I->getOpcode() != PPC::B && I->getOpcode() != PPC::BCC) - return; + return 0; // Remove the branch. I->eraseFromParent(); I = MBB.end(); - if (I == MBB.begin()) return; + if (I == MBB.begin()) return 1; --I; if (I->getOpcode() != PPC::BCC) - return; + return 1; // Remove the branch. I->eraseFromParent(); + return 2; } -void PPCInstrInfo::InsertBranch(MachineBasicBlock &MBB, MachineBasicBlock *TBB, - MachineBasicBlock *FBB, - const std::vector &Cond) const { +unsigned +PPCInstrInfo::InsertBranch(MachineBasicBlock &MBB, MachineBasicBlock *TBB, + MachineBasicBlock *FBB, + const std::vector &Cond) const { // Shouldn't be a fall through. assert(TBB && "InsertBranch must not be told to insert a fallthrough"); assert((Cond.size() == 2 || Cond.size() == 0) && @@ -260,13 +262,14 @@ else // Conditional branch BuildMI(&MBB, get(PPC::BCC)) .addImm(Cond[0].getImm()).addReg(Cond[1].getReg()).addMBB(TBB); - return; + return 1; } // Two-way Conditional Branch. BuildMI(&MBB, get(PPC::BCC)) .addImm(Cond[0].getImm()).addReg(Cond[1].getReg()).addMBB(TBB); BuildMI(&MBB, get(PPC::B)).addMBB(FBB); + return 2; } bool PPCInstrInfo::BlockHasNoFallThrough(MachineBasicBlock &MBB) const { Index: llvm/lib/Target/PowerPC/PPCInstrInfo.h diff -u llvm/lib/Target/PowerPC/PPCInstrInfo.h:1.21 llvm/lib/Target/PowerPC/PPCInstrInfo.h:1.22 --- llvm/lib/Target/PowerPC/PPCInstrInfo.h:1.21 Fri Jan 26 08:34:51 2007 +++ llvm/lib/Target/PowerPC/PPCInstrInfo.h Thu May 17 19:05:48 2007 @@ -99,10 +99,10 @@ virtual bool AnalyzeBranch(MachineBasicBlock &MBB, MachineBasicBlock *&TBB, MachineBasicBlock *&FBB, std::vector &Cond) const; - virtual void RemoveBranch(MachineBasicBlock &MBB) const; - virtual void InsertBranch(MachineBasicBlock &MBB, MachineBasicBlock *TBB, - MachineBasicBlock *FBB, - const std::vector &Cond) const; + virtual unsigned RemoveBranch(MachineBasicBlock &MBB) const; + virtual unsigned InsertBranch(MachineBasicBlock &MBB, MachineBasicBlock *TBB, + MachineBasicBlock *FBB, + const std::vector &Cond) const; virtual bool BlockHasNoFallThrough(MachineBasicBlock &MBB) const; virtual bool ReverseBranchCondition(std::vector &Cond) const; }; From evan.cheng at apple.com Thu May 17 19:17:27 2007 From: evan.cheng at apple.com (Evan Cheng) Date: Thu, 17 May 2007 19:17:27 -0500 Subject: [llvm-commits] CVS: llvm/lib/Target/X86/X86InstrInfo.cpp X86InstrInfo.h Message-ID: <200705180017.l4I0HRca029328@zion.cs.uiuc.edu> Changes in directory llvm/lib/Target/X86: X86InstrInfo.cpp updated: 1.85 -> 1.86 X86InstrInfo.h updated: 1.63 -> 1.64 --- Log message: RemoveBranch() and InsertBranch() now returns number of instructions deleted / inserted. --- Diffs of the changes: (+16 -13) X86InstrInfo.cpp | 21 ++++++++++++--------- X86InstrInfo.h | 8 ++++---- 2 files changed, 16 insertions(+), 13 deletions(-) Index: llvm/lib/Target/X86/X86InstrInfo.cpp diff -u llvm/lib/Target/X86/X86InstrInfo.cpp:1.85 llvm/lib/Target/X86/X86InstrInfo.cpp:1.86 --- llvm/lib/Target/X86/X86InstrInfo.cpp:1.85 Wed Apr 25 02:12:14 2007 +++ llvm/lib/Target/X86/X86InstrInfo.cpp Thu May 17 19:17:09 2007 @@ -431,31 +431,33 @@ return true; } -void X86InstrInfo::RemoveBranch(MachineBasicBlock &MBB) const { +unsigned X86InstrInfo::RemoveBranch(MachineBasicBlock &MBB) const { MachineBasicBlock::iterator I = MBB.end(); - if (I == MBB.begin()) return; + if (I == MBB.begin()) return 0; --I; if (I->getOpcode() != X86::JMP && GetCondFromBranchOpc(I->getOpcode()) == X86::COND_INVALID) - return; + return 0; // Remove the branch. I->eraseFromParent(); I = MBB.end(); - if (I == MBB.begin()) return; + if (I == MBB.begin()) return 1; --I; if (GetCondFromBranchOpc(I->getOpcode()) == X86::COND_INVALID) - return; + return 1; // Remove the branch. I->eraseFromParent(); + return 2; } -void X86InstrInfo::InsertBranch(MachineBasicBlock &MBB, MachineBasicBlock *TBB, - MachineBasicBlock *FBB, - const std::vector &Cond) const { +unsigned +X86InstrInfo::InsertBranch(MachineBasicBlock &MBB, MachineBasicBlock *TBB, + MachineBasicBlock *FBB, + const std::vector &Cond) const { // Shouldn't be a fall through. assert(TBB && "InsertBranch must not be told to insert a fallthrough"); assert((Cond.size() == 1 || Cond.size() == 0) && @@ -470,13 +472,14 @@ unsigned Opc = GetCondBranchFromCond((X86::CondCode)Cond[0].getImm()); BuildMI(&MBB, get(Opc)).addMBB(TBB); } - return; + return 1; } // Two-way Conditional branch. unsigned Opc = GetCondBranchFromCond((X86::CondCode)Cond[0].getImm()); BuildMI(&MBB, get(Opc)).addMBB(TBB); BuildMI(&MBB, get(X86::JMP)).addMBB(FBB); + return 2; } bool X86InstrInfo::BlockHasNoFallThrough(MachineBasicBlock &MBB) const { Index: llvm/lib/Target/X86/X86InstrInfo.h diff -u llvm/lib/Target/X86/X86InstrInfo.h:1.63 llvm/lib/Target/X86/X86InstrInfo.h:1.64 --- llvm/lib/Target/X86/X86InstrInfo.h:1.63 Tue Apr 10 17:10:25 2007 +++ llvm/lib/Target/X86/X86InstrInfo.h Thu May 17 19:17:09 2007 @@ -263,10 +263,10 @@ virtual bool AnalyzeBranch(MachineBasicBlock &MBB, MachineBasicBlock *&TBB, MachineBasicBlock *&FBB, std::vector &Cond) const; - virtual void RemoveBranch(MachineBasicBlock &MBB) const; - virtual void InsertBranch(MachineBasicBlock &MBB, MachineBasicBlock *TBB, - MachineBasicBlock *FBB, - const std::vector &Cond) const; + virtual unsigned RemoveBranch(MachineBasicBlock &MBB) const; + virtual unsigned InsertBranch(MachineBasicBlock &MBB, MachineBasicBlock *TBB, + MachineBasicBlock *FBB, + const std::vector &Cond) const; virtual bool BlockHasNoFallThrough(MachineBasicBlock &MBB) const; virtual bool ReverseBranchCondition(std::vector &Cond) const; From evan.cheng at apple.com Thu May 17 19:17:46 2007 From: evan.cheng at apple.com (Evan Cheng) Date: Thu, 17 May 2007 19:17:46 -0500 Subject: [llvm-commits] CVS: llvm/lib/Target/Sparc/SparcInstrInfo.cpp SparcInstrInfo.h Message-ID: <200705180017.l4I0Hk7Z029362@zion.cs.uiuc.edu> Changes in directory llvm/lib/Target/Sparc: SparcInstrInfo.cpp updated: 1.17 -> 1.18 SparcInstrInfo.h updated: 1.10 -> 1.11 --- Log message: RemoveBranch() and InsertBranch() now returns number of instructions deleted / inserted. --- Diffs of the changes: (+8 -6) SparcInstrInfo.cpp | 8 +++++--- SparcInstrInfo.h | 6 +++--- 2 files changed, 8 insertions(+), 6 deletions(-) Index: llvm/lib/Target/Sparc/SparcInstrInfo.cpp diff -u llvm/lib/Target/Sparc/SparcInstrInfo.cpp:1.17 llvm/lib/Target/Sparc/SparcInstrInfo.cpp:1.18 --- llvm/lib/Target/Sparc/SparcInstrInfo.cpp:1.17 Mon Nov 27 17:37:22 2006 +++ llvm/lib/Target/Sparc/SparcInstrInfo.cpp Thu May 17 19:17:28 2007 @@ -97,10 +97,12 @@ return 0; } -void SparcInstrInfo::InsertBranch(MachineBasicBlock &MBB,MachineBasicBlock *TBB, - MachineBasicBlock *FBB, - const std::vector &Cond)const{ +unsigned +SparcInstrInfo::InsertBranch(MachineBasicBlock &MBB,MachineBasicBlock *TBB, + MachineBasicBlock *FBB, + const std::vector &Cond)const{ // Can only insert uncond branches so far. assert(Cond.empty() && !FBB && TBB && "Can only handle uncond branches!"); BuildMI(&MBB, get(SP::BA)).addMBB(TBB); + return 1; } Index: llvm/lib/Target/Sparc/SparcInstrInfo.h diff -u llvm/lib/Target/Sparc/SparcInstrInfo.h:1.10 llvm/lib/Target/Sparc/SparcInstrInfo.h:1.11 --- llvm/lib/Target/Sparc/SparcInstrInfo.h:1.10 Tue Oct 24 11:39:19 2006 +++ llvm/lib/Target/Sparc/SparcInstrInfo.h Thu May 17 19:17:28 2007 @@ -63,9 +63,9 @@ virtual unsigned isStoreToStackSlot(MachineInstr *MI, int &FrameIndex) const; - virtual void InsertBranch(MachineBasicBlock &MBB, MachineBasicBlock *TBB, - MachineBasicBlock *FBB, - const std::vector &Cond) const; + virtual unsigned InsertBranch(MachineBasicBlock &MBB, MachineBasicBlock *TBB, + MachineBasicBlock *FBB, + const std::vector &Cond) const; }; } From evan.cheng at apple.com Thu May 17 19:18:35 2007 From: evan.cheng at apple.com (Evan Cheng) Date: Thu, 17 May 2007 19:18:35 -0500 Subject: [llvm-commits] CVS: llvm/lib/Target/ARM/ARMInstrInfo.h ARMInstrInfo.cpp Message-ID: <200705180018.l4I0IZ7i029437@zion.cs.uiuc.edu> Changes in directory llvm/lib/Target/ARM: ARMInstrInfo.h updated: 1.10 -> 1.11 ARMInstrInfo.cpp updated: 1.27 -> 1.28 --- Log message: RemoveBranch() and InsertBranch() now returns number of instructions deleted / inserted. --- Diffs of the changes: (+13 -11) ARMInstrInfo.cpp | 16 +++++++++------- ARMInstrInfo.h | 8 ++++---- 2 files changed, 13 insertions(+), 11 deletions(-) Index: llvm/lib/Target/ARM/ARMInstrInfo.h diff -u llvm/lib/Target/ARM/ARMInstrInfo.h:1.10 llvm/lib/Target/ARM/ARMInstrInfo.h:1.11 --- llvm/lib/Target/ARM/ARMInstrInfo.h:1.10 Wed May 16 16:53:07 2007 +++ llvm/lib/Target/ARM/ARMInstrInfo.h Thu May 17 19:18:17 2007 @@ -96,10 +96,10 @@ virtual bool AnalyzeBranch(MachineBasicBlock &MBB, MachineBasicBlock *&TBB, MachineBasicBlock *&FBB, std::vector &Cond) const; - virtual void RemoveBranch(MachineBasicBlock &MBB) const; - virtual void InsertBranch(MachineBasicBlock &MBB, MachineBasicBlock *TBB, - MachineBasicBlock *FBB, - const std::vector &Cond) const; + virtual unsigned RemoveBranch(MachineBasicBlock &MBB) const; + virtual unsigned InsertBranch(MachineBasicBlock &MBB, MachineBasicBlock *TBB, + MachineBasicBlock *FBB, + const std::vector &Cond) const; virtual bool BlockHasNoFallThrough(MachineBasicBlock &MBB) const; virtual bool ReverseBranchCondition(std::vector &Cond) const; Index: llvm/lib/Target/ARM/ARMInstrInfo.cpp diff -u llvm/lib/Target/ARM/ARMInstrInfo.cpp:1.27 llvm/lib/Target/ARM/ARMInstrInfo.cpp:1.28 --- llvm/lib/Target/ARM/ARMInstrInfo.cpp:1.27 Wed May 16 16:53:07 2007 +++ llvm/lib/Target/ARM/ARMInstrInfo.cpp Thu May 17 19:18:17 2007 @@ -349,33 +349,34 @@ } -void ARMInstrInfo::RemoveBranch(MachineBasicBlock &MBB) const { +unsigned ARMInstrInfo::RemoveBranch(MachineBasicBlock &MBB) const { MachineFunction &MF = *MBB.getParent(); ARMFunctionInfo *AFI = MF.getInfo(); int BOpc = AFI->isThumbFunction() ? ARM::tB : ARM::B; int BccOpc = AFI->isThumbFunction() ? ARM::tBcc : ARM::Bcc; MachineBasicBlock::iterator I = MBB.end(); - if (I == MBB.begin()) return; + if (I == MBB.begin()) return 0; --I; if (I->getOpcode() != BOpc && I->getOpcode() != BccOpc) - return; + return 0; // Remove the branch. I->eraseFromParent(); I = MBB.end(); - if (I == MBB.begin()) return; + if (I == MBB.begin()) return 1; --I; if (I->getOpcode() != BccOpc) - return; + return 1; // Remove the branch. I->eraseFromParent(); + return 2; } -void ARMInstrInfo::InsertBranch(MachineBasicBlock &MBB, MachineBasicBlock *TBB, +unsigned ARMInstrInfo::InsertBranch(MachineBasicBlock &MBB, MachineBasicBlock *TBB, MachineBasicBlock *FBB, const std::vector &Cond) const { MachineFunction &MF = *MBB.getParent(); @@ -393,12 +394,13 @@ BuildMI(&MBB, get(BOpc)).addMBB(TBB); else BuildMI(&MBB, get(BccOpc)).addMBB(TBB).addImm(Cond[0].getImm()); - return; + return 1; } // Two-way conditional branch. BuildMI(&MBB, get(BccOpc)).addMBB(TBB).addImm(Cond[0].getImm()); BuildMI(&MBB, get(BOpc)).addMBB(FBB); + return 2; } bool ARMInstrInfo::BlockHasNoFallThrough(MachineBasicBlock &MBB) const { From evan.cheng at apple.com Thu May 17 19:19:52 2007 From: evan.cheng at apple.com (Evan Cheng) Date: Thu, 17 May 2007 19:19:52 -0500 Subject: [llvm-commits] CVS: llvm/lib/Target/ARM/ARMISelLowering.cpp Message-ID: <200705180019.l4I0Jqbx029514@zion.cs.uiuc.edu> Changes in directory llvm/lib/Target/ARM: ARMISelLowering.cpp updated: 1.53 -> 1.54 --- Log message: Set ARM if-conversion block size threshold to 10 instructions for now. --- Diffs of the changes: (+2 -2) ARMISelLowering.cpp | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-) Index: llvm/lib/Target/ARM/ARMISelLowering.cpp diff -u llvm/lib/Target/ARM/ARMISelLowering.cpp:1.53 llvm/lib/Target/ARM/ARMISelLowering.cpp:1.54 --- llvm/lib/Target/ARM/ARMISelLowering.cpp:1.53 Thu May 17 16:31:21 2007 +++ llvm/lib/Target/ARM/ARMISelLowering.cpp Thu May 17 19:19:34 2007 @@ -124,6 +124,7 @@ addRegisterClass(MVT::f32, ARM::SPRRegisterClass); addRegisterClass(MVT::f64, ARM::DPRRegisterClass); } + computeRegisterProperties(); // ARM does not have f32 extending load. setLoadXAction(ISD::EXTLOAD, MVT::f32, Expand); @@ -252,9 +253,8 @@ setOperationAction(ISD::FP_TO_SINT, MVT::i32, Custom); setStackPointerRegisterToSaveRestore(ARM::SP); - setSchedulingPreference(SchedulingForRegPressure); - computeRegisterProperties(); + setIfCvtBlockSizeLimit(Subtarget->isThumb() ? 0 : 10); maxStoresPerMemcpy = 1; //// temporary - rewrite interface to use type } From evan.cheng at apple.com Thu May 17 19:21:15 2007 From: evan.cheng at apple.com (Evan Cheng) Date: Thu, 17 May 2007 19:21:15 -0500 Subject: [llvm-commits] CVS: llvm/lib/CodeGen/IfConversion.cpp Message-ID: <200705180021.l4I0LFMM029607@zion.cs.uiuc.edu> Changes in directory llvm/lib/CodeGen: IfConversion.cpp updated: 1.4 -> 1.5 --- Log message: Make use of target specific block size limits; bug fixes. --- Diffs of the changes: (+149 -64) IfConversion.cpp | 213 ++++++++++++++++++++++++++++++++++++++----------------- 1 files changed, 149 insertions(+), 64 deletions(-) Index: llvm/lib/CodeGen/IfConversion.cpp diff -u llvm/lib/CodeGen/IfConversion.cpp:1.4 llvm/lib/CodeGen/IfConversion.cpp:1.5 --- llvm/lib/CodeGen/IfConversion.cpp:1.4 Wed May 16 16:54:37 2007 +++ llvm/lib/CodeGen/IfConversion.cpp Thu May 17 19:20:58 2007 @@ -16,6 +16,7 @@ #include "llvm/CodeGen/MachineModuleInfo.h" #include "llvm/CodeGen/MachineFunctionPass.h" #include "llvm/Target/TargetInstrInfo.h" +#include "llvm/Target/TargetLowering.h" #include "llvm/Target/TargetMachine.h" #include "llvm/Support/Debug.h" #include "llvm/ADT/Statistic.h" @@ -37,22 +38,24 @@ /// BBInfo - One per MachineBasicBlock, this is used to cache the result /// if-conversion feasibility analysis. This includes results from /// TargetInstrInfo::AnalyzeBranch() (i.e. TBB, FBB, and Cond), and its - /// classification, and common merge block of its successors (if it's a + /// classification, and common tail block of its successors (if it's a /// diamond shape). struct BBInfo { BBICKind Kind; - MachineBasicBlock *EBB; - MachineBasicBlock *TBB; - MachineBasicBlock *FBB; - MachineBasicBlock *CMBB; + MachineBasicBlock *BB; + MachineBasicBlock *TrueBB; + MachineBasicBlock *FalseBB; + MachineBasicBlock *TailBB; std::vector Cond; - BBInfo() : Kind(ICInvalid), EBB(0), TBB(0), FBB(0), CMBB(0) {} + unsigned Size; + BBInfo() : Kind(ICInvalid), BB(0), TrueBB(0), FalseBB(0), TailBB(0), Size(0) {} }; /// BBAnalysis - Results of if-conversion feasibility analysis indexed by /// basic block number. std::vector BBAnalysis; + const TargetLowering *TLI; const TargetInstrInfo *TII; bool MadeChange; public: @@ -72,7 +75,7 @@ void PredicateBlock(MachineBasicBlock *BB, std::vector &Cond, bool IgnoreTerm = false); - void MergeBlocks(MachineBasicBlock *TBB, MachineBasicBlock *FBB); + void MergeBlocks(BBInfo &TrueBBI, BBInfo &FalseBBI); }; char IfConverter::ID = 0; } @@ -80,6 +83,7 @@ FunctionPass *llvm::createIfConverterPass() { return new IfConverter(); } bool IfConverter::runOnMachineFunction(MachineFunction &MF) { + TLI = MF.getTarget().getTargetLowering(); TII = MF.getTarget().getInstrInfo(); if (!TII) return false; @@ -95,7 +99,7 @@ InitialFunctionAnalysis(MF, Candidates); for (unsigned i = 0, e = Candidates.size(); i != e; ++i) { - BBInfo &BBI = BBAnalysis[i]; + BBInfo &BBI = BBAnalysis[Candidates[i]]; switch (BBI.Kind) { default: assert(false && "Unexpected!"); break; @@ -111,11 +115,11 @@ } static MachineBasicBlock *findFalseBlock(MachineBasicBlock *BB, - MachineBasicBlock *TBB) { + MachineBasicBlock *TrueBB) { for (MachineBasicBlock::succ_iterator SI = BB->succ_begin(), E = BB->succ_end(); SI != E; ++SI) { MachineBasicBlock *SuccBB = *SI; - if (SuccBB != TBB) + if (SuccBB != TrueBB) return SuccBB; } return NULL; @@ -126,36 +130,49 @@ if (BBI.Kind != ICInvalid) return; // Always analyzed. - BBI.EBB = BB; + BBI.BB = BB; + BBI.Size = std::distance(BB->begin(), BB->end()); // Look for 'root' of a simple (non-nested) triangle or diamond. BBI.Kind = ICNotClassfied; - if (TII->AnalyzeBranch(*BB, BBI.TBB, BBI.FBB, BBI.Cond) - || !BBI.TBB || BBI.Cond.size() == 0) + if (TII->AnalyzeBranch(*BB, BBI.TrueBB, BBI.FalseBB, BBI.Cond) + || !BBI.TrueBB || BBI.Cond.size() == 0) return; - // Can't do it if 'true' block is already marked as to be if-converted. - AnalyzeBlock(BBI.TBB); - BBInfo &TBBI = BBAnalysis[BBI.TBB->getNumber()]; - if (TBBI.Kind != ICNotClassfied) + + // Not a candidate if 'true' block has another predecessor. + // FIXME: Use or'd predicate or predicated cmp. + if (BBI.TrueBB->pred_size() > 1) + return; + + // Not a candidate if 'true' block is going to be if-converted. + AnalyzeBlock(BBI.TrueBB); + BBInfo &TrueBBI = BBAnalysis[BBI.TrueBB->getNumber()]; + if (TrueBBI.Kind != ICNotClassfied) return; // No false branch. This BB must end with a conditional branch and a // fallthrough. - if (!BBI.FBB) - BBI.FBB = findFalseBlock(BB, BBI.TBB); - assert(BBI.FBB && "Expected to find the fallthrough block!"); - - // Can't do it if 'false' block is already marked as to be if-converted. - AnalyzeBlock(BBI.FBB); - BBInfo &FBBI = BBAnalysis[BBI.FBB->getNumber()]; - if (FBBI.Kind != ICNotClassfied) + if (!BBI.FalseBB) + BBI.FalseBB = findFalseBlock(BB, BBI.TrueBB); + assert(BBI.FalseBB && "Expected to find the fallthrough block!"); + + // Not a candidate if 'false' block has another predecessor. + // FIXME: Invert condition and swap 'true' / 'false' blocks? + if (BBI.FalseBB->pred_size() > 1) + return; + + // Not a candidate if 'false' block is going to be if-converted. + AnalyzeBlock(BBI.FalseBB); + BBInfo &FalseBBI = BBAnalysis[BBI.FalseBB->getNumber()]; + if (FalseBBI.Kind != ICNotClassfied) return; // TODO: Only handle very simple cases for now. - if (TBBI.FBB || FBBI.FBB || TBBI.Cond.size() > 1 || FBBI.Cond.size() > 1) + if (TrueBBI.FalseBB || FalseBBI.FalseBB || + TrueBBI.Cond.size() || FalseBBI.Cond.size()) return; - if (TBBI.TBB && TBBI.TBB == BBI.FBB) { + if (TrueBBI.TrueBB && TrueBBI.TrueBB == BBI.FalseBB) { // Triangle: // EBB // | \_ @@ -164,19 +181,19 @@ // | / // FBB BBI.Kind = ICTriangleEntry; - TBBI.Kind = FBBI.Kind = ICTriangle; - } else if (TBBI.TBB == FBBI.TBB) { + TrueBBI.Kind = FalseBBI.Kind = ICTriangle; + } else if (TrueBBI.TrueBB == FalseBBI.TrueBB) { // Diamond: // EBB // / \_ // | | // TBB FBB // \ / - // MBB + // TailBB // Note MBB can be empty in case both TBB and FBB are return blocks. BBI.Kind = ICDiamondEntry; - TBBI.Kind = FBBI.Kind = ICDiamond; - BBI.CMBB = TBBI.TBB; + TrueBBI.Kind = FalseBBI.Kind = ICDiamond; + BBI.TailBB = TrueBBI.TrueBB; } return; } @@ -194,24 +211,55 @@ } } +/// TransferPreds - Transfer all the predecessors of FromBB to ToBB. +/// +static void TransferPreds(MachineBasicBlock *ToBB, MachineBasicBlock *FromBB) { + std::vector Preds(FromBB->pred_begin(), + FromBB->pred_end()); + for (unsigned i = 0, e = Preds.size(); i != e; ++i) { + MachineBasicBlock *Pred = Preds[i]; + Pred->removeSuccessor(FromBB); + if (!Pred->isSuccessor(ToBB)) + Pred->addSuccessor(ToBB); + } +} + +/// TransferSuccs - Transfer all the successors of FromBB to ToBB. +/// +static void TransferSuccs(MachineBasicBlock *ToBB, MachineBasicBlock *FromBB) { + std::vector Succs(FromBB->succ_begin(), + FromBB->succ_end()); + for (unsigned i = 0, e = Succs.size(); i != e; ++i) { + MachineBasicBlock *Succ = Succs[i]; + FromBB->removeSuccessor(Succ); + if (!ToBB->isSuccessor(Succ)) + ToBB->addSuccessor(Succ); + } +} + /// IfConvertTriangle - If convert a triangle sub-CFG. /// bool IfConverter::IfConvertTriangle(BBInfo &BBI) { - if (isBlockPredicable(BBI.TBB)) { + if (isBlockPredicable(BBI.TrueBB)) { + BBInfo &TrueBBI = BBAnalysis[BBI.TrueBB->getNumber()]; + BBInfo &FalseBBI = BBAnalysis[BBI.FalseBB->getNumber()]; + // Predicate the 'true' block after removing its branch. - TII->RemoveBranch(*BBI.TBB); - PredicateBlock(BBI.TBB, BBI.Cond); + TrueBBI.Size -= TII->RemoveBranch(*BBI.TrueBB); + PredicateBlock(BBI.TrueBB, BBI.Cond); // Join the 'true' and 'false' blocks by copying the instructions // from the 'false' block to the 'true' block. - MergeBlocks(BBI.TBB, BBI.FBB); + BBI.TrueBB->removeSuccessor(BBI.FalseBB); + MergeBlocks(TrueBBI, FalseBBI); - // Adjust entry block, it should have but a single unconditional - // branch. - BBI.EBB->removeSuccessor(BBI.FBB); - TII->RemoveBranch(*BBI.EBB); - std::vector NoCond; - TII->InsertBranch(*BBI.EBB, BBI.TBB, NULL, NoCond); + // Now merge the entry of the triangle with the true block. + BBI.Size -= TII->RemoveBranch(*BBI.BB); + MergeBlocks(BBI, TrueBBI); + + // Update block info. + TrueBBI.Kind = ICInvalid; + FalseBBI.Kind = ICInvalid; // FIXME: Must maintain LiveIns. NumIfConvBBs++; @@ -223,14 +271,14 @@ /// IfConvertDiamond - If convert a diamond sub-CFG. /// bool IfConverter::IfConvertDiamond(BBInfo &BBI) { - if (isBlockPredicable(BBI.TBB) && isBlockPredicable(BBI.FBB)) { + if (isBlockPredicable(BBI.TrueBB) && isBlockPredicable(BBI.FalseBB)) { std::vector Dups; - if (!BBI.CMBB) { + if (!BBI.TailBB) { // No common merge block. Check if the terminators (e.g. return) are // the same or predicable. - MachineBasicBlock::iterator TT = BBI.TBB->getFirstTerminator(); - MachineBasicBlock::iterator FT = BBI.FBB->getFirstTerminator(); - while (TT != BBI.TBB->end() && FT != BBI.FBB->end()) { + MachineBasicBlock::iterator TT = BBI.TrueBB->getFirstTerminator(); + MachineBasicBlock::iterator FT = BBI.FalseBB->getFirstTerminator(); + while (TT != BBI.TrueBB->end() && FT != BBI.FalseBB->end()) { if (TT->isIdenticalTo(FT)) Dups.push_back(TT); // Will erase these later. else if (!TT->isPredicable() && !FT->isPredicable()) @@ -240,37 +288,65 @@ } // One of the two pathes have more terminators, make sure they are all // predicable. - while (TT != BBI.TBB->end()) + while (TT != BBI.TrueBB->end()) if (!TT->isPredicable()) return false; // Can't if-convert. Abort! - while (FT != BBI.FBB->end()) + while (FT != BBI.FalseBB->end()) if (!FT->isPredicable()) return false; // Can't if-convert. Abort! } + BBInfo &TrueBBI = BBAnalysis[BBI.TrueBB->getNumber()]; + BBInfo &FalseBBI = BBAnalysis[BBI.FalseBB->getNumber()]; + // Remove the duplicated instructions from the 'true' block. - for (unsigned i = 0, e = Dups.size(); i != e; ++i) + for (unsigned i = 0, e = Dups.size(); i != e; ++i) { Dups[i]->eraseFromParent(); + --TrueBBI.Size; + } // Predicate the 'true' block after removing its branch. - TII->RemoveBranch(*BBI.TBB); - PredicateBlock(BBI.TBB, BBI.Cond); + TrueBBI.Size -= TII->RemoveBranch(*BBI.TrueBB); + PredicateBlock(BBI.TrueBB, BBI.Cond); // Predicate the 'false' block. std::vector NewCond(BBI.Cond); TII->ReverseBranchCondition(NewCond); - PredicateBlock(BBI.FBB, NewCond, true); + PredicateBlock(BBI.FalseBB, NewCond, true); - // Join the 'true' and 'false' blocks by copying the instructions + // Merge the 'true' and 'false' blocks by copying the instructions // from the 'false' block to the 'true' block. - MergeBlocks(BBI.TBB, BBI.FBB); + MergeBlocks(TrueBBI, FalseBBI); + + // Remove the conditional branch from entry to the blocks. + BBI.Size -= TII->RemoveBranch(*BBI.BB); - // Adjust entry block, it should have but a single unconditional - // branch . - BBI.EBB->removeSuccessor(BBI.FBB); - TII->RemoveBranch(*BBI.EBB); - std::vector NoCond; - TII->InsertBranch(*BBI.EBB, BBI.TBB, NULL, NoCond); + // Merge the combined block into the entry of the diamond if the entry + // block is the only predecessor. Otherwise, insert an unconditional + // branch. + BBInfo *CvtBBI = &TrueBBI; + if (BBI.TrueBB->pred_size() == 1) { + BBI.BB->removeSuccessor(BBI.TrueBB); + MergeBlocks(BBI, TrueBBI); + CvtBBI = &BBI; + } else { + std::vector NoCond; + TII->InsertBranch(*BBI.BB, BBI.TrueBB, NULL, NoCond); + } + + // If the if-converted block fallthrough into the tail block, then + // fold the tail block in as well. + if (BBI.TailBB && CvtBBI->BB->succ_size() == 1) { + CvtBBI->Size -= TII->RemoveBranch(*CvtBBI->BB); + CvtBBI->BB->removeSuccessor(BBI.TailBB); + BBInfo TailBBI = BBAnalysis[BBI.TailBB->getNumber()]; + MergeBlocks(*CvtBBI, TailBBI); + TailBBI.Kind = ICInvalid; + } + + // Update block info. + TrueBBI.Kind = ICInvalid; + FalseBBI.Kind = ICInvalid; // FIXME: Must maintain LiveIns. NumIfConvBBs += 2; @@ -283,6 +359,10 @@ /// cases, that means all the instructions in the block has M_PREDICABLE flag. /// It assume all the terminator instructions can be converted or deleted. bool IfConverter::isBlockPredicable(MachineBasicBlock *BB) const { + const BBInfo &BBI = BBAnalysis[BB->getNumber()]; + if (BBI.Size == 0 || BBI.Size > TLI->getIfCvtBlockSizeLimit()) + return false; + for (MachineBasicBlock::iterator I = BB->begin(), E = BB->end(); I != E; ++I) { if (TII->isTerminatorInstr(I->getOpcode())) @@ -309,8 +389,13 @@ } } -/// MergeBlocks - Move all instructions from FBB to the end of TBB. +/// MergeBlocks - Move all instructions from FromBB to the end of ToBB. /// -void IfConverter::MergeBlocks(MachineBasicBlock *TBB, MachineBasicBlock *FBB) { - TBB->splice(TBB->end(), FBB, FBB->begin(), FBB->end()); +void IfConverter::MergeBlocks(BBInfo &ToBBI, BBInfo &FromBBI) { + ToBBI.BB->splice(ToBBI.BB->end(), + FromBBI.BB, FromBBI.BB->begin(), FromBBI.BB->end()); + TransferPreds(ToBBI.BB, FromBBI.BB); + TransferSuccs(ToBBI.BB, FromBBI.BB); + ToBBI.Size += FromBBI.Size; + FromBBI.Size = 0; } From sabre at nondot.org Thu May 17 19:44:47 2007 From: sabre at nondot.org (Chris Lattner) Date: Thu, 17 May 2007 19:44:47 -0500 Subject: [llvm-commits] CVS: llvm/docs/ReleaseNotes.html Message-ID: <200705180044.l4I0ilZw030938@zion.cs.uiuc.edu> Changes in directory llvm/docs: ReleaseNotes.html updated: 1.381 -> 1.382 --- Log message: tweak --- Diffs of the changes: (+6 -7) ReleaseNotes.html | 13 ++++++------- 1 files changed, 6 insertions(+), 7 deletions(-) Index: llvm/docs/ReleaseNotes.html diff -u llvm/docs/ReleaseNotes.html:1.381 llvm/docs/ReleaseNotes.html:1.382 --- llvm/docs/ReleaseNotes.html:1.381 Thu May 17 17:03:43 2007 +++ llvm/docs/ReleaseNotes.html Thu May 17 19:44:29 2007 @@ -828,11 +828,10 @@

    A wide variety of additional information is available on the LLVM web page, including documentation and publications describing algorithms and -components implemented in LLVM. The web page also contains versions of the -API documentation which is up-to-date with the CVS version of the source code. +href="http://llvm.org">LLVM web page, in particular in the documentation section. The web page also +contains versions of the API documentation which is up-to-date with the CVS +version of the source code. You can access versions of these documents specific to this release by going into the "llvm/doc/" directory in the LLVM tree.

    @@ -851,8 +850,8 @@ Valid HTML 4.01! - The LLVM Compiler Infrastructure
    - Last modified: $Date: 2007/05/17 22:03:43 $ + LLVM Compiler Infrastructure
    + Last modified: $Date: 2007/05/18 00:44:29 $ From nicholas at mxc.ca Thu May 17 19:48:13 2007 From: nicholas at mxc.ca (Nick Lewycky) Date: Thu, 17 May 2007 20:48:13 -0400 Subject: [llvm-commits] CVS: llvm/docs/ReleaseNotes.html In-Reply-To: <200705172141.l4HLfn9p005966@zion.cs.uiuc.edu> References: <200705172141.l4HLfn9p005966@zion.cs.uiuc.edu> Message-ID: <464CF7CD.9010002@mxc.ca> Chris Lattner wrote: > +
  • Pass registration is slightly different in LLVM 2.0 (you now needs an Either s/you/LLVM/ or s/needs/need/ . Nick From evan.cheng at apple.com Thu May 17 20:20:15 2007 From: evan.cheng at apple.com (Evan Cheng) Date: Thu, 17 May 2007 20:20:15 -0500 Subject: [llvm-commits] CVS: llvm/lib/Target/ARM/ARMISelLowering.cpp Message-ID: <200705180120.l4I1KFXQ000617@zion.cs.uiuc.edu> Changes in directory llvm/lib/Target/ARM: ARMISelLowering.cpp updated: 1.54 -> 1.55 --- Log message: Silence some compilation warnings. --- Diffs of the changes: (+2 -2) ARMISelLowering.cpp | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-) Index: llvm/lib/Target/ARM/ARMISelLowering.cpp diff -u llvm/lib/Target/ARM/ARMISelLowering.cpp:1.54 llvm/lib/Target/ARM/ARMISelLowering.cpp:1.55 --- llvm/lib/Target/ARM/ARMISelLowering.cpp:1.54 Thu May 17 19:19:34 2007 +++ llvm/lib/Target/ARM/ARMISelLowering.cpp Thu May 17 20:19:57 2007 @@ -1369,7 +1369,7 @@ unsigned SrcOff = 0, DstOff = 0; MVT::ValueType VT = MVT::i32; unsigned VTSize = 4; - const int MAX_LOADS_IN_LDM = 6; + const unsigned MAX_LOADS_IN_LDM = 6; SDOperand LoadChains[MAX_LOADS_IN_LDM]; SDOperand Loads[MAX_LOADS_IN_LDM]; @@ -1377,7 +1377,7 @@ // number of stores. The loads and stores will get combined into // ldm/stm later on. while(EmittedNumMemOps < NumMemOps) { - unsigned int i; + unsigned i; for (i=0; i Changes in directory llvm/lib/CodeGen: BranchFolding.cpp updated: 1.53 -> 1.54 --- Log message: Remove some unneeded branches. (spotted by Evan, thanks) --- Diffs of the changes: (+1 -0) BranchFolding.cpp | 1 + 1 files changed, 1 insertion(+) Index: llvm/lib/CodeGen/BranchFolding.cpp diff -u llvm/lib/CodeGen/BranchFolding.cpp:1.53 llvm/lib/CodeGen/BranchFolding.cpp:1.54 --- llvm/lib/CodeGen/BranchFolding.cpp:1.53 Tue May 15 16:19:17 2007 +++ llvm/lib/CodeGen/BranchFolding.cpp Thu May 17 20:28:58 2007 @@ -595,6 +595,7 @@ // Reinsert an unconditional branch if needed. // The 1 below can be either an original single predecessor, or a result // of removing blocks in TryMergeBlocks. + PredBB = prior(I); // this may have been changed in TryMergeBlocks if (MergePotentials.size()==1 && (MergePotentials.begin())->second != PredBB) FixTail((MergePotentials.begin())->second, I, TII); From evan.cheng at apple.com Thu May 17 20:54:12 2007 From: evan.cheng at apple.com (Evan Cheng) Date: Thu, 17 May 2007 20:54:12 -0500 Subject: [llvm-commits] CVS: llvm/lib/Target/ARM/ARMInstrInfo.td Message-ID: <200705180154.l4I1sCdA002547@zion.cs.uiuc.edu> Changes in directory llvm/lib/Target/ARM: ARMInstrInfo.td updated: 1.103 -> 1.104 --- Log message: Mark calls non-predicable for now. Need to ensure it's the last instruction in the if-converted block or make sure it preserve condition code. --- Diffs of the changes: (+8 -8) ARMInstrInfo.td | 16 ++++++++-------- 1 files changed, 8 insertions(+), 8 deletions(-) Index: llvm/lib/Target/ARM/ARMInstrInfo.td diff -u llvm/lib/Target/ARM/ARMInstrInfo.td:1.103 llvm/lib/Target/ARM/ARMInstrInfo.td:1.104 --- llvm/lib/Target/ARM/ARMInstrInfo.td:1.103 Wed May 16 15:50:01 2007 +++ llvm/lib/Target/ARM/ARMInstrInfo.td Thu May 17 20:53:54 2007 @@ -575,17 +575,17 @@ let isCall = 1, noResults = 1, Defs = [R0, R1, R2, R3, R12, LR, D0, D1, D2, D3, D4, D5, D6, D7] in { - def BL : AXI<(ops i32imm:$func, pred:$p, variable_ops), - "bl$p ${func:call}", + def BL : AXI<(ops i32imm:$func, variable_ops), + "bl ${func:call}", [(ARMcall tglobaladdr:$func)]>; // ARMv5T and above - def BLX : AXI<(ops GPR:$dst, pred:$p, variable_ops), - "blx$p $dst", + def BLX : AXI<(ops GPR:$dst, variable_ops), + "blx $dst", [(ARMcall GPR:$dst)]>, Requires<[IsARM, HasV5T]>; let Uses = [LR] in { // ARMv4T - def BX : AXIx2<(ops GPR:$dst, pred:$p, variable_ops), - "mov$p lr, pc\n\tbx$p $dst", + def BX : AXIx2<(ops GPR:$dst, variable_ops), + "mov lr, pc\n\tbx $dst", [(ARMcall_nolink GPR:$dst)]>; } } @@ -1110,8 +1110,8 @@ // __aeabi_read_tp preserves the registers r1-r3. let isCall = 1, Defs = [R0, R12, LR] in { - def TPsoft : AI<(ops), - "bl", " __aeabi_read_tp", + def TPsoft : AXI<(ops), + "bl __aeabi_read_tp", [(set R0, ARMthread_pointer)]>; } From evan.cheng at apple.com Thu May 17 20:56:18 2007 From: evan.cheng at apple.com (Evan Cheng) Date: Thu, 17 May 2007 20:56:18 -0500 Subject: [llvm-commits] CVS: llvm/lib/CodeGen/IfConversion.cpp Message-ID: <200705180156.l4I1uIQR002685@zion.cs.uiuc.edu> Changes in directory llvm/lib/CodeGen: IfConversion.cpp updated: 1.5 -> 1.6 --- Log message: If true / false blocks fallthrough before ifcvt, add unconditional branches to ifcvt'd block. --- Diffs of the changes: (+19 -4) IfConversion.cpp | 23 +++++++++++++++++++---- 1 files changed, 19 insertions(+), 4 deletions(-) Index: llvm/lib/CodeGen/IfConversion.cpp diff -u llvm/lib/CodeGen/IfConversion.cpp:1.5 llvm/lib/CodeGen/IfConversion.cpp:1.6 --- llvm/lib/CodeGen/IfConversion.cpp:1.5 Thu May 17 19:20:58 2007 +++ llvm/lib/CodeGen/IfConversion.cpp Thu May 17 20:55:58 2007 @@ -87,8 +87,6 @@ TII = MF.getTarget().getInstrInfo(); if (!TII) return false; - MadeChange = false; - MF.RenumberBlocks(); unsigned NumBBs = MF.getNumBlockIDs(); BBAnalysis.resize(NumBBs); @@ -98,6 +96,7 @@ // candidates to perform if-convesion. InitialFunctionAnalysis(MF, Candidates); + MadeChange = false; for (unsigned i = 0, e = Candidates.size(); i != e; ++i) { BBInfo &BBI = BBAnalysis[Candidates[i]]; switch (BBI.Kind) { @@ -111,6 +110,9 @@ break; } } + + BBAnalysis.clear(); + return MadeChange; } @@ -150,6 +152,10 @@ if (TrueBBI.Kind != ICNotClassfied) return; + // TODO: Only handle very simple cases for now. + if (TrueBBI.FalseBB || TrueBBI.Cond.size()) + return; + // No false branch. This BB must end with a conditional branch and a // fallthrough. if (!BBI.FalseBB) @@ -168,8 +174,7 @@ return; // TODO: Only handle very simple cases for now. - if (TrueBBI.FalseBB || FalseBBI.FalseBB || - TrueBBI.Cond.size() || FalseBBI.Cond.size()) + if (FalseBBI.FalseBB || FalseBBI.Cond.size()) return; if (TrueBBI.TrueBB && TrueBBI.TrueBB == BBI.FalseBB) { @@ -309,11 +314,21 @@ TrueBBI.Size -= TII->RemoveBranch(*BBI.TrueBB); PredicateBlock(BBI.TrueBB, BBI.Cond); + // Either the 'true' block fallthrough to another block or it ends with a + // return. If it's the former, add a conditional branch to its successor. + if (!TrueBBI.TrueBB) + TII->InsertBranch(*BBI.TrueBB, *BBI.TrueBB->succ_begin(), NULL, BBI.Cond); + // Predicate the 'false' block. std::vector NewCond(BBI.Cond); TII->ReverseBranchCondition(NewCond); PredicateBlock(BBI.FalseBB, NewCond, true); + // Either the 'false' block fallthrough to another block or it ends with a + // return. If it's the former, add a conditional branch to its successor. + if (!FalseBBI.TrueBB) + TII->InsertBranch(*BBI.FalseBB, *BBI.FalseBB->succ_begin(), NULL,NewCond); + // Merge the 'true' and 'false' blocks by copying the instructions // from the 'false' block to the 'true' block. MergeBlocks(TrueBBI, FalseBBI); From reid at x10sys.com Thu May 17 21:06:21 2007 From: reid at x10sys.com (Reid Spencer) Date: Thu, 17 May 2007 21:06:21 -0500 Subject: [llvm-commits] CVS: llvm/test/TestRunner.sh Message-ID: <200705180206.l4I26Lmw003275@zion.cs.uiuc.edu> Changes in directory llvm/test: TestRunner.sh updated: 1.19 -> 1.20 --- Log message: Avoid an infinite loop when TestRunner.sh is run outside of the test dir. --- Diffs of the changes: (+7 -5) TestRunner.sh | 12 +++++++----- 1 files changed, 7 insertions(+), 5 deletions(-) Index: llvm/test/TestRunner.sh diff -u llvm/test/TestRunner.sh:1.19 llvm/test/TestRunner.sh:1.20 --- llvm/test/TestRunner.sh:1.19 Wed May 16 12:56:56 2007 +++ llvm/test/TestRunner.sh Thu May 17 21:06:03 2007 @@ -13,11 +13,13 @@ # TESTPATH=`pwd` SUBDIR="" -while test `basename $TESTPATH` != "test" -a ! -z "$TESTPATH" ; do - tmp=`basename $TESTPATH` - SUBDIR="$tmp/$SUBDIR" - TESTPATH=`dirname $TESTPATH` -done +if test `dirname $1` == "." ; then + while test `basename $TESTPATH` != "test" -a ! -z "$TESTPATH" ; do + tmp=`basename $TESTPATH` + SUBDIR="$tmp/$SUBDIR" + TESTPATH=`dirname $TESTPATH` + done +fi for TESTFILE in "$@" ; do if test `dirname $TESTFILE` == . ; then From clattner at apple.com Thu May 17 22:24:03 2007 From: clattner at apple.com (Chris Lattner) Date: Thu, 17 May 2007 20:24:03 -0700 Subject: [llvm-commits] CVS: llvm/lib/Target/ARM/ARMInstrInfo.td In-Reply-To: <200705180154.l4I1sCdA002547@zion.cs.uiuc.edu> References: <200705180154.l4I1sCdA002547@zion.cs.uiuc.edu> Message-ID: > Mark calls non-predicable for now. Need to ensure it's the last > instruction in the if-converted block or make sure it preserve > condition code. Plz add this to the readme file, so it doesn't get forgotten, -Chris From reid at x10sys.com Thu May 17 22:34:41 2007 From: reid at x10sys.com (Reid Spencer) Date: Thu, 17 May 2007 22:34:41 -0500 Subject: [llvm-commits] CVS: llvm-test/RunSafely.sh Message-ID: <200705180334.l4I3YfHf005979@zion.cs.uiuc.edu> Changes in directory llvm-test: RunSafely.sh updated: 1.30 -> 1.31 --- Log message: Don't execute ulimit in a sub-shell as its effects are only for the shell that it executes in. Use "eval" instead of "sh -c". This also saves a fork. Patch by Emil Mikulic --- Diffs of the changes: (+2 -1) RunSafely.sh | 3 ++- 1 files changed, 2 insertions(+), 1 deletion(-) Index: llvm-test/RunSafely.sh diff -u llvm-test/RunSafely.sh:1.30 llvm-test/RunSafely.sh:1.31 --- llvm-test/RunSafely.sh:1.30 Fri May 4 16:31:42 2007 +++ llvm-test/RunSafely.sh Thu May 17 22:34:23 2007 @@ -35,6 +35,7 @@ # is the path to the program to run # are the arguments to pass to the program. # + if [ $# -lt 4 ]; then echo "./RunSafely.sh " exit 1 @@ -102,7 +103,7 @@ fi if [ "x$RHOST" = x ] ; then - ( sh -c "$ULIMITCMD"; time -p sh -c "$COMMAND >$OUTFILE 2>&1 < $INFILE" ; echo exit $? ) 2>&1 \ + ( eval $ULIMITCMD time -p sh -c "$COMMAND >$OUTFILE 2>&1 < $INFILE" ; echo exit $? ) 2>&1 \ | awk -- '\ BEGIN { cpu = 0.0; } /^user/ { cpu += $2; print; } From reid at x10sys.com Thu May 17 22:47:09 2007 From: reid at x10sys.com (Reid Spencer) Date: Thu, 17 May 2007 22:47:09 -0500 Subject: [llvm-commits] CVS: llvm/test/Linker/link-archive.ll Message-ID: <200705180347.l4I3l9XR006215@zion.cs.uiuc.edu> Changes in directory llvm/test/Linker: link-archive.ll added (r1.1) --- Log message: Add a test case for PR1434: http://llvm.org/PR1434 --- Diffs of the changes: (+15 -0) link-archive.ll | 15 +++++++++++++++ 1 files changed, 15 insertions(+) Index: llvm/test/Linker/link-archive.ll diff -c /dev/null llvm/test/Linker/link-archive.ll:1.1 *** /dev/null Thu May 17 22:47:00 2007 --- llvm/test/Linker/link-archive.ll Thu May 17 22:46:50 2007 *************** *** 0 **** --- 1,15 ---- + ; Test linking of a bc file to an archive via llvm-ld. + ; PR1434 + ; RUN: llvm-as %s -o %t.bar.bc -f + ; RUN: echo {define i32* @foo(i32 %x) \{ ret i32* @baz \} \ + ; RUN: @baz = external global i32 } | llvm-as -o %t.foo.bc -f + ; RUN: llvm-ar rf %t.foo.a %t.foo.bc + ; RUN: llvm-ar rf %t.bar.a %t.bar.bc + ; RUN: llvm-ld -disable-opt %t.bar.bc %t.foo.a -o %t.bc + ; RUN: llvm-ld -disable-opt %t.foo.bc %t.bar.a -o %t.bc + declare i32* @foo(...) + define i32* @bar() { + %ret = call i32* (...)* @foo( i32 123 ) + ret i32* %ret + } + @baz = global i32 0 From sabre at nondot.org Thu May 17 23:03:04 2007 From: sabre at nondot.org (Chris Lattner) Date: Thu, 17 May 2007 23:03:04 -0500 Subject: [llvm-commits] CVS: llvm/lib/Bitcode/Reader/BitcodeReader.cpp BitcodeReader.h Message-ID: <200705180403.l4I434fW006635@zion.cs.uiuc.edu> Changes in directory llvm/lib/Bitcode/Reader: BitcodeReader.cpp updated: 1.49 -> 1.50 BitcodeReader.h updated: 1.20 -> 1.21 --- Log message: Fix PR1434: http://llvm.org/PR1434 and test/Linker/link-archive.ll, this is a regression from 1.9. --- Diffs of the changes: (+91 -54) BitcodeReader.cpp | 135 ++++++++++++++++++++++++++++++++---------------------- BitcodeReader.h | 10 +++- 2 files changed, 91 insertions(+), 54 deletions(-) Index: llvm/lib/Bitcode/Reader/BitcodeReader.cpp diff -u llvm/lib/Bitcode/Reader/BitcodeReader.cpp:1.49 llvm/lib/Bitcode/Reader/BitcodeReader.cpp:1.50 --- llvm/lib/Bitcode/Reader/BitcodeReader.cpp:1.49 Tue May 15 01:29:44 2007 +++ llvm/lib/Bitcode/Reader/BitcodeReader.cpp Thu May 17 23:02:46 2007 @@ -24,8 +24,15 @@ #include "llvm/Support/MemoryBuffer.h" using namespace llvm; -BitcodeReader::~BitcodeReader() { +void BitcodeReader::FreeState() { delete Buffer; + Buffer = 0; + std::vector().swap(TypeList); + ValueList.clear(); + std::vector().swap(ParamAttrs); + std::vector().swap(FunctionBBs); + std::vector().swap(FunctionsWithBodies); + DeferredFunctionInfo.clear(); } //===----------------------------------------------------------------------===// @@ -1102,53 +1109,6 @@ } -bool BitcodeReader::materializeFunction(Function *F, std::string *ErrInfo) { - // If it already is material, ignore the request. - if (!F->hasNotBeenReadFromBytecode()) return false; - - DenseMap >::iterator DFII = - DeferredFunctionInfo.find(F); - assert(DFII != DeferredFunctionInfo.end() && "Deferred function not found!"); - - // Move the bit stream to the saved position of the deferred function body and - // restore the real linkage type for the function. - Stream.JumpToBit(DFII->second.first); - F->setLinkage((GlobalValue::LinkageTypes)DFII->second.second); - - if (ParseFunctionBody(F)) { - if (ErrInfo) *ErrInfo = ErrorString; - return true; - } - - return false; -} - -void BitcodeReader::dematerializeFunction(Function *F) { - // If this function isn't materialized, or if it is a proto, this is a noop. - if (F->hasNotBeenReadFromBytecode() || F->isDeclaration()) - return; - - assert(DeferredFunctionInfo.count(F) && "No info to read function later?"); - - // Just forget the function body, we can remat it later. - F->deleteBody(); - F->setLinkage(GlobalValue::GhostLinkage); -} - - -Module *BitcodeReader::materializeModule(std::string *ErrInfo) { - for (DenseMap >::iterator I = - DeferredFunctionInfo.begin(), E = DeferredFunctionInfo.end(); I != E; - ++I) { - Function *F = I->first; - if (F->hasNotBeenReadFromBytecode() && - materializeFunction(F, ErrInfo)) - return 0; - } - return TheModule; -} - - /// ParseFunctionBody - Lazily parse the specified function body block. bool BitcodeReader::ParseFunctionBody(Function *F) { if (Stream.EnterSubBlock(bitc::FUNCTION_BLOCK_ID)) @@ -1597,6 +1557,69 @@ return false; } +//===----------------------------------------------------------------------===// +// ModuleProvider implementation +//===----------------------------------------------------------------------===// + + +bool BitcodeReader::materializeFunction(Function *F, std::string *ErrInfo) { + // If it already is material, ignore the request. + if (!F->hasNotBeenReadFromBytecode()) return false; + + DenseMap >::iterator DFII = + DeferredFunctionInfo.find(F); + assert(DFII != DeferredFunctionInfo.end() && "Deferred function not found!"); + + // Move the bit stream to the saved position of the deferred function body and + // restore the real linkage type for the function. + Stream.JumpToBit(DFII->second.first); + F->setLinkage((GlobalValue::LinkageTypes)DFII->second.second); + + if (ParseFunctionBody(F)) { + if (ErrInfo) *ErrInfo = ErrorString; + return true; + } + + return false; +} + +void BitcodeReader::dematerializeFunction(Function *F) { + // If this function isn't materialized, or if it is a proto, this is a noop. + if (F->hasNotBeenReadFromBytecode() || F->isDeclaration()) + return; + + assert(DeferredFunctionInfo.count(F) && "No info to read function later?"); + + // Just forget the function body, we can remat it later. + F->deleteBody(); + F->setLinkage(GlobalValue::GhostLinkage); +} + + +Module *BitcodeReader::materializeModule(std::string *ErrInfo) { + for (DenseMap >::iterator I = + DeferredFunctionInfo.begin(), E = DeferredFunctionInfo.end(); I != E; + ++I) { + Function *F = I->first; + if (F->hasNotBeenReadFromBytecode() && + materializeFunction(F, ErrInfo)) + return 0; + } + return TheModule; +} + + +/// This method is provided by the parent ModuleProvde class and overriden +/// here. It simply releases the module from its provided and frees up our +/// state. +/// @brief Release our hold on the generated module +Module *BitcodeReader::releaseModule(std::string *ErrInfo) { + // Since we're losing control of this Module, we must hand it back complete + Module *M = ModuleProvider::releaseModule(ErrInfo); + FreeState(); + return M; +} + //===----------------------------------------------------------------------===// // External interface @@ -1626,12 +1649,18 @@ R = static_cast(getBitcodeModuleProvider(Buffer, ErrMsg)); if (!R) return 0; - // Read the whole module, get a pointer to it, tell ModuleProvider not to - // delete it when its dtor is run. - Module *M = R->releaseModule(ErrMsg); - - // Don't let the BitcodeReader dtor delete 'Buffer'. + // Read in the entire module. + Module *M = R->materializeModule(ErrMsg); + + // Don't let the BitcodeReader dtor delete 'Buffer', regardless of whether + // there was an error. R->releaseMemoryBuffer(); + + // If there was no error, tell ModuleProvider not to delete it when its dtor + // is run. + if (M) + M = R->releaseModule(ErrMsg); + delete R; return M; } Index: llvm/lib/Bitcode/Reader/BitcodeReader.h diff -u llvm/lib/Bitcode/Reader/BitcodeReader.h:1.20 llvm/lib/Bitcode/Reader/BitcodeReader.h:1.21 --- llvm/lib/Bitcode/Reader/BitcodeReader.h:1.20 Tue May 15 01:29:44 2007 +++ llvm/lib/Bitcode/Reader/BitcodeReader.h Thu May 17 23:02:46 2007 @@ -39,6 +39,10 @@ ++