URL
https://opencores.org/ocsvn/lxp32/lxp32/trunk
Subversion Repositories lxp32
Compare Revisions
- This comparison shows the changes necessary to convert path
/lxp32/trunk/verify/lxp32/src
- from Rev 6 to Rev 9
- ↔ Reverse comparison
Rev 6 → Rev 9
/firmware/test001.asm
1,482 → 1,482
/* |
* This test verifies that basic instructions |
* (data transfers, addition/subtraction, jumps) work. |
*/ |
|
lc r100, 0x10000000 // test result output pointer |
lc r101, halt |
lc r102, bad_jump |
lc r103, reg_is_nonzero |
|
// Check that all registers are zero-initialized after reset |
// Ignore r100-r103 which are already used |
cjmpne r103, r0, 0 |
cjmpne r103, r1, 0 |
cjmpne r103, r2, 0 |
cjmpne r103, r3, 0 |
cjmpne r103, r4, 0 |
cjmpne r103, r5, 0 |
cjmpne r103, r6, 0 |
cjmpne r103, r7, 0 |
cjmpne r103, r8, 0 |
cjmpne r103, r9, 0 |
cjmpne r103, r10, 0 |
cjmpne r103, r11, 0 |
cjmpne r103, r12, 0 |
cjmpne r103, r13, 0 |
cjmpne r103, r14, 0 |
cjmpne r103, r15, 0 |
cjmpne r103, r16, 0 |
cjmpne r103, r17, 0 |
cjmpne r103, r18, 0 |
cjmpne r103, r19, 0 |
cjmpne r103, r20, 0 |
cjmpne r103, r21, 0 |
cjmpne r103, r22, 0 |
cjmpne r103, r23, 0 |
cjmpne r103, r24, 0 |
cjmpne r103, r25, 0 |
cjmpne r103, r26, 0 |
cjmpne r103, r27, 0 |
cjmpne r103, r28, 0 |
cjmpne r103, r29, 0 |
cjmpne r103, r30, 0 |
cjmpne r103, r31, 0 |
cjmpne r103, r32, 0 |
cjmpne r103, r33, 0 |
cjmpne r103, r34, 0 |
cjmpne r103, r35, 0 |
cjmpne r103, r36, 0 |
cjmpne r103, r37, 0 |
cjmpne r103, r38, 0 |
cjmpne r103, r39, 0 |
cjmpne r103, r40, 0 |
cjmpne r103, r41, 0 |
cjmpne r103, r42, 0 |
cjmpne r103, r43, 0 |
cjmpne r103, r44, 0 |
cjmpne r103, r45, 0 |
cjmpne r103, r46, 0 |
cjmpne r103, r47, 0 |
cjmpne r103, r48, 0 |
cjmpne r103, r49, 0 |
cjmpne r103, r50, 0 |
cjmpne r103, r51, 0 |
cjmpne r103, r52, 0 |
cjmpne r103, r53, 0 |
cjmpne r103, r54, 0 |
cjmpne r103, r55, 0 |
cjmpne r103, r56, 0 |
cjmpne r103, r57, 0 |
cjmpne r103, r58, 0 |
cjmpne r103, r59, 0 |
cjmpne r103, r60, 0 |
cjmpne r103, r61, 0 |
cjmpne r103, r62, 0 |
cjmpne r103, r63, 0 |
cjmpne r103, r64, 0 |
cjmpne r103, r65, 0 |
cjmpne r103, r66, 0 |
cjmpne r103, r67, 0 |
cjmpne r103, r68, 0 |
cjmpne r103, r69, 0 |
cjmpne r103, r70, 0 |
cjmpne r103, r71, 0 |
cjmpne r103, r72, 0 |
cjmpne r103, r73, 0 |
cjmpne r103, r74, 0 |
cjmpne r103, r75, 0 |
cjmpne r103, r76, 0 |
cjmpne r103, r77, 0 |
cjmpne r103, r78, 0 |
cjmpne r103, r79, 0 |
cjmpne r103, r80, 0 |
cjmpne r103, r81, 0 |
cjmpne r103, r82, 0 |
cjmpne r103, r83, 0 |
cjmpne r103, r84, 0 |
cjmpne r103, r85, 0 |
cjmpne r103, r86, 0 |
cjmpne r103, r87, 0 |
cjmpne r103, r88, 0 |
cjmpne r103, r89, 0 |
cjmpne r103, r90, 0 |
cjmpne r103, r91, 0 |
cjmpne r103, r92, 0 |
cjmpne r103, r93, 0 |
cjmpne r103, r94, 0 |
cjmpne r103, r95, 0 |
cjmpne r103, r96, 0 |
cjmpne r103, r97, 0 |
cjmpne r103, r98, 0 |
cjmpne r103, r99, 0 |
cjmpne r103, r104, 0 |
cjmpne r103, r105, 0 |
cjmpne r103, r106, 0 |
cjmpne r103, r107, 0 |
cjmpne r103, r108, 0 |
cjmpne r103, r109, 0 |
cjmpne r103, r110, 0 |
cjmpne r103, r111, 0 |
cjmpne r103, r112, 0 |
cjmpne r103, r113, 0 |
cjmpne r103, r114, 0 |
cjmpne r103, r115, 0 |
cjmpne r103, r116, 0 |
cjmpne r103, r117, 0 |
cjmpne r103, r118, 0 |
cjmpne r103, r119, 0 |
cjmpne r103, r120, 0 |
cjmpne r103, r121, 0 |
cjmpne r103, r122, 0 |
cjmpne r103, r123, 0 |
cjmpne r103, r124, 0 |
cjmpne r103, r125, 0 |
cjmpne r103, r126, 0 |
cjmpne r103, r127, 0 |
cjmpne r103, r128, 0 |
cjmpne r103, r129, 0 |
cjmpne r103, r130, 0 |
cjmpne r103, r131, 0 |
cjmpne r103, r132, 0 |
cjmpne r103, r133, 0 |
cjmpne r103, r134, 0 |
cjmpne r103, r135, 0 |
cjmpne r103, r136, 0 |
cjmpne r103, r137, 0 |
cjmpne r103, r138, 0 |
cjmpne r103, r139, 0 |
cjmpne r103, r140, 0 |
cjmpne r103, r141, 0 |
cjmpne r103, r142, 0 |
cjmpne r103, r143, 0 |
cjmpne r103, r144, 0 |
cjmpne r103, r145, 0 |
cjmpne r103, r146, 0 |
cjmpne r103, r147, 0 |
cjmpne r103, r148, 0 |
cjmpne r103, r149, 0 |
cjmpne r103, r150, 0 |
cjmpne r103, r151, 0 |
cjmpne r103, r152, 0 |
cjmpne r103, r153, 0 |
cjmpne r103, r154, 0 |
cjmpne r103, r155, 0 |
cjmpne r103, r156, 0 |
cjmpne r103, r157, 0 |
cjmpne r103, r158, 0 |
cjmpne r103, r159, 0 |
cjmpne r103, r160, 0 |
cjmpne r103, r161, 0 |
cjmpne r103, r162, 0 |
cjmpne r103, r163, 0 |
cjmpne r103, r164, 0 |
cjmpne r103, r165, 0 |
cjmpne r103, r166, 0 |
cjmpne r103, r167, 0 |
cjmpne r103, r168, 0 |
cjmpne r103, r169, 0 |
cjmpne r103, r170, 0 |
cjmpne r103, r171, 0 |
cjmpne r103, r172, 0 |
cjmpne r103, r173, 0 |
cjmpne r103, r174, 0 |
cjmpne r103, r175, 0 |
cjmpne r103, r176, 0 |
cjmpne r103, r177, 0 |
cjmpne r103, r178, 0 |
cjmpne r103, r179, 0 |
cjmpne r103, r180, 0 |
cjmpne r103, r181, 0 |
cjmpne r103, r182, 0 |
cjmpne r103, r183, 0 |
cjmpne r103, r184, 0 |
cjmpne r103, r185, 0 |
cjmpne r103, r186, 0 |
cjmpne r103, r187, 0 |
cjmpne r103, r188, 0 |
cjmpne r103, r189, 0 |
cjmpne r103, r190, 0 |
cjmpne r103, r191, 0 |
cjmpne r103, r192, 0 |
cjmpne r103, r193, 0 |
cjmpne r103, r194, 0 |
cjmpne r103, r195, 0 |
cjmpne r103, r196, 0 |
cjmpne r103, r197, 0 |
cjmpne r103, r198, 0 |
cjmpne r103, r199, 0 |
cjmpne r103, r200, 0 |
cjmpne r103, r201, 0 |
cjmpne r103, r202, 0 |
cjmpne r103, r203, 0 |
cjmpne r103, r204, 0 |
cjmpne r103, r205, 0 |
cjmpne r103, r206, 0 |
cjmpne r103, r207, 0 |
cjmpne r103, r208, 0 |
cjmpne r103, r209, 0 |
cjmpne r103, r210, 0 |
cjmpne r103, r211, 0 |
cjmpne r103, r212, 0 |
cjmpne r103, r213, 0 |
cjmpne r103, r214, 0 |
cjmpne r103, r215, 0 |
cjmpne r103, r216, 0 |
cjmpne r103, r217, 0 |
cjmpne r103, r218, 0 |
cjmpne r103, r219, 0 |
cjmpne r103, r220, 0 |
cjmpne r103, r221, 0 |
cjmpne r103, r222, 0 |
cjmpne r103, r223, 0 |
cjmpne r103, r224, 0 |
cjmpne r103, r225, 0 |
cjmpne r103, r226, 0 |
cjmpne r103, r227, 0 |
cjmpne r103, r228, 0 |
cjmpne r103, r229, 0 |
cjmpne r103, r230, 0 |
cjmpne r103, r231, 0 |
cjmpne r103, r232, 0 |
cjmpne r103, r233, 0 |
cjmpne r103, r234, 0 |
cjmpne r103, r235, 0 |
cjmpne r103, r236, 0 |
cjmpne r103, r237, 0 |
cjmpne r103, r238, 0 |
cjmpne r103, r239, 0 |
cjmpne r103, r240, 0 |
cjmpne r103, r241, 0 |
cjmpne r103, r242, 0 |
cjmpne r103, r243, 0 |
cjmpne r103, r244, 0 |
cjmpne r103, r245, 0 |
cjmpne r103, r246, 0 |
cjmpne r103, r247, 0 |
cjmpne r103, r248, 0 |
cjmpne r103, r249, 0 |
cjmpne r103, r250, 0 |
cjmpne r103, r251, 0 |
cjmpne r103, r252, 0 |
cjmpne r103, r253, 0 |
cjmpne r103, r254, 0 |
cjmpne r103, r255, 0 |
lc r0, jump0 |
jmp r0 |
|
reg_is_nonzero: |
sw r100, 2 // failure: register is not initialized |
jmp r101 |
|
// Test different jump conditions |
jump0: |
lc r0, jump1 |
jmp r0 |
sw r100, 3 // failure: this instruction should not be reachable |
jmp r101 |
|
jump1: |
lc r0, jump2 |
mov r1, 100 |
cjmpne r0, r1, 101 |
sw r100, 4 // failure: required jump is not taken |
jmp r101 |
|
jump2: |
lc r0, jump3 |
cjmpe r0, r1, 100 |
sw r100, 5 // failure: required jump is not taken |
jmp r101 |
|
jump3: |
lc r0, jump4 |
cjmpuge r0, r1, 99 |
sw r100, 6 // failure: required jump is not taken |
jmp r101 |
|
jump4: |
lc r0, jump5 |
cjmpuge r0, r1, 100 |
sw r100, 7 // failure: required jump is not taken |
jmp r101 |
|
jump5: |
lc r0, jump6 |
cjmpug r0, r1, 99 |
sw r100, 8 // failure: required jump is not taken |
jmp r101 |
|
jump6: |
lc r0, jump7 |
cjmpsge r0, r1, -128 |
sw r100, 9 // failure: required jump is not taken |
jmp r101 |
|
jump7: |
lc r0, jump8 |
cjmpsge r0, r1, 100 |
sw r100, 10 // failure: required jump is not taken |
jmp r101 |
|
jump8: |
lc r0, jump9 |
cjmpsg r0, r1, 99 |
sw r100, 11 // failure: required jump is not taken |
jmp r101 |
|
jump9: |
lc r0, 2227053353 |
lc r1, 2933288161 |
cjmpug r102, r0, r1 |
|
lc r0, 3957963761 |
lc r1, 4048130130 |
cjmpug r102, r0, r1 |
|
lc r0, 1021028019 |
lc r1, 2570980487 |
cjmpug r102, r0, r1 |
|
lc r0, 470638116 |
lc r1, 3729241862 |
cjmpug r102, r0, r1 |
|
lc r0, 2794175299 |
lc r1, 3360494259 |
cjmpug r102, r0, r1 |
|
lc r0, 522532873 |
lc r1, 2103051039 |
cjmpug r102, r0, r1 |
|
lc r0, 994440598 |
lc r1, 4241216605 |
cjmpug r102, r0, r1 |
|
lc r0, 176753939 |
lc r1, 850320156 |
cjmpug r102, r0, r1 |
|
lc r0, 3998259744 |
lc r1, 4248205376 |
cjmpug r102, r0, r1 |
|
lc r0, 3695803806 |
lc r1, 4130490642 |
cjmpug r102, r0, r1 |
|
lc r0, -798605244 |
lc r1, -233549907 |
cjmpsg r102, r0, r1 |
|
lc r0, -1221540757 |
lc r1, 580991794 |
cjmpsg r102, r0, r1 |
|
lc r0, -1651432714 |
lc r1, -635466783 |
cjmpsg r102, r0, r1 |
|
lc r0, 43633328 |
lc r1, 1235055289 |
cjmpsg r102, r0, r1 |
|
lc r0, -2132159079 |
lc r1, -981565396 |
cjmpsg r102, r0, r1 |
|
lc r0, -859182414 |
lc r1, -697843885 |
cjmpsg r102, r0, r1 |
|
lc r0, 1720638509 |
lc r1, 2127959231 |
cjmpsg r102, r0, r1 |
|
lc r0, -1888878751 |
lc r1, 1230499715 |
cjmpsg r102, r0, r1 |
|
lc r0, 517066081 |
lc r1, 1914084509 |
cjmpsg r102, r0, r1 |
|
lc r0, -266475918 |
lc r1, 2001358724 |
cjmpsg r102, r0, r1 |
|
mov r1, 100 |
cjmpe r102, r1, 101 |
cjmpne r102, r1, 100 |
cjmpuge r102, r1, 101 |
cjmpug r102, r1, 100 |
cjmpug r102, r1, 101 |
cjmpsge r102, r1, 101 |
cjmpsg r102, r1, 101 |
cjmpsg r102, r1, 100 |
cjmpsg r102, -128, r1 |
lc r0, jump10 |
jmp r0 |
|
bad_jump: |
sw r100, 12 // failure: jump should not be taken |
jmp r101 |
|
jump10: |
|
// Copy itself to another portion of memory |
mov r0, 0 // source pointer |
lc r1, 0x00008000 // destination pointer |
lc r2, halt@2 // size of block to copy, in bytes |
lc r32, copy_loop |
|
copy_loop: |
lw r3, r0 |
sw r1, r3 |
add r0, r0, 4 |
add r1, r1, 4 |
cjmpul r32, r0, r2 |
|
// Calculate sum of program body in a post-condition loop |
mov r0, 0 // pointer |
mov r16, 0 // sum |
lc r32, sum_loop |
|
sum_loop: |
lw r1, r0 |
add r16, r16, r1 |
add r0, r0, 4 |
cjmpul r32, r0, r2 |
|
// Calculate sum of copied program body with negative sign, in a pre-condition loop |
lc r0, 0x00008000 // pointer |
add r2, r0, r2 // end pointer |
mov r17, 0 // sum |
lc r32, sum2_loop |
lc r33, sum2_end |
|
sum2_loop: |
cjmpuge r33, r0, r2 |
lw r1, r0 |
sub r17, r17, r1 |
add r0, r0, 4 |
jmp r32 |
sw r100, 13 // failure: this instruction should not be reachable |
jmp r101 |
|
sum2_end: |
|
// Check that sums are equal (but with opposite signs) |
add r0, r16, r17 // r0 should be zero now |
lc r32, success |
cjmpe r32, r0, 0 |
sw r100, 14 // failure: results do not match |
jmp r101 |
|
success: |
sw r100, 1 |
|
halt: |
hlt |
jmp r101 |
/* |
* This test verifies that basic instructions |
* (data transfers, addition/subtraction, jumps) work. |
*/ |
|
lc r100, 0x10000000 // test result output pointer |
lc r101, halt |
lc r102, bad_jump |
lc r103, reg_is_nonzero |
|
// Check that all registers are zero-initialized after reset |
// Ignore r100-r103 which are already used |
cjmpne r103, r0, 0 |
cjmpne r103, r1, 0 |
cjmpne r103, r2, 0 |
cjmpne r103, r3, 0 |
cjmpne r103, r4, 0 |
cjmpne r103, r5, 0 |
cjmpne r103, r6, 0 |
cjmpne r103, r7, 0 |
cjmpne r103, r8, 0 |
cjmpne r103, r9, 0 |
cjmpne r103, r10, 0 |
cjmpne r103, r11, 0 |
cjmpne r103, r12, 0 |
cjmpne r103, r13, 0 |
cjmpne r103, r14, 0 |
cjmpne r103, r15, 0 |
cjmpne r103, r16, 0 |
cjmpne r103, r17, 0 |
cjmpne r103, r18, 0 |
cjmpne r103, r19, 0 |
cjmpne r103, r20, 0 |
cjmpne r103, r21, 0 |
cjmpne r103, r22, 0 |
cjmpne r103, r23, 0 |
cjmpne r103, r24, 0 |
cjmpne r103, r25, 0 |
cjmpne r103, r26, 0 |
cjmpne r103, r27, 0 |
cjmpne r103, r28, 0 |
cjmpne r103, r29, 0 |
cjmpne r103, r30, 0 |
cjmpne r103, r31, 0 |
cjmpne r103, r32, 0 |
cjmpne r103, r33, 0 |
cjmpne r103, r34, 0 |
cjmpne r103, r35, 0 |
cjmpne r103, r36, 0 |
cjmpne r103, r37, 0 |
cjmpne r103, r38, 0 |
cjmpne r103, r39, 0 |
cjmpne r103, r40, 0 |
cjmpne r103, r41, 0 |
cjmpne r103, r42, 0 |
cjmpne r103, r43, 0 |
cjmpne r103, r44, 0 |
cjmpne r103, r45, 0 |
cjmpne r103, r46, 0 |
cjmpne r103, r47, 0 |
cjmpne r103, r48, 0 |
cjmpne r103, r49, 0 |
cjmpne r103, r50, 0 |
cjmpne r103, r51, 0 |
cjmpne r103, r52, 0 |
cjmpne r103, r53, 0 |
cjmpne r103, r54, 0 |
cjmpne r103, r55, 0 |
cjmpne r103, r56, 0 |
cjmpne r103, r57, 0 |
cjmpne r103, r58, 0 |
cjmpne r103, r59, 0 |
cjmpne r103, r60, 0 |
cjmpne r103, r61, 0 |
cjmpne r103, r62, 0 |
cjmpne r103, r63, 0 |
cjmpne r103, r64, 0 |
cjmpne r103, r65, 0 |
cjmpne r103, r66, 0 |
cjmpne r103, r67, 0 |
cjmpne r103, r68, 0 |
cjmpne r103, r69, 0 |
cjmpne r103, r70, 0 |
cjmpne r103, r71, 0 |
cjmpne r103, r72, 0 |
cjmpne r103, r73, 0 |
cjmpne r103, r74, 0 |
cjmpne r103, r75, 0 |
cjmpne r103, r76, 0 |
cjmpne r103, r77, 0 |
cjmpne r103, r78, 0 |
cjmpne r103, r79, 0 |
cjmpne r103, r80, 0 |
cjmpne r103, r81, 0 |
cjmpne r103, r82, 0 |
cjmpne r103, r83, 0 |
cjmpne r103, r84, 0 |
cjmpne r103, r85, 0 |
cjmpne r103, r86, 0 |
cjmpne r103, r87, 0 |
cjmpne r103, r88, 0 |
cjmpne r103, r89, 0 |
cjmpne r103, r90, 0 |
cjmpne r103, r91, 0 |
cjmpne r103, r92, 0 |
cjmpne r103, r93, 0 |
cjmpne r103, r94, 0 |
cjmpne r103, r95, 0 |
cjmpne r103, r96, 0 |
cjmpne r103, r97, 0 |
cjmpne r103, r98, 0 |
cjmpne r103, r99, 0 |
cjmpne r103, r104, 0 |
cjmpne r103, r105, 0 |
cjmpne r103, r106, 0 |
cjmpne r103, r107, 0 |
cjmpne r103, r108, 0 |
cjmpne r103, r109, 0 |
cjmpne r103, r110, 0 |
cjmpne r103, r111, 0 |
cjmpne r103, r112, 0 |
cjmpne r103, r113, 0 |
cjmpne r103, r114, 0 |
cjmpne r103, r115, 0 |
cjmpne r103, r116, 0 |
cjmpne r103, r117, 0 |
cjmpne r103, r118, 0 |
cjmpne r103, r119, 0 |
cjmpne r103, r120, 0 |
cjmpne r103, r121, 0 |
cjmpne r103, r122, 0 |
cjmpne r103, r123, 0 |
cjmpne r103, r124, 0 |
cjmpne r103, r125, 0 |
cjmpne r103, r126, 0 |
cjmpne r103, r127, 0 |
cjmpne r103, r128, 0 |
cjmpne r103, r129, 0 |
cjmpne r103, r130, 0 |
cjmpne r103, r131, 0 |
cjmpne r103, r132, 0 |
cjmpne r103, r133, 0 |
cjmpne r103, r134, 0 |
cjmpne r103, r135, 0 |
cjmpne r103, r136, 0 |
cjmpne r103, r137, 0 |
cjmpne r103, r138, 0 |
cjmpne r103, r139, 0 |
cjmpne r103, r140, 0 |
cjmpne r103, r141, 0 |
cjmpne r103, r142, 0 |
cjmpne r103, r143, 0 |
cjmpne r103, r144, 0 |
cjmpne r103, r145, 0 |
cjmpne r103, r146, 0 |
cjmpne r103, r147, 0 |
cjmpne r103, r148, 0 |
cjmpne r103, r149, 0 |
cjmpne r103, r150, 0 |
cjmpne r103, r151, 0 |
cjmpne r103, r152, 0 |
cjmpne r103, r153, 0 |
cjmpne r103, r154, 0 |
cjmpne r103, r155, 0 |
cjmpne r103, r156, 0 |
cjmpne r103, r157, 0 |
cjmpne r103, r158, 0 |
cjmpne r103, r159, 0 |
cjmpne r103, r160, 0 |
cjmpne r103, r161, 0 |
cjmpne r103, r162, 0 |
cjmpne r103, r163, 0 |
cjmpne r103, r164, 0 |
cjmpne r103, r165, 0 |
cjmpne r103, r166, 0 |
cjmpne r103, r167, 0 |
cjmpne r103, r168, 0 |
cjmpne r103, r169, 0 |
cjmpne r103, r170, 0 |
cjmpne r103, r171, 0 |
cjmpne r103, r172, 0 |
cjmpne r103, r173, 0 |
cjmpne r103, r174, 0 |
cjmpne r103, r175, 0 |
cjmpne r103, r176, 0 |
cjmpne r103, r177, 0 |
cjmpne r103, r178, 0 |
cjmpne r103, r179, 0 |
cjmpne r103, r180, 0 |
cjmpne r103, r181, 0 |
cjmpne r103, r182, 0 |
cjmpne r103, r183, 0 |
cjmpne r103, r184, 0 |
cjmpne r103, r185, 0 |
cjmpne r103, r186, 0 |
cjmpne r103, r187, 0 |
cjmpne r103, r188, 0 |
cjmpne r103, r189, 0 |
cjmpne r103, r190, 0 |
cjmpne r103, r191, 0 |
cjmpne r103, r192, 0 |
cjmpne r103, r193, 0 |
cjmpne r103, r194, 0 |
cjmpne r103, r195, 0 |
cjmpne r103, r196, 0 |
cjmpne r103, r197, 0 |
cjmpne r103, r198, 0 |
cjmpne r103, r199, 0 |
cjmpne r103, r200, 0 |
cjmpne r103, r201, 0 |
cjmpne r103, r202, 0 |
cjmpne r103, r203, 0 |
cjmpne r103, r204, 0 |
cjmpne r103, r205, 0 |
cjmpne r103, r206, 0 |
cjmpne r103, r207, 0 |
cjmpne r103, r208, 0 |
cjmpne r103, r209, 0 |
cjmpne r103, r210, 0 |
cjmpne r103, r211, 0 |
cjmpne r103, r212, 0 |
cjmpne r103, r213, 0 |
cjmpne r103, r214, 0 |
cjmpne r103, r215, 0 |
cjmpne r103, r216, 0 |
cjmpne r103, r217, 0 |
cjmpne r103, r218, 0 |
cjmpne r103, r219, 0 |
cjmpne r103, r220, 0 |
cjmpne r103, r221, 0 |
cjmpne r103, r222, 0 |
cjmpne r103, r223, 0 |
cjmpne r103, r224, 0 |
cjmpne r103, r225, 0 |
cjmpne r103, r226, 0 |
cjmpne r103, r227, 0 |
cjmpne r103, r228, 0 |
cjmpne r103, r229, 0 |
cjmpne r103, r230, 0 |
cjmpne r103, r231, 0 |
cjmpne r103, r232, 0 |
cjmpne r103, r233, 0 |
cjmpne r103, r234, 0 |
cjmpne r103, r235, 0 |
cjmpne r103, r236, 0 |
cjmpne r103, r237, 0 |
cjmpne r103, r238, 0 |
cjmpne r103, r239, 0 |
cjmpne r103, r240, 0 |
cjmpne r103, r241, 0 |
cjmpne r103, r242, 0 |
cjmpne r103, r243, 0 |
cjmpne r103, r244, 0 |
cjmpne r103, r245, 0 |
cjmpne r103, r246, 0 |
cjmpne r103, r247, 0 |
cjmpne r103, r248, 0 |
cjmpne r103, r249, 0 |
cjmpne r103, r250, 0 |
cjmpne r103, r251, 0 |
cjmpne r103, r252, 0 |
cjmpne r103, r253, 0 |
cjmpne r103, r254, 0 |
cjmpne r103, r255, 0 |
lc r0, jump0 |
jmp r0 |
|
reg_is_nonzero: |
sw r100, 2 // failure: register is not initialized |
jmp r101 |
|
// Test different jump conditions |
jump0: |
lc r0, jump1 |
jmp r0 |
sw r100, 3 // failure: this instruction should not be reachable |
jmp r101 |
|
jump1: |
lc r0, jump2 |
mov r1, 100 |
cjmpne r0, r1, 101 |
sw r100, 4 // failure: required jump is not taken |
jmp r101 |
|
jump2: |
lc r0, jump3 |
cjmpe r0, r1, 100 |
sw r100, 5 // failure: required jump is not taken |
jmp r101 |
|
jump3: |
lc r0, jump4 |
cjmpuge r0, r1, 99 |
sw r100, 6 // failure: required jump is not taken |
jmp r101 |
|
jump4: |
lc r0, jump5 |
cjmpuge r0, r1, 100 |
sw r100, 7 // failure: required jump is not taken |
jmp r101 |
|
jump5: |
lc r0, jump6 |
cjmpug r0, r1, 99 |
sw r100, 8 // failure: required jump is not taken |
jmp r101 |
|
jump6: |
lc r0, jump7 |
cjmpsge r0, r1, -128 |
sw r100, 9 // failure: required jump is not taken |
jmp r101 |
|
jump7: |
lc r0, jump8 |
cjmpsge r0, r1, 100 |
sw r100, 10 // failure: required jump is not taken |
jmp r101 |
|
jump8: |
lc r0, jump9 |
cjmpsg r0, r1, 99 |
sw r100, 11 // failure: required jump is not taken |
jmp r101 |
|
jump9: |
lc r0, 2227053353 |
lc r1, 2933288161 |
cjmpug r102, r0, r1 |
|
lc r0, 3957963761 |
lc r1, 4048130130 |
cjmpug r102, r0, r1 |
|
lc r0, 1021028019 |
lc r1, 2570980487 |
cjmpug r102, r0, r1 |
|
lc r0, 470638116 |
lc r1, 3729241862 |
cjmpug r102, r0, r1 |
|
lc r0, 2794175299 |
lc r1, 3360494259 |
cjmpug r102, r0, r1 |
|
lc r0, 522532873 |
lc r1, 2103051039 |
cjmpug r102, r0, r1 |
|
lc r0, 994440598 |
lc r1, 4241216605 |
cjmpug r102, r0, r1 |
|
lc r0, 176753939 |
lc r1, 850320156 |
cjmpug r102, r0, r1 |
|
lc r0, 3998259744 |
lc r1, 4248205376 |
cjmpug r102, r0, r1 |
|
lc r0, 3695803806 |
lc r1, 4130490642 |
cjmpug r102, r0, r1 |
|
lc r0, -798605244 |
lc r1, -233549907 |
cjmpsg r102, r0, r1 |
|
lc r0, -1221540757 |
lc r1, 580991794 |
cjmpsg r102, r0, r1 |
|
lc r0, -1651432714 |
lc r1, -635466783 |
cjmpsg r102, r0, r1 |
|
lc r0, 43633328 |
lc r1, 1235055289 |
cjmpsg r102, r0, r1 |
|
lc r0, -2132159079 |
lc r1, -981565396 |
cjmpsg r102, r0, r1 |
|
lc r0, -859182414 |
lc r1, -697843885 |
cjmpsg r102, r0, r1 |
|
lc r0, 1720638509 |
lc r1, 2127959231 |
cjmpsg r102, r0, r1 |
|
lc r0, -1888878751 |
lc r1, 1230499715 |
cjmpsg r102, r0, r1 |
|
lc r0, 517066081 |
lc r1, 1914084509 |
cjmpsg r102, r0, r1 |
|
lc r0, -266475918 |
lc r1, 2001358724 |
cjmpsg r102, r0, r1 |
|
mov r1, 100 |
cjmpe r102, r1, 101 |
cjmpne r102, r1, 100 |
cjmpuge r102, r1, 101 |
cjmpug r102, r1, 100 |
cjmpug r102, r1, 101 |
cjmpsge r102, r1, 101 |
cjmpsg r102, r1, 101 |
cjmpsg r102, r1, 100 |
cjmpsg r102, -128, r1 |
lc r0, jump10 |
jmp r0 |
|
bad_jump: |
sw r100, 12 // failure: jump should not be taken |
jmp r101 |
|
jump10: |
|
// Copy itself to another portion of memory |
mov r0, 0 // source pointer |
lc r1, 0x00008000 // destination pointer |
lc r2, halt@2 // size of block to copy, in bytes |
lc r32, copy_loop |
|
copy_loop: |
lw r3, r0 |
sw r1, r3 |
add r0, r0, 4 |
add r1, r1, 4 |
cjmpul r32, r0, r2 |
|
// Calculate sum of program body in a post-condition loop |
mov r0, 0 // pointer |
mov r16, 0 // sum |
lc r32, sum_loop |
|
sum_loop: |
lw r1, r0 |
add r16, r16, r1 |
add r0, r0, 4 |
cjmpul r32, r0, r2 |
|
// Calculate sum of copied program body with negative sign, in a pre-condition loop |
lc r0, 0x00008000 // pointer |
add r2, r0, r2 // end pointer |
mov r17, 0 // sum |
lc r32, sum2_loop |
lc r33, sum2_end |
|
sum2_loop: |
cjmpuge r33, r0, r2 |
lw r1, r0 |
sub r17, r17, r1 |
add r0, r0, 4 |
jmp r32 |
sw r100, 13 // failure: this instruction should not be reachable |
jmp r101 |
|
sum2_end: |
|
// Check that sums are equal (but with opposite signs) |
add r0, r16, r17 // r0 should be zero now |
lc r32, success |
cjmpe r32, r0, 0 |
sw r100, 14 // failure: results do not match |
jmp r101 |
|
success: |
sw r100, 1 |
|
halt: |
hlt |
jmp r101 |
/firmware/test002.asm
1,93 → 1,93
/* |
* This test calculates a few Fibonacci sequence members |
* end compares them to pre-calculated values. |
*/ |
|
lc r100, 0x10000000 // test result output pointer |
lc r101, halt |
|
// Calculate Fibonacci sequence members |
mov r16, 0 // current member |
mov r17, 1 // next member |
lc r18, 0 // counter |
lc r19, 0x00008000 // destination pointer |
lc r32, calc_loop |
|
calc_loop: |
sw r19, r16 |
add r19, r19, 4 |
add r18, r18, 1 |
add r0, r16, r17 |
mov r16, r17 |
mov r17, r0 |
cjmpul r32, r18, 40 |
|
// Compare |
lc r16, 0x00008000 |
lc r17, expected |
mov r18, 0 // counter |
lc r32, comp_loop |
lc r33, comp_differ |
|
comp_loop: |
lw r0, r16 |
lw r1, r17 |
cjmpne r33, r0, r1 |
add r16, r16, 4 |
add r17, r17, 4 |
add r18, r18, 1 |
cjmpul r32, r18, 40 |
|
// Everything seems to be OK |
sw r100, 1 |
|
halt: |
hlt |
jmp r101 |
|
comp_differ: |
sw r100, 2 |
jmp r101 |
|
// Expected (pre-calculated) values |
expected: |
.word 0 |
.word 1 |
.word 1 |
.word 2 |
.word 3 |
.word 5 |
.word 8 |
.word 13 |
.word 21 |
.word 34 |
.word 55 |
.word 89 |
.word 144 |
.word 233 |
.word 377 |
.word 610 |
.word 987 |
.word 1597 |
.word 2584 |
.word 4181 |
.word 6765 |
.word 10946 |
.word 17711 |
.word 28657 |
.word 46368 |
.word 75025 |
.word 121393 |
.word 196418 |
.word 317811 |
.word 514229 |
.word 832040 |
.word 1346269 |
.word 2178309 |
.word 3524578 |
.word 5702887 |
.word 9227465 |
.word 14930352 |
.word 24157817 |
.word 39088169 |
.word 63245986 |
/* |
* This test calculates a few Fibonacci sequence members |
* end compares them to pre-calculated values. |
*/ |
|
lc r100, 0x10000000 // test result output pointer |
lc r101, halt |
|
// Calculate Fibonacci sequence members |
mov r16, 0 // current member |
mov r17, 1 // next member |
lc r18, 0 // counter |
lc r19, 0x00008000 // destination pointer |
lc r32, calc_loop |
|
calc_loop: |
sw r19, r16 |
add r19, r19, 4 |
add r18, r18, 1 |
add r0, r16, r17 |
mov r16, r17 |
mov r17, r0 |
cjmpul r32, r18, 40 |
|
// Compare |
lc r16, 0x00008000 |
lc r17, expected |
mov r18, 0 // counter |
lc r32, comp_loop |
lc r33, comp_differ |
|
comp_loop: |
lw r0, r16 |
lw r1, r17 |
cjmpne r33, r0, r1 |
add r16, r16, 4 |
add r17, r17, 4 |
add r18, r18, 1 |
cjmpul r32, r18, 40 |
|
// Everything seems to be OK |
sw r100, 1 |
|
halt: |
hlt |
jmp r101 |
|
comp_differ: |
sw r100, 2 |
jmp r101 |
|
// Expected (pre-calculated) values |
expected: |
.word 0 |
.word 1 |
.word 1 |
.word 2 |
.word 3 |
.word 5 |
.word 8 |
.word 13 |
.word 21 |
.word 34 |
.word 55 |
.word 89 |
.word 144 |
.word 233 |
.word 377 |
.word 610 |
.word 987 |
.word 1597 |
.word 2584 |
.word 4181 |
.word 6765 |
.word 10946 |
.word 17711 |
.word 28657 |
.word 46368 |
.word 75025 |
.word 121393 |
.word 196418 |
.word 317811 |
.word 514229 |
.word 832040 |
.word 1346269 |
.word 2178309 |
.word 3524578 |
.word 5702887 |
.word 9227465 |
.word 14930352 |
.word 24157817 |
.word 39088169 |
.word 63245986 |
/firmware/test003.asm
1,43 → 1,43
/* |
* This test verifies that basic logical operations |
* (and, xor, or, not) work. |
*/ |
|
lc r100, 0x10000000 // test result output pointer |
lc r101, halt |
lc r102, failure |
|
lc r0, 0xD54B65C0 |
lc r1, 0xCE8870A8 |
lc r16, 0x10000004 // destination pointer |
|
and r2, r0, r1 |
sw r16, r2 |
lc r3, 0xC4086080 |
cjmpne r102, r2, r3 |
|
or r2, r0, r1 |
sw r16, r2 |
lc r3, 0xDFCB75E8 |
cjmpne r102, r2, r3 |
|
xor r2, r0, r1 |
sw r16, r2 |
lc r3, 0x1BC31568 |
cjmpne r102, r2, r3 |
|
// Note: "not dst, src" is just an alias for "xor dst, src, -1" |
not r2, r0 |
sw r16, r2 |
lc r3, 0x2AB49A3F |
cjmpne r102, r2, r3 |
|
sw r100, 1 |
jmp r101 |
|
failure: |
sw r100, 2 |
|
halt: |
hlt |
jmp r101 |
/* |
* This test verifies that basic logical operations |
* (and, xor, or, not) work. |
*/ |
|
lc r100, 0x10000000 // test result output pointer |
lc r101, halt |
lc r102, failure |
|
lc r0, 0xD54B65C0 |
lc r1, 0xCE8870A8 |
lc r16, 0x10000004 // destination pointer |
|
and r2, r0, r1 |
sw r16, r2 |
lc r3, 0xC4086080 |
cjmpne r102, r2, r3 |
|
or r2, r0, r1 |
sw r16, r2 |
lc r3, 0xDFCB75E8 |
cjmpne r102, r2, r3 |
|
xor r2, r0, r1 |
sw r16, r2 |
lc r3, 0x1BC31568 |
cjmpne r102, r2, r3 |
|
// Note: "not dst, src" is just an alias for "xor dst, src, -1" |
not r2, r0 |
sw r16, r2 |
lc r3, 0x2AB49A3F |
cjmpne r102, r2, r3 |
|
sw r100, 1 |
jmp r101 |
|
failure: |
sw r100, 2 |
|
halt: |
hlt |
jmp r101 |
/firmware/test004.asm
1,548 → 1,548
/* |
* This test verifies that nop instruction does not change |
* register values. |
*/ |
|
lc r0, failure |
nop |
mov r1, 1 |
nop |
mov r2, 2 |
mov r3, 3 |
nop |
mov r4, 4 |
mov r5, 5 |
mov r6, 6 |
nop |
nop |
mov r7, 7 |
mov r8, 8 |
mov r9, 9 |
nop |
mov r10, 10 |
mov r11, 11 |
mov r12, 12 |
mov r13, 13 |
mov r14, 14 |
mov r15, 15 |
mov r16, 16 |
mov r17, 17 |
mov r18, 18 |
mov r19, 19 |
mov r20, 20 |
mov r21, 21 |
mov r22, 22 |
mov r23, 23 |
mov r24, 24 |
mov r25, 25 |
mov r26, 26 |
mov r27, 27 |
mov r28, 28 |
mov r29, 29 |
mov r30, 30 |
mov r31, 31 |
mov r32, 32 |
mov r33, 33 |
mov r34, 34 |
mov r35, 35 |
mov r36, 36 |
mov r37, 37 |
mov r38, 38 |
mov r39, 39 |
mov r40, 40 |
mov r41, 41 |
mov r42, 42 |
mov r43, 43 |
mov r44, 44 |
mov r45, 45 |
mov r46, 46 |
mov r47, 47 |
mov r48, 48 |
mov r49, 49 |
mov r50, 50 |
mov r51, 51 |
mov r52, 52 |
mov r53, 53 |
mov r54, 54 |
mov r55, 55 |
mov r56, 56 |
mov r57, 57 |
mov r58, 58 |
mov r59, 59 |
mov r60, 60 |
mov r61, 61 |
mov r62, 62 |
mov r63, 63 |
mov r64, 64 |
mov r65, 65 |
mov r66, 66 |
mov r67, 67 |
mov r68, 68 |
mov r69, 69 |
mov r70, 70 |
mov r71, 71 |
mov r72, 72 |
mov r73, 73 |
mov r74, 74 |
mov r75, 75 |
mov r76, 76 |
mov r77, 77 |
mov r78, 78 |
mov r79, 79 |
mov r80, 80 |
mov r81, 81 |
mov r82, 82 |
mov r83, 83 |
mov r84, 84 |
mov r85, 85 |
mov r86, 86 |
mov r87, 87 |
mov r88, 88 |
mov r89, 89 |
mov r90, 90 |
mov r91, 91 |
mov r92, 92 |
mov r93, 93 |
mov r94, 94 |
mov r95, 95 |
mov r96, 96 |
mov r97, 97 |
mov r98, 98 |
mov r99, 99 |
mov r100, 0 |
mov r101, 1 |
mov r102, 2 |
mov r103, 3 |
mov r104, 4 |
mov r105, 5 |
mov r106, 6 |
mov r107, 7 |
mov r108, 8 |
mov r109, 9 |
mov r110, 10 |
mov r111, 11 |
mov r112, 12 |
mov r113, 13 |
mov r114, 14 |
mov r115, 15 |
mov r116, 16 |
mov r117, 17 |
mov r118, 18 |
mov r119, 19 |
mov r120, 20 |
mov r121, 21 |
mov r122, 22 |
mov r123, 23 |
mov r124, 24 |
mov r125, 25 |
mov r126, 26 |
mov r127, 27 |
mov r128, 28 |
mov r129, 29 |
mov r130, 30 |
mov r131, 31 |
mov r132, 32 |
mov r133, 33 |
mov r134, 34 |
mov r135, 35 |
mov r136, 36 |
mov r137, 37 |
mov r138, 38 |
mov r139, 39 |
mov r140, 40 |
mov r141, 41 |
mov r142, 42 |
mov r143, 43 |
mov r144, 44 |
mov r145, 45 |
mov r146, 46 |
mov r147, 47 |
mov r148, 48 |
mov r149, 49 |
mov r150, 50 |
mov r151, 51 |
mov r152, 52 |
mov r153, 53 |
mov r154, 54 |
mov r155, 55 |
mov r156, 56 |
mov r157, 57 |
mov r158, 58 |
mov r159, 59 |
mov r160, 60 |
mov r161, 61 |
mov r162, 62 |
mov r163, 63 |
mov r164, 64 |
mov r165, 65 |
mov r166, 66 |
mov r167, 67 |
mov r168, 68 |
mov r169, 69 |
mov r170, 70 |
mov r171, 71 |
mov r172, 72 |
mov r173, 73 |
mov r174, 74 |
mov r175, 75 |
mov r176, 76 |
mov r177, 77 |
mov r178, 78 |
mov r179, 79 |
mov r180, 80 |
mov r181, 81 |
mov r182, 82 |
mov r183, 83 |
mov r184, 84 |
mov r185, 85 |
mov r186, 86 |
mov r187, 87 |
mov r188, 88 |
mov r189, 89 |
mov r190, 90 |
mov r191, 91 |
mov r192, 92 |
mov r193, 93 |
mov r194, 94 |
mov r195, 95 |
mov r196, 96 |
mov r197, 97 |
mov r198, 98 |
mov r199, 99 |
mov r200, 0 |
mov r201, 1 |
mov r202, 2 |
mov r203, 3 |
mov r204, 4 |
mov r205, 5 |
mov r206, 6 |
mov r207, 7 |
mov r208, 8 |
mov r209, 9 |
mov r210, 10 |
mov r211, 11 |
mov r212, 12 |
mov r213, 13 |
mov r214, 14 |
mov r215, 15 |
mov r216, 16 |
mov r217, 17 |
mov r218, 18 |
mov r219, 19 |
mov r220, 20 |
mov r221, 21 |
mov r222, 22 |
mov r223, 23 |
mov r224, 24 |
mov r225, 25 |
mov r226, 26 |
mov r227, 27 |
mov r228, 28 |
mov r229, 29 |
mov r230, 30 |
mov r231, 31 |
mov r232, 32 |
mov r233, 33 |
mov r234, 34 |
mov r235, 35 |
mov r236, 36 |
mov r237, 37 |
mov r238, 38 |
mov r239, 39 |
mov r240, 40 |
mov r241, 41 |
mov r242, 42 |
mov r243, 43 |
mov r244, 44 |
mov r245, 45 |
mov r246, 46 |
mov r247, 47 |
mov r248, 48 |
mov r249, 49 |
mov r250, 50 |
mov r251, 51 |
mov r252, 52 |
mov r253, 53 |
mov r254, 54 |
mov r255, 55 |
|
nop |
nop |
nop |
|
cjmpne r0, r1, 1 |
nop |
cjmpne r0, r2, 2 |
nop |
nop |
cjmpne r0, r3, 3 |
cjmpne r0, r4, 4 |
cjmpne r0, r5, 5 |
nop |
cjmpne r0, r6, 6 |
cjmpne r0, r7, 7 |
cjmpne r0, r8, 8 |
cjmpne r0, r9, 9 |
cjmpne r0, r10, 10 |
cjmpne r0, r11, 11 |
nop |
nop |
nop |
cjmpne r0, r12, 12 |
cjmpne r0, r13, 13 |
cjmpne r0, r14, 14 |
cjmpne r0, r15, 15 |
cjmpne r0, r16, 16 |
cjmpne r0, r17, 17 |
cjmpne r0, r18, 18 |
cjmpne r0, r19, 19 |
cjmpne r0, r20, 20 |
cjmpne r0, r21, 21 |
cjmpne r0, r22, 22 |
cjmpne r0, r23, 23 |
cjmpne r0, r24, 24 |
cjmpne r0, r25, 25 |
cjmpne r0, r26, 26 |
cjmpne r0, r27, 27 |
cjmpne r0, r28, 28 |
cjmpne r0, r29, 29 |
cjmpne r0, r30, 30 |
cjmpne r0, r31, 31 |
cjmpne r0, r32, 32 |
cjmpne r0, r33, 33 |
cjmpne r0, r34, 34 |
cjmpne r0, r35, 35 |
cjmpne r0, r36, 36 |
cjmpne r0, r37, 37 |
cjmpne r0, r38, 38 |
cjmpne r0, r39, 39 |
cjmpne r0, r40, 40 |
cjmpne r0, r41, 41 |
cjmpne r0, r42, 42 |
cjmpne r0, r43, 43 |
cjmpne r0, r44, 44 |
cjmpne r0, r45, 45 |
cjmpne r0, r46, 46 |
cjmpne r0, r47, 47 |
cjmpne r0, r48, 48 |
cjmpne r0, r49, 49 |
cjmpne r0, r50, 50 |
cjmpne r0, r51, 51 |
cjmpne r0, r52, 52 |
cjmpne r0, r53, 53 |
cjmpne r0, r54, 54 |
cjmpne r0, r55, 55 |
cjmpne r0, r56, 56 |
cjmpne r0, r57, 57 |
cjmpne r0, r58, 58 |
cjmpne r0, r59, 59 |
cjmpne r0, r60, 60 |
cjmpne r0, r61, 61 |
cjmpne r0, r62, 62 |
cjmpne r0, r63, 63 |
cjmpne r0, r64, 64 |
cjmpne r0, r65, 65 |
cjmpne r0, r66, 66 |
cjmpne r0, r67, 67 |
cjmpne r0, r68, 68 |
cjmpne r0, r69, 69 |
cjmpne r0, r70, 70 |
cjmpne r0, r71, 71 |
cjmpne r0, r72, 72 |
cjmpne r0, r73, 73 |
cjmpne r0, r74, 74 |
cjmpne r0, r75, 75 |
cjmpne r0, r76, 76 |
cjmpne r0, r77, 77 |
cjmpne r0, r78, 78 |
cjmpne r0, r79, 79 |
cjmpne r0, r80, 80 |
cjmpne r0, r81, 81 |
cjmpne r0, r82, 82 |
cjmpne r0, r83, 83 |
cjmpne r0, r84, 84 |
cjmpne r0, r85, 85 |
cjmpne r0, r86, 86 |
cjmpne r0, r87, 87 |
cjmpne r0, r88, 88 |
cjmpne r0, r89, 89 |
cjmpne r0, r90, 90 |
cjmpne r0, r91, 91 |
cjmpne r0, r92, 92 |
cjmpne r0, r93, 93 |
cjmpne r0, r94, 94 |
cjmpne r0, r95, 95 |
cjmpne r0, r96, 96 |
cjmpne r0, r97, 97 |
cjmpne r0, r98, 98 |
cjmpne r0, r99, 99 |
cjmpne r0, r100, 0 |
cjmpne r0, r101, 1 |
cjmpne r0, r102, 2 |
cjmpne r0, r103, 3 |
cjmpne r0, r104, 4 |
cjmpne r0, r105, 5 |
cjmpne r0, r106, 6 |
cjmpne r0, r107, 7 |
cjmpne r0, r108, 8 |
cjmpne r0, r109, 9 |
cjmpne r0, r110, 10 |
cjmpne r0, r111, 11 |
cjmpne r0, r112, 12 |
cjmpne r0, r113, 13 |
cjmpne r0, r114, 14 |
cjmpne r0, r115, 15 |
cjmpne r0, r116, 16 |
cjmpne r0, r117, 17 |
cjmpne r0, r118, 18 |
cjmpne r0, r119, 19 |
cjmpne r0, r120, 20 |
cjmpne r0, r121, 21 |
cjmpne r0, r122, 22 |
cjmpne r0, r123, 23 |
cjmpne r0, r124, 24 |
cjmpne r0, r125, 25 |
cjmpne r0, r126, 26 |
cjmpne r0, r127, 27 |
cjmpne r0, r128, 28 |
cjmpne r0, r129, 29 |
cjmpne r0, r130, 30 |
cjmpne r0, r131, 31 |
cjmpne r0, r132, 32 |
cjmpne r0, r133, 33 |
cjmpne r0, r134, 34 |
cjmpne r0, r135, 35 |
cjmpne r0, r136, 36 |
cjmpne r0, r137, 37 |
cjmpne r0, r138, 38 |
cjmpne r0, r139, 39 |
cjmpne r0, r140, 40 |
cjmpne r0, r141, 41 |
cjmpne r0, r142, 42 |
cjmpne r0, r143, 43 |
cjmpne r0, r144, 44 |
cjmpne r0, r145, 45 |
cjmpne r0, r146, 46 |
cjmpne r0, r147, 47 |
cjmpne r0, r148, 48 |
cjmpne r0, r149, 49 |
cjmpne r0, r150, 50 |
cjmpne r0, r151, 51 |
cjmpne r0, r152, 52 |
cjmpne r0, r153, 53 |
cjmpne r0, r154, 54 |
cjmpne r0, r155, 55 |
cjmpne r0, r156, 56 |
cjmpne r0, r157, 57 |
cjmpne r0, r158, 58 |
cjmpne r0, r159, 59 |
cjmpne r0, r160, 60 |
cjmpne r0, r161, 61 |
cjmpne r0, r162, 62 |
cjmpne r0, r163, 63 |
cjmpne r0, r164, 64 |
cjmpne r0, r165, 65 |
cjmpne r0, r166, 66 |
cjmpne r0, r167, 67 |
cjmpne r0, r168, 68 |
cjmpne r0, r169, 69 |
cjmpne r0, r170, 70 |
cjmpne r0, r171, 71 |
cjmpne r0, r172, 72 |
cjmpne r0, r173, 73 |
cjmpne r0, r174, 74 |
cjmpne r0, r175, 75 |
cjmpne r0, r176, 76 |
cjmpne r0, r177, 77 |
cjmpne r0, r178, 78 |
cjmpne r0, r179, 79 |
cjmpne r0, r180, 80 |
cjmpne r0, r181, 81 |
cjmpne r0, r182, 82 |
cjmpne r0, r183, 83 |
cjmpne r0, r184, 84 |
cjmpne r0, r185, 85 |
cjmpne r0, r186, 86 |
cjmpne r0, r187, 87 |
cjmpne r0, r188, 88 |
cjmpne r0, r189, 89 |
cjmpne r0, r190, 90 |
cjmpne r0, r191, 91 |
cjmpne r0, r192, 92 |
cjmpne r0, r193, 93 |
cjmpne r0, r194, 94 |
cjmpne r0, r195, 95 |
cjmpne r0, r196, 96 |
cjmpne r0, r197, 97 |
cjmpne r0, r198, 98 |
cjmpne r0, r199, 99 |
cjmpne r0, r200, 0 |
cjmpne r0, r201, 1 |
cjmpne r0, r202, 2 |
cjmpne r0, r203, 3 |
cjmpne r0, r204, 4 |
cjmpne r0, r205, 5 |
cjmpne r0, r206, 6 |
cjmpne r0, r207, 7 |
cjmpne r0, r208, 8 |
cjmpne r0, r209, 9 |
cjmpne r0, r210, 10 |
cjmpne r0, r211, 11 |
cjmpne r0, r212, 12 |
cjmpne r0, r213, 13 |
cjmpne r0, r214, 14 |
cjmpne r0, r215, 15 |
cjmpne r0, r216, 16 |
cjmpne r0, r217, 17 |
cjmpne r0, r218, 18 |
cjmpne r0, r219, 19 |
cjmpne r0, r220, 20 |
cjmpne r0, r221, 21 |
cjmpne r0, r222, 22 |
cjmpne r0, r223, 23 |
cjmpne r0, r224, 24 |
cjmpne r0, r225, 25 |
cjmpne r0, r226, 26 |
cjmpne r0, r227, 27 |
cjmpne r0, r228, 28 |
cjmpne r0, r229, 29 |
cjmpne r0, r230, 30 |
cjmpne r0, r231, 31 |
cjmpne r0, r232, 32 |
cjmpne r0, r233, 33 |
cjmpne r0, r234, 34 |
cjmpne r0, r235, 35 |
cjmpne r0, r236, 36 |
cjmpne r0, r237, 37 |
cjmpne r0, r238, 38 |
cjmpne r0, r239, 39 |
cjmpne r0, r240, 40 |
cjmpne r0, r241, 41 |
cjmpne r0, r242, 42 |
cjmpne r0, r243, 43 |
cjmpne r0, r244, 44 |
cjmpne r0, r245, 45 |
cjmpne r0, r246, 46 |
cjmpne r0, r247, 47 |
cjmpne r0, r248, 48 |
cjmpne r0, r249, 49 |
cjmpne r0, r250, 50 |
cjmpne r0, r251, 51 |
cjmpne r0, r252, 52 |
cjmpne r0, r253, 53 |
cjmpne r0, r254, 54 |
cjmpne r0, r255, 55 |
|
lc r100, 0x10000000 |
lc r101, halt |
sw r100, 1 |
jmp r101 |
|
failure: |
lc r100, 0x10000000 |
lc r101, halt |
sw r100, 2 |
|
halt: |
hlt |
jmp r101 |
/* |
* This test verifies that nop instruction does not change |
* register values. |
*/ |
|
lc r0, failure |
nop |
mov r1, 1 |
nop |
mov r2, 2 |
mov r3, 3 |
nop |
mov r4, 4 |
mov r5, 5 |
mov r6, 6 |
nop |
nop |
mov r7, 7 |
mov r8, 8 |
mov r9, 9 |
nop |
mov r10, 10 |
mov r11, 11 |
mov r12, 12 |
mov r13, 13 |
mov r14, 14 |
mov r15, 15 |
mov r16, 16 |
mov r17, 17 |
mov r18, 18 |
mov r19, 19 |
mov r20, 20 |
mov r21, 21 |
mov r22, 22 |
mov r23, 23 |
mov r24, 24 |
mov r25, 25 |
mov r26, 26 |
mov r27, 27 |
mov r28, 28 |
mov r29, 29 |
mov r30, 30 |
mov r31, 31 |
mov r32, 32 |
mov r33, 33 |
mov r34, 34 |
mov r35, 35 |
mov r36, 36 |
mov r37, 37 |
mov r38, 38 |
mov r39, 39 |
mov r40, 40 |
mov r41, 41 |
mov r42, 42 |
mov r43, 43 |
mov r44, 44 |
mov r45, 45 |
mov r46, 46 |
mov r47, 47 |
mov r48, 48 |
mov r49, 49 |
mov r50, 50 |
mov r51, 51 |
mov r52, 52 |
mov r53, 53 |
mov r54, 54 |
mov r55, 55 |
mov r56, 56 |
mov r57, 57 |
mov r58, 58 |
mov r59, 59 |
mov r60, 60 |
mov r61, 61 |
mov r62, 62 |
mov r63, 63 |
mov r64, 64 |
mov r65, 65 |
mov r66, 66 |
mov r67, 67 |
mov r68, 68 |
mov r69, 69 |
mov r70, 70 |
mov r71, 71 |
mov r72, 72 |
mov r73, 73 |
mov r74, 74 |
mov r75, 75 |
mov r76, 76 |
mov r77, 77 |
mov r78, 78 |
mov r79, 79 |
mov r80, 80 |
mov r81, 81 |
mov r82, 82 |
mov r83, 83 |
mov r84, 84 |
mov r85, 85 |
mov r86, 86 |
mov r87, 87 |
mov r88, 88 |
mov r89, 89 |
mov r90, 90 |
mov r91, 91 |
mov r92, 92 |
mov r93, 93 |
mov r94, 94 |
mov r95, 95 |
mov r96, 96 |
mov r97, 97 |
mov r98, 98 |
mov r99, 99 |
mov r100, 0 |
mov r101, 1 |
mov r102, 2 |
mov r103, 3 |
mov r104, 4 |
mov r105, 5 |
mov r106, 6 |
mov r107, 7 |
mov r108, 8 |
mov r109, 9 |
mov r110, 10 |
mov r111, 11 |
mov r112, 12 |
mov r113, 13 |
mov r114, 14 |
mov r115, 15 |
mov r116, 16 |
mov r117, 17 |
mov r118, 18 |
mov r119, 19 |
mov r120, 20 |
mov r121, 21 |
mov r122, 22 |
mov r123, 23 |
mov r124, 24 |
mov r125, 25 |
mov r126, 26 |
mov r127, 27 |
mov r128, 28 |
mov r129, 29 |
mov r130, 30 |
mov r131, 31 |
mov r132, 32 |
mov r133, 33 |
mov r134, 34 |
mov r135, 35 |
mov r136, 36 |
mov r137, 37 |
mov r138, 38 |
mov r139, 39 |
mov r140, 40 |
mov r141, 41 |
mov r142, 42 |
mov r143, 43 |
mov r144, 44 |
mov r145, 45 |
mov r146, 46 |
mov r147, 47 |
mov r148, 48 |
mov r149, 49 |
mov r150, 50 |
mov r151, 51 |
mov r152, 52 |
mov r153, 53 |
mov r154, 54 |
mov r155, 55 |
mov r156, 56 |
mov r157, 57 |
mov r158, 58 |
mov r159, 59 |
mov r160, 60 |
mov r161, 61 |
mov r162, 62 |
mov r163, 63 |
mov r164, 64 |
mov r165, 65 |
mov r166, 66 |
mov r167, 67 |
mov r168, 68 |
mov r169, 69 |
mov r170, 70 |
mov r171, 71 |
mov r172, 72 |
mov r173, 73 |
mov r174, 74 |
mov r175, 75 |
mov r176, 76 |
mov r177, 77 |
mov r178, 78 |
mov r179, 79 |
mov r180, 80 |
mov r181, 81 |
mov r182, 82 |
mov r183, 83 |
mov r184, 84 |
mov r185, 85 |
mov r186, 86 |
mov r187, 87 |
mov r188, 88 |
mov r189, 89 |
mov r190, 90 |
mov r191, 91 |
mov r192, 92 |
mov r193, 93 |
mov r194, 94 |
mov r195, 95 |
mov r196, 96 |
mov r197, 97 |
mov r198, 98 |
mov r199, 99 |
mov r200, 0 |
mov r201, 1 |
mov r202, 2 |
mov r203, 3 |
mov r204, 4 |
mov r205, 5 |
mov r206, 6 |
mov r207, 7 |
mov r208, 8 |
mov r209, 9 |
mov r210, 10 |
mov r211, 11 |
mov r212, 12 |
mov r213, 13 |
mov r214, 14 |
mov r215, 15 |
mov r216, 16 |
mov r217, 17 |
mov r218, 18 |
mov r219, 19 |
mov r220, 20 |
mov r221, 21 |
mov r222, 22 |
mov r223, 23 |
mov r224, 24 |
mov r225, 25 |
mov r226, 26 |
mov r227, 27 |
mov r228, 28 |
mov r229, 29 |
mov r230, 30 |
mov r231, 31 |
mov r232, 32 |
mov r233, 33 |
mov r234, 34 |
mov r235, 35 |
mov r236, 36 |
mov r237, 37 |
mov r238, 38 |
mov r239, 39 |
mov r240, 40 |
mov r241, 41 |
mov r242, 42 |
mov r243, 43 |
mov r244, 44 |
mov r245, 45 |
mov r246, 46 |
mov r247, 47 |
mov r248, 48 |
mov r249, 49 |
mov r250, 50 |
mov r251, 51 |
mov r252, 52 |
mov r253, 53 |
mov r254, 54 |
mov r255, 55 |
|
nop |
nop |
nop |
|
cjmpne r0, r1, 1 |
nop |
cjmpne r0, r2, 2 |
nop |
nop |
cjmpne r0, r3, 3 |
cjmpne r0, r4, 4 |
cjmpne r0, r5, 5 |
nop |
cjmpne r0, r6, 6 |
cjmpne r0, r7, 7 |
cjmpne r0, r8, 8 |
cjmpne r0, r9, 9 |
cjmpne r0, r10, 10 |
cjmpne r0, r11, 11 |
nop |
nop |
nop |
cjmpne r0, r12, 12 |
cjmpne r0, r13, 13 |
cjmpne r0, r14, 14 |
cjmpne r0, r15, 15 |
cjmpne r0, r16, 16 |
cjmpne r0, r17, 17 |
cjmpne r0, r18, 18 |
cjmpne r0, r19, 19 |
cjmpne r0, r20, 20 |
cjmpne r0, r21, 21 |
cjmpne r0, r22, 22 |
cjmpne r0, r23, 23 |
cjmpne r0, r24, 24 |
cjmpne r0, r25, 25 |
cjmpne r0, r26, 26 |
cjmpne r0, r27, 27 |
cjmpne r0, r28, 28 |
cjmpne r0, r29, 29 |
cjmpne r0, r30, 30 |
cjmpne r0, r31, 31 |
cjmpne r0, r32, 32 |
cjmpne r0, r33, 33 |
cjmpne r0, r34, 34 |
cjmpne r0, r35, 35 |
cjmpne r0, r36, 36 |
cjmpne r0, r37, 37 |
cjmpne r0, r38, 38 |
cjmpne r0, r39, 39 |
cjmpne r0, r40, 40 |
cjmpne r0, r41, 41 |
cjmpne r0, r42, 42 |
cjmpne r0, r43, 43 |
cjmpne r0, r44, 44 |
cjmpne r0, r45, 45 |
cjmpne r0, r46, 46 |
cjmpne r0, r47, 47 |
cjmpne r0, r48, 48 |
cjmpne r0, r49, 49 |
cjmpne r0, r50, 50 |
cjmpne r0, r51, 51 |
cjmpne r0, r52, 52 |
cjmpne r0, r53, 53 |
cjmpne r0, r54, 54 |
cjmpne r0, r55, 55 |
cjmpne r0, r56, 56 |
cjmpne r0, r57, 57 |
cjmpne r0, r58, 58 |
cjmpne r0, r59, 59 |
cjmpne r0, r60, 60 |
cjmpne r0, r61, 61 |
cjmpne r0, r62, 62 |
cjmpne r0, r63, 63 |
cjmpne r0, r64, 64 |
cjmpne r0, r65, 65 |
cjmpne r0, r66, 66 |
cjmpne r0, r67, 67 |
cjmpne r0, r68, 68 |
cjmpne r0, r69, 69 |
cjmpne r0, r70, 70 |
cjmpne r0, r71, 71 |
cjmpne r0, r72, 72 |
cjmpne r0, r73, 73 |
cjmpne r0, r74, 74 |
cjmpne r0, r75, 75 |
cjmpne r0, r76, 76 |
cjmpne r0, r77, 77 |
cjmpne r0, r78, 78 |
cjmpne r0, r79, 79 |
cjmpne r0, r80, 80 |
cjmpne r0, r81, 81 |
cjmpne r0, r82, 82 |
cjmpne r0, r83, 83 |
cjmpne r0, r84, 84 |
cjmpne r0, r85, 85 |
cjmpne r0, r86, 86 |
cjmpne r0, r87, 87 |
cjmpne r0, r88, 88 |
cjmpne r0, r89, 89 |
cjmpne r0, r90, 90 |
cjmpne r0, r91, 91 |
cjmpne r0, r92, 92 |
cjmpne r0, r93, 93 |
cjmpne r0, r94, 94 |
cjmpne r0, r95, 95 |
cjmpne r0, r96, 96 |
cjmpne r0, r97, 97 |
cjmpne r0, r98, 98 |
cjmpne r0, r99, 99 |
cjmpne r0, r100, 0 |
cjmpne r0, r101, 1 |
cjmpne r0, r102, 2 |
cjmpne r0, r103, 3 |
cjmpne r0, r104, 4 |
cjmpne r0, r105, 5 |
cjmpne r0, r106, 6 |
cjmpne r0, r107, 7 |
cjmpne r0, r108, 8 |
cjmpne r0, r109, 9 |
cjmpne r0, r110, 10 |
cjmpne r0, r111, 11 |
cjmpne r0, r112, 12 |
cjmpne r0, r113, 13 |
cjmpne r0, r114, 14 |
cjmpne r0, r115, 15 |
cjmpne r0, r116, 16 |
cjmpne r0, r117, 17 |
cjmpne r0, r118, 18 |
cjmpne r0, r119, 19 |
cjmpne r0, r120, 20 |
cjmpne r0, r121, 21 |
cjmpne r0, r122, 22 |
cjmpne r0, r123, 23 |
cjmpne r0, r124, 24 |
cjmpne r0, r125, 25 |
cjmpne r0, r126, 26 |
cjmpne r0, r127, 27 |
cjmpne r0, r128, 28 |
cjmpne r0, r129, 29 |
cjmpne r0, r130, 30 |
cjmpne r0, r131, 31 |
cjmpne r0, r132, 32 |
cjmpne r0, r133, 33 |
cjmpne r0, r134, 34 |
cjmpne r0, r135, 35 |
cjmpne r0, r136, 36 |
cjmpne r0, r137, 37 |
cjmpne r0, r138, 38 |
cjmpne r0, r139, 39 |
cjmpne r0, r140, 40 |
cjmpne r0, r141, 41 |
cjmpne r0, r142, 42 |
cjmpne r0, r143, 43 |
cjmpne r0, r144, 44 |
cjmpne r0, r145, 45 |
cjmpne r0, r146, 46 |
cjmpne r0, r147, 47 |
cjmpne r0, r148, 48 |
cjmpne r0, r149, 49 |
cjmpne r0, r150, 50 |
cjmpne r0, r151, 51 |
cjmpne r0, r152, 52 |
cjmpne r0, r153, 53 |
cjmpne r0, r154, 54 |
cjmpne r0, r155, 55 |
cjmpne r0, r156, 56 |
cjmpne r0, r157, 57 |
cjmpne r0, r158, 58 |
cjmpne r0, r159, 59 |
cjmpne r0, r160, 60 |
cjmpne r0, r161, 61 |
cjmpne r0, r162, 62 |
cjmpne r0, r163, 63 |
cjmpne r0, r164, 64 |
cjmpne r0, r165, 65 |
cjmpne r0, r166, 66 |
cjmpne r0, r167, 67 |
cjmpne r0, r168, 68 |
cjmpne r0, r169, 69 |
cjmpne r0, r170, 70 |
cjmpne r0, r171, 71 |
cjmpne r0, r172, 72 |
cjmpne r0, r173, 73 |
cjmpne r0, r174, 74 |
cjmpne r0, r175, 75 |
cjmpne r0, r176, 76 |
cjmpne r0, r177, 77 |
cjmpne r0, r178, 78 |
cjmpne r0, r179, 79 |
cjmpne r0, r180, 80 |
cjmpne r0, r181, 81 |
cjmpne r0, r182, 82 |
cjmpne r0, r183, 83 |
cjmpne r0, r184, 84 |
cjmpne r0, r185, 85 |
cjmpne r0, r186, 86 |
cjmpne r0, r187, 87 |
cjmpne r0, r188, 88 |
cjmpne r0, r189, 89 |
cjmpne r0, r190, 90 |
cjmpne r0, r191, 91 |
cjmpne r0, r192, 92 |
cjmpne r0, r193, 93 |
cjmpne r0, r194, 94 |
cjmpne r0, r195, 95 |
cjmpne r0, r196, 96 |
cjmpne r0, r197, 97 |
cjmpne r0, r198, 98 |
cjmpne r0, r199, 99 |
cjmpne r0, r200, 0 |
cjmpne r0, r201, 1 |
cjmpne r0, r202, 2 |
cjmpne r0, r203, 3 |
cjmpne r0, r204, 4 |
cjmpne r0, r205, 5 |
cjmpne r0, r206, 6 |
cjmpne r0, r207, 7 |
cjmpne r0, r208, 8 |
cjmpne r0, r209, 9 |
cjmpne r0, r210, 10 |
cjmpne r0, r211, 11 |
cjmpne r0, r212, 12 |
cjmpne r0, r213, 13 |
cjmpne r0, r214, 14 |
cjmpne r0, r215, 15 |
cjmpne r0, r216, 16 |
cjmpne r0, r217, 17 |
cjmpne r0, r218, 18 |
cjmpne r0, r219, 19 |
cjmpne r0, r220, 20 |
cjmpne r0, r221, 21 |
cjmpne r0, r222, 22 |
cjmpne r0, r223, 23 |
cjmpne r0, r224, 24 |
cjmpne r0, r225, 25 |
cjmpne r0, r226, 26 |
cjmpne r0, r227, 27 |
cjmpne r0, r228, 28 |
cjmpne r0, r229, 29 |
cjmpne r0, r230, 30 |
cjmpne r0, r231, 31 |
cjmpne r0, r232, 32 |
cjmpne r0, r233, 33 |
cjmpne r0, r234, 34 |
cjmpne r0, r235, 35 |
cjmpne r0, r236, 36 |
cjmpne r0, r237, 37 |
cjmpne r0, r238, 38 |
cjmpne r0, r239, 39 |
cjmpne r0, r240, 40 |
cjmpne r0, r241, 41 |
cjmpne r0, r242, 42 |
cjmpne r0, r243, 43 |
cjmpne r0, r244, 44 |
cjmpne r0, r245, 45 |
cjmpne r0, r246, 46 |
cjmpne r0, r247, 47 |
cjmpne r0, r248, 48 |
cjmpne r0, r249, 49 |
cjmpne r0, r250, 50 |
cjmpne r0, r251, 51 |
cjmpne r0, r252, 52 |
cjmpne r0, r253, 53 |
cjmpne r0, r254, 54 |
cjmpne r0, r255, 55 |
|
lc r100, 0x10000000 |
lc r101, halt |
sw r100, 1 |
jmp r101 |
|
failure: |
lc r100, 0x10000000 |
lc r101, halt |
sw r100, 2 |
|
halt: |
hlt |
jmp r101 |
/firmware/test005.asm
1,81 → 1,81
/* |
* This test verifies bytewise DBUS access |
*/ |
|
lc r100, 0x10000000 // test result output pointer |
lc r101, halt |
lc r102, failure |
|
lc r16, 0x10000004 // output pointer |
lc r17, data // input pointer |
|
// Check for bytewise read |
lc r18, 0xbc |
lc r19, 0x9a |
lc r20, 0x78 |
lc r21, 0x56 |
lc r22, 0xffffffbc |
lc r23, 0xffffff9a |
lc r24, 0x78 |
lc r25, 0x56 |
|
lub r0, r17 |
sw r16, r0 |
cjmpne r102, r0, r18 |
add r17, r17, 1 |
lub r0, r17 |
sw r16, r0 |
cjmpne r102, r0, r19 |
add r17, r17, 1 |
lub r0, r17 |
sw r16, r0 |
cjmpne r102, r0, r20 |
add r17, r17, 1 |
lub r0, r17 |
sw r16, r0 |
cjmpne r102, r0, r21 |
sub r17, r17, 3 |
lsb r0, r17 |
sw r16, r0 |
cjmpne r102, r0, r22 |
add r17, r17, 1 |
lsb r0, r17 |
sw r16, r0 |
cjmpne r102, r0, r23 |
add r17, r17, 1 |
lsb r0, r17 |
sw r16, r0 |
cjmpne r102, r0, r24 |
add r17, r17, 1 |
lsb r0, r17 |
sw r16, r0 |
cjmpne r102, r0, r25 |
|
// Check for bytewise write |
lc r17, 0x00008004 |
sb r17, 0x12 |
add r17, r17, 1 |
sb r17, 0x34 |
add r17, r17, 1 |
sb r17, 0x56 |
add r17, r17, 1 |
sb r17, 0x78 |
|
// Read the whole word and compare |
sub r17, r17, 3 |
lw r0, r17 |
lc r18, 0x78563412 |
cjmpne r102, r0, r18 |
|
sw r100, 1 |
jmp r101 |
|
failure: |
sw r100, 2 |
|
halt: |
hlt |
jmp r101 |
|
data: |
.word 0x56789ABC |
/* |
* This test verifies bytewise DBUS access |
*/ |
|
lc r100, 0x10000000 // test result output pointer |
lc r101, halt |
lc r102, failure |
|
lc r16, 0x10000004 // output pointer |
lc r17, data // input pointer |
|
// Check for bytewise read |
lc r18, 0xbc |
lc r19, 0x9a |
lc r20, 0x78 |
lc r21, 0x56 |
lc r22, 0xffffffbc |
lc r23, 0xffffff9a |
lc r24, 0x78 |
lc r25, 0x56 |
|
lub r0, r17 |
sw r16, r0 |
cjmpne r102, r0, r18 |
add r17, r17, 1 |
lub r0, r17 |
sw r16, r0 |
cjmpne r102, r0, r19 |
add r17, r17, 1 |
lub r0, r17 |
sw r16, r0 |
cjmpne r102, r0, r20 |
add r17, r17, 1 |
lub r0, r17 |
sw r16, r0 |
cjmpne r102, r0, r21 |
sub r17, r17, 3 |
lsb r0, r17 |
sw r16, r0 |
cjmpne r102, r0, r22 |
add r17, r17, 1 |
lsb r0, r17 |
sw r16, r0 |
cjmpne r102, r0, r23 |
add r17, r17, 1 |
lsb r0, r17 |
sw r16, r0 |
cjmpne r102, r0, r24 |
add r17, r17, 1 |
lsb r0, r17 |
sw r16, r0 |
cjmpne r102, r0, r25 |
|
// Check for bytewise write |
lc r17, 0x00008004 |
sb r17, 0x12 |
add r17, r17, 1 |
sb r17, 0x34 |
add r17, r17, 1 |
sb r17, 0x56 |
add r17, r17, 1 |
sb r17, 0x78 |
|
// Read the whole word and compare |
sub r17, r17, 3 |
lw r0, r17 |
lc r18, 0x78563412 |
cjmpne r102, r0, r18 |
|
sw r100, 1 |
jmp r101 |
|
failure: |
sw r100, 2 |
|
halt: |
hlt |
jmp r101 |
|
data: |
.word 0x56789ABC |
/firmware/test006.asm
1,33 → 1,33
/* |
* This test checks for a bug with jump destination register |
* being wrongly overwritten when jump instruction follows "lw" |
*/ |
|
lc r100, 0x10000000 // test result output pointer |
lc r101, halt |
lc r102, failure |
|
lc r16, 0x10000004 |
lc r17, 0x12345678 |
lc r18, 0x12345678 |
|
sw r16, 123 |
lw r0, r16 |
cjmpne r17, 0, 0 // r17 used to be wrongly overwritten by the value of r16 here |
|
sw r16, r17 |
|
nop |
nop |
|
cjmpne r102, r17, r18 |
|
sw r100, 1 |
jmp r101 |
|
failure: |
sw r100, 2 |
|
halt: |
hlt |
jmp r101 |
/* |
* This test checks for a bug with jump destination register |
* being wrongly overwritten when jump instruction follows "lw" |
*/ |
|
lc r100, 0x10000000 // test result output pointer |
lc r101, halt |
lc r102, failure |
|
lc r16, 0x10000004 |
lc r17, 0x12345678 |
lc r18, 0x12345678 |
|
sw r16, 123 |
lw r0, r16 |
cjmpne r17, 0, 0 // r17 used to be wrongly overwritten by the value of r16 here |
|
sw r16, r17 |
|
nop |
nop |
|
cjmpne r102, r17, r18 |
|
sw r100, 1 |
jmp r101 |
|
failure: |
sw r100, 2 |
|
halt: |
hlt |
jmp r101 |
/firmware/test007.asm
1,134 → 1,134
/* |
* This test verifies bitwise shift operations. |
*/ |
|
lc r100, 0x10000000 // test result output pointer |
lc r101, halt |
lc r102, failure |
|
lc r16, 0x10000004 // output pointer |
|
// Test left shifts (by comparison with self-addition) |
|
lc r0, 0x12345678 |
mov r3, r0 // for comparison |
lc r32, sl_loop |
mov r1, 0 // counter |
|
sl_loop: |
sl r2, r0, r1 |
sw r16, r2 |
cjmpne r102, r2, r3 |
add r1, r1, 1 |
add r3, r3, r3 |
cjmpul r32, r1, 32 |
|
// Test unsigned right shifts (by comparison with pre-calculated values) |
|
lc r32, sru_loop |
lc r17, sru_expected_data |
mov r1, 0 // counter |
|
sru_loop: |
sru r2, r0, r1 |
sw r16, r2 |
lw r3, r17 |
cjmpne r102, r2, r3 |
add r1, r1, 1 |
add r17, r17, 4 |
cjmpul r32, r1, 32 |
|
// Test signed right shifts (by comparison with pre-calculated values) |
|
lc r0, 0x87654321 |
lc r32, srs_loop |
lc r17, srs_expected_data |
mov r1, 0 // counter |
|
srs_loop: |
srs r2, r0, r1 |
sw r16, r2 |
lw r3, r17 |
cjmpne r102, r2, r3 |
add r1, r1, 1 |
add r17, r17, 4 |
cjmpul r32, r1, 32 |
|
// Report success |
sw r100, 1 |
jmp r101 |
|
failure: |
sw r100, 2 |
|
halt: |
hlt |
jmp r101 |
|
sru_expected_data: |
.word 0x12345678 |
.word 0x091A2B3C |
.word 0x048D159E |
.word 0x02468ACF |
.word 0x01234567 |
.word 0x0091A2B3 |
.word 0x0048D159 |
.word 0x002468AC |
.word 0x00123456 |
.word 0x00091A2B |
.word 0x00048D15 |
.word 0x0002468A |
.word 0x00012345 |
.word 0x000091A2 |
.word 0x000048D1 |
.word 0x00002468 |
.word 0x00001234 |
.word 0x0000091A |
.word 0x0000048D |
.word 0x00000246 |
.word 0x00000123 |
.word 0x00000091 |
.word 0x00000048 |
.word 0x00000024 |
.word 0x00000012 |
.word 0x00000009 |
.word 0x00000004 |
.word 0x00000002 |
.word 0x00000001 |
.word 0x00000000 |
.word 0x00000000 |
.word 0x00000000 |
|
srs_expected_data: |
.word 0x87654321 |
.word 0xC3B2A190 |
.word 0xE1D950C8 |
.word 0xF0ECA864 |
.word 0xF8765432 |
.word 0xFC3B2A19 |
.word 0xFE1D950C |
.word 0xFF0ECA86 |
.word 0xFF876543 |
.word 0xFFC3B2A1 |
.word 0xFFE1D950 |
.word 0xFFF0ECA8 |
.word 0xFFF87654 |
.word 0xFFFC3B2A |
.word 0xFFFE1D95 |
.word 0xFFFF0ECA |
.word 0xFFFF8765 |
.word 0xFFFFC3B2 |
.word 0xFFFFE1D9 |
.word 0xFFFFF0EC |
.word 0xFFFFF876 |
.word 0xFFFFFC3B |
.word 0xFFFFFE1D |
.word 0xFFFFFF0E |
.word 0xFFFFFF87 |
.word 0xFFFFFFC3 |
.word 0xFFFFFFE1 |
.word 0xFFFFFFF0 |
.word 0xFFFFFFF8 |
.word 0xFFFFFFFC |
.word 0xFFFFFFFE |
.word 0xFFFFFFFF |
/* |
* This test verifies bitwise shift operations. |
*/ |
|
lc r100, 0x10000000 // test result output pointer |
lc r101, halt |
lc r102, failure |
|
lc r16, 0x10000004 // output pointer |
|
// Test left shifts (by comparison with self-addition) |
|
lc r0, 0x12345678 |
mov r3, r0 // for comparison |
lc r32, sl_loop |
mov r1, 0 // counter |
|
sl_loop: |
sl r2, r0, r1 |
sw r16, r2 |
cjmpne r102, r2, r3 |
add r1, r1, 1 |
add r3, r3, r3 |
cjmpul r32, r1, 32 |
|
// Test unsigned right shifts (by comparison with pre-calculated values) |
|
lc r32, sru_loop |
lc r17, sru_expected_data |
mov r1, 0 // counter |
|
sru_loop: |
sru r2, r0, r1 |
sw r16, r2 |
lw r3, r17 |
cjmpne r102, r2, r3 |
add r1, r1, 1 |
add r17, r17, 4 |
cjmpul r32, r1, 32 |
|
// Test signed right shifts (by comparison with pre-calculated values) |
|
lc r0, 0x87654321 |
lc r32, srs_loop |
lc r17, srs_expected_data |
mov r1, 0 // counter |
|
srs_loop: |
srs r2, r0, r1 |
sw r16, r2 |
lw r3, r17 |
cjmpne r102, r2, r3 |
add r1, r1, 1 |
add r17, r17, 4 |
cjmpul r32, r1, 32 |
|
// Report success |
sw r100, 1 |
jmp r101 |
|
failure: |
sw r100, 2 |
|
halt: |
hlt |
jmp r101 |
|
sru_expected_data: |
.word 0x12345678 |
.word 0x091A2B3C |
.word 0x048D159E |
.word 0x02468ACF |
.word 0x01234567 |
.word 0x0091A2B3 |
.word 0x0048D159 |
.word 0x002468AC |
.word 0x00123456 |
.word 0x00091A2B |
.word 0x00048D15 |
.word 0x0002468A |
.word 0x00012345 |
.word 0x000091A2 |
.word 0x000048D1 |
.word 0x00002468 |
.word 0x00001234 |
.word 0x0000091A |
.word 0x0000048D |
.word 0x00000246 |
.word 0x00000123 |
.word 0x00000091 |
.word 0x00000048 |
.word 0x00000024 |
.word 0x00000012 |
.word 0x00000009 |
.word 0x00000004 |
.word 0x00000002 |
.word 0x00000001 |
.word 0x00000000 |
.word 0x00000000 |
.word 0x00000000 |
|
srs_expected_data: |
.word 0x87654321 |
.word 0xC3B2A190 |
.word 0xE1D950C8 |
.word 0xF0ECA864 |
.word 0xF8765432 |
.word 0xFC3B2A19 |
.word 0xFE1D950C |
.word 0xFF0ECA86 |
.word 0xFF876543 |
.word 0xFFC3B2A1 |
.word 0xFFE1D950 |
.word 0xFFF0ECA8 |
.word 0xFFF87654 |
.word 0xFFFC3B2A |
.word 0xFFFE1D95 |
.word 0xFFFF0ECA |
.word 0xFFFF8765 |
.word 0xFFFFC3B2 |
.word 0xFFFFE1D9 |
.word 0xFFFFF0EC |
.word 0xFFFFF876 |
.word 0xFFFFFC3B |
.word 0xFFFFFE1D |
.word 0xFFFFFF0E |
.word 0xFFFFFF87 |
.word 0xFFFFFFC3 |
.word 0xFFFFFFE1 |
.word 0xFFFFFFF0 |
.word 0xFFFFFFF8 |
.word 0xFFFFFFFC |
.word 0xFFFFFFFE |
.word 0xFFFFFFFF |
/firmware/test008.asm
1,59 → 1,59
/* |
* This test calculates a CRC-32 checksum of a small byte array |
* CRC32("123456789")=0xCBF43926 |
*/ |
|
lc r100, 0x10000000 // test result output pointer |
lc r101, halt |
lc r102, failure |
|
lc r16, 0x10000004 // output pointer |
lc r17, 0xFFFFFFFF // initial CRC value |
lc r18, 0xEDB88320 // polynom |
lc r19, data // input pointer |
|
lc r32, byte_loop |
lc r33, bit_loop |
lc r34, dont_xor |
|
mov r20, 0 // byte counter |
|
byte_loop: |
lub r0, r19 |
mov r21, 0 // bit counter |
|
bit_loop: |
and r1, r0, 1 |
and r2, r17, 1 |
sru r17, r17, 1 |
xor r3, r1, r2 |
cjmpe r34, r3, 0 |
xor r17, r17, r18 |
|
dont_xor: |
sru r0, r0, 1 |
add r21, r21, 1 |
cjmpul r33, r21, 8 |
|
add r19, r19, 1 |
add r20, r20, 1 |
cjmpul r32, r20, 9 |
|
not r17, r17 |
sw r16, r17 |
|
lc r0, 0xCBF43926 |
cjmpne r102, r0, r17 |
|
sw r100, 1 |
jmp r101 |
|
failure: |
sw r100, 2 |
|
halt: |
hlt |
jmp r101 |
|
data: |
.byte "123456789" |
/* |
* This test calculates a CRC-32 checksum of a small byte array |
* CRC32("123456789")=0xCBF43926 |
*/ |
|
lc r100, 0x10000000 // test result output pointer |
lc r101, halt |
lc r102, failure |
|
lc r16, 0x10000004 // output pointer |
lc r17, 0xFFFFFFFF // initial CRC value |
lc r18, 0xEDB88320 // polynom |
lc r19, data // input pointer |
|
lc r32, byte_loop |
lc r33, bit_loop |
lc r34, dont_xor |
|
mov r20, 0 // byte counter |
|
byte_loop: |
lub r0, r19 |
mov r21, 0 // bit counter |
|
bit_loop: |
and r1, r0, 1 |
and r2, r17, 1 |
sru r17, r17, 1 |
xor r3, r1, r2 |
cjmpe r34, r3, 0 |
xor r17, r17, r18 |
|
dont_xor: |
sru r0, r0, 1 |
add r21, r21, 1 |
cjmpul r33, r21, 8 |
|
add r19, r19, 1 |
add r20, r20, 1 |
cjmpul r32, r20, 9 |
|
not r17, r17 |
sw r16, r17 |
|
lc r0, 0xCBF43926 |
cjmpne r102, r0, r17 |
|
sw r100, 1 |
jmp r101 |
|
failure: |
sw r100, 2 |
|
halt: |
hlt |
jmp r101 |
|
data: |
.byte "123456789" |
/firmware/test009.asm
1,116 → 1,116
/* |
* This test verifies call and ret instructions |
*/ |
|
lc r100, 0x10000000 // test result output pointer |
lc r101, halt |
lc r102, failure |
lc sp, 0x00010000 // stack pointer |
|
lc r0, 0x00008000 |
sw r0, 0 |
|
// Test simple procedure call |
|
lc r1, testproc |
|
call r1 // testproc |
|
lw r0, r0 |
lc r1, 0x11223344 |
|
cjmpne r102, r0, r1 // failure |
|
// Test jump directly to CALL instruction |
lc r1, jump_to_call |
lc r2, testproc2 |
|
jmp r1 |
nop |
nop |
nop |
|
jump_to_call: |
call r2 |
|
lw r0, r0 |
lc r1, 0x55667788 |
|
cjmpne r102, r0, r1 // failure |
|
// Test recursive calls: calculate 10th Fibonnaci number |
// using recursive algorithm |
mov r0, 10 // argument |
mov r16, 0 // how many times test_recursive has been called |
lc r1, test_recursive |
call r1 // test_recursive |
|
lc r1, 0x00008000 |
sw r1, r0 |
|
add r1, r1, 4 |
sw r1, r16 |
|
lc r1, 55 |
cjmpne r102, r0, r1 |
|
lc r1, 177 |
cjmpne r102, r16, r1 |
|
sw r100, 1 |
jmp r101 // halt |
|
failure: |
sw r100, 2 |
|
halt: |
hlt |
jmp r101 // halt |
|
testproc: |
lc r0, 0x00008000 |
lc r1, 0x11223344 |
sw r0, r1 |
ret |
|
testproc2: |
lc r0, 0x00008000 |
lc r1, 0x55667788 |
sw r0, r1 |
ret |
|
test_recursive: |
add r16, r16, 1 // increment call counter |
|
// If r0 is 0 or 1, just return |
cjmpe rp, r0, 0 |
cjmpe rp, r0, 1 |
|
// Save return address in stack |
sub sp, sp, 4 |
sw sp, rp |
// Save argument in stack |
sub sp, sp, 4 |
sw sp, r0 |
// Call itself for with (r0-1) and (r0-2) arguments |
sub r0, r0, 1 |
lc r1, test_recursive |
call r1 |
// Restore value from stack, save temporary result |
lw r1, sp |
sw sp, r0 |
|
sub r0, r1, 2 |
lc r1, test_recursive |
call r1 |
|
// Restore result from stack |
lw r1, sp |
add sp, sp, 4 |
|
add r0, r0, r1 |
|
// Restore return address |
lw rp, sp |
add sp, sp, 4 |
ret |
/* |
* This test verifies call and ret instructions |
*/ |
|
lc r100, 0x10000000 // test result output pointer |
lc r101, halt |
lc r102, failure |
lc sp, 0x00010000 // stack pointer |
|
lc r0, 0x00008000 |
sw r0, 0 |
|
// Test simple procedure call |
|
lc r1, testproc |
|
call r1 // testproc |
|
lw r0, r0 |
lc r1, 0x11223344 |
|
cjmpne r102, r0, r1 // failure |
|
// Test jump directly to CALL instruction |
lc r1, jump_to_call |
lc r2, testproc2 |
|
jmp r1 |
nop |
nop |
nop |
|
jump_to_call: |
call r2 |
|
lw r0, r0 |
lc r1, 0x55667788 |
|
cjmpne r102, r0, r1 // failure |
|
// Test recursive calls: calculate 10th Fibonnaci number |
// using recursive algorithm |
mov r0, 10 // argument |
mov r16, 0 // how many times test_recursive has been called |
lc r1, test_recursive |
call r1 // test_recursive |
|
lc r1, 0x00008000 |
sw r1, r0 |
|
add r1, r1, 4 |
sw r1, r16 |
|
lc r1, 55 |
cjmpne r102, r0, r1 |
|
lc r1, 177 |
cjmpne r102, r16, r1 |
|
sw r100, 1 |
jmp r101 // halt |
|
failure: |
sw r100, 2 |
|
halt: |
hlt |
jmp r101 // halt |
|
testproc: |
lc r0, 0x00008000 |
lc r1, 0x11223344 |
sw r0, r1 |
ret |
|
testproc2: |
lc r0, 0x00008000 |
lc r1, 0x55667788 |
sw r0, r1 |
ret |
|
test_recursive: |
add r16, r16, 1 // increment call counter |
|
// If r0 is 0 or 1, just return |
cjmpe rp, r0, 0 |
cjmpe rp, r0, 1 |
|
// Save return address in stack |
sub sp, sp, 4 |
sw sp, rp |
// Save argument in stack |
sub sp, sp, 4 |
sw sp, r0 |
// Call itself for with (r0-1) and (r0-2) arguments |
sub r0, r0, 1 |
lc r1, test_recursive |
call r1 |
// Restore value from stack, save temporary result |
lw r1, sp |
sw sp, r0 |
|
sub r0, r1, 2 |
lc r1, test_recursive |
call r1 |
|
// Restore result from stack |
lw r1, sp |
add sp, sp, 4 |
|
add r0, r0, r1 |
|
// Restore return address |
lw rp, sp |
add sp, sp, 4 |
ret |
/firmware/test010.asm
1,54 → 1,54
/* |
* This test verifies interrupt handling using a simple timer model |
*/ |
|
lc r100, 0x10000000 // test result output pointer |
lc r101, halt |
lc r102, failure |
lc r103, 0x20000000 // timer: number of pulses (0xFFFFFFFF - infinite) |
lc r104, 0x20000004 // timer: delay between pulses (in cycles) |
|
lc iv0, timer_handler0 |
lc iv1, timer_handler1 |
mov cr, 3 // enable interrupts 0 and 1 |
|
lc r32, 2000 // cycle counter |
lc r33, cnt_loop |
mov r34, 0 // interrupt 0 call counter |
mov r35, 0 // interrupt 1 call counter |
|
sw r104, 100 |
sw r103, 10 |
|
cnt_loop: |
sub r32, r32, 1 |
cjmpug r33, r32, 0 // cnt_loop |
|
cjmpne r102, r34, 10 // failure |
cjmpne r102, r35, 4 // failure |
|
sw r100, 1 |
jmp r101 // halt |
|
failure: |
sw r100, 2 |
|
halt: |
hlt |
jmp r101 // halt |
|
timer_handler0: |
add r34, r34, 1 |
lc r0, 0x10000004 |
sw r0, r34 |
cjmpne irp, r34, 5 // exit interrupt handler if r34!=5 |
mov cr, 1 // disable interrupt 1 |
iret |
|
timer_handler1: |
add r35, r35, 1 |
// Interrupt 1 has lower priority than interrupt 0 and will be called later |
cjmpne r102, r34, r35 |
lc r0, 0x10000008 |
sw r0, r35 |
iret |
/* |
* This test verifies interrupt handling using a simple timer model |
*/ |
|
lc r100, 0x10000000 // test result output pointer |
lc r101, halt |
lc r102, failure |
lc r103, 0x20000000 // timer: number of pulses (0xFFFFFFFF - infinite) |
lc r104, 0x20000004 // timer: delay between pulses (in cycles) |
|
lc iv0, timer_handler0 |
lc iv1, timer_handler1 |
mov cr, 3 // enable interrupts 0 and 1 |
|
lc r32, 2000 // cycle counter |
lc r33, cnt_loop |
mov r34, 0 // interrupt 0 call counter |
mov r35, 0 // interrupt 1 call counter |
|
sw r104, 100 |
sw r103, 10 |
|
cnt_loop: |
sub r32, r32, 1 |
cjmpug r33, r32, 0 // cnt_loop |
|
cjmpne r102, r34, 10 // failure |
cjmpne r102, r35, 4 // failure |
|
sw r100, 1 |
jmp r101 // halt |
|
failure: |
sw r100, 2 |
|
halt: |
hlt |
jmp r101 // halt |
|
timer_handler0: |
add r34, r34, 1 |
lc r0, 0x10000004 |
sw r0, r34 |
cjmpne irp, r34, 5 // exit interrupt handler if r34!=5 |
mov cr, 1 // disable interrupt 1 |
iret |
|
timer_handler1: |
add r35, r35, 1 |
// Interrupt 1 has lower priority than interrupt 0 and will be called later |
cjmpne r102, r34, r35 |
lc r0, 0x10000008 |
sw r0, r35 |
iret |
/firmware/test011.asm
1,172 → 1,172
/* |
* Coroutine switching test |
* |
* There are two coroutines in this test. The main coroutine calculates |
* CRC32 of the 1024-byte data block. The secondary coroutine simulates |
* a linear-feedback shift register (LFSR) with a polynom 1+x^6+x^7. |
* It is invoked by the timer interrupt. |
*/ |
|
lc r100, 0x10000000 // test result output pointer |
lc r101, halt |
lc r102, failure |
lc r103, 0x20000000 // timer: number of pulses (0xFFFFFFFF - infinite) |
lc r104, 0x20000004 // timer: delay between pulses (in cycles) |
|
// Set up secondary routine (invoked by timer) |
mov r200, 127 // initial value |
lc r201, 250 // counter (number of LFSR iterations) |
mov r204, 0 // result |
lc r210, 0x10000008 // secondary routine output pointer |
|
lc iv0, timer_handler |
mov cr, 1 // enable interrupt 0 |
|
sw r104, 100 |
lc r0, 0xFFFFFFFF |
sw r103, r0 // activate timer, unlimited pulses |
|
// Main routine |
lc r16, 0x10000004 // output pointer |
lc r17, 0xFFFFFFFF // initial CRC value |
lc r18, 0xEDB88320 // polynom |
lc r19, data // input pointer |
lc r20, 256 // data block size in words |
|
lc r32, word_loop |
lc r33, bit_loop |
lc r34, dont_xor |
|
mov r64, 0 // word counter |
|
word_loop: |
lw r0, r19 |
mov r65, 0 // bit counter |
|
bit_loop: |
and r1, r0, 1 |
and r2, r17, 1 |
sru r17, r17, 1 |
xor r3, r1, r2 |
cjmpe r34, r3, 0 // dont_xor |
xor r17, r17, r18 |
|
dont_xor: |
sru r0, r0, 1 |
add r65, r65, 1 |
cjmpul r33, r65, 32 // bit_loop |
|
sw r16, r17 |
add r19, r19, 4 |
add r64, r64, 1 |
cjmpul r32, r64, r20 // word_loop |
|
not r17, r17 |
sw r16, r17 |
|
// Check main routine result |
lc r0, 0x501860E6 |
cjmpne r102, r0, r17 |
|
// Wait until secondary routine finishes its job |
lc r0, wait_secondary |
|
wait_secondary: |
cjmpe r0, r204, 0 |
|
// Check secondary routine result |
cjmpne r102, r204, 0x57 |
|
sw r103, 0 // deactivate timer |
|
sw r100, 1 |
jmp r101 |
|
failure: |
sw r100, 2 |
|
halt: |
hlt |
jmp r101 |
|
timer_handler: |
sru r202, r200, 5 |
sru r203, r200, 6 |
xor r202, r202, r203 |
and r202, r202, 1 |
sl r200, r200, 1 |
or r200, r200, r202 |
and r200, r200, 0x7f |
sub r201, r201, 1 |
cjmpug irp, r201, 0 // exit interrupt handler if r201>0 |
mov r204, r200 |
sw r210, r204 |
mov cr, 0 // disable further interrupts |
iret |
|
.align |
data: |
.byte 0x00, 0x90, 0x31, 0xCF, 0x95, 0x7A, 0x59, 0xE5, 0xD2, 0xBF, 0x2C, 0xDB, 0xB5, 0x83, 0x4D, 0x03 |
.byte 0x17, 0x5D, 0x25, 0x2A, 0xFD, 0x72, 0x1E, 0x01, 0x02, 0x60, 0x88, 0x92, 0x9A, 0x9B, 0x2A, 0xA9 |
.byte 0x73, 0x5A, 0x0E, 0x9B, 0xC8, 0xCD, 0x85, 0x4D, 0xE0, 0xBA, 0xF4, 0xEC, 0x8A, 0x24, 0x76, 0x3C |
.byte 0xDC, 0x35, 0xC7, 0xD7, 0xFF, 0xFF, 0x9C, 0x64, 0x44, 0x4C, 0xD7, 0x06, 0x60, 0x17, 0xAD, 0x0E |
.byte 0x02, 0xEB, 0x46, 0x45, 0x96, 0xB0, 0xD6, 0xB9, 0x7C, 0x34, 0xBE, 0x77, 0x75, 0xF2, 0xBE, 0x1B |
.byte 0x99, 0x62, 0xBC, 0x9B, 0x92, 0x5C, 0x26, 0x39, 0x6C, 0xCD, 0x84, 0xFD, 0xC0, 0x58, 0x2B, 0xA8 |
.byte 0x7D, 0x10, 0xB3, 0x81, 0x25, 0xF3, 0x24, 0xE7, 0xB1, 0x4D, 0x6D, 0x12, 0xF7, 0xAE, 0x27, 0xE0 |
.byte 0xD2, 0x95, 0x30, 0x2D, 0xD1, 0x79, 0x27, 0x81, 0xBB, 0x67, 0x47, 0x91, 0xAE, 0xC1, 0xB8, 0x79 |
.byte 0x1F, 0x5E, 0xD5, 0x08, 0x84, 0xA9, 0x6D, 0x1A, 0xF3, 0xEB, 0x8C, 0x58, 0x78, 0x5F, 0xD8, 0x51 |
.byte 0x74, 0x45, 0xFB, 0x4C, 0xBD, 0x91, 0x32, 0xC2, 0xD6, 0x65, 0x80, 0xE3, 0x07, 0xFE, 0x92, 0x0C |
.byte 0x88, 0x31, 0xD7, 0xA0, 0xA8, 0x32, 0xD7, 0x1F, 0x1C, 0xBE, 0x50, 0xF0, 0x49, 0x56, 0x23, 0xBB |
.byte 0xD5, 0xB5, 0x99, 0xBF, 0x40, 0x24, 0x00, 0x0F, 0xCE, 0xDA, 0x35, 0x1D, 0x8D, 0x03, 0x1D, 0x74 |
.byte 0xC0, 0xAF, 0x8B, 0x12, 0x6F, 0x33, 0xB2, 0x4A, 0x6F, 0x3B, 0x93, 0x88, 0xA0, 0x29, 0x81, 0xF6 |
.byte 0xB2, 0xEC, 0x30, 0x56, 0x2D, 0xFE, 0x75, 0xFF, 0x18, 0xA0, 0x18, 0x70, 0xEE, 0x0C, 0xE5, 0x4A |
.byte 0x3A, 0xC4, 0x69, 0x33, 0xA0, 0x9A, 0x73, 0x77, 0x99, 0xA2, 0xDA, 0xD4, 0x9F, 0xB8, 0x90, 0x60 |
.byte 0x2F, 0xBC, 0x8E, 0xE7, 0x3E, 0x30, 0x9A, 0xB2, 0x95, 0x59, 0x7E, 0x14, 0xBD, 0x9C, 0x9E, 0xB0 |
.byte 0xCD, 0x26, 0x93, 0xDE, 0xE9, 0x9D, 0xBA, 0x0B, 0xAA, 0xF9, 0x50, 0x91, 0x4E, 0x2C, 0x1B, 0xDE |
.byte 0xD9, 0xBE, 0x27, 0x53, 0x14, 0x13, 0xA4, 0xD1, 0x8B, 0x72, 0x68, 0x4C, 0x77, 0x80, 0x27, 0x52 |
.byte 0xBC, 0x50, 0xD3, 0xF5, 0xDF, 0xB9, 0x4C, 0xF1, 0x20, 0x10, 0xC8, 0x86, 0x9C, 0xF4, 0x12, 0xE0 |
.byte 0xA7, 0x52, 0x1A, 0x81, 0x3A, 0x4A, 0xEB, 0x8D, 0xA9, 0x1D, 0x7E, 0x61, 0x7F, 0xCB, 0x82, 0x61 |
.byte 0xB0, 0x88, 0x9B, 0x65, 0x01, 0xB5, 0x19, 0x9F, 0xDC, 0x7D, 0xBF, 0x7F, 0x61, 0xC9, 0x8D, 0x5B |
.byte 0xF4, 0xA1, 0x2D, 0x5F, 0x21, 0xBE, 0xF3, 0x9C, 0x07, 0x54, 0x0E, 0xA3, 0x21, 0xD8, 0xDD, 0x98 |
.byte 0xB8, 0xDA, 0x03, 0x20, 0xB5, 0x9D, 0x37, 0x10, 0x2B, 0x9F, 0x57, 0x51, 0x5E, 0xA9, 0xCD, 0xCE |
.byte 0x86, 0x9C, 0xCC, 0xE6, 0x25, 0xA1, 0x67, 0x40, 0x22, 0xDA, 0x10, 0x6D, 0x92, 0x4D, 0x8C, 0x39 |
.byte 0x4F, 0x1C, 0xCE, 0x22, 0x48, 0xC9, 0xE5, 0xCA, 0xBE, 0x9D, 0x5C, 0xDB, 0x3A, 0xDD, 0x3A, 0x3F |
.byte 0x8A, 0xFC, 0x0D, 0x14, 0x86, 0x6D, 0x18, 0x42, 0xE4, 0x3B, 0x25, 0x20, 0xEE, 0x14, 0x0C, 0x0F |
.byte 0x56, 0xEA, 0x66, 0x6E, 0xF2, 0xD6, 0x88, 0xD7, 0xB1, 0x65, 0x42, 0x01, 0x86, 0xF4, 0x66, 0x3D |
.byte 0x95, 0x41, 0xAF, 0xF1, 0x6F, 0xE3, 0x01, 0xF0, 0x99, 0xC9, 0x93, 0x24, 0x38, 0x62, 0x01, 0x6A |
.byte 0x15, 0xA8, 0xDA, 0x10, 0xCF, 0xA9, 0xB1, 0xCD, 0x87, 0xAF, 0x24, 0xB0, 0xBA, 0xC7, 0x07, 0xDE |
.byte 0xA4, 0xB4, 0x15, 0x8D, 0xF2, 0x0F, 0x46, 0x25, 0xFB, 0x9E, 0x4A, 0xEC, 0x5E, 0xB1, 0x37, 0x27 |
.byte 0x3D, 0x85, 0xE6, 0x1B, 0xE7, 0x71, 0x14, 0xC8, 0x2B, 0xF9, 0xC6, 0xDE, 0x35, 0x74, 0x00, 0xC0 |
.byte 0x1D, 0x67, 0x4F, 0xFE, 0x09, 0x40, 0x30, 0x3F, 0x27, 0x9E, 0xE2, 0xF0, 0x32, 0xC7, 0xA5, 0xA8 |
.byte 0xE8, 0x74, 0xEB, 0xAA, 0x26, 0xA2, 0x91, 0x6C, 0xF1, 0x8A, 0x94, 0x89, 0x41, 0x65, 0x59, 0x09 |
.byte 0xCB, 0x32, 0x11, 0x63, 0x97, 0x12, 0x32, 0x27, 0xA4, 0x74, 0x9A, 0xB2, 0x70, 0xAF, 0x65, 0xD5 |
.byte 0x97, 0x33, 0xF3, 0xE0, 0x64, 0xFC, 0x2F, 0xE5, 0x93, 0x71, 0xA0, 0xB5, 0x0C, 0x49, 0x42, 0x68 |
.byte 0xE5, 0xB5, 0xBA, 0xE5, 0x64, 0x65, 0xE7, 0x4F, 0x63, 0x92, 0x5A, 0xBB, 0xBE, 0xBC, 0xBD, 0x23 |
.byte 0x33, 0x45, 0xAE, 0xE9, 0x5E, 0x84, 0x1C, 0xE8, 0x33, 0x84, 0xA7, 0x70, 0xB0, 0x17, 0x14, 0x13 |
.byte 0x07, 0x5A, 0x4E, 0xB2, 0x24, 0x65, 0x11, 0xAC, 0xB9, 0x32, 0xB1, 0x9D, 0xA7, 0x8B, 0x19, 0x8B |
.byte 0x0C, 0xF9, 0x76, 0xF8, 0xBA, 0x87, 0xAE, 0xB1, 0x5F, 0x63, 0x0C, 0xCF, 0x2B, 0x0F, 0x4F, 0xC8 |
.byte 0x36, 0x52, 0x7C, 0x02, 0x70, 0x82, 0x9B, 0xC2, 0x66, 0x59, 0xD7, 0xF1, 0x9F, 0xFF, 0x0D, 0x90 |
.byte 0xDD, 0x63, 0x4E, 0x48, 0x06, 0x9C, 0x64, 0x04, 0x07, 0x74, 0xDB, 0xEF, 0x66, 0xBA, 0x9C, 0xCE |
.byte 0xE0, 0x95, 0x98, 0x14, 0xCB, 0x76, 0x97, 0x96, 0x91, 0xD0, 0xAC, 0x57, 0x02, 0x44, 0x57, 0x3B |
.byte 0xC5, 0x5F, 0xDE, 0x1D, 0xB9, 0xA1, 0xE4, 0x2E, 0x89, 0xE6, 0xC7, 0xF7, 0x32, 0xE6, 0xCC, 0xF4 |
.byte 0xD9, 0xE3, 0xA0, 0x2F, 0x9D, 0x43, 0x40, 0xBB, 0xC9, 0x2B, 0xB6, 0x7B, 0x14, 0xCE, 0xDA, 0x1F |
.byte 0x4E, 0x92, 0x79, 0xC3, 0x31, 0xBA, 0xFE, 0x03, 0xA5, 0xB1, 0x2C, 0x12, 0x46, 0xAD, 0xD6, 0x8E |
.byte 0x5F, 0xC7, 0x3B, 0xA3, 0x3B, 0x34, 0xF8, 0x48, 0x05, 0xC4, 0x26, 0x0C, 0x02, 0x59, 0xA4, 0x57 |
.byte 0x6A, 0x6A, 0x17, 0x8B, 0xB3, 0x56, 0xA8, 0xE0, 0x89, 0x91, 0x0D, 0x77, 0x42, 0x6D, 0xDD, 0x7C |
.byte 0x16, 0x90, 0xB5, 0xC7, 0xDD, 0xD9, 0x4B, 0xDD, 0xA5, 0xBF, 0xD4, 0xC3, 0xDF, 0xE8, 0xE9, 0x85 |
.byte 0x70, 0x1B, 0x5A, 0xD2, 0x6D, 0x2B, 0x00, 0xA8, 0xC6, 0x10, 0x16, 0x62, 0xAF, 0xCE, 0x27, 0x24 |
.byte 0x0C, 0x58, 0x04, 0xFA, 0xA5, 0x0D, 0xEA, 0xA3, 0x6E, 0x05, 0x3E, 0x64, 0xA7, 0xC8, 0x05, 0xD3 |
.byte 0x23, 0xA2, 0x8C, 0xFB, 0x76, 0x36, 0x4C, 0xC8, 0x57, 0x7B, 0x9B, 0x1A, 0xFC, 0xC1, 0x26, 0x74 |
.byte 0xB6, 0xFF, 0xC6, 0xA4, 0x9F, 0xF2, 0xB0, 0x4A, 0x91, 0x4A, 0x8C, 0xB6, 0x3F, 0x8B, 0x7E, 0xF3 |
.byte 0xAB, 0xC3, 0x9F, 0x72, 0xCC, 0xBE, 0xFD, 0x34, 0xA1, 0xE8, 0x97, 0xEB, 0x81, 0x7D, 0x73, 0xE3 |
.byte 0xF0, 0x2E, 0x40, 0x33, 0xBB, 0xF0, 0xA0, 0x0A, 0xA4, 0x08, 0x8E, 0x8B, 0x72, 0x0F, 0xFE, 0x20 |
.byte 0x99, 0x0C, 0x2C, 0xA9, 0x55, 0x50, 0xA7, 0x69, 0x6D, 0x38, 0xAD, 0x2A, 0x7F, 0x81, 0xCD, 0x6F |
.byte 0x01, 0x56, 0x60, 0x20, 0xD3, 0xBB, 0xE4, 0xA4, 0xA6, 0x83, 0xBB, 0xBC, 0xF5, 0x77, 0x5C, 0x1C |
.byte 0xE7, 0xD2, 0x74, 0x1B, 0xDE, 0xC2, 0x0A, 0x6A, 0xEF, 0x11, 0x2A, 0x36, 0x1D, 0x97, 0x1E, 0x9E |
.byte 0x94, 0xB0, 0xBB, 0xEA, 0xAB, 0x4C, 0xCF, 0x60, 0xFF, 0xC5, 0x34, 0x2B, 0x63, 0x2E, 0x94, 0x32 |
.byte 0xF5, 0x30, 0x61, 0x4D, 0x1E, 0x32, 0x0B, 0xC5, 0xC2, 0xE1, 0x00, 0x72, 0x6D, 0xCD, 0x76, 0x7E |
.byte 0xBF, 0x3D, 0x8F, 0x17, 0xEC, 0xE4, 0xDB, 0x0F, 0x7D, 0xA1, 0xBF, 0xC1, 0x41, 0xE8, 0xCA, 0x33 |
.byte 0x8D, 0x0D, 0x85, 0xCA, 0xB4, 0x06, 0xBB, 0x8D, 0xEA, 0xE0, 0xCC, 0x4E, 0x65, 0x7B, 0x0D, 0xA6 |
.byte 0x00, 0xC4, 0xC1, 0x38, 0x27, 0x0E, 0xAB, 0x08, 0x58, 0xB2, 0xCC, 0x6F, 0xFB, 0xA2, 0x4B, 0x7A |
.byte 0xDF, 0x14, 0x19, 0x24, 0x24, 0xEB, 0x4F, 0x5F, 0xD0, 0x0B, 0xD0, 0x3D, 0xE5, 0x41, 0x44, 0x35 |
.byte 0x3A, 0xD8, 0xDF, 0xE3, 0xD8, 0x9B, 0x0A, 0x2C, 0x2F, 0x5B, 0x73, 0x2F, 0xE4, 0x9F, 0x8B, 0xE9 |
/* |
* Coroutine switching test |
* |
* There are two coroutines in this test. The main coroutine calculates |
* CRC32 of the 1024-byte data block. The secondary coroutine simulates |
* a linear-feedback shift register (LFSR) with a polynom 1+x^6+x^7. |
* It is invoked by the timer interrupt. |
*/ |
|
lc r100, 0x10000000 // test result output pointer |
lc r101, halt |
lc r102, failure |
lc r103, 0x20000000 // timer: number of pulses (0xFFFFFFFF - infinite) |
lc r104, 0x20000004 // timer: delay between pulses (in cycles) |
|
// Set up secondary routine (invoked by timer) |
mov r200, 127 // initial value |
lc r201, 250 // counter (number of LFSR iterations) |
mov r204, 0 // result |
lc r210, 0x10000008 // secondary routine output pointer |
|
lc iv0, timer_handler |
mov cr, 1 // enable interrupt 0 |
|
sw r104, 100 |
lc r0, 0xFFFFFFFF |
sw r103, r0 // activate timer, unlimited pulses |
|
// Main routine |
lc r16, 0x10000004 // output pointer |
lc r17, 0xFFFFFFFF // initial CRC value |
lc r18, 0xEDB88320 // polynom |
lc r19, data // input pointer |
lc r20, 256 // data block size in words |
|
lc r32, word_loop |
lc r33, bit_loop |
lc r34, dont_xor |
|
mov r64, 0 // word counter |
|
word_loop: |
lw r0, r19 |
mov r65, 0 // bit counter |
|
bit_loop: |
and r1, r0, 1 |
and r2, r17, 1 |
sru r17, r17, 1 |
xor r3, r1, r2 |
cjmpe r34, r3, 0 // dont_xor |
xor r17, r17, r18 |
|
dont_xor: |
sru r0, r0, 1 |
add r65, r65, 1 |
cjmpul r33, r65, 32 // bit_loop |
|
sw r16, r17 |
add r19, r19, 4 |
add r64, r64, 1 |
cjmpul r32, r64, r20 // word_loop |
|
not r17, r17 |
sw r16, r17 |
|
// Check main routine result |
lc r0, 0x501860E6 |
cjmpne r102, r0, r17 |
|
// Wait until secondary routine finishes its job |
lc r0, wait_secondary |
|
wait_secondary: |
cjmpe r0, r204, 0 |
|
// Check secondary routine result |
cjmpne r102, r204, 0x57 |
|
sw r103, 0 // deactivate timer |
|
sw r100, 1 |
jmp r101 |
|
failure: |
sw r100, 2 |
|
halt: |
hlt |
jmp r101 |
|
timer_handler: |
sru r202, r200, 5 |
sru r203, r200, 6 |
xor r202, r202, r203 |
and r202, r202, 1 |
sl r200, r200, 1 |
or r200, r200, r202 |
and r200, r200, 0x7f |
sub r201, r201, 1 |
cjmpug irp, r201, 0 // exit interrupt handler if r201>0 |
mov r204, r200 |
sw r210, r204 |
mov cr, 0 // disable further interrupts |
iret |
|
.align |
data: |
.byte 0x00, 0x90, 0x31, 0xCF, 0x95, 0x7A, 0x59, 0xE5, 0xD2, 0xBF, 0x2C, 0xDB, 0xB5, 0x83, 0x4D, 0x03 |
.byte 0x17, 0x5D, 0x25, 0x2A, 0xFD, 0x72, 0x1E, 0x01, 0x02, 0x60, 0x88, 0x92, 0x9A, 0x9B, 0x2A, 0xA9 |
.byte 0x73, 0x5A, 0x0E, 0x9B, 0xC8, 0xCD, 0x85, 0x4D, 0xE0, 0xBA, 0xF4, 0xEC, 0x8A, 0x24, 0x76, 0x3C |
.byte 0xDC, 0x35, 0xC7, 0xD7, 0xFF, 0xFF, 0x9C, 0x64, 0x44, 0x4C, 0xD7, 0x06, 0x60, 0x17, 0xAD, 0x0E |
.byte 0x02, 0xEB, 0x46, 0x45, 0x96, 0xB0, 0xD6, 0xB9, 0x7C, 0x34, 0xBE, 0x77, 0x75, 0xF2, 0xBE, 0x1B |
.byte 0x99, 0x62, 0xBC, 0x9B, 0x92, 0x5C, 0x26, 0x39, 0x6C, 0xCD, 0x84, 0xFD, 0xC0, 0x58, 0x2B, 0xA8 |
.byte 0x7D, 0x10, 0xB3, 0x81, 0x25, 0xF3, 0x24, 0xE7, 0xB1, 0x4D, 0x6D, 0x12, 0xF7, 0xAE, 0x27, 0xE0 |
.byte 0xD2, 0x95, 0x30, 0x2D, 0xD1, 0x79, 0x27, 0x81, 0xBB, 0x67, 0x47, 0x91, 0xAE, 0xC1, 0xB8, 0x79 |
.byte 0x1F, 0x5E, 0xD5, 0x08, 0x84, 0xA9, 0x6D, 0x1A, 0xF3, 0xEB, 0x8C, 0x58, 0x78, 0x5F, 0xD8, 0x51 |
.byte 0x74, 0x45, 0xFB, 0x4C, 0xBD, 0x91, 0x32, 0xC2, 0xD6, 0x65, 0x80, 0xE3, 0x07, 0xFE, 0x92, 0x0C |
.byte 0x88, 0x31, 0xD7, 0xA0, 0xA8, 0x32, 0xD7, 0x1F, 0x1C, 0xBE, 0x50, 0xF0, 0x49, 0x56, 0x23, 0xBB |
.byte 0xD5, 0xB5, 0x99, 0xBF, 0x40, 0x24, 0x00, 0x0F, 0xCE, 0xDA, 0x35, 0x1D, 0x8D, 0x03, 0x1D, 0x74 |
.byte 0xC0, 0xAF, 0x8B, 0x12, 0x6F, 0x33, 0xB2, 0x4A, 0x6F, 0x3B, 0x93, 0x88, 0xA0, 0x29, 0x81, 0xF6 |
.byte 0xB2, 0xEC, 0x30, 0x56, 0x2D, 0xFE, 0x75, 0xFF, 0x18, 0xA0, 0x18, 0x70, 0xEE, 0x0C, 0xE5, 0x4A |
.byte 0x3A, 0xC4, 0x69, 0x33, 0xA0, 0x9A, 0x73, 0x77, 0x99, 0xA2, 0xDA, 0xD4, 0x9F, 0xB8, 0x90, 0x60 |
.byte 0x2F, 0xBC, 0x8E, 0xE7, 0x3E, 0x30, 0x9A, 0xB2, 0x95, 0x59, 0x7E, 0x14, 0xBD, 0x9C, 0x9E, 0xB0 |
.byte 0xCD, 0x26, 0x93, 0xDE, 0xE9, 0x9D, 0xBA, 0x0B, 0xAA, 0xF9, 0x50, 0x91, 0x4E, 0x2C, 0x1B, 0xDE |
.byte 0xD9, 0xBE, 0x27, 0x53, 0x14, 0x13, 0xA4, 0xD1, 0x8B, 0x72, 0x68, 0x4C, 0x77, 0x80, 0x27, 0x52 |
.byte 0xBC, 0x50, 0xD3, 0xF5, 0xDF, 0xB9, 0x4C, 0xF1, 0x20, 0x10, 0xC8, 0x86, 0x9C, 0xF4, 0x12, 0xE0 |
.byte 0xA7, 0x52, 0x1A, 0x81, 0x3A, 0x4A, 0xEB, 0x8D, 0xA9, 0x1D, 0x7E, 0x61, 0x7F, 0xCB, 0x82, 0x61 |
.byte 0xB0, 0x88, 0x9B, 0x65, 0x01, 0xB5, 0x19, 0x9F, 0xDC, 0x7D, 0xBF, 0x7F, 0x61, 0xC9, 0x8D, 0x5B |
.byte 0xF4, 0xA1, 0x2D, 0x5F, 0x21, 0xBE, 0xF3, 0x9C, 0x07, 0x54, 0x0E, 0xA3, 0x21, 0xD8, 0xDD, 0x98 |
.byte 0xB8, 0xDA, 0x03, 0x20, 0xB5, 0x9D, 0x37, 0x10, 0x2B, 0x9F, 0x57, 0x51, 0x5E, 0xA9, 0xCD, 0xCE |
.byte 0x86, 0x9C, 0xCC, 0xE6, 0x25, 0xA1, 0x67, 0x40, 0x22, 0xDA, 0x10, 0x6D, 0x92, 0x4D, 0x8C, 0x39 |
.byte 0x4F, 0x1C, 0xCE, 0x22, 0x48, 0xC9, 0xE5, 0xCA, 0xBE, 0x9D, 0x5C, 0xDB, 0x3A, 0xDD, 0x3A, 0x3F |
.byte 0x8A, 0xFC, 0x0D, 0x14, 0x86, 0x6D, 0x18, 0x42, 0xE4, 0x3B, 0x25, 0x20, 0xEE, 0x14, 0x0C, 0x0F |
.byte 0x56, 0xEA, 0x66, 0x6E, 0xF2, 0xD6, 0x88, 0xD7, 0xB1, 0x65, 0x42, 0x01, 0x86, 0xF4, 0x66, 0x3D |
.byte 0x95, 0x41, 0xAF, 0xF1, 0x6F, 0xE3, 0x01, 0xF0, 0x99, 0xC9, 0x93, 0x24, 0x38, 0x62, 0x01, 0x6A |
.byte 0x15, 0xA8, 0xDA, 0x10, 0xCF, 0xA9, 0xB1, 0xCD, 0x87, 0xAF, 0x24, 0xB0, 0xBA, 0xC7, 0x07, 0xDE |
.byte 0xA4, 0xB4, 0x15, 0x8D, 0xF2, 0x0F, 0x46, 0x25, 0xFB, 0x9E, 0x4A, 0xEC, 0x5E, 0xB1, 0x37, 0x27 |
.byte 0x3D, 0x85, 0xE6, 0x1B, 0xE7, 0x71, 0x14, 0xC8, 0x2B, 0xF9, 0xC6, 0xDE, 0x35, 0x74, 0x00, 0xC0 |
.byte 0x1D, 0x67, 0x4F, 0xFE, 0x09, 0x40, 0x30, 0x3F, 0x27, 0x9E, 0xE2, 0xF0, 0x32, 0xC7, 0xA5, 0xA8 |
.byte 0xE8, 0x74, 0xEB, 0xAA, 0x26, 0xA2, 0x91, 0x6C, 0xF1, 0x8A, 0x94, 0x89, 0x41, 0x65, 0x59, 0x09 |
.byte 0xCB, 0x32, 0x11, 0x63, 0x97, 0x12, 0x32, 0x27, 0xA4, 0x74, 0x9A, 0xB2, 0x70, 0xAF, 0x65, 0xD5 |
.byte 0x97, 0x33, 0xF3, 0xE0, 0x64, 0xFC, 0x2F, 0xE5, 0x93, 0x71, 0xA0, 0xB5, 0x0C, 0x49, 0x42, 0x68 |
.byte 0xE5, 0xB5, 0xBA, 0xE5, 0x64, 0x65, 0xE7, 0x4F, 0x63, 0x92, 0x5A, 0xBB, 0xBE, 0xBC, 0xBD, 0x23 |
.byte 0x33, 0x45, 0xAE, 0xE9, 0x5E, 0x84, 0x1C, 0xE8, 0x33, 0x84, 0xA7, 0x70, 0xB0, 0x17, 0x14, 0x13 |
.byte 0x07, 0x5A, 0x4E, 0xB2, 0x24, 0x65, 0x11, 0xAC, 0xB9, 0x32, 0xB1, 0x9D, 0xA7, 0x8B, 0x19, 0x8B |
.byte 0x0C, 0xF9, 0x76, 0xF8, 0xBA, 0x87, 0xAE, 0xB1, 0x5F, 0x63, 0x0C, 0xCF, 0x2B, 0x0F, 0x4F, 0xC8 |
.byte 0x36, 0x52, 0x7C, 0x02, 0x70, 0x82, 0x9B, 0xC2, 0x66, 0x59, 0xD7, 0xF1, 0x9F, 0xFF, 0x0D, 0x90 |
.byte 0xDD, 0x63, 0x4E, 0x48, 0x06, 0x9C, 0x64, 0x04, 0x07, 0x74, 0xDB, 0xEF, 0x66, 0xBA, 0x9C, 0xCE |
.byte 0xE0, 0x95, 0x98, 0x14, 0xCB, 0x76, 0x97, 0x96, 0x91, 0xD0, 0xAC, 0x57, 0x02, 0x44, 0x57, 0x3B |
.byte 0xC5, 0x5F, 0xDE, 0x1D, 0xB9, 0xA1, 0xE4, 0x2E, 0x89, 0xE6, 0xC7, 0xF7, 0x32, 0xE6, 0xCC, 0xF4 |
.byte 0xD9, 0xE3, 0xA0, 0x2F, 0x9D, 0x43, 0x40, 0xBB, 0xC9, 0x2B, 0xB6, 0x7B, 0x14, 0xCE, 0xDA, 0x1F |
.byte 0x4E, 0x92, 0x79, 0xC3, 0x31, 0xBA, 0xFE, 0x03, 0xA5, 0xB1, 0x2C, 0x12, 0x46, 0xAD, 0xD6, 0x8E |
.byte 0x5F, 0xC7, 0x3B, 0xA3, 0x3B, 0x34, 0xF8, 0x48, 0x05, 0xC4, 0x26, 0x0C, 0x02, 0x59, 0xA4, 0x57 |
.byte 0x6A, 0x6A, 0x17, 0x8B, 0xB3, 0x56, 0xA8, 0xE0, 0x89, 0x91, 0x0D, 0x77, 0x42, 0x6D, 0xDD, 0x7C |
.byte 0x16, 0x90, 0xB5, 0xC7, 0xDD, 0xD9, 0x4B, 0xDD, 0xA5, 0xBF, 0xD4, 0xC3, 0xDF, 0xE8, 0xE9, 0x85 |
.byte 0x70, 0x1B, 0x5A, 0xD2, 0x6D, 0x2B, 0x00, 0xA8, 0xC6, 0x10, 0x16, 0x62, 0xAF, 0xCE, 0x27, 0x24 |
.byte 0x0C, 0x58, 0x04, 0xFA, 0xA5, 0x0D, 0xEA, 0xA3, 0x6E, 0x05, 0x3E, 0x64, 0xA7, 0xC8, 0x05, 0xD3 |
.byte 0x23, 0xA2, 0x8C, 0xFB, 0x76, 0x36, 0x4C, 0xC8, 0x57, 0x7B, 0x9B, 0x1A, 0xFC, 0xC1, 0x26, 0x74 |
.byte 0xB6, 0xFF, 0xC6, 0xA4, 0x9F, 0xF2, 0xB0, 0x4A, 0x91, 0x4A, 0x8C, 0xB6, 0x3F, 0x8B, 0x7E, 0xF3 |
.byte 0xAB, 0xC3, 0x9F, 0x72, 0xCC, 0xBE, 0xFD, 0x34, 0xA1, 0xE8, 0x97, 0xEB, 0x81, 0x7D, 0x73, 0xE3 |
.byte 0xF0, 0x2E, 0x40, 0x33, 0xBB, 0xF0, 0xA0, 0x0A, 0xA4, 0x08, 0x8E, 0x8B, 0x72, 0x0F, 0xFE, 0x20 |
.byte 0x99, 0x0C, 0x2C, 0xA9, 0x55, 0x50, 0xA7, 0x69, 0x6D, 0x38, 0xAD, 0x2A, 0x7F, 0x81, 0xCD, 0x6F |
.byte 0x01, 0x56, 0x60, 0x20, 0xD3, 0xBB, 0xE4, 0xA4, 0xA6, 0x83, 0xBB, 0xBC, 0xF5, 0x77, 0x5C, 0x1C |
.byte 0xE7, 0xD2, 0x74, 0x1B, 0xDE, 0xC2, 0x0A, 0x6A, 0xEF, 0x11, 0x2A, 0x36, 0x1D, 0x97, 0x1E, 0x9E |
.byte 0x94, 0xB0, 0xBB, 0xEA, 0xAB, 0x4C, 0xCF, 0x60, 0xFF, 0xC5, 0x34, 0x2B, 0x63, 0x2E, 0x94, 0x32 |
.byte 0xF5, 0x30, 0x61, 0x4D, 0x1E, 0x32, 0x0B, 0xC5, 0xC2, 0xE1, 0x00, 0x72, 0x6D, 0xCD, 0x76, 0x7E |
.byte 0xBF, 0x3D, 0x8F, 0x17, 0xEC, 0xE4, 0xDB, 0x0F, 0x7D, 0xA1, 0xBF, 0xC1, 0x41, 0xE8, 0xCA, 0x33 |
.byte 0x8D, 0x0D, 0x85, 0xCA, 0xB4, 0x06, 0xBB, 0x8D, 0xEA, 0xE0, 0xCC, 0x4E, 0x65, 0x7B, 0x0D, 0xA6 |
.byte 0x00, 0xC4, 0xC1, 0x38, 0x27, 0x0E, 0xAB, 0x08, 0x58, 0xB2, 0xCC, 0x6F, 0xFB, 0xA2, 0x4B, 0x7A |
.byte 0xDF, 0x14, 0x19, 0x24, 0x24, 0xEB, 0x4F, 0x5F, 0xD0, 0x0B, 0xD0, 0x3D, 0xE5, 0x41, 0x44, 0x35 |
.byte 0x3A, 0xD8, 0xDF, 0xE3, 0xD8, 0x9B, 0x0A, 0x2C, 0x2F, 0x5B, 0x73, 0x2F, 0xE4, 0x9F, 0x8B, 0xE9 |
/firmware/test012.asm
1,373 → 1,373
/* |
* Test multiplication |
*/ |
|
lc r100, 0x10000000 // test result output pointer |
lc r101, halt |
lc r102, failure |
lc r103, 0x10000004 |
|
// Check multiplication table |
|
lc r32, op1 |
lc r33, op2 |
lc r34, product |
|
lc r35, loop |
mov r10, 100 |
|
loop: |
lw r0, r32 |
lw r1, r33 |
mul r3, r0, r1 |
lw r2, r34 |
cjmpne r102, r2, r3 // failure |
add r32, r32, 4 |
add r33, r33, 4 |
add r34, r34, 4 |
sub r10, r10, 1 |
cjmpug r35, r10, 0 // loop |
|
// Simulate a linear congruent random number generator |
// as described in ISO/IEC 9899:1999 ("C99" standard) |
|
mov r64, 1 // initial value |
lc r65, 1103515245 // multiplier |
lc r66, 12345 // addition constant |
lc r67, 32767 // mask |
|
mov r10, 100 |
lc r32, rand |
lc r35, rnd_loop |
|
rnd_loop: |
call r32 // rand |
sw r103, r0 |
sub r10, r10, 1 |
cjmpug r35, r10, 0 // rnd_loop |
|
lc r1, 26521 |
cjmpne r102, r0, r1 // failure |
|
sw r100, 1 |
jmp r101 // halt |
|
failure: |
sw r100, 2 |
|
halt: |
hlt |
jmp r101 // halt |
|
rand: |
mul r64, r64, r65 |
add r64, r64, r66 |
sru r0, r64, 16 |
and r0, r0, r67 |
ret |
|
op1: |
.word 5 |
.word 1021028019 |
.word 3360494259 |
.word 4241216605 |
.word 3998259744 |
.word 4061417389 |
.word 2643534582 |
.word 3313401900 |
.word 2127959231 |
.word 517066081 |
.word 971560706 |
.word 2765397972 |
.word 1972360008 |
.word 5267214 |
.word 3667030040 |
.word 3641602966 |
.word 297473786 |
.word 3637724660 |
.word 3268423030 |
.word 2775202737 |
.word 2509905173 |
.word 3885678420 |
.word 820072030 |
.word 1177172069 |
.word 1047341530 |
.word 1826819693 |
.word 1694831631 |
.word 4270696691 |
.word 1299413127 |
.word 2817552511 |
.word 2675818186 |
.word 231984537 |
.word 65817694 |
.word 3640600522 |
.word 545754317 |
.word 2973624217 |
.word 2669208735 |
.word 1079210895 |
.word 660979290 |
.word 738800690 |
.word 1631093128 |
.word 489263629 |
.word 4116157872 |
.word 3178886821 |
.word 2324324955 |
.word 2982397572 |
.word 3365621776 |
.word 2764926001 |
.word 1498466135 |
.word 1012944436 |
.word -246837166 |
.word 470638116 |
.word 2103051039 |
.word 176753939 |
.word -164476654 |
.word -1221540757 |
.word 43633328 |
.word -859182414 |
.word 1230499715 |
.word -266475918 |
.word 1949507090 |
.word -856415694 |
.word 737657061 |
.word 118818171 |
.word 359218821 |
.word 1246427092 |
.word -615317895 |
.word 1029267653 |
.word 628714057 |
.word -2029278762 |
.word -1700206210 |
.word -785893232 |
.word -492445025 |
.word -1032292742 |
.word -1506164940 |
.word 63097629 |
.word -1909659707 |
.word 1003528447 |
.word 1095156443 |
.word 325606314 |
.word 1750055165 |
.word 861103782 |
.word -1441910348 |
.word 1113139065 |
.word -1337158265 |
.word -381613907 |
.word 567364862 |
.word -808095798 |
.word -1503281503 |
.word -1646541226 |
.word -405777159 |
.word -98798373 |
.word -1948683123 |
.word -1889476128 |
.word 994740197 |
.word 57636334 |
.word -1628834166 |
.word -15689588 |
.word 1568614403 |
.word 722317890 |
|
op2: |
.word 3 |
.word 2570980487 |
.word 2794175299 |
.word 994440598 |
.word 4248205376 |
.word 3496362052 |
.word 3659500513 |
.word 2162808217 |
.word 1720638509 |
.word 1914084509 |
.word 3385545516 |
.word 3476389465 |
.word 706599398 |
.word 3196936660 |
.word 2983089252 |
.word 1751592726 |
.word 2284105389 |
.word 4111191592 |
.word 3563638217 |
.word 2361468945 |
.word 3236010945 |
.word 1439769561 |
.word 1910111900 |
.word 2038606217 |
.word 311877730 |
.word 538878248 |
.word 3378587675 |
.word 1911288510 |
.word 3196239568 |
.word 2503116372 |
.word 457280137 |
.word 3023717616 |
.word 98988876 |
.word 4098692253 |
.word 2797102115 |
.word 2159140448 |
.word 637551125 |
.word 2125433411 |
.word 2902980138 |
.word 395247949 |
.word 1645373547 |
.word 1922640262 |
.word 1835827423 |
.word 3088444407 |
.word 4150011791 |
.word 273297575 |
.word 673792897 |
.word 2743197342 |
.word 656195007 |
.word 2550324965 |
.word -337003535 |
.word -565725434 |
.word 522532873 |
.word 850320156 |
.word -599163490 |
.word 580991794 |
.word 1235055289 |
.word -697843885 |
.word -1888878751 |
.word 2001358724 |
.word -705426274 |
.word 764466127 |
.word 1149731192 |
.word 528626491 |
.word 74073848 |
.word 1986549712 |
.word 1021657893 |
.word 1502226327 |
.word 339763464 |
.word -248542057 |
.word -1245542745 |
.word 1721855193 |
.word 1203018508 |
.word -551112349 |
.word -245462721 |
.word -2079899329 |
.word -603441594 |
.word 2123105909 |
.word 821726251 |
.word -167975413 |
.word 343634678 |
.word 279038731 |
.word -1328164947 |
.word -121529220 |
.word 760122714 |
.word -710590105 |
.word -1288727804 |
.word -829054509 |
.word 1774242228 |
.word 198747848 |
.word 2017990513 |
.word -1246218417 |
.word 135357763 |
.word -193250194 |
.word 1080138546 |
.word -278225361 |
.word 1216454983 |
.word -808631398 |
.word 1236885385 |
.word -1142156106 |
|
product: |
.word 15 |
.word 3187625061 |
.word 4060456409 |
.word 3720114046 |
.word 2133166080 |
.word 2956880372 |
.word 39144502 |
.word 4048238156 |
.word 3781675411 |
.word 2552762493 |
.word 2186320472 |
.word 2004478132 |
.word 1215814320 |
.word 1967719832 |
.word 961259872 |
.word 3218110692 |
.word 808743666 |
.word 1758021152 |
.word 3653971878 |
.word 1641193153 |
.word 1749066709 |
.word 2447944244 |
.word 1085998408 |
.word 3424443149 |
.word 1143260532 |
.word 542297608 |
.word 3545920917 |
.word 820648538 |
.word 131342256 |
.word 3650446252 |
.word 3798859290 |
.word 1641505648 |
.word 3270043112 |
.word 2203660002 |
.word 2262848519 |
.word 3335948128 |
.word 301711115 |
.word 853759085 |
.word 1108457156 |
.word 3991332106 |
.word 3268240344 |
.word 4293625806 |
.word 2556650576 |
.word 2577362995 |
.word 2650590677 |
.word 1310146588 |
.word 247957520 |
.word 2454471742 |
.word 1425274089 |
.word 39783556 |
.word -2091990222 |
.word -1969753896 |
.word 1297343511 |
.word -32067820 |
.word -824646884 |
.word -1038744090 |
.word -615130832 |
.word 1160766902 |
.word -878690909 |
.word -1535377208 |
.word -1071814884 |
.word -139010962 |
.word 18403416 |
.word 2137375833 |
.word 2082402008 |
.word 1027762240 |
.word 1775596157 |
.word 1957173043 |
.word 1934687048 |
.word -1391708870 |
.word 1441023282 |
.word 897888784 |
.word -2134317964 |
.word 1520184110 |
.word -123674164 |
.word -464692957 |
.word -481104418 |
.word -946631029 |
.word 55606985 |
.word -2060538802 |
.word 1653304606 |
.word 1163987746 |
.word -2138299740 |
.word 1903549084 |
.word 1936321654 |
.word -455120229 |
.word 1931283960 |
.word 617295230 |
.word -470388172 |
.word -522275024 |
.word -1465917207 |
.word 541793429 |
.word -1975377433 |
.word 1462865472 |
.word 1922773434 |
.word 1925941938 |
.word 1115302470 |
.word 604268600 |
.word -32471397 |
.word 948036332 |
/* |
* Test multiplication |
*/ |
|
lc r100, 0x10000000 // test result output pointer |
lc r101, halt |
lc r102, failure |
lc r103, 0x10000004 |
|
// Check multiplication table |
|
lc r32, op1 |
lc r33, op2 |
lc r34, product |
|
lc r35, loop |
mov r10, 100 |
|
loop: |
lw r0, r32 |
lw r1, r33 |
mul r3, r0, r1 |
lw r2, r34 |
cjmpne r102, r2, r3 // failure |
add r32, r32, 4 |
add r33, r33, 4 |
add r34, r34, 4 |
sub r10, r10, 1 |
cjmpug r35, r10, 0 // loop |
|
// Simulate a linear congruent random number generator |
// as described in ISO/IEC 9899:1999 ("C99" standard) |
|
mov r64, 1 // initial value |
lc r65, 1103515245 // multiplier |
lc r66, 12345 // addition constant |
lc r67, 32767 // mask |
|
mov r10, 100 |
lc r32, rand |
lc r35, rnd_loop |
|
rnd_loop: |
call r32 // rand |
sw r103, r0 |
sub r10, r10, 1 |
cjmpug r35, r10, 0 // rnd_loop |
|
lc r1, 26521 |
cjmpne r102, r0, r1 // failure |
|
sw r100, 1 |
jmp r101 // halt |
|
failure: |
sw r100, 2 |
|
halt: |
hlt |
jmp r101 // halt |
|
rand: |
mul r64, r64, r65 |
add r64, r64, r66 |
sru r0, r64, 16 |
and r0, r0, r67 |
ret |
|
op1: |
.word 5 |
.word 1021028019 |
.word 3360494259 |
.word 4241216605 |
.word 3998259744 |
.word 4061417389 |
.word 2643534582 |
.word 3313401900 |
.word 2127959231 |
.word 517066081 |
.word 971560706 |
.word 2765397972 |
.word 1972360008 |
.word 5267214 |
.word 3667030040 |
.word 3641602966 |
.word 297473786 |
.word 3637724660 |
.word 3268423030 |
.word 2775202737 |
.word 2509905173 |
.word 3885678420 |
.word 820072030 |
.word 1177172069 |
.word 1047341530 |
.word 1826819693 |
.word 1694831631 |
.word 4270696691 |
.word 1299413127 |
.word 2817552511 |
.word 2675818186 |
.word 231984537 |
.word 65817694 |
.word 3640600522 |
.word 545754317 |
.word 2973624217 |
.word 2669208735 |
.word 1079210895 |
.word 660979290 |
.word 738800690 |
.word 1631093128 |
.word 489263629 |
.word 4116157872 |
.word 3178886821 |
.word 2324324955 |
.word 2982397572 |
.word 3365621776 |
.word 2764926001 |
.word 1498466135 |
.word 1012944436 |
.word -246837166 |
.word 470638116 |
.word 2103051039 |
.word 176753939 |
.word -164476654 |
.word -1221540757 |
.word 43633328 |
.word -859182414 |
.word 1230499715 |
.word -266475918 |
.word 1949507090 |
.word -856415694 |
.word 737657061 |
.word 118818171 |
.word 359218821 |
.word 1246427092 |
.word -615317895 |
.word 1029267653 |
.word 628714057 |
.word -2029278762 |
.word -1700206210 |
.word -785893232 |
.word -492445025 |
.word -1032292742 |
.word -1506164940 |
.word 63097629 |
.word -1909659707 |
.word 1003528447 |
.word 1095156443 |
.word 325606314 |
.word 1750055165 |
.word 861103782 |
.word -1441910348 |
.word 1113139065 |
.word -1337158265 |
.word -381613907 |
.word 567364862 |
.word -808095798 |
.word -1503281503 |
.word -1646541226 |
.word -405777159 |
.word -98798373 |
.word -1948683123 |
.word -1889476128 |
.word 994740197 |
.word 57636334 |
.word -1628834166 |
.word -15689588 |
.word 1568614403 |
.word 722317890 |
|
op2: |
.word 3 |
.word 2570980487 |
.word 2794175299 |
.word 994440598 |
.word 4248205376 |
.word 3496362052 |
.word 3659500513 |
.word 2162808217 |
.word 1720638509 |
.word 1914084509 |
.word 3385545516 |
.word 3476389465 |
.word 706599398 |
.word 3196936660 |
.word 2983089252 |
.word 1751592726 |
.word 2284105389 |
.word 4111191592 |
.word 3563638217 |
.word 2361468945 |
.word 3236010945 |
.word 1439769561 |
.word 1910111900 |
.word 2038606217 |
.word 311877730 |
.word 538878248 |
.word 3378587675 |
.word 1911288510 |
.word 3196239568 |
.word 2503116372 |
.word 457280137 |
.word 3023717616 |
.word 98988876 |
.word 4098692253 |
.word 2797102115 |
.word 2159140448 |
.word 637551125 |
.word 2125433411 |
.word 2902980138 |
.word 395247949 |
.word 1645373547 |
.word 1922640262 |
.word 1835827423 |
.word 3088444407 |
.word 4150011791 |
.word 273297575 |
.word 673792897 |
.word 2743197342 |
.word 656195007 |
.word 2550324965 |
.word -337003535 |
.word -565725434 |
.word 522532873 |
.word 850320156 |
.word -599163490 |
.word 580991794 |
.word 1235055289 |
.word -697843885 |
.word -1888878751 |
.word 2001358724 |
.word -705426274 |
.word 764466127 |
.word 1149731192 |
.word 528626491 |
.word 74073848 |
.word 1986549712 |
.word 1021657893 |
.word 1502226327 |
.word 339763464 |
.word -248542057 |
.word -1245542745 |
.word 1721855193 |
.word 1203018508 |
.word -551112349 |
.word -245462721 |
.word -2079899329 |
.word -603441594 |
.word 2123105909 |
.word 821726251 |
.word -167975413 |
.word 343634678 |
.word 279038731 |
.word -1328164947 |
.word -121529220 |
.word 760122714 |
.word -710590105 |
.word -1288727804 |
.word -829054509 |
.word 1774242228 |
.word 198747848 |
.word 2017990513 |
.word -1246218417 |
.word 135357763 |
.word -193250194 |
.word 1080138546 |
.word -278225361 |
.word 1216454983 |
.word -808631398 |
.word 1236885385 |
.word -1142156106 |
|
product: |
.word 15 |
.word 3187625061 |
.word 4060456409 |
.word 3720114046 |
.word 2133166080 |
.word 2956880372 |
.word 39144502 |
.word 4048238156 |
.word 3781675411 |
.word 2552762493 |
.word 2186320472 |
.word 2004478132 |
.word 1215814320 |
.word 1967719832 |
.word 961259872 |
.word 3218110692 |
.word 808743666 |
.word 1758021152 |
.word 3653971878 |
.word 1641193153 |
.word 1749066709 |
.word 2447944244 |
.word 1085998408 |
.word 3424443149 |
.word 1143260532 |
.word 542297608 |
.word 3545920917 |
.word 820648538 |
.word 131342256 |
.word 3650446252 |
.word 3798859290 |
.word 1641505648 |
.word 3270043112 |
.word 2203660002 |
.word 2262848519 |
.word 3335948128 |
.word 301711115 |
.word 853759085 |
.word 1108457156 |
.word 3991332106 |
.word 3268240344 |
.word 4293625806 |
.word 2556650576 |
.word 2577362995 |
.word 2650590677 |
.word 1310146588 |
.word 247957520 |
.word 2454471742 |
.word 1425274089 |
.word 39783556 |
.word -2091990222 |
.word -1969753896 |
.word 1297343511 |
.word -32067820 |
.word -824646884 |
.word -1038744090 |
.word -615130832 |
.word 1160766902 |
.word -878690909 |
.word -1535377208 |
.word -1071814884 |
.word -139010962 |
.word 18403416 |
.word 2137375833 |
.word 2082402008 |
.word 1027762240 |
.word 1775596157 |
.word 1957173043 |
.word 1934687048 |
.word -1391708870 |
.word 1441023282 |
.word 897888784 |
.word -2134317964 |
.word 1520184110 |
.word -123674164 |
.word -464692957 |
.word -481104418 |
.word -946631029 |
.word 55606985 |
.word -2060538802 |
.word 1653304606 |
.word 1163987746 |
.word -2138299740 |
.word 1903549084 |
.word 1936321654 |
.word -455120229 |
.word 1931283960 |
.word 617295230 |
.word -470388172 |
.word -522275024 |
.word -1465917207 |
.word 541793429 |
.word -1975377433 |
.word 1462865472 |
.word 1922773434 |
.word 1925941938 |
.word 1115302470 |
.word 604268600 |
.word -32471397 |
.word 948036332 |
/firmware/test013.asm
1,935 → 1,935
/* |
* Test division (divu, divs, modu, mods) |
*/ |
|
lc r100, 0x10000000 // test result output pointer |
lc r101, halt |
lc r102, failure |
lc r103, 0x10000004 |
|
// Test unsigned division |
|
lc r32, op1 |
lc r33, op2 |
lc r34, quotient |
lc r35, remainder |
lc r36, cnt_loop |
lc r10, 100 // counter |
|
cnt_loop: |
lw r0, r32 |
lw r1, r33 |
divu r2, r0, r1 |
modu r3, r0, r1 |
lw r4, r34 |
lw r5, r35 |
cjmpne r102, r2, r4 // failure |
cjmpne r102, r3, r5 // failure |
mul r6, r2, r1 |
add r6, r6, r3 |
cjmpne r102, r6, r0 // failure |
add r32, r32, 4 |
add r33, r33, 4 |
add r34, r34, 4 |
add r35, r35, 4 |
sub r10, r10, 1 |
cjmpug r36, r10, 0 // cnt_loop |
|
sw r103, 1 |
|
// Test signed division |
|
lc r32, op1_signed |
lc r33, op2_signed |
lc r34, quotient_signed |
lc r35, remainder_signed |
lc r36, cnt_loop2 |
lc r10, 100 // counter |
|
cnt_loop2: |
lw r0, r32 |
lw r1, r33 |
divs r2, r0, r1 |
mods r3, r0, r1 |
lw r4, r34 |
lw r5, r35 |
cjmpne r102, r2, r4 // failure |
cjmpne r102, r3, r5 // failure |
mul r6, r2, r1 |
add r6, r6, r3 |
cjmpne r102, r6, r0 // failure |
add r32, r32, 4 |
add r33, r33, 4 |
add r34, r34, 4 |
add r35, r35, 4 |
sub r10, r10, 1 |
cjmpug r36, r10, 0 // cnt_loop2 |
|
sw r103, 2 |
|
// Random division/multiplication test |
|
mov r64, 1 // initial PRBS value |
lc r65, 1103515245 // PRBS multiplier |
lc r66, 12345 // PRBS addition constant |
lc r67, 32767 // PRBS mask |
lc r68, 16384 |
|
lc r10, 1000 |
lc r32, rnd_loop |
lc r33, rand |
lc r34, rnd_cont |
|
rnd_loop: |
call r33 // rand |
sub r1, r0, r68 // dividend in r1 |
call r33 // rand |
sub r2, r0, r68 // divisor in r2 |
cjmpne r34, r2, 0 // rnd_cont |
mov r2, 1 |
|
rnd_cont: |
divs r3, r1, r2 |
mods r4, r1, r2 |
mul r5, r3, r2 |
add r5, r5, r4 |
cjmpne r102, r5, r1 // failure |
sub r10, r10, 1 |
cjmpug r32, r10, 0 // rnd_loop |
|
sw r103, 3 |
|
sw r100, 1 |
jmp r101 // halt |
|
failure: |
sw r100, 2 |
|
halt: |
hlt |
jmp r101 // halt |
|
// Linear congruent pseudo-random number generator (as in ISO/IEC 9899:1999) |
|
rand: |
mul r64, r64, r65 |
add r64, r64, r66 |
sru r0, r64, 16 |
and r0, r0, r67 |
ret |
|
op1: |
.word 2227053353 |
.word 4059122064 |
.word 210189531 |
.word 1203176988 |
.word 2794175299 |
.word 1562322232 |
.word 219364165 |
.word 1352278066 |
.word 4130490642 |
.word 1156715599 |
.word 993179440 |
.word 529260957 |
.word 1235055289 |
.word 2994792917 |
.word 348116583 |
.word 1475314534 |
.word 517066081 |
.word 2230328806 |
.word 1395407336 |
.word 4094467700 |
.word 3476389465 |
.word 1210945747 |
.word 3236243997 |
.word 1348406852 |
.word 118818171 |
.word 1692045936 |
.word 1190663529 |
.word 1731139289 |
.word 1986549712 |
.word 2038965422 |
.word 1173634277 |
.word 1499514357 |
.word 3268423030 |
.word 136673642 |
.word 672245098 |
.word 797742983 |
.word 3236010945 |
.word 1421197958 |
.word 948983249 |
.word 3780009574 |
.word 3802522271 |
.word 2303076920 |
.word 2976105080 |
.word 2531287614 |
.word 4049504575 |
.word 488644257 |
.word 336561159 |
.word 753386953 |
.word 4270696691 |
.word 1966854304 |
.word 3201322355 |
.word 4203490113 |
.word 2503116372 |
.word 3405118694 |
.word 3103595329 |
.word 3553466644 |
.word 861103782 |
.word 1275325516 |
.word 3484264974 |
.word 1293196760 |
.word 4173438076 |
.word 2275850340 |
.word 3885575502 |
.word 1091087744 |
.word 2669208735 |
.word 69325132 |
.word 2319663187 |
.word 2510410703 |
.word 2902980138 |
.word 845791433 |
.word 3327530895 |
.word 948013067 |
.word 3889190137 |
.word 2250058130 |
.word 927988252 |
.word 1820385269 |
.word 135357763 |
.word 3770160619 |
.word 1650193531 |
.word 1250420215 |
.word 2982397572 |
.word 788754293 |
.word 1132578971 |
.word 2174830494 |
.word 2743197342 |
.word 1473236291 |
.word 671295260 |
.word 1615737929 |
.word 722317890 |
.word 1373795119 |
.word 3187744723 |
.word 353993505 |
.word 3691968907 |
.word 2452722797 |
.word 1784599952 |
.word 912987979 |
.word 2183033578 |
.word 2941180254 |
.word 3706025245 |
.word 2141225307 |
|
op2: |
.word 225 |
.word 3018582459 |
.word 6462 |
.word 222 |
.word 799 |
.word 19412 |
.word 3676048009 |
.word 16622 |
.word 32158 |
.word 64 |
.word 8865 |
.word 2580197594 |
.word 3313401900 |
.word 1405929962 |
.word 214 |
.word 24905 |
.word 1914084509 |
.word 41372239 |
.word 203 |
.word 213 |
.word 50 |
.word 3866464211 |
.word 247 |
.word 2371998720 |
.word 528626491 |
.word 2243022420 |
.word 106 |
.word 21608 |
.word 250 |
.word 635130622 |
.word 22739 |
.word 61 |
.word 3563638217 |
.word 97 |
.word 2849410241 |
.word 241 |
.word 2594761086 |
.word 191 |
.word 40 |
.word 48 |
.word 6924 |
.word 2054783657 |
.word 702209830 |
.word 968832018 |
.word 1826819693 |
.word 17099 |
.word 25861 |
.word 142 |
.word 190 |
.word 3078 |
.word 130 |
.word 32560 |
.word 170 |
.word 2308931006 |
.word 26703 |
.word 13 |
.word 19211 |
.word 115 |
.word 667594965 |
.word 1495759348 |
.word 205 |
.word 19605 |
.word 61 |
.word 2772527081 |
.word 16917 |
.word 147 |
.word 175 |
.word 206 |
.word 16033 |
.word 2356 |
.word 7643 |
.word 97 |
.word 2017990513 |
.word 41 |
.word 13752 |
.word 109 |
.word 165 |
.word 225 |
.word 2698 |
.word 12859 |
.word 12455 |
.word 158 |
.word 4136249385 |
.word 3446419784 |
.word 140 |
.word 20679 |
.word 23935 |
.word 48162108 |
.word 5302 |
.word 126 |
.word 80 |
.word 741054488 |
.word 188 |
.word 116 |
.word 64 |
.word 177 |
.word 141 |
.word 16378 |
.word 3662043152 |
.word 19292 |
|
quotient: |
.word 9898014 |
.word 1 |
.word 32527 |
.word 5419716 |
.word 3497090 |
.word 80482 |
.word 0 |
.word 81354 |
.word 128443 |
.word 18073681 |
.word 112033 |
.word 0 |
.word 0 |
.word 2 |
.word 1626713 |
.word 59237 |
.word 0 |
.word 53 |
.word 6873927 |
.word 19222853 |
.word 69527789 |
.word 0 |
.word 13102202 |
.word 0 |
.word 0 |
.word 0 |
.word 11232674 |
.word 80115 |
.word 7946198 |
.word 3 |
.word 51613 |
.word 24582202 |
.word 0 |
.word 1409006 |
.word 0 |
.word 3310136 |
.word 1 |
.word 7440827 |
.word 23724581 |
.word 78750199 |
.word 549179 |
.word 1 |
.word 4 |
.word 2 |
.word 2 |
.word 28577 |
.word 13014 |
.word 5305541 |
.word 22477351 |
.word 639003 |
.word 24625556 |
.word 129099 |
.word 14724213 |
.word 1 |
.word 116226 |
.word 273343588 |
.word 44823 |
.word 11089787 |
.word 5 |
.word 0 |
.word 20358234 |
.word 116085 |
.word 63697959 |
.word 0 |
.word 157782 |
.word 471599 |
.word 13255218 |
.word 12186459 |
.word 181062 |
.word 358994 |
.word 435369 |
.word 9773330 |
.word 1 |
.word 54879466 |
.word 67480 |
.word 16700782 |
.word 820350 |
.word 16756269 |
.word 611635 |
.word 97240 |
.word 239453 |
.word 4992115 |
.word 0 |
.word 0 |
.word 19594266 |
.word 71243 |
.word 28046 |
.word 33 |
.word 136234 |
.word 10903135 |
.word 39846809 |
.word 0 |
.word 19638132 |
.word 21144162 |
.word 27884374 |
.word 5158124 |
.word 15482507 |
.word 179581 |
.word 1 |
.word 110990 |
|
remainder: |
.word 203 |
.word 1040539605 |
.word 57 |
.word 36 |
.word 389 |
.word 5648 |
.word 219364165 |
.word 11878 |
.word 20648 |
.word 15 |
.word 6895 |
.word 529260957 |
.word 1235055289 |
.word 182932993 |
.word 1 |
.word 17049 |
.word 517066081 |
.word 37600139 |
.word 155 |
.word 11 |
.word 15 |
.word 1210945747 |
.word 103 |
.word 1348406852 |
.word 118818171 |
.word 1692045936 |
.word 85 |
.word 14369 |
.word 212 |
.word 133573556 |
.word 6270 |
.word 35 |
.word 3268423030 |
.word 60 |
.word 672245098 |
.word 207 |
.word 641249859 |
.word 1 |
.word 9 |
.word 22 |
.word 6875 |
.word 248293263 |
.word 167265760 |
.word 593623578 |
.word 395865189 |
.word 6134 |
.word 6105 |
.word 131 |
.word 1 |
.word 3070 |
.word 75 |
.word 26673 |
.word 162 |
.word 1096187688 |
.word 12451 |
.word 0 |
.word 9129 |
.word 11 |
.word 146290149 |
.word 1293196760 |
.word 106 |
.word 3915 |
.word 3 |
.word 1091087744 |
.word 10641 |
.word 79 |
.word 37 |
.word 149 |
.word 13092 |
.word 1569 |
.word 5628 |
.word 57 |
.word 1871199624 |
.word 24 |
.word 3292 |
.word 31 |
.word 13 |
.word 94 |
.word 2301 |
.word 11055 |
.word 10457 |
.word 123 |
.word 1132578971 |
.word 2174830494 |
.word 102 |
.word 2294 |
.word 14250 |
.word 26388365 |
.word 5222 |
.word 109 |
.word 3 |
.word 353993505 |
.word 91 |
.word 5 |
.word 16 |
.word 31 |
.word 91 |
.word 2636 |
.word 43982093 |
.word 6227 |
|
op1_signed: |
.word 1173464398 |
.word 644568570 |
.word 1413618866 |
.word 940280095 |
.word 1307051796 |
.word 69701148 |
.word 791353789 |
.word -1751134801 |
.word -540034563 |
.word -664201053 |
.word 859052625 |
.word 506263265 |
.word 1672805452 |
.word -940950084 |
.word 639564287 |
.word -320080770 |
.word -194326606 |
.word -1401122692 |
.word 1361841711 |
.word -1572666822 |
.word 223085807 |
.word -2143536785 |
.word -771364638 |
.word -392756254 |
.word -2075946315 |
.word -133598861 |
.word 869612982 |
.word 727395029 |
.word -1173738546 |
.word 1865699269 |
.word 1001660457 |
.word -1435705417 |
.word 313397375 |
.word 91734875 |
.word 55211040 |
.word -1298145437 |
.word -1587928274 |
.word 120185203 |
.word 1253220522 |
.word 664380448 |
.word 659766337 |
.word -1867423126 |
.word 211715071 |
.word 1172375319 |
.word 1010876232 |
.word 1866163921 |
.word 1337698510 |
.word -1489886717 |
.word -844206754 |
.word 1252556476 |
.word 1062583479 |
.word -2028701144 |
.word -925730358 |
.word 63629404 |
.word 2084388372 |
.word 1185701000 |
.word 344972780 |
.word 1506745295 |
.word -1310164994 |
.word 785548626 |
.word -960828075 |
.word -788757195 |
.word 1742449807 |
.word 1952581789 |
.word -1868879050 |
.word -727870971 |
.word 457544035 |
.word -2083100074 |
.word 2092326142 |
.word 456912800 |
.word -1930624925 |
.word 1981026677 |
.word -641082819 |
.word 1259278117 |
.word 1481501124 |
.word -444342667 |
.word 1947675341 |
.word -608834426 |
.word -906130612 |
.word -480045052 |
.word 182898482 |
.word 1025708506 |
.word -363535658 |
.word 1180470009 |
.word -62562240 |
.word 987486196 |
.word -531865065 |
.word 676720261 |
.word 1125242878 |
.word -1621168845 |
.word 1990517921 |
.word -1383494740 |
.word -1522980151 |
.word 434249114 |
.word -129245145 |
.word 97983477 |
.word 658513595 |
.word 1548110625 |
.word 1140579073 |
.word -1285950881 |
|
op2_signed: |
.word 1389891600 |
.word 176 |
.word -129 |
.word -10300 |
.word -24713 |
.word 36 |
.word 539501672 |
.word -412262764 |
.word -999517400 |
.word 27 |
.word -185 |
.word 632355259 |
.word 1914747195 |
.word -202 |
.word 152 |
.word -151 |
.word -49343821 |
.word 161975794 |
.word -172 |
.word -3509 |
.word 8811 |
.word -135 |
.word -224114196 |
.word 5373 |
.word -30158 |
.word 735955126 |
.word 7320 |
.word -1137550910 |
.word 413980723 |
.word -28499 |
.word -1858419248 |
.word -31374 |
.word 153 |
.word -245 |
.word -231 |
.word 1065580722 |
.word 114 |
.word 25851 |
.word 1113949699 |
.word 1883394154 |
.word 211 |
.word 22075 |
.word -143 |
.word -1052684430 |
.word -197 |
.word -28563 |
.word -12517 |
.word 141 |
.word -197 |
.word -79 |
.word 79 |
.word -103 |
.word 563090517 |
.word -13711 |
.word -2 |
.word -250 |
.word -130626268 |
.word -1824933506 |
.word 501 |
.word 135 |
.word -965460037 |
.word 90 |
.word -24983 |
.word -5626 |
.word -175 |
.word -42 |
.word -72 |
.word 9948 |
.word -29411 |
.word 223 |
.word 16237 |
.word -192 |
.word -297352066 |
.word 2140975764 |
.word -511619965 |
.word -7170 |
.word -380546211 |
.word 1065203866 |
.word -81584403 |
.word -23445 |
.word 213 |
.word 31410 |
.word -270351532 |
.word -8040 |
.word -13293 |
.word 16010 |
.word -223 |
.word -60 |
.word 9338 |
.word -46 |
.word 26045 |
.word 21525 |
.word 1705744137 |
.word 1754448529 |
.word -1602585578 |
.word 1341015177 |
.word 1 |
.word -72 |
.word -156 |
.word 1932634409 |
|
quotient_signed: |
.word 0 |
.word 3662321 |
.word -10958285 |
.word -91289 |
.word -52889 |
.word 1936143 |
.word 1 |
.word 4 |
.word 0 |
.word -24600039 |
.word -4643527 |
.word 0 |
.word 0 |
.word 4658168 |
.word 4207659 |
.word 2119740 |
.word 3 |
.word -8 |
.word -7917684 |
.word 448180 |
.word 25319 |
.word 15878050 |
.word 3 |
.word -73098 |
.word 68835 |
.word 0 |
.word 118799 |
.word 0 |
.word -2 |
.word -65465 |
.word 0 |
.word 45760 |
.word 2048348 |
.word -374428 |
.word -239008 |
.word -1 |
.word -13929195 |
.word 4649 |
.word 1 |
.word 0 |
.word 3126854 |
.word -84594 |
.word -1480524 |
.word -1 |
.word -5131351 |
.word -65335 |
.word -106870 |
.word -10566572 |
.word 4285313 |
.word -15855145 |
.word 13450423 |
.word 19696127 |
.word -1 |
.word -4640 |
.word -1042194186 |
.word -4742804 |
.word -2 |
.word 0 |
.word -2615099 |
.word 5818878 |
.word 0 |
.word -8763968 |
.word -69745 |
.word -347063 |
.word 10679308 |
.word 17330261 |
.word -6354778 |
.word -209398 |
.word -71140 |
.word 2048936 |
.word -118902 |
.word -10317847 |
.word 2 |
.word 0 |
.word -2 |
.word 61972 |
.word -5 |
.word 0 |
.word 11 |
.word 20475 |
.word 858678 |
.word 32655 |
.word 1 |
.word -146824 |
.word 4706 |
.word 61679 |
.word 2385045 |
.word -11278671 |
.word 120501 |
.word 35242800 |
.word 76426 |
.word -64273 |
.word 0 |
.word 0 |
.word 0 |
.word 0 |
.word 658513595 |
.word -21501536 |
.word -7311404 |
.word 0 |
|
remainder_signed: |
.word 1173464398 |
.word 74 |
.word 101 |
.word 3395 |
.word 5939 |
.word 0 |
.word 251852117 |
.word -102083745 |
.word -540034563 |
.word 0 |
.word 130 |
.word 506263265 |
.word 1672805452 |
.word -148 |
.word 119 |
.word -30 |
.word -46295143 |
.word -105316340 |
.word 63 |
.word -3202 |
.word 98 |
.word -35 |
.word -99022050 |
.word -700 |
.word -20385 |
.word -133598861 |
.word 4302 |
.word 727395029 |
.word -345777100 |
.word 12234 |
.word 1001660457 |
.word -31177 |
.word 131 |
.word 15 |
.word 192 |
.word -232564715 |
.word -44 |
.word 3904 |
.word 139270823 |
.word 664380448 |
.word 143 |
.word -10576 |
.word 139 |
.word 119690889 |
.word 85 |
.word 316 |
.word 6720 |
.word -65 |
.word -93 |
.word 21 |
.word 62 |
.word -63 |
.word -362639841 |
.word 10364 |
.word 0 |
.word 0 |
.word 83720244 |
.word 1506745295 |
.word -395 |
.word 96 |
.word -960828075 |
.word -75 |
.word 10472 |
.word 5351 |
.word -150 |
.word -9 |
.word 19 |
.word -8770 |
.word 27602 |
.word 72 |
.word -13151 |
.word 53 |
.word -46378687 |
.word 1259278117 |
.word 458261194 |
.word -3427 |
.word 44944286 |
.word -608834426 |
.word -8702179 |
.word -8677 |
.word 68 |
.word 14956 |
.word -93184126 |
.word 5049 |
.word -5382 |
.word 5406 |
.word -30 |
.word 1 |
.word 4540 |
.word -45 |
.word 2751 |
.word -18415 |
.word -1522980151 |
.word 434249114 |
.word -129245145 |
.word 97983477 |
.word 0 |
.word 33 |
.word 49 |
.word -1285950881 |
/* |
* Test division (divu, divs, modu, mods) |
*/ |
|
lc r100, 0x10000000 // test result output pointer |
lc r101, halt |
lc r102, failure |
lc r103, 0x10000004 |
|
// Test unsigned division |
|
lc r32, op1 |
lc r33, op2 |
lc r34, quotient |
lc r35, remainder |
lc r36, cnt_loop |
lc r10, 100 // counter |
|
cnt_loop: |
lw r0, r32 |
lw r1, r33 |
divu r2, r0, r1 |
modu r3, r0, r1 |
lw r4, r34 |
lw r5, r35 |
cjmpne r102, r2, r4 // failure |
cjmpne r102, r3, r5 // failure |
mul r6, r2, r1 |
add r6, r6, r3 |
cjmpne r102, r6, r0 // failure |
add r32, r32, 4 |
add r33, r33, 4 |
add r34, r34, 4 |
add r35, r35, 4 |
sub r10, r10, 1 |
cjmpug r36, r10, 0 // cnt_loop |
|
sw r103, 1 |
|
// Test signed division |
|
lc r32, op1_signed |
lc r33, op2_signed |
lc r34, quotient_signed |
lc r35, remainder_signed |
lc r36, cnt_loop2 |
lc r10, 100 // counter |
|
cnt_loop2: |
lw r0, r32 |
lw r1, r33 |
divs r2, r0, r1 |
mods r3, r0, r1 |
lw r4, r34 |
lw r5, r35 |
cjmpne r102, r2, r4 // failure |
cjmpne r102, r3, r5 // failure |
mul r6, r2, r1 |
add r6, r6, r3 |
cjmpne r102, r6, r0 // failure |
add r32, r32, 4 |
add r33, r33, 4 |
add r34, r34, 4 |
add r35, r35, 4 |
sub r10, r10, 1 |
cjmpug r36, r10, 0 // cnt_loop2 |
|
sw r103, 2 |
|
// Random division/multiplication test |
|
mov r64, 1 // initial PRBS value |
lc r65, 1103515245 // PRBS multiplier |
lc r66, 12345 // PRBS addition constant |
lc r67, 32767 // PRBS mask |
lc r68, 16384 |
|
lc r10, 1000 |
lc r32, rnd_loop |
lc r33, rand |
lc r34, rnd_cont |
|
rnd_loop: |
call r33 // rand |
sub r1, r0, r68 // dividend in r1 |
call r33 // rand |
sub r2, r0, r68 // divisor in r2 |
cjmpne r34, r2, 0 // rnd_cont |
mov r2, 1 |
|
rnd_cont: |
divs r3, r1, r2 |
mods r4, r1, r2 |
mul r5, r3, r2 |
add r5, r5, r4 |
cjmpne r102, r5, r1 // failure |
sub r10, r10, 1 |
cjmpug r32, r10, 0 // rnd_loop |
|
sw r103, 3 |
|
sw r100, 1 |
jmp r101 // halt |
|
failure: |
sw r100, 2 |
|
halt: |
hlt |
jmp r101 // halt |
|
// Linear congruent pseudo-random number generator (as in ISO/IEC 9899:1999) |
|
rand: |
mul r64, r64, r65 |
add r64, r64, r66 |
sru r0, r64, 16 |
and r0, r0, r67 |
ret |
|
op1: |
.word 2227053353 |
.word 4059122064 |
.word 210189531 |
.word 1203176988 |
.word 2794175299 |
.word 1562322232 |
.word 219364165 |
.word 1352278066 |
.word 4130490642 |
.word 1156715599 |
.word 993179440 |
.word 529260957 |
.word 1235055289 |
.word 2994792917 |
.word 348116583 |
.word 1475314534 |
.word 517066081 |
.word 2230328806 |
.word 1395407336 |
.word 4094467700 |
.word 3476389465 |
.word 1210945747 |
.word 3236243997 |
.word 1348406852 |
.word 118818171 |
.word 1692045936 |
.word 1190663529 |
.word 1731139289 |
.word 1986549712 |
.word 2038965422 |
.word 1173634277 |
.word 1499514357 |
.word 3268423030 |
.word 136673642 |
.word 672245098 |
.word 797742983 |
.word 3236010945 |
.word 1421197958 |
.word 948983249 |
.word 3780009574 |
.word 3802522271 |
.word 2303076920 |
.word 2976105080 |
.word 2531287614 |
.word 4049504575 |
.word 488644257 |
.word 336561159 |
.word 753386953 |
.word 4270696691 |
.word 1966854304 |
.word 3201322355 |
.word 4203490113 |
.word 2503116372 |
.word 3405118694 |
.word 3103595329 |
.word 3553466644 |
.word 861103782 |
.word 1275325516 |
.word 3484264974 |
.word 1293196760 |
.word 4173438076 |
.word 2275850340 |
.word 3885575502 |
.word 1091087744 |
.word 2669208735 |
.word 69325132 |
.word 2319663187 |
.word 2510410703 |
.word 2902980138 |
.word 845791433 |
.word 3327530895 |
.word 948013067 |
.word 3889190137 |
.word 2250058130 |
.word 927988252 |
.word 1820385269 |
.word 135357763 |
.word 3770160619 |
.word 1650193531 |
.word 1250420215 |
.word 2982397572 |
.word 788754293 |
.word 1132578971 |
.word 2174830494 |
.word 2743197342 |
.word 1473236291 |
.word 671295260 |
.word 1615737929 |
.word 722317890 |
.word 1373795119 |
.word 3187744723 |
.word 353993505 |
.word 3691968907 |
.word 2452722797 |
.word 1784599952 |
.word 912987979 |
.word 2183033578 |
.word 2941180254 |
.word 3706025245 |
.word 2141225307 |
|
op2: |
.word 225 |
.word 3018582459 |
.word 6462 |
.word 222 |
.word 799 |
.word 19412 |
.word 3676048009 |
.word 16622 |
.word 32158 |
.word 64 |
.word 8865 |
.word 2580197594 |
.word 3313401900 |
.word 1405929962 |
.word 214 |
.word 24905 |
.word 1914084509 |
.word 41372239 |
.word 203 |
.word 213 |
.word 50 |
.word 3866464211 |
.word 247 |
.word 2371998720 |
.word 528626491 |
.word 2243022420 |
.word 106 |
.word 21608 |
.word 250 |
.word 635130622 |
.word 22739 |
.word 61 |
.word 3563638217 |
.word 97 |
.word 2849410241 |
.word 241 |
.word 2594761086 |
.word 191 |
.word 40 |
.word 48 |
.word 6924 |
.word 2054783657 |
.word 702209830 |
.word 968832018 |
.word 1826819693 |
.word 17099 |
.word 25861 |
.word 142 |
.word 190 |
.word 3078 |
.word 130 |
.word 32560 |
.word 170 |
.word 2308931006 |
.word 26703 |
.word 13 |
.word 19211 |
.word 115 |
.word 667594965 |
.word 1495759348 |
.word 205 |
.word 19605 |
.word 61 |
.word 2772527081 |
.word 16917 |
.word 147 |
.word 175 |
.word 206 |
.word 16033 |
.word 2356 |
.word 7643 |
.word 97 |
.word 2017990513 |
.word 41 |
.word 13752 |
.word 109 |
.word 165 |
.word 225 |
.word 2698 |
.word 12859 |
.word 12455 |
.word 158 |
.word 4136249385 |
.word 3446419784 |
.word 140 |
.word 20679 |
.word 23935 |
.word 48162108 |
.word 5302 |
.word 126 |
.word 80 |
.word 741054488 |
.word 188 |
.word 116 |
.word 64 |
.word 177 |
.word 141 |
.word 16378 |
.word 3662043152 |
.word 19292 |
|
quotient: |
.word 9898014 |
.word 1 |
.word 32527 |
.word 5419716 |
.word 3497090 |
.word 80482 |
.word 0 |
.word 81354 |
.word 128443 |
.word 18073681 |
.word 112033 |
.word 0 |
.word 0 |
.word 2 |
.word 1626713 |
.word 59237 |
.word 0 |
.word 53 |
.word 6873927 |
.word 19222853 |
.word 69527789 |
.word 0 |
.word 13102202 |
.word 0 |
.word 0 |
.word 0 |
.word 11232674 |
.word 80115 |
.word 7946198 |
.word 3 |
.word 51613 |
.word 24582202 |
.word 0 |
.word 1409006 |
.word 0 |
.word 3310136 |
.word 1 |
.word 7440827 |
.word 23724581 |
.word 78750199 |
.word 549179 |
.word 1 |
.word 4 |
.word 2 |
.word 2 |
.word 28577 |
.word 13014 |
.word 5305541 |
.word 22477351 |
.word 639003 |
.word 24625556 |
.word 129099 |
.word 14724213 |
.word 1 |
.word 116226 |
.word 273343588 |
.word 44823 |
.word 11089787 |
.word 5 |
.word 0 |
.word 20358234 |
.word 116085 |
.word 63697959 |
.word 0 |
.word 157782 |
.word 471599 |
.word 13255218 |
.word 12186459 |
.word 181062 |
.word 358994 |
.word 435369 |
.word 9773330 |
.word 1 |
.word 54879466 |
.word 67480 |
.word 16700782 |
.word 820350 |
.word 16756269 |
.word 611635 |
.word 97240 |
.word 239453 |
.word 4992115 |
.word 0 |
.word 0 |
.word 19594266 |
.word 71243 |
.word 28046 |
.word 33 |
.word 136234 |
.word 10903135 |
.word 39846809 |
.word 0 |
.word 19638132 |
.word 21144162 |
.word 27884374 |
.word 5158124 |
.word 15482507 |
.word 179581 |
.word 1 |
.word 110990 |
|
remainder: |
.word 203 |
.word 1040539605 |
.word 57 |
.word 36 |
.word 389 |
.word 5648 |
.word 219364165 |
.word 11878 |
.word 20648 |
.word 15 |
.word 6895 |
.word 529260957 |
.word 1235055289 |
.word 182932993 |
.word 1 |
.word 17049 |
.word 517066081 |
.word 37600139 |
.word 155 |
.word 11 |
.word 15 |
.word 1210945747 |
.word 103 |
.word 1348406852 |
.word 118818171 |
.word 1692045936 |
.word 85 |
.word 14369 |
.word 212 |
.word 133573556 |
.word 6270 |
.word 35 |
.word 3268423030 |
.word 60 |
.word 672245098 |
.word 207 |
.word 641249859 |
.word 1 |
.word 9 |
.word 22 |
.word 6875 |
.word 248293263 |
.word 167265760 |
.word 593623578 |
.word 395865189 |
.word 6134 |
.word 6105 |
.word 131 |
.word 1 |
.word 3070 |
.word 75 |
.word 26673 |
.word 162 |
.word 1096187688 |
.word 12451 |
.word 0 |
.word 9129 |
.word 11 |
.word 146290149 |
.word 1293196760 |
.word 106 |
.word 3915 |
.word 3 |
.word 1091087744 |
.word 10641 |
.word 79 |
.word 37 |
.word 149 |
.word 13092 |
.word 1569 |
.word 5628 |
.word 57 |
.word 1871199624 |
.word 24 |
.word 3292 |
.word 31 |
.word 13 |
.word 94 |
.word 2301 |
.word 11055 |
.word 10457 |
.word 123 |
.word 1132578971 |
.word 2174830494 |
.word 102 |
.word 2294 |
.word 14250 |
.word 26388365 |
.word 5222 |
.word 109 |
.word 3 |
.word 353993505 |
.word 91 |
.word 5 |
.word 16 |
.word 31 |
.word 91 |
.word 2636 |
.word 43982093 |
.word 6227 |
|
op1_signed: |
.word 1173464398 |
.word 644568570 |
.word 1413618866 |
.word 940280095 |
.word 1307051796 |
.word 69701148 |
.word 791353789 |
.word -1751134801 |
.word -540034563 |
.word -664201053 |
.word 859052625 |
.word 506263265 |
.word 1672805452 |
.word -940950084 |
.word 639564287 |
.word -320080770 |
.word -194326606 |
.word -1401122692 |
.word 1361841711 |
.word -1572666822 |
.word 223085807 |
.word -2143536785 |
.word -771364638 |
.word -392756254 |
.word -2075946315 |
.word -133598861 |
.word 869612982 |
.word 727395029 |
.word -1173738546 |
.word 1865699269 |
.word 1001660457 |
.word -1435705417 |
.word 313397375 |
.word 91734875 |
.word 55211040 |
.word -1298145437 |
.word -1587928274 |
.word 120185203 |
.word 1253220522 |
.word 664380448 |
.word 659766337 |
.word -1867423126 |
.word 211715071 |
.word 1172375319 |
.word 1010876232 |
.word 1866163921 |
.word 1337698510 |
.word -1489886717 |
.word -844206754 |
.word 1252556476 |
.word 1062583479 |
.word -2028701144 |
.word -925730358 |
.word 63629404 |
.word 2084388372 |
.word 1185701000 |
.word 344972780 |
.word 1506745295 |
.word -1310164994 |
.word 785548626 |
.word -960828075 |
.word -788757195 |
.word 1742449807 |
.word 1952581789 |
.word -1868879050 |
.word -727870971 |
.word 457544035 |
.word -2083100074 |
.word 2092326142 |
.word 456912800 |
.word -1930624925 |
.word 1981026677 |
.word -641082819 |
.word 1259278117 |
.word 1481501124 |
.word -444342667 |
.word 1947675341 |
.word -608834426 |
.word -906130612 |
.word -480045052 |
.word 182898482 |
.word 1025708506 |
.word -363535658 |
.word 1180470009 |
.word -62562240 |
.word 987486196 |
.word -531865065 |
.word 676720261 |
.word 1125242878 |
.word -1621168845 |
.word 1990517921 |
.word -1383494740 |
.word -1522980151 |
.word 434249114 |
.word -129245145 |
.word 97983477 |
.word 658513595 |
.word 1548110625 |
.word 1140579073 |
.word -1285950881 |
|
op2_signed: |
.word 1389891600 |
.word 176 |
.word -129 |
.word -10300 |
.word -24713 |
.word 36 |
.word 539501672 |
.word -412262764 |
.word -999517400 |
.word 27 |
.word -185 |
.word 632355259 |
.word 1914747195 |
.word -202 |
.word 152 |
.word -151 |
.word -49343821 |
.word 161975794 |
.word -172 |
.word -3509 |
.word 8811 |
.word -135 |
.word -224114196 |
.word 5373 |
.word -30158 |
.word 735955126 |
.word 7320 |
.word -1137550910 |
.word 413980723 |
.word -28499 |
.word -1858419248 |
.word -31374 |
.word 153 |
.word -245 |
.word -231 |
.word 1065580722 |
.word 114 |
.word 25851 |
.word 1113949699 |
.word 1883394154 |
.word 211 |
.word 22075 |
.word -143 |
.word -1052684430 |
.word -197 |
.word -28563 |
.word -12517 |
.word 141 |
.word -197 |
.word -79 |
.word 79 |
.word -103 |
.word 563090517 |
.word -13711 |
.word -2 |
.word -250 |
.word -130626268 |
.word -1824933506 |
.word 501 |
.word 135 |
.word -965460037 |
.word 90 |
.word -24983 |
.word -5626 |
.word -175 |
.word -42 |
.word -72 |
.word 9948 |
.word -29411 |
.word 223 |
.word 16237 |
.word -192 |
.word -297352066 |
.word 2140975764 |
.word -511619965 |
.word -7170 |
.word -380546211 |
.word 1065203866 |
.word -81584403 |
.word -23445 |
.word 213 |
.word 31410 |
.word -270351532 |
.word -8040 |
.word -13293 |
.word 16010 |
.word -223 |
.word -60 |
.word 9338 |
.word -46 |
.word 26045 |
.word 21525 |
.word 1705744137 |
.word 1754448529 |
.word -1602585578 |
.word 1341015177 |
.word 1 |
.word -72 |
.word -156 |
.word 1932634409 |
|
quotient_signed: |
.word 0 |
.word 3662321 |
.word -10958285 |
.word -91289 |
.word -52889 |
.word 1936143 |
.word 1 |
.word 4 |
.word 0 |
.word -24600039 |
.word -4643527 |
.word 0 |
.word 0 |
.word 4658168 |
.word 4207659 |
.word 2119740 |
.word 3 |
.word -8 |
.word -7917684 |
.word 448180 |
.word 25319 |
.word 15878050 |
.word 3 |
.word -73098 |
.word 68835 |
.word 0 |
.word 118799 |
.word 0 |
.word -2 |
.word -65465 |
.word 0 |
.word 45760 |
.word 2048348 |
.word -374428 |
.word -239008 |
.word -1 |
.word -13929195 |
.word 4649 |
.word 1 |
.word 0 |
.word 3126854 |
.word -84594 |
.word -1480524 |
.word -1 |
.word -5131351 |
.word -65335 |
.word -106870 |
.word -10566572 |
.word 4285313 |
.word -15855145 |
.word 13450423 |
.word 19696127 |
.word -1 |
.word -4640 |
.word -1042194186 |
.word -4742804 |
.word -2 |
.word 0 |
.word -2615099 |
.word 5818878 |
.word 0 |
.word -8763968 |
.word -69745 |
.word -347063 |
.word 10679308 |
.word 17330261 |
.word -6354778 |
.word -209398 |
.word -71140 |
.word 2048936 |
.word -118902 |
.word -10317847 |
.word 2 |
.word 0 |
.word -2 |
.word 61972 |
.word -5 |
.word 0 |
.word 11 |
.word 20475 |
.word 858678 |
.word 32655 |
.word 1 |
.word -146824 |
.word 4706 |
.word 61679 |
.word 2385045 |
.word -11278671 |
.word 120501 |
.word 35242800 |
.word 76426 |
.word -64273 |
.word 0 |
.word 0 |
.word 0 |
.word 0 |
.word 658513595 |
.word -21501536 |
.word -7311404 |
.word 0 |
|
remainder_signed: |
.word 1173464398 |
.word 74 |
.word 101 |
.word 3395 |
.word 5939 |
.word 0 |
.word 251852117 |
.word -102083745 |
.word -540034563 |
.word 0 |
.word 130 |
.word 506263265 |
.word 1672805452 |
.word -148 |
.word 119 |
.word -30 |
.word -46295143 |
.word -105316340 |
.word 63 |
.word -3202 |
.word 98 |
.word -35 |
.word -99022050 |
.word -700 |
.word -20385 |
.word -133598861 |
.word 4302 |
.word 727395029 |
.word -345777100 |
.word 12234 |
.word 1001660457 |
.word -31177 |
.word 131 |
.word 15 |
.word 192 |
.word -232564715 |
.word -44 |
.word 3904 |
.word 139270823 |
.word 664380448 |
.word 143 |
.word -10576 |
.word 139 |
.word 119690889 |
.word 85 |
.word 316 |
.word 6720 |
.word -65 |
.word -93 |
.word 21 |
.word 62 |
.word -63 |
.word -362639841 |
.word 10364 |
.word 0 |
.word 0 |
.word 83720244 |
.word 1506745295 |
.word -395 |
.word 96 |
.word -960828075 |
.word -75 |
.word 10472 |
.word 5351 |
.word -150 |
.word -9 |
.word 19 |
.word -8770 |
.word 27602 |
.word 72 |
.word -13151 |
.word 53 |
.word -46378687 |
.word 1259278117 |
.word 458261194 |
.word -3427 |
.word 44944286 |
.word -608834426 |
.word -8702179 |
.word -8677 |
.word 68 |
.word 14956 |
.word -93184126 |
.word 5049 |
.word -5382 |
.word 5406 |
.word -30 |
.word 1 |
.word 4540 |
.word -45 |
.word 2751 |
.word -18415 |
.word -1522980151 |
.word 434249114 |
.word -129245145 |
.word 97983477 |
.word 0 |
.word 33 |
.word 49 |
.word -1285950881 |
/firmware/test014.asm
1,27 → 1,27
/* |
* Test "hlt" instruction |
*/ |
|
lc r100, 0x10000000 // test result output pointer |
lc r101, halt |
lc r103, 0x20000000 // timer: number of pulses (0xFFFFFFFF - infinite) |
lc r104, 0x20000004 // timer: delay between pulses (in cycles) |
|
lc iv0, timer_handler |
mov r10, 2 |
mov cr, 1 // enable interrupt 0 |
lc r0, 1000 |
sw r104, r0 |
sw r103, 1 |
|
hlt |
|
sw r100, r10 // r10 will be 2 if interrupt hasn't been called, which is a failure code |
|
halt: |
hlt |
jmp r101 // halt |
|
timer_handler: |
mov r10, 1 |
iret |
/* |
* Test "hlt" instruction |
*/ |
|
lc r100, 0x10000000 // test result output pointer |
lc r101, halt |
lc r103, 0x20000000 // timer: number of pulses (0xFFFFFFFF - infinite) |
lc r104, 0x20000004 // timer: delay between pulses (in cycles) |
|
lc iv0, timer_handler |
mov r10, 2 |
mov cr, 1 // enable interrupt 0 |
lc r0, 1000 |
sw r104, r0 |
sw r103, 1 |
|
hlt |
|
sw r100, r10 // r10 will be 2 if interrupt hasn't been called, which is a failure code |
|
halt: |
hlt |
jmp r101 // halt |
|
timer_handler: |
mov r10, 1 |
iret |
/firmware/test015.asm
1,59 → 1,59
/* |
* Test unconventional interrupt handlers |
*/ |
|
lc r100, 0x10000000 // test result output pointer |
lc r101, halt |
lc r102, 0x30000000 // coprocessor input register |
lc r103, 0x30000004 // coprocessor output register |
lc r104, failure |
|
// Initialize interrupt handlers |
lc iv2, coprocessor_handler |
mov cr, 4 // enable interrupts from the coprocessor |
lc r110, interrupt_exit@1 // '1' in the LSB is an interrupt exit flag |
|
// Initialize random generator |
mov r64, 1 // initial PRBS value |
lc r65, 1103515245 // PRBS multiplier |
lc r66, 12345 // PRBS addition constant |
lc r67, 32767 // PRBS mask |
|
// Main loop |
lc r32, loop |
lc r33, rand |
lc r34, 2000 |
|
loop: |
call r33 |
cjmpe r32, r0, 0 // if(r==0) continue; |
sw r102, r0 |
hlt |
|
interrupt_exit: |
lw r1, r103 |
mul r0, r0, 3 |
cjmpne r104, r0, r1 // failure |
|
sub r34, r34, 1 |
cjmpug r32, r34, 0 // loop |
|
sw r100, 1 |
jmp r101 // halt |
|
failure: |
sw r100, 2 |
|
halt: |
hlt |
jmp r101 // halt |
|
rand: |
mul r64, r64, r65 |
add r64, r64, r66 |
sru r0, r64, 16 |
and r0, r0, r67 |
ret |
|
coprocessor_handler: |
jmp r110 // exit to a given point, ignore irp |
/* |
* Test unconventional interrupt handlers |
*/ |
|
lc r100, 0x10000000 // test result output pointer |
lc r101, halt |
lc r102, 0x30000000 // coprocessor input register |
lc r103, 0x30000004 // coprocessor output register |
lc r104, failure |
|
// Initialize interrupt handlers |
lc iv2, coprocessor_handler |
mov cr, 4 // enable interrupts from the coprocessor |
lc r110, interrupt_exit@1 // '1' in the LSB is an interrupt exit flag |
|
// Initialize random generator |
mov r64, 1 // initial PRBS value |
lc r65, 1103515245 // PRBS multiplier |
lc r66, 12345 // PRBS addition constant |
lc r67, 32767 // PRBS mask |
|
// Main loop |
lc r32, loop |
lc r33, rand |
lc r34, 2000 |
|
loop: |
call r33 |
cjmpe r32, r0, 0 // if(r==0) continue; |
sw r102, r0 |
hlt |
|
interrupt_exit: |
lw r1, r103 |
mul r0, r0, 3 |
cjmpne r104, r0, r1 // failure |
|
sub r34, r34, 1 |
cjmpug r32, r34, 0 // loop |
|
sw r100, 1 |
jmp r101 // halt |
|
failure: |
sw r100, 2 |
|
halt: |
hlt |
jmp r101 // halt |
|
rand: |
mul r64, r64, r65 |
add r64, r64, r66 |
sru r0, r64, 16 |
and r0, r0, r67 |
ret |
|
coprocessor_handler: |
jmp r110 // exit to a given point, ignore irp |
/firmware/test016.asm
1,47 → 1,47
/* |
* Test for temporarily blocked interrupts |
*/ |
|
lc r100, 0x10000000 // test result output pointer |
lc r101, halt |
lc r102, failure |
lc r103, 0x20000000 // timer: number of pulses (0xFFFFFFFF - infinite) |
lc r104, 0x20000004 // timer: delay between pulses (in cycles) |
|
lc iv0, timer_handler |
lc cr, 0x101 // enable interrupt 0 in temporarily blocked state |
|
lc r32, 0 // interrupt handler call counter |
lc r33, 1000 // loop counter |
lc r34, loop1 |
lc r35, loop2 |
|
sw r104, 100 |
sw r103, 1 |
|
loop1: |
sub r33, r33, 1 |
cjmpug r34, r33, 0 // loop1 |
|
lc r33, 1000 |
mov cr, 1 // unblock interrupt 0 |
|
loop2: |
sub r33, r33, 1 |
cjmpug r35, r33, 0 // loop2 |
|
// r32 should be 1 by this point |
cjmpne r102, r32, 1 // failure |
sw r100, 1 |
jmp r101 // halt |
|
failure: |
sw r100, 2 |
|
halt: |
hlt |
jmp r101 // halt |
|
timer_handler: |
add r32, r32, 1 |
iret |
/* |
* Test for temporarily blocked interrupts |
*/ |
|
lc r100, 0x10000000 // test result output pointer |
lc r101, halt |
lc r102, failure |
lc r103, 0x20000000 // timer: number of pulses (0xFFFFFFFF - infinite) |
lc r104, 0x20000004 // timer: delay between pulses (in cycles) |
|
lc iv0, timer_handler |
lc cr, 0x101 // enable interrupt 0 in temporarily blocked state |
|
lc r32, 0 // interrupt handler call counter |
lc r33, 1000 // loop counter |
lc r34, loop1 |
lc r35, loop2 |
|
sw r104, 100 |
sw r103, 1 |
|
loop1: |
sub r33, r33, 1 |
cjmpug r34, r33, 0 // loop1 |
|
lc r33, 1000 |
mov cr, 1 // unblock interrupt 0 |
|
loop2: |
sub r33, r33, 1 |
cjmpug r35, r33, 0 // loop2 |
|
// r32 should be 1 by this point |
cjmpne r102, r32, 1 // failure |
sw r100, 1 |
jmp r101 // halt |
|
failure: |
sw r100, 2 |
|
halt: |
hlt |
jmp r101 // halt |
|
timer_handler: |
add r32, r32, 1 |
iret |
/firmware/test017.asm
1,25 → 1,25
/* |
* Test the new "lcs" instruction |
*/ |
|
lc r100, 0x10000000 // test result output pointer |
lcs r101, halt |
lcs r102, failure |
|
lc r0, 1000000 |
lc r1, -1000011 |
lcs r10, 1000000 |
lcs r11, -1000011 |
|
cjmpne r102, r0, r10 // failure |
cjmpne r102, r1, r11 // failure |
|
sw r100, 1 |
jmp r101 // halt |
|
failure: |
sw r100, 2 |
|
halt: |
hlt |
jmp r101 // halt |
/* |
* Test the new "lcs" instruction |
*/ |
|
lc r100, 0x10000000 // test result output pointer |
lcs r101, halt |
lcs r102, failure |
|
lc r0, 1000000 |
lc r1, -1000011 |
lcs r10, 1000000 |
lcs r11, -1000011 |
|
cjmpne r102, r0, r10 // failure |
cjmpne r102, r1, r11 // failure |
|
sw r100, 1 |
jmp r101 // halt |
|
failure: |
sw r100, 2 |
|
halt: |
hlt |
jmp r101 // halt |
/firmware/test018.asm
1,1122 → 1,1122
/* |
* Additional interrupt test. The objective is to check that interrupt |
* arrival at any time will not disrupt program flow. |
* |
* The main part of the program calculates CRC32 of a 16 kbyte block |
* of data. The other part generates interrupts at random times using |
* the C99 pseudorandom generator and the timer peripheral. |
*/ |
|
lc r100, 0x10000000 // test result output pointer |
lcs r101, halt |
lcs r102, failure |
lc r103, 0x20000000 // timer: number of pulses (0xFFFFFFFF - infinite) |
lc r104, 0x20000004 // timer: delay between pulses (in cycles) |
|
// Set up the interrupt handler |
lcs r200, 0 // initialize counter |
lc r201, 0x10000008 // output pointer |
lc r202, 1103515245 // PRNG: multiplicative constant |
lcs r203, 12345 // PRNG: additive constant |
lcs r204, 32767 // PRNG: modulo |
lcs r205, 1 // PRNG: current seed value |
|
lcs iv0, timer_handler |
mov cr, 1 // enable interrupt 0 |
|
sw r104, 100 |
sw r103, 1 // activate timer, one pulse |
|
// Main routine |
lc r16, 0x10000004 // output pointer |
lcs r17, 0xFFFFFFFF // initial CRC value |
lc r18, 0xEDB88320 // polynom |
lcs r19, data // input pointer |
lcs r20, 4096 // data block size in words |
|
lcs r32, word_loop |
lcs r33, bit_loop |
lcs r34, dont_xor |
|
mov r64, 0 // word counter |
|
word_loop: |
lw r0, r19 |
mov r65, 0 // bit counter |
|
bit_loop: |
and r1, r0, 1 |
and r2, r17, 1 |
sru r17, r17, 1 |
xor r3, r1, r2 |
cjmpe r34, r3, 0 // dont_xor |
xor r17, r17, r18 |
|
dont_xor: |
sru r0, r0, 1 |
add r65, r65, 1 |
cjmpul r33, r65, 32 // bit_loop |
|
sw r16, r64 |
add r19, r19, 4 |
add r64, r64, 1 |
cjmpul r32, r64, r20 // word_loop |
|
not r17, r17 |
sw r16, r17 |
|
// Check main routine result |
lc r0, 0xF958DFE2 |
cjmpne r102, r0, r17 |
|
mov cr, 0 // disable interrupts |
sw r103, 0 // deactivate timer |
|
sw r100, 1 |
jmp r101 |
|
failure: |
sw r100, 2 |
|
halt: |
hlt |
jmp r101 |
|
timer_handler: |
// PRNG generator from C99 (ISO/IEC 9899:1999) |
mul r205, r205, r202 |
add r205, r205, r203 |
sru r220, r205, 16 |
and r220, r220, r204 // r220 now contains the C99 pseudorandom number |
and r221, r220, 0x1F |
add r221, r221, 32 // r221 is now a pseudorandom number from the [32, 63] range |
sw r104, r221 // set up the timer delay |
sw r103, 1 // single shot |
iret |
|
.align |
data: |
.byte 0xD7, 0x64, 0xC8, 0xCC, 0xE9, 0x32, 0x55, 0xC4, 0x47, 0x8D, 0x7A, 0xA0, 0x5D, 0x83, 0xF3, 0xEA |
.byte 0xA2, 0xB7, 0x24, 0x9B, 0x04, 0x3E, 0x23, 0xCD, 0x28, 0x66, 0x21, 0x1B, 0xFF, 0x37, 0x83, 0xD6 |
.byte 0x9C, 0x4B, 0xA3, 0x86, 0x7E, 0xF9, 0x4A, 0xC5, 0x86, 0xC5, 0x66, 0xE4, 0x48, 0x5A, 0xCE, 0xEB |
.byte 0x11, 0xF3, 0x86, 0x16, 0x31, 0xA9, 0xE3, 0x59, 0x10, 0x05, 0x75, 0x10, 0x3C, 0xF8, 0xE6, 0xD9 |
.byte 0x44, 0x8A, 0x60, 0xC2, 0x83, 0xAA, 0x88, 0x0A, 0x70, 0xEE, 0xEE, 0xB8, 0x48, 0xBD, 0xA3, 0x5A |
.byte 0xB0, 0x2A, 0x70, 0xE1, 0xD4, 0x54, 0x3A, 0xE4, 0x59, 0xAF, 0xF4, 0x96, 0xA8, 0xDB, 0x70, 0xEC |
.byte 0x65, 0xD0, 0xAF, 0xE9, 0x7B, 0x37, 0xF3, 0xEB, 0x25, 0xE1, 0xA4, 0x6E, 0x9E, 0x47, 0xC9, 0x4E |
.byte 0x72, 0x39, 0x30, 0x46, 0x8E, 0x6A, 0x2B, 0xE8, 0x1A, 0x20, 0x7E, 0xC2, 0xFC, 0xEF, 0xAF, 0x62 |
.byte 0xBF, 0x5E, 0x4B, 0x3B, 0x95, 0x3E, 0x27, 0xBB, 0x20, 0xCB, 0x2A, 0xBE, 0x13, 0xF3, 0x0D, 0x85 |
.byte 0x2D, 0x3D, 0xCC, 0xBB, 0xA8, 0xF7, 0xA3, 0xC2, 0x17, 0x22, 0x85, 0x14, 0x11, 0x34, 0x76, 0xD1 |
.byte 0x92, 0xC1, 0x0D, 0x28, 0xFF, 0x34, 0xE3, 0x20, 0xFF, 0x0D, 0xDE, 0x12, 0x01, 0xEC, 0x98, 0x2E |
.byte 0x29, 0x64, 0xE9, 0xD1, 0x5B, 0x8D, 0x94, 0x73, 0xAF, 0x19, 0x87, 0xC1, 0x4D, 0xFE, 0x93, 0xE0 |
.byte 0xBF, 0xA1, 0x09, 0xBF, 0xD5, 0xEC, 0xDF, 0xD4, 0xFA, 0xBE, 0xE7, 0xFB, 0xAA, 0x7F, 0x29, 0xD4 |
.byte 0xE3, 0x13, 0xA6, 0x3F, 0xA1, 0x3A, 0xB3, 0x51, 0x54, 0x3B, 0x12, 0xA2, 0x39, 0xA6, 0x82, 0xF8 |
.byte 0x47, 0x8B, 0xB8, 0x1C, 0x78, 0x97, 0xF1, 0x73, 0x56, 0xD9, 0x6F, 0x00, 0x58, 0x99, 0xD5, 0x3B |
.byte 0xAC, 0x7B, 0x7B, 0x4E, 0xB6, 0x2E, 0x9F, 0x0A, 0x69, 0xB2, 0xAC, 0xA3, 0x58, 0x2F, 0x9B, 0xA0 |
.byte 0xBB, 0x54, 0xBD, 0x33, 0xEB, 0xAF, 0xA7, 0x41, 0x88, 0x16, 0x42, 0xE0, 0xAF, 0x17, 0x1C, 0x5C |
.byte 0x93, 0x97, 0xAA, 0x49, 0xC6, 0x49, 0x54, 0x30, 0xFB, 0x00, 0xD3, 0x54, 0x30, 0x6F, 0xF5, 0xEB |
.byte 0xC3, 0xB2, 0x1F, 0xAF, 0x62, 0xC6, 0xF1, 0xEA, 0xDC, 0x34, 0xCB, 0x8C, 0x4C, 0xE7, 0xE8, 0xDF |
.byte 0x7F, 0x93, 0x29, 0x46, 0xDD, 0x7E, 0x76, 0xD9, 0x7E, 0x4A, 0x2E, 0xAF, 0xBA, 0x23, 0x9A, 0x7E |
.byte 0xD6, 0xB9, 0x2D, 0x38, 0x7F, 0x1F, 0x23, 0x5C, 0x53, 0xEE, 0xE8, 0x9F, 0xD6, 0xD1, 0x7E, 0x55 |
.byte 0x64, 0xA8, 0x9B, 0x42, 0x26, 0x12, 0x1B, 0xA5, 0x5D, 0x49, 0x54, 0x17, 0x6D, 0xEF, 0x95, 0x43 |
.byte 0xA8, 0xC3, 0x7C, 0x28, 0xE2, 0xA0, 0x84, 0x35, 0x8E, 0x6D, 0xD4, 0x64, 0x3E, 0x53, 0xBA, 0xA3 |
.byte 0xFC, 0x56, 0xE5, 0x22, 0x69, 0x01, 0xC8, 0xC6, 0x4B, 0x1D, 0xDD, 0xB8, 0x0C, 0x72, 0xFC, 0xB5 |
.byte 0x35, 0x79, 0xDD, 0x18, 0x19, 0x62, 0x4D, 0xA8, 0xCF, 0x21, 0x0D, 0x0D, 0x75, 0xC7, 0xB1, 0x71 |
.byte 0x1E, 0x96, 0x94, 0x87, 0x98, 0x5C, 0x4D, 0xE3, 0x7A, 0x2B, 0x9C, 0x86, 0x9E, 0x98, 0x3B, 0xD4 |
.byte 0x11, 0x19, 0xEC, 0x2B, 0x7B, 0x39, 0xD3, 0x4A, 0x5B, 0xE0, 0x58, 0xD0, 0xA8, 0x09, 0x41, 0xC7 |
.byte 0xA0, 0xD6, 0x4E, 0x38, 0x32, 0x9C, 0x1C, 0xAC, 0xC8, 0xB8, 0x33, 0x66, 0x50, 0x6F, 0x3B, 0x62 |
.byte 0x88, 0x27, 0x8E, 0x03, 0x61, 0x61, 0x4E, 0xBC, 0x42, 0xA6, 0x8D, 0xEB, 0xAF, 0xCF, 0xB2, 0x4F |
.byte 0xA5, 0x01, 0x88, 0xD8, 0x9E, 0xA4, 0x84, 0x66, 0x5C, 0xB8, 0xCD, 0xAD, 0x27, 0x08, 0x10, 0xAF |
.byte 0x30, 0x9E, 0xB3, 0x91, 0x00, 0x01, 0x4E, 0x42, 0xA7, 0xDB, 0x2E, 0x57, 0xAA, 0xE1, 0xA7, 0x50 |
.byte 0xE2, 0x2F, 0x28, 0x80, 0xD4, 0xAC, 0xE7, 0x30, 0x64, 0xB4, 0xDE, 0x8C, 0xBD, 0xEE, 0x3B, 0xED |
.byte 0x8D, 0xEE, 0x7E, 0x8D, 0xF0, 0xCC, 0xD0, 0x98, 0xA8, 0xFE, 0xEF, 0x53, 0xDF, 0x96, 0xA3, 0xC2 |
.byte 0xC6, 0xCB, 0x43, 0x9A, 0x78, 0x2A, 0xCB, 0xDD, 0xDF, 0xAA, 0x69, 0x9C, 0x98, 0xA5, 0x89, 0x25 |
.byte 0x94, 0x08, 0xB3, 0x84, 0xD5, 0x83, 0x1C, 0x7D, 0x82, 0x0C, 0xD0, 0x62, 0xA3, 0x73, 0x24, 0x69 |
.byte 0x3F, 0x68, 0x04, 0xB7, 0x92, 0xD0, 0x95, 0x72, 0x7A, 0xFE, 0x0F, 0x13, 0xA4, 0x98, 0x38, 0x38 |
.byte 0xA1, 0xEC, 0xBC, 0x76, 0x70, 0xD9, 0xF3, 0xF2, 0xE6, 0xC4, 0x55, 0x89, 0x38, 0x7A, 0xF3, 0x77 |
.byte 0xE2, 0xF7, 0x2F, 0x75, 0xC7, 0xC4, 0xE7, 0x41, 0xC2, 0xF6, 0x54, 0x67, 0x8F, 0x8D, 0x9F, 0x30 |
.byte 0x7A, 0x5C, 0xA7, 0xEA, 0x35, 0x9B, 0xDD, 0x1C, 0x5F, 0x32, 0xA5, 0x97, 0xAD, 0x98, 0x0F, 0x8F |
.byte 0x90, 0x3E, 0x04, 0x58, 0x02, 0xEC, 0x99, 0xC5, 0xE3, 0xEE, 0x2C, 0x72, 0x7C, 0xCB, 0xA3, 0xF7 |
.byte 0x27, 0x4A, 0xE1, 0x5D, 0xE6, 0xBF, 0x79, 0x45, 0xF2, 0x1F, 0xDD, 0x9F, 0xB7, 0xEC, 0x2F, 0x48 |
.byte 0x2A, 0x33, 0xA0, 0x2D, 0x20, 0x3A, 0xF2, 0x03, 0x29, 0x1E, 0x76, 0xA6, 0xEA, 0x19, 0x9D, 0x12 |
.byte 0x64, 0x7F, 0x6F, 0x4B, 0x3E, 0xE9, 0x90, 0x30, 0x08, 0x6E, 0xD0, 0xC0, 0x5B, 0xFF, 0x09, 0x86 |
.byte 0x33, 0xA9, 0xB3, 0x53, 0xE3, 0xA5, 0x57, 0x0C, 0xC4, 0xCD, 0xB2, 0xAE, 0xE7, 0x50, 0xC0, 0x4C |
.byte 0xCF, 0x30, 0x97, 0x0D, 0x19, 0x28, 0x3E, 0x22, 0x96, 0x0E, 0xE3, 0xF2, 0x0E, 0xEC, 0x78, 0x41 |
.byte 0x96, 0x2B, 0x95, 0x79, 0xD0, 0xED, 0x86, 0x95, 0xBA, 0x39, 0x43, 0xA2, 0x89, 0x04, 0xEE, 0x58 |
.byte 0x34, 0x85, 0x66, 0x4E, 0xAE, 0xA5, 0x71, 0x44, 0xB4, 0x55, 0x36, 0xC2, 0x42, 0xAE, 0x04, 0xD8 |
.byte 0xDA, 0x99, 0x52, 0xAA, 0x86, 0xD9, 0x40, 0x41, 0x12, 0x83, 0xE3, 0x9C, 0x87, 0xD2, 0xF5, 0xBC |
.byte 0x58, 0x5C, 0x0B, 0x06, 0x01, 0x7C, 0x4A, 0xB5, 0xD1, 0x81, 0x77, 0x14, 0x30, 0x7B, 0xEC, 0x0B |
.byte 0x15, 0x3E, 0xB6, 0x9C, 0x17, 0xF6, 0xDE, 0x2A, 0x79, 0xC1, 0xC7, 0x01, 0x94, 0xBC, 0xBE, 0xEC |
.byte 0x18, 0xC9, 0xF2, 0x19, 0x46, 0x3D, 0xCF, 0x18, 0xBF, 0x46, 0x2C, 0xF0, 0xC2, 0x18, 0xFB, 0xD8 |
.byte 0x57, 0xB1, 0x74, 0x6F, 0xA7, 0x52, 0x99, 0x21, 0x14, 0x60, 0x23, 0xA8, 0x1D, 0xE1, 0x95, 0x35 |
.byte 0xAB, 0x87, 0x4F, 0xF1, 0xC4, 0x1F, 0x09, 0x83, 0x66, 0x36, 0x73, 0x29, 0x4E, 0x6F, 0x01, 0xA6 |
.byte 0x20, 0x76, 0x15, 0xC7, 0xC9, 0xAF, 0xE9, 0xDE, 0x10, 0x0C, 0x86, 0x2D, 0xED, 0x1C, 0x63, 0x98 |
.byte 0xA3, 0xB3, 0x8A, 0x68, 0xD2, 0x93, 0xEB, 0x38, 0xCA, 0x5F, 0x61, 0x18, 0xCE, 0x63, 0xBF, 0xEF |
.byte 0xD9, 0xD4, 0xB6, 0xA2, 0x84, 0x9F, 0x80, 0x94, 0xAB, 0x07, 0xC1, 0x99, 0x23, 0x24, 0x32, 0xC7 |
.byte 0xD8, 0xBC, 0x2F, 0xAA, 0x50, 0x1B, 0xE3, 0x1A, 0x7A, 0x45, 0x33, 0x49, 0xA8, 0xF2, 0x38, 0x81 |
.byte 0xC7, 0xEF, 0x24, 0x4B, 0x8F, 0xA4, 0xDF, 0x3B, 0xAC, 0xA1, 0xD5, 0xD0, 0xC5, 0x07, 0x97, 0x9E |
.byte 0xC3, 0xC6, 0x48, 0x13, 0xE1, 0x2C, 0x2D, 0x5C, 0x71, 0x60, 0xA5, 0x19, 0x53, 0xDE, 0x9B, 0x1A |
.byte 0xCE, 0xBF, 0x66, 0x5D, 0x64, 0x45, 0x99, 0x11, 0xE6, 0x6E, 0xE1, 0xAC, 0x75, 0x78, 0x4A, 0x39 |
.byte 0x3E, 0x93, 0x4D, 0x20, 0xBF, 0x7A, 0x7C, 0x31, 0xDB, 0x22, 0x4B, 0x2F, 0x00, 0xE6, 0x49, 0xCF |
.byte 0xA6, 0xB0, 0x2C, 0x0B, 0xF5, 0xC6, 0x1C, 0xDC, 0x35, 0xFE, 0x89, 0xAA, 0x77, 0xD4, 0xE4, 0xB6 |
.byte 0x67, 0x31, 0xD6, 0x27, 0xAC, 0x52, 0x58, 0x88, 0x75, 0xA3, 0xB7, 0x75, 0x8A, 0x01, 0x44, 0x31 |
.byte 0xB1, 0x71, 0x3C, 0xA7, 0x38, 0x59, 0x83, 0x6D, 0x57, 0x0C, 0x18, 0xCF, 0xE1, 0xFC, 0x85, 0x48 |
.byte 0x2E, 0x5B, 0x70, 0xDA, 0xAE, 0xC9, 0x62, 0x23, 0x6D, 0x1A, 0x99, 0xF7, 0x1B, 0xDE, 0x28, 0xCD |
.byte 0x50, 0x65, 0x74, 0x88, 0xBE, 0xF8, 0xF5, 0x16, 0x05, 0x0D, 0xE5, 0xE6, 0x0A, 0x6B, 0x2F, 0x38 |
.byte 0xC7, 0x9F, 0x12, 0x76, 0x68, 0x75, 0x9A, 0xD5, 0x90, 0x33, 0xCD, 0xAC, 0x12, 0xF6, 0x79, 0x62 |
.byte 0x5B, 0xEE, 0xEA, 0x1A, 0xE6, 0xE0, 0x31, 0xEB, 0xED, 0x16, 0xD2, 0xF7, 0x82, 0x01, 0x30, 0x49 |
.byte 0xA0, 0x43, 0xBF, 0x09, 0xB8, 0x59, 0xDF, 0x48, 0x8D, 0xAC, 0xF5, 0x9F, 0xA3, 0x6E, 0x02, 0xFE |
.byte 0x5D, 0xEC, 0x19, 0x43, 0xCD, 0x4A, 0x2F, 0xBA, 0x61, 0x01, 0xB2, 0xE3, 0x02, 0xE2, 0x2D, 0xA3 |
.byte 0x25, 0xEC, 0xAC, 0xDE, 0x46, 0x8C, 0x27, 0xD4, 0x39, 0x1C, 0x73, 0xDC, 0x8B, 0x76, 0xDB, 0xE8 |
.byte 0x62, 0xF4, 0x2C, 0x30, 0x3F, 0x5C, 0xEA, 0xA0, 0x5D, 0x9D, 0x84, 0x60, 0x80, 0xB1, 0x04, 0xA6 |
.byte 0x9E, 0xB1, 0x85, 0xE5, 0x3D, 0xAC, 0xB9, 0x76, 0xC9, 0x2D, 0x53, 0x55, 0xA3, 0x2E, 0x3E, 0x06 |
.byte 0x23, 0x6A, 0x36, 0x62, 0xC7, 0x21, 0x03, 0x25, 0xBE, 0x87, 0x86, 0x3F, 0x39, 0x8A, 0xE5, 0xD8 |
.byte 0x3C, 0x6A, 0xBD, 0x7A, 0x17, 0x76, 0xF0, 0xE1, 0xA3, 0x44, 0x36, 0x47, 0x72, 0x75, 0x4D, 0x96 |
.byte 0xE0, 0x83, 0xF8, 0xA7, 0xA4, 0xFC, 0xCC, 0x63, 0x83, 0x52, 0xA2, 0xBD, 0xDD, 0x88, 0x95, 0x19 |
.byte 0xF3, 0x52, 0x93, 0x0B, 0xC9, 0x84, 0xEC, 0x6D, 0xC8, 0x23, 0xB4, 0x3B, 0x98, 0x02, 0xD1, 0x79 |
.byte 0x85, 0xCA, 0x20, 0x2A, 0xC6, 0xEC, 0x8E, 0x4A, 0x3F, 0x31, 0x08, 0x1C, 0xBA, 0x9D, 0x36, 0xAD |
.byte 0xF0, 0xC9, 0xB8, 0xBA, 0x4E, 0xA5, 0x27, 0x17, 0xC8, 0xDC, 0x52, 0x61, 0xDE, 0x24, 0xDA, 0x63 |
.byte 0xEE, 0xFB, 0x8E, 0xB5, 0xE8, 0x1D, 0x00, 0x27, 0x4E, 0x08, 0x44, 0x08, 0xA5, 0x7A, 0xB6, 0x96 |
.byte 0x44, 0x6F, 0x50, 0x92, 0x14, 0x77, 0xA9, 0xDD, 0x53, 0xFC, 0x3F, 0x31, 0x20, 0x19, 0x95, 0x0F |
.byte 0x15, 0x24, 0xC4, 0xFD, 0x41, 0xC4, 0x24, 0x90, 0xCC, 0x69, 0x99, 0x72, 0xE3, 0x4F, 0x09, 0x28 |
.byte 0xBF, 0x59, 0xBB, 0xD3, 0xD1, 0x64, 0xB1, 0x25, 0x61, 0xF0, 0x57, 0x81, 0x0A, 0xEC, 0x91, 0x1F |
.byte 0x11, 0x56, 0x1C, 0x52, 0x1B, 0x41, 0xE3, 0xE8, 0xAB, 0x7C, 0x5A, 0x8F, 0xCC, 0x64, 0xB7, 0x8C |
.byte 0xBD, 0x72, 0x5F, 0x8E, 0xD7, 0x11, 0xB4, 0x38, 0x01, 0x0B, 0xBA, 0x0B, 0xF8, 0x4B, 0x2B, 0x09 |
.byte 0xA2, 0x48, 0x5C, 0xBD, 0x89, 0x3F, 0xA5, 0x34, 0xBC, 0x00, 0xC3, 0x89, 0x64, 0x7B, 0x15, 0x22 |
.byte 0xED, 0x75, 0xB1, 0xC4, 0x86, 0x65, 0xFD, 0x88, 0x70, 0xB7, 0x94, 0x68, 0x03, 0xBF, 0x71, 0xA5 |
.byte 0x07, 0xCE, 0x63, 0x91, 0x0E, 0x08, 0xC6, 0xCA, 0x09, 0x8A, 0x54, 0x6D, 0x05, 0x69, 0x90, 0xF2 |
.byte 0xDF, 0x41, 0xB7, 0x66, 0xA6, 0xB4, 0xEE, 0x16, 0x6C, 0x83, 0x7F, 0x70, 0x43, 0xF1, 0x16, 0x4A |
.byte 0xBF, 0x79, 0xDC, 0xCD, 0x82, 0xA2, 0x98, 0x8B, 0x2C, 0xED, 0xF9, 0x32, 0x57, 0x89, 0x24, 0x36 |
.byte 0xCA, 0xDC, 0x9C, 0x71, 0x91, 0x8B, 0x88, 0xFE, 0x0F, 0x07, 0x6E, 0x52, 0xF9, 0x84, 0x9C, 0xB8 |
.byte 0xFE, 0x79, 0x86, 0x80, 0x1B, 0x1F, 0x0B, 0x48, 0x0C, 0x05, 0x7A, 0x63, 0x8E, 0x9F, 0x9A, 0x59 |
.byte 0x7C, 0x37, 0xCB, 0x0D, 0xC3, 0x53, 0x0C, 0xD2, 0x5B, 0x7A, 0x24, 0x54, 0xFF, 0xC1, 0x0D, 0xFE |
.byte 0x3A, 0x94, 0x7E, 0x56, 0xB3, 0x8A, 0x9F, 0xC0, 0x8F, 0x1A, 0x24, 0x1E, 0xB9, 0xBF, 0x78, 0x36 |
.byte 0xF6, 0x43, 0x44, 0xB9, 0x97, 0x50, 0x8C, 0xF2, 0xCB, 0xB0, 0x46, 0xCB, 0x72, 0x53, 0xC9, 0xAD |
.byte 0xE8, 0x47, 0x04, 0x9B, 0xD1, 0xA3, 0x5C, 0x61, 0xBD, 0x81, 0x80, 0x77, 0x40, 0xF8, 0xAD, 0x37 |
.byte 0x3C, 0xF1, 0xF0, 0xD3, 0x42, 0x7D, 0xC5, 0x0D, 0x2D, 0x0C, 0xD8, 0xA0, 0x60, 0xA1, 0x4D, 0x48 |
.byte 0xE8, 0x51, 0xE4, 0xBA, 0xF4, 0x41, 0x1B, 0xB2, 0xC2, 0x9B, 0x2A, 0x03, 0x94, 0xD8, 0x3A, 0xD0 |
.byte 0xC9, 0x2A, 0xA4, 0x0B, 0xA7, 0x69, 0x19, 0xD5, 0x76, 0xF1, 0x75, 0xD6, 0x92, 0xC3, 0x1F, 0x7B |
.byte 0x14, 0x03, 0x36, 0x09, 0x44, 0x52, 0xBC, 0x07, 0xEE, 0xE6, 0x0A, 0x82, 0xBE, 0x44, 0x53, 0x88 |
.byte 0x6F, 0xF7, 0x94, 0x17, 0x61, 0xAD, 0xED, 0xD8, 0x9F, 0x63, 0xAF, 0x32, 0x26, 0xCE, 0xAE, 0x3B |
.byte 0xD2, 0xE4, 0x44, 0x17, 0x36, 0x00, 0x1E, 0x25, 0xE7, 0x28, 0xA8, 0xA5, 0x6D, 0xFB, 0x2E, 0xDC |
.byte 0xF3, 0xC2, 0xF4, 0x55, 0x70, 0xE1, 0x2D, 0x0F, 0x44, 0xDC, 0x41, 0x6A, 0xAB, 0xEF, 0xA5, 0x7D |
.byte 0xD4, 0xEA, 0x94, 0x0B, 0xEB, 0xB3, 0x30, 0xD2, 0xDC, 0xD9, 0x78, 0x49, 0xD5, 0xA6, 0x26, 0xC8 |
.byte 0x68, 0x1A, 0x1E, 0xD9, 0xFC, 0x4B, 0xE8, 0x40, 0x28, 0x2A, 0xAB, 0xD3, 0x19, 0x51, 0x51, 0xEE |
.byte 0x3C, 0xE5, 0xF9, 0x27, 0x98, 0x2A, 0xFA, 0x74, 0x03, 0x72, 0xBE, 0xD8, 0x18, 0xE4, 0xA1, 0x81 |
.byte 0xFF, 0xBF, 0x5B, 0xFB, 0x0B, 0x43, 0x3C, 0x34, 0x6D, 0xE7, 0x07, 0x87, 0x39, 0x58, 0x75, 0x75 |
.byte 0x3E, 0x6F, 0x9C, 0xD7, 0x9A, 0x96, 0x4B, 0x9D, 0x08, 0x09, 0x76, 0x21, 0xEE, 0x17, 0xA3, 0xED |
.byte 0xD7, 0xFE, 0xE8, 0xE2, 0x42, 0x24, 0x16, 0xB0, 0x0C, 0x1E, 0x37, 0x45, 0x77, 0xAD, 0xBA, 0xB6 |
.byte 0x1D, 0x56, 0x8D, 0xB7, 0xED, 0xD8, 0x55, 0xF6, 0xE2, 0xCB, 0x18, 0xD0, 0xE3, 0xBC, 0xBE, 0xBA |
.byte 0xBB, 0xA7, 0x9D, 0xFD, 0xCB, 0xB4, 0xAD, 0xD8, 0xD2, 0xE5, 0x1D, 0x4A, 0x92, 0xD8, 0x00, 0xAF |
.byte 0x2F, 0x8D, 0x67, 0x1C, 0x66, 0xBC, 0x13, 0x48, 0x87, 0x2B, 0x19, 0x6A, 0xE7, 0xD7, 0x24, 0xA3 |
.byte 0x7E, 0xC2, 0xA0, 0x4A, 0x76, 0x4E, 0x23, 0x49, 0x33, 0x41, 0x93, 0xC5, 0x19, 0x94, 0x75, 0x49 |
.byte 0x22, 0xDD, 0x66, 0x88, 0x99, 0x79, 0xD1, 0x21, 0xA5, 0xEB, 0x8B, 0x8D, 0xC3, 0xB0, 0x30, 0x42 |
.byte 0x72, 0xD0, 0x8C, 0xE9, 0x1E, 0xB0, 0x32, 0x52, 0xF1, 0xC5, 0x18, 0x0B, 0x5A, 0x8D, 0x54, 0x7C |
.byte 0x6A, 0xBA, 0x04, 0x04, 0x34, 0xD6, 0x25, 0xD9, 0xC1, 0xB1, 0x66, 0x84, 0x62, 0x97, 0xC6, 0xD5 |
.byte 0x67, 0x53, 0xBE, 0x86, 0x03, 0xF0, 0xD8, 0xF5, 0xB6, 0xF0, 0x00, 0x10, 0x7E, 0x55, 0x8C, 0xE9 |
.byte 0x10, 0x91, 0xEE, 0x44, 0x67, 0x13, 0x1E, 0x29, 0xC5, 0x84, 0xAE, 0x27, 0x1B, 0x74, 0xFD, 0x83 |
.byte 0xC8, 0xBB, 0x0A, 0xCC, 0xAC, 0xE3, 0xC1, 0x62, 0xD4, 0xC2, 0x72, 0x53, 0x18, 0xFF, 0x3D, 0x28 |
.byte 0x90, 0x2B, 0x6D, 0xF8, 0x3F, 0x8B, 0x21, 0x04, 0x0F, 0xCF, 0x2C, 0x2B, 0x44, 0x29, 0xAF, 0x0D |
.byte 0xE5, 0xB9, 0xD9, 0x91, 0x9D, 0x9B, 0xF3, 0x71, 0x5E, 0x66, 0xC5, 0x76, 0x65, 0x02, 0x9F, 0xF6 |
.byte 0x2D, 0x0C, 0xEF, 0x6D, 0x97, 0x11, 0x72, 0xA7, 0xE1, 0x9E, 0xD2, 0x25, 0xC8, 0x81, 0x33, 0xAD |
.byte 0x3B, 0x0C, 0x3E, 0xD9, 0xA8, 0x32, 0x4B, 0x06, 0x98, 0x10, 0x7D, 0xFE, 0x12, 0x1C, 0xF5, 0x40 |
.byte 0x28, 0xE4, 0xAE, 0xBF, 0xF6, 0x20, 0x66, 0xD7, 0xBE, 0x39, 0xFD, 0x87, 0xBB, 0x30, 0x34, 0xF7 |
.byte 0x3C, 0x73, 0xD0, 0xE5, 0xA5, 0x1B, 0xEB, 0x3D, 0x2C, 0x68, 0x3C, 0x3F, 0x85, 0x31, 0x80, 0xAD |
.byte 0x16, 0x2E, 0x6D, 0x0C, 0x4E, 0xD3, 0xE3, 0x0D, 0x0D, 0xE0, 0x94, 0xC8, 0x10, 0xC9, 0xBF, 0x4D |
.byte 0x3C, 0x90, 0x32, 0xE2, 0xAC, 0x1E, 0x1F, 0xD8, 0x87, 0x5B, 0x18, 0x0C, 0x8D, 0x98, 0xB9, 0xA3 |
.byte 0xC6, 0x27, 0xAF, 0x15, 0xFA, 0x92, 0x22, 0x08, 0x73, 0xB7, 0xD0, 0x84, 0x81, 0x90, 0xD1, 0xBE |
.byte 0x21, 0x04, 0xA0, 0xCD, 0x23, 0xC0, 0xA6, 0xAA, 0x1B, 0xBE, 0xB7, 0xA9, 0x56, 0x71, 0x4C, 0x1D |
.byte 0x98, 0xFB, 0x32, 0x93, 0x8E, 0x55, 0x9B, 0x01, 0x0C, 0x6C, 0x85, 0x8E, 0xFD, 0x57, 0x4C, 0x1E |
.byte 0x5C, 0xEC, 0xEC, 0x7F, 0xAC, 0x92, 0x2A, 0xC8, 0x51, 0xE2, 0x71, 0xA7, 0x53, 0xBE, 0xC5, 0xEB |
.byte 0xBA, 0xF7, 0x7E, 0x48, 0x4C, 0x1A, 0x49, 0x59, 0x86, 0xCF, 0xE7, 0x83, 0x27, 0x33, 0xA2, 0x83 |
.byte 0x20, 0x8E, 0x03, 0xCC, 0x21, 0x2D, 0x95, 0x72, 0x0F, 0x07, 0x1A, 0x63, 0xC5, 0xDF, 0x4E, 0x7F |
.byte 0xD7, 0xCD, 0xC7, 0x24, 0xE7, 0x11, 0x7D, 0x6E, 0xE1, 0x65, 0xF2, 0x08, 0x99, 0x94, 0x8B, 0xB9 |
.byte 0x23, 0x8E, 0x86, 0x44, 0xBC, 0x1C, 0xB6, 0xCC, 0x23, 0xD1, 0x2F, 0xE9, 0xB0, 0x7E, 0x68, 0x87 |
.byte 0x4C, 0x30, 0xAB, 0x33, 0x42, 0x29, 0xA2, 0x23, 0x8E, 0x94, 0x2C, 0x28, 0x29, 0xB8, 0xE1, 0x4C |
.byte 0x47, 0x68, 0x91, 0x03, 0x84, 0x47, 0xD0, 0xA8, 0x18, 0x00, 0x91, 0xC9, 0x7F, 0xF9, 0x51, 0xCB |
.byte 0x2A, 0xFC, 0xFE, 0x6C, 0x26, 0xA1, 0x90, 0xB4, 0x35, 0xBC, 0xDC, 0x5E, 0x74, 0xBE, 0xAB, 0xBC |
.byte 0x26, 0x3C, 0xC0, 0xAB, 0x84, 0x90, 0x53, 0x9D, 0x91, 0xE4, 0x66, 0x10, 0xDE, 0xB8, 0xDB, 0x08 |
.byte 0xB4, 0xDA, 0x75, 0xDA, 0x7B, 0x05, 0x8F, 0xB1, 0xC2, 0x6C, 0x10, 0x37, 0x2B, 0xBB, 0xF3, 0x52 |
.byte 0xF8, 0xB3, 0xFD, 0x7C, 0x43, 0x51, 0x19, 0xD5, 0x35, 0x80, 0xE5, 0x14, 0x38, 0xC0, 0x1C, 0xED |
.byte 0x9B, 0x91, 0xC8, 0x16, 0x97, 0x58, 0xC7, 0x59, 0xC5, 0xD7, 0x90, 0xF0, 0x93, 0x83, 0x42, 0x8B |
.byte 0x36, 0x40, 0x08, 0x7A, 0x91, 0x22, 0x4F, 0xC7, 0xA3, 0x34, 0xDC, 0xDB, 0xF5, 0xF8, 0xC9, 0x90 |
.byte 0x8A, 0x92, 0xA7, 0x21, 0xEA, 0x6E, 0x7B, 0xB0, 0x46, 0x0B, 0xA0, 0xDA, 0x8E, 0xE3, 0x65, 0xC5 |
.byte 0x24, 0x6E, 0x3F, 0xB5, 0x90, 0x8F, 0x7D, 0x33, 0xC3, 0x59, 0x0F, 0xB9, 0x52, 0xD8, 0x49, 0xDD |
.byte 0x6B, 0xF0, 0xFF, 0x56, 0x5F, 0x7A, 0x06, 0xA6, 0x85, 0xA7, 0x80, 0x14, 0x8A, 0xE6, 0xDA, 0xAE |
.byte 0x54, 0x19, 0x64, 0xE4, 0xA9, 0xE2, 0x18, 0x6C, 0x3C, 0x27, 0x26, 0x8F, 0x00, 0x70, 0x6C, 0x6B |
.byte 0x61, 0x6B, 0xC1, 0xC0, 0xE5, 0xC7, 0x67, 0x6B, 0x6F, 0xE8, 0x80, 0xF9, 0xCE, 0x5A, 0xA8, 0x23 |
.byte 0x73, 0x0D, 0x08, 0x1C, 0xF0, 0x20, 0x89, 0x2C, 0x47, 0xB0, 0xBC, 0x47, 0x20, 0x28, 0xB3, 0x81 |
.byte 0x94, 0x74, 0x41, 0x79, 0x3C, 0xA9, 0xE5, 0xAB, 0x91, 0x65, 0xA5, 0x60, 0xBF, 0x4E, 0x84, 0x33 |
.byte 0x5B, 0x8C, 0x50, 0x4C, 0xAC, 0xDA, 0x79, 0xF4, 0x8A, 0x35, 0x3C, 0xAA, 0x5D, 0xEF, 0x2B, 0xF2 |
.byte 0x64, 0x6D, 0x6C, 0xA0, 0x17, 0x51, 0x4C, 0xA8, 0xB6, 0xF1, 0x09, 0x76, 0x3F, 0x8D, 0xA9, 0x9B |
.byte 0x1A, 0xFA, 0xE7, 0xC7, 0xD4, 0x60, 0xBB, 0x5E, 0x96, 0xF8, 0x09, 0xF4, 0xE7, 0x34, 0xE6, 0x4C |
.byte 0xA2, 0x52, 0xED, 0xB9, 0xA3, 0x39, 0x62, 0x5A, 0x2A, 0x6B, 0xD0, 0x6A, 0xF8, 0x7A, 0x05, 0x12 |
.byte 0x74, 0xED, 0xD9, 0x48, 0x4E, 0x95, 0xA7, 0xE4, 0x8D, 0xB0, 0xD8, 0x75, 0xE5, 0xBE, 0xC2, 0x87 |
.byte 0x10, 0xAF, 0x41, 0xB4, 0xE8, 0xA3, 0x0E, 0x13, 0x0E, 0xDF, 0x7D, 0x07, 0x59, 0x83, 0x1A, 0xCD |
.byte 0x70, 0xF4, 0x16, 0xBE, 0x89, 0xBE, 0xA3, 0x17, 0x6E, 0x7B, 0x8D, 0x54, 0x39, 0x4F, 0xDB, 0x4A |
.byte 0xFE, 0x1C, 0xFE, 0xE7, 0xC0, 0x0D, 0xFA, 0xCE, 0xEC, 0x77, 0xD5, 0x46, 0xFA, 0xF0, 0x14, 0x6B |
.byte 0xE4, 0x2A, 0x29, 0x6E, 0xE9, 0xCC, 0x85, 0x57, 0x48, 0x13, 0xAC, 0x82, 0x63, 0x88, 0xCC, 0x62 |
.byte 0xA5, 0xCB, 0x49, 0x65, 0xD9, 0x43, 0x33, 0xC5, 0xBB, 0x09, 0x0B, 0xB6, 0xF9, 0x1F, 0x21, 0xDD |
.byte 0x4A, 0x4B, 0x4B, 0x33, 0x18, 0xD1, 0x8B, 0x60, 0xE4, 0x37, 0xE3, 0x48, 0xBF, 0xAF, 0xAA, 0x65 |
.byte 0x7B, 0xF3, 0xCA, 0x54, 0x37, 0xFE, 0x1A, 0xF2, 0x07, 0x25, 0xA9, 0x01, 0x45, 0xCA, 0xDF, 0x8F |
.byte 0x16, 0x2B, 0xC3, 0x2E, 0xFD, 0x4E, 0x8F, 0xE2, 0x86, 0x72, 0x2A, 0x46, 0x22, 0xD4, 0xAB, 0x9D |
.byte 0xC7, 0x75, 0xF2, 0xFE, 0x73, 0x0C, 0xF1, 0x7B, 0x32, 0x9A, 0x7D, 0x77, 0x65, 0x5C, 0x07, 0x7B |
.byte 0x88, 0xCA, 0xAA, 0x85, 0x19, 0x39, 0x67, 0x9F, 0xAB, 0x91, 0xE6, 0xCD, 0x65, 0x91, 0x6B, 0x2C |
.byte 0x06, 0x5D, 0x2B, 0x7A, 0x6A, 0x1D, 0xF6, 0x9C, 0xB7, 0x73, 0x14, 0x1D, 0xD0, 0x1B, 0x98, 0x58 |
.byte 0xE6, 0x42, 0xDD, 0xFF, 0x7C, 0x44, 0x9F, 0x27, 0xD5, 0x85, 0xF5, 0x3A, 0x16, 0x61, 0x67, 0x1D |
.byte 0xBF, 0x93, 0x98, 0x2A, 0xB0, 0x8E, 0xC6, 0x68, 0x02, 0xDA, 0x85, 0xD2, 0xF5, 0x1E, 0x2A, 0xDB |
.byte 0x61, 0x07, 0xDB, 0xDD, 0x4B, 0x7A, 0x05, 0x21, 0xFF, 0xFB, 0x5C, 0x16, 0x5D, 0xC4, 0x34, 0x1D |
.byte 0x57, 0xCC, 0x47, 0x08, 0x5B, 0x0D, 0x71, 0x5D, 0xE8, 0xF7, 0x2F, 0xDE, 0x16, 0x5A, 0xBA, 0x77 |
.byte 0x61, 0x95, 0x55, 0xAD, 0x10, 0x5A, 0xCF, 0x10, 0x56, 0x2B, 0x26, 0xB3, 0xF0, 0x5A, 0xD1, 0x48 |
.byte 0x27, 0x18, 0x50, 0x82, 0x25, 0xC2, 0xDF, 0x0E, 0xB9, 0x0F, 0xEC, 0xD0, 0x69, 0xA6, 0x47, 0xCB |
.byte 0x3C, 0x9D, 0x79, 0x4C, 0xF8, 0x48, 0x5C, 0x4E, 0x74, 0x83, 0x02, 0x64, 0xDD, 0xD3, 0xAC, 0x05 |
.byte 0xEB, 0xFD, 0x87, 0x11, 0xC0, 0x66, 0x20, 0x7A, 0x76, 0x0C, 0x4A, 0xDF, 0xB3, 0x92, 0xAB, 0xEF |
.byte 0x2F, 0x24, 0x3B, 0x27, 0x6D, 0x98, 0x76, 0xE1, 0x1B, 0x78, 0x46, 0xF9, 0x4C, 0xF3, 0xFE, 0x38 |
.byte 0xF1, 0x85, 0x4A, 0xB1, 0xEC, 0x6A, 0x2C, 0x62, 0x77, 0x76, 0x42, 0x2A, 0x09, 0xED, 0x19, 0x38 |
.byte 0x11, 0x54, 0x60, 0x7E, 0xED, 0xD6, 0x60, 0x08, 0x4F, 0xA7, 0x02, 0x9C, 0x9B, 0x00, 0xD4, 0x8C |
.byte 0x86, 0x1F, 0x3E, 0x73, 0x8A, 0x6A, 0xD5, 0x01, 0xE1, 0x18, 0x2B, 0xEA, 0x05, 0x44, 0x23, 0x16 |
.byte 0x99, 0x83, 0x95, 0x86, 0x59, 0xF6, 0x8F, 0xA9, 0x9D, 0x92, 0x45, 0x38, 0x93, 0x1A, 0xC5, 0x19 |
.byte 0x39, 0x03, 0x8D, 0xC3, 0x6E, 0x63, 0xC5, 0x50, 0x7B, 0xF0, 0x3B, 0x80, 0x35, 0x5E, 0x97, 0xCE |
.byte 0xE2, 0x2C, 0x55, 0x3C, 0x23, 0xE5, 0xE5, 0xC0, 0x77, 0x2B, 0xF9, 0x0B, 0x45, 0xBE, 0x25, 0x7F |
.byte 0xC2, 0xB2, 0x42, 0x31, 0x15, 0x07, 0x81, 0x90, 0xF8, 0xBC, 0x10, 0x2D, 0x1B, 0xA7, 0xFC, 0xFD |
.byte 0xD4, 0x52, 0x3A, 0xF7, 0x38, 0x1F, 0xB8, 0xB0, 0x4A, 0xB1, 0xBB, 0x90, 0x70, 0xE0, 0x0F, 0x33 |
.byte 0x92, 0x51, 0x64, 0xA8, 0x59, 0xE6, 0x38, 0x52, 0xA3, 0x49, 0x7F, 0xBE, 0xF1, 0x7C, 0xBC, 0xC6 |
.byte 0xCF, 0xF6, 0xBD, 0x07, 0x16, 0x76, 0xB7, 0x60, 0x28, 0x73, 0xF1, 0x98, 0x53, 0x00, 0xCC, 0xE6 |
.byte 0x52, 0x30, 0x8E, 0xAC, 0x16, 0xC7, 0xFE, 0xBA, 0x10, 0x7E, 0x78, 0x01, 0xFA, 0x35, 0xC7, 0xCA |
.byte 0x2B, 0x85, 0xD1, 0x41, 0xFB, 0x89, 0xA2, 0x24, 0xFC, 0x93, 0xBC, 0x50, 0x94, 0x89, 0x36, 0xE6 |
.byte 0xB9, 0xC5, 0x92, 0xD0, 0x8C, 0x90, 0x8A, 0x9D, 0x0F, 0x03, 0x9F, 0x0A, 0x38, 0x67, 0xD4, 0x64 |
.byte 0xED, 0xA6, 0xA6, 0xE8, 0x2F, 0x49, 0x0D, 0x2C, 0xDD, 0xCA, 0x7C, 0x71, 0x53, 0xB3, 0x57, 0x0C |
.byte 0x79, 0xE9, 0xDD, 0x05, 0x7A, 0x68, 0xA3, 0x89, 0x6B, 0x42, 0x93, 0xA4, 0xA9, 0x67, 0x09, 0x96 |
.byte 0x0D, 0xAF, 0x7F, 0x3D, 0xF8, 0x8C, 0x6A, 0xD5, 0x57, 0xE6, 0x47, 0xAA, 0x9A, 0x9E, 0xB6, 0x14 |
.byte 0x88, 0x94, 0x1A, 0x03, 0xFD, 0xBD, 0x8D, 0x69, 0xFF, 0x20, 0x0D, 0xA9, 0x88, 0x16, 0x40, 0x96 |
.byte 0xC6, 0xC0, 0xD4, 0xBE, 0x4D, 0x3E, 0x94, 0xA4, 0x25, 0xDB, 0x4E, 0xC0, 0x7A, 0x05, 0xD4, 0x03 |
.byte 0x9A, 0xEE, 0x06, 0x97, 0xAB, 0x93, 0x00, 0xAB, 0xB4, 0x0D, 0x55, 0x3D, 0x24, 0x96, 0xD4, 0xEB |
.byte 0x56, 0xA8, 0xA9, 0xA4, 0xE7, 0x3E, 0x48, 0x0D, 0x1A, 0x97, 0xCD, 0x94, 0x9C, 0xA1, 0x97, 0x36 |
.byte 0x90, 0x9D, 0xCE, 0x3C, 0x31, 0xCE, 0xE7, 0xE6, 0xDC, 0x3D, 0x23, 0x00, 0xD3, 0xF8, 0xEB, 0x29 |
.byte 0xA0, 0x95, 0xCD, 0x88, 0xD4, 0x16, 0x95, 0xEE, 0xAD, 0x62, 0x82, 0x4A, 0x04, 0x1A, 0x81, 0x94 |
.byte 0xB8, 0x4F, 0xD1, 0xE9, 0x1D, 0xB8, 0xCF, 0xF9, 0xF6, 0xF3, 0xFA, 0xC9, 0xEB, 0xE6, 0xF3, 0x8C |
.byte 0x7C, 0xC1, 0x14, 0x50, 0xD7, 0xAA, 0x3F, 0x85, 0x0D, 0xC1, 0xCF, 0x12, 0xDB, 0x51, 0xA7, 0x93 |
.byte 0xA0, 0x78, 0x7D, 0xBD, 0x31, 0x4D, 0xB7, 0x27, 0x40, 0xB2, 0xF0, 0x2C, 0x99, 0xE4, 0xB8, 0x15 |
.byte 0xA5, 0xCD, 0x66, 0x7D, 0x78, 0xA5, 0x02, 0x85, 0x67, 0xD2, 0x97, 0x43, 0x23, 0x3E, 0xD7, 0xC4 |
.byte 0xB7, 0x55, 0x82, 0xE8, 0xA2, 0x39, 0x0F, 0xE3, 0xEC, 0xFF, 0x0F, 0x85, 0xE3, 0xC8, 0x9B, 0x89 |
.byte 0x96, 0x02, 0x06, 0x0E, 0xA8, 0x09, 0x93, 0x10, 0xDC, 0x2B, 0x53, 0xFF, 0x6A, 0x2B, 0xC4, 0x21 |
.byte 0x80, 0x46, 0x09, 0x22, 0x80, 0x19, 0x06, 0x6C, 0x18, 0x15, 0xF2, 0xFC, 0xDD, 0x8E, 0x86, 0x74 |
.byte 0x91, 0x8C, 0x82, 0x3A, 0x95, 0x16, 0x4A, 0x72, 0x42, 0x9E, 0x71, 0xAC, 0xC9, 0x35, 0xCE, 0x49 |
.byte 0x7C, 0xD8, 0x6C, 0xFC, 0xF1, 0x72, 0x69, 0x0A, 0x87, 0x5C, 0x06, 0x65, 0xEA, 0x8C, 0xD9, 0x7C |
.byte 0x19, 0x5C, 0xB6, 0xAF, 0x72, 0x00, 0x21, 0xB4, 0x9E, 0x93, 0x61, 0x67, 0xC9, 0x2F, 0xB1, 0x45 |
.byte 0x08, 0x1D, 0x42, 0xF9, 0x8F, 0xAB, 0x03, 0x17, 0x07, 0x0A, 0x7D, 0xF2, 0x97, 0x57, 0x6E, 0xB0 |
.byte 0xB3, 0x24, 0x60, 0x26, 0x24, 0x81, 0xDB, 0xC2, 0x15, 0x3C, 0x2A, 0xDE, 0x6C, 0xDB, 0x24, 0x74 |
.byte 0xF9, 0x66, 0x6D, 0x89, 0x11, 0x71, 0xA1, 0x19, 0x7B, 0x1F, 0x0B, 0x12, 0x76, 0x79, 0xC3, 0x2A |
.byte 0x9D, 0x23, 0x51, 0xC2, 0xA5, 0x2C, 0x85, 0xBA, 0x68, 0xAF, 0x98, 0xD5, 0x8B, 0xBC, 0x49, 0x85 |
.byte 0x23, 0xB7, 0x0F, 0x34, 0x29, 0xB0, 0x4D, 0xA4, 0xCF, 0x59, 0xB7, 0x46, 0xD2, 0x7B, 0x71, 0x70 |
.byte 0x9E, 0xC2, 0x32, 0x43, 0xEE, 0xB7, 0xFE, 0x57, 0x67, 0x96, 0x2D, 0xF3, 0x53, 0x76, 0x78, 0x76 |
.byte 0x2E, 0x87, 0xAB, 0x57, 0x38, 0xF9, 0xFC, 0x08, 0x52, 0xB3, 0x4E, 0x24, 0x2E, 0xC0, 0x95, 0xCD |
.byte 0x82, 0xC7, 0x11, 0x71, 0x7E, 0x0F, 0xC9, 0xE6, 0xA6, 0xF6, 0xD9, 0xFA, 0x6D, 0x52, 0x71, 0x9C |
.byte 0xDA, 0x1D, 0xF3, 0x13, 0x16, 0xF0, 0x1B, 0x68, 0xA3, 0x6A, 0x8D, 0xD2, 0x2A, 0x22, 0xA0, 0xAD |
.byte 0xEA, 0xB2, 0x1E, 0x69, 0xC2, 0xE8, 0x4F, 0x69, 0xDF, 0x29, 0x63, 0x4C, 0x7C, 0xD5, 0xE8, 0x56 |
.byte 0xF2, 0xDC, 0x69, 0x08, 0xCC, 0x85, 0x71, 0x70, 0xEF, 0xFF, 0x43, 0x19, 0x22, 0xE4, 0xC6, 0x0C |
.byte 0x96, 0xE5, 0x75, 0x59, 0xCE, 0xC5, 0xC2, 0xAD, 0xEE, 0x26, 0xF9, 0x6A, 0xFB, 0xE2, 0xC1, 0xED |
.byte 0xBF, 0x2B, 0xF6, 0x8C, 0xB0, 0x67, 0xFD, 0x9F, 0x67, 0x40, 0xB9, 0x89, 0x25, 0x7F, 0x95, 0xBB |
.byte 0x65, 0x0B, 0x14, 0x33, 0xD0, 0xD7, 0xE0, 0xBE, 0xFD, 0xDA, 0x29, 0xF8, 0xBD, 0xEA, 0xE6, 0x7D |
.byte 0x15, 0xDC, 0x09, 0xC6, 0x44, 0x06, 0x66, 0xAB, 0x47, 0x1F, 0x34, 0x6C, 0x9F, 0xCA, 0x28, 0x04 |
.byte 0xD5, 0x3D, 0x38, 0xA5, 0x14, 0x19, 0x64, 0x11, 0xF4, 0x8D, 0x0A, 0xB2, 0x78, 0xF0, 0x2F, 0x8E |
.byte 0xCC, 0x38, 0x54, 0x10, 0x3F, 0xBA, 0xBC, 0x86, 0xD9, 0xF1, 0xF3, 0x79, 0xBB, 0x1B, 0x7D, 0x91 |
.byte 0x59, 0xB6, 0x36, 0x6D, 0xCF, 0x9B, 0x7F, 0xC4, 0x28, 0x89, 0x76, 0xA0, 0x79, 0xA5, 0x2E, 0x46 |
.byte 0xDE, 0x83, 0x57, 0x1D, 0x3D, 0x13, 0xA4, 0x17, 0x04, 0x98, 0x90, 0xC0, 0xB3, 0x0E, 0x51, 0x0D |
.byte 0xC4, 0x88, 0x7A, 0x94, 0x23, 0xFA, 0x58, 0x4C, 0x84, 0xCE, 0xEC, 0xFD, 0x74, 0x1B, 0x44, 0x52 |
.byte 0x9E, 0x9B, 0x70, 0xDC, 0xAF, 0x14, 0xF3, 0xB4, 0xAD, 0x84, 0x75, 0x61, 0x92, 0xC6, 0x6E, 0x56 |
.byte 0x4F, 0xE9, 0xEB, 0x73, 0xE3, 0x43, 0xBF, 0x67, 0x12, 0xAC, 0x65, 0x86, 0xC8, 0xAA, 0xD8, 0x66 |
.byte 0x45, 0x48, 0x43, 0xF5, 0x5D, 0x36, 0xA9, 0x0A, 0xBA, 0x1E, 0x6B, 0x4D, 0xE5, 0xDA, 0xA4, 0x35 |
.byte 0xC3, 0x8F, 0xA8, 0xA7, 0xD3, 0x68, 0x0E, 0xE5, 0x15, 0x74, 0x6B, 0xDD, 0x1E, 0x44, 0x44, 0x64 |
.byte 0x8D, 0x87, 0x59, 0xEB, 0xBE, 0x03, 0xF6, 0x79, 0x22, 0x62, 0xC6, 0x07, 0x3C, 0x6A, 0x3D, 0xFF |
.byte 0xFA, 0xE5, 0xA6, 0xCD, 0x4E, 0xB5, 0xB2, 0x63, 0x29, 0x1E, 0x41, 0x48, 0x63, 0x86, 0xAC, 0xF0 |
.byte 0x0E, 0x05, 0xDC, 0xCD, 0x09, 0xD2, 0x46, 0x2B, 0x34, 0x0D, 0x32, 0x70, 0x78, 0x6F, 0x70, 0x72 |
.byte 0x55, 0x17, 0x3F, 0xA4, 0xCC, 0xF2, 0x08, 0xF6, 0x11, 0x4A, 0x3E, 0x74, 0xD0, 0xEA, 0x65, 0xDF |
.byte 0xF0, 0x41, 0xAC, 0xF9, 0x13, 0xF2, 0x24, 0x48, 0xFF, 0x57, 0xB9, 0x77, 0xC7, 0x29, 0xEA, 0x1D |
.byte 0x40, 0x29, 0xC1, 0x0D, 0x1B, 0xCA, 0x03, 0x2D, 0x14, 0x41, 0xA1, 0xE5, 0x2C, 0x06, 0xC4, 0x1C |
.byte 0x48, 0x70, 0x16, 0x5C, 0x62, 0x3B, 0xA4, 0x62, 0x93, 0x5E, 0xDA, 0x5A, 0x87, 0xC4, 0x78, 0xC8 |
.byte 0xEE, 0x3A, 0xD6, 0x0A, 0x04, 0xD9, 0x37, 0x18, 0x1B, 0xD8, 0xFD, 0x48, 0xDF, 0xC1, 0x65, 0x27 |
.byte 0x32, 0x7B, 0x83, 0x94, 0xB7, 0x28, 0xF7, 0x4A, 0x86, 0xD2, 0xA5, 0x0E, 0x96, 0x1D, 0xD7, 0x85 |
.byte 0x57, 0xAD, 0x8F, 0x5C, 0x87, 0xC6, 0x75, 0xA3, 0x9F, 0x73, 0xEC, 0x7F, 0x35, 0x51, 0xA6, 0x67 |
.byte 0xCD, 0x2A, 0xFC, 0x84, 0x53, 0xF3, 0xCE, 0xDA, 0xC5, 0x73, 0xE8, 0x5C, 0x91, 0xC0, 0xE1, 0xE8 |
.byte 0x6E, 0x70, 0x45, 0xF6, 0x37, 0xBA, 0x9A, 0xD7, 0x2D, 0x86, 0x56, 0x62, 0xD7, 0xFD, 0xCA, 0xA4 |
.byte 0x28, 0xC6, 0x29, 0x7B, 0xB9, 0xF7, 0x55, 0x7E, 0x6B, 0x3E, 0xDB, 0xFC, 0xFE, 0xBC, 0xE5, 0x6D |
.byte 0x2D, 0x2A, 0x63, 0x64, 0xE5, 0xFD, 0x3B, 0x12, 0x84, 0x92, 0x75, 0x5B, 0x8F, 0x3F, 0x00, 0xB7 |
.byte 0x05, 0x2A, 0x32, 0xBF, 0x22, 0x88, 0x3E, 0x8D, 0xC6, 0x19, 0x8A, 0xC5, 0xD5, 0x70, 0x32, 0x03 |
.byte 0x9A, 0x96, 0x67, 0x80, 0x94, 0xA3, 0x93, 0x18, 0x35, 0x08, 0x74, 0xC4, 0x48, 0x74, 0x7C, 0x4E |
.byte 0x9F, 0xAF, 0x0D, 0xC1, 0x37, 0x4B, 0x4F, 0xFE, 0x65, 0xD9, 0xC4, 0x3B, 0x49, 0xF7, 0x3E, 0xE4 |
.byte 0x8D, 0xA5, 0x64, 0x22, 0x49, 0xF7, 0x3A, 0x7E, 0x00, 0xAE, 0x43, 0x49, 0x23, 0xC0, 0x97, 0xC2 |
.byte 0x6F, 0xA4, 0x83, 0xA7, 0xF0, 0xD2, 0xA6, 0x55, 0xAC, 0x6A, 0x90, 0xF6, 0x61, 0xCF, 0xDA, 0xEF |
.byte 0x74, 0x3F, 0x11, 0xBD, 0x37, 0x4C, 0x3C, 0x38, 0xFA, 0x80, 0x81, 0x1E, 0x40, 0x18, 0xE0, 0xAF |
.byte 0xBD, 0x64, 0x57, 0xAE, 0x37, 0xFD, 0x04, 0xE4, 0x67, 0x95, 0xDA, 0xC9, 0x64, 0xB5, 0xB9, 0xD8 |
.byte 0xF5, 0xCB, 0x96, 0x2C, 0x17, 0xD3, 0x64, 0x12, 0x54, 0xE6, 0x30, 0x94, 0xFE, 0x11, 0x44, 0xBC |
.byte 0x76, 0x9B, 0x6A, 0xAE, 0x99, 0x6E, 0x92, 0x00, 0x03, 0x6D, 0xCA, 0x67, 0x22, 0x84, 0x40, 0x17 |
.byte 0x4F, 0xD7, 0x44, 0x67, 0xAB, 0xA8, 0x79, 0xFF, 0x8E, 0xAA, 0x94, 0x8D, 0xBC, 0xD8, 0x49, 0x32 |
.byte 0x74, 0xB4, 0xE0, 0x0D, 0x22, 0x73, 0x0E, 0x26, 0xE0, 0xD9, 0x8E, 0x02, 0x5D, 0xCE, 0x1A, 0xAC |
.byte 0xA6, 0x5E, 0x14, 0x51, 0x07, 0x8D, 0x51, 0x96, 0x38, 0xE5, 0x23, 0xF4, 0xBE, 0x6D, 0x26, 0x32 |
.byte 0x21, 0x07, 0x40, 0x44, 0x7A, 0x4E, 0x6A, 0x5A, 0x28, 0xF8, 0x5D, 0x85, 0xC7, 0x77, 0x32, 0x6E |
.byte 0xD5, 0x46, 0xC0, 0xDC, 0xD4, 0x11, 0x72, 0x0C, 0xF6, 0x96, 0x00, 0xB4, 0x03, 0x27, 0xE7, 0x25 |
.byte 0x2F, 0x28, 0x69, 0xA9, 0x76, 0xD3, 0x04, 0x9F, 0xCC, 0x61, 0x24, 0x94, 0xD9, 0x56, 0x02, 0xAE |
.byte 0x9C, 0xC2, 0x8B, 0x70, 0xD4, 0xFE, 0x7D, 0xCB, 0x94, 0x7D, 0x7F, 0x98, 0xA5, 0x67, 0xBD, 0xD4 |
.byte 0x8F, 0x26, 0x7E, 0x06, 0xFA, 0x83, 0xA5, 0xC7, 0xE5, 0xCA, 0x5B, 0xBE, 0x20, 0x5E, 0x6D, 0xBD |
.byte 0x21, 0xF8, 0x2E, 0xF5, 0xF6, 0xAB, 0xC0, 0x8B, 0x29, 0x40, 0x23, 0xCF, 0xA8, 0xE0, 0xA3, 0x37 |
.byte 0x07, 0x22, 0x3E, 0x02, 0xA5, 0xE3, 0xC9, 0x8A, 0xAD, 0x25, 0x49, 0xCE, 0x83, 0xB6, 0x8C, 0xA4 |
.byte 0xAE, 0xBA, 0x99, 0xA5, 0x65, 0x5A, 0x30, 0x8F, 0x9A, 0x54, 0x5E, 0x42, 0x35, 0x02, 0x7A, 0x3C |
.byte 0x24, 0xB8, 0x3E, 0xCA, 0x9C, 0x08, 0x55, 0x4A, 0x2D, 0x9E, 0x19, 0xB0, 0x54, 0xA5, 0x55, 0x02 |
.byte 0x5F, 0xEE, 0xA8, 0xC5, 0x49, 0xD8, 0x54, 0xE4, 0x2C, 0xB3, 0x27, 0x61, 0xB5, 0xA1, 0x9E, 0xDA |
.byte 0x5A, 0xDD, 0xA4, 0xF7, 0xE5, 0xFA, 0x41, 0x13, 0x98, 0x5B, 0xC3, 0xED, 0x00, 0x18, 0xF0, 0x60 |
.byte 0x07, 0x98, 0x25, 0x50, 0x71, 0x7A, 0x35, 0x9E, 0x2D, 0x5C, 0x00, 0xE3, 0xFE, 0x9E, 0xBD, 0x58 |
.byte 0x7C, 0x62, 0x50, 0x62, 0x5C, 0x92, 0x75, 0xF5, 0xED, 0x39, 0xE2, 0xEE, 0x51, 0xD2, 0x4E, 0x59 |
.byte 0x6B, 0x74, 0xAA, 0xDC, 0xEE, 0xDF, 0x7B, 0x1C, 0x3B, 0x7B, 0xFF, 0x3A, 0x1A, 0xBC, 0x93, 0x96 |
.byte 0x1E, 0xE3, 0xF8, 0x7B, 0x75, 0x6E, 0x71, 0x63, 0xA7, 0x53, 0x51, 0xF9, 0x26, 0x9F, 0x52, 0x92 |
.byte 0x13, 0xFC, 0x6F, 0x02, 0xDC, 0xEA, 0x1E, 0x17, 0x65, 0x1D, 0x52, 0x7F, 0xD9, 0xE5, 0x16, 0xF8 |
.byte 0xC8, 0x0F, 0x74, 0x3D, 0x7D, 0xE5, 0xA0, 0x24, 0x39, 0xF2, 0x1D, 0x5F, 0x91, 0x70, 0xF2, 0xA5 |
.byte 0x6C, 0x61, 0xA7, 0x48, 0x4B, 0xC5, 0x60, 0xB0, 0xE2, 0xB2, 0x30, 0xBC, 0x97, 0x46, 0xB4, 0x60 |
.byte 0x55, 0x29, 0x9E, 0xD3, 0x0E, 0x3F, 0xF7, 0x47, 0x31, 0x15, 0xA7, 0xC2, 0x85, 0x99, 0x67, 0xF2 |
.byte 0xFB, 0x0E, 0x3A, 0x46, 0xD4, 0x9B, 0xF7, 0xB6, 0x4E, 0x28, 0x73, 0xE6, 0x6E, 0x27, 0x46, 0xC4 |
.byte 0x51, 0xE4, 0x97, 0x5F, 0x23, 0x8F, 0xA7, 0x54, 0xA4, 0x4E, 0x17, 0x29, 0xE8, 0x7F, 0x1B, 0xE4 |
.byte 0x8E, 0x56, 0x2A, 0x62, 0xF2, 0x22, 0x19, 0x40, 0x4A, 0x8C, 0x26, 0xB9, 0xB4, 0x6D, 0x7D, 0x05 |
.byte 0x51, 0x14, 0x64, 0x75, 0xA4, 0x0C, 0xC9, 0x48, 0x5B, 0xE1, 0x72, 0x44, 0x60, 0x8D, 0x28, 0xEE |
.byte 0xE4, 0x53, 0x50, 0xD6, 0x75, 0x69, 0x16, 0xC0, 0xF6, 0x3D, 0x79, 0xAA, 0xAA, 0xF6, 0xAF, 0xFC |
.byte 0x0B, 0x14, 0x71, 0xAF, 0x21, 0x3B, 0xF8, 0x7C, 0x1C, 0x6A, 0xC0, 0x7C, 0xF8, 0xE8, 0x6A, 0xDC |
.byte 0x3B, 0xBB, 0xB3, 0xB1, 0x25, 0xCA, 0x71, 0x1B, 0x07, 0xEB, 0xC6, 0xB2, 0xE1, 0x76, 0xAE, 0xED |
.byte 0x8A, 0x1F, 0x9D, 0xAB, 0x5A, 0x95, 0x28, 0x76, 0x00, 0xE8, 0xF3, 0xF8, 0xD1, 0x5E, 0xD5, 0x0D |
.byte 0x1A, 0x88, 0xBE, 0x3F, 0x52, 0x30, 0x5B, 0x5A, 0x1B, 0x22, 0x0C, 0xFD, 0x98, 0xBB, 0xEB, 0x23 |
.byte 0xDB, 0x88, 0xCF, 0x36, 0x1E, 0xF7, 0xAD, 0x1E, 0xE0, 0xA0, 0x17, 0xB1, 0xFE, 0xEC, 0xBE, 0x18 |
.byte 0x74, 0x7D, 0x58, 0xC7, 0xAD, 0xB4, 0x21, 0xC9, 0xD6, 0x2E, 0xC7, 0x6E, 0xEA, 0xB2, 0x91, 0xC5 |
.byte 0x3B, 0x61, 0xFB, 0x59, 0x58, 0xA8, 0x78, 0x38, 0x49, 0x8F, 0xE9, 0x48, 0x7B, 0xA8, 0x61, 0xF0 |
.byte 0x25, 0xBA, 0xB7, 0xD3, 0x6E, 0xD9, 0x9D, 0x45, 0x08, 0x64, 0xB4, 0xF2, 0x16, 0x46, 0xB7, 0x51 |
.byte 0xA7, 0xB3, 0xAB, 0xFF, 0x5C, 0x23, 0x38, 0xA6, 0xB2, 0x22, 0xEE, 0x2E, 0xCA, 0x4F, 0x1E, 0xF0 |
.byte 0x09, 0xD5, 0xC4, 0x78, 0xAF, 0x62, 0xBD, 0xB7, 0xC6, 0x72, 0xA9, 0xDD, 0xB8, 0x61, 0x2F, 0x5F |
.byte 0x15, 0xDA, 0x5F, 0x71, 0xFE, 0x97, 0x17, 0xB1, 0xB9, 0x06, 0xDF, 0x84, 0x56, 0xFE, 0x75, 0x60 |
.byte 0xD3, 0x3A, 0xD8, 0x83, 0x9C, 0x96, 0x3A, 0x63, 0x08, 0xE3, 0x40, 0xC1, 0x45, 0x6F, 0x20, 0x5A |
.byte 0x4A, 0x7F, 0xCC, 0x49, 0x17, 0xE4, 0xFA, 0xD1, 0xEA, 0xDA, 0x56, 0x40, 0xD8, 0xCB, 0xA0, 0xAC |
.byte 0x06, 0x79, 0x2F, 0xA3, 0x10, 0x69, 0x06, 0x19, 0x4D, 0x47, 0xDA, 0x92, 0xB7, 0xFB, 0xED, 0x02 |
.byte 0x7B, 0xB9, 0x4B, 0x93, 0x9D, 0x45, 0x64, 0x88, 0x20, 0xBA, 0xC9, 0xF8, 0x86, 0x6A, 0xA5, 0x8D |
.byte 0xE4, 0xD5, 0x30, 0xF4, 0x3E, 0x37, 0x0E, 0x8C, 0x7E, 0xE9, 0x1F, 0x35, 0xE5, 0x0C, 0x37, 0x60 |
.byte 0xC6, 0x82, 0xF3, 0x64, 0xC8, 0x58, 0xED, 0xE9, 0x13, 0xB6, 0xE2, 0x99, 0x21, 0x87, 0x27, 0x05 |
.byte 0x5C, 0x57, 0xFA, 0x9B, 0x8E, 0x09, 0x28, 0x0C, 0xF2, 0x47, 0x42, 0xD7, 0x54, 0x7A, 0x38, 0x1B |
.byte 0xFD, 0x2C, 0x7F, 0xC5, 0x84, 0x6D, 0xAF, 0x98, 0x23, 0x91, 0x32, 0x45, 0x18, 0x59, 0x4A, 0x75 |
.byte 0xB0, 0x44, 0x11, 0x3F, 0x4D, 0x39, 0x4C, 0x40, 0x81, 0x8E, 0x18, 0xD5, 0x09, 0x51, 0xF1, 0x06 |
.byte 0x7D, 0x71, 0xCC, 0x02, 0xDE, 0x7B, 0x9A, 0x02, 0x0C, 0xCC, 0x47, 0x25, 0x26, 0x91, 0x9A, 0xD6 |
.byte 0xD6, 0xAB, 0x16, 0x24, 0xE4, 0x62, 0x65, 0x66, 0xF1, 0x7D, 0x3B, 0xFA, 0xCE, 0x2C, 0x00, 0x4C |
.byte 0x9D, 0xCC, 0x4F, 0x7C, 0x48, 0xEA, 0x7E, 0x54, 0xB7, 0xC5, 0x79, 0xDD, 0x57, 0x14, 0xB4, 0x2D |
.byte 0xC0, 0xCA, 0x51, 0xA4, 0x2D, 0xB6, 0x0A, 0x1E, 0x34, 0x46, 0x19, 0x03, 0x73, 0x1A, 0x4F, 0x11 |
.byte 0xE7, 0x9E, 0x8D, 0x2F, 0x88, 0x0B, 0x84, 0x3F, 0xD0, 0xFD, 0x1D, 0x27, 0x12, 0xD1, 0x55, 0xD2 |
.byte 0x9B, 0xA7, 0x77, 0xC8, 0x5E, 0x82, 0xE7, 0x92, 0xC8, 0x00, 0x95, 0x3C, 0x1A, 0xE5, 0x4D, 0x01 |
.byte 0x84, 0xDA, 0x31, 0x0D, 0xE6, 0xB5, 0x4D, 0xB7, 0xB2, 0x6A, 0xDE, 0xC5, 0x3B, 0x34, 0x97, 0xD6 |
.byte 0xDB, 0x0E, 0x9E, 0x39, 0x90, 0x85, 0xCC, 0x59, 0x86, 0x62, 0x95, 0xA0, 0x47, 0xE3, 0xA2, 0xCB |
.byte 0xBD, 0xD3, 0xD9, 0xA4, 0x88, 0x26, 0x5B, 0x3B, 0x90, 0x3A, 0x00, 0xCB, 0x6E, 0x97, 0xA1, 0x4A |
.byte 0xA6, 0x40, 0x84, 0x36, 0xC6, 0x50, 0x8F, 0x4D, 0xB3, 0x25, 0xED, 0xFA, 0x08, 0x90, 0xC6, 0xC6 |
.byte 0x64, 0x9F, 0x6A, 0xEC, 0xC5, 0xC5, 0x28, 0x55, 0x00, 0x29, 0x21, 0x6E, 0xC1, 0xC3, 0xB9, 0x67 |
.byte 0x04, 0x3D, 0x9D, 0xCA, 0x8E, 0x2D, 0x17, 0x41, 0x52, 0x05, 0x3C, 0x5A, 0x96, 0x02, 0x21, 0xFA |
.byte 0xA2, 0x8B, 0xE6, 0x68, 0x51, 0x0F, 0xBE, 0x51, 0x38, 0xDF, 0xC0, 0xF9, 0xA2, 0x79, 0x60, 0xA6 |
.byte 0xB7, 0xFE, 0x71, 0x45, 0x2B, 0x89, 0x86, 0x7E, 0x8E, 0xC3, 0xD9, 0x25, 0xC5, 0xFA, 0x1F, 0x68 |
.byte 0x85, 0x05, 0xD0, 0xD7, 0x15, 0x8E, 0x28, 0x4D, 0x6E, 0xE9, 0x47, 0x10, 0x63, 0xA8, 0xB7, 0x1A |
.byte 0xA6, 0x29, 0x60, 0xD2, 0xB2, 0xE7, 0x51, 0x41, 0xAA, 0x2A, 0x66, 0x70, 0x24, 0x85, 0xD8, 0xAA |
.byte 0x8B, 0xA9, 0x81, 0xA0, 0x37, 0xAA, 0xEE, 0xA6, 0x94, 0x35, 0xB7, 0xF7, 0xDE, 0x6E, 0x12, 0x84 |
.byte 0x97, 0x72, 0x57, 0x4A, 0x5A, 0xA8, 0x8B, 0x04, 0xD3, 0xF1, 0x74, 0xF8, 0x77, 0x4D, 0xA3, 0x02 |
.byte 0xF6, 0x25, 0xA3, 0x2E, 0xCF, 0x91, 0xD4, 0x64, 0xC7, 0x8B, 0x5C, 0xA5, 0xFA, 0x6E, 0x2A, 0x91 |
.byte 0xE1, 0x82, 0xDB, 0x3B, 0x2B, 0x67, 0x40, 0xFE, 0x59, 0xB4, 0xF6, 0xD0, 0x01, 0x9A, 0xD3, 0xF8 |
.byte 0xBF, 0x76, 0x26, 0x8E, 0x08, 0xFA, 0xF3, 0xCF, 0x86, 0x4F, 0x75, 0x80, 0xBE, 0x9F, 0x11, 0x9F |
.byte 0x22, 0xED, 0xDB, 0x4D, 0x55, 0x1B, 0x4B, 0xAE, 0xCF, 0x42, 0x7E, 0xD1, 0xDC, 0x51, 0xC9, 0x9B |
.byte 0xC8, 0xF0, 0x2A, 0xD0, 0xEA, 0x1E, 0xA0, 0x71, 0x6D, 0x15, 0xF1, 0x2B, 0xB5, 0x03, 0xCB, 0xD7 |
.byte 0xF0, 0xA6, 0x24, 0x46, 0xC1, 0x70, 0xF4, 0x91, 0xB3, 0x73, 0x62, 0x90, 0xC5, 0x2C, 0x2C, 0x8D |
.byte 0x1C, 0x57, 0x5E, 0x07, 0x75, 0xFE, 0x78, 0xE3, 0x14, 0x69, 0x0E, 0xC9, 0x6C, 0xD9, 0xA0, 0x5D |
.byte 0x80, 0xC5, 0xA3, 0x41, 0x36, 0x98, 0xD2, 0xE9, 0x0B, 0x35, 0x79, 0xD0, 0x62, 0xA6, 0x5D, 0x7E |
.byte 0xFD, 0xBC, 0x86, 0x73, 0xBA, 0xFE, 0x56, 0xCE, 0x68, 0x64, 0x98, 0xD5, 0x3E, 0x39, 0x33, 0xBF |
.byte 0xFE, 0xD7, 0x00, 0x34, 0x6F, 0xD3, 0x1E, 0x7A, 0x09, 0x98, 0x4B, 0x6B, 0x3E, 0xA8, 0xEA, 0x3C |
.byte 0x64, 0x70, 0xAF, 0x1F, 0x6E, 0x05, 0xEE, 0xD7, 0x6A, 0x86, 0xAC, 0xA9, 0xBF, 0xDF, 0x68, 0xBE |
.byte 0xB7, 0x68, 0xF3, 0x26, 0x3C, 0x11, 0xA1, 0x45, 0xAA, 0xEC, 0xB0, 0xE9, 0x95, 0x9B, 0x25, 0xF9 |
.byte 0x0B, 0xD4, 0x19, 0x7A, 0xDA, 0x07, 0x51, 0x44, 0x8E, 0xFE, 0xED, 0x4E, 0xDE, 0x55, 0x0D, 0x95 |
.byte 0xBE, 0x00, 0xBB, 0xFB, 0x12, 0x5D, 0x40, 0xBC, 0x49, 0xF1, 0xA6, 0xDE, 0x8C, 0xCB, 0xD8, 0x98 |
.byte 0xA0, 0xF1, 0x12, 0x7A, 0xF9, 0x63, 0xBE, 0x88, 0x61, 0xAC, 0xD6, 0x40, 0x01, 0xE3, 0xD5, 0xC0 |
.byte 0xE4, 0x91, 0xBB, 0xF6, 0xEE, 0xFC, 0xB3, 0x37, 0xED, 0x59, 0x16, 0x7A, 0x25, 0xEE, 0x12, 0xC5 |
.byte 0xE0, 0x24, 0x3F, 0xD9, 0x88, 0xFE, 0x62, 0xEA, 0xAA, 0x38, 0x2A, 0xAC, 0x1C, 0x00, 0x6C, 0x00 |
.byte 0x91, 0x27, 0xF6, 0x7F, 0x24, 0xAA, 0xB7, 0x12, 0x04, 0xCD, 0x8C, 0x29, 0xBB, 0x9F, 0xEE, 0x9C |
.byte 0xC4, 0x2E, 0x76, 0x4D, 0x2C, 0xD8, 0x37, 0xD6, 0x10, 0x62, 0x82, 0x2C, 0x63, 0xEF, 0x2C, 0xF4 |
.byte 0x17, 0x23, 0x74, 0x3B, 0xCE, 0x2C, 0x4D, 0xD2, 0xF9, 0xDA, 0xFC, 0xB5, 0x79, 0xEA, 0x51, 0x3E |
.byte 0x19, 0xC7, 0x8B, 0x45, 0x9F, 0xC3, 0x1C, 0xB0, 0x26, 0x9F, 0xDD, 0x89, 0x8F, 0x0A, 0x7E, 0xA6 |
.byte 0x2D, 0xF2, 0xE1, 0xFC, 0x1E, 0x2F, 0xCE, 0x18, 0x09, 0xCB, 0xCD, 0x83, 0xB6, 0x1F, 0xC1, 0xCF |
.byte 0xE7, 0x4D, 0x15, 0x87, 0x10, 0x31, 0x37, 0x37, 0xD1, 0x14, 0xC0, 0x60, 0x1F, 0x3E, 0x06, 0x4C |
.byte 0x31, 0xE8, 0x49, 0x50, 0x17, 0x18, 0x68, 0x21, 0xE3, 0x36, 0xA5, 0x99, 0x55, 0x66, 0x68, 0x3D |
.byte 0xB4, 0x7D, 0xC4, 0xC5, 0xAF, 0xFB, 0xFC, 0x80, 0x10, 0xBC, 0xE0, 0x2F, 0xFB, 0xE7, 0x7C, 0x2C |
.byte 0xD0, 0xC5, 0x7D, 0xE7, 0xDD, 0xE5, 0x09, 0xC0, 0x1C, 0xAE, 0x5A, 0x72, 0x15, 0xC2, 0xAF, 0xC9 |
.byte 0x3F, 0x73, 0x8E, 0xEF, 0x6F, 0x8B, 0x6F, 0x80, 0x47, 0x50, 0xAF, 0x43, 0x37, 0x2C, 0x6F, 0x07 |
.byte 0xF2, 0xED, 0xEF, 0xD0, 0xD2, 0xF9, 0x91, 0xEF, 0xA7, 0xEB, 0x61, 0xBD, 0xAD, 0x10, 0x87, 0xED |
.byte 0x84, 0x16, 0xDC, 0xF3, 0xA1, 0x4C, 0x73, 0xE8, 0x9C, 0x23, 0x2B, 0xD4, 0x4F, 0x9B, 0xDC, 0x42 |
.byte 0x88, 0xCB, 0x12, 0x5B, 0xC5, 0xA3, 0x4B, 0x6D, 0x8E, 0xAC, 0x2A, 0x3C, 0xBD, 0xB1, 0x29, 0x41 |
.byte 0xC7, 0x06, 0x34, 0x68, 0x52, 0xA8, 0x51, 0xEE, 0xCB, 0x7D, 0xC2, 0x1B, 0x19, 0x9E, 0x5D, 0xA2 |
.byte 0x6A, 0x70, 0xFE, 0x2F, 0x13, 0x49, 0x9C, 0xA2, 0xF5, 0xC7, 0xDF, 0xB2, 0x79, 0x08, 0xF3, 0x41 |
.byte 0x0E, 0x28, 0xA9, 0x61, 0xD0, 0xFB, 0x4F, 0x9B, 0x79, 0x12, 0xB7, 0x92, 0xB1, 0x15, 0x35, 0x1C |
.byte 0x85, 0x33, 0x4C, 0x99, 0x7C, 0xE9, 0x3B, 0x72, 0xB1, 0x1A, 0x24, 0x2A, 0x23, 0x18, 0x6B, 0x32 |
.byte 0x41, 0x15, 0x93, 0x11, 0x10, 0xE3, 0xAD, 0x8A, 0xF6, 0x64, 0x1C, 0xA8, 0x7A, 0x51, 0xC4, 0xFF |
.byte 0x85, 0x11, 0x98, 0x02, 0xFB, 0xD4, 0x74, 0xAC, 0xEF, 0x99, 0xD6, 0x12, 0xB2, 0x41, 0x45, 0xF3 |
.byte 0x56, 0xD8, 0x04, 0x67, 0xBC, 0xB2, 0xF1, 0xB3, 0x17, 0x0E, 0x5B, 0x91, 0x60, 0x20, 0x90, 0xE5 |
.byte 0x31, 0x29, 0xE7, 0x2C, 0xFD, 0x5C, 0xD9, 0xEC, 0xF5, 0xAF, 0xFF, 0xA7, 0xF0, 0x44, 0x9A, 0x47 |
.byte 0x1D, 0x9F, 0xAF, 0xD9, 0x52, 0xA0, 0x8C, 0x69, 0xAF, 0xE8, 0xFB, 0x0F, 0x08, 0x8C, 0xF5, 0x3A |
.byte 0xB5, 0xDD, 0x67, 0xB3, 0x39, 0x40, 0x9F, 0x2E, 0xEF, 0x9E, 0xD6, 0xE0, 0xE3, 0x71, 0x28, 0x00 |
.byte 0x11, 0xD7, 0xDA, 0x63, 0x78, 0x67, 0xCD, 0x27, 0x4F, 0xC9, 0x36, 0x58, 0x55, 0x2C, 0x92, 0x0B |
.byte 0x09, 0xF9, 0xBE, 0x42, 0x39, 0x5E, 0x71, 0x29, 0xFD, 0x48, 0x09, 0xE0, 0xB9, 0x31, 0xE0, 0xCA |
.byte 0x09, 0xBB, 0x2E, 0x81, 0x22, 0xFC, 0xA8, 0x72, 0xC5, 0xDF, 0xCA, 0x1A, 0x0B, 0x5C, 0x25, 0x14 |
.byte 0x56, 0xE4, 0x57, 0x90, 0x42, 0xC9, 0xB9, 0x3F, 0x11, 0xC3, 0x1F, 0xCA, 0xF5, 0x00, 0x95, 0xFE |
.byte 0xBC, 0xC4, 0x7F, 0xDF, 0xC0, 0x27, 0x51, 0x85, 0x07, 0x1B, 0xA0, 0x12, 0x78, 0xC6, 0x27, 0xCE |
.byte 0xAA, 0x7E, 0x5E, 0xEC, 0x48, 0x18, 0x2C, 0x59, 0xDB, 0x4C, 0x24, 0xD0, 0x4D, 0xBA, 0xCF, 0x09 |
.byte 0x7E, 0x4E, 0xE8, 0x3E, 0x76, 0x3A, 0xC4, 0x7E, 0x55, 0x64, 0x90, 0xCE, 0x2A, 0xB8, 0x9C, 0xD4 |
.byte 0x37, 0xFB, 0xC1, 0x7F, 0x14, 0xEE, 0xD8, 0xEF, 0x3A, 0xFD, 0xC0, 0x88, 0xB7, 0x90, 0x92, 0x36 |
.byte 0xDE, 0x7A, 0x75, 0x55, 0xB5, 0x39, 0xD3, 0x0A, 0x9E, 0x64, 0xD9, 0xC8, 0x1C, 0x76, 0x9D, 0x53 |
.byte 0x71, 0x5F, 0xD2, 0x86, 0x4D, 0xAB, 0x76, 0x88, 0xA9, 0x36, 0x11, 0x61, 0xC6, 0xA3, 0x97, 0xA5 |
.byte 0x1E, 0x0D, 0xFB, 0xD3, 0x46, 0xCF, 0xDE, 0xE5, 0x34, 0xB7, 0xAD, 0x50, 0x2D, 0x4B, 0xA4, 0x9F |
.byte 0xAA, 0x77, 0x25, 0xF8, 0x22, 0x9B, 0x80, 0xCC, 0xD2, 0x91, 0x2D, 0x99, 0x35, 0xC5, 0x3F, 0x53 |
.byte 0xD2, 0x3B, 0x26, 0x19, 0x0A, 0x04, 0xFE, 0x3E, 0xBB, 0xAC, 0x8F, 0xE9, 0xF7, 0x33, 0x88, 0xA1 |
.byte 0xAA, 0xAE, 0x9A, 0xCD, 0x49, 0x1A, 0x99, 0x1C, 0xAC, 0xC6, 0xB5, 0xE1, 0x8B, 0xF5, 0x34, 0x5E |
.byte 0x30, 0x5B, 0x77, 0x3B, 0x5F, 0x76, 0x79, 0x1B, 0x22, 0x09, 0x04, 0x19, 0x3C, 0x8D, 0xBB, 0xE7 |
.byte 0x3B, 0x55, 0xB5, 0x85, 0x70, 0x4E, 0xA1, 0x1D, 0x15, 0x57, 0xFE, 0xA1, 0x4C, 0x33, 0xFF, 0x7C |
.byte 0x8F, 0x77, 0xB7, 0xEF, 0xED, 0x31, 0x0A, 0x0F, 0x3A, 0x0F, 0x29, 0x77, 0x9D, 0xE4, 0x5F, 0xD8 |
.byte 0x39, 0x14, 0x5E, 0xAA, 0x62, 0xFF, 0xC7, 0x77, 0x56, 0xC5, 0x18, 0xA2, 0xF9, 0x18, 0x1F, 0x88 |
.byte 0x8F, 0xD6, 0x78, 0x7C, 0x07, 0x82, 0x8C, 0x42, 0x92, 0xB5, 0xBA, 0x30, 0x99, 0x19, 0x09, 0xD3 |
.byte 0x2D, 0x67, 0x7D, 0x90, 0x66, 0x44, 0x08, 0xBD, 0x0A, 0x21, 0x60, 0x04, 0x39, 0x7F, 0x8D, 0xC8 |
.byte 0x56, 0x05, 0x45, 0x5D, 0x88, 0xD1, 0xA0, 0x1B, 0x86, 0x5A, 0x4B, 0x1F, 0x74, 0x54, 0xF3, 0xA1 |
.byte 0xBB, 0x70, 0x31, 0x22, 0xB4, 0x3A, 0xE0, 0xBF, 0x5B, 0x40, 0xC3, 0x94, 0xC0, 0x50, 0x5D, 0x16 |
.byte 0x55, 0xA2, 0x74, 0xDD, 0x74, 0x15, 0xF8, 0xFA, 0x6F, 0x44, 0x1A, 0xE3, 0x98, 0x0D, 0x85, 0x54 |
.byte 0x7D, 0xB7, 0x77, 0x32, 0xF1, 0x58, 0xF1, 0x4C, 0x98, 0xB4, 0xE1, 0x59, 0x05, 0x3F, 0x70, 0x5A |
.byte 0xE1, 0xE4, 0x38, 0x55, 0xF9, 0x31, 0x50, 0x69, 0x75, 0x6A, 0x4D, 0x0E, 0x77, 0xD2, 0x63, 0xF4 |
.byte 0x89, 0xDA, 0x26, 0x7B, 0x32, 0x18, 0xC8, 0xCB, 0xCC, 0xA9, 0x25, 0xD1, 0xE8, 0x95, 0x2C, 0xCA |
.byte 0x79, 0x65, 0x20, 0x73, 0x96, 0x70, 0xDC, 0x0C, 0xDA, 0x2A, 0x1B, 0x51, 0xFC, 0x7E, 0x46, 0x86 |
.byte 0x59, 0x6D, 0x01, 0x8C, 0x85, 0xC9, 0x57, 0x52, 0x73, 0x7D, 0x24, 0x5C, 0x12, 0x51, 0x26, 0x8C |
.byte 0xB6, 0x46, 0xFF, 0x4D, 0xB7, 0xDC, 0x5A, 0x91, 0x06, 0x75, 0xE3, 0x03, 0xF4, 0x2A, 0x89, 0x4D |
.byte 0x97, 0x8B, 0xD9, 0x1D, 0x54, 0x31, 0x70, 0xC8, 0xAE, 0x95, 0x24, 0xC0, 0xE6, 0x4B, 0x4C, 0x9D |
.byte 0x91, 0x4C, 0xEB, 0x49, 0x29, 0x45, 0xDA, 0x2F, 0xBB, 0xBE, 0x33, 0xAF, 0xE8, 0xBC, 0xFC, 0x80 |
.byte 0x48, 0xD6, 0x9E, 0x9D, 0x07, 0x0F, 0x65, 0xB5, 0xA4, 0x89, 0x75, 0x8B, 0xD4, 0xC2, 0x28, 0x66 |
.byte 0x0E, 0x13, 0xAF, 0x38, 0x59, 0x8A, 0x67, 0x14, 0x49, 0x9B, 0xC4, 0x32, 0x57, 0xC0, 0xB3, 0x9F |
.byte 0x97, 0x51, 0x3C, 0x9E, 0x60, 0xA2, 0x53, 0x05, 0x2C, 0xC9, 0x90, 0x01, 0x8C, 0xB8, 0x68, 0x9B |
.byte 0xCC, 0x18, 0xD3, 0x26, 0xA3, 0x3A, 0x3A, 0xEC, 0xD5, 0xFF, 0x1E, 0x2D, 0xC0, 0xD1, 0xCD, 0x57 |
.byte 0x23, 0x0A, 0xF5, 0x84, 0xAD, 0x49, 0x89, 0xD9, 0x12, 0x19, 0xDA, 0x9E, 0xD2, 0x42, 0x39, 0x9E |
.byte 0x5B, 0x0C, 0xC4, 0xFE, 0x47, 0xFF, 0xEA, 0x1D, 0xFE, 0x09, 0x4B, 0xBE, 0xDB, 0x19, 0x15, 0xFE |
.byte 0x24, 0x0A, 0x83, 0xD1, 0x54, 0x0C, 0xAA, 0x66, 0x26, 0x85, 0x05, 0xF8, 0xC8, 0x3F, 0x96, 0x23 |
.byte 0x4C, 0x5B, 0x21, 0x93, 0x5A, 0x0C, 0xB1, 0x58, 0x15, 0xFD, 0x17, 0xF1, 0x16, 0x2C, 0xF0, 0x3A |
.byte 0x37, 0x73, 0x0C, 0x8B, 0x7F, 0xB6, 0xF2, 0xA6, 0x3C, 0xF8, 0x9E, 0x05, 0x37, 0x34, 0x29, 0x83 |
.byte 0x8F, 0x4A, 0x17, 0xEA, 0x57, 0xC8, 0x42, 0x6D, 0xC5, 0x5A, 0x5E, 0xDC, 0x87, 0x4E, 0x17, 0xBF |
.byte 0xC1, 0x23, 0x4B, 0x41, 0xDA, 0x3D, 0xE7, 0x16, 0x35, 0x85, 0x1B, 0x6D, 0xBA, 0x45, 0xF0, 0x4A |
.byte 0x8F, 0x07, 0x34, 0xE7, 0xD0, 0x77, 0x54, 0x96, 0xD1, 0xB2, 0x72, 0x58, 0x01, 0x89, 0x17, 0xC2 |
.byte 0xAC, 0x62, 0x04, 0x86, 0xA0, 0xEB, 0x9D, 0xD5, 0x71, 0xB9, 0x42, 0x2C, 0xFE, 0x33, 0x76, 0x8E |
.byte 0x3A, 0xAA, 0x75, 0x0B, 0x21, 0xCA, 0xA1, 0xF2, 0x7C, 0x13, 0x4A, 0x7D, 0x9D, 0x62, 0x40, 0x4A |
.byte 0xC4, 0x44, 0xD1, 0x64, 0x30, 0x6E, 0x3A, 0xA2, 0x28, 0x7D, 0xCE, 0x26, 0xB0, 0x44, 0xB4, 0xEB |
.byte 0xEE, 0x2A, 0xF6, 0x10, 0xF4, 0x97, 0x02, 0x71, 0xAB, 0x4D, 0xEF, 0x49, 0xAF, 0x30, 0x93, 0x74 |
.byte 0x75, 0x65, 0xD8, 0xA5, 0xD3, 0x13, 0x48, 0xFB, 0x90, 0x16, 0x22, 0x41, 0x5A, 0xD7, 0x2C, 0x49 |
.byte 0x01, 0x23, 0x59, 0xF6, 0xBB, 0x5C, 0x68, 0x67, 0xA9, 0x57, 0xB0, 0x59, 0x88, 0x44, 0xCD, 0xFD |
.byte 0xA9, 0xA6, 0xA2, 0x7D, 0xB9, 0xEB, 0x79, 0x49, 0x01, 0x9B, 0x8B, 0x5C, 0x72, 0xB7, 0xA6, 0x74 |
.byte 0xDA, 0x00, 0x6A, 0x95, 0x5C, 0xD2, 0xFC, 0x06, 0x2A, 0xAD, 0x5F, 0xB2, 0xF2, 0x2D, 0xAF, 0x9B |
.byte 0xD3, 0x52, 0x19, 0x8D, 0x3E, 0x92, 0xD7, 0x3F, 0x2D, 0x62, 0x9C, 0x9F, 0x19, 0x42, 0x13, 0xF4 |
.byte 0x42, 0x7E, 0x8A, 0x9F, 0x51, 0x87, 0xA6, 0x7B, 0x34, 0x06, 0x2E, 0x27, 0x33, 0xDE, 0xC2, 0x07 |
.byte 0x31, 0xDB, 0x94, 0x6F, 0x6D, 0x6B, 0xAF, 0x9B, 0xCD, 0x4B, 0x3B, 0xE7, 0x8D, 0x4E, 0xDB, 0xD0 |
.byte 0xCD, 0x65, 0x70, 0x1E, 0xED, 0x16, 0x9A, 0x22, 0x1C, 0xC8, 0x49, 0x50, 0xA7, 0x0B, 0x57, 0xD8 |
.byte 0xE7, 0xEB, 0x48, 0x55, 0x57, 0xF7, 0xF0, 0x24, 0x42, 0x2B, 0x0B, 0xD0, 0x7A, 0xE7, 0xA0, 0x47 |
.byte 0x4D, 0x11, 0x66, 0x3A, 0x27, 0x00, 0x5C, 0x44, 0xC8, 0xA5, 0x94, 0x6F, 0xB1, 0xEB, 0x48, 0x99 |
.byte 0xD7, 0x90, 0xEE, 0x2E, 0x87, 0xDF, 0x53, 0xCA, 0x0B, 0x5F, 0x9A, 0x86, 0x46, 0x3B, 0xCD, 0x93 |
.byte 0x4C, 0x34, 0xCE, 0x74, 0x34, 0x2A, 0xB8, 0xFC, 0xD0, 0x4C, 0x6C, 0x81, 0x38, 0xB5, 0x1A, 0x0F |
.byte 0x45, 0x09, 0x3E, 0xCD, 0xE8, 0x92, 0x97, 0xF4, 0xF1, 0x32, 0x7A, 0x38, 0x6E, 0x48, 0xCC, 0xBB |
.byte 0x7C, 0x9A, 0x2F, 0xB0, 0xC4, 0xE7, 0xAD, 0x94, 0x34, 0x1A, 0x16, 0x6C, 0xCF, 0x30, 0x7C, 0x15 |
.byte 0x39, 0xBB, 0xE2, 0x22, 0x4D, 0x7A, 0x16, 0x3F, 0xAD, 0x90, 0x77, 0x1B, 0xD8, 0x43, 0xD6, 0x54 |
.byte 0xDD, 0x06, 0x05, 0xA2, 0xEE, 0xB2, 0x37, 0x22, 0xCC, 0x4D, 0x8F, 0x9C, 0x7E, 0x0C, 0xB1, 0xB8 |
.byte 0xC8, 0x94, 0xDA, 0x15, 0x0E, 0xF1, 0x55, 0xBC, 0x81, 0xCC, 0xD7, 0x5A, 0x10, 0xAE, 0xAF, 0xEE |
.byte 0xB4, 0xB4, 0x91, 0xA3, 0x67, 0xC9, 0xC5, 0x34, 0x17, 0x55, 0xD0, 0x95, 0x62, 0x81, 0x4E, 0x2A |
.byte 0x15, 0x28, 0x40, 0x24, 0x19, 0x95, 0xE0, 0x9B, 0x62, 0xB8, 0xF6, 0x73, 0x66, 0xA5, 0x61, 0x1B |
.byte 0x5A, 0xF3, 0xBE, 0xC2, 0xBC, 0x84, 0xF7, 0xD3, 0xDA, 0xC7, 0x68, 0x3C, 0x49, 0xB6, 0x67, 0x5E |
.byte 0xDF, 0xA7, 0x83, 0xF9, 0x3D, 0x64, 0x95, 0x9F, 0x1C, 0x8B, 0x12, 0x83, 0x31, 0x74, 0x9F, 0x8C |
.byte 0x67, 0x5E, 0x4F, 0x23, 0xE3, 0x46, 0xF7, 0xBD, 0x0D, 0x5F, 0xFA, 0x57, 0x16, 0x62, 0xB6, 0xF6 |
.byte 0x09, 0x39, 0xF0, 0x47, 0x9D, 0x85, 0xE7, 0xBA, 0x11, 0xF9, 0x3D, 0x43, 0x6E, 0xDC, 0xCF, 0xD6 |
.byte 0x3A, 0x1F, 0xFA, 0x1D, 0x65, 0xF1, 0xDB, 0x73, 0x51, 0xD6, 0xCA, 0x68, 0x38, 0x80, 0x5E, 0x41 |
.byte 0xBA, 0x4F, 0x89, 0x57, 0xD4, 0x70, 0x11, 0xE5, 0x69, 0x4F, 0x28, 0xD8, 0x2C, 0xF8, 0xAF, 0x66 |
.byte 0x18, 0xA9, 0x84, 0x7D, 0x9B, 0x60, 0xF1, 0xEC, 0x36, 0xBB, 0x55, 0x6E, 0x3C, 0xB4, 0xB0, 0xF6 |
.byte 0x03, 0x39, 0x4E, 0xD7, 0xA9, 0x60, 0xBD, 0x13, 0xAF, 0xE6, 0xEB, 0xDB, 0xDF, 0x9B, 0x42, 0xF7 |
.byte 0x44, 0xC7, 0x75, 0xDF, 0x27, 0x66, 0xCC, 0x5D, 0x22, 0x22, 0xCC, 0x5E, 0xD6, 0x7C, 0x55, 0xD9 |
.byte 0xB5, 0xA4, 0xB1, 0x5F, 0x04, 0x6F, 0x72, 0xB4, 0x56, 0x5E, 0x90, 0x35, 0xF9, 0xD3, 0x2D, 0x3E |
.byte 0x9B, 0xA3, 0x1D, 0xC2, 0x09, 0xEA, 0x20, 0x2C, 0x0C, 0xED, 0x8B, 0xE3, 0x69, 0xE0, 0xBD, 0x1F |
.byte 0x85, 0x6E, 0x7E, 0x89, 0xDE, 0xF0, 0x3E, 0x34, 0x4E, 0xCF, 0x6A, 0x48, 0xA2, 0x97, 0x86, 0x3D |
.byte 0x3A, 0xA4, 0x00, 0x44, 0x8F, 0x21, 0x71, 0x9B, 0x0E, 0xFC, 0x7F, 0x77, 0xDD, 0x3C, 0x97, 0x62 |
.byte 0xAB, 0x15, 0xEC, 0x89, 0x06, 0x2A, 0xBD, 0x55, 0xF9, 0x27, 0x9D, 0x9C, 0xBF, 0x23, 0xDA, 0xFA |
.byte 0xC7, 0xDA, 0x3F, 0x56, 0xFB, 0xB0, 0xF2, 0x09, 0xAC, 0x72, 0x81, 0x89, 0xAE, 0x18, 0xEC, 0x59 |
.byte 0x2D, 0xD8, 0xE3, 0x33, 0x03, 0xA0, 0x89, 0xFD, 0xC8, 0x26, 0x99, 0x88, 0x4A, 0x74, 0x82, 0x12 |
.byte 0x4E, 0xC2, 0x68, 0x4A, 0x72, 0x5B, 0x53, 0x1E, 0xCE, 0xD4, 0xA8, 0x7C, 0xED, 0x94, 0xD6, 0x1A |
.byte 0x6D, 0xB9, 0x4E, 0x71, 0x5A, 0xD7, 0x6E, 0x22, 0xFE, 0x08, 0xAB, 0x48, 0x7C, 0x2E, 0x5A, 0xCA |
.byte 0xF0, 0xC3, 0x14, 0x62, 0x1F, 0x68, 0x81, 0xED, 0x3D, 0x29, 0x69, 0x2A, 0xBE, 0x40, 0x45, 0x2C |
.byte 0xF9, 0x94, 0x9D, 0x53, 0x6C, 0x0B, 0x76, 0x6A, 0x13, 0x21, 0xB3, 0x90, 0x50, 0x0D, 0x5A, 0x40 |
.byte 0xD1, 0x6F, 0xA2, 0xF0, 0xD8, 0x23, 0xDD, 0x15, 0x4D, 0x47, 0x40, 0x0C, 0x87, 0x85, 0x38, 0x81 |
.byte 0x1A, 0xD5, 0xD4, 0x86, 0xE1, 0x4B, 0xF1, 0xF4, 0x6D, 0xA4, 0x85, 0xBD, 0xB2, 0xE0, 0xFD, 0x83 |
.byte 0x4F, 0xA0, 0x73, 0x28, 0xC3, 0x51, 0x3D, 0x11, 0x98, 0x7E, 0x1D, 0x20, 0x04, 0x55, 0xA1, 0x1E |
.byte 0x2B, 0x76, 0xA5, 0x0C, 0xC1, 0x96, 0x01, 0x2E, 0x3B, 0x86, 0xEC, 0xED, 0x66, 0xE9, 0x70, 0xB6 |
.byte 0x8A, 0xE4, 0xDE, 0x4E, 0x35, 0x1C, 0x5F, 0xCE, 0x9A, 0x7C, 0xEE, 0x9E, 0xD2, 0x8F, 0xBC, 0xFD |
.byte 0x05, 0x62, 0x09, 0xC7, 0xF8, 0x0A, 0xF6, 0x34, 0x90, 0xE2, 0x21, 0xF7, 0xCC, 0x92, 0xAD, 0x56 |
.byte 0x77, 0x8B, 0xA4, 0xAC, 0xA7, 0x03, 0x7A, 0x42, 0x80, 0x69, 0xE0, 0x52, 0xF8, 0x9D, 0x50, 0xFE |
.byte 0xFF, 0x59, 0xC5, 0xF8, 0x64, 0xBB, 0x2C, 0xF5, 0x9E, 0x4E, 0xEC, 0x6A, 0xE0, 0x99, 0xC1, 0x57 |
.byte 0x25, 0x65, 0x04, 0xCD, 0x69, 0x7F, 0x0F, 0xEA, 0xE8, 0xEF, 0x3D, 0xE1, 0x8D, 0x8D, 0xE0, 0x8C |
.byte 0xE6, 0xA5, 0x85, 0x4B, 0x61, 0xB1, 0x40, 0xFF, 0xFF, 0x2C, 0x6A, 0xE0, 0xC6, 0x2B, 0x38, 0xEB |
.byte 0x91, 0x3C, 0xB8, 0xFA, 0xBC, 0xC7, 0xE5, 0xA4, 0xB7, 0x22, 0x86, 0x44, 0xAF, 0x66, 0xD1, 0x96 |
.byte 0x0C, 0x56, 0xE1, 0x6E, 0x08, 0x21, 0x6D, 0x08, 0x4E, 0xD8, 0xE8, 0x14, 0x03, 0x20, 0x00, 0x94 |
.byte 0x5D, 0xB8, 0x8F, 0x19, 0x80, 0x75, 0xBE, 0x38, 0x97, 0x45, 0x7D, 0x46, 0xAC, 0x4F, 0xDD, 0xB8 |
.byte 0xA5, 0xBE, 0x26, 0xAE, 0xE0, 0x94, 0xB6, 0x2F, 0x6C, 0x9F, 0x43, 0x70, 0xC0, 0x44, 0x05, 0x1D |
.byte 0xFD, 0x95, 0x37, 0x7E, 0x0A, 0xF6, 0xB6, 0xA1, 0x3B, 0x33, 0xE8, 0xE7, 0x82, 0xC5, 0xA0, 0x28 |
.byte 0x83, 0xC7, 0xD7, 0x64, 0x5C, 0x8D, 0x93, 0xC9, 0x2C, 0xD7, 0x3A, 0xED, 0x1B, 0x3F, 0x0A, 0x19 |
.byte 0xD4, 0x42, 0x97, 0xDF, 0x38, 0x4D, 0x80, 0x74, 0x81, 0x69, 0x5C, 0x04, 0x2E, 0xFD, 0x2D, 0xB2 |
.byte 0xC4, 0x04, 0x16, 0x21, 0x92, 0xAA, 0xEB, 0xBF, 0x81, 0x25, 0xAC, 0x9D, 0x64, 0xB6, 0xB6, 0x39 |
.byte 0xF9, 0x4E, 0x19, 0x31, 0x9B, 0x99, 0xA6, 0x1D, 0x03, 0x02, 0x21, 0x31, 0x00, 0x4E, 0xE4, 0xC5 |
.byte 0x52, 0xFA, 0xE6, 0xE4, 0xA5, 0xD1, 0xA3, 0x26, 0xF6, 0x4F, 0xC4, 0x5B, 0x06, 0x7B, 0x95, 0x00 |
.byte 0xC9, 0xAE, 0x31, 0x65, 0x48, 0xD8, 0x82, 0x4B, 0xDB, 0xA3, 0x7D, 0xDB, 0xF2, 0x61, 0xA0, 0x45 |
.byte 0x5C, 0x86, 0x2A, 0x01, 0x58, 0xCD, 0x28, 0x4F, 0x1D, 0xEC, 0xAA, 0x24, 0x68, 0x40, 0x24, 0x31 |
.byte 0xEE, 0x56, 0x96, 0x36, 0x2E, 0x19, 0x82, 0x0A, 0xBD, 0xFF, 0xE5, 0xAF, 0x60, 0x85, 0xF4, 0xBC |
.byte 0x0C, 0x1E, 0xBD, 0x64, 0xEC, 0xE6, 0xB4, 0x0A, 0xD2, 0x5E, 0x2F, 0x3B, 0x9E, 0x53, 0x6C, 0x8D |
.byte 0xAA, 0x03, 0xC4, 0xD9, 0x1C, 0x46, 0xE3, 0xDA, 0x45, 0xC9, 0x89, 0xA6, 0x4E, 0x7E, 0x62, 0x5B |
.byte 0x9D, 0x20, 0xC0, 0x8A, 0x06, 0x74, 0x94, 0xD9, 0xD3, 0xC4, 0x14, 0x72, 0x18, 0x81, 0xFF, 0xC2 |
.byte 0x85, 0xC3, 0x9C, 0xA2, 0x0A, 0x80, 0x7C, 0x4F, 0x49, 0x06, 0xF6, 0x98, 0x84, 0x58, 0xF3, 0x22 |
.byte 0x79, 0xB4, 0xAC, 0x80, 0x28, 0x41, 0x5A, 0xFC, 0x05, 0x6F, 0x6E, 0x1D, 0xF0, 0x6E, 0xE0, 0x76 |
.byte 0x32, 0x7C, 0x18, 0x3C, 0xFC, 0x95, 0x8C, 0x46, 0x9B, 0x82, 0xDE, 0x20, 0xDB, 0xD2, 0x42, 0x55 |
.byte 0x86, 0xEE, 0xD6, 0xAE, 0x2F, 0x30, 0xAB, 0x34, 0x9F, 0x19, 0x52, 0x90, 0x88, 0x32, 0x07, 0xBA |
.byte 0xAF, 0x1F, 0xF7, 0xAC, 0xB5, 0x84, 0xF2, 0x50, 0x06, 0xD0, 0x70, 0xE2, 0xA2, 0xB2, 0x38, 0x28 |
.byte 0xA1, 0x0E, 0xD7, 0xD0, 0x3F, 0x82, 0x05, 0xDE, 0x9C, 0x58, 0x6F, 0x24, 0x8B, 0x76, 0xDE, 0x3A |
.byte 0x96, 0xD5, 0xE6, 0x4B, 0x59, 0xD8, 0x9B, 0x60, 0xA8, 0x0C, 0x43, 0x4B, 0xBE, 0x7B, 0x73, 0x60 |
.byte 0x8A, 0x4B, 0x31, 0xC9, 0xCD, 0x36, 0xA8, 0x69, 0x8F, 0x17, 0x8D, 0x1A, 0x8E, 0x6C, 0x54, 0x24 |
.byte 0x42, 0x3A, 0x6F, 0x9C, 0x13, 0x0B, 0xFD, 0xBC, 0x17, 0x40, 0x07, 0xD6, 0xBC, 0x7B, 0x36, 0x46 |
.byte 0xC7, 0x67, 0x10, 0x94, 0x9E, 0xB8, 0xFE, 0x2D, 0xCF, 0x8C, 0x47, 0x5D, 0xF8, 0x9B, 0x81, 0x3B |
.byte 0xD6, 0xF1, 0xD7, 0xEA, 0xFC, 0xD4, 0xA6, 0x14, 0x15, 0xAE, 0xEA, 0xD2, 0x2A, 0x21, 0x18, 0xF1 |
.byte 0x89, 0x28, 0x86, 0x27, 0xE0, 0x84, 0x55, 0xB0, 0x11, 0x9C, 0x0D, 0x0A, 0x38, 0x8F, 0x45, 0x0F |
.byte 0x81, 0x1D, 0xF9, 0x7D, 0xF2, 0xA0, 0x91, 0x07, 0x4F, 0x7C, 0xD9, 0x79, 0x9E, 0xF2, 0x6A, 0x27 |
.byte 0x1B, 0xF0, 0x4F, 0xFB, 0x75, 0xA4, 0xAC, 0x86, 0x41, 0xB9, 0x91, 0x7A, 0x49, 0xD6, 0x89, 0xCA |
.byte 0xF3, 0x83, 0x48, 0xE5, 0x24, 0xDA, 0xED, 0x73, 0x56, 0xC7, 0xEC, 0xF5, 0xB9, 0x57, 0x1C, 0xD4 |
.byte 0x48, 0x6B, 0xD0, 0xBE, 0x10, 0x7C, 0x45, 0x51, 0x36, 0xD6, 0xCB, 0x80, 0xAD, 0x55, 0x4A, 0xA0 |
.byte 0xD9, 0x93, 0x86, 0xFD, 0x6D, 0x74, 0x71, 0xC4, 0x3B, 0x5D, 0xB9, 0xF4, 0xB5, 0xD5, 0xC9, 0xFE |
.byte 0x41, 0x99, 0xBC, 0x51, 0x16, 0x01, 0xA3, 0x4D, 0xD8, 0x6E, 0xCD, 0x85, 0xC3, 0x17, 0x26, 0x9D |
.byte 0xAB, 0xAC, 0x9A, 0x18, 0x21, 0x0B, 0xDC, 0x5C, 0x69, 0x96, 0x51, 0x1E, 0x6C, 0x1B, 0x1C, 0xAD |
.byte 0xB5, 0xD9, 0xFF, 0xCB, 0xDB, 0xA2, 0x18, 0xB3, 0x11, 0xE5, 0x38, 0xD4, 0xFD, 0x5E, 0x71, 0xA8 |
.byte 0x0B, 0x0C, 0xC1, 0x2C, 0x18, 0x9E, 0x89, 0x81, 0x34, 0xDA, 0xA0, 0xA0, 0xF5, 0xBD, 0x4E, 0xAB |
.byte 0x96, 0x4D, 0x76, 0x71, 0xF0, 0x8F, 0x24, 0x01, 0x74, 0x5D, 0xD5, 0x72, 0xBB, 0x47, 0x1B, 0xC7 |
.byte 0x54, 0xDC, 0xF3, 0x6C, 0x7A, 0x7C, 0xED, 0xAE, 0x57, 0x8E, 0x4F, 0x4D, 0x4B, 0x9D, 0xF8, 0xE2 |
.byte 0xEA, 0x6F, 0x53, 0xDA, 0xFE, 0x78, 0xDB, 0x73, 0xD6, 0xB1, 0xE5, 0x92, 0xF9, 0x00, 0x59, 0x4E |
.byte 0xDD, 0x4C, 0xBA, 0x57, 0xC9, 0xA8, 0x06, 0x20, 0x36, 0x55, 0x6E, 0x81, 0xF2, 0x67, 0x64, 0xDD |
.byte 0xD6, 0xB8, 0xB8, 0xD4, 0x30, 0x94, 0x47, 0x07, 0x46, 0x2D, 0x99, 0x40, 0x2D, 0xF2, 0x8E, 0x0B |
.byte 0x3E, 0x49, 0x62, 0x08, 0xF1, 0x69, 0x29, 0x27, 0xBE, 0x97, 0xA9, 0xB1, 0xFE, 0x0D, 0x8F, 0xD5 |
.byte 0xC5, 0x48, 0xA9, 0xF6, 0xDD, 0xF1, 0xFE, 0x24, 0x1E, 0x97, 0x64, 0x4C, 0x89, 0xF3, 0x57, 0xC8 |
.byte 0x3C, 0xBA, 0xD1, 0x2D, 0x23, 0xFA, 0x55, 0xE2, 0x92, 0xFF, 0x94, 0x91, 0x0D, 0x24, 0x66, 0xD3 |
.byte 0x6C, 0x10, 0xCA, 0x4A, 0x01, 0xC8, 0x6E, 0x1F, 0x60, 0xD2, 0x6B, 0xE9, 0xC5, 0xC2, 0xB2, 0x01 |
.byte 0x7C, 0x83, 0x2F, 0xA0, 0x7D, 0x85, 0x82, 0x10, 0x85, 0x16, 0xA1, 0x92, 0x3A, 0x08, 0x66, 0xA7 |
.byte 0x18, 0x30, 0xF1, 0x19, 0xF9, 0x5F, 0x38, 0x59, 0x32, 0xA3, 0x43, 0xF7, 0x66, 0xF5, 0xF9, 0xE2 |
.byte 0x78, 0x29, 0x83, 0xF6, 0xAF, 0x05, 0x06, 0x34, 0x1C, 0xA8, 0xC6, 0x57, 0xB0, 0x2D, 0xFF, 0xC8 |
.byte 0x5D, 0xF0, 0xE1, 0x57, 0x50, 0x19, 0xB0, 0x82, 0xBD, 0xF3, 0x7A, 0x23, 0xE9, 0x74, 0x06, 0x62 |
.byte 0x9D, 0x89, 0x59, 0x4D, 0x8F, 0x60, 0x81, 0xAC, 0x08, 0x48, 0x03, 0xB9, 0x75, 0x02, 0x81, 0xD2 |
.byte 0xF3, 0x63, 0x2A, 0x44, 0x7D, 0xDB, 0xC6, 0x3B, 0xCF, 0x41, 0x5E, 0xB8, 0xB5, 0x65, 0x1B, 0x53 |
.byte 0xEF, 0x74, 0xA0, 0x7F, 0xD4, 0x22, 0x2B, 0xDD, 0x6A, 0x2F, 0x96, 0xDF, 0x32, 0x18, 0xB2, 0x25 |
.byte 0x7B, 0xDC, 0x6A, 0xF9, 0xB7, 0x31, 0x34, 0x86, 0x72, 0x93, 0x3F, 0x28, 0xF9, 0x5A, 0x7C, 0xE8 |
.byte 0xCE, 0x1D, 0x67, 0xA3, 0x3F, 0x93, 0x80, 0xA9, 0xC2, 0x17, 0x88, 0xF4, 0x2F, 0x3A, 0x1A, 0xAB |
.byte 0x17, 0x84, 0xA4, 0xCF, 0xB5, 0xD9, 0x56, 0x28, 0x6C, 0x95, 0x50, 0x65, 0xF0, 0xCD, 0x4E, 0xBF |
.byte 0xEA, 0xB6, 0x62, 0x29, 0x49, 0xE3, 0xD3, 0x0B, 0xFA, 0x5C, 0xFF, 0x2A, 0x97, 0x1A, 0xD5, 0xAE |
.byte 0x9E, 0x7A, 0x7D, 0x53, 0x54, 0xD4, 0x7B, 0xC0, 0x69, 0xCC, 0x26, 0x59, 0x99, 0x74, 0x18, 0x83 |
.byte 0x2A, 0x7B, 0xAD, 0x74, 0x5E, 0x81, 0x7F, 0x59, 0xDD, 0x7F, 0x83, 0x74, 0x99, 0x59, 0x23, 0x38 |
.byte 0xD4, 0xA1, 0x8B, 0x28, 0x75, 0x07, 0xE9, 0xDF, 0xD4, 0x10, 0x38, 0x6D, 0x84, 0x51, 0xF1, 0xAF |
.byte 0xCC, 0x9E, 0x23, 0x2B, 0x20, 0xA3, 0x84, 0xFD, 0x23, 0x08, 0x72, 0xBD, 0x61, 0x95, 0xF5, 0x36 |
.byte 0x37, 0x81, 0x5F, 0xAC, 0x89, 0x48, 0x8B, 0x5D, 0x58, 0xC4, 0xCA, 0xDD, 0x15, 0xBB, 0x8D, 0xE2 |
.byte 0x5A, 0xB1, 0x0D, 0x7A, 0x54, 0x92, 0x78, 0x78, 0x9A, 0xEA, 0x35, 0xFC, 0x80, 0x2B, 0x32, 0xB7 |
.byte 0xAC, 0x91, 0x64, 0x35, 0xDA, 0xF0, 0x93, 0x32, 0xB4, 0x5D, 0x10, 0xCA, 0x19, 0x9D, 0xAD, 0x74 |
.byte 0x4E, 0xBB, 0xEE, 0xA3, 0x4D, 0x67, 0x1C, 0xE8, 0x52, 0x51, 0xE4, 0xD2, 0x7D, 0x16, 0x8A, 0x2A |
.byte 0xA8, 0xEF, 0x60, 0x82, 0xDF, 0xF3, 0xB5, 0x94, 0x50, 0xC5, 0x5F, 0x6A, 0x63, 0x0C, 0xDE, 0xB1 |
.byte 0xC7, 0xCC, 0x55, 0x15, 0x34, 0x71, 0xFD, 0x86, 0xC3, 0xE1, 0x59, 0x40, 0xF8, 0xE4, 0x6B, 0xA1 |
.byte 0xD3, 0xCB, 0x24, 0xB3, 0xBE, 0xD9, 0x48, 0x0F, 0x9F, 0xA7, 0x79, 0x02, 0xB4, 0x57, 0xB4, 0x7C |
.byte 0x24, 0x09, 0x91, 0x58, 0x7B, 0x8F, 0xDF, 0x3F, 0x71, 0x38, 0x80, 0x69, 0x1C, 0xEB, 0x0B, 0xF0 |
.byte 0xB6, 0x2F, 0xA3, 0x74, 0x09, 0xEB, 0x83, 0xA8, 0x92, 0xFD, 0xAB, 0x47, 0x54, 0x5F, 0xC3, 0x78 |
.byte 0x69, 0x54, 0xD0, 0xE4, 0xE4, 0xAF, 0x23, 0x55, 0xE8, 0xA3, 0xBF, 0x04, 0x8E, 0xCA, 0xF5, 0x45 |
.byte 0xFA, 0x98, 0xB9, 0x03, 0x84, 0x3D, 0xAB, 0x17, 0x3A, 0x56, 0x5E, 0x8F, 0xB6, 0x21, 0x07, 0x1F |
.byte 0x76, 0xD8, 0x04, 0x5A, 0x88, 0x27, 0xAF, 0x70, 0xCB, 0x6F, 0x75, 0x5A, 0x39, 0x6A, 0x9F, 0x33 |
.byte 0x03, 0x59, 0x37, 0x87, 0x96, 0xE3, 0x9E, 0xD1, 0x3A, 0xFC, 0x60, 0xF0, 0x1E, 0x68, 0x10, 0x94 |
.byte 0x40, 0x14, 0xEF, 0xC9, 0x3B, 0x9F, 0x39, 0x07, 0x0E, 0xAE, 0x61, 0x48, 0x19, 0x00, 0x7C, 0x1C |
.byte 0x59, 0xB3, 0xA3, 0xF0, 0x97, 0x42, 0xC2, 0xD1, 0x3E, 0x23, 0xC1, 0x5D, 0x8B, 0xD2, 0xF2, 0xCC |
.byte 0xE6, 0xE1, 0x95, 0x22, 0x81, 0xCF, 0x29, 0x90, 0x7E, 0x8A, 0xD8, 0x97, 0x8A, 0x55, 0xB4, 0xE4 |
.byte 0x09, 0x57, 0xD4, 0xA0, 0x9A, 0x97, 0x71, 0xD8, 0xBA, 0x33, 0x36, 0x46, 0x05, 0x28, 0x12, 0xEB |
.byte 0x09, 0xA8, 0x0D, 0x8B, 0x77, 0x36, 0x1B, 0xF5, 0xC1, 0xF3, 0x8C, 0x4B, 0x49, 0x41, 0x30, 0x52 |
.byte 0x99, 0x05, 0xF2, 0x33, 0x9C, 0x64, 0x0C, 0x56, 0x98, 0x42, 0x9C, 0x9D, 0x6A, 0xAF, 0x89, 0x74 |
.byte 0x57, 0x97, 0xFF, 0xCF, 0xCE, 0x1A, 0xC4, 0x8F, 0x0E, 0x51, 0xDB, 0x57, 0x92, 0x0B, 0xA9, 0x2B |
.byte 0x10, 0x9C, 0x5F, 0xAD, 0x01, 0x6B, 0x03, 0x99, 0xAD, 0xA0, 0x36, 0x17, 0x50, 0xC0, 0x8C, 0xA8 |
.byte 0x57, 0x8B, 0x77, 0x26, 0xA5, 0x3C, 0xB5, 0xB3, 0x8D, 0x91, 0x0B, 0x20, 0x9C, 0xB5, 0x4C, 0xAD |
.byte 0x51, 0xAB, 0x5B, 0x52, 0x17, 0x5E, 0xEC, 0xC4, 0xFF, 0x23, 0xDC, 0x50, 0xE3, 0x68, 0xF8, 0x3B |
.byte 0xF3, 0x70, 0x61, 0x99, 0xAC, 0x16, 0x4C, 0x39, 0xA8, 0x58, 0x5A, 0x45, 0x0D, 0xA6, 0xF2, 0x5E |
.byte 0x52, 0x4D, 0xB1, 0x69, 0xAC, 0x9D, 0x2E, 0xAC, 0xC0, 0x0A, 0xFC, 0xA4, 0x73, 0xF5, 0xDF, 0x67 |
.byte 0x65, 0x41, 0x00, 0x11, 0x58, 0x4D, 0x4B, 0x00, 0xA5, 0xA5, 0x45, 0xB2, 0x4C, 0x38, 0x11, 0x9E |
.byte 0x86, 0xC3, 0x07, 0x33, 0x61, 0x35, 0xDF, 0x22, 0x40, 0xDC, 0xC6, 0xB4, 0xD2, 0xA6, 0x1B, 0x37 |
.byte 0xE7, 0x1C, 0x49, 0x40, 0x69, 0x94, 0x40, 0x0F, 0x39, 0x85, 0xC2, 0x85, 0xBD, 0xD4, 0x24, 0x44 |
.byte 0x97, 0x2B, 0x77, 0xF8, 0x61, 0x56, 0x1B, 0xA2, 0x33, 0xE2, 0x56, 0x05, 0x89, 0x71, 0x3D, 0x71 |
.byte 0x8D, 0x86, 0xB1, 0xF7, 0x1A, 0xF1, 0x06, 0x54, 0x77, 0xC9, 0xDA, 0x34, 0x9D, 0xFE, 0x79, 0x34 |
.byte 0x2A, 0xF0, 0x2D, 0x8C, 0x47, 0x49, 0x2E, 0x7A, 0x2B, 0x84, 0x80, 0xB4, 0xF5, 0xBD, 0x25, 0x83 |
.byte 0x43, 0xD6, 0x7A, 0x5E, 0xC8, 0x81, 0xB2, 0x3F, 0x4A, 0x8C, 0x74, 0xE8, 0x8B, 0xED, 0x1C, 0xB5 |
.byte 0xDD, 0x4A, 0x41, 0x24, 0x93, 0x70, 0x9F, 0xBF, 0xF4, 0x20, 0x73, 0xEA, 0xDD, 0x99, 0x6D, 0x21 |
.byte 0x6F, 0xE8, 0x7F, 0x37, 0x69, 0x32, 0x77, 0xB4, 0xBE, 0xEB, 0x9D, 0x4A, 0xD8, 0xB9, 0x00, 0xB6 |
.byte 0x04, 0x42, 0xDB, 0x98, 0xB2, 0x7B, 0x57, 0xA6, 0x9B, 0xCA, 0x90, 0x78, 0x63, 0xFE, 0x9A, 0xD3 |
.byte 0xE6, 0x19, 0x0B, 0x50, 0x4C, 0x83, 0x05, 0x0B, 0x6E, 0xA2, 0x55, 0x47, 0x5C, 0x55, 0xFE, 0x60 |
.byte 0x97, 0xD9, 0xF8, 0x4A, 0x54, 0x50, 0xF0, 0xEF, 0x1B, 0x81, 0x68, 0x7E, 0x7F, 0x02, 0x52, 0x65 |
.byte 0x1C, 0x5E, 0xB5, 0x68, 0xE1, 0xBA, 0x73, 0x50, 0x5C, 0xC9, 0x97, 0xB8, 0x1E, 0x96, 0x19, 0xB6 |
.byte 0x6F, 0x12, 0x00, 0xC4, 0x62, 0xF1, 0xB4, 0x7D, 0x72, 0x1D, 0xFC, 0xF2, 0x20, 0x4F, 0x57, 0x3C |
.byte 0xAD, 0x0D, 0xA5, 0x8F, 0xC8, 0x19, 0xDF, 0x24, 0xE3, 0x77, 0xDD, 0x02, 0x0D, 0xF7, 0xB8, 0x7D |
.byte 0x09, 0xB9, 0x41, 0x6C, 0xAB, 0xF6, 0xEA, 0x1D, 0x13, 0xE6, 0x10, 0x33, 0x36, 0x67, 0x70, 0xE4 |
.byte 0x75, 0x16, 0x73, 0x3D, 0x30, 0x53, 0x62, 0x13, 0xCA, 0x40, 0x15, 0xD8, 0x37, 0xCE, 0x55, 0x41 |
.byte 0x88, 0x97, 0xAD, 0x33, 0x8D, 0x98, 0x51, 0xA1, 0x7F, 0x61, 0xD5, 0xB5, 0xC9, 0x45, 0x99, 0x3E |
.byte 0x5C, 0x0C, 0x7C, 0x8C, 0x60, 0xDE, 0xA0, 0x2A, 0x1E, 0xB6, 0x02, 0x55, 0x84, 0x57, 0x97, 0x0D |
.byte 0xEF, 0x44, 0x40, 0x7C, 0xDD, 0x91, 0x1E, 0x5C, 0xF3, 0xF3, 0x11, 0xBC, 0x39, 0xAA, 0xFB, 0x95 |
.byte 0xB7, 0x77, 0x22, 0x17, 0x55, 0xC2, 0x42, 0x74, 0x79, 0x44, 0xC9, 0xFE, 0x9C, 0x61, 0x0B, 0x8B |
.byte 0xA6, 0x4B, 0x08, 0x83, 0xDD, 0x27, 0xDF, 0xD1, 0x1A, 0xF0, 0x8E, 0x53, 0x9B, 0x89, 0xE9, 0x53 |
.byte 0x00, 0x0B, 0x6B, 0x56, 0xCE, 0xAD, 0xCA, 0x47, 0xF2, 0x94, 0x45, 0x8E, 0xF5, 0x50, 0x1A, 0x9B |
.byte 0x9C, 0x23, 0x1E, 0x7A, 0x4A, 0xFE, 0x4B, 0x65, 0xEE, 0xD9, 0xB8, 0x8A, 0x63, 0xA2, 0xDD, 0x63 |
.byte 0xAD, 0x48, 0xBA, 0x7B, 0xF5, 0x85, 0xC3, 0xE7, 0x19, 0x08, 0x76, 0x0F, 0x59, 0x91, 0xAB, 0xF5 |
.byte 0xB4, 0xC9, 0x70, 0xFF, 0xC8, 0xBC, 0x64, 0xB6, 0x95, 0x1D, 0x41, 0xF9, 0xBF, 0x1E, 0x5C, 0x6D |
.byte 0x67, 0x17, 0xE9, 0x5D, 0x9C, 0xAC, 0x45, 0xB6, 0xB4, 0xBB, 0xC5, 0x0E, 0x4D, 0x70, 0x04, 0x02 |
.byte 0x3A, 0x74, 0x01, 0x02, 0x30, 0x66, 0xB9, 0xC6, 0x83, 0xFA, 0xBF, 0x43, 0x19, 0x1C, 0xB0, 0x81 |
.byte 0x34, 0x9A, 0xDE, 0xD0, 0x46, 0x23, 0x86, 0xFB, 0xDF, 0x4C, 0x09, 0x2D, 0xBC, 0x0D, 0x2F, 0xF7 |
.byte 0x82, 0x30, 0xFA, 0xB2, 0x96, 0xB3, 0x79, 0x1A, 0xAE, 0x39, 0x5D, 0xC8, 0x55, 0x0E, 0x49, 0x89 |
.byte 0xA8, 0x28, 0x5A, 0xEF, 0x4C, 0xE1, 0xEA, 0x2B, 0x2D, 0xF4, 0x58, 0xEA, 0x02, 0x88, 0xE1, 0x84 |
.byte 0xB8, 0xDB, 0x37, 0x4F, 0x8F, 0xB0, 0x69, 0x3E, 0xE9, 0xC7, 0x07, 0x3F, 0xD5, 0x51, 0xC9, 0x7E |
.byte 0x79, 0x23, 0x6D, 0xC5, 0x04, 0x58, 0xF1, 0x31, 0x4D, 0x4A, 0x1C, 0x4F, 0xD2, 0xFE, 0xD3, 0x8B |
.byte 0xD9, 0x0B, 0xDA, 0x69, 0xBC, 0x43, 0xA8, 0xA5, 0x0A, 0xAF, 0xE5, 0xE0, 0x00, 0xAE, 0x5E, 0x7A |
.byte 0xD2, 0xCC, 0x40, 0xD6, 0x25, 0x31, 0x08, 0x72, 0x7C, 0x25, 0xC1, 0x4E, 0x23, 0x95, 0xD9, 0xFD |
.byte 0xA0, 0xB4, 0x66, 0x5C, 0xF7, 0x0F, 0x02, 0x02, 0xBF, 0xE7, 0xE3, 0xC0, 0x96, 0x41, 0x3A, 0x69 |
.byte 0x0E, 0x7A, 0x3F, 0x33, 0xAC, 0x48, 0xA5, 0x28, 0x6D, 0x66, 0x77, 0x91, 0xFC, 0x51, 0x8E, 0x9C |
.byte 0x05, 0xF5, 0xF8, 0xFD, 0x04, 0xFB, 0x00, 0xC4, 0xE3, 0xE3, 0x84, 0x79, 0x25, 0xBF, 0xE2, 0x33 |
.byte 0x39, 0x22, 0x66, 0xE6, 0x6B, 0x0C, 0x0E, 0xD9, 0x73, 0x86, 0x6A, 0x6F, 0xD7, 0xF8, 0x0B, 0xDD |
.byte 0xEE, 0x04, 0xDA, 0xF2, 0xFF, 0xDB, 0xB6, 0xE2, 0xBE, 0x3B, 0x5C, 0xE3, 0xFA, 0x3F, 0x17, 0x33 |
.byte 0x62, 0x7E, 0x1A, 0xCD, 0x8A, 0x29, 0xA7, 0xFE, 0xAF, 0x11, 0x6D, 0x87, 0x0A, 0x79, 0x64, 0xF8 |
.byte 0x7D, 0x3F, 0xEB, 0x7D, 0x1A, 0xA2, 0x60, 0xD9, 0xDD, 0xBC, 0xBC, 0xD7, 0xFC, 0xD4, 0x0B, 0x5E |
.byte 0x52, 0x25, 0x2C, 0xDC, 0x4F, 0xD4, 0xDA, 0xFE, 0xE6, 0x48, 0x85, 0xF1, 0xC1, 0xEA, 0xEA, 0x3F |
.byte 0x2A, 0xD5, 0xBC, 0x44, 0x78, 0x1C, 0x1E, 0x55, 0xD9, 0xDB, 0x2D, 0xD6, 0xAF, 0x38, 0x35, 0x01 |
.byte 0x5E, 0x62, 0xDE, 0xAD, 0x36, 0xB9, 0xAC, 0x1D, 0x01, 0x32, 0x0E, 0xC2, 0x1C, 0xF8, 0x01, 0x46 |
.byte 0xCD, 0xBE, 0x8B, 0x45, 0xDB, 0xA9, 0x9B, 0xB4, 0x84, 0xC8, 0x8B, 0x34, 0x01, 0xC0, 0x35, 0x5F |
.byte 0x22, 0x13, 0x0D, 0x59, 0xCC, 0xB9, 0x76, 0xCD, 0xEC, 0x84, 0x90, 0x09, 0x7C, 0x92, 0x50, 0x4A |
.byte 0x50, 0xDB, 0x90, 0x2B, 0x85, 0x2C, 0xE0, 0x0A, 0xF4, 0x6B, 0x3E, 0xF6, 0x2C, 0x74, 0x56, 0x4E |
.byte 0x87, 0x63, 0xA8, 0x54, 0x1D, 0x1E, 0x21, 0x0A, 0xA2, 0xB2, 0x13, 0x1F, 0x44, 0x63, 0x6A, 0x95 |
.byte 0x3F, 0xFB, 0xC1, 0xC4, 0x27, 0xA1, 0xCF, 0x1C, 0x0D, 0x0E, 0x12, 0x39, 0x82, 0x68, 0x88, 0x0A |
.byte 0xCC, 0x30, 0x5E, 0xEA, 0x4F, 0x80, 0xF4, 0xF2, 0x32, 0x07, 0x11, 0x77, 0x6A, 0x7C, 0x0D, 0xA9 |
.byte 0x77, 0xCE, 0x6E, 0x9E, 0x70, 0x3E, 0xBB, 0x7E, 0x4C, 0xCD, 0xB8, 0xCF, 0x36, 0x40, 0xD9, 0x03 |
.byte 0x71, 0x38, 0xED, 0xC0, 0xB8, 0xE2, 0xB2, 0xEB, 0xE9, 0xC4, 0x63, 0x54, 0x41, 0x70, 0xFE, 0xB8 |
.byte 0x3F, 0x6D, 0x57, 0xAF, 0xAB, 0x12, 0x2D, 0xF8, 0xE0, 0xE5, 0xC8, 0x16, 0x26, 0xA1, 0x1A, 0x98 |
.byte 0xDA, 0x07, 0x58, 0x92, 0xE9, 0x0B, 0x7E, 0xD3, 0xD0, 0xE1, 0x28, 0x11, 0x52, 0x26, 0xCA, 0x91 |
.byte 0x93, 0x21, 0x41, 0x3F, 0x34, 0x6E, 0x37, 0x14, 0x54, 0xFF, 0x2B, 0x7B, 0xA1, 0x45, 0x13, 0x7B |
.byte 0x4D, 0x6C, 0x0E, 0x37, 0x77, 0x8D, 0x0A, 0x47, 0x6F, 0x32, 0x59, 0xC1, 0x59, 0x23, 0x53, 0xEC |
.byte 0x44, 0x94, 0x2C, 0x79, 0x02, 0x63, 0x8E, 0x57, 0x63, 0xB9, 0xD3, 0x04, 0xFF, 0xE6, 0x80, 0x4C |
.byte 0x52, 0x8F, 0x83, 0xCA, 0x1C, 0x8E, 0x12, 0x8B, 0xC1, 0x6B, 0x4D, 0x1A, 0x8E, 0xA0, 0x07, 0xD3 |
.byte 0x34, 0x33, 0x4D, 0x37, 0x97, 0xDB, 0x8F, 0xFA, 0x95, 0x62, 0xFF, 0x94, 0x48, 0x80, 0xE1, 0x9B |
.byte 0x0F, 0x65, 0x65, 0x2C, 0xF3, 0x77, 0xB7, 0xB4, 0xE2, 0x05, 0xCF, 0x71, 0xA5, 0xD6, 0x45, 0xD9 |
.byte 0x0A, 0x92, 0x11, 0xA1, 0x6D, 0xA0, 0x9C, 0x02, 0x02, 0x9B, 0x97, 0x4B, 0x1C, 0x78, 0xE6, 0x2B |
.byte 0xDD, 0x4B, 0x57, 0xD1, 0xC3, 0x0F, 0x86, 0xA5, 0x14, 0x55, 0x17, 0xB9, 0x2C, 0x5D, 0x93, 0x37 |
.byte 0xEF, 0xA4, 0xD9, 0x5D, 0x45, 0x75, 0x60, 0x47, 0x11, 0xF7, 0x93, 0x2D, 0x70, 0x79, 0x59, 0x4E |
.byte 0xC5, 0xB0, 0x1F, 0x88, 0xC0, 0xA6, 0x2E, 0xD4, 0xFC, 0x45, 0x8E, 0x29, 0xA2, 0x22, 0x60, 0x92 |
.byte 0xC7, 0x39, 0xEF, 0x0C, 0xAE, 0x50, 0x54, 0xC0, 0x48, 0xE7, 0xED, 0xB8, 0x60, 0x46, 0x06, 0x25 |
.byte 0xF7, 0x26, 0xAD, 0xB7, 0xCD, 0xDC, 0x8C, 0xC9, 0x21, 0x1A, 0xF2, 0xC4, 0x3D, 0x52, 0x56, 0x04 |
.byte 0x8C, 0x46, 0x10, 0x3A, 0x96, 0x65, 0xFA, 0xDE, 0x4C, 0xE8, 0x97, 0xAD, 0x2E, 0x9E, 0xD3, 0x26 |
.byte 0xC4, 0x81, 0xDD, 0x92, 0x5D, 0x69, 0x5B, 0x7E, 0x84, 0x4D, 0x43, 0xC1, 0xA0, 0x9A, 0xC6, 0x2C |
.byte 0xE0, 0xD6, 0x67, 0x77, 0x3B, 0x62, 0x55, 0x88, 0x4A, 0xEC, 0x35, 0x79, 0x8A, 0x09, 0x9F, 0x4F |
.byte 0x8A, 0x7D, 0xE1, 0xE7, 0xE7, 0x3D, 0x66, 0x6C, 0x8B, 0xAA, 0x2D, 0x2B, 0x44, 0xF3, 0x57, 0x24 |
.byte 0xCA, 0xBF, 0x9B, 0x06, 0x21, 0xF1, 0x8F, 0x6B, 0xDE, 0xC4, 0xE5, 0x69, 0xCE, 0x85, 0xB9, 0x58 |
.byte 0x02, 0x9B, 0x40, 0xE9, 0xD8, 0xA7, 0x55, 0x63, 0x51, 0x83, 0x8E, 0x95, 0x77, 0xE6, 0xBA, 0x42 |
.byte 0xA5, 0x56, 0x49, 0xC7, 0x47, 0xD8, 0x32, 0x25, 0x9D, 0x18, 0x8E, 0x6B, 0x9D, 0x48, 0xC4, 0x9F |
.byte 0xE3, 0x04, 0x89, 0xBB, 0xAB, 0xDF, 0x1F, 0xFD, 0x62, 0xAD, 0x92, 0xDA, 0x94, 0x4D, 0x1C, 0x3A |
.byte 0xA3, 0x65, 0x01, 0xEA, 0x3E, 0x34, 0x10, 0xDB, 0x4C, 0x9F, 0x46, 0xE9, 0xE7, 0x0A, 0x89, 0xCA |
.byte 0x0F, 0x13, 0x86, 0xBA, 0xF2, 0xA5, 0xB8, 0x55, 0x53, 0x4A, 0x2F, 0xE7, 0x98, 0x4C, 0x22, 0x3B |
.byte 0xB2, 0x23, 0x26, 0xF0, 0x58, 0x36, 0xCB, 0xA4, 0xD6, 0x12, 0x8E, 0xBD, 0x1D, 0x18, 0x88, 0x2C |
.byte 0x2B, 0x0E, 0xE7, 0x1D, 0xB4, 0x9F, 0x72, 0x07, 0xEA, 0xA2, 0xEF, 0x82, 0xEE, 0x11, 0xBD, 0xA1 |
.byte 0x35, 0xE3, 0x91, 0x8D, 0x1A, 0x5D, 0x32, 0xF0, 0x70, 0xC1, 0xAE, 0x8D, 0xD9, 0x36, 0xB9, 0x04 |
.byte 0x45, 0xA0, 0x22, 0xF9, 0x3F, 0x95, 0x01, 0x2A, 0x37, 0xF0, 0xAC, 0x26, 0x02, 0x69, 0xC8, 0x38 |
.byte 0x4D, 0x59, 0xC6, 0x67, 0xB7, 0xF9, 0x57, 0x27, 0xBA, 0x05, 0xB5, 0x93, 0x3C, 0x6E, 0x98, 0x82 |
.byte 0x0F, 0xBA, 0x7B, 0x4F, 0x50, 0x7D, 0x79, 0x88, 0x6E, 0x25, 0xAE, 0x70, 0x8F, 0x76, 0xA9, 0xDC |
.byte 0xD0, 0x6F, 0x43, 0x88, 0x69, 0x9B, 0xB0, 0x23, 0xA1, 0x65, 0xB7, 0xDD, 0xD4, 0x4F, 0x5F, 0xE3 |
.byte 0x0A, 0xDB, 0x32, 0x5A, 0x58, 0xAC, 0xE2, 0xC6, 0xD2, 0x91, 0x37, 0x61, 0x08, 0xE1, 0x3D, 0xD9 |
.byte 0x50, 0x81, 0x61, 0xBA, 0x1C, 0x11, 0xDD, 0xBD, 0x76, 0x94, 0x9B, 0x4A, 0xE4, 0xFA, 0x2E, 0xEE |
.byte 0xD6, 0x61, 0x49, 0x2E, 0x0D, 0x2C, 0xF5, 0xE0, 0xBE, 0x2C, 0x41, 0xC6, 0x0D, 0x7F, 0xA0, 0x5E |
.byte 0x00, 0x01, 0x18, 0x1D, 0x13, 0xF6, 0xDB, 0x8A, 0x8A, 0x76, 0xD5, 0x6E, 0x71, 0x03, 0x5D, 0x47 |
.byte 0x64, 0xA7, 0x75, 0x72, 0xD4, 0x6B, 0x53, 0x92, 0x97, 0x94, 0x59, 0xA5, 0x13, 0xF9, 0x04, 0x14 |
.byte 0xFB, 0x1D, 0x31, 0x0E, 0x13, 0x0C, 0x98, 0x9E, 0x83, 0x6D, 0x0D, 0xF4, 0x71, 0x6B, 0x3B, 0xD6 |
.byte 0x12, 0xB1, 0x49, 0xE6, 0x1C, 0x9C, 0x79, 0xB4, 0x30, 0xD2, 0x5A, 0x44, 0xCC, 0x5E, 0x59, 0xC7 |
.byte 0x7C, 0x8A, 0xD6, 0x8F, 0x97, 0x6F, 0x2E, 0x1A, 0xDD, 0x3B, 0x0E, 0x4E, 0xA6, 0x4A, 0x25, 0xB9 |
.byte 0xFB, 0x6E, 0xA0, 0x18, 0x0A, 0x19, 0xCC, 0x3B, 0xEC, 0x26, 0x80, 0xB9, 0x85, 0xD9, 0x80, 0x01 |
.byte 0x64, 0x57, 0x91, 0xFB, 0xC6, 0xBF, 0x16, 0xA3, 0xFB, 0x25, 0xF2, 0xA1, 0x6F, 0x17, 0x5B, 0x6B |
.byte 0x86, 0xFB, 0x83, 0x91, 0x15, 0x50, 0xCC, 0x01, 0x77, 0x4D, 0xBA, 0xFC, 0x27, 0x3B, 0xFE, 0x8B |
.byte 0x93, 0x90, 0x87, 0x59, 0x4F, 0x9E, 0xFD, 0x4A, 0xC3, 0xEF, 0xEC, 0x33, 0x07, 0x48, 0x9E, 0x8D |
.byte 0x43, 0x22, 0x1E, 0x59, 0x73, 0xEB, 0x5B, 0xEA, 0x38, 0x16, 0xE7, 0x5F, 0x51, 0xE6, 0xEB, 0xE5 |
.byte 0x76, 0x72, 0x3E, 0xC5, 0x10, 0x3B, 0x10, 0xD4, 0x2B, 0xFC, 0x07, 0x32, 0x44, 0xA6, 0xC0, 0x88 |
.byte 0xC9, 0xDE, 0xE1, 0x3C, 0xCA, 0x3C, 0x27, 0x03, 0x53, 0x0E, 0x62, 0xA4, 0xF4, 0x4E, 0x89, 0x6A |
.byte 0xC1, 0xC8, 0x30, 0xD1, 0x04, 0x40, 0xA6, 0x30, 0x3D, 0xAD, 0x62, 0x82, 0x54, 0x23, 0x0B, 0x1E |
.byte 0x01, 0xED, 0x5A, 0xCB, 0x29, 0x81, 0xCE, 0x7C, 0x90, 0x31, 0x21, 0x85, 0x80, 0xAB, 0xF0, 0x41 |
.byte 0x74, 0x20, 0x12, 0x78, 0x61, 0xB9, 0xA8, 0x9F, 0x66, 0x0B, 0x21, 0xBB, 0x2E, 0x2C, 0xD9, 0x30 |
.byte 0x19, 0x34, 0xFC, 0x43, 0xB6, 0xCB, 0xC0, 0x46, 0xFD, 0xE2, 0xCC, 0x7D, 0x8E, 0xBC, 0xBE, 0x02 |
.byte 0xDD, 0xD1, 0x7B, 0x3E, 0x8A, 0x24, 0xDD, 0xF1, 0x30, 0xFF, 0xAD, 0x5F, 0x2C, 0x86, 0x90, 0x46 |
.byte 0xBB, 0x8D, 0x8A, 0x71, 0x58, 0x4A, 0xB8, 0x56, 0x2D, 0x84, 0xD3, 0xBC, 0x40, 0x92, 0xBF, 0x1D |
.byte 0x64, 0x3A, 0x5C, 0xEF, 0x5F, 0x3A, 0xE0, 0x90, 0x39, 0x8E, 0xF0, 0x65, 0x14, 0x80, 0xAC, 0xCF |
.byte 0x0D, 0x36, 0x40, 0x66, 0x81, 0xF9, 0xBC, 0xAE, 0x7D, 0x90, 0x6B, 0xBE, 0x23, 0x2A, 0xDC, 0x88 |
.byte 0x65, 0x38, 0x77, 0xC5, 0x72, 0x58, 0x55, 0xAC, 0xE6, 0x45, 0x11, 0xFB, 0xC6, 0xBE, 0xCA, 0xD3 |
.byte 0xF4, 0x0B, 0x3A, 0x75, 0x04, 0xF7, 0x24, 0x82, 0x87, 0x8F, 0x40, 0xAB, 0xB9, 0x1D, 0x33, 0x1F |
.byte 0x55, 0xAB, 0xE4, 0xC8, 0x03, 0x39, 0x74, 0xEA, 0x7F, 0x86, 0xE5, 0x45, 0x44, 0xAF, 0x19, 0x38 |
.byte 0xBB, 0x53, 0xAE, 0xC0, 0x4A, 0xD2, 0x43, 0xD2, 0x62, 0x84, 0x7E, 0x1C, 0xA1, 0xB2, 0x3B, 0xF6 |
.byte 0x5D, 0x1F, 0xBE, 0x60, 0x59, 0x33, 0x4A, 0xD9, 0xB9, 0x30, 0x1E, 0xFE, 0xE0, 0x38, 0x37, 0x9B |
.byte 0x8C, 0xE5, 0x5C, 0xD6, 0xB7, 0x9F, 0xA9, 0x1A, 0x23, 0x28, 0x36, 0xC4, 0xDA, 0x71, 0xBB, 0x37 |
.byte 0x91, 0x7A, 0x98, 0xEB, 0xAD, 0xE2, 0xC4, 0x67, 0x13, 0xE3, 0x66, 0xF3, 0x1B, 0x9D, 0x8E, 0xA7 |
.byte 0x82, 0xEB, 0x7E, 0x3A, 0x8B, 0x28, 0x54, 0xAF, 0x50, 0x8B, 0x73, 0x2A, 0xFC, 0x2F, 0x61, 0x8E |
.byte 0xA9, 0xF9, 0x79, 0x57, 0xDC, 0x3D, 0xBF, 0xEF, 0x20, 0x25, 0xE2, 0x3C, 0xC3, 0x71, 0xE3, 0x45 |
.byte 0x5D, 0x62, 0x80, 0xE8, 0x8A, 0xD4, 0x97, 0xDB, 0x5F, 0x0B, 0x05, 0x5C, 0x3B, 0x67, 0xEA, 0xE4 |
.byte 0x61, 0x64, 0x3C, 0x3D, 0xA1, 0xFC, 0x2D, 0xC2, 0x22, 0x10, 0xFF, 0xE5, 0x82, 0xE2, 0x2A, 0xDF |
.byte 0x45, 0xAA, 0xC7, 0xD0, 0x7F, 0x5F, 0xAB, 0xDF, 0x6B, 0xB0, 0x3C, 0xA6, 0x17, 0x27, 0x8B, 0x78 |
.byte 0x8B, 0xC7, 0xB6, 0x2D, 0xC4, 0xE4, 0xEF, 0xE6, 0xF4, 0xEF, 0xCB, 0x77, 0xD1, 0xF6, 0x56, 0x17 |
.byte 0xA1, 0x1E, 0xE7, 0x21, 0x7D, 0x92, 0x01, 0xE9, 0x43, 0x3D, 0x8F, 0x5B, 0x64, 0x1A, 0xD4, 0xF0 |
.byte 0xE2, 0x8A, 0x1D, 0xA6, 0x6E, 0x0D, 0x8C, 0x63, 0xFC, 0x58, 0xDA, 0xCE, 0x4F, 0x31, 0xE5, 0xF0 |
.byte 0x4F, 0xCD, 0x12, 0xCD, 0x5F, 0x13, 0xB6, 0xA3, 0x50, 0x45, 0xFE, 0xB5, 0x60, 0xD2, 0xA5, 0x42 |
.byte 0x5C, 0xC3, 0xE8, 0xCB, 0xD0, 0x75, 0x2F, 0xCC, 0xCE, 0x0A, 0x9A, 0x1D, 0x3B, 0x80, 0x0E, 0x8B |
.byte 0x4D, 0x21, 0x58, 0xAD, 0x34, 0x0F, 0x50, 0x85, 0x55, 0x4E, 0x3B, 0xB5, 0x20, 0xE1, 0xF8, 0x7D |
.byte 0xA4, 0xE1, 0x49, 0x74, 0x57, 0x79, 0x41, 0x25, 0x83, 0xDB, 0x43, 0xBF, 0x5C, 0x52, 0x4A, 0xA9 |
.byte 0x73, 0xA3, 0x57, 0xA8, 0xB2, 0xA7, 0x2E, 0x08, 0xF6, 0x69, 0xBE, 0x17, 0x4A, 0xB6, 0x95, 0xEE |
.byte 0x98, 0xDE, 0x63, 0xEF, 0x57, 0xA4, 0x15, 0xDB, 0x80, 0x59, 0x9A, 0xDC, 0xAC, 0xE5, 0x86, 0x20 |
.byte 0x88, 0xDD, 0xC8, 0x3B, 0x85, 0xF7, 0x43, 0x7C, 0x60, 0x02, 0x93, 0xAB, 0xB9, 0x28, 0x9A, 0x51 |
.byte 0x07, 0xFD, 0x40, 0x5F, 0xA2, 0x56, 0x3A, 0x22, 0xAF, 0xD5, 0xFE, 0x5B, 0xBA, 0x85, 0x7B, 0x43 |
.byte 0x63, 0x44, 0x7E, 0xE8, 0x3B, 0xC2, 0x65, 0x9C, 0xC5, 0xF8, 0x48, 0x7E, 0x21, 0xE2, 0xCF, 0x28 |
.byte 0xE0, 0x10, 0x87, 0x82, 0x67, 0xC2, 0xA4, 0x16, 0x98, 0xA3, 0x72, 0x53, 0x29, 0xEE, 0x96, 0x8C |
.byte 0x32, 0x15, 0x75, 0x6E, 0xD7, 0xDA, 0x0B, 0x9C, 0xD3, 0x53, 0x1B, 0xF4, 0x35, 0xEB, 0x1C, 0x15 |
.byte 0xFC, 0xA4, 0x98, 0x63, 0x67, 0x3D, 0x7A, 0xFF, 0xE0, 0xEC, 0x52, 0x0A, 0xDA, 0xE9, 0x96, 0x0D |
.byte 0xFE, 0x0B, 0x7C, 0xD5, 0xE6, 0x87, 0x72, 0xB9, 0xDA, 0x8E, 0xAD, 0x0F, 0x79, 0xCA, 0x25, 0x75 |
.byte 0x6E, 0xBE, 0xD8, 0xD5, 0xFB, 0x52, 0xD5, 0xDC, 0x3E, 0x27, 0xE6, 0x19, 0x10, 0x7D, 0x27, 0x0E |
.byte 0x88, 0xA3, 0xE4, 0x6E, 0x2A, 0x57, 0x28, 0x05, 0xE5, 0xD5, 0x15, 0x5E, 0x9F, 0x3A, 0xD4, 0x0D |
.byte 0xF9, 0xAC, 0xE3, 0xF4, 0xFE, 0xB8, 0xD1, 0x3D, 0xE0, 0xB8, 0x57, 0xF1, 0x35, 0x7F, 0x00, 0xBD |
.byte 0x22, 0xE5, 0x2C, 0x4D, 0x3C, 0x54, 0x52, 0x22, 0x2A, 0x68, 0x81, 0xC9, 0xA3, 0x55, 0xD7, 0x9C |
.byte 0x02, 0xBA, 0x91, 0x00, 0x73, 0x62, 0x3E, 0x54, 0x1A, 0x96, 0x45, 0x4F, 0x15, 0x45, 0x0D, 0x38 |
.byte 0x2B, 0x3A, 0x85, 0x68, 0x8F, 0xD8, 0x8A, 0xB9, 0x40, 0x0C, 0x83, 0xE3, 0x61, 0x5B, 0x80, 0x63 |
.byte 0x15, 0x11, 0x64, 0x89, 0x73, 0xA3, 0xDD, 0x8E, 0x3A, 0x23, 0xDE, 0x4F, 0x69, 0xEC, 0x87, 0x94 |
.byte 0x27, 0x0D, 0xFC, 0xB7, 0xE6, 0x87, 0x71, 0x27, 0x93, 0xF4, 0x0B, 0xF5, 0x4F, 0x8C, 0x59, 0x65 |
.byte 0x9D, 0xBE, 0xEF, 0x11, 0x62, 0xCD, 0xA0, 0x9C, 0xF0, 0x7E, 0xEC, 0x59, 0x6B, 0x74, 0xEE, 0x92 |
.byte 0x81, 0xEB, 0x49, 0x68, 0x72, 0xBA, 0x90, 0x06, 0xAF, 0x9C, 0xFC, 0xFE, 0x28, 0x56, 0x64, 0xC5 |
.byte 0x14, 0x53, 0xD7, 0x76, 0x20, 0x77, 0x13, 0x11, 0xF5, 0xFF, 0x6B, 0x61, 0x73, 0x59, 0xF3, 0xF5 |
.byte 0x45, 0x3D, 0x5E, 0xB7, 0xF7, 0xEE, 0xBE, 0xA6, 0x8B, 0xBB, 0xA5, 0xB3, 0x11, 0x09, 0x79, 0x25 |
.byte 0x5D, 0x50, 0x9C, 0x7D, 0xC7, 0xAF, 0x8F, 0xBD, 0xAE, 0xFA, 0x1E, 0x22, 0x53, 0x12, 0x17, 0x98 |
.byte 0x4F, 0x75, 0x50, 0x46, 0x63, 0x0F, 0xED, 0xEE, 0xCA, 0x92, 0xA2, 0xDC, 0x9C, 0x1B, 0x01, 0xF9 |
.byte 0x6B, 0x9E, 0x77, 0x33, 0x4E, 0x06, 0xF1, 0xFC, 0x00, 0x0F, 0x1F, 0x54, 0x21, 0x36, 0xED, 0x70 |
.byte 0xAB, 0x3D, 0xB7, 0x0F, 0x4D, 0xA4, 0xFE, 0x18, 0x37, 0xA0, 0xF4, 0xD3, 0xBC, 0xF5, 0xCD, 0x28 |
.byte 0x94, 0x44, 0x5C, 0xE2, 0x4B, 0x4D, 0xDF, 0x4C, 0x5C, 0xFE, 0xA0, 0x7E, 0x34, 0x8D, 0xEE, 0xE0 |
.byte 0xCB, 0xA6, 0xF0, 0x18, 0x4A, 0xEE, 0x30, 0x81, 0x8F, 0x25, 0x55, 0x4C, 0x1B, 0x22, 0x74, 0xAF |
.byte 0x67, 0xD0, 0x91, 0xB2, 0x1D, 0x71, 0xFE, 0x7A, 0x70, 0x9F, 0xF8, 0xA4, 0x2C, 0xE7, 0x85, 0xF8 |
.byte 0x8E, 0x75, 0x11, 0xD8, 0x64, 0x42, 0x5A, 0xF3, 0x67, 0xB0, 0x3F, 0x82, 0xD3, 0xB4, 0x31, 0x3A |
.byte 0x85, 0xC3, 0xED, 0xA3, 0x35, 0xEC, 0x1D, 0xA5, 0x8B, 0x16, 0x4A, 0xB8, 0xFE, 0xCF, 0xB0, 0x8C |
.byte 0x45, 0xC2, 0x65, 0xA9, 0x04, 0xC0, 0x9D, 0x6B, 0x71, 0xDD, 0xED, 0x44, 0x91, 0x1F, 0x7E, 0x16 |
.byte 0xE3, 0x6B, 0xB9, 0x18, 0x57, 0xD7, 0xBD, 0xE3, 0xEE, 0x07, 0x9B, 0xEC, 0xD7, 0x4C, 0x79, 0x1C |
.byte 0x0F, 0xDF, 0xC5, 0x13, 0xA0, 0x63, 0x7F, 0x11, 0x40, 0x6D, 0x55, 0xD1, 0x8C, 0xD4, 0xE8, 0x6F |
.byte 0x3F, 0xA2, 0x87, 0x97, 0x79, 0x44, 0x7B, 0x68, 0x4C, 0x17, 0x54, 0x23, 0x64, 0xCE, 0x3F, 0x73 |
.byte 0xAE, 0x05, 0x86, 0x4E, 0x68, 0x06, 0x60, 0xA8, 0x73, 0xB6, 0x7A, 0xFF, 0x8A, 0x62, 0x6F, 0xCA |
.byte 0x04, 0xF6, 0x62, 0x7E, 0x3B, 0xDD, 0xE6, 0x87, 0xF4, 0x3B, 0xAB, 0x58, 0x0A, 0xEA, 0xCC, 0xB8 |
.byte 0xEF, 0x53, 0x07, 0x58, 0x59, 0x68, 0x00, 0xCC, 0x1E, 0x7A, 0xCC, 0xA8, 0xDD, 0x3B, 0x72, 0xE2 |
.byte 0x31, 0xD4, 0x60, 0x6D, 0xB2, 0x47, 0xF5, 0xA6, 0x83, 0xA0, 0xFF, 0x8D, 0x8B, 0xCC, 0x46, 0x7A |
.byte 0x1F, 0x4E, 0xD3, 0x78, 0xB6, 0xD3, 0x45, 0xD5, 0x4E, 0x11, 0x7D, 0x2C, 0x4C, 0xF0, 0x0E, 0x7E |
.byte 0xC4, 0x6F, 0xEC, 0x77, 0xB6, 0xE1, 0x1D, 0x39, 0x82, 0x1D, 0xC7, 0x0D, 0xE9, 0x0D, 0x88, 0x09 |
.byte 0x5C, 0x5B, 0x81, 0x12, 0x2F, 0xC7, 0xE7, 0x7D, 0xD8, 0x65, 0xA9, 0x25, 0x55, 0xB8, 0xA3, 0x1A |
.byte 0x27, 0x90, 0x91, 0xDD, 0x71, 0xAF, 0x17, 0xF3, 0xCD, 0xDE, 0x00, 0xB6, 0xEC, 0x88, 0xBF, 0x48 |
.byte 0xE4, 0x41, 0x5B, 0x13, 0x09, 0x43, 0x90, 0xE1, 0xA8, 0x3A, 0x07, 0xFE, 0xF3, 0xAB, 0x18, 0x1A |
.byte 0x3B, 0xAA, 0xF8, 0xAC, 0x59, 0x0F, 0xA0, 0x26, 0xEE, 0xA1, 0xDD, 0xDB, 0x2A, 0x9D, 0x23, 0x0E |
.byte 0xDF, 0x7E, 0x21, 0xE8, 0xC2, 0xB2, 0xCA, 0x6A, 0xED, 0xD1, 0x68, 0xE0, 0x7C, 0x81, 0xFA, 0xB7 |
.byte 0x2B, 0xF3, 0x64, 0x85, 0x02, 0x04, 0xAB, 0xF1, 0xA6, 0x89, 0xCC, 0xD1, 0x26, 0xF0, 0xDF, 0x05 |
.byte 0x6F, 0x01, 0xEE, 0x31, 0xB4, 0xB8, 0x9B, 0xA1, 0x89, 0x04, 0x82, 0x05, 0x85, 0x7C, 0xBC, 0xB1 |
.byte 0x6F, 0x20, 0x36, 0x72, 0x25, 0xE1, 0x64, 0xCB, 0x6B, 0x30, 0x9C, 0x91, 0x20, 0x7C, 0x97, 0x90 |
.byte 0x7D, 0x85, 0xC1, 0x32, 0x3D, 0x5D, 0xD3, 0xC6, 0x61, 0x55, 0xCC, 0xE7, 0xD2, 0x88, 0x98, 0x42 |
.byte 0xA8, 0xCE, 0xB5, 0xCE, 0xB0, 0x19, 0x9A, 0x1B, 0x49, 0x37, 0xAD, 0x6A, 0xB3, 0x45, 0xFA, 0x31 |
.byte 0xCA, 0xBC, 0x63, 0x08, 0x19, 0x37, 0xCF, 0x7B, 0x8D, 0x9B, 0x62, 0x5F, 0x23, 0xFB, 0xA1, 0xCC |
.byte 0xCA, 0x57, 0x9A, 0x7A, 0x70, 0x35, 0x96, 0xBA, 0x6C, 0x44, 0x24, 0x20, 0x89, 0x1F, 0x52, 0x53 |
.byte 0xDC, 0xB6, 0x5C, 0xF5, 0xEE, 0x2B, 0x71, 0x7B, 0xC6, 0xD3, 0xDA, 0xEA, 0xCF, 0x7C, 0xB6, 0x99 |
.byte 0xD3, 0x51, 0x14, 0x44, 0x86, 0xAA, 0xFE, 0xF3, 0xEF, 0x23, 0x14, 0x78, 0x43, 0x66, 0xCC, 0x1F |
.byte 0x1D, 0x28, 0x15, 0x0B, 0x54, 0x86, 0x86, 0x1A, 0x5A, 0x61, 0x04, 0x29, 0xDE, 0xBB, 0xC3, 0xB2 |
.byte 0x0D, 0xD7, 0xF6, 0x94, 0x82, 0xF4, 0x87, 0x71, 0x17, 0x9C, 0xE9, 0x5A, 0x03, 0xB6, 0x7A, 0x20 |
.byte 0xDE, 0x8F, 0x2C, 0x33, 0x16, 0xB3, 0x4D, 0x70, 0x15, 0x52, 0x9A, 0xF3, 0x0E, 0x5D, 0xA6, 0x1B |
.byte 0x35, 0x9C, 0xAF, 0xB7, 0x90, 0x37, 0x29, 0xA8, 0xD3, 0x12, 0x03, 0xD7, 0xC9, 0x7D, 0xF7, 0xA8 |
.byte 0x0D, 0x24, 0xDB, 0x23, 0xD7, 0x28, 0x94, 0xED, 0x7B, 0x2F, 0xE0, 0x89, 0x8D, 0x86, 0xA5, 0xC2 |
.byte 0x23, 0x54, 0x79, 0xB4, 0x8C, 0xA2, 0x5C, 0x60, 0xB5, 0x60, 0x37, 0x7F, 0xDE, 0x2F, 0x27, 0xEB |
.byte 0x53, 0x02, 0x0F, 0x2B, 0x2B, 0xA4, 0x18, 0xA6, 0xD3, 0xF9, 0x30, 0x60, 0x7F, 0xD5, 0x22, 0xA3 |
.byte 0x2A, 0x9C, 0x57, 0xB7, 0x3F, 0xB4, 0x17, 0xF5, 0x14, 0x4E, 0x74, 0xF2, 0x7E, 0x9B, 0xDE, 0xD1 |
.byte 0x9E, 0xED, 0xFD, 0xC9, 0x91, 0x15, 0x70, 0x65, 0x0E, 0xA1, 0xC5, 0x8E, 0x77, 0xE8, 0x31, 0xA2 |
.byte 0x84, 0x89, 0x59, 0xC4, 0x3D, 0x71, 0xB9, 0x51, 0xC0, 0x2D, 0x44, 0x3E, 0xC9, 0x22, 0x10, 0x67 |
.byte 0x10, 0x0D, 0x31, 0xA2, 0x22, 0xA2, 0x07, 0x31, 0x43, 0xCC, 0xC0, 0xBB, 0xB5, 0xF2, 0x5D, 0x39 |
.byte 0x7B, 0xB6, 0xFD, 0xB8, 0x27, 0xB7, 0x0A, 0xE7, 0xE5, 0x4E, 0x26, 0xAE, 0x70, 0x36, 0x16, 0x81 |
.byte 0x43, 0x48, 0x23, 0x66, 0xEA, 0x2B, 0x98, 0x2E, 0xF8, 0x58, 0xE9, 0xAD, 0x4A, 0x46, 0xE6, 0xC6 |
.byte 0xFD, 0xE4, 0x7E, 0x25, 0x9B, 0x88, 0x0C, 0x80, 0xD6, 0x33, 0x2F, 0x47, 0x69, 0x45, 0xC9, 0xAC |
.byte 0x8E, 0xEC, 0x13, 0x78, 0x17, 0xAB, 0xA6, 0x0F, 0x04, 0x8F, 0xBD, 0x4F, 0xD6, 0xA3, 0x15, 0xD3 |
.byte 0x88, 0x93, 0xF8, 0x24, 0x1C, 0x05, 0xA5, 0xF3, 0x38, 0xD4, 0x3B, 0xA1, 0x1A, 0x04, 0x4E, 0xA8 |
.byte 0xF0, 0x61, 0x21, 0x08, 0x0D, 0xC7, 0x18, 0x11, 0x57, 0xD5, 0x60, 0x2D, 0x79, 0x75, 0x01, 0x02 |
.byte 0x09, 0xF9, 0x26, 0x26, 0xFF, 0xCB, 0x19, 0x37, 0xA0, 0x54, 0xD8, 0xBA, 0x58, 0x27, 0x63, 0x49 |
.byte 0x89, 0x84, 0x52, 0x96, 0x4C, 0x6B, 0xA8, 0xA3, 0x40, 0x08, 0xD1, 0xBA, 0x7E, 0xD2, 0xBC, 0x88 |
.byte 0xCB, 0xE2, 0xAE, 0xCA, 0xAE, 0xC7, 0x02, 0x4E, 0x1C, 0xDB, 0x09, 0x74, 0x02, 0x6C, 0xBE, 0x8B |
.byte 0xF1, 0x10, 0x22, 0x3D, 0x7B, 0xCA, 0xE1, 0xBC, 0xD3, 0xB2, 0x76, 0x52, 0x84, 0x33, 0xDA, 0x50 |
.byte 0x16, 0x89, 0x1B, 0xC4, 0x51, 0x1D, 0x13, 0x6D, 0xF8, 0x1C, 0xE2, 0xFB, 0x89, 0xA0, 0x87, 0x7B |
.byte 0xB1, 0xA9, 0xB8, 0x2D, 0x74, 0x99, 0xE9, 0x47, 0x4C, 0x60, 0x99, 0xD0, 0x93, 0x74, 0x21, 0xA9 |
.byte 0xFD, 0x3C, 0x6E, 0x4E, 0x59, 0x81, 0xBC, 0x52, 0x9E, 0x9E, 0x4E, 0x27, 0x3F, 0xD5, 0xA2, 0xF1 |
.byte 0x7F, 0x5B, 0x1E, 0xF3, 0xF5, 0x08, 0x3B, 0x41, 0x68, 0xD4, 0x12, 0xFC, 0x49, 0x33, 0xA6, 0x46 |
.byte 0x70, 0x15, 0x95, 0xCA, 0x96, 0x51, 0x1C, 0x34, 0xF0, 0x6B, 0x5C, 0x30, 0x40, 0xFF, 0x21, 0xBF |
.byte 0x5B, 0x40, 0xB2, 0x50, 0x48, 0xEE, 0x92, 0xB0, 0xC3, 0xA5, 0xAD, 0x0C, 0xD9, 0x54, 0x53, 0x49 |
.byte 0x69, 0xE8, 0x13, 0xFF, 0x3A, 0x30, 0x34, 0x2B, 0x9B, 0x91, 0x5B, 0xDC, 0x91, 0x7D, 0x9B, 0xEC |
.byte 0xBD, 0x4E, 0x3C, 0x05, 0x3C, 0xCF, 0xB6, 0xFF, 0x74, 0x64, 0x0C, 0x4E, 0xB8, 0x5F, 0x97, 0x21 |
.byte 0x48, 0xAB, 0x21, 0x83, 0xDC, 0x56, 0xAE, 0x77, 0xE8, 0x0A, 0x53, 0x79, 0x88, 0xEF, 0x65, 0x46 |
.byte 0x3E, 0xA2, 0x4B, 0x7A, 0x72, 0x02, 0x7A, 0xE7, 0x66, 0x86, 0x35, 0x1F, 0xE6, 0xCC, 0x40, 0x2E |
.byte 0x78, 0x62, 0xB2, 0x54, 0xB9, 0x61, 0xCC, 0xA1, 0x6B, 0x1F, 0x1A, 0xF4, 0x0F, 0x80, 0x3A, 0x4D |
.byte 0x22, 0x86, 0xC8, 0x94, 0x88, 0x42, 0x7B, 0xEF, 0xC9, 0xB0, 0x0E, 0xAF, 0x7D, 0x4F, 0xDE, 0xF6 |
.byte 0xB2, 0x90, 0x4A, 0x6B, 0xF1, 0x16, 0x0C, 0x5D, 0x36, 0x27, 0x51, 0x45, 0xA7, 0x8C, 0x92, 0xCA |
.byte 0x12, 0x5A, 0x5E, 0x9B, 0x9D, 0xDA, 0x8A, 0x67, 0x8B, 0x99, 0x16, 0x09, 0xE8, 0xF5, 0xFF, 0x9A |
.byte 0x85, 0x49, 0x06, 0x77, 0x60, 0x13, 0xD4, 0x96, 0x3B, 0x26, 0xDB, 0xE2, 0xB2, 0x6E, 0xAD, 0xC5 |
.byte 0xC9, 0x0B, 0x60, 0x67, 0xE6, 0xEB, 0xCE, 0x71, 0x84, 0xE5, 0x7B, 0x6D, 0xDA, 0x7A, 0x08, 0x60 |
.byte 0xC4, 0x0E, 0xD7, 0x24, 0x22, 0xAB, 0xBA, 0x5D, 0xD2, 0x96, 0x3F, 0x85, 0x05, 0xEC, 0x4A, 0xCF |
.byte 0xF8, 0xAB, 0x36, 0xDF, 0x96, 0x04, 0x51, 0x1B, 0xE9, 0xCC, 0x88, 0xC3, 0x46, 0x90, 0x23, 0x0A |
.byte 0x9F, 0xFB, 0x2E, 0xC1, 0xA7, 0xE9, 0x1E, 0x79, 0x80, 0x5E, 0xFF, 0x85, 0x4B, 0x4A, 0x54, 0x44 |
.byte 0xF5, 0x8B, 0x23, 0x8C, 0x8F, 0x74, 0xA8, 0x79, 0x41, 0x30, 0x3D, 0x87, 0xC1, 0x61, 0x92, 0x61 |
.byte 0x5C, 0xC1, 0x22, 0x03, 0xAB, 0x41, 0x7D, 0x2B, 0xA0, 0x7C, 0xB1, 0xEB, 0xC6, 0x06, 0x2F, 0xBC |
.byte 0x91, 0x53, 0x49, 0x21, 0xC8, 0xF1, 0x9A, 0x09, 0x22, 0xD7, 0x91, 0xE4, 0x38, 0x24, 0x45, 0x94 |
.byte 0xE5, 0x68, 0x98, 0x90, 0xAA, 0x15, 0xBB, 0x4A, 0x92, 0x6D, 0x35, 0x59, 0x73, 0x65, 0x16, 0x05 |
.byte 0xB9, 0x5F, 0x26, 0x81, 0x51, 0xC0, 0x8B, 0x73, 0x97, 0x1D, 0x57, 0xD0, 0x41, 0x9D, 0x64, 0x26 |
.byte 0x05, 0xFD, 0xB7, 0xB0, 0x12, 0x73, 0xFA, 0xA5, 0xE0, 0x2F, 0xFE, 0x54, 0x95, 0x14, 0x59, 0x4E |
.byte 0x74, 0x7F, 0xD0, 0xC5, 0x40, 0x5C, 0x38, 0xD8, 0x79, 0x90, 0xA8, 0xBB, 0x2E, 0x0D, 0xE2, 0x34 |
.byte 0x0A, 0x99, 0xE4, 0x1D, 0x0C, 0xDE, 0xC2, 0xED, 0x0E, 0xC1, 0x41, 0xA3, 0xD6, 0x9A, 0xF2, 0x4A |
.byte 0x1A, 0xC3, 0x0F, 0x5A, 0x20, 0x48, 0x33, 0x99, 0xD9, 0xDB, 0x55, 0x07, 0xE9, 0x37, 0x3B, 0xF4 |
.byte 0xD0, 0x20, 0x11, 0xDC, 0xFE, 0xD4, 0xC9, 0x0D, 0x96, 0x0B, 0xB0, 0x6C, 0xA5, 0xA3, 0xB7, 0xC0 |
.byte 0x67, 0xC7, 0x1B, 0x87, 0x0F, 0x4E, 0x21, 0xE9, 0x2A, 0x76, 0xF1, 0x13, 0xAD, 0x2D, 0x08, 0x7D |
.byte 0x4D, 0x1A, 0x5A, 0x4B, 0xEE, 0x24, 0x58, 0x85, 0x2F, 0x09, 0xF2, 0xD5, 0xAD, 0xA9, 0x95, 0x14 |
.byte 0x70, 0xB1, 0x9C, 0x80, 0x00, 0xBD, 0x69, 0x2A, 0x33, 0x5B, 0x3E, 0xE0, 0x88, 0x46, 0x5E, 0xD5 |
.byte 0x60, 0xB9, 0x21, 0x4F, 0xDD, 0x7A, 0xD5, 0x0C, 0x84, 0xC7, 0xE2, 0x32, 0x70, 0x78, 0x47, 0xE0 |
.byte 0x29, 0xE3, 0x61, 0x29, 0xA0, 0xCB, 0x54, 0xD4, 0x26, 0x93, 0xB5, 0xAE, 0xDA, 0x13, 0x84, 0x3B |
.byte 0xCC, 0xA6, 0x8B, 0xAA, 0x21, 0x60, 0xB6, 0xA5, 0x27, 0x99, 0xD8, 0x97, 0x11, 0x1F, 0x78, 0x3A |
.byte 0x02, 0xDA, 0x64, 0xA3, 0xA5, 0xB9, 0x77, 0xCB, 0x4D, 0x2D, 0x7A, 0x27, 0x40, 0xFF, 0x63, 0x0D |
.byte 0xA5, 0xEE, 0xB7, 0xC7, 0x4E, 0x6E, 0x6C, 0x76, 0x07, 0x45, 0x0E, 0x19, 0x64, 0x87, 0x54, 0x67 |
.byte 0x61, 0xB9, 0x0A, 0x06, 0x72, 0x82, 0xD2, 0xBF, 0xB0, 0x4D, 0xE7, 0xF0, 0x4D, 0x4A, 0xFE, 0xF3 |
.byte 0x39, 0xB6, 0xBA, 0x87, 0x25, 0x27, 0xFE, 0x2C, 0x6C, 0x0C, 0x46, 0xD0, 0x94, 0x9A, 0x38, 0xF5 |
.byte 0x53, 0x43, 0xFC, 0xC5, 0xC6, 0xCF, 0x85, 0x76, 0x1D, 0x6D, 0x67, 0x6A, 0xB7, 0x65, 0x5D, 0xF0 |
.byte 0x1C, 0x18, 0x78, 0x41, 0x3F, 0x77, 0x6E, 0xAB, 0x84, 0xB4, 0x7C, 0x18, 0x4E, 0xB4, 0x0E, 0xA1 |
.byte 0xF8, 0x0A, 0x67, 0xBE, 0xDA, 0xED, 0x34, 0xF7, 0x5A, 0x9B, 0x62, 0x12, 0x01, 0xC0, 0x03, 0x1D |
.byte 0xD8, 0x7C, 0x5E, 0x18, 0xF3, 0xCD, 0xC4, 0x77, 0x81, 0x40, 0x8F, 0xD0, 0xF5, 0x9E, 0x72, 0xEE |
.byte 0xA8, 0xDA, 0xAC, 0x83, 0xC7, 0xE0, 0x7A, 0x22, 0x7C, 0xDC, 0x35, 0x7D, 0x9D, 0x39, 0x9A, 0x75 |
.byte 0xB5, 0xF9, 0x8D, 0xA8, 0xC6, 0x52, 0x20, 0x48, 0x93, 0xB0, 0x18, 0x89, 0x4E, 0x8B, 0x77, 0xF7 |
.byte 0x65, 0x23, 0x7A, 0x2D, 0x03, 0xF5, 0x4F, 0x7F, 0xD2, 0x85, 0xFD, 0x6F, 0xBE, 0x97, 0xE4, 0x73 |
.byte 0x91, 0x72, 0x1C, 0x58, 0xC4, 0x3D, 0xA1, 0x58, 0xED, 0xBA, 0xE1, 0x3C, 0x45, 0x58, 0x33, 0xAA |
.byte 0x7B, 0xAE, 0xD7, 0x7F, 0xA3, 0x27, 0xFF, 0x75, 0xAC, 0xFC, 0xE4, 0x6B, 0x94, 0xC9, 0xDE, 0x25 |
.byte 0x3C, 0xFB, 0x7E, 0x01, 0x38, 0x1F, 0x59, 0x26, 0xDA, 0x3A, 0x63, 0x1F, 0x92, 0x96, 0xC9, 0x0E |
.byte 0x45, 0xA1, 0x8D, 0xE8, 0xC8, 0x8C, 0x5D, 0x75, 0x88, 0x42, 0xE0, 0x1C, 0x0B, 0xBF, 0x42, 0x48 |
.byte 0xBA, 0xC1, 0x49, 0xF3, 0xE1, 0xA2, 0x1A, 0xBB, 0xDD, 0x7D, 0xDA, 0x6F, 0x13, 0xA4, 0x7D, 0x58 |
.byte 0x45, 0x0B, 0x41, 0x0E, 0x97, 0x9F, 0x83, 0x20, 0xE1, 0x64, 0x3D, 0xED, 0x23, 0x7F, 0x35, 0xDE |
.byte 0x40, 0x7E, 0xD1, 0x22, 0x21, 0xEB, 0xDD, 0xFE, 0x68, 0xB8, 0x6E, 0x7C, 0x5C, 0xEC, 0xD5, 0xA2 |
.byte 0xF7, 0x17, 0xB0, 0x8F, 0xB6, 0x34, 0xAF, 0x97, 0x98, 0xED, 0x85, 0xBC, 0x6C, 0xBA, 0x9A, 0xAD |
.byte 0x39, 0x6C, 0xCF, 0x5A, 0x57, 0xAD, 0x59, 0xC0, 0x65, 0xC7, 0x3D, 0xC2, 0xB4, 0x13, 0x64, 0xAC |
.byte 0x2A, 0x15, 0x3B, 0xE0, 0x4A, 0xEB, 0x78, 0xE3, 0xD8, 0xFD, 0x9F, 0x45, 0xB8, 0x39, 0xF3, 0xF1 |
.byte 0xA5, 0xC3, 0x4C, 0xFD, 0x70, 0xA5, 0xBE, 0xD6, 0x6D, 0xFC, 0x98, 0x22, 0x0F, 0xFD, 0xCE, 0x3A |
.byte 0x13, 0x0A, 0x1A, 0x5D, 0xF5, 0x93, 0x40, 0xCE, 0x90, 0xDF, 0x14, 0x49, 0x19, 0x07, 0x3A, 0xBF |
.byte 0xCA, 0x87, 0xBD, 0x3A, 0x2D, 0x7B, 0x11, 0x9A, 0x78, 0xA9, 0xBD, 0x87, 0xA7, 0x8B, 0xC1, 0xBA |
.byte 0x95, 0xDC, 0x18, 0x8B, 0x6F, 0x58, 0x5A, 0x00, 0x38, 0x6E, 0x49, 0x52, 0x75, 0x84, 0x11, 0x40 |
.byte 0x0B, 0xCF, 0x7A, 0x38, 0x4B, 0x8C, 0xD3, 0xC3, 0x36, 0x90, 0x4B, 0xDD, 0x1C, 0x0D, 0x98, 0xB2 |
.byte 0xE9, 0xB0, 0x3E, 0x59, 0x09, 0x98, 0x5A, 0x42, 0x07, 0xA3, 0x94, 0x7D, 0x28, 0xA6, 0xBD, 0x33 |
.byte 0x76, 0x37, 0x6C, 0xC1, 0xC4, 0x40, 0x84, 0xFA, 0xD1, 0xD0, 0xD7, 0xED, 0xDD, 0x6F, 0xA0, 0xC6 |
.byte 0x20, 0xDE, 0x20, 0x2A, 0x77, 0x7A, 0x6C, 0x7F, 0x1E, 0x01, 0xFC, 0x46, 0xA8, 0xB9, 0x7A, 0x1E |
.byte 0xF1, 0xE7, 0xE0, 0xB5, 0x27, 0x65, 0xAF, 0xF8, 0x35, 0x87, 0xE6, 0x12, 0xF7, 0x86, 0xD9, 0x17 |
.byte 0x65, 0xFA, 0x41, 0xDD, 0x74, 0xAE, 0x5C, 0x92, 0xB0, 0x59, 0xD9, 0x59, 0x12, 0x53, 0x78, 0x03 |
.byte 0x3A, 0x58, 0xB9, 0x62, 0xBD, 0x68, 0x5A, 0xF3, 0xF0, 0x41, 0x06, 0xE7, 0xC8, 0xE0, 0xFE, 0x2E |
.byte 0xDA, 0x40, 0x0B, 0x4E, 0xEF, 0x68, 0xE1, 0x9F, 0xC1, 0xBA, 0xF8, 0xD4, 0x0E, 0x70, 0xD8, 0x49 |
.byte 0xC9, 0x91, 0xAB, 0x87, 0xFA, 0x06, 0x7A, 0xEA, 0x48, 0x81, 0xD1, 0x10, 0x61, 0xD0, 0x3E, 0x3B |
.byte 0x11, 0x4A, 0x8A, 0x00, 0xB3, 0x6C, 0xA0, 0x75, 0x27, 0x99, 0x49, 0x36, 0x09, 0x21, 0x7F, 0xD3 |
.byte 0xB3, 0x2B, 0x5A, 0xAE, 0x32, 0xD5, 0x98, 0x7A, 0x56, 0x6A, 0x8B, 0xB7, 0x3B, 0xC9, 0xF3, 0x4C |
.byte 0x14, 0x7E, 0x4D, 0xC7, 0xEB, 0xED, 0x3C, 0x12, 0x86, 0x86, 0x48, 0x90, 0xA7, 0xC8, 0x63, 0x5B |
.byte 0xF4, 0xBE, 0x09, 0x26, 0x93, 0xA2, 0xA1, 0xEA, 0x0D, 0x2C, 0xA1, 0x48, 0xF6, 0x95, 0x94, 0x0B |
.byte 0x14, 0xE1, 0xD2, 0xFF, 0xCF, 0x0F, 0x11, 0x55, 0x95, 0x5A, 0xE6, 0x3D, 0x23, 0x49, 0x98, 0x17 |
.byte 0x08, 0xA2, 0x3E, 0x9B, 0x45, 0xE0, 0x85, 0x52, 0x0D, 0x27, 0x9A, 0x03, 0xBD, 0x2F, 0x0E, 0xD1 |
.byte 0x11, 0xE1, 0xD0, 0xE0, 0xF0, 0xE2, 0x35, 0x86, 0x3C, 0x1B, 0xC3, 0x5F, 0x65, 0x5C, 0x77, 0x6E |
.byte 0xFF, 0xB5, 0x09, 0x44, 0x96, 0x8F, 0x96, 0xA3, 0xB7, 0x31, 0xA7, 0x74, 0x60, 0xB6, 0x45, 0x71 |
.byte 0x97, 0x16, 0x51, 0x88, 0xF8, 0x87, 0x0E, 0x35, 0xA3, 0xD2, 0x95, 0x09, 0x2F, 0x0C, 0x77, 0x2E |
.byte 0xC2, 0x81, 0x73, 0x59, 0x10, 0x09, 0xFC, 0xC7, 0x3A, 0xA3, 0x3C, 0x9B, 0x59, 0x82, 0x0C, 0xF1 |
.byte 0x98, 0x5D, 0x79, 0x91, 0xE5, 0x88, 0xC7, 0x88, 0x5B, 0x5C, 0x91, 0x8A, 0x69, 0x09, 0xB9, 0x2C |
.byte 0x8A, 0x2C, 0x85, 0x9A, 0x35, 0x81, 0x62, 0x70, 0x25, 0x9F, 0x0B, 0x7F, 0x21, 0x18, 0x70, 0xBA |
.byte 0x75, 0xEA, 0x4B, 0x5B, 0x72, 0x12, 0xE3, 0xCD, 0x6F, 0x75, 0x58, 0xD9, 0x7E, 0x11, 0x05, 0x09 |
.byte 0x3D, 0x8B, 0xA3, 0x73, 0x0D, 0x06, 0xE4, 0x32, 0xA5, 0xEF, 0xB1, 0xC7, 0x07, 0x21, 0x81, 0x7D |
.byte 0x0B, 0xCD, 0xD9, 0x7E, 0xE0, 0xBC, 0x4C, 0x4F, 0x32, 0xA4, 0x28, 0xB1, 0xB5, 0x2E, 0xBA, 0xF3 |
.byte 0xB9, 0x5E, 0x66, 0xC6, 0x65, 0x4A, 0xF9, 0x0A, 0x3A, 0xAA, 0xD2, 0x42, 0xCC, 0x53, 0xC0, 0xD8 |
.byte 0x20, 0x99, 0x56, 0x00, 0x56, 0xA2, 0x50, 0x88, 0x47, 0x79, 0x3A, 0xFD, 0xA7, 0xF4, 0xF0, 0x61 |
.byte 0x52, 0x57, 0x28, 0xB7, 0xA1, 0x21, 0xC2, 0xDC, 0xCB, 0x94, 0x1F, 0x97, 0xE8, 0xE0, 0x70, 0x08 |
.byte 0x79, 0xC6, 0x09, 0xD0, 0x69, 0x59, 0x59, 0xB1, 0xD2, 0x93, 0xAE, 0x7A, 0x87, 0x9E, 0xDB, 0xDA |
.byte 0xF5, 0x03, 0x92, 0x97, 0x24, 0x55, 0x74, 0xF0, 0xEA, 0x93, 0x88, 0xD2, 0x74, 0xF8, 0xDB, 0xED |
.byte 0xBF, 0xE5, 0xBD, 0x28, 0x3F, 0x17, 0xD9, 0x12, 0xAA, 0x88, 0x8C, 0x32, 0x27, 0x68, 0x0D, 0x1C |
.byte 0x6C, 0x9F, 0xB4, 0x91, 0xF5, 0x29, 0x81, 0xDF, 0xBD, 0x0A, 0xB2, 0x31, 0x02, 0x8E, 0x1F, 0xC1 |
.byte 0x73, 0xDC, 0xEA, 0xB3, 0xF4, 0xC4, 0xC5, 0x9E, 0x4C, 0x51, 0xD0, 0x73, 0xBA, 0xDE, 0x90, 0x26 |
.byte 0x7E, 0x45, 0xB7, 0x73, 0x6E, 0x38, 0x53, 0x2C, 0x42, 0x06, 0x5D, 0x45, 0x94, 0x7C, 0x07, 0x08 |
.byte 0x59, 0xF1, 0xBB, 0x4D, 0xB6, 0x80, 0xEC, 0x03, 0xD2, 0xBD, 0x77, 0x8C, 0x9B, 0x08, 0xB2, 0x19 |
.byte 0x4D, 0x6A, 0x8D, 0xBC, 0xA2, 0xE0, 0xE8, 0xE5, 0xE6, 0x46, 0x2B, 0x7B, 0xC2, 0x32, 0x84, 0x1C |
.byte 0x24, 0x3F, 0x6A, 0xDB, 0xC0, 0x56, 0xDE, 0x93, 0x13, 0x56, 0x20, 0xAE, 0x5E, 0xD3, 0xC8, 0xAB |
.byte 0x3D, 0x55, 0x68, 0xE0, 0x35, 0x51, 0xC6, 0x1C, 0x97, 0xF1, 0x98, 0x5A, 0x24, 0x1C, 0x76, 0x49 |
.byte 0x5C, 0xE0, 0x24, 0x1D, 0x37, 0x03, 0xB0, 0x4A, 0x59, 0xD1, 0xF9, 0xB7, 0xA4, 0xC1, 0x63, 0xE1 |
.byte 0x17, 0xCB, 0xC1, 0x4D, 0x1D, 0x87, 0x69, 0xB4, 0x79, 0x02, 0x0E, 0x9D, 0x1E, 0x85, 0xE6, 0x7A |
.byte 0x66, 0x0A, 0x98, 0x9E, 0x0E, 0x49, 0xE8, 0x67, 0x1A, 0xE2, 0x1F, 0xBE, 0xA3, 0x82, 0x9F, 0xBB |
.byte 0x4E, 0x60, 0x08, 0x6B, 0xE8, 0x72, 0x20, 0x61, 0x74, 0x2F, 0xFE, 0x92, 0xB5, 0xE5, 0x0D, 0x1B |
.byte 0xF0, 0xA6, 0xB9, 0xFE, 0xEF, 0xA2, 0x66, 0x09, 0x84, 0x85, 0xC7, 0x28, 0x08, 0x67, 0xE3, 0x57 |
.byte 0xC8, 0xEC, 0xC2, 0xB0, 0x5E, 0xE3, 0x12, 0xD2, 0x12, 0x11, 0x65, 0xC7, 0xF6, 0x73, 0xE3, 0xE6 |
.byte 0x19, 0x9D, 0xE5, 0x08, 0x40, 0x4B, 0x12, 0xC5, 0xD1, 0xDA, 0xED, 0xD9, 0x41, 0xD1, 0x30, 0x09 |
.byte 0xBD, 0xF3, 0xBA, 0x1C, 0xD7, 0xCD, 0xEE, 0xE9, 0xDE, 0x54, 0xB1, 0xD4, 0xC7, 0x95, 0xBB, 0xE1 |
.byte 0x33, 0xA1, 0xEA, 0x73, 0xED, 0xFC, 0x39, 0xBE, 0xD6, 0x26, 0x98, 0x18, 0xF8, 0xC9, 0x21, 0xB6 |
.byte 0xBD, 0xDC, 0xD2, 0x94, 0xA9, 0xC1, 0x7E, 0x87, 0x16, 0x2F, 0x5C, 0xDD, 0xC5, 0x18, 0xBF, 0xF8 |
.byte 0xBA, 0xA9, 0x6C, 0xA7, 0xA5, 0xA5, 0x66, 0x7C, 0xCC, 0xFE, 0x94, 0xC5, 0xC8, 0xB6, 0x7B, 0x85 |
.byte 0x92, 0x4E, 0x19, 0x3C, 0x10, 0x97, 0xC4, 0x26, 0xC7, 0x21, 0x04, 0x8C, 0x39, 0xC3, 0x85, 0xF4 |
.byte 0x6C, 0xF2, 0x9C, 0x12, 0x97, 0x02, 0x8E, 0x64, 0x01, 0x23, 0x29, 0xC9, 0xD9, 0xA5, 0x4E, 0x6C |
.byte 0xF4, 0x68, 0xA8, 0x04, 0xFF, 0x6C, 0x2B, 0xC7, 0x8D, 0x2F, 0x54, 0xC7, 0xF2, 0xD9, 0xBB, 0x5F |
.byte 0xCB, 0x57, 0x71, 0x63, 0x5A, 0x00, 0xC8, 0x5B, 0x24, 0xF2, 0x25, 0xFD, 0x97, 0x73, 0x69, 0x8C |
.byte 0xDC, 0x11, 0x91, 0xDB, 0x7E, 0xBC, 0xA3, 0x0C, 0xEB, 0xF7, 0xD3, 0xDE, 0xD0, 0x8F, 0x3D, 0x9C |
.byte 0xE7, 0xAF, 0x00, 0x41, 0xB0, 0xC8, 0x9C, 0xD4, 0xBA, 0xC1, 0xD1, 0x52, 0x35, 0x3B, 0xDE, 0x11 |
.byte 0x4D, 0x6F, 0xED, 0xCB, 0x2C, 0x90, 0xD7, 0x17, 0x87, 0xAB, 0xF5, 0x58, 0x3A, 0x33, 0xF4, 0x21 |
.byte 0xE2, 0xF4, 0x62, 0x92, 0xBD, 0xFF, 0x67, 0x77, 0xC1, 0x38, 0xC9, 0xF7, 0x74, 0xA8, 0x09, 0xC1 |
.byte 0x18, 0xF7, 0x8D, 0x44, 0x87, 0x64, 0x5B, 0x0F, 0x10, 0x51, 0x67, 0x4A, 0x84, 0x5C, 0x6C, 0x67 |
.byte 0x51, 0xCF, 0xFA, 0x0E, 0xCF, 0x61, 0x86, 0x91, 0x9A, 0x4F, 0x88, 0x0E, 0xF8, 0x92, 0xCF, 0x10 |
.byte 0x89, 0x5D, 0x54, 0x10, 0xC1, 0xB0, 0x20, 0xD2, 0x02, 0x87, 0x1D, 0x86, 0xE3, 0x89, 0xEE, 0x35 |
.byte 0x59, 0xE8, 0x43, 0x28, 0x49, 0xC9, 0xB9, 0xE4, 0x19, 0x42, 0xF2, 0x12, 0xD5, 0xC2, 0x22, 0x5E |
.byte 0x1F, 0x77, 0x6F, 0xE1, 0x28, 0x8F, 0xB3, 0x2A, 0x16, 0xD1, 0xB0, 0xFA, 0x5A, 0x9E, 0x2F, 0xB4 |
.byte 0x87, 0x73, 0xDD, 0xD1, 0x3D, 0x97, 0xB5, 0x56, 0xD9, 0xA8, 0x69, 0xAE, 0x6B, 0x8B, 0x0D, 0x8A |
.byte 0x03, 0x7C, 0x6C, 0x2B, 0x0B, 0x20, 0x55, 0x22, 0xF1, 0x06, 0x1D, 0x4C, 0xA5, 0x4D, 0x00, 0x2C |
.byte 0xC0, 0xDD, 0xFD, 0xFE, 0x74, 0xB3, 0x55, 0x4E, 0x5C, 0xBE, 0xFD, 0xC7, 0x49, 0x0A, 0x52, 0x4C |
.byte 0x87, 0xBE, 0x78, 0x92, 0xDF, 0xCD, 0xB5, 0xD0, 0xD4, 0xD2, 0x1D, 0x79, 0x1F, 0x1E, 0xA5, 0xE0 |
.byte 0xFB, 0xA3, 0xDE, 0x70, 0x57, 0x33, 0xBF, 0xB3, 0xF1, 0xBD, 0x7A, 0x3B, 0xC8, 0xCC, 0x88, 0x4F |
.byte 0x8B, 0x00, 0xE2, 0x6A, 0xCE, 0x97, 0x3B, 0xA2, 0x69, 0x58, 0x1B, 0x89, 0x76, 0xC1, 0x69, 0x72 |
.byte 0x65, 0x47, 0xE3, 0xBD, 0x7B, 0xA3, 0x70, 0x6C, 0x60, 0xEB, 0xA7, 0x28, 0xB8, 0x2F, 0x78, 0x44 |
.byte 0x30, 0x5A, 0xAE, 0xFE, 0xF2, 0xEA, 0xA0, 0x5B, 0x43, 0xBC, 0xE5, 0xBA, 0x7D, 0x4E, 0x2D, 0xE3 |
.byte 0x96, 0x10, 0xA0, 0x11, 0xB4, 0x10, 0x7E, 0x14, 0xFC, 0x26, 0x3D, 0xB4, 0x55, 0xB5, 0xF9, 0x86 |
.byte 0x10, 0xA8, 0x84, 0x02, 0x92, 0x25, 0x5E, 0xD6, 0xE1, 0x43, 0x90, 0x5F, 0x92, 0xBD, 0x42, 0x28 |
.byte 0xCE, 0xE2, 0x3A, 0x82, 0xF3, 0xB9, 0x97, 0xF0, 0xDF, 0xD4, 0xA5, 0x35, 0x8A, 0x9E, 0xBB, 0x9A |
.byte 0x46, 0x3F, 0x9D, 0xD8, 0x64, 0xFB, 0xAE, 0x46, 0x3E, 0x3F, 0xA5, 0xD0, 0xFC, 0xE7, 0xF9, 0xCB |
.byte 0xCA, 0x34, 0x4D, 0xBD, 0xED, 0xE4, 0xAE, 0xCC, 0xB9, 0x53, 0x02, 0x43, 0xF1, 0xBD, 0xDE, 0x37 |
.byte 0xFD, 0x7B, 0x10, 0x62, 0x76, 0xBE, 0xA8, 0xB4, 0xFE, 0x4E, 0x85, 0xFA, 0x35, 0x7F, 0xC5, 0x00 |
.byte 0xB3, 0x13, 0xBE, 0xA1, 0xF7, 0x6C, 0x6D, 0xB1, 0xBF, 0x70, 0xF4, 0xB0, 0x2D, 0xD2, 0xE7, 0x2B |
.byte 0x4E, 0xF7, 0x8D, 0xC4, 0xB6, 0x36, 0x79, 0xB4, 0x84, 0xFF, 0xAF, 0xBA, 0x7E, 0x75, 0xBB, 0x31 |
.byte 0x89, 0x79, 0xD2, 0x81, 0xE5, 0x40, 0x32, 0xA5, 0xB1, 0x26, 0x55, 0xDE, 0xF9, 0x3D, 0x0A, 0x47 |
.byte 0x35, 0x98, 0x0C, 0xEC, 0xCE, 0x85, 0xA1, 0x53, 0x85, 0x51, 0x0E, 0x03, 0xC6, 0xC9, 0x35, 0x50 |
.byte 0x43, 0x08, 0xD1, 0x29, 0x49, 0x03, 0xCE, 0xFA, 0x2A, 0x24, 0xD9, 0x24, 0x61, 0xE3, 0x6C, 0x97 |
.byte 0x7B, 0x78, 0x83, 0x4A, 0xFE, 0x24, 0x9E, 0x83, 0x75, 0xAD, 0x86, 0x3C, 0x77, 0xBC, 0x8C, 0xBA |
.byte 0xC4, 0x5D, 0xE4, 0x0D, 0x61, 0xB2, 0x07, 0x8B, 0xD6, 0xE0, 0xB0, 0x38, 0xC4, 0x1C, 0xCF, 0x40 |
.byte 0x94, 0x52, 0x8B, 0x93, 0x76, 0x29, 0x17, 0xEC, 0xD7, 0x9E, 0x29, 0x4E, 0x5A, 0xB5, 0x09, 0x1E |
.byte 0x13, 0xED, 0x2C, 0x74, 0x9F, 0x33, 0x00, 0x76, 0x14, 0xB1, 0xAE, 0xD9, 0xCD, 0x7D, 0x19, 0x62 |
.byte 0xD0, 0xA4, 0xF5, 0x47, 0xCE, 0x0C, 0x33, 0xA5, 0xAA, 0x5C, 0xF3, 0x05, 0x12, 0xFD, 0x23, 0x25 |
.byte 0xEA, 0x50, 0x9A, 0x8A, 0x84, 0x9B, 0x01, 0x98, 0x4C, 0xAF, 0x72, 0x1A, 0x2D, 0x8B, 0x7C, 0xFD |
.byte 0x30, 0x72, 0x44, 0xFE, 0x7F, 0x78, 0xA3, 0x2A, 0xD4, 0x97, 0x2F, 0xE7, 0x94, 0x53, 0x0D, 0x7F |
.byte 0xA4, 0xA8, 0x09, 0x28, 0x43, 0x0A, 0xC1, 0x90, 0xBA, 0x33, 0xAB, 0xE7, 0xBE, 0x28, 0xE5, 0xEE |
.byte 0x9A, 0x29, 0xEC, 0x1A, 0xA1, 0x90, 0x45, 0x76, 0x27, 0x75, 0x5E, 0xBC, 0xC8, 0x6B, 0x3B, 0x6D |
.byte 0x13, 0x45, 0x95, 0x57, 0x50, 0x56, 0xE8, 0x0A, 0x89, 0x93, 0xF2, 0x48, 0xBB, 0xD7, 0x37, 0x56 |
.byte 0x01, 0x24, 0x70, 0xA3, 0xB4, 0xB5, 0x19, 0xDC, 0x2B, 0x78, 0x98, 0xF3, 0xE3, 0xD4, 0x60, 0xF6 |
.byte 0x19, 0xF6, 0x4E, 0x69, 0x4C, 0x36, 0x74, 0xD6, 0xC9, 0x66, 0x1E, 0x85, 0x3E, 0x56, 0xDB, 0x3F |
.byte 0x7A, 0x4B, 0xE2, 0x2F, 0x01, 0xFC, 0x0B, 0x2C, 0x74, 0xA4, 0x20, 0x58, 0x78, 0x81, 0x4E, 0x92 |
.byte 0x78, 0x9D, 0xFC, 0xC4, 0xD3, 0x70, 0x9A, 0x9D, 0xD7, 0xB9, 0x22, 0x16, 0x0F, 0xFD, 0x55, 0x89 |
.byte 0x49, 0x38, 0xB8, 0x4B, 0x35, 0xC4, 0x78, 0xA9, 0x69, 0x99, 0x01, 0xE1, 0x1A, 0x50, 0x74, 0x92 |
.byte 0xED, 0x70, 0x57, 0xC1, 0xE1, 0xF2, 0x5E, 0xB9, 0xAB, 0x80, 0xCF, 0xBB, 0x7D, 0x25, 0x44, 0xC7 |
.byte 0x5D, 0xFD, 0x12, 0x92, 0xC2, 0x8A, 0x3C, 0x2B, 0x23, 0x3E, 0x0D, 0x3E, 0x8F, 0x81, 0xD1, 0x7D |
.byte 0xF2, 0x29, 0x3E, 0xD4, 0x1B, 0x9C, 0x8D, 0xC7, 0x1C, 0x5D, 0x82, 0x9A, 0x82, 0xC7, 0x61, 0xE0 |
.byte 0xC5, 0x73, 0x73, 0x87, 0xFE, 0xAF, 0xB2, 0x22, 0xEE, 0xC0, 0x60, 0x7D, 0x41, 0x32, 0xFA, 0x34 |
.byte 0x5B, 0x39, 0x08, 0x76, 0xD5, 0x95, 0x3E, 0xF2, 0xF2, 0xC0, 0x8C, 0x74, 0x87, 0xEE, 0x55, 0x4C |
.byte 0x62, 0xC8, 0xD4, 0x60, 0x77, 0x87, 0x82, 0x66, 0x47, 0xE3, 0xE4, 0x89, 0x15, 0xDF, 0xBD, 0x71 |
.byte 0x18, 0xC5, 0xE8, 0xED, 0x5A, 0x26, 0xE0, 0x4D, 0xE6, 0x6D, 0xC2, 0x6E, 0x5B, 0x17, 0xBB, 0xBD |
.byte 0xDF, 0x8F, 0x1E, 0x57, 0x16, 0xA1, 0xBE, 0x5D, 0x84, 0xA2, 0xE7, 0x9A, 0x81, 0xA4, 0x0B, 0x99 |
.byte 0x69, 0xF4, 0x87, 0xC4, 0x1A, 0x68, 0x11, 0x01, 0xD5, 0xD4, 0x6F, 0x30, 0xEC, 0x2B, 0xEE, 0xCB |
.byte 0xBA, 0x0C, 0x23, 0xD1, 0xAD, 0xE1, 0x2F, 0x32, 0x84, 0x16, 0xCC, 0x05, 0xBA, 0xD8, 0x9F, 0x24 |
.byte 0xCC, 0x27, 0xE8, 0xE7, 0x8F, 0xFA, 0xE8, 0x65, 0xCE, 0x58, 0x95, 0xBA, 0x83, 0x84, 0x86, 0x3E |
.byte 0x90, 0xAA, 0x0F, 0x3E, 0x8C, 0x3F, 0x70, 0x10, 0x55, 0x3C, 0x16, 0x10, 0x15, 0xB6, 0x34, 0xE1 |
.byte 0xDE, 0x1C, 0xC8, 0x6D, 0x16, 0xB1, 0xD3, 0xE5, 0x09, 0x68, 0xA0, 0x8D, 0xEC, 0x26, 0xCB, 0x7D |
.byte 0xD1, 0xDB, 0xBB, 0x5D, 0x1A, 0x2C, 0x6E, 0x70, 0x69, 0x84, 0x80, 0x7E, 0x3B, 0xB4, 0x60, 0x19 |
.byte 0xD1, 0x28, 0x87, 0xE8, 0xDA, 0x5A, 0xCD, 0xE3, 0xC3, 0x6E, 0x71, 0xB0, 0x94, 0x3C, 0x2E, 0x66 |
.byte 0x18, 0xE9, 0xC3, 0x33, 0x16, 0x31, 0xA3, 0x7F, 0xB6, 0x24, 0xFE, 0xF2, 0xD9, 0x5E, 0x0B, 0xAA |
.byte 0x87, 0x93, 0x92, 0x61, 0xED, 0x60, 0x45, 0xB1, 0xCE, 0xB6, 0x61, 0x63, 0xF3, 0x8F, 0xC9, 0x0B |
.byte 0x79, 0x8D, 0x3E, 0x8F, 0xBE, 0xE2, 0x0F, 0x75, 0x07, 0x0D, 0x67, 0xE0, 0x6B, 0x73, 0x8A, 0xF2 |
.byte 0x06, 0x1D, 0x54, 0xF4, 0x7D, 0x99, 0xA5, 0x4C, 0x4F, 0x07, 0xAF, 0x42, 0x96, 0x79, 0x4E, 0x10 |
.byte 0x06, 0x8D, 0xA0, 0xC5, 0x6F, 0xAF, 0x3B, 0x77, 0xBD, 0xA2, 0x57, 0x29, 0x15, 0xE1, 0x1B, 0x1C |
.byte 0xFF, 0x70, 0x10, 0x7D, 0x09, 0xB5, 0xC9, 0x58, 0xBC, 0x79, 0x9B, 0x53, 0xF3, 0xE9, 0x63, 0xF9 |
.byte 0x76, 0x04, 0xBF, 0xE6, 0xB4, 0xFA, 0x5D, 0x71, 0x9D, 0xB4, 0x9A, 0xB3, 0x96, 0xB6, 0xCF, 0x96 |
.byte 0x26, 0xDF, 0x13, 0x30, 0x94, 0xDD, 0x88, 0x51, 0x56, 0x24, 0xA4, 0x4A, 0x0D, 0x08, 0x44, 0x84 |
.byte 0x0D, 0x03, 0x6B, 0xC1, 0xFE, 0xC8, 0x32, 0x9B, 0x7D, 0xCD, 0x4E, 0x14, 0x84, 0x1D, 0xAA, 0xAB |
.byte 0xFD, 0xBE, 0xDB, 0x92, 0x9B, 0x64, 0xE3, 0xF2, 0x88, 0x88, 0x3C, 0x96, 0x91, 0x80, 0x1A, 0x9E |
.byte 0x84, 0x86, 0x5F, 0x82, 0x4F, 0x92, 0x1E, 0xCC, 0x5F, 0x6D, 0xE1, 0xE4, 0x8B, 0x8C, 0x8F, 0x88 |
.byte 0x4A, 0x6B, 0x1A, 0xE5, 0xCF, 0xFD, 0xD7, 0x58, 0x86, 0x14, 0xEE, 0x17, 0x94, 0x09, 0xB5, 0x19 |
.byte 0x8F, 0x14, 0x9C, 0xDE, 0xA6, 0xBA, 0xAB, 0x06, 0x28, 0x8D, 0xEB, 0xB3, 0x19, 0x7A, 0x3B, 0x63 |
.byte 0xE6, 0x56, 0x49, 0xB5, 0x54, 0x20, 0x0E, 0xDA, 0x34, 0xFC, 0xF1, 0xC9, 0x06, 0xA7, 0xE2, 0x96 |
.byte 0xBB, 0x7E, 0x74, 0x62, 0x39, 0x20, 0x69, 0x61, 0xAD, 0x54, 0x14, 0xC6, 0xCF, 0x50, 0x2A, 0xB5 |
.byte 0xA6, 0x73, 0x6B, 0xFA, 0x93, 0x79, 0xD5, 0xC8, 0x76, 0xC6, 0x92, 0x7C, 0x6D, 0x74, 0x12, 0x29 |
.byte 0xF3, 0x87, 0x8C, 0x2D, 0xA7, 0xF5, 0x8E, 0x55, 0x49, 0xA3, 0x1B, 0x18, 0xF3, 0x45, 0xCD, 0x9A |
.byte 0xB8, 0x38, 0x95, 0x4C, 0xB1, 0x6A, 0x15, 0x28, 0x31, 0xA7, 0xA5, 0x9F, 0x1C, 0xB7, 0xC9, 0x0F |
.byte 0x3F, 0x55, 0x3C, 0xE7, 0x4A, 0xCB, 0x3C, 0x93, 0x6E, 0x57, 0xAC, 0x62, 0x9D, 0x7A, 0xFC, 0x56 |
.byte 0xB2, 0x91, 0xA2, 0x64, 0xFC, 0xB7, 0x8C, 0x2D, 0x5F, 0x32, 0xCC, 0x7B, 0xE9, 0x95, 0x8B, 0x29 |
.byte 0xEB, 0xC8, 0x10, 0x35, 0x93, 0x4D, 0xC9, 0x01, 0xA5, 0x75, 0x63, 0x42, 0xEF, 0x60, 0x99, 0xA2 |
.byte 0xF1, 0x3C, 0x07, 0xED, 0xF4, 0x94, 0x1B, 0x53, 0xC6, 0xE8, 0xCE, 0xB0, 0x7E, 0x5A, 0xD9, 0x69 |
.byte 0x22, 0xEA, 0x9E, 0xB5, 0x38, 0x68, 0xB6, 0xDD, 0xDE, 0x1A, 0x20, 0xCE, 0x7A, 0xB9, 0x70, 0x6C |
.byte 0xF5, 0x78, 0x5A, 0xE9, 0x0C, 0x75, 0x3D, 0xD2, 0x5D, 0x0C, 0x83, 0xDC, 0x66, 0x5D, 0x45, 0x88 |
.byte 0x47, 0xE4, 0x3D, 0x80, 0x4C, 0xF4, 0x5D, 0x2A, 0x0E, 0x7E, 0xF8, 0x89, 0x38, 0x69, 0xF6, 0x2E |
.byte 0xE1, 0x50, 0x18, 0xED, 0xC6, 0x55, 0xC0, 0x24, 0x61, 0x43, 0x00, 0xC7, 0xA0, 0x45, 0x50, 0xE8 |
.byte 0x2A, 0x8D, 0x69, 0x76, 0x81, 0xC7, 0xA1, 0x90, 0x45, 0x9A, 0x1A, 0x7E, 0x04, 0x10, 0xAC, 0xE5 |
.byte 0x61, 0xC5, 0xD3, 0x27, 0x1B, 0x94, 0x4C, 0x7C, 0xD8, 0x4C, 0x44, 0x79, 0x92, 0x94, 0x61, 0xBC |
.byte 0x22, 0xCA, 0x33, 0xA3, 0x92, 0xD5, 0x34, 0xD7, 0x6F, 0x4F, 0x55, 0x73, 0x5F, 0x02, 0x59, 0xC1 |
.byte 0xC7, 0x2D, 0xE9, 0xE2, 0xC1, 0x35, 0x5F, 0x99, 0x82, 0xA4, 0x12, 0x14, 0x39, 0x74, 0xD1, 0x5B |
.byte 0x3F, 0x05, 0xFF, 0xD1, 0xDA, 0x33, 0xA9, 0x4A, 0x82, 0xFF, 0xBE, 0xE2, 0x02, 0x18, 0xA4, 0xCA |
.byte 0x45, 0x8D, 0xAD, 0x07, 0xC2, 0x0C, 0xA0, 0x45, 0xB1, 0xB3, 0x59, 0xEA, 0x28, 0x2B, 0x45, 0x67 |
.byte 0x31, 0x44, 0x39, 0x0C, 0x78, 0xE3, 0x57, 0xFB, 0xE2, 0x15, 0xDE, 0xE4, 0x2E, 0x82, 0xAE, 0x74 |
.byte 0x0F, 0x5B, 0x7B, 0xD2, 0x68, 0x1C, 0x17, 0x19, 0xCF, 0x71, 0x04, 0xF8, 0x9D, 0x49, 0x60, 0xCE |
.byte 0x8E, 0x99, 0xDA, 0x07, 0x7C, 0x31, 0x02, 0x5F, 0x47, 0xE1, 0x43, 0x75, 0x63, 0xF2, 0xE9, 0x72 |
.byte 0x4D, 0x65, 0x44, 0xB6, 0x81, 0x5C, 0xCF, 0x51, 0xCD, 0xD3, 0x49, 0x6A, 0x1D, 0xA9, 0x39, 0xAC |
.byte 0x43, 0x13, 0xB3, 0xC0, 0x45, 0xB6, 0x1F, 0x8D, 0x97, 0x63, 0x03, 0xFB, 0x55, 0xED, 0x6D, 0xA3 |
.byte 0x52, 0xB2, 0x59, 0xD3, 0x0F, 0x29, 0x24, 0xDC, 0xFD, 0x6E, 0x47, 0x1B, 0x18, 0x80, 0xC7, 0x5B |
.byte 0x94, 0x7B, 0x1C, 0xDA, 0x32, 0x3C, 0x67, 0xCA, 0x9F, 0x6A, 0xC5, 0xF5, 0x58, 0x33, 0x99, 0xAA |
.byte 0xE6, 0xF3, 0x7E, 0xF5, 0x1C, 0xA3, 0xD2, 0x1A, 0x11, 0x1A, 0x35, 0x29, 0x9B, 0xFD, 0x85, 0x30 |
.byte 0x78, 0xA2, 0x0A, 0xAB, 0xDE, 0x72, 0x76, 0x7E, 0xDD, 0x3B, 0x74, 0x35, 0x6F, 0x0D, 0xDF, 0x55 |
.byte 0x00, 0x5D, 0x4B, 0x1D, 0x00, 0x1E, 0x37, 0x12, 0x38, 0x6D, 0x3C, 0xD3, 0x6A, 0xC2, 0x03, 0xE3 |
.byte 0x64, 0x0E, 0x8E, 0x43, 0x80, 0x05, 0xC1, 0x5D, 0x40, 0x36, 0x93, 0xB0, 0x43, 0x73, 0x06, 0x44 |
.byte 0xD1, 0x52, 0x61, 0xD2, 0x70, 0x99, 0xE4, 0xA8, 0x06, 0x21, 0x7C, 0x71, 0xE3, 0x80, 0x54, 0x48 |
.byte 0x8E, 0xE3, 0x8B, 0x0F, 0xE8, 0x4D, 0x6D, 0x29, 0x83, 0x00, 0xD9, 0xC6, 0x73, 0xE0, 0x0B, 0x45 |
.byte 0x32, 0x6D, 0x17, 0xA2, 0x06, 0xFB, 0x4B, 0x0D, 0x1D, 0xC7, 0x7E, 0x00, 0x48, 0xD2, 0x48, 0xD6 |
.byte 0xB6, 0xD3, 0xE5, 0x9E, 0x21, 0x52, 0xC7, 0xA4, 0x52, 0xA1, 0x6B, 0xC6, 0x81, 0x76, 0x0B, 0xB3 |
.byte 0xE3, 0x22, 0x56, 0xEA, 0x1E, 0xA1, 0xF8, 0x3B, 0x69, 0x76, 0x3C, 0xB1, 0x49, 0x84, 0x87, 0xFF |
.byte 0x58, 0x6D, 0x9E, 0x79, 0xBF, 0x65, 0x1E, 0x12, 0x07, 0x89, 0xD9, 0x88, 0xFF, 0xE4, 0x3C, 0xE3 |
.byte 0x07, 0x92, 0xCD, 0x26, 0x33, 0xC5, 0x62, 0x9D, 0x3C, 0x9E, 0x4E, 0x86, 0x23, 0xD6, 0x86, 0x7C |
.byte 0x43, 0x24, 0xF6, 0x02, 0x8A, 0x15, 0x15, 0x91, 0x9E, 0xEE, 0x19, 0x9E, 0xD3, 0x56, 0x81, 0xDB |
.byte 0xE8, 0x4F, 0x01, 0x1C, 0x14, 0x64, 0xB9, 0x51, 0x03, 0x07, 0xD7, 0x27, 0xDD, 0x5D, 0xA4, 0x21 |
.byte 0x82, 0x9A, 0x24, 0x0C, 0xAF, 0x39, 0x9D, 0x4E, 0x28, 0xB7, 0xEC, 0xFB, 0x0D, 0x6D, 0xD6, 0xF6 |
.byte 0xBC, 0xD8, 0x12, 0xD1, 0x3C, 0xCB, 0x23, 0x40, 0xD3, 0xFB, 0x67, 0xB1, 0x58, 0x0B, 0xD2, 0xDA |
.byte 0xA6, 0xF6, 0xE7, 0x56, 0x30, 0x85, 0xA4, 0x58, 0x3C, 0x90, 0x54, 0x4A, 0xFE, 0x2A, 0x41, 0xBA |
.byte 0x03, 0x53, 0x8C, 0x3F, 0x1F, 0xAF, 0x7F, 0xF2, 0xAA, 0xE7, 0xA3, 0x03, 0xF2, 0x76, 0xDE, 0x98 |
.byte 0x6C, 0xC6, 0xEE, 0x9D, 0x4B, 0x93, 0xF5, 0x88, 0x23, 0x49, 0xD2, 0x22, 0x74, 0x14, 0xDD, 0x77 |
.byte 0x67, 0x69, 0xB7, 0x86, 0x19, 0x37, 0x78, 0xC4, 0x1E, 0x1C, 0xC8, 0x11, 0x92, 0xA7, 0xAA, 0xFF |
.byte 0x6D, 0x99, 0x9D, 0xB8, 0x2C, 0x93, 0x40, 0x50, 0xDC, 0x13, 0x72, 0x51, 0x27, 0x4F, 0xC8, 0x8F |
.byte 0xB8, 0x80, 0x15, 0xD2, 0xB7, 0x8E, 0x97, 0xD6, 0xAB, 0x5F, 0xE7, 0x3E, 0x06, 0x91, 0x3E, 0x74 |
.byte 0x2A, 0xDB, 0x2D, 0x57, 0x6E, 0x6D, 0xA7, 0x4B, 0x81, 0x19, 0x9C, 0xA9, 0x68, 0x65, 0x38, 0x21 |
.byte 0xE6, 0x4E, 0xF4, 0x9D, 0xDD, 0x8B, 0x74, 0x89, 0xEB, 0x5C, 0xC7, 0xF2, 0xED, 0x05, 0x66, 0x18 |
.byte 0xE1, 0x93, 0x6F, 0x4F, 0x01, 0x17, 0x9A, 0x83, 0x30, 0x37, 0x2D, 0x99, 0x9C, 0x66, 0xBB, 0x83 |
.byte 0xB4, 0xAF, 0x21, 0x92, 0x3B, 0x95, 0x1B, 0x26, 0xF1, 0xE3, 0x19, 0xDF, 0xE8, 0x7F, 0xF8, 0xC9 |
.byte 0x13, 0x68, 0x19, 0x15, 0x7F, 0xB3, 0x98, 0xB0, 0xEB, 0xC6, 0x49, 0x88, 0x2C, 0x05, 0x0B, 0xE1 |
.byte 0xB4, 0x2C, 0x73, 0xF0, 0xC1, 0x8F, 0x17, 0xB3, 0x72, 0x30, 0x93, 0x5B, 0xAF, 0x8B, 0x25, 0xC3 |
.byte 0xF3, 0x3E, 0xD8, 0x73, 0xF2, 0x71, 0x23, 0xDD, 0x37, 0x6C, 0x65, 0x64, 0x72, 0x70, 0x45, 0x26 |
.byte 0x9C, 0xB9, 0x17, 0x5E, 0x48, 0x2E, 0x12, 0xBB, 0x5E, 0xA5, 0x17, 0x0E, 0x30, 0x3C, 0xD1, 0x24 |
.byte 0x7B, 0xAA, 0x97, 0x6D, 0x1B, 0xBA, 0x4A, 0x53, 0x27, 0xB0, 0xB7, 0x99, 0x21, 0xFD, 0xC0, 0xBE |
.byte 0xB6, 0xD8, 0x1C, 0xFF, 0x06, 0x2E, 0xBB, 0x64, 0xD3, 0xD2, 0x72, 0x04, 0x0F, 0x44, 0x28, 0x8A |
.byte 0xEE, 0xC0, 0xF7, 0x0A, 0x7B, 0x42, 0x5E, 0xA3, 0xF3, 0x16, 0x3D, 0x14, 0x13, 0xFD, 0xD2, 0xC9 |
.byte 0xD6, 0xEF, 0xC9, 0xDC, 0x1E, 0x84, 0x40, 0xF2, 0x57, 0xB3, 0xF6, 0x66, 0xF7, 0x1F, 0xF0, 0xE6 |
.byte 0xE0, 0xE8, 0xF1, 0x5B, 0x2B, 0x4F, 0xFE, 0x1E, 0x65, 0x3B, 0x33, 0x78, 0x39, 0x06, 0x42, 0x0F |
.byte 0xF6, 0x0B, 0xEC, 0x14, 0x90, 0x2C, 0x07, 0xE7, 0xE0, 0xFE, 0x4D, 0xD8, 0x1D, 0x3E, 0xBE, 0xFE |
.byte 0x27, 0xB0, 0x59, 0x52, 0xFF, 0x58, 0x71, 0x65, 0x94, 0xA5, 0xDD, 0xCD, 0xAC, 0x20, 0xDD, 0xA2 |
.byte 0x2C, 0xC9, 0xB7, 0xBC, 0xF6, 0xBE, 0xA4, 0xD7, 0xBC, 0xF1, 0xAF, 0xDA, 0x30, 0x6E, 0xD8, 0x57 |
.byte 0x1E, 0x32, 0xAA, 0x1E, 0x8A, 0x1B, 0x83, 0x1E, 0xC1, 0x61, 0xEC, 0x6D, 0x81, 0xCA, 0x0F, 0xAD |
.byte 0x94, 0xC6, 0x6A, 0x8B, 0x85, 0x0E, 0x62, 0x42, 0x00, 0x12, 0x1C, 0x30, 0x80, 0xF5, 0x88, 0x9F |
.byte 0x27, 0x32, 0xBD, 0xB1, 0x4E, 0x40, 0xD0, 0x0F, 0xA1, 0xBC, 0x7C, 0x23, 0x87, 0x8C, 0xD1, 0x1B |
.byte 0x53, 0x3B, 0xA6, 0xD8, 0x4A, 0x09, 0x1A, 0x4A, 0x1B, 0x37, 0x7B, 0x9B, 0x2C, 0x03, 0x3A, 0x53 |
.byte 0x36, 0xF7, 0x05, 0x84, 0x38, 0xD5, 0x94, 0xD9, 0x92, 0x11, 0xFD, 0x19, 0x9D, 0xCE, 0x35, 0xF1 |
.byte 0x0A, 0xDC, 0xCA, 0x54, 0xE5, 0xE5, 0x9F, 0x01, 0x1C, 0x1B, 0x9C, 0x49, 0x1E, 0xD7, 0x9D, 0x55 |
.byte 0xCF, 0xA2, 0xD9, 0x07, 0x78, 0x6E, 0xE1, 0x0B, 0x7F, 0xDF, 0x25, 0x1C, 0xAD, 0x5A, 0x0E, 0xB7 |
.byte 0x37, 0xD8, 0x0C, 0x1C, 0xBD, 0xAB, 0x1E, 0xDA, 0xC6, 0xBA, 0x23, 0xE5, 0x92, 0xC0, 0x3A, 0x61 |
.byte 0x63, 0x14, 0x69, 0xDB, 0x82, 0x4B, 0xE6, 0x02, 0x2A, 0x0B, 0x1F, 0xD8, 0x66, 0x2D, 0x90, 0x9D |
.byte 0x05, 0x9C, 0xBA, 0xC3, 0x48, 0xD8, 0x9D, 0x0E, 0x93, 0xC1, 0xF4, 0x25, 0x81, 0x2F, 0x87, 0xE5 |
.byte 0x44, 0xF1, 0xC0, 0xC7, 0x3D, 0xA7, 0xC9, 0x68, 0xB3, 0xE8, 0x40, 0x19, 0x15, 0xD0, 0xB7, 0x1B |
.byte 0x6C, 0x71, 0xDE, 0xB4, 0x4A, 0x7C, 0xC3, 0xDD, 0x3D, 0xB8, 0x03, 0xBF, 0xE8, 0x8A, 0xA4, 0x2C |
.byte 0x7C, 0x64, 0xF3, 0xB9, 0x0C, 0xBD, 0x21, 0xBF, 0xA5, 0x62, 0xD8, 0xBB, 0x32, 0x8F, 0xD6, 0x9F |
.byte 0x01, 0xB5, 0x54, 0x4B, 0x31, 0x18, 0x29, 0x6E, 0xD1, 0x2C, 0x2D, 0xB9, 0xB7, 0xD1, 0xE6, 0x34 |
.byte 0x36, 0xDA, 0xED, 0x43, 0x97, 0x0F, 0x02, 0x3D, 0x72, 0xDB, 0xF8, 0xA5, 0x6B, 0xCF, 0x45, 0x6C |
.byte 0x84, 0x99, 0xB8, 0xB5, 0xB2, 0xE2, 0x23, 0x84, 0x0E, 0x51, 0x3D, 0xC6, 0x23, 0x24, 0xFA, 0x5A |
.byte 0xFE, 0xE8, 0x9D, 0x96, 0xF8, 0x9F, 0xD3, 0x6A, 0x7B, 0xCC, 0x0F, 0xE6, 0x9B, 0x54, 0x53, 0x1F |
.byte 0xEE, 0x0C, 0xD5, 0xA1, 0xEE, 0xF9, 0x25, 0xFC, 0x4A, 0x63, 0xC3, 0x6E, 0x87, 0xBD, 0xC8, 0x86 |
.byte 0xA6, 0x65, 0x1C, 0x9E, 0x05, 0xF0, 0x08, 0x81, 0xBC, 0x18, 0x67, 0x58, 0x6D, 0xBB, 0x77, 0x5B |
.byte 0xC7, 0x4D, 0xFD, 0xB6, 0x46, 0x22, 0xB2, 0x91, 0x85, 0x76, 0x00, 0x0D, 0x34, 0xC8, 0x93, 0xDA |
.byte 0x2E, 0xAF, 0x78, 0x34, 0x9F, 0x81, 0xB5, 0x5C, 0x9A, 0x1D, 0xB4, 0x07, 0xD9, 0x2C, 0x63, 0xA0 |
.byte 0x79, 0x61, 0x56, 0xC0, 0x83, 0x09, 0x51, 0x09, 0x80, 0x52, 0x17, 0xB4, 0x1A, 0xAA, 0x8E, 0x49 |
.byte 0x5A, 0x07, 0x7D, 0xFA, 0x89, 0x33, 0x56, 0x24, 0x50, 0x0A, 0x2C, 0x29, 0x36, 0x90, 0xCA, 0xB0 |
.byte 0xF1, 0x21, 0x70, 0x74, 0x2B, 0xC2, 0x7E, 0xAB, 0x14, 0x95, 0x60, 0x2F, 0x40, 0xEF, 0x78, 0x9A |
.byte 0xF7, 0xF6, 0x95, 0x81, 0x29, 0xEB, 0xA5, 0x79, 0xF6, 0xD1, 0xA3, 0x2D, 0x61, 0x6E, 0xDD, 0x52 |
.byte 0x90, 0x4E, 0xC7, 0xBB, 0x11, 0x46, 0x67, 0x25, 0xDC, 0xC8, 0x55, 0x1C, 0xB7, 0xCD, 0xB7, 0xAE |
.byte 0xC4, 0x4C, 0x2F, 0xED, 0x38, 0xD5, 0x67, 0x2E, 0xA6, 0x0A, 0x5B, 0x08, 0x79, 0x38, 0x5B, 0x09 |
.byte 0x87, 0x23, 0xC4, 0x98, 0x69, 0x2C, 0xBE, 0x46, 0xF4, 0x13, 0x63, 0xAC, 0xE1, 0x1A, 0x5B, 0xA5 |
.byte 0x67, 0x8A, 0x93, 0x9F, 0x60, 0xFA, 0xCD, 0x07, 0x04, 0x29, 0x0F, 0x7D, 0x62, 0x6B, 0x87, 0xE9 |
.byte 0x8E, 0x4C, 0x82, 0xF8, 0x78, 0x40, 0x3F, 0x6D, 0x54, 0xA2, 0x19, 0x36, 0xBC, 0x74, 0xDC, 0x24 |
.byte 0xFF, 0x6F, 0xC3, 0x5F, 0x69, 0x91, 0x66, 0x6E, 0xBB, 0x76, 0xEC, 0x1D, 0xE1, 0x73, 0x07, 0x70 |
.byte 0xBF, 0x89, 0x69, 0x38, 0xCA, 0xA8, 0xA5, 0x1E, 0x4A, 0xBF, 0x55, 0x07, 0x34, 0x31, 0x2B, 0x34 |
.byte 0xA0, 0xEF, 0x93, 0x0A, 0x81, 0xFA, 0x79, 0x3C, 0x71, 0x65, 0x5A, 0x52, 0xD9, 0x61, 0xC3, 0x99 |
.byte 0xEB, 0x2C, 0xD1, 0xB5, 0xD5, 0x77, 0xD4, 0x20, 0x37, 0x29, 0x27, 0x6B, 0x5A, 0x53, 0x9F, 0xFB |
.byte 0x43, 0x33, 0x06, 0xC4, 0x2D, 0x7F, 0x01, 0x9F, 0xE4, 0x5C, 0xF1, 0xBE, 0xBD, 0xB5, 0x57, 0xA9 |
.byte 0xE2, 0x29, 0x5E, 0xB7, 0xA1, 0x32, 0xD7, 0xD8, 0x5C, 0xFF, 0x43, 0xB6, 0x53, 0xE3, 0xB2, 0x96 |
/* |
* Additional interrupt test. The objective is to check that interrupt |
* arrival at any time will not disrupt program flow. |
* |
* The main part of the program calculates CRC32 of a 16 kbyte block |
* of data. The other part generates interrupts at random times using |
* the C99 pseudorandom generator and the timer peripheral. |
*/ |
|
lc r100, 0x10000000 // test result output pointer |
lcs r101, halt |
lcs r102, failure |
lc r103, 0x20000000 // timer: number of pulses (0xFFFFFFFF - infinite) |
lc r104, 0x20000004 // timer: delay between pulses (in cycles) |
|
// Set up the interrupt handler |
lcs r200, 0 // initialize counter |
lc r201, 0x10000008 // output pointer |
lc r202, 1103515245 // PRNG: multiplicative constant |
lcs r203, 12345 // PRNG: additive constant |
lcs r204, 32767 // PRNG: modulo |
lcs r205, 1 // PRNG: current seed value |
|
lcs iv0, timer_handler |
mov cr, 1 // enable interrupt 0 |
|
sw r104, 100 |
sw r103, 1 // activate timer, one pulse |
|
// Main routine |
lc r16, 0x10000004 // output pointer |
lcs r17, 0xFFFFFFFF // initial CRC value |
lc r18, 0xEDB88320 // polynom |
lcs r19, data // input pointer |
lcs r20, 4096 // data block size in words |
|
lcs r32, word_loop |
lcs r33, bit_loop |
lcs r34, dont_xor |
|
mov r64, 0 // word counter |
|
word_loop: |
lw r0, r19 |
mov r65, 0 // bit counter |
|
bit_loop: |
and r1, r0, 1 |
and r2, r17, 1 |
sru r17, r17, 1 |
xor r3, r1, r2 |
cjmpe r34, r3, 0 // dont_xor |
xor r17, r17, r18 |
|
dont_xor: |
sru r0, r0, 1 |
add r65, r65, 1 |
cjmpul r33, r65, 32 // bit_loop |
|
sw r16, r64 |
add r19, r19, 4 |
add r64, r64, 1 |
cjmpul r32, r64, r20 // word_loop |
|
not r17, r17 |
sw r16, r17 |
|
// Check main routine result |
lc r0, 0xF958DFE2 |
cjmpne r102, r0, r17 |
|
mov cr, 0 // disable interrupts |
sw r103, 0 // deactivate timer |
|
sw r100, 1 |
jmp r101 |
|
failure: |
sw r100, 2 |
|
halt: |
hlt |
jmp r101 |
|
timer_handler: |
// PRNG generator from C99 (ISO/IEC 9899:1999) |
mul r205, r205, r202 |
add r205, r205, r203 |
sru r220, r205, 16 |
and r220, r220, r204 // r220 now contains the C99 pseudorandom number |
and r221, r220, 0x1F |
add r221, r221, 32 // r221 is now a pseudorandom number from the [32, 63] range |
sw r104, r221 // set up the timer delay |
sw r103, 1 // single shot |
iret |
|
.align |
data: |
.byte 0xD7, 0x64, 0xC8, 0xCC, 0xE9, 0x32, 0x55, 0xC4, 0x47, 0x8D, 0x7A, 0xA0, 0x5D, 0x83, 0xF3, 0xEA |
.byte 0xA2, 0xB7, 0x24, 0x9B, 0x04, 0x3E, 0x23, 0xCD, 0x28, 0x66, 0x21, 0x1B, 0xFF, 0x37, 0x83, 0xD6 |
.byte 0x9C, 0x4B, 0xA3, 0x86, 0x7E, 0xF9, 0x4A, 0xC5, 0x86, 0xC5, 0x66, 0xE4, 0x48, 0x5A, 0xCE, 0xEB |
.byte 0x11, 0xF3, 0x86, 0x16, 0x31, 0xA9, 0xE3, 0x59, 0x10, 0x05, 0x75, 0x10, 0x3C, 0xF8, 0xE6, 0xD9 |
.byte 0x44, 0x8A, 0x60, 0xC2, 0x83, 0xAA, 0x88, 0x0A, 0x70, 0xEE, 0xEE, 0xB8, 0x48, 0xBD, 0xA3, 0x5A |
.byte 0xB0, 0x2A, 0x70, 0xE1, 0xD4, 0x54, 0x3A, 0xE4, 0x59, 0xAF, 0xF4, 0x96, 0xA8, 0xDB, 0x70, 0xEC |
.byte 0x65, 0xD0, 0xAF, 0xE9, 0x7B, 0x37, 0xF3, 0xEB, 0x25, 0xE1, 0xA4, 0x6E, 0x9E, 0x47, 0xC9, 0x4E |
.byte 0x72, 0x39, 0x30, 0x46, 0x8E, 0x6A, 0x2B, 0xE8, 0x1A, 0x20, 0x7E, 0xC2, 0xFC, 0xEF, 0xAF, 0x62 |
.byte 0xBF, 0x5E, 0x4B, 0x3B, 0x95, 0x3E, 0x27, 0xBB, 0x20, 0xCB, 0x2A, 0xBE, 0x13, 0xF3, 0x0D, 0x85 |
.byte 0x2D, 0x3D, 0xCC, 0xBB, 0xA8, 0xF7, 0xA3, 0xC2, 0x17, 0x22, 0x85, 0x14, 0x11, 0x34, 0x76, 0xD1 |
.byte 0x92, 0xC1, 0x0D, 0x28, 0xFF, 0x34, 0xE3, 0x20, 0xFF, 0x0D, 0xDE, 0x12, 0x01, 0xEC, 0x98, 0x2E |
.byte 0x29, 0x64, 0xE9, 0xD1, 0x5B, 0x8D, 0x94, 0x73, 0xAF, 0x19, 0x87, 0xC1, 0x4D, 0xFE, 0x93, 0xE0 |
.byte 0xBF, 0xA1, 0x09, 0xBF, 0xD5, 0xEC, 0xDF, 0xD4, 0xFA, 0xBE, 0xE7, 0xFB, 0xAA, 0x7F, 0x29, 0xD4 |
.byte 0xE3, 0x13, 0xA6, 0x3F, 0xA1, 0x3A, 0xB3, 0x51, 0x54, 0x3B, 0x12, 0xA2, 0x39, 0xA6, 0x82, 0xF8 |
.byte 0x47, 0x8B, 0xB8, 0x1C, 0x78, 0x97, 0xF1, 0x73, 0x56, 0xD9, 0x6F, 0x00, 0x58, 0x99, 0xD5, 0x3B |
.byte 0xAC, 0x7B, 0x7B, 0x4E, 0xB6, 0x2E, 0x9F, 0x0A, 0x69, 0xB2, 0xAC, 0xA3, 0x58, 0x2F, 0x9B, 0xA0 |
.byte 0xBB, 0x54, 0xBD, 0x33, 0xEB, 0xAF, 0xA7, 0x41, 0x88, 0x16, 0x42, 0xE0, 0xAF, 0x17, 0x1C, 0x5C |
.byte 0x93, 0x97, 0xAA, 0x49, 0xC6, 0x49, 0x54, 0x30, 0xFB, 0x00, 0xD3, 0x54, 0x30, 0x6F, 0xF5, 0xEB |
.byte 0xC3, 0xB2, 0x1F, 0xAF, 0x62, 0xC6, 0xF1, 0xEA, 0xDC, 0x34, 0xCB, 0x8C, 0x4C, 0xE7, 0xE8, 0xDF |
.byte 0x7F, 0x93, 0x29, 0x46, 0xDD, 0x7E, 0x76, 0xD9, 0x7E, 0x4A, 0x2E, 0xAF, 0xBA, 0x23, 0x9A, 0x7E |
.byte 0xD6, 0xB9, 0x2D, 0x38, 0x7F, 0x1F, 0x23, 0x5C, 0x53, 0xEE, 0xE8, 0x9F, 0xD6, 0xD1, 0x7E, 0x55 |
.byte 0x64, 0xA8, 0x9B, 0x42, 0x26, 0x12, 0x1B, 0xA5, 0x5D, 0x49, 0x54, 0x17, 0x6D, 0xEF, 0x95, 0x43 |
.byte 0xA8, 0xC3, 0x7C, 0x28, 0xE2, 0xA0, 0x84, 0x35, 0x8E, 0x6D, 0xD4, 0x64, 0x3E, 0x53, 0xBA, 0xA3 |
.byte 0xFC, 0x56, 0xE5, 0x22, 0x69, 0x01, 0xC8, 0xC6, 0x4B, 0x1D, 0xDD, 0xB8, 0x0C, 0x72, 0xFC, 0xB5 |
.byte 0x35, 0x79, 0xDD, 0x18, 0x19, 0x62, 0x4D, 0xA8, 0xCF, 0x21, 0x0D, 0x0D, 0x75, 0xC7, 0xB1, 0x71 |
.byte 0x1E, 0x96, 0x94, 0x87, 0x98, 0x5C, 0x4D, 0xE3, 0x7A, 0x2B, 0x9C, 0x86, 0x9E, 0x98, 0x3B, 0xD4 |
.byte 0x11, 0x19, 0xEC, 0x2B, 0x7B, 0x39, 0xD3, 0x4A, 0x5B, 0xE0, 0x58, 0xD0, 0xA8, 0x09, 0x41, 0xC7 |
.byte 0xA0, 0xD6, 0x4E, 0x38, 0x32, 0x9C, 0x1C, 0xAC, 0xC8, 0xB8, 0x33, 0x66, 0x50, 0x6F, 0x3B, 0x62 |
.byte 0x88, 0x27, 0x8E, 0x03, 0x61, 0x61, 0x4E, 0xBC, 0x42, 0xA6, 0x8D, 0xEB, 0xAF, 0xCF, 0xB2, 0x4F |
.byte 0xA5, 0x01, 0x88, 0xD8, 0x9E, 0xA4, 0x84, 0x66, 0x5C, 0xB8, 0xCD, 0xAD, 0x27, 0x08, 0x10, 0xAF |
.byte 0x30, 0x9E, 0xB3, 0x91, 0x00, 0x01, 0x4E, 0x42, 0xA7, 0xDB, 0x2E, 0x57, 0xAA, 0xE1, 0xA7, 0x50 |
.byte 0xE2, 0x2F, 0x28, 0x80, 0xD4, 0xAC, 0xE7, 0x30, 0x64, 0xB4, 0xDE, 0x8C, 0xBD, 0xEE, 0x3B, 0xED |
.byte 0x8D, 0xEE, 0x7E, 0x8D, 0xF0, 0xCC, 0xD0, 0x98, 0xA8, 0xFE, 0xEF, 0x53, 0xDF, 0x96, 0xA3, 0xC2 |
.byte 0xC6, 0xCB, 0x43, 0x9A, 0x78, 0x2A, 0xCB, 0xDD, 0xDF, 0xAA, 0x69, 0x9C, 0x98, 0xA5, 0x89, 0x25 |
.byte 0x94, 0x08, 0xB3, 0x84, 0xD5, 0x83, 0x1C, 0x7D, 0x82, 0x0C, 0xD0, 0x62, 0xA3, 0x73, 0x24, 0x69 |
.byte 0x3F, 0x68, 0x04, 0xB7, 0x92, 0xD0, 0x95, 0x72, 0x7A, 0xFE, 0x0F, 0x13, 0xA4, 0x98, 0x38, 0x38 |
.byte 0xA1, 0xEC, 0xBC, 0x76, 0x70, 0xD9, 0xF3, 0xF2, 0xE6, 0xC4, 0x55, 0x89, 0x38, 0x7A, 0xF3, 0x77 |
.byte 0xE2, 0xF7, 0x2F, 0x75, 0xC7, 0xC4, 0xE7, 0x41, 0xC2, 0xF6, 0x54, 0x67, 0x8F, 0x8D, 0x9F, 0x30 |
.byte 0x7A, 0x5C, 0xA7, 0xEA, 0x35, 0x9B, 0xDD, 0x1C, 0x5F, 0x32, 0xA5, 0x97, 0xAD, 0x98, 0x0F, 0x8F |
.byte 0x90, 0x3E, 0x04, 0x58, 0x02, 0xEC, 0x99, 0xC5, 0xE3, 0xEE, 0x2C, 0x72, 0x7C, 0xCB, 0xA3, 0xF7 |
.byte 0x27, 0x4A, 0xE1, 0x5D, 0xE6, 0xBF, 0x79, 0x45, 0xF2, 0x1F, 0xDD, 0x9F, 0xB7, 0xEC, 0x2F, 0x48 |
.byte 0x2A, 0x33, 0xA0, 0x2D, 0x20, 0x3A, 0xF2, 0x03, 0x29, 0x1E, 0x76, 0xA6, 0xEA, 0x19, 0x9D, 0x12 |
.byte 0x64, 0x7F, 0x6F, 0x4B, 0x3E, 0xE9, 0x90, 0x30, 0x08, 0x6E, 0xD0, 0xC0, 0x5B, 0xFF, 0x09, 0x86 |
.byte 0x33, 0xA9, 0xB3, 0x53, 0xE3, 0xA5, 0x57, 0x0C, 0xC4, 0xCD, 0xB2, 0xAE, 0xE7, 0x50, 0xC0, 0x4C |
.byte 0xCF, 0x30, 0x97, 0x0D, 0x19, 0x28, 0x3E, 0x22, 0x96, 0x0E, 0xE3, 0xF2, 0x0E, 0xEC, 0x78, 0x41 |
.byte 0x96, 0x2B, 0x95, 0x79, 0xD0, 0xED, 0x86, 0x95, 0xBA, 0x39, 0x43, 0xA2, 0x89, 0x04, 0xEE, 0x58 |
.byte 0x34, 0x85, 0x66, 0x4E, 0xAE, 0xA5, 0x71, 0x44, 0xB4, 0x55, 0x36, 0xC2, 0x42, 0xAE, 0x04, 0xD8 |
.byte 0xDA, 0x99, 0x52, 0xAA, 0x86, 0xD9, 0x40, 0x41, 0x12, 0x83, 0xE3, 0x9C, 0x87, 0xD2, 0xF5, 0xBC |
.byte 0x58, 0x5C, 0x0B, 0x06, 0x01, 0x7C, 0x4A, 0xB5, 0xD1, 0x81, 0x77, 0x14, 0x30, 0x7B, 0xEC, 0x0B |
.byte 0x15, 0x3E, 0xB6, 0x9C, 0x17, 0xF6, 0xDE, 0x2A, 0x79, 0xC1, 0xC7, 0x01, 0x94, 0xBC, 0xBE, 0xEC |
.byte 0x18, 0xC9, 0xF2, 0x19, 0x46, 0x3D, 0xCF, 0x18, 0xBF, 0x46, 0x2C, 0xF0, 0xC2, 0x18, 0xFB, 0xD8 |
.byte 0x57, 0xB1, 0x74, 0x6F, 0xA7, 0x52, 0x99, 0x21, 0x14, 0x60, 0x23, 0xA8, 0x1D, 0xE1, 0x95, 0x35 |
.byte 0xAB, 0x87, 0x4F, 0xF1, 0xC4, 0x1F, 0x09, 0x83, 0x66, 0x36, 0x73, 0x29, 0x4E, 0x6F, 0x01, 0xA6 |
.byte 0x20, 0x76, 0x15, 0xC7, 0xC9, 0xAF, 0xE9, 0xDE, 0x10, 0x0C, 0x86, 0x2D, 0xED, 0x1C, 0x63, 0x98 |
.byte 0xA3, 0xB3, 0x8A, 0x68, 0xD2, 0x93, 0xEB, 0x38, 0xCA, 0x5F, 0x61, 0x18, 0xCE, 0x63, 0xBF, 0xEF |
.byte 0xD9, 0xD4, 0xB6, 0xA2, 0x84, 0x9F, 0x80, 0x94, 0xAB, 0x07, 0xC1, 0x99, 0x23, 0x24, 0x32, 0xC7 |
.byte 0xD8, 0xBC, 0x2F, 0xAA, 0x50, 0x1B, 0xE3, 0x1A, 0x7A, 0x45, 0x33, 0x49, 0xA8, 0xF2, 0x38, 0x81 |
.byte 0xC7, 0xEF, 0x24, 0x4B, 0x8F, 0xA4, 0xDF, 0x3B, 0xAC, 0xA1, 0xD5, 0xD0, 0xC5, 0x07, 0x97, 0x9E |
.byte 0xC3, 0xC6, 0x48, 0x13, 0xE1, 0x2C, 0x2D, 0x5C, 0x71, 0x60, 0xA5, 0x19, 0x53, 0xDE, 0x9B, 0x1A |
.byte 0xCE, 0xBF, 0x66, 0x5D, 0x64, 0x45, 0x99, 0x11, 0xE6, 0x6E, 0xE1, 0xAC, 0x75, 0x78, 0x4A, 0x39 |
.byte 0x3E, 0x93, 0x4D, 0x20, 0xBF, 0x7A, 0x7C, 0x31, 0xDB, 0x22, 0x4B, 0x2F, 0x00, 0xE6, 0x49, 0xCF |
.byte 0xA6, 0xB0, 0x2C, 0x0B, 0xF5, 0xC6, 0x1C, 0xDC, 0x35, 0xFE, 0x89, 0xAA, 0x77, 0xD4, 0xE4, 0xB6 |
.byte 0x67, 0x31, 0xD6, 0x27, 0xAC, 0x52, 0x58, 0x88, 0x75, 0xA3, 0xB7, 0x75, 0x8A, 0x01, 0x44, 0x31 |
.byte 0xB1, 0x71, 0x3C, 0xA7, 0x38, 0x59, 0x83, 0x6D, 0x57, 0x0C, 0x18, 0xCF, 0xE1, 0xFC, 0x85, 0x48 |
.byte 0x2E, 0x5B, 0x70, 0xDA, 0xAE, 0xC9, 0x62, 0x23, 0x6D, 0x1A, 0x99, 0xF7, 0x1B, 0xDE, 0x28, 0xCD |
.byte 0x50, 0x65, 0x74, 0x88, 0xBE, 0xF8, 0xF5, 0x16, 0x05, 0x0D, 0xE5, 0xE6, 0x0A, 0x6B, 0x2F, 0x38 |
.byte 0xC7, 0x9F, 0x12, 0x76, 0x68, 0x75, 0x9A, 0xD5, 0x90, 0x33, 0xCD, 0xAC, 0x12, 0xF6, 0x79, 0x62 |
.byte 0x5B, 0xEE, 0xEA, 0x1A, 0xE6, 0xE0, 0x31, 0xEB, 0xED, 0x16, 0xD2, 0xF7, 0x82, 0x01, 0x30, 0x49 |
.byte 0xA0, 0x43, 0xBF, 0x09, 0xB8, 0x59, 0xDF, 0x48, 0x8D, 0xAC, 0xF5, 0x9F, 0xA3, 0x6E, 0x02, 0xFE |
.byte 0x5D, 0xEC, 0x19, 0x43, 0xCD, 0x4A, 0x2F, 0xBA, 0x61, 0x01, 0xB2, 0xE3, 0x02, 0xE2, 0x2D, 0xA3 |
.byte 0x25, 0xEC, 0xAC, 0xDE, 0x46, 0x8C, 0x27, 0xD4, 0x39, 0x1C, 0x73, 0xDC, 0x8B, 0x76, 0xDB, 0xE8 |
.byte 0x62, 0xF4, 0x2C, 0x30, 0x3F, 0x5C, 0xEA, 0xA0, 0x5D, 0x9D, 0x84, 0x60, 0x80, 0xB1, 0x04, 0xA6 |
.byte 0x9E, 0xB1, 0x85, 0xE5, 0x3D, 0xAC, 0xB9, 0x76, 0xC9, 0x2D, 0x53, 0x55, 0xA3, 0x2E, 0x3E, 0x06 |
.byte 0x23, 0x6A, 0x36, 0x62, 0xC7, 0x21, 0x03, 0x25, 0xBE, 0x87, 0x86, 0x3F, 0x39, 0x8A, 0xE5, 0xD8 |
.byte 0x3C, 0x6A, 0xBD, 0x7A, 0x17, 0x76, 0xF0, 0xE1, 0xA3, 0x44, 0x36, 0x47, 0x72, 0x75, 0x4D, 0x96 |
.byte 0xE0, 0x83, 0xF8, 0xA7, 0xA4, 0xFC, 0xCC, 0x63, 0x83, 0x52, 0xA2, 0xBD, 0xDD, 0x88, 0x95, 0x19 |
.byte 0xF3, 0x52, 0x93, 0x0B, 0xC9, 0x84, 0xEC, 0x6D, 0xC8, 0x23, 0xB4, 0x3B, 0x98, 0x02, 0xD1, 0x79 |
.byte 0x85, 0xCA, 0x20, 0x2A, 0xC6, 0xEC, 0x8E, 0x4A, 0x3F, 0x31, 0x08, 0x1C, 0xBA, 0x9D, 0x36, 0xAD |
.byte 0xF0, 0xC9, 0xB8, 0xBA, 0x4E, 0xA5, 0x27, 0x17, 0xC8, 0xDC, 0x52, 0x61, 0xDE, 0x24, 0xDA, 0x63 |
.byte 0xEE, 0xFB, 0x8E, 0xB5, 0xE8, 0x1D, 0x00, 0x27, 0x4E, 0x08, 0x44, 0x08, 0xA5, 0x7A, 0xB6, 0x96 |
.byte 0x44, 0x6F, 0x50, 0x92, 0x14, 0x77, 0xA9, 0xDD, 0x53, 0xFC, 0x3F, 0x31, 0x20, 0x19, 0x95, 0x0F |
.byte 0x15, 0x24, 0xC4, 0xFD, 0x41, 0xC4, 0x24, 0x90, 0xCC, 0x69, 0x99, 0x72, 0xE3, 0x4F, 0x09, 0x28 |
.byte 0xBF, 0x59, 0xBB, 0xD3, 0xD1, 0x64, 0xB1, 0x25, 0x61, 0xF0, 0x57, 0x81, 0x0A, 0xEC, 0x91, 0x1F |
.byte 0x11, 0x56, 0x1C, 0x52, 0x1B, 0x41, 0xE3, 0xE8, 0xAB, 0x7C, 0x5A, 0x8F, 0xCC, 0x64, 0xB7, 0x8C |
.byte 0xBD, 0x72, 0x5F, 0x8E, 0xD7, 0x11, 0xB4, 0x38, 0x01, 0x0B, 0xBA, 0x0B, 0xF8, 0x4B, 0x2B, 0x09 |
.byte 0xA2, 0x48, 0x5C, 0xBD, 0x89, 0x3F, 0xA5, 0x34, 0xBC, 0x00, 0xC3, 0x89, 0x64, 0x7B, 0x15, 0x22 |
.byte 0xED, 0x75, 0xB1, 0xC4, 0x86, 0x65, 0xFD, 0x88, 0x70, 0xB7, 0x94, 0x68, 0x03, 0xBF, 0x71, 0xA5 |
.byte 0x07, 0xCE, 0x63, 0x91, 0x0E, 0x08, 0xC6, 0xCA, 0x09, 0x8A, 0x54, 0x6D, 0x05, 0x69, 0x90, 0xF2 |
.byte 0xDF, 0x41, 0xB7, 0x66, 0xA6, 0xB4, 0xEE, 0x16, 0x6C, 0x83, 0x7F, 0x70, 0x43, 0xF1, 0x16, 0x4A |
.byte 0xBF, 0x79, 0xDC, 0xCD, 0x82, 0xA2, 0x98, 0x8B, 0x2C, 0xED, 0xF9, 0x32, 0x57, 0x89, 0x24, 0x36 |
.byte 0xCA, 0xDC, 0x9C, 0x71, 0x91, 0x8B, 0x88, 0xFE, 0x0F, 0x07, 0x6E, 0x52, 0xF9, 0x84, 0x9C, 0xB8 |
.byte 0xFE, 0x79, 0x86, 0x80, 0x1B, 0x1F, 0x0B, 0x48, 0x0C, 0x05, 0x7A, 0x63, 0x8E, 0x9F, 0x9A, 0x59 |
.byte 0x7C, 0x37, 0xCB, 0x0D, 0xC3, 0x53, 0x0C, 0xD2, 0x5B, 0x7A, 0x24, 0x54, 0xFF, 0xC1, 0x0D, 0xFE |
.byte 0x3A, 0x94, 0x7E, 0x56, 0xB3, 0x8A, 0x9F, 0xC0, 0x8F, 0x1A, 0x24, 0x1E, 0xB9, 0xBF, 0x78, 0x36 |
.byte 0xF6, 0x43, 0x44, 0xB9, 0x97, 0x50, 0x8C, 0xF2, 0xCB, 0xB0, 0x46, 0xCB, 0x72, 0x53, 0xC9, 0xAD |
.byte 0xE8, 0x47, 0x04, 0x9B, 0xD1, 0xA3, 0x5C, 0x61, 0xBD, 0x81, 0x80, 0x77, 0x40, 0xF8, 0xAD, 0x37 |
.byte 0x3C, 0xF1, 0xF0, 0xD3, 0x42, 0x7D, 0xC5, 0x0D, 0x2D, 0x0C, 0xD8, 0xA0, 0x60, 0xA1, 0x4D, 0x48 |
.byte 0xE8, 0x51, 0xE4, 0xBA, 0xF4, 0x41, 0x1B, 0xB2, 0xC2, 0x9B, 0x2A, 0x03, 0x94, 0xD8, 0x3A, 0xD0 |
.byte 0xC9, 0x2A, 0xA4, 0x0B, 0xA7, 0x69, 0x19, 0xD5, 0x76, 0xF1, 0x75, 0xD6, 0x92, 0xC3, 0x1F, 0x7B |
.byte 0x14, 0x03, 0x36, 0x09, 0x44, 0x52, 0xBC, 0x07, 0xEE, 0xE6, 0x0A, 0x82, 0xBE, 0x44, 0x53, 0x88 |
.byte 0x6F, 0xF7, 0x94, 0x17, 0x61, 0xAD, 0xED, 0xD8, 0x9F, 0x63, 0xAF, 0x32, 0x26, 0xCE, 0xAE, 0x3B |
.byte 0xD2, 0xE4, 0x44, 0x17, 0x36, 0x00, 0x1E, 0x25, 0xE7, 0x28, 0xA8, 0xA5, 0x6D, 0xFB, 0x2E, 0xDC |
.byte 0xF3, 0xC2, 0xF4, 0x55, 0x70, 0xE1, 0x2D, 0x0F, 0x44, 0xDC, 0x41, 0x6A, 0xAB, 0xEF, 0xA5, 0x7D |
.byte 0xD4, 0xEA, 0x94, 0x0B, 0xEB, 0xB3, 0x30, 0xD2, 0xDC, 0xD9, 0x78, 0x49, 0xD5, 0xA6, 0x26, 0xC8 |
.byte 0x68, 0x1A, 0x1E, 0xD9, 0xFC, 0x4B, 0xE8, 0x40, 0x28, 0x2A, 0xAB, 0xD3, 0x19, 0x51, 0x51, 0xEE |
.byte 0x3C, 0xE5, 0xF9, 0x27, 0x98, 0x2A, 0xFA, 0x74, 0x03, 0x72, 0xBE, 0xD8, 0x18, 0xE4, 0xA1, 0x81 |
.byte 0xFF, 0xBF, 0x5B, 0xFB, 0x0B, 0x43, 0x3C, 0x34, 0x6D, 0xE7, 0x07, 0x87, 0x39, 0x58, 0x75, 0x75 |
.byte 0x3E, 0x6F, 0x9C, 0xD7, 0x9A, 0x96, 0x4B, 0x9D, 0x08, 0x09, 0x76, 0x21, 0xEE, 0x17, 0xA3, 0xED |
.byte 0xD7, 0xFE, 0xE8, 0xE2, 0x42, 0x24, 0x16, 0xB0, 0x0C, 0x1E, 0x37, 0x45, 0x77, 0xAD, 0xBA, 0xB6 |
.byte 0x1D, 0x56, 0x8D, 0xB7, 0xED, 0xD8, 0x55, 0xF6, 0xE2, 0xCB, 0x18, 0xD0, 0xE3, 0xBC, 0xBE, 0xBA |
.byte 0xBB, 0xA7, 0x9D, 0xFD, 0xCB, 0xB4, 0xAD, 0xD8, 0xD2, 0xE5, 0x1D, 0x4A, 0x92, 0xD8, 0x00, 0xAF |
.byte 0x2F, 0x8D, 0x67, 0x1C, 0x66, 0xBC, 0x13, 0x48, 0x87, 0x2B, 0x19, 0x6A, 0xE7, 0xD7, 0x24, 0xA3 |
.byte 0x7E, 0xC2, 0xA0, 0x4A, 0x76, 0x4E, 0x23, 0x49, 0x33, 0x41, 0x93, 0xC5, 0x19, 0x94, 0x75, 0x49 |
.byte 0x22, 0xDD, 0x66, 0x88, 0x99, 0x79, 0xD1, 0x21, 0xA5, 0xEB, 0x8B, 0x8D, 0xC3, 0xB0, 0x30, 0x42 |
.byte 0x72, 0xD0, 0x8C, 0xE9, 0x1E, 0xB0, 0x32, 0x52, 0xF1, 0xC5, 0x18, 0x0B, 0x5A, 0x8D, 0x54, 0x7C |
.byte 0x6A, 0xBA, 0x04, 0x04, 0x34, 0xD6, 0x25, 0xD9, 0xC1, 0xB1, 0x66, 0x84, 0x62, 0x97, 0xC6, 0xD5 |
.byte 0x67, 0x53, 0xBE, 0x86, 0x03, 0xF0, 0xD8, 0xF5, 0xB6, 0xF0, 0x00, 0x10, 0x7E, 0x55, 0x8C, 0xE9 |
.byte 0x10, 0x91, 0xEE, 0x44, 0x67, 0x13, 0x1E, 0x29, 0xC5, 0x84, 0xAE, 0x27, 0x1B, 0x74, 0xFD, 0x83 |
.byte 0xC8, 0xBB, 0x0A, 0xCC, 0xAC, 0xE3, 0xC1, 0x62, 0xD4, 0xC2, 0x72, 0x53, 0x18, 0xFF, 0x3D, 0x28 |
.byte 0x90, 0x2B, 0x6D, 0xF8, 0x3F, 0x8B, 0x21, 0x04, 0x0F, 0xCF, 0x2C, 0x2B, 0x44, 0x29, 0xAF, 0x0D |
.byte 0xE5, 0xB9, 0xD9, 0x91, 0x9D, 0x9B, 0xF3, 0x71, 0x5E, 0x66, 0xC5, 0x76, 0x65, 0x02, 0x9F, 0xF6 |
.byte 0x2D, 0x0C, 0xEF, 0x6D, 0x97, 0x11, 0x72, 0xA7, 0xE1, 0x9E, 0xD2, 0x25, 0xC8, 0x81, 0x33, 0xAD |
.byte 0x3B, 0x0C, 0x3E, 0xD9, 0xA8, 0x32, 0x4B, 0x06, 0x98, 0x10, 0x7D, 0xFE, 0x12, 0x1C, 0xF5, 0x40 |
.byte 0x28, 0xE4, 0xAE, 0xBF, 0xF6, 0x20, 0x66, 0xD7, 0xBE, 0x39, 0xFD, 0x87, 0xBB, 0x30, 0x34, 0xF7 |
.byte 0x3C, 0x73, 0xD0, 0xE5, 0xA5, 0x1B, 0xEB, 0x3D, 0x2C, 0x68, 0x3C, 0x3F, 0x85, 0x31, 0x80, 0xAD |
.byte 0x16, 0x2E, 0x6D, 0x0C, 0x4E, 0xD3, 0xE3, 0x0D, 0x0D, 0xE0, 0x94, 0xC8, 0x10, 0xC9, 0xBF, 0x4D |
.byte 0x3C, 0x90, 0x32, 0xE2, 0xAC, 0x1E, 0x1F, 0xD8, 0x87, 0x5B, 0x18, 0x0C, 0x8D, 0x98, 0xB9, 0xA3 |
.byte 0xC6, 0x27, 0xAF, 0x15, 0xFA, 0x92, 0x22, 0x08, 0x73, 0xB7, 0xD0, 0x84, 0x81, 0x90, 0xD1, 0xBE |
.byte 0x21, 0x04, 0xA0, 0xCD, 0x23, 0xC0, 0xA6, 0xAA, 0x1B, 0xBE, 0xB7, 0xA9, 0x56, 0x71, 0x4C, 0x1D |
.byte 0x98, 0xFB, 0x32, 0x93, 0x8E, 0x55, 0x9B, 0x01, 0x0C, 0x6C, 0x85, 0x8E, 0xFD, 0x57, 0x4C, 0x1E |
.byte 0x5C, 0xEC, 0xEC, 0x7F, 0xAC, 0x92, 0x2A, 0xC8, 0x51, 0xE2, 0x71, 0xA7, 0x53, 0xBE, 0xC5, 0xEB |
.byte 0xBA, 0xF7, 0x7E, 0x48, 0x4C, 0x1A, 0x49, 0x59, 0x86, 0xCF, 0xE7, 0x83, 0x27, 0x33, 0xA2, 0x83 |
.byte 0x20, 0x8E, 0x03, 0xCC, 0x21, 0x2D, 0x95, 0x72, 0x0F, 0x07, 0x1A, 0x63, 0xC5, 0xDF, 0x4E, 0x7F |
.byte 0xD7, 0xCD, 0xC7, 0x24, 0xE7, 0x11, 0x7D, 0x6E, 0xE1, 0x65, 0xF2, 0x08, 0x99, 0x94, 0x8B, 0xB9 |
.byte 0x23, 0x8E, 0x86, 0x44, 0xBC, 0x1C, 0xB6, 0xCC, 0x23, 0xD1, 0x2F, 0xE9, 0xB0, 0x7E, 0x68, 0x87 |
.byte 0x4C, 0x30, 0xAB, 0x33, 0x42, 0x29, 0xA2, 0x23, 0x8E, 0x94, 0x2C, 0x28, 0x29, 0xB8, 0xE1, 0x4C |
.byte 0x47, 0x68, 0x91, 0x03, 0x84, 0x47, 0xD0, 0xA8, 0x18, 0x00, 0x91, 0xC9, 0x7F, 0xF9, 0x51, 0xCB |
.byte 0x2A, 0xFC, 0xFE, 0x6C, 0x26, 0xA1, 0x90, 0xB4, 0x35, 0xBC, 0xDC, 0x5E, 0x74, 0xBE, 0xAB, 0xBC |
.byte 0x26, 0x3C, 0xC0, 0xAB, 0x84, 0x90, 0x53, 0x9D, 0x91, 0xE4, 0x66, 0x10, 0xDE, 0xB8, 0xDB, 0x08 |
.byte 0xB4, 0xDA, 0x75, 0xDA, 0x7B, 0x05, 0x8F, 0xB1, 0xC2, 0x6C, 0x10, 0x37, 0x2B, 0xBB, 0xF3, 0x52 |
.byte 0xF8, 0xB3, 0xFD, 0x7C, 0x43, 0x51, 0x19, 0xD5, 0x35, 0x80, 0xE5, 0x14, 0x38, 0xC0, 0x1C, 0xED |
.byte 0x9B, 0x91, 0xC8, 0x16, 0x97, 0x58, 0xC7, 0x59, 0xC5, 0xD7, 0x90, 0xF0, 0x93, 0x83, 0x42, 0x8B |
.byte 0x36, 0x40, 0x08, 0x7A, 0x91, 0x22, 0x4F, 0xC7, 0xA3, 0x34, 0xDC, 0xDB, 0xF5, 0xF8, 0xC9, 0x90 |
.byte 0x8A, 0x92, 0xA7, 0x21, 0xEA, 0x6E, 0x7B, 0xB0, 0x46, 0x0B, 0xA0, 0xDA, 0x8E, 0xE3, 0x65, 0xC5 |
.byte 0x24, 0x6E, 0x3F, 0xB5, 0x90, 0x8F, 0x7D, 0x33, 0xC3, 0x59, 0x0F, 0xB9, 0x52, 0xD8, 0x49, 0xDD |
.byte 0x6B, 0xF0, 0xFF, 0x56, 0x5F, 0x7A, 0x06, 0xA6, 0x85, 0xA7, 0x80, 0x14, 0x8A, 0xE6, 0xDA, 0xAE |
.byte 0x54, 0x19, 0x64, 0xE4, 0xA9, 0xE2, 0x18, 0x6C, 0x3C, 0x27, 0x26, 0x8F, 0x00, 0x70, 0x6C, 0x6B |
.byte 0x61, 0x6B, 0xC1, 0xC0, 0xE5, 0xC7, 0x67, 0x6B, 0x6F, 0xE8, 0x80, 0xF9, 0xCE, 0x5A, 0xA8, 0x23 |
.byte 0x73, 0x0D, 0x08, 0x1C, 0xF0, 0x20, 0x89, 0x2C, 0x47, 0xB0, 0xBC, 0x47, 0x20, 0x28, 0xB3, 0x81 |
.byte 0x94, 0x74, 0x41, 0x79, 0x3C, 0xA9, 0xE5, 0xAB, 0x91, 0x65, 0xA5, 0x60, 0xBF, 0x4E, 0x84, 0x33 |
.byte 0x5B, 0x8C, 0x50, 0x4C, 0xAC, 0xDA, 0x79, 0xF4, 0x8A, 0x35, 0x3C, 0xAA, 0x5D, 0xEF, 0x2B, 0xF2 |
.byte 0x64, 0x6D, 0x6C, 0xA0, 0x17, 0x51, 0x4C, 0xA8, 0xB6, 0xF1, 0x09, 0x76, 0x3F, 0x8D, 0xA9, 0x9B |
.byte 0x1A, 0xFA, 0xE7, 0xC7, 0xD4, 0x60, 0xBB, 0x5E, 0x96, 0xF8, 0x09, 0xF4, 0xE7, 0x34, 0xE6, 0x4C |
.byte 0xA2, 0x52, 0xED, 0xB9, 0xA3, 0x39, 0x62, 0x5A, 0x2A, 0x6B, 0xD0, 0x6A, 0xF8, 0x7A, 0x05, 0x12 |
.byte 0x74, 0xED, 0xD9, 0x48, 0x4E, 0x95, 0xA7, 0xE4, 0x8D, 0xB0, 0xD8, 0x75, 0xE5, 0xBE, 0xC2, 0x87 |
.byte 0x10, 0xAF, 0x41, 0xB4, 0xE8, 0xA3, 0x0E, 0x13, 0x0E, 0xDF, 0x7D, 0x07, 0x59, 0x83, 0x1A, 0xCD |
.byte 0x70, 0xF4, 0x16, 0xBE, 0x89, 0xBE, 0xA3, 0x17, 0x6E, 0x7B, 0x8D, 0x54, 0x39, 0x4F, 0xDB, 0x4A |
.byte 0xFE, 0x1C, 0xFE, 0xE7, 0xC0, 0x0D, 0xFA, 0xCE, 0xEC, 0x77, 0xD5, 0x46, 0xFA, 0xF0, 0x14, 0x6B |
.byte 0xE4, 0x2A, 0x29, 0x6E, 0xE9, 0xCC, 0x85, 0x57, 0x48, 0x13, 0xAC, 0x82, 0x63, 0x88, 0xCC, 0x62 |
.byte 0xA5, 0xCB, 0x49, 0x65, 0xD9, 0x43, 0x33, 0xC5, 0xBB, 0x09, 0x0B, 0xB6, 0xF9, 0x1F, 0x21, 0xDD |
.byte 0x4A, 0x4B, 0x4B, 0x33, 0x18, 0xD1, 0x8B, 0x60, 0xE4, 0x37, 0xE3, 0x48, 0xBF, 0xAF, 0xAA, 0x65 |
.byte 0x7B, 0xF3, 0xCA, 0x54, 0x37, 0xFE, 0x1A, 0xF2, 0x07, 0x25, 0xA9, 0x01, 0x45, 0xCA, 0xDF, 0x8F |
.byte 0x16, 0x2B, 0xC3, 0x2E, 0xFD, 0x4E, 0x8F, 0xE2, 0x86, 0x72, 0x2A, 0x46, 0x22, 0xD4, 0xAB, 0x9D |
.byte 0xC7, 0x75, 0xF2, 0xFE, 0x73, 0x0C, 0xF1, 0x7B, 0x32, 0x9A, 0x7D, 0x77, 0x65, 0x5C, 0x07, 0x7B |
.byte 0x88, 0xCA, 0xAA, 0x85, 0x19, 0x39, 0x67, 0x9F, 0xAB, 0x91, 0xE6, 0xCD, 0x65, 0x91, 0x6B, 0x2C |
.byte 0x06, 0x5D, 0x2B, 0x7A, 0x6A, 0x1D, 0xF6, 0x9C, 0xB7, 0x73, 0x14, 0x1D, 0xD0, 0x1B, 0x98, 0x58 |
.byte 0xE6, 0x42, 0xDD, 0xFF, 0x7C, 0x44, 0x9F, 0x27, 0xD5, 0x85, 0xF5, 0x3A, 0x16, 0x61, 0x67, 0x1D |
.byte 0xBF, 0x93, 0x98, 0x2A, 0xB0, 0x8E, 0xC6, 0x68, 0x02, 0xDA, 0x85, 0xD2, 0xF5, 0x1E, 0x2A, 0xDB |
.byte 0x61, 0x07, 0xDB, 0xDD, 0x4B, 0x7A, 0x05, 0x21, 0xFF, 0xFB, 0x5C, 0x16, 0x5D, 0xC4, 0x34, 0x1D |
.byte 0x57, 0xCC, 0x47, 0x08, 0x5B, 0x0D, 0x71, 0x5D, 0xE8, 0xF7, 0x2F, 0xDE, 0x16, 0x5A, 0xBA, 0x77 |
.byte 0x61, 0x95, 0x55, 0xAD, 0x10, 0x5A, 0xCF, 0x10, 0x56, 0x2B, 0x26, 0xB3, 0xF0, 0x5A, 0xD1, 0x48 |
.byte 0x27, 0x18, 0x50, 0x82, 0x25, 0xC2, 0xDF, 0x0E, 0xB9, 0x0F, 0xEC, 0xD0, 0x69, 0xA6, 0x47, 0xCB |
.byte 0x3C, 0x9D, 0x79, 0x4C, 0xF8, 0x48, 0x5C, 0x4E, 0x74, 0x83, 0x02, 0x64, 0xDD, 0xD3, 0xAC, 0x05 |
.byte 0xEB, 0xFD, 0x87, 0x11, 0xC0, 0x66, 0x20, 0x7A, 0x76, 0x0C, 0x4A, 0xDF, 0xB3, 0x92, 0xAB, 0xEF |
.byte 0x2F, 0x24, 0x3B, 0x27, 0x6D, 0x98, 0x76, 0xE1, 0x1B, 0x78, 0x46, 0xF9, 0x4C, 0xF3, 0xFE, 0x38 |
.byte 0xF1, 0x85, 0x4A, 0xB1, 0xEC, 0x6A, 0x2C, 0x62, 0x77, 0x76, 0x42, 0x2A, 0x09, 0xED, 0x19, 0x38 |
.byte 0x11, 0x54, 0x60, 0x7E, 0xED, 0xD6, 0x60, 0x08, 0x4F, 0xA7, 0x02, 0x9C, 0x9B, 0x00, 0xD4, 0x8C |
.byte 0x86, 0x1F, 0x3E, 0x73, 0x8A, 0x6A, 0xD5, 0x01, 0xE1, 0x18, 0x2B, 0xEA, 0x05, 0x44, 0x23, 0x16 |
.byte 0x99, 0x83, 0x95, 0x86, 0x59, 0xF6, 0x8F, 0xA9, 0x9D, 0x92, 0x45, 0x38, 0x93, 0x1A, 0xC5, 0x19 |
.byte 0x39, 0x03, 0x8D, 0xC3, 0x6E, 0x63, 0xC5, 0x50, 0x7B, 0xF0, 0x3B, 0x80, 0x35, 0x5E, 0x97, 0xCE |
.byte 0xE2, 0x2C, 0x55, 0x3C, 0x23, 0xE5, 0xE5, 0xC0, 0x77, 0x2B, 0xF9, 0x0B, 0x45, 0xBE, 0x25, 0x7F |
.byte 0xC2, 0xB2, 0x42, 0x31, 0x15, 0x07, 0x81, 0x90, 0xF8, 0xBC, 0x10, 0x2D, 0x1B, 0xA7, 0xFC, 0xFD |
.byte 0xD4, 0x52, 0x3A, 0xF7, 0x38, 0x1F, 0xB8, 0xB0, 0x4A, 0xB1, 0xBB, 0x90, 0x70, 0xE0, 0x0F, 0x33 |
.byte 0x92, 0x51, 0x64, 0xA8, 0x59, 0xE6, 0x38, 0x52, 0xA3, 0x49, 0x7F, 0xBE, 0xF1, 0x7C, 0xBC, 0xC6 |
.byte 0xCF, 0xF6, 0xBD, 0x07, 0x16, 0x76, 0xB7, 0x60, 0x28, 0x73, 0xF1, 0x98, 0x53, 0x00, 0xCC, 0xE6 |
.byte 0x52, 0x30, 0x8E, 0xAC, 0x16, 0xC7, 0xFE, 0xBA, 0x10, 0x7E, 0x78, 0x01, 0xFA, 0x35, 0xC7, 0xCA |
.byte 0x2B, 0x85, 0xD1, 0x41, 0xFB, 0x89, 0xA2, 0x24, 0xFC, 0x93, 0xBC, 0x50, 0x94, 0x89, 0x36, 0xE6 |
.byte 0xB9, 0xC5, 0x92, 0xD0, 0x8C, 0x90, 0x8A, 0x9D, 0x0F, 0x03, 0x9F, 0x0A, 0x38, 0x67, 0xD4, 0x64 |
.byte 0xED, 0xA6, 0xA6, 0xE8, 0x2F, 0x49, 0x0D, 0x2C, 0xDD, 0xCA, 0x7C, 0x71, 0x53, 0xB3, 0x57, 0x0C |
.byte 0x79, 0xE9, 0xDD, 0x05, 0x7A, 0x68, 0xA3, 0x89, 0x6B, 0x42, 0x93, 0xA4, 0xA9, 0x67, 0x09, 0x96 |
.byte 0x0D, 0xAF, 0x7F, 0x3D, 0xF8, 0x8C, 0x6A, 0xD5, 0x57, 0xE6, 0x47, 0xAA, 0x9A, 0x9E, 0xB6, 0x14 |
.byte 0x88, 0x94, 0x1A, 0x03, 0xFD, 0xBD, 0x8D, 0x69, 0xFF, 0x20, 0x0D, 0xA9, 0x88, 0x16, 0x40, 0x96 |
.byte 0xC6, 0xC0, 0xD4, 0xBE, 0x4D, 0x3E, 0x94, 0xA4, 0x25, 0xDB, 0x4E, 0xC0, 0x7A, 0x05, 0xD4, 0x03 |
.byte 0x9A, 0xEE, 0x06, 0x97, 0xAB, 0x93, 0x00, 0xAB, 0xB4, 0x0D, 0x55, 0x3D, 0x24, 0x96, 0xD4, 0xEB |
.byte 0x56, 0xA8, 0xA9, 0xA4, 0xE7, 0x3E, 0x48, 0x0D, 0x1A, 0x97, 0xCD, 0x94, 0x9C, 0xA1, 0x97, 0x36 |
.byte 0x90, 0x9D, 0xCE, 0x3C, 0x31, 0xCE, 0xE7, 0xE6, 0xDC, 0x3D, 0x23, 0x00, 0xD3, 0xF8, 0xEB, 0x29 |
.byte 0xA0, 0x95, 0xCD, 0x88, 0xD4, 0x16, 0x95, 0xEE, 0xAD, 0x62, 0x82, 0x4A, 0x04, 0x1A, 0x81, 0x94 |
.byte 0xB8, 0x4F, 0xD1, 0xE9, 0x1D, 0xB8, 0xCF, 0xF9, 0xF6, 0xF3, 0xFA, 0xC9, 0xEB, 0xE6, 0xF3, 0x8C |
.byte 0x7C, 0xC1, 0x14, 0x50, 0xD7, 0xAA, 0x3F, 0x85, 0x0D, 0xC1, 0xCF, 0x12, 0xDB, 0x51, 0xA7, 0x93 |
.byte 0xA0, 0x78, 0x7D, 0xBD, 0x31, 0x4D, 0xB7, 0x27, 0x40, 0xB2, 0xF0, 0x2C, 0x99, 0xE4, 0xB8, 0x15 |
.byte 0xA5, 0xCD, 0x66, 0x7D, 0x78, 0xA5, 0x02, 0x85, 0x67, 0xD2, 0x97, 0x43, 0x23, 0x3E, 0xD7, 0xC4 |
.byte 0xB7, 0x55, 0x82, 0xE8, 0xA2, 0x39, 0x0F, 0xE3, 0xEC, 0xFF, 0x0F, 0x85, 0xE3, 0xC8, 0x9B, 0x89 |
.byte 0x96, 0x02, 0x06, 0x0E, 0xA8, 0x09, 0x93, 0x10, 0xDC, 0x2B, 0x53, 0xFF, 0x6A, 0x2B, 0xC4, 0x21 |
.byte 0x80, 0x46, 0x09, 0x22, 0x80, 0x19, 0x06, 0x6C, 0x18, 0x15, 0xF2, 0xFC, 0xDD, 0x8E, 0x86, 0x74 |
.byte 0x91, 0x8C, 0x82, 0x3A, 0x95, 0x16, 0x4A, 0x72, 0x42, 0x9E, 0x71, 0xAC, 0xC9, 0x35, 0xCE, 0x49 |
.byte 0x7C, 0xD8, 0x6C, 0xFC, 0xF1, 0x72, 0x69, 0x0A, 0x87, 0x5C, 0x06, 0x65, 0xEA, 0x8C, 0xD9, 0x7C |
.byte 0x19, 0x5C, 0xB6, 0xAF, 0x72, 0x00, 0x21, 0xB4, 0x9E, 0x93, 0x61, 0x67, 0xC9, 0x2F, 0xB1, 0x45 |
.byte 0x08, 0x1D, 0x42, 0xF9, 0x8F, 0xAB, 0x03, 0x17, 0x07, 0x0A, 0x7D, 0xF2, 0x97, 0x57, 0x6E, 0xB0 |
.byte 0xB3, 0x24, 0x60, 0x26, 0x24, 0x81, 0xDB, 0xC2, 0x15, 0x3C, 0x2A, 0xDE, 0x6C, 0xDB, 0x24, 0x74 |
.byte 0xF9, 0x66, 0x6D, 0x89, 0x11, 0x71, 0xA1, 0x19, 0x7B, 0x1F, 0x0B, 0x12, 0x76, 0x79, 0xC3, 0x2A |
.byte 0x9D, 0x23, 0x51, 0xC2, 0xA5, 0x2C, 0x85, 0xBA, 0x68, 0xAF, 0x98, 0xD5, 0x8B, 0xBC, 0x49, 0x85 |
.byte 0x23, 0xB7, 0x0F, 0x34, 0x29, 0xB0, 0x4D, 0xA4, 0xCF, 0x59, 0xB7, 0x46, 0xD2, 0x7B, 0x71, 0x70 |
.byte 0x9E, 0xC2, 0x32, 0x43, 0xEE, 0xB7, 0xFE, 0x57, 0x67, 0x96, 0x2D, 0xF3, 0x53, 0x76, 0x78, 0x76 |
.byte 0x2E, 0x87, 0xAB, 0x57, 0x38, 0xF9, 0xFC, 0x08, 0x52, 0xB3, 0x4E, 0x24, 0x2E, 0xC0, 0x95, 0xCD |
.byte 0x82, 0xC7, 0x11, 0x71, 0x7E, 0x0F, 0xC9, 0xE6, 0xA6, 0xF6, 0xD9, 0xFA, 0x6D, 0x52, 0x71, 0x9C |
.byte 0xDA, 0x1D, 0xF3, 0x13, 0x16, 0xF0, 0x1B, 0x68, 0xA3, 0x6A, 0x8D, 0xD2, 0x2A, 0x22, 0xA0, 0xAD |
.byte 0xEA, 0xB2, 0x1E, 0x69, 0xC2, 0xE8, 0x4F, 0x69, 0xDF, 0x29, 0x63, 0x4C, 0x7C, 0xD5, 0xE8, 0x56 |
.byte 0xF2, 0xDC, 0x69, 0x08, 0xCC, 0x85, 0x71, 0x70, 0xEF, 0xFF, 0x43, 0x19, 0x22, 0xE4, 0xC6, 0x0C |
.byte 0x96, 0xE5, 0x75, 0x59, 0xCE, 0xC5, 0xC2, 0xAD, 0xEE, 0x26, 0xF9, 0x6A, 0xFB, 0xE2, 0xC1, 0xED |
.byte 0xBF, 0x2B, 0xF6, 0x8C, 0xB0, 0x67, 0xFD, 0x9F, 0x67, 0x40, 0xB9, 0x89, 0x25, 0x7F, 0x95, 0xBB |
.byte 0x65, 0x0B, 0x14, 0x33, 0xD0, 0xD7, 0xE0, 0xBE, 0xFD, 0xDA, 0x29, 0xF8, 0xBD, 0xEA, 0xE6, 0x7D |
.byte 0x15, 0xDC, 0x09, 0xC6, 0x44, 0x06, 0x66, 0xAB, 0x47, 0x1F, 0x34, 0x6C, 0x9F, 0xCA, 0x28, 0x04 |
.byte 0xD5, 0x3D, 0x38, 0xA5, 0x14, 0x19, 0x64, 0x11, 0xF4, 0x8D, 0x0A, 0xB2, 0x78, 0xF0, 0x2F, 0x8E |
.byte 0xCC, 0x38, 0x54, 0x10, 0x3F, 0xBA, 0xBC, 0x86, 0xD9, 0xF1, 0xF3, 0x79, 0xBB, 0x1B, 0x7D, 0x91 |
.byte 0x59, 0xB6, 0x36, 0x6D, 0xCF, 0x9B, 0x7F, 0xC4, 0x28, 0x89, 0x76, 0xA0, 0x79, 0xA5, 0x2E, 0x46 |
.byte 0xDE, 0x83, 0x57, 0x1D, 0x3D, 0x13, 0xA4, 0x17, 0x04, 0x98, 0x90, 0xC0, 0xB3, 0x0E, 0x51, 0x0D |
.byte 0xC4, 0x88, 0x7A, 0x94, 0x23, 0xFA, 0x58, 0x4C, 0x84, 0xCE, 0xEC, 0xFD, 0x74, 0x1B, 0x44, 0x52 |
.byte 0x9E, 0x9B, 0x70, 0xDC, 0xAF, 0x14, 0xF3, 0xB4, 0xAD, 0x84, 0x75, 0x61, 0x92, 0xC6, 0x6E, 0x56 |
.byte 0x4F, 0xE9, 0xEB, 0x73, 0xE3, 0x43, 0xBF, 0x67, 0x12, 0xAC, 0x65, 0x86, 0xC8, 0xAA, 0xD8, 0x66 |
.byte 0x45, 0x48, 0x43, 0xF5, 0x5D, 0x36, 0xA9, 0x0A, 0xBA, 0x1E, 0x6B, 0x4D, 0xE5, 0xDA, 0xA4, 0x35 |
.byte 0xC3, 0x8F, 0xA8, 0xA7, 0xD3, 0x68, 0x0E, 0xE5, 0x15, 0x74, 0x6B, 0xDD, 0x1E, 0x44, 0x44, 0x64 |
.byte 0x8D, 0x87, 0x59, 0xEB, 0xBE, 0x03, 0xF6, 0x79, 0x22, 0x62, 0xC6, 0x07, 0x3C, 0x6A, 0x3D, 0xFF |
.byte 0xFA, 0xE5, 0xA6, 0xCD, 0x4E, 0xB5, 0xB2, 0x63, 0x29, 0x1E, 0x41, 0x48, 0x63, 0x86, 0xAC, 0xF0 |
.byte 0x0E, 0x05, 0xDC, 0xCD, 0x09, 0xD2, 0x46, 0x2B, 0x34, 0x0D, 0x32, 0x70, 0x78, 0x6F, 0x70, 0x72 |
.byte 0x55, 0x17, 0x3F, 0xA4, 0xCC, 0xF2, 0x08, 0xF6, 0x11, 0x4A, 0x3E, 0x74, 0xD0, 0xEA, 0x65, 0xDF |
.byte 0xF0, 0x41, 0xAC, 0xF9, 0x13, 0xF2, 0x24, 0x48, 0xFF, 0x57, 0xB9, 0x77, 0xC7, 0x29, 0xEA, 0x1D |
.byte 0x40, 0x29, 0xC1, 0x0D, 0x1B, 0xCA, 0x03, 0x2D, 0x14, 0x41, 0xA1, 0xE5, 0x2C, 0x06, 0xC4, 0x1C |
.byte 0x48, 0x70, 0x16, 0x5C, 0x62, 0x3B, 0xA4, 0x62, 0x93, 0x5E, 0xDA, 0x5A, 0x87, 0xC4, 0x78, 0xC8 |
.byte 0xEE, 0x3A, 0xD6, 0x0A, 0x04, 0xD9, 0x37, 0x18, 0x1B, 0xD8, 0xFD, 0x48, 0xDF, 0xC1, 0x65, 0x27 |
.byte 0x32, 0x7B, 0x83, 0x94, 0xB7, 0x28, 0xF7, 0x4A, 0x86, 0xD2, 0xA5, 0x0E, 0x96, 0x1D, 0xD7, 0x85 |
.byte 0x57, 0xAD, 0x8F, 0x5C, 0x87, 0xC6, 0x75, 0xA3, 0x9F, 0x73, 0xEC, 0x7F, 0x35, 0x51, 0xA6, 0x67 |
.byte 0xCD, 0x2A, 0xFC, 0x84, 0x53, 0xF3, 0xCE, 0xDA, 0xC5, 0x73, 0xE8, 0x5C, 0x91, 0xC0, 0xE1, 0xE8 |
.byte 0x6E, 0x70, 0x45, 0xF6, 0x37, 0xBA, 0x9A, 0xD7, 0x2D, 0x86, 0x56, 0x62, 0xD7, 0xFD, 0xCA, 0xA4 |
.byte 0x28, 0xC6, 0x29, 0x7B, 0xB9, 0xF7, 0x55, 0x7E, 0x6B, 0x3E, 0xDB, 0xFC, 0xFE, 0xBC, 0xE5, 0x6D |
.byte 0x2D, 0x2A, 0x63, 0x64, 0xE5, 0xFD, 0x3B, 0x12, 0x84, 0x92, 0x75, 0x5B, 0x8F, 0x3F, 0x00, 0xB7 |
.byte 0x05, 0x2A, 0x32, 0xBF, 0x22, 0x88, 0x3E, 0x8D, 0xC6, 0x19, 0x8A, 0xC5, 0xD5, 0x70, 0x32, 0x03 |
.byte 0x9A, 0x96, 0x67, 0x80, 0x94, 0xA3, 0x93, 0x18, 0x35, 0x08, 0x74, 0xC4, 0x48, 0x74, 0x7C, 0x4E |
.byte 0x9F, 0xAF, 0x0D, 0xC1, 0x37, 0x4B, 0x4F, 0xFE, 0x65, 0xD9, 0xC4, 0x3B, 0x49, 0xF7, 0x3E, 0xE4 |
.byte 0x8D, 0xA5, 0x64, 0x22, 0x49, 0xF7, 0x3A, 0x7E, 0x00, 0xAE, 0x43, 0x49, 0x23, 0xC0, 0x97, 0xC2 |
.byte 0x6F, 0xA4, 0x83, 0xA7, 0xF0, 0xD2, 0xA6, 0x55, 0xAC, 0x6A, 0x90, 0xF6, 0x61, 0xCF, 0xDA, 0xEF |
.byte 0x74, 0x3F, 0x11, 0xBD, 0x37, 0x4C, 0x3C, 0x38, 0xFA, 0x80, 0x81, 0x1E, 0x40, 0x18, 0xE0, 0xAF |
.byte 0xBD, 0x64, 0x57, 0xAE, 0x37, 0xFD, 0x04, 0xE4, 0x67, 0x95, 0xDA, 0xC9, 0x64, 0xB5, 0xB9, 0xD8 |
.byte 0xF5, 0xCB, 0x96, 0x2C, 0x17, 0xD3, 0x64, 0x12, 0x54, 0xE6, 0x30, 0x94, 0xFE, 0x11, 0x44, 0xBC |
.byte 0x76, 0x9B, 0x6A, 0xAE, 0x99, 0x6E, 0x92, 0x00, 0x03, 0x6D, 0xCA, 0x67, 0x22, 0x84, 0x40, 0x17 |
.byte 0x4F, 0xD7, 0x44, 0x67, 0xAB, 0xA8, 0x79, 0xFF, 0x8E, 0xAA, 0x94, 0x8D, 0xBC, 0xD8, 0x49, 0x32 |
.byte 0x74, 0xB4, 0xE0, 0x0D, 0x22, 0x73, 0x0E, 0x26, 0xE0, 0xD9, 0x8E, 0x02, 0x5D, 0xCE, 0x1A, 0xAC |
.byte 0xA6, 0x5E, 0x14, 0x51, 0x07, 0x8D, 0x51, 0x96, 0x38, 0xE5, 0x23, 0xF4, 0xBE, 0x6D, 0x26, 0x32 |
.byte 0x21, 0x07, 0x40, 0x44, 0x7A, 0x4E, 0x6A, 0x5A, 0x28, 0xF8, 0x5D, 0x85, 0xC7, 0x77, 0x32, 0x6E |
.byte 0xD5, 0x46, 0xC0, 0xDC, 0xD4, 0x11, 0x72, 0x0C, 0xF6, 0x96, 0x00, 0xB4, 0x03, 0x27, 0xE7, 0x25 |
.byte 0x2F, 0x28, 0x69, 0xA9, 0x76, 0xD3, 0x04, 0x9F, 0xCC, 0x61, 0x24, 0x94, 0xD9, 0x56, 0x02, 0xAE |
.byte 0x9C, 0xC2, 0x8B, 0x70, 0xD4, 0xFE, 0x7D, 0xCB, 0x94, 0x7D, 0x7F, 0x98, 0xA5, 0x67, 0xBD, 0xD4 |
.byte 0x8F, 0x26, 0x7E, 0x06, 0xFA, 0x83, 0xA5, 0xC7, 0xE5, 0xCA, 0x5B, 0xBE, 0x20, 0x5E, 0x6D, 0xBD |
.byte 0x21, 0xF8, 0x2E, 0xF5, 0xF6, 0xAB, 0xC0, 0x8B, 0x29, 0x40, 0x23, 0xCF, 0xA8, 0xE0, 0xA3, 0x37 |
.byte 0x07, 0x22, 0x3E, 0x02, 0xA5, 0xE3, 0xC9, 0x8A, 0xAD, 0x25, 0x49, 0xCE, 0x83, 0xB6, 0x8C, 0xA4 |
.byte 0xAE, 0xBA, 0x99, 0xA5, 0x65, 0x5A, 0x30, 0x8F, 0x9A, 0x54, 0x5E, 0x42, 0x35, 0x02, 0x7A, 0x3C |
.byte 0x24, 0xB8, 0x3E, 0xCA, 0x9C, 0x08, 0x55, 0x4A, 0x2D, 0x9E, 0x19, 0xB0, 0x54, 0xA5, 0x55, 0x02 |
.byte 0x5F, 0xEE, 0xA8, 0xC5, 0x49, 0xD8, 0x54, 0xE4, 0x2C, 0xB3, 0x27, 0x61, 0xB5, 0xA1, 0x9E, 0xDA |
.byte 0x5A, 0xDD, 0xA4, 0xF7, 0xE5, 0xFA, 0x41, 0x13, 0x98, 0x5B, 0xC3, 0xED, 0x00, 0x18, 0xF0, 0x60 |
.byte 0x07, 0x98, 0x25, 0x50, 0x71, 0x7A, 0x35, 0x9E, 0x2D, 0x5C, 0x00, 0xE3, 0xFE, 0x9E, 0xBD, 0x58 |
.byte 0x7C, 0x62, 0x50, 0x62, 0x5C, 0x92, 0x75, 0xF5, 0xED, 0x39, 0xE2, 0xEE, 0x51, 0xD2, 0x4E, 0x59 |
.byte 0x6B, 0x74, 0xAA, 0xDC, 0xEE, 0xDF, 0x7B, 0x1C, 0x3B, 0x7B, 0xFF, 0x3A, 0x1A, 0xBC, 0x93, 0x96 |
.byte 0x1E, 0xE3, 0xF8, 0x7B, 0x75, 0x6E, 0x71, 0x63, 0xA7, 0x53, 0x51, 0xF9, 0x26, 0x9F, 0x52, 0x92 |
.byte 0x13, 0xFC, 0x6F, 0x02, 0xDC, 0xEA, 0x1E, 0x17, 0x65, 0x1D, 0x52, 0x7F, 0xD9, 0xE5, 0x16, 0xF8 |
.byte 0xC8, 0x0F, 0x74, 0x3D, 0x7D, 0xE5, 0xA0, 0x24, 0x39, 0xF2, 0x1D, 0x5F, 0x91, 0x70, 0xF2, 0xA5 |
.byte 0x6C, 0x61, 0xA7, 0x48, 0x4B, 0xC5, 0x60, 0xB0, 0xE2, 0xB2, 0x30, 0xBC, 0x97, 0x46, 0xB4, 0x60 |
.byte 0x55, 0x29, 0x9E, 0xD3, 0x0E, 0x3F, 0xF7, 0x47, 0x31, 0x15, 0xA7, 0xC2, 0x85, 0x99, 0x67, 0xF2 |
.byte 0xFB, 0x0E, 0x3A, 0x46, 0xD4, 0x9B, 0xF7, 0xB6, 0x4E, 0x28, 0x73, 0xE6, 0x6E, 0x27, 0x46, 0xC4 |
.byte 0x51, 0xE4, 0x97, 0x5F, 0x23, 0x8F, 0xA7, 0x54, 0xA4, 0x4E, 0x17, 0x29, 0xE8, 0x7F, 0x1B, 0xE4 |
.byte 0x8E, 0x56, 0x2A, 0x62, 0xF2, 0x22, 0x19, 0x40, 0x4A, 0x8C, 0x26, 0xB9, 0xB4, 0x6D, 0x7D, 0x05 |
.byte 0x51, 0x14, 0x64, 0x75, 0xA4, 0x0C, 0xC9, 0x48, 0x5B, 0xE1, 0x72, 0x44, 0x60, 0x8D, 0x28, 0xEE |
.byte 0xE4, 0x53, 0x50, 0xD6, 0x75, 0x69, 0x16, 0xC0, 0xF6, 0x3D, 0x79, 0xAA, 0xAA, 0xF6, 0xAF, 0xFC |
.byte 0x0B, 0x14, 0x71, 0xAF, 0x21, 0x3B, 0xF8, 0x7C, 0x1C, 0x6A, 0xC0, 0x7C, 0xF8, 0xE8, 0x6A, 0xDC |
.byte 0x3B, 0xBB, 0xB3, 0xB1, 0x25, 0xCA, 0x71, 0x1B, 0x07, 0xEB, 0xC6, 0xB2, 0xE1, 0x76, 0xAE, 0xED |
.byte 0x8A, 0x1F, 0x9D, 0xAB, 0x5A, 0x95, 0x28, 0x76, 0x00, 0xE8, 0xF3, 0xF8, 0xD1, 0x5E, 0xD5, 0x0D |
.byte 0x1A, 0x88, 0xBE, 0x3F, 0x52, 0x30, 0x5B, 0x5A, 0x1B, 0x22, 0x0C, 0xFD, 0x98, 0xBB, 0xEB, 0x23 |
.byte 0xDB, 0x88, 0xCF, 0x36, 0x1E, 0xF7, 0xAD, 0x1E, 0xE0, 0xA0, 0x17, 0xB1, 0xFE, 0xEC, 0xBE, 0x18 |
.byte 0x74, 0x7D, 0x58, 0xC7, 0xAD, 0xB4, 0x21, 0xC9, 0xD6, 0x2E, 0xC7, 0x6E, 0xEA, 0xB2, 0x91, 0xC5 |
.byte 0x3B, 0x61, 0xFB, 0x59, 0x58, 0xA8, 0x78, 0x38, 0x49, 0x8F, 0xE9, 0x48, 0x7B, 0xA8, 0x61, 0xF0 |
.byte 0x25, 0xBA, 0xB7, 0xD3, 0x6E, 0xD9, 0x9D, 0x45, 0x08, 0x64, 0xB4, 0xF2, 0x16, 0x46, 0xB7, 0x51 |
.byte 0xA7, 0xB3, 0xAB, 0xFF, 0x5C, 0x23, 0x38, 0xA6, 0xB2, 0x22, 0xEE, 0x2E, 0xCA, 0x4F, 0x1E, 0xF0 |
.byte 0x09, 0xD5, 0xC4, 0x78, 0xAF, 0x62, 0xBD, 0xB7, 0xC6, 0x72, 0xA9, 0xDD, 0xB8, 0x61, 0x2F, 0x5F |
.byte 0x15, 0xDA, 0x5F, 0x71, 0xFE, 0x97, 0x17, 0xB1, 0xB9, 0x06, 0xDF, 0x84, 0x56, 0xFE, 0x75, 0x60 |
.byte 0xD3, 0x3A, 0xD8, 0x83, 0x9C, 0x96, 0x3A, 0x63, 0x08, 0xE3, 0x40, 0xC1, 0x45, 0x6F, 0x20, 0x5A |
.byte 0x4A, 0x7F, 0xCC, 0x49, 0x17, 0xE4, 0xFA, 0xD1, 0xEA, 0xDA, 0x56, 0x40, 0xD8, 0xCB, 0xA0, 0xAC |
.byte 0x06, 0x79, 0x2F, 0xA3, 0x10, 0x69, 0x06, 0x19, 0x4D, 0x47, 0xDA, 0x92, 0xB7, 0xFB, 0xED, 0x02 |
.byte 0x7B, 0xB9, 0x4B, 0x93, 0x9D, 0x45, 0x64, 0x88, 0x20, 0xBA, 0xC9, 0xF8, 0x86, 0x6A, 0xA5, 0x8D |
.byte 0xE4, 0xD5, 0x30, 0xF4, 0x3E, 0x37, 0x0E, 0x8C, 0x7E, 0xE9, 0x1F, 0x35, 0xE5, 0x0C, 0x37, 0x60 |
.byte 0xC6, 0x82, 0xF3, 0x64, 0xC8, 0x58, 0xED, 0xE9, 0x13, 0xB6, 0xE2, 0x99, 0x21, 0x87, 0x27, 0x05 |
.byte 0x5C, 0x57, 0xFA, 0x9B, 0x8E, 0x09, 0x28, 0x0C, 0xF2, 0x47, 0x42, 0xD7, 0x54, 0x7A, 0x38, 0x1B |
.byte 0xFD, 0x2C, 0x7F, 0xC5, 0x84, 0x6D, 0xAF, 0x98, 0x23, 0x91, 0x32, 0x45, 0x18, 0x59, 0x4A, 0x75 |
.byte 0xB0, 0x44, 0x11, 0x3F, 0x4D, 0x39, 0x4C, 0x40, 0x81, 0x8E, 0x18, 0xD5, 0x09, 0x51, 0xF1, 0x06 |
.byte 0x7D, 0x71, 0xCC, 0x02, 0xDE, 0x7B, 0x9A, 0x02, 0x0C, 0xCC, 0x47, 0x25, 0x26, 0x91, 0x9A, 0xD6 |
.byte 0xD6, 0xAB, 0x16, 0x24, 0xE4, 0x62, 0x65, 0x66, 0xF1, 0x7D, 0x3B, 0xFA, 0xCE, 0x2C, 0x00, 0x4C |
.byte 0x9D, 0xCC, 0x4F, 0x7C, 0x48, 0xEA, 0x7E, 0x54, 0xB7, 0xC5, 0x79, 0xDD, 0x57, 0x14, 0xB4, 0x2D |
.byte 0xC0, 0xCA, 0x51, 0xA4, 0x2D, 0xB6, 0x0A, 0x1E, 0x34, 0x46, 0x19, 0x03, 0x73, 0x1A, 0x4F, 0x11 |
.byte 0xE7, 0x9E, 0x8D, 0x2F, 0x88, 0x0B, 0x84, 0x3F, 0xD0, 0xFD, 0x1D, 0x27, 0x12, 0xD1, 0x55, 0xD2 |
.byte 0x9B, 0xA7, 0x77, 0xC8, 0x5E, 0x82, 0xE7, 0x92, 0xC8, 0x00, 0x95, 0x3C, 0x1A, 0xE5, 0x4D, 0x01 |
.byte 0x84, 0xDA, 0x31, 0x0D, 0xE6, 0xB5, 0x4D, 0xB7, 0xB2, 0x6A, 0xDE, 0xC5, 0x3B, 0x34, 0x97, 0xD6 |
.byte 0xDB, 0x0E, 0x9E, 0x39, 0x90, 0x85, 0xCC, 0x59, 0x86, 0x62, 0x95, 0xA0, 0x47, 0xE3, 0xA2, 0xCB |
.byte 0xBD, 0xD3, 0xD9, 0xA4, 0x88, 0x26, 0x5B, 0x3B, 0x90, 0x3A, 0x00, 0xCB, 0x6E, 0x97, 0xA1, 0x4A |
.byte 0xA6, 0x40, 0x84, 0x36, 0xC6, 0x50, 0x8F, 0x4D, 0xB3, 0x25, 0xED, 0xFA, 0x08, 0x90, 0xC6, 0xC6 |
.byte 0x64, 0x9F, 0x6A, 0xEC, 0xC5, 0xC5, 0x28, 0x55, 0x00, 0x29, 0x21, 0x6E, 0xC1, 0xC3, 0xB9, 0x67 |
.byte 0x04, 0x3D, 0x9D, 0xCA, 0x8E, 0x2D, 0x17, 0x41, 0x52, 0x05, 0x3C, 0x5A, 0x96, 0x02, 0x21, 0xFA |
.byte 0xA2, 0x8B, 0xE6, 0x68, 0x51, 0x0F, 0xBE, 0x51, 0x38, 0xDF, 0xC0, 0xF9, 0xA2, 0x79, 0x60, 0xA6 |
.byte 0xB7, 0xFE, 0x71, 0x45, 0x2B, 0x89, 0x86, 0x7E, 0x8E, 0xC3, 0xD9, 0x25, 0xC5, 0xFA, 0x1F, 0x68 |
.byte 0x85, 0x05, 0xD0, 0xD7, 0x15, 0x8E, 0x28, 0x4D, 0x6E, 0xE9, 0x47, 0x10, 0x63, 0xA8, 0xB7, 0x1A |
.byte 0xA6, 0x29, 0x60, 0xD2, 0xB2, 0xE7, 0x51, 0x41, 0xAA, 0x2A, 0x66, 0x70, 0x24, 0x85, 0xD8, 0xAA |
.byte 0x8B, 0xA9, 0x81, 0xA0, 0x37, 0xAA, 0xEE, 0xA6, 0x94, 0x35, 0xB7, 0xF7, 0xDE, 0x6E, 0x12, 0x84 |
.byte 0x97, 0x72, 0x57, 0x4A, 0x5A, 0xA8, 0x8B, 0x04, 0xD3, 0xF1, 0x74, 0xF8, 0x77, 0x4D, 0xA3, 0x02 |
.byte 0xF6, 0x25, 0xA3, 0x2E, 0xCF, 0x91, 0xD4, 0x64, 0xC7, 0x8B, 0x5C, 0xA5, 0xFA, 0x6E, 0x2A, 0x91 |
.byte 0xE1, 0x82, 0xDB, 0x3B, 0x2B, 0x67, 0x40, 0xFE, 0x59, 0xB4, 0xF6, 0xD0, 0x01, 0x9A, 0xD3, 0xF8 |
.byte 0xBF, 0x76, 0x26, 0x8E, 0x08, 0xFA, 0xF3, 0xCF, 0x86, 0x4F, 0x75, 0x80, 0xBE, 0x9F, 0x11, 0x9F |
.byte 0x22, 0xED, 0xDB, 0x4D, 0x55, 0x1B, 0x4B, 0xAE, 0xCF, 0x42, 0x7E, 0xD1, 0xDC, 0x51, 0xC9, 0x9B |
.byte 0xC8, 0xF0, 0x2A, 0xD0, 0xEA, 0x1E, 0xA0, 0x71, 0x6D, 0x15, 0xF1, 0x2B, 0xB5, 0x03, 0xCB, 0xD7 |
.byte 0xF0, 0xA6, 0x24, 0x46, 0xC1, 0x70, 0xF4, 0x91, 0xB3, 0x73, 0x62, 0x90, 0xC5, 0x2C, 0x2C, 0x8D |
.byte 0x1C, 0x57, 0x5E, 0x07, 0x75, 0xFE, 0x78, 0xE3, 0x14, 0x69, 0x0E, 0xC9, 0x6C, 0xD9, 0xA0, 0x5D |
.byte 0x80, 0xC5, 0xA3, 0x41, 0x36, 0x98, 0xD2, 0xE9, 0x0B, 0x35, 0x79, 0xD0, 0x62, 0xA6, 0x5D, 0x7E |
.byte 0xFD, 0xBC, 0x86, 0x73, 0xBA, 0xFE, 0x56, 0xCE, 0x68, 0x64, 0x98, 0xD5, 0x3E, 0x39, 0x33, 0xBF |
.byte 0xFE, 0xD7, 0x00, 0x34, 0x6F, 0xD3, 0x1E, 0x7A, 0x09, 0x98, 0x4B, 0x6B, 0x3E, 0xA8, 0xEA, 0x3C |
.byte 0x64, 0x70, 0xAF, 0x1F, 0x6E, 0x05, 0xEE, 0xD7, 0x6A, 0x86, 0xAC, 0xA9, 0xBF, 0xDF, 0x68, 0xBE |
.byte 0xB7, 0x68, 0xF3, 0x26, 0x3C, 0x11, 0xA1, 0x45, 0xAA, 0xEC, 0xB0, 0xE9, 0x95, 0x9B, 0x25, 0xF9 |
.byte 0x0B, 0xD4, 0x19, 0x7A, 0xDA, 0x07, 0x51, 0x44, 0x8E, 0xFE, 0xED, 0x4E, 0xDE, 0x55, 0x0D, 0x95 |
.byte 0xBE, 0x00, 0xBB, 0xFB, 0x12, 0x5D, 0x40, 0xBC, 0x49, 0xF1, 0xA6, 0xDE, 0x8C, 0xCB, 0xD8, 0x98 |
.byte 0xA0, 0xF1, 0x12, 0x7A, 0xF9, 0x63, 0xBE, 0x88, 0x61, 0xAC, 0xD6, 0x40, 0x01, 0xE3, 0xD5, 0xC0 |
.byte 0xE4, 0x91, 0xBB, 0xF6, 0xEE, 0xFC, 0xB3, 0x37, 0xED, 0x59, 0x16, 0x7A, 0x25, 0xEE, 0x12, 0xC5 |
.byte 0xE0, 0x24, 0x3F, 0xD9, 0x88, 0xFE, 0x62, 0xEA, 0xAA, 0x38, 0x2A, 0xAC, 0x1C, 0x00, 0x6C, 0x00 |
.byte 0x91, 0x27, 0xF6, 0x7F, 0x24, 0xAA, 0xB7, 0x12, 0x04, 0xCD, 0x8C, 0x29, 0xBB, 0x9F, 0xEE, 0x9C |
.byte 0xC4, 0x2E, 0x76, 0x4D, 0x2C, 0xD8, 0x37, 0xD6, 0x10, 0x62, 0x82, 0x2C, 0x63, 0xEF, 0x2C, 0xF4 |
.byte 0x17, 0x23, 0x74, 0x3B, 0xCE, 0x2C, 0x4D, 0xD2, 0xF9, 0xDA, 0xFC, 0xB5, 0x79, 0xEA, 0x51, 0x3E |
.byte 0x19, 0xC7, 0x8B, 0x45, 0x9F, 0xC3, 0x1C, 0xB0, 0x26, 0x9F, 0xDD, 0x89, 0x8F, 0x0A, 0x7E, 0xA6 |
.byte 0x2D, 0xF2, 0xE1, 0xFC, 0x1E, 0x2F, 0xCE, 0x18, 0x09, 0xCB, 0xCD, 0x83, 0xB6, 0x1F, 0xC1, 0xCF |
.byte 0xE7, 0x4D, 0x15, 0x87, 0x10, 0x31, 0x37, 0x37, 0xD1, 0x14, 0xC0, 0x60, 0x1F, 0x3E, 0x06, 0x4C |
.byte 0x31, 0xE8, 0x49, 0x50, 0x17, 0x18, 0x68, 0x21, 0xE3, 0x36, 0xA5, 0x99, 0x55, 0x66, 0x68, 0x3D |
.byte 0xB4, 0x7D, 0xC4, 0xC5, 0xAF, 0xFB, 0xFC, 0x80, 0x10, 0xBC, 0xE0, 0x2F, 0xFB, 0xE7, 0x7C, 0x2C |
.byte 0xD0, 0xC5, 0x7D, 0xE7, 0xDD, 0xE5, 0x09, 0xC0, 0x1C, 0xAE, 0x5A, 0x72, 0x15, 0xC2, 0xAF, 0xC9 |
.byte 0x3F, 0x73, 0x8E, 0xEF, 0x6F, 0x8B, 0x6F, 0x80, 0x47, 0x50, 0xAF, 0x43, 0x37, 0x2C, 0x6F, 0x07 |
.byte 0xF2, 0xED, 0xEF, 0xD0, 0xD2, 0xF9, 0x91, 0xEF, 0xA7, 0xEB, 0x61, 0xBD, 0xAD, 0x10, 0x87, 0xED |
.byte 0x84, 0x16, 0xDC, 0xF3, 0xA1, 0x4C, 0x73, 0xE8, 0x9C, 0x23, 0x2B, 0xD4, 0x4F, 0x9B, 0xDC, 0x42 |
.byte 0x88, 0xCB, 0x12, 0x5B, 0xC5, 0xA3, 0x4B, 0x6D, 0x8E, 0xAC, 0x2A, 0x3C, 0xBD, 0xB1, 0x29, 0x41 |
.byte 0xC7, 0x06, 0x34, 0x68, 0x52, 0xA8, 0x51, 0xEE, 0xCB, 0x7D, 0xC2, 0x1B, 0x19, 0x9E, 0x5D, 0xA2 |
.byte 0x6A, 0x70, 0xFE, 0x2F, 0x13, 0x49, 0x9C, 0xA2, 0xF5, 0xC7, 0xDF, 0xB2, 0x79, 0x08, 0xF3, 0x41 |
.byte 0x0E, 0x28, 0xA9, 0x61, 0xD0, 0xFB, 0x4F, 0x9B, 0x79, 0x12, 0xB7, 0x92, 0xB1, 0x15, 0x35, 0x1C |
.byte 0x85, 0x33, 0x4C, 0x99, 0x7C, 0xE9, 0x3B, 0x72, 0xB1, 0x1A, 0x24, 0x2A, 0x23, 0x18, 0x6B, 0x32 |
.byte 0x41, 0x15, 0x93, 0x11, 0x10, 0xE3, 0xAD, 0x8A, 0xF6, 0x64, 0x1C, 0xA8, 0x7A, 0x51, 0xC4, 0xFF |
.byte 0x85, 0x11, 0x98, 0x02, 0xFB, 0xD4, 0x74, 0xAC, 0xEF, 0x99, 0xD6, 0x12, 0xB2, 0x41, 0x45, 0xF3 |
.byte 0x56, 0xD8, 0x04, 0x67, 0xBC, 0xB2, 0xF1, 0xB3, 0x17, 0x0E, 0x5B, 0x91, 0x60, 0x20, 0x90, 0xE5 |
.byte 0x31, 0x29, 0xE7, 0x2C, 0xFD, 0x5C, 0xD9, 0xEC, 0xF5, 0xAF, 0xFF, 0xA7, 0xF0, 0x44, 0x9A, 0x47 |
.byte 0x1D, 0x9F, 0xAF, 0xD9, 0x52, 0xA0, 0x8C, 0x69, 0xAF, 0xE8, 0xFB, 0x0F, 0x08, 0x8C, 0xF5, 0x3A |
.byte 0xB5, 0xDD, 0x67, 0xB3, 0x39, 0x40, 0x9F, 0x2E, 0xEF, 0x9E, 0xD6, 0xE0, 0xE3, 0x71, 0x28, 0x00 |
.byte 0x11, 0xD7, 0xDA, 0x63, 0x78, 0x67, 0xCD, 0x27, 0x4F, 0xC9, 0x36, 0x58, 0x55, 0x2C, 0x92, 0x0B |
.byte 0x09, 0xF9, 0xBE, 0x42, 0x39, 0x5E, 0x71, 0x29, 0xFD, 0x48, 0x09, 0xE0, 0xB9, 0x31, 0xE0, 0xCA |
.byte 0x09, 0xBB, 0x2E, 0x81, 0x22, 0xFC, 0xA8, 0x72, 0xC5, 0xDF, 0xCA, 0x1A, 0x0B, 0x5C, 0x25, 0x14 |
.byte 0x56, 0xE4, 0x57, 0x90, 0x42, 0xC9, 0xB9, 0x3F, 0x11, 0xC3, 0x1F, 0xCA, 0xF5, 0x00, 0x95, 0xFE |
.byte 0xBC, 0xC4, 0x7F, 0xDF, 0xC0, 0x27, 0x51, 0x85, 0x07, 0x1B, 0xA0, 0x12, 0x78, 0xC6, 0x27, 0xCE |
.byte 0xAA, 0x7E, 0x5E, 0xEC, 0x48, 0x18, 0x2C, 0x59, 0xDB, 0x4C, 0x24, 0xD0, 0x4D, 0xBA, 0xCF, 0x09 |
.byte 0x7E, 0x4E, 0xE8, 0x3E, 0x76, 0x3A, 0xC4, 0x7E, 0x55, 0x64, 0x90, 0xCE, 0x2A, 0xB8, 0x9C, 0xD4 |
.byte 0x37, 0xFB, 0xC1, 0x7F, 0x14, 0xEE, 0xD8, 0xEF, 0x3A, 0xFD, 0xC0, 0x88, 0xB7, 0x90, 0x92, 0x36 |
.byte 0xDE, 0x7A, 0x75, 0x55, 0xB5, 0x39, 0xD3, 0x0A, 0x9E, 0x64, 0xD9, 0xC8, 0x1C, 0x76, 0x9D, 0x53 |
.byte 0x71, 0x5F, 0xD2, 0x86, 0x4D, 0xAB, 0x76, 0x88, 0xA9, 0x36, 0x11, 0x61, 0xC6, 0xA3, 0x97, 0xA5 |
.byte 0x1E, 0x0D, 0xFB, 0xD3, 0x46, 0xCF, 0xDE, 0xE5, 0x34, 0xB7, 0xAD, 0x50, 0x2D, 0x4B, 0xA4, 0x9F |
.byte 0xAA, 0x77, 0x25, 0xF8, 0x22, 0x9B, 0x80, 0xCC, 0xD2, 0x91, 0x2D, 0x99, 0x35, 0xC5, 0x3F, 0x53 |
.byte 0xD2, 0x3B, 0x26, 0x19, 0x0A, 0x04, 0xFE, 0x3E, 0xBB, 0xAC, 0x8F, 0xE9, 0xF7, 0x33, 0x88, 0xA1 |
.byte 0xAA, 0xAE, 0x9A, 0xCD, 0x49, 0x1A, 0x99, 0x1C, 0xAC, 0xC6, 0xB5, 0xE1, 0x8B, 0xF5, 0x34, 0x5E |
.byte 0x30, 0x5B, 0x77, 0x3B, 0x5F, 0x76, 0x79, 0x1B, 0x22, 0x09, 0x04, 0x19, 0x3C, 0x8D, 0xBB, 0xE7 |
.byte 0x3B, 0x55, 0xB5, 0x85, 0x70, 0x4E, 0xA1, 0x1D, 0x15, 0x57, 0xFE, 0xA1, 0x4C, 0x33, 0xFF, 0x7C |
.byte 0x8F, 0x77, 0xB7, 0xEF, 0xED, 0x31, 0x0A, 0x0F, 0x3A, 0x0F, 0x29, 0x77, 0x9D, 0xE4, 0x5F, 0xD8 |
.byte 0x39, 0x14, 0x5E, 0xAA, 0x62, 0xFF, 0xC7, 0x77, 0x56, 0xC5, 0x18, 0xA2, 0xF9, 0x18, 0x1F, 0x88 |
.byte 0x8F, 0xD6, 0x78, 0x7C, 0x07, 0x82, 0x8C, 0x42, 0x92, 0xB5, 0xBA, 0x30, 0x99, 0x19, 0x09, 0xD3 |
.byte 0x2D, 0x67, 0x7D, 0x90, 0x66, 0x44, 0x08, 0xBD, 0x0A, 0x21, 0x60, 0x04, 0x39, 0x7F, 0x8D, 0xC8 |
.byte 0x56, 0x05, 0x45, 0x5D, 0x88, 0xD1, 0xA0, 0x1B, 0x86, 0x5A, 0x4B, 0x1F, 0x74, 0x54, 0xF3, 0xA1 |
.byte 0xBB, 0x70, 0x31, 0x22, 0xB4, 0x3A, 0xE0, 0xBF, 0x5B, 0x40, 0xC3, 0x94, 0xC0, 0x50, 0x5D, 0x16 |
.byte 0x55, 0xA2, 0x74, 0xDD, 0x74, 0x15, 0xF8, 0xFA, 0x6F, 0x44, 0x1A, 0xE3, 0x98, 0x0D, 0x85, 0x54 |
.byte 0x7D, 0xB7, 0x77, 0x32, 0xF1, 0x58, 0xF1, 0x4C, 0x98, 0xB4, 0xE1, 0x59, 0x05, 0x3F, 0x70, 0x5A |
.byte 0xE1, 0xE4, 0x38, 0x55, 0xF9, 0x31, 0x50, 0x69, 0x75, 0x6A, 0x4D, 0x0E, 0x77, 0xD2, 0x63, 0xF4 |
.byte 0x89, 0xDA, 0x26, 0x7B, 0x32, 0x18, 0xC8, 0xCB, 0xCC, 0xA9, 0x25, 0xD1, 0xE8, 0x95, 0x2C, 0xCA |
.byte 0x79, 0x65, 0x20, 0x73, 0x96, 0x70, 0xDC, 0x0C, 0xDA, 0x2A, 0x1B, 0x51, 0xFC, 0x7E, 0x46, 0x86 |
.byte 0x59, 0x6D, 0x01, 0x8C, 0x85, 0xC9, 0x57, 0x52, 0x73, 0x7D, 0x24, 0x5C, 0x12, 0x51, 0x26, 0x8C |
.byte 0xB6, 0x46, 0xFF, 0x4D, 0xB7, 0xDC, 0x5A, 0x91, 0x06, 0x75, 0xE3, 0x03, 0xF4, 0x2A, 0x89, 0x4D |
.byte 0x97, 0x8B, 0xD9, 0x1D, 0x54, 0x31, 0x70, 0xC8, 0xAE, 0x95, 0x24, 0xC0, 0xE6, 0x4B, 0x4C, 0x9D |
.byte 0x91, 0x4C, 0xEB, 0x49, 0x29, 0x45, 0xDA, 0x2F, 0xBB, 0xBE, 0x33, 0xAF, 0xE8, 0xBC, 0xFC, 0x80 |
.byte 0x48, 0xD6, 0x9E, 0x9D, 0x07, 0x0F, 0x65, 0xB5, 0xA4, 0x89, 0x75, 0x8B, 0xD4, 0xC2, 0x28, 0x66 |
.byte 0x0E, 0x13, 0xAF, 0x38, 0x59, 0x8A, 0x67, 0x14, 0x49, 0x9B, 0xC4, 0x32, 0x57, 0xC0, 0xB3, 0x9F |
.byte 0x97, 0x51, 0x3C, 0x9E, 0x60, 0xA2, 0x53, 0x05, 0x2C, 0xC9, 0x90, 0x01, 0x8C, 0xB8, 0x68, 0x9B |
.byte 0xCC, 0x18, 0xD3, 0x26, 0xA3, 0x3A, 0x3A, 0xEC, 0xD5, 0xFF, 0x1E, 0x2D, 0xC0, 0xD1, 0xCD, 0x57 |
.byte 0x23, 0x0A, 0xF5, 0x84, 0xAD, 0x49, 0x89, 0xD9, 0x12, 0x19, 0xDA, 0x9E, 0xD2, 0x42, 0x39, 0x9E |
.byte 0x5B, 0x0C, 0xC4, 0xFE, 0x47, 0xFF, 0xEA, 0x1D, 0xFE, 0x09, 0x4B, 0xBE, 0xDB, 0x19, 0x15, 0xFE |
.byte 0x24, 0x0A, 0x83, 0xD1, 0x54, 0x0C, 0xAA, 0x66, 0x26, 0x85, 0x05, 0xF8, 0xC8, 0x3F, 0x96, 0x23 |
.byte 0x4C, 0x5B, 0x21, 0x93, 0x5A, 0x0C, 0xB1, 0x58, 0x15, 0xFD, 0x17, 0xF1, 0x16, 0x2C, 0xF0, 0x3A |
.byte 0x37, 0x73, 0x0C, 0x8B, 0x7F, 0xB6, 0xF2, 0xA6, 0x3C, 0xF8, 0x9E, 0x05, 0x37, 0x34, 0x29, 0x83 |
.byte 0x8F, 0x4A, 0x17, 0xEA, 0x57, 0xC8, 0x42, 0x6D, 0xC5, 0x5A, 0x5E, 0xDC, 0x87, 0x4E, 0x17, 0xBF |
.byte 0xC1, 0x23, 0x4B, 0x41, 0xDA, 0x3D, 0xE7, 0x16, 0x35, 0x85, 0x1B, 0x6D, 0xBA, 0x45, 0xF0, 0x4A |
.byte 0x8F, 0x07, 0x34, 0xE7, 0xD0, 0x77, 0x54, 0x96, 0xD1, 0xB2, 0x72, 0x58, 0x01, 0x89, 0x17, 0xC2 |
.byte 0xAC, 0x62, 0x04, 0x86, 0xA0, 0xEB, 0x9D, 0xD5, 0x71, 0xB9, 0x42, 0x2C, 0xFE, 0x33, 0x76, 0x8E |
.byte 0x3A, 0xAA, 0x75, 0x0B, 0x21, 0xCA, 0xA1, 0xF2, 0x7C, 0x13, 0x4A, 0x7D, 0x9D, 0x62, 0x40, 0x4A |
.byte 0xC4, 0x44, 0xD1, 0x64, 0x30, 0x6E, 0x3A, 0xA2, 0x28, 0x7D, 0xCE, 0x26, 0xB0, 0x44, 0xB4, 0xEB |
.byte 0xEE, 0x2A, 0xF6, 0x10, 0xF4, 0x97, 0x02, 0x71, 0xAB, 0x4D, 0xEF, 0x49, 0xAF, 0x30, 0x93, 0x74 |
.byte 0x75, 0x65, 0xD8, 0xA5, 0xD3, 0x13, 0x48, 0xFB, 0x90, 0x16, 0x22, 0x41, 0x5A, 0xD7, 0x2C, 0x49 |
.byte 0x01, 0x23, 0x59, 0xF6, 0xBB, 0x5C, 0x68, 0x67, 0xA9, 0x57, 0xB0, 0x59, 0x88, 0x44, 0xCD, 0xFD |
.byte 0xA9, 0xA6, 0xA2, 0x7D, 0xB9, 0xEB, 0x79, 0x49, 0x01, 0x9B, 0x8B, 0x5C, 0x72, 0xB7, 0xA6, 0x74 |
.byte 0xDA, 0x00, 0x6A, 0x95, 0x5C, 0xD2, 0xFC, 0x06, 0x2A, 0xAD, 0x5F, 0xB2, 0xF2, 0x2D, 0xAF, 0x9B |
.byte 0xD3, 0x52, 0x19, 0x8D, 0x3E, 0x92, 0xD7, 0x3F, 0x2D, 0x62, 0x9C, 0x9F, 0x19, 0x42, 0x13, 0xF4 |
.byte 0x42, 0x7E, 0x8A, 0x9F, 0x51, 0x87, 0xA6, 0x7B, 0x34, 0x06, 0x2E, 0x27, 0x33, 0xDE, 0xC2, 0x07 |
.byte 0x31, 0xDB, 0x94, 0x6F, 0x6D, 0x6B, 0xAF, 0x9B, 0xCD, 0x4B, 0x3B, 0xE7, 0x8D, 0x4E, 0xDB, 0xD0 |
.byte 0xCD, 0x65, 0x70, 0x1E, 0xED, 0x16, 0x9A, 0x22, 0x1C, 0xC8, 0x49, 0x50, 0xA7, 0x0B, 0x57, 0xD8 |
.byte 0xE7, 0xEB, 0x48, 0x55, 0x57, 0xF7, 0xF0, 0x24, 0x42, 0x2B, 0x0B, 0xD0, 0x7A, 0xE7, 0xA0, 0x47 |
.byte 0x4D, 0x11, 0x66, 0x3A, 0x27, 0x00, 0x5C, 0x44, 0xC8, 0xA5, 0x94, 0x6F, 0xB1, 0xEB, 0x48, 0x99 |
.byte 0xD7, 0x90, 0xEE, 0x2E, 0x87, 0xDF, 0x53, 0xCA, 0x0B, 0x5F, 0x9A, 0x86, 0x46, 0x3B, 0xCD, 0x93 |
.byte 0x4C, 0x34, 0xCE, 0x74, 0x34, 0x2A, 0xB8, 0xFC, 0xD0, 0x4C, 0x6C, 0x81, 0x38, 0xB5, 0x1A, 0x0F |
.byte 0x45, 0x09, 0x3E, 0xCD, 0xE8, 0x92, 0x97, 0xF4, 0xF1, 0x32, 0x7A, 0x38, 0x6E, 0x48, 0xCC, 0xBB |
.byte 0x7C, 0x9A, 0x2F, 0xB0, 0xC4, 0xE7, 0xAD, 0x94, 0x34, 0x1A, 0x16, 0x6C, 0xCF, 0x30, 0x7C, 0x15 |
.byte 0x39, 0xBB, 0xE2, 0x22, 0x4D, 0x7A, 0x16, 0x3F, 0xAD, 0x90, 0x77, 0x1B, 0xD8, 0x43, 0xD6, 0x54 |
.byte 0xDD, 0x06, 0x05, 0xA2, 0xEE, 0xB2, 0x37, 0x22, 0xCC, 0x4D, 0x8F, 0x9C, 0x7E, 0x0C, 0xB1, 0xB8 |
.byte 0xC8, 0x94, 0xDA, 0x15, 0x0E, 0xF1, 0x55, 0xBC, 0x81, 0xCC, 0xD7, 0x5A, 0x10, 0xAE, 0xAF, 0xEE |
.byte 0xB4, 0xB4, 0x91, 0xA3, 0x67, 0xC9, 0xC5, 0x34, 0x17, 0x55, 0xD0, 0x95, 0x62, 0x81, 0x4E, 0x2A |
.byte 0x15, 0x28, 0x40, 0x24, 0x19, 0x95, 0xE0, 0x9B, 0x62, 0xB8, 0xF6, 0x73, 0x66, 0xA5, 0x61, 0x1B |
.byte 0x5A, 0xF3, 0xBE, 0xC2, 0xBC, 0x84, 0xF7, 0xD3, 0xDA, 0xC7, 0x68, 0x3C, 0x49, 0xB6, 0x67, 0x5E |
.byte 0xDF, 0xA7, 0x83, 0xF9, 0x3D, 0x64, 0x95, 0x9F, 0x1C, 0x8B, 0x12, 0x83, 0x31, 0x74, 0x9F, 0x8C |
.byte 0x67, 0x5E, 0x4F, 0x23, 0xE3, 0x46, 0xF7, 0xBD, 0x0D, 0x5F, 0xFA, 0x57, 0x16, 0x62, 0xB6, 0xF6 |
.byte 0x09, 0x39, 0xF0, 0x47, 0x9D, 0x85, 0xE7, 0xBA, 0x11, 0xF9, 0x3D, 0x43, 0x6E, 0xDC, 0xCF, 0xD6 |
.byte 0x3A, 0x1F, 0xFA, 0x1D, 0x65, 0xF1, 0xDB, 0x73, 0x51, 0xD6, 0xCA, 0x68, 0x38, 0x80, 0x5E, 0x41 |
.byte 0xBA, 0x4F, 0x89, 0x57, 0xD4, 0x70, 0x11, 0xE5, 0x69, 0x4F, 0x28, 0xD8, 0x2C, 0xF8, 0xAF, 0x66 |
.byte 0x18, 0xA9, 0x84, 0x7D, 0x9B, 0x60, 0xF1, 0xEC, 0x36, 0xBB, 0x55, 0x6E, 0x3C, 0xB4, 0xB0, 0xF6 |
.byte 0x03, 0x39, 0x4E, 0xD7, 0xA9, 0x60, 0xBD, 0x13, 0xAF, 0xE6, 0xEB, 0xDB, 0xDF, 0x9B, 0x42, 0xF7 |
.byte 0x44, 0xC7, 0x75, 0xDF, 0x27, 0x66, 0xCC, 0x5D, 0x22, 0x22, 0xCC, 0x5E, 0xD6, 0x7C, 0x55, 0xD9 |
.byte 0xB5, 0xA4, 0xB1, 0x5F, 0x04, 0x6F, 0x72, 0xB4, 0x56, 0x5E, 0x90, 0x35, 0xF9, 0xD3, 0x2D, 0x3E |
.byte 0x9B, 0xA3, 0x1D, 0xC2, 0x09, 0xEA, 0x20, 0x2C, 0x0C, 0xED, 0x8B, 0xE3, 0x69, 0xE0, 0xBD, 0x1F |
.byte 0x85, 0x6E, 0x7E, 0x89, 0xDE, 0xF0, 0x3E, 0x34, 0x4E, 0xCF, 0x6A, 0x48, 0xA2, 0x97, 0x86, 0x3D |
.byte 0x3A, 0xA4, 0x00, 0x44, 0x8F, 0x21, 0x71, 0x9B, 0x0E, 0xFC, 0x7F, 0x77, 0xDD, 0x3C, 0x97, 0x62 |
.byte 0xAB, 0x15, 0xEC, 0x89, 0x06, 0x2A, 0xBD, 0x55, 0xF9, 0x27, 0x9D, 0x9C, 0xBF, 0x23, 0xDA, 0xFA |
.byte 0xC7, 0xDA, 0x3F, 0x56, 0xFB, 0xB0, 0xF2, 0x09, 0xAC, 0x72, 0x81, 0x89, 0xAE, 0x18, 0xEC, 0x59 |
.byte 0x2D, 0xD8, 0xE3, 0x33, 0x03, 0xA0, 0x89, 0xFD, 0xC8, 0x26, 0x99, 0x88, 0x4A, 0x74, 0x82, 0x12 |
.byte 0x4E, 0xC2, 0x68, 0x4A, 0x72, 0x5B, 0x53, 0x1E, 0xCE, 0xD4, 0xA8, 0x7C, 0xED, 0x94, 0xD6, 0x1A |
.byte 0x6D, 0xB9, 0x4E, 0x71, 0x5A, 0xD7, 0x6E, 0x22, 0xFE, 0x08, 0xAB, 0x48, 0x7C, 0x2E, 0x5A, 0xCA |
.byte 0xF0, 0xC3, 0x14, 0x62, 0x1F, 0x68, 0x81, 0xED, 0x3D, 0x29, 0x69, 0x2A, 0xBE, 0x40, 0x45, 0x2C |
.byte 0xF9, 0x94, 0x9D, 0x53, 0x6C, 0x0B, 0x76, 0x6A, 0x13, 0x21, 0xB3, 0x90, 0x50, 0x0D, 0x5A, 0x40 |
.byte 0xD1, 0x6F, 0xA2, 0xF0, 0xD8, 0x23, 0xDD, 0x15, 0x4D, 0x47, 0x40, 0x0C, 0x87, 0x85, 0x38, 0x81 |
.byte 0x1A, 0xD5, 0xD4, 0x86, 0xE1, 0x4B, 0xF1, 0xF4, 0x6D, 0xA4, 0x85, 0xBD, 0xB2, 0xE0, 0xFD, 0x83 |
.byte 0x4F, 0xA0, 0x73, 0x28, 0xC3, 0x51, 0x3D, 0x11, 0x98, 0x7E, 0x1D, 0x20, 0x04, 0x55, 0xA1, 0x1E |
.byte 0x2B, 0x76, 0xA5, 0x0C, 0xC1, 0x96, 0x01, 0x2E, 0x3B, 0x86, 0xEC, 0xED, 0x66, 0xE9, 0x70, 0xB6 |
.byte 0x8A, 0xE4, 0xDE, 0x4E, 0x35, 0x1C, 0x5F, 0xCE, 0x9A, 0x7C, 0xEE, 0x9E, 0xD2, 0x8F, 0xBC, 0xFD |
.byte 0x05, 0x62, 0x09, 0xC7, 0xF8, 0x0A, 0xF6, 0x34, 0x90, 0xE2, 0x21, 0xF7, 0xCC, 0x92, 0xAD, 0x56 |
.byte 0x77, 0x8B, 0xA4, 0xAC, 0xA7, 0x03, 0x7A, 0x42, 0x80, 0x69, 0xE0, 0x52, 0xF8, 0x9D, 0x50, 0xFE |
.byte 0xFF, 0x59, 0xC5, 0xF8, 0x64, 0xBB, 0x2C, 0xF5, 0x9E, 0x4E, 0xEC, 0x6A, 0xE0, 0x99, 0xC1, 0x57 |
.byte 0x25, 0x65, 0x04, 0xCD, 0x69, 0x7F, 0x0F, 0xEA, 0xE8, 0xEF, 0x3D, 0xE1, 0x8D, 0x8D, 0xE0, 0x8C |
.byte 0xE6, 0xA5, 0x85, 0x4B, 0x61, 0xB1, 0x40, 0xFF, 0xFF, 0x2C, 0x6A, 0xE0, 0xC6, 0x2B, 0x38, 0xEB |
.byte 0x91, 0x3C, 0xB8, 0xFA, 0xBC, 0xC7, 0xE5, 0xA4, 0xB7, 0x22, 0x86, 0x44, 0xAF, 0x66, 0xD1, 0x96 |
.byte 0x0C, 0x56, 0xE1, 0x6E, 0x08, 0x21, 0x6D, 0x08, 0x4E, 0xD8, 0xE8, 0x14, 0x03, 0x20, 0x00, 0x94 |
.byte 0x5D, 0xB8, 0x8F, 0x19, 0x80, 0x75, 0xBE, 0x38, 0x97, 0x45, 0x7D, 0x46, 0xAC, 0x4F, 0xDD, 0xB8 |
.byte 0xA5, 0xBE, 0x26, 0xAE, 0xE0, 0x94, 0xB6, 0x2F, 0x6C, 0x9F, 0x43, 0x70, 0xC0, 0x44, 0x05, 0x1D |
.byte 0xFD, 0x95, 0x37, 0x7E, 0x0A, 0xF6, 0xB6, 0xA1, 0x3B, 0x33, 0xE8, 0xE7, 0x82, 0xC5, 0xA0, 0x28 |
.byte 0x83, 0xC7, 0xD7, 0x64, 0x5C, 0x8D, 0x93, 0xC9, 0x2C, 0xD7, 0x3A, 0xED, 0x1B, 0x3F, 0x0A, 0x19 |
.byte 0xD4, 0x42, 0x97, 0xDF, 0x38, 0x4D, 0x80, 0x74, 0x81, 0x69, 0x5C, 0x04, 0x2E, 0xFD, 0x2D, 0xB2 |
.byte 0xC4, 0x04, 0x16, 0x21, 0x92, 0xAA, 0xEB, 0xBF, 0x81, 0x25, 0xAC, 0x9D, 0x64, 0xB6, 0xB6, 0x39 |
.byte 0xF9, 0x4E, 0x19, 0x31, 0x9B, 0x99, 0xA6, 0x1D, 0x03, 0x02, 0x21, 0x31, 0x00, 0x4E, 0xE4, 0xC5 |
.byte 0x52, 0xFA, 0xE6, 0xE4, 0xA5, 0xD1, 0xA3, 0x26, 0xF6, 0x4F, 0xC4, 0x5B, 0x06, 0x7B, 0x95, 0x00 |
.byte 0xC9, 0xAE, 0x31, 0x65, 0x48, 0xD8, 0x82, 0x4B, 0xDB, 0xA3, 0x7D, 0xDB, 0xF2, 0x61, 0xA0, 0x45 |
.byte 0x5C, 0x86, 0x2A, 0x01, 0x58, 0xCD, 0x28, 0x4F, 0x1D, 0xEC, 0xAA, 0x24, 0x68, 0x40, 0x24, 0x31 |
.byte 0xEE, 0x56, 0x96, 0x36, 0x2E, 0x19, 0x82, 0x0A, 0xBD, 0xFF, 0xE5, 0xAF, 0x60, 0x85, 0xF4, 0xBC |
.byte 0x0C, 0x1E, 0xBD, 0x64, 0xEC, 0xE6, 0xB4, 0x0A, 0xD2, 0x5E, 0x2F, 0x3B, 0x9E, 0x53, 0x6C, 0x8D |
.byte 0xAA, 0x03, 0xC4, 0xD9, 0x1C, 0x46, 0xE3, 0xDA, 0x45, 0xC9, 0x89, 0xA6, 0x4E, 0x7E, 0x62, 0x5B |
.byte 0x9D, 0x20, 0xC0, 0x8A, 0x06, 0x74, 0x94, 0xD9, 0xD3, 0xC4, 0x14, 0x72, 0x18, 0x81, 0xFF, 0xC2 |
.byte 0x85, 0xC3, 0x9C, 0xA2, 0x0A, 0x80, 0x7C, 0x4F, 0x49, 0x06, 0xF6, 0x98, 0x84, 0x58, 0xF3, 0x22 |
.byte 0x79, 0xB4, 0xAC, 0x80, 0x28, 0x41, 0x5A, 0xFC, 0x05, 0x6F, 0x6E, 0x1D, 0xF0, 0x6E, 0xE0, 0x76 |
.byte 0x32, 0x7C, 0x18, 0x3C, 0xFC, 0x95, 0x8C, 0x46, 0x9B, 0x82, 0xDE, 0x20, 0xDB, 0xD2, 0x42, 0x55 |
.byte 0x86, 0xEE, 0xD6, 0xAE, 0x2F, 0x30, 0xAB, 0x34, 0x9F, 0x19, 0x52, 0x90, 0x88, 0x32, 0x07, 0xBA |
.byte 0xAF, 0x1F, 0xF7, 0xAC, 0xB5, 0x84, 0xF2, 0x50, 0x06, 0xD0, 0x70, 0xE2, 0xA2, 0xB2, 0x38, 0x28 |
.byte 0xA1, 0x0E, 0xD7, 0xD0, 0x3F, 0x82, 0x05, 0xDE, 0x9C, 0x58, 0x6F, 0x24, 0x8B, 0x76, 0xDE, 0x3A |
.byte 0x96, 0xD5, 0xE6, 0x4B, 0x59, 0xD8, 0x9B, 0x60, 0xA8, 0x0C, 0x43, 0x4B, 0xBE, 0x7B, 0x73, 0x60 |
.byte 0x8A, 0x4B, 0x31, 0xC9, 0xCD, 0x36, 0xA8, 0x69, 0x8F, 0x17, 0x8D, 0x1A, 0x8E, 0x6C, 0x54, 0x24 |
.byte 0x42, 0x3A, 0x6F, 0x9C, 0x13, 0x0B, 0xFD, 0xBC, 0x17, 0x40, 0x07, 0xD6, 0xBC, 0x7B, 0x36, 0x46 |
.byte 0xC7, 0x67, 0x10, 0x94, 0x9E, 0xB8, 0xFE, 0x2D, 0xCF, 0x8C, 0x47, 0x5D, 0xF8, 0x9B, 0x81, 0x3B |
.byte 0xD6, 0xF1, 0xD7, 0xEA, 0xFC, 0xD4, 0xA6, 0x14, 0x15, 0xAE, 0xEA, 0xD2, 0x2A, 0x21, 0x18, 0xF1 |
.byte 0x89, 0x28, 0x86, 0x27, 0xE0, 0x84, 0x55, 0xB0, 0x11, 0x9C, 0x0D, 0x0A, 0x38, 0x8F, 0x45, 0x0F |
.byte 0x81, 0x1D, 0xF9, 0x7D, 0xF2, 0xA0, 0x91, 0x07, 0x4F, 0x7C, 0xD9, 0x79, 0x9E, 0xF2, 0x6A, 0x27 |
.byte 0x1B, 0xF0, 0x4F, 0xFB, 0x75, 0xA4, 0xAC, 0x86, 0x41, 0xB9, 0x91, 0x7A, 0x49, 0xD6, 0x89, 0xCA |
.byte 0xF3, 0x83, 0x48, 0xE5, 0x24, 0xDA, 0xED, 0x73, 0x56, 0xC7, 0xEC, 0xF5, 0xB9, 0x57, 0x1C, 0xD4 |
.byte 0x48, 0x6B, 0xD0, 0xBE, 0x10, 0x7C, 0x45, 0x51, 0x36, 0xD6, 0xCB, 0x80, 0xAD, 0x55, 0x4A, 0xA0 |
.byte 0xD9, 0x93, 0x86, 0xFD, 0x6D, 0x74, 0x71, 0xC4, 0x3B, 0x5D, 0xB9, 0xF4, 0xB5, 0xD5, 0xC9, 0xFE |
.byte 0x41, 0x99, 0xBC, 0x51, 0x16, 0x01, 0xA3, 0x4D, 0xD8, 0x6E, 0xCD, 0x85, 0xC3, 0x17, 0x26, 0x9D |
.byte 0xAB, 0xAC, 0x9A, 0x18, 0x21, 0x0B, 0xDC, 0x5C, 0x69, 0x96, 0x51, 0x1E, 0x6C, 0x1B, 0x1C, 0xAD |
.byte 0xB5, 0xD9, 0xFF, 0xCB, 0xDB, 0xA2, 0x18, 0xB3, 0x11, 0xE5, 0x38, 0xD4, 0xFD, 0x5E, 0x71, 0xA8 |
.byte 0x0B, 0x0C, 0xC1, 0x2C, 0x18, 0x9E, 0x89, 0x81, 0x34, 0xDA, 0xA0, 0xA0, 0xF5, 0xBD, 0x4E, 0xAB |
.byte 0x96, 0x4D, 0x76, 0x71, 0xF0, 0x8F, 0x24, 0x01, 0x74, 0x5D, 0xD5, 0x72, 0xBB, 0x47, 0x1B, 0xC7 |
.byte 0x54, 0xDC, 0xF3, 0x6C, 0x7A, 0x7C, 0xED, 0xAE, 0x57, 0x8E, 0x4F, 0x4D, 0x4B, 0x9D, 0xF8, 0xE2 |
.byte 0xEA, 0x6F, 0x53, 0xDA, 0xFE, 0x78, 0xDB, 0x73, 0xD6, 0xB1, 0xE5, 0x92, 0xF9, 0x00, 0x59, 0x4E |
.byte 0xDD, 0x4C, 0xBA, 0x57, 0xC9, 0xA8, 0x06, 0x20, 0x36, 0x55, 0x6E, 0x81, 0xF2, 0x67, 0x64, 0xDD |
.byte 0xD6, 0xB8, 0xB8, 0xD4, 0x30, 0x94, 0x47, 0x07, 0x46, 0x2D, 0x99, 0x40, 0x2D, 0xF2, 0x8E, 0x0B |
.byte 0x3E, 0x49, 0x62, 0x08, 0xF1, 0x69, 0x29, 0x27, 0xBE, 0x97, 0xA9, 0xB1, 0xFE, 0x0D, 0x8F, 0xD5 |
.byte 0xC5, 0x48, 0xA9, 0xF6, 0xDD, 0xF1, 0xFE, 0x24, 0x1E, 0x97, 0x64, 0x4C, 0x89, 0xF3, 0x57, 0xC8 |
.byte 0x3C, 0xBA, 0xD1, 0x2D, 0x23, 0xFA, 0x55, 0xE2, 0x92, 0xFF, 0x94, 0x91, 0x0D, 0x24, 0x66, 0xD3 |
.byte 0x6C, 0x10, 0xCA, 0x4A, 0x01, 0xC8, 0x6E, 0x1F, 0x60, 0xD2, 0x6B, 0xE9, 0xC5, 0xC2, 0xB2, 0x01 |
.byte 0x7C, 0x83, 0x2F, 0xA0, 0x7D, 0x85, 0x82, 0x10, 0x85, 0x16, 0xA1, 0x92, 0x3A, 0x08, 0x66, 0xA7 |
.byte 0x18, 0x30, 0xF1, 0x19, 0xF9, 0x5F, 0x38, 0x59, 0x32, 0xA3, 0x43, 0xF7, 0x66, 0xF5, 0xF9, 0xE2 |
.byte 0x78, 0x29, 0x83, 0xF6, 0xAF, 0x05, 0x06, 0x34, 0x1C, 0xA8, 0xC6, 0x57, 0xB0, 0x2D, 0xFF, 0xC8 |
.byte 0x5D, 0xF0, 0xE1, 0x57, 0x50, 0x19, 0xB0, 0x82, 0xBD, 0xF3, 0x7A, 0x23, 0xE9, 0x74, 0x06, 0x62 |
.byte 0x9D, 0x89, 0x59, 0x4D, 0x8F, 0x60, 0x81, 0xAC, 0x08, 0x48, 0x03, 0xB9, 0x75, 0x02, 0x81, 0xD2 |
.byte 0xF3, 0x63, 0x2A, 0x44, 0x7D, 0xDB, 0xC6, 0x3B, 0xCF, 0x41, 0x5E, 0xB8, 0xB5, 0x65, 0x1B, 0x53 |
.byte 0xEF, 0x74, 0xA0, 0x7F, 0xD4, 0x22, 0x2B, 0xDD, 0x6A, 0x2F, 0x96, 0xDF, 0x32, 0x18, 0xB2, 0x25 |
.byte 0x7B, 0xDC, 0x6A, 0xF9, 0xB7, 0x31, 0x34, 0x86, 0x72, 0x93, 0x3F, 0x28, 0xF9, 0x5A, 0x7C, 0xE8 |
.byte 0xCE, 0x1D, 0x67, 0xA3, 0x3F, 0x93, 0x80, 0xA9, 0xC2, 0x17, 0x88, 0xF4, 0x2F, 0x3A, 0x1A, 0xAB |
.byte 0x17, 0x84, 0xA4, 0xCF, 0xB5, 0xD9, 0x56, 0x28, 0x6C, 0x95, 0x50, 0x65, 0xF0, 0xCD, 0x4E, 0xBF |
.byte 0xEA, 0xB6, 0x62, 0x29, 0x49, 0xE3, 0xD3, 0x0B, 0xFA, 0x5C, 0xFF, 0x2A, 0x97, 0x1A, 0xD5, 0xAE |
.byte 0x9E, 0x7A, 0x7D, 0x53, 0x54, 0xD4, 0x7B, 0xC0, 0x69, 0xCC, 0x26, 0x59, 0x99, 0x74, 0x18, 0x83 |
.byte 0x2A, 0x7B, 0xAD, 0x74, 0x5E, 0x81, 0x7F, 0x59, 0xDD, 0x7F, 0x83, 0x74, 0x99, 0x59, 0x23, 0x38 |
.byte 0xD4, 0xA1, 0x8B, 0x28, 0x75, 0x07, 0xE9, 0xDF, 0xD4, 0x10, 0x38, 0x6D, 0x84, 0x51, 0xF1, 0xAF |
.byte 0xCC, 0x9E, 0x23, 0x2B, 0x20, 0xA3, 0x84, 0xFD, 0x23, 0x08, 0x72, 0xBD, 0x61, 0x95, 0xF5, 0x36 |
.byte 0x37, 0x81, 0x5F, 0xAC, 0x89, 0x48, 0x8B, 0x5D, 0x58, 0xC4, 0xCA, 0xDD, 0x15, 0xBB, 0x8D, 0xE2 |
.byte 0x5A, 0xB1, 0x0D, 0x7A, 0x54, 0x92, 0x78, 0x78, 0x9A, 0xEA, 0x35, 0xFC, 0x80, 0x2B, 0x32, 0xB7 |
.byte 0xAC, 0x91, 0x64, 0x35, 0xDA, 0xF0, 0x93, 0x32, 0xB4, 0x5D, 0x10, 0xCA, 0x19, 0x9D, 0xAD, 0x74 |
.byte 0x4E, 0xBB, 0xEE, 0xA3, 0x4D, 0x67, 0x1C, 0xE8, 0x52, 0x51, 0xE4, 0xD2, 0x7D, 0x16, 0x8A, 0x2A |
.byte 0xA8, 0xEF, 0x60, 0x82, 0xDF, 0xF3, 0xB5, 0x94, 0x50, 0xC5, 0x5F, 0x6A, 0x63, 0x0C, 0xDE, 0xB1 |
.byte 0xC7, 0xCC, 0x55, 0x15, 0x34, 0x71, 0xFD, 0x86, 0xC3, 0xE1, 0x59, 0x40, 0xF8, 0xE4, 0x6B, 0xA1 |
.byte 0xD3, 0xCB, 0x24, 0xB3, 0xBE, 0xD9, 0x48, 0x0F, 0x9F, 0xA7, 0x79, 0x02, 0xB4, 0x57, 0xB4, 0x7C |
.byte 0x24, 0x09, 0x91, 0x58, 0x7B, 0x8F, 0xDF, 0x3F, 0x71, 0x38, 0x80, 0x69, 0x1C, 0xEB, 0x0B, 0xF0 |
.byte 0xB6, 0x2F, 0xA3, 0x74, 0x09, 0xEB, 0x83, 0xA8, 0x92, 0xFD, 0xAB, 0x47, 0x54, 0x5F, 0xC3, 0x78 |
.byte 0x69, 0x54, 0xD0, 0xE4, 0xE4, 0xAF, 0x23, 0x55, 0xE8, 0xA3, 0xBF, 0x04, 0x8E, 0xCA, 0xF5, 0x45 |
.byte 0xFA, 0x98, 0xB9, 0x03, 0x84, 0x3D, 0xAB, 0x17, 0x3A, 0x56, 0x5E, 0x8F, 0xB6, 0x21, 0x07, 0x1F |
.byte 0x76, 0xD8, 0x04, 0x5A, 0x88, 0x27, 0xAF, 0x70, 0xCB, 0x6F, 0x75, 0x5A, 0x39, 0x6A, 0x9F, 0x33 |
.byte 0x03, 0x59, 0x37, 0x87, 0x96, 0xE3, 0x9E, 0xD1, 0x3A, 0xFC, 0x60, 0xF0, 0x1E, 0x68, 0x10, 0x94 |
.byte 0x40, 0x14, 0xEF, 0xC9, 0x3B, 0x9F, 0x39, 0x07, 0x0E, 0xAE, 0x61, 0x48, 0x19, 0x00, 0x7C, 0x1C |
.byte 0x59, 0xB3, 0xA3, 0xF0, 0x97, 0x42, 0xC2, 0xD1, 0x3E, 0x23, 0xC1, 0x5D, 0x8B, 0xD2, 0xF2, 0xCC |
.byte 0xE6, 0xE1, 0x95, 0x22, 0x81, 0xCF, 0x29, 0x90, 0x7E, 0x8A, 0xD8, 0x97, 0x8A, 0x55, 0xB4, 0xE4 |
.byte 0x09, 0x57, 0xD4, 0xA0, 0x9A, 0x97, 0x71, 0xD8, 0xBA, 0x33, 0x36, 0x46, 0x05, 0x28, 0x12, 0xEB |
.byte 0x09, 0xA8, 0x0D, 0x8B, 0x77, 0x36, 0x1B, 0xF5, 0xC1, 0xF3, 0x8C, 0x4B, 0x49, 0x41, 0x30, 0x52 |
.byte 0x99, 0x05, 0xF2, 0x33, 0x9C, 0x64, 0x0C, 0x56, 0x98, 0x42, 0x9C, 0x9D, 0x6A, 0xAF, 0x89, 0x74 |
.byte 0x57, 0x97, 0xFF, 0xCF, 0xCE, 0x1A, 0xC4, 0x8F, 0x0E, 0x51, 0xDB, 0x57, 0x92, 0x0B, 0xA9, 0x2B |
.byte 0x10, 0x9C, 0x5F, 0xAD, 0x01, 0x6B, 0x03, 0x99, 0xAD, 0xA0, 0x36, 0x17, 0x50, 0xC0, 0x8C, 0xA8 |
.byte 0x57, 0x8B, 0x77, 0x26, 0xA5, 0x3C, 0xB5, 0xB3, 0x8D, 0x91, 0x0B, 0x20, 0x9C, 0xB5, 0x4C, 0xAD |
.byte 0x51, 0xAB, 0x5B, 0x52, 0x17, 0x5E, 0xEC, 0xC4, 0xFF, 0x23, 0xDC, 0x50, 0xE3, 0x68, 0xF8, 0x3B |
.byte 0xF3, 0x70, 0x61, 0x99, 0xAC, 0x16, 0x4C, 0x39, 0xA8, 0x58, 0x5A, 0x45, 0x0D, 0xA6, 0xF2, 0x5E |
.byte 0x52, 0x4D, 0xB1, 0x69, 0xAC, 0x9D, 0x2E, 0xAC, 0xC0, 0x0A, 0xFC, 0xA4, 0x73, 0xF5, 0xDF, 0x67 |
.byte 0x65, 0x41, 0x00, 0x11, 0x58, 0x4D, 0x4B, 0x00, 0xA5, 0xA5, 0x45, 0xB2, 0x4C, 0x38, 0x11, 0x9E |
.byte 0x86, 0xC3, 0x07, 0x33, 0x61, 0x35, 0xDF, 0x22, 0x40, 0xDC, 0xC6, 0xB4, 0xD2, 0xA6, 0x1B, 0x37 |
.byte 0xE7, 0x1C, 0x49, 0x40, 0x69, 0x94, 0x40, 0x0F, 0x39, 0x85, 0xC2, 0x85, 0xBD, 0xD4, 0x24, 0x44 |
.byte 0x97, 0x2B, 0x77, 0xF8, 0x61, 0x56, 0x1B, 0xA2, 0x33, 0xE2, 0x56, 0x05, 0x89, 0x71, 0x3D, 0x71 |
.byte 0x8D, 0x86, 0xB1, 0xF7, 0x1A, 0xF1, 0x06, 0x54, 0x77, 0xC9, 0xDA, 0x34, 0x9D, 0xFE, 0x79, 0x34 |
.byte 0x2A, 0xF0, 0x2D, 0x8C, 0x47, 0x49, 0x2E, 0x7A, 0x2B, 0x84, 0x80, 0xB4, 0xF5, 0xBD, 0x25, 0x83 |
.byte 0x43, 0xD6, 0x7A, 0x5E, 0xC8, 0x81, 0xB2, 0x3F, 0x4A, 0x8C, 0x74, 0xE8, 0x8B, 0xED, 0x1C, 0xB5 |
.byte 0xDD, 0x4A, 0x41, 0x24, 0x93, 0x70, 0x9F, 0xBF, 0xF4, 0x20, 0x73, 0xEA, 0xDD, 0x99, 0x6D, 0x21 |
.byte 0x6F, 0xE8, 0x7F, 0x37, 0x69, 0x32, 0x77, 0xB4, 0xBE, 0xEB, 0x9D, 0x4A, 0xD8, 0xB9, 0x00, 0xB6 |
.byte 0x04, 0x42, 0xDB, 0x98, 0xB2, 0x7B, 0x57, 0xA6, 0x9B, 0xCA, 0x90, 0x78, 0x63, 0xFE, 0x9A, 0xD3 |
.byte 0xE6, 0x19, 0x0B, 0x50, 0x4C, 0x83, 0x05, 0x0B, 0x6E, 0xA2, 0x55, 0x47, 0x5C, 0x55, 0xFE, 0x60 |
.byte 0x97, 0xD9, 0xF8, 0x4A, 0x54, 0x50, 0xF0, 0xEF, 0x1B, 0x81, 0x68, 0x7E, 0x7F, 0x02, 0x52, 0x65 |
.byte 0x1C, 0x5E, 0xB5, 0x68, 0xE1, 0xBA, 0x73, 0x50, 0x5C, 0xC9, 0x97, 0xB8, 0x1E, 0x96, 0x19, 0xB6 |
.byte 0x6F, 0x12, 0x00, 0xC4, 0x62, 0xF1, 0xB4, 0x7D, 0x72, 0x1D, 0xFC, 0xF2, 0x20, 0x4F, 0x57, 0x3C |
.byte 0xAD, 0x0D, 0xA5, 0x8F, 0xC8, 0x19, 0xDF, 0x24, 0xE3, 0x77, 0xDD, 0x02, 0x0D, 0xF7, 0xB8, 0x7D |
.byte 0x09, 0xB9, 0x41, 0x6C, 0xAB, 0xF6, 0xEA, 0x1D, 0x13, 0xE6, 0x10, 0x33, 0x36, 0x67, 0x70, 0xE4 |
.byte 0x75, 0x16, 0x73, 0x3D, 0x30, 0x53, 0x62, 0x13, 0xCA, 0x40, 0x15, 0xD8, 0x37, 0xCE, 0x55, 0x41 |
.byte 0x88, 0x97, 0xAD, 0x33, 0x8D, 0x98, 0x51, 0xA1, 0x7F, 0x61, 0xD5, 0xB5, 0xC9, 0x45, 0x99, 0x3E |
.byte 0x5C, 0x0C, 0x7C, 0x8C, 0x60, 0xDE, 0xA0, 0x2A, 0x1E, 0xB6, 0x02, 0x55, 0x84, 0x57, 0x97, 0x0D |
.byte 0xEF, 0x44, 0x40, 0x7C, 0xDD, 0x91, 0x1E, 0x5C, 0xF3, 0xF3, 0x11, 0xBC, 0x39, 0xAA, 0xFB, 0x95 |
.byte 0xB7, 0x77, 0x22, 0x17, 0x55, 0xC2, 0x42, 0x74, 0x79, 0x44, 0xC9, 0xFE, 0x9C, 0x61, 0x0B, 0x8B |
.byte 0xA6, 0x4B, 0x08, 0x83, 0xDD, 0x27, 0xDF, 0xD1, 0x1A, 0xF0, 0x8E, 0x53, 0x9B, 0x89, 0xE9, 0x53 |
.byte 0x00, 0x0B, 0x6B, 0x56, 0xCE, 0xAD, 0xCA, 0x47, 0xF2, 0x94, 0x45, 0x8E, 0xF5, 0x50, 0x1A, 0x9B |
.byte 0x9C, 0x23, 0x1E, 0x7A, 0x4A, 0xFE, 0x4B, 0x65, 0xEE, 0xD9, 0xB8, 0x8A, 0x63, 0xA2, 0xDD, 0x63 |
.byte 0xAD, 0x48, 0xBA, 0x7B, 0xF5, 0x85, 0xC3, 0xE7, 0x19, 0x08, 0x76, 0x0F, 0x59, 0x91, 0xAB, 0xF5 |
.byte 0xB4, 0xC9, 0x70, 0xFF, 0xC8, 0xBC, 0x64, 0xB6, 0x95, 0x1D, 0x41, 0xF9, 0xBF, 0x1E, 0x5C, 0x6D |
.byte 0x67, 0x17, 0xE9, 0x5D, 0x9C, 0xAC, 0x45, 0xB6, 0xB4, 0xBB, 0xC5, 0x0E, 0x4D, 0x70, 0x04, 0x02 |
.byte 0x3A, 0x74, 0x01, 0x02, 0x30, 0x66, 0xB9, 0xC6, 0x83, 0xFA, 0xBF, 0x43, 0x19, 0x1C, 0xB0, 0x81 |
.byte 0x34, 0x9A, 0xDE, 0xD0, 0x46, 0x23, 0x86, 0xFB, 0xDF, 0x4C, 0x09, 0x2D, 0xBC, 0x0D, 0x2F, 0xF7 |
.byte 0x82, 0x30, 0xFA, 0xB2, 0x96, 0xB3, 0x79, 0x1A, 0xAE, 0x39, 0x5D, 0xC8, 0x55, 0x0E, 0x49, 0x89 |
.byte 0xA8, 0x28, 0x5A, 0xEF, 0x4C, 0xE1, 0xEA, 0x2B, 0x2D, 0xF4, 0x58, 0xEA, 0x02, 0x88, 0xE1, 0x84 |
.byte 0xB8, 0xDB, 0x37, 0x4F, 0x8F, 0xB0, 0x69, 0x3E, 0xE9, 0xC7, 0x07, 0x3F, 0xD5, 0x51, 0xC9, 0x7E |
.byte 0x79, 0x23, 0x6D, 0xC5, 0x04, 0x58, 0xF1, 0x31, 0x4D, 0x4A, 0x1C, 0x4F, 0xD2, 0xFE, 0xD3, 0x8B |
.byte 0xD9, 0x0B, 0xDA, 0x69, 0xBC, 0x43, 0xA8, 0xA5, 0x0A, 0xAF, 0xE5, 0xE0, 0x00, 0xAE, 0x5E, 0x7A |
.byte 0xD2, 0xCC, 0x40, 0xD6, 0x25, 0x31, 0x08, 0x72, 0x7C, 0x25, 0xC1, 0x4E, 0x23, 0x95, 0xD9, 0xFD |
.byte 0xA0, 0xB4, 0x66, 0x5C, 0xF7, 0x0F, 0x02, 0x02, 0xBF, 0xE7, 0xE3, 0xC0, 0x96, 0x41, 0x3A, 0x69 |
.byte 0x0E, 0x7A, 0x3F, 0x33, 0xAC, 0x48, 0xA5, 0x28, 0x6D, 0x66, 0x77, 0x91, 0xFC, 0x51, 0x8E, 0x9C |
.byte 0x05, 0xF5, 0xF8, 0xFD, 0x04, 0xFB, 0x00, 0xC4, 0xE3, 0xE3, 0x84, 0x79, 0x25, 0xBF, 0xE2, 0x33 |
.byte 0x39, 0x22, 0x66, 0xE6, 0x6B, 0x0C, 0x0E, 0xD9, 0x73, 0x86, 0x6A, 0x6F, 0xD7, 0xF8, 0x0B, 0xDD |
.byte 0xEE, 0x04, 0xDA, 0xF2, 0xFF, 0xDB, 0xB6, 0xE2, 0xBE, 0x3B, 0x5C, 0xE3, 0xFA, 0x3F, 0x17, 0x33 |
.byte 0x62, 0x7E, 0x1A, 0xCD, 0x8A, 0x29, 0xA7, 0xFE, 0xAF, 0x11, 0x6D, 0x87, 0x0A, 0x79, 0x64, 0xF8 |
.byte 0x7D, 0x3F, 0xEB, 0x7D, 0x1A, 0xA2, 0x60, 0xD9, 0xDD, 0xBC, 0xBC, 0xD7, 0xFC, 0xD4, 0x0B, 0x5E |
.byte 0x52, 0x25, 0x2C, 0xDC, 0x4F, 0xD4, 0xDA, 0xFE, 0xE6, 0x48, 0x85, 0xF1, 0xC1, 0xEA, 0xEA, 0x3F |
.byte 0x2A, 0xD5, 0xBC, 0x44, 0x78, 0x1C, 0x1E, 0x55, 0xD9, 0xDB, 0x2D, 0xD6, 0xAF, 0x38, 0x35, 0x01 |
.byte 0x5E, 0x62, 0xDE, 0xAD, 0x36, 0xB9, 0xAC, 0x1D, 0x01, 0x32, 0x0E, 0xC2, 0x1C, 0xF8, 0x01, 0x46 |
.byte 0xCD, 0xBE, 0x8B, 0x45, 0xDB, 0xA9, 0x9B, 0xB4, 0x84, 0xC8, 0x8B, 0x34, 0x01, 0xC0, 0x35, 0x5F |
.byte 0x22, 0x13, 0x0D, 0x59, 0xCC, 0xB9, 0x76, 0xCD, 0xEC, 0x84, 0x90, 0x09, 0x7C, 0x92, 0x50, 0x4A |
.byte 0x50, 0xDB, 0x90, 0x2B, 0x85, 0x2C, 0xE0, 0x0A, 0xF4, 0x6B, 0x3E, 0xF6, 0x2C, 0x74, 0x56, 0x4E |
.byte 0x87, 0x63, 0xA8, 0x54, 0x1D, 0x1E, 0x21, 0x0A, 0xA2, 0xB2, 0x13, 0x1F, 0x44, 0x63, 0x6A, 0x95 |
.byte 0x3F, 0xFB, 0xC1, 0xC4, 0x27, 0xA1, 0xCF, 0x1C, 0x0D, 0x0E, 0x12, 0x39, 0x82, 0x68, 0x88, 0x0A |
.byte 0xCC, 0x30, 0x5E, 0xEA, 0x4F, 0x80, 0xF4, 0xF2, 0x32, 0x07, 0x11, 0x77, 0x6A, 0x7C, 0x0D, 0xA9 |
.byte 0x77, 0xCE, 0x6E, 0x9E, 0x70, 0x3E, 0xBB, 0x7E, 0x4C, 0xCD, 0xB8, 0xCF, 0x36, 0x40, 0xD9, 0x03 |
.byte 0x71, 0x38, 0xED, 0xC0, 0xB8, 0xE2, 0xB2, 0xEB, 0xE9, 0xC4, 0x63, 0x54, 0x41, 0x70, 0xFE, 0xB8 |
.byte 0x3F, 0x6D, 0x57, 0xAF, 0xAB, 0x12, 0x2D, 0xF8, 0xE0, 0xE5, 0xC8, 0x16, 0x26, 0xA1, 0x1A, 0x98 |
.byte 0xDA, 0x07, 0x58, 0x92, 0xE9, 0x0B, 0x7E, 0xD3, 0xD0, 0xE1, 0x28, 0x11, 0x52, 0x26, 0xCA, 0x91 |
.byte 0x93, 0x21, 0x41, 0x3F, 0x34, 0x6E, 0x37, 0x14, 0x54, 0xFF, 0x2B, 0x7B, 0xA1, 0x45, 0x13, 0x7B |
.byte 0x4D, 0x6C, 0x0E, 0x37, 0x77, 0x8D, 0x0A, 0x47, 0x6F, 0x32, 0x59, 0xC1, 0x59, 0x23, 0x53, 0xEC |
.byte 0x44, 0x94, 0x2C, 0x79, 0x02, 0x63, 0x8E, 0x57, 0x63, 0xB9, 0xD3, 0x04, 0xFF, 0xE6, 0x80, 0x4C |
.byte 0x52, 0x8F, 0x83, 0xCA, 0x1C, 0x8E, 0x12, 0x8B, 0xC1, 0x6B, 0x4D, 0x1A, 0x8E, 0xA0, 0x07, 0xD3 |
.byte 0x34, 0x33, 0x4D, 0x37, 0x97, 0xDB, 0x8F, 0xFA, 0x95, 0x62, 0xFF, 0x94, 0x48, 0x80, 0xE1, 0x9B |
.byte 0x0F, 0x65, 0x65, 0x2C, 0xF3, 0x77, 0xB7, 0xB4, 0xE2, 0x05, 0xCF, 0x71, 0xA5, 0xD6, 0x45, 0xD9 |
.byte 0x0A, 0x92, 0x11, 0xA1, 0x6D, 0xA0, 0x9C, 0x02, 0x02, 0x9B, 0x97, 0x4B, 0x1C, 0x78, 0xE6, 0x2B |
.byte 0xDD, 0x4B, 0x57, 0xD1, 0xC3, 0x0F, 0x86, 0xA5, 0x14, 0x55, 0x17, 0xB9, 0x2C, 0x5D, 0x93, 0x37 |
.byte 0xEF, 0xA4, 0xD9, 0x5D, 0x45, 0x75, 0x60, 0x47, 0x11, 0xF7, 0x93, 0x2D, 0x70, 0x79, 0x59, 0x4E |
.byte 0xC5, 0xB0, 0x1F, 0x88, 0xC0, 0xA6, 0x2E, 0xD4, 0xFC, 0x45, 0x8E, 0x29, 0xA2, 0x22, 0x60, 0x92 |
.byte 0xC7, 0x39, 0xEF, 0x0C, 0xAE, 0x50, 0x54, 0xC0, 0x48, 0xE7, 0xED, 0xB8, 0x60, 0x46, 0x06, 0x25 |
.byte 0xF7, 0x26, 0xAD, 0xB7, 0xCD, 0xDC, 0x8C, 0xC9, 0x21, 0x1A, 0xF2, 0xC4, 0x3D, 0x52, 0x56, 0x04 |
.byte 0x8C, 0x46, 0x10, 0x3A, 0x96, 0x65, 0xFA, 0xDE, 0x4C, 0xE8, 0x97, 0xAD, 0x2E, 0x9E, 0xD3, 0x26 |
.byte 0xC4, 0x81, 0xDD, 0x92, 0x5D, 0x69, 0x5B, 0x7E, 0x84, 0x4D, 0x43, 0xC1, 0xA0, 0x9A, 0xC6, 0x2C |
.byte 0xE0, 0xD6, 0x67, 0x77, 0x3B, 0x62, 0x55, 0x88, 0x4A, 0xEC, 0x35, 0x79, 0x8A, 0x09, 0x9F, 0x4F |
.byte 0x8A, 0x7D, 0xE1, 0xE7, 0xE7, 0x3D, 0x66, 0x6C, 0x8B, 0xAA, 0x2D, 0x2B, 0x44, 0xF3, 0x57, 0x24 |
.byte 0xCA, 0xBF, 0x9B, 0x06, 0x21, 0xF1, 0x8F, 0x6B, 0xDE, 0xC4, 0xE5, 0x69, 0xCE, 0x85, 0xB9, 0x58 |
.byte 0x02, 0x9B, 0x40, 0xE9, 0xD8, 0xA7, 0x55, 0x63, 0x51, 0x83, 0x8E, 0x95, 0x77, 0xE6, 0xBA, 0x42 |
.byte 0xA5, 0x56, 0x49, 0xC7, 0x47, 0xD8, 0x32, 0x25, 0x9D, 0x18, 0x8E, 0x6B, 0x9D, 0x48, 0xC4, 0x9F |
.byte 0xE3, 0x04, 0x89, 0xBB, 0xAB, 0xDF, 0x1F, 0xFD, 0x62, 0xAD, 0x92, 0xDA, 0x94, 0x4D, 0x1C, 0x3A |
.byte 0xA3, 0x65, 0x01, 0xEA, 0x3E, 0x34, 0x10, 0xDB, 0x4C, 0x9F, 0x46, 0xE9, 0xE7, 0x0A, 0x89, 0xCA |
.byte 0x0F, 0x13, 0x86, 0xBA, 0xF2, 0xA5, 0xB8, 0x55, 0x53, 0x4A, 0x2F, 0xE7, 0x98, 0x4C, 0x22, 0x3B |
.byte 0xB2, 0x23, 0x26, 0xF0, 0x58, 0x36, 0xCB, 0xA4, 0xD6, 0x12, 0x8E, 0xBD, 0x1D, 0x18, 0x88, 0x2C |
.byte 0x2B, 0x0E, 0xE7, 0x1D, 0xB4, 0x9F, 0x72, 0x07, 0xEA, 0xA2, 0xEF, 0x82, 0xEE, 0x11, 0xBD, 0xA1 |
.byte 0x35, 0xE3, 0x91, 0x8D, 0x1A, 0x5D, 0x32, 0xF0, 0x70, 0xC1, 0xAE, 0x8D, 0xD9, 0x36, 0xB9, 0x04 |
.byte 0x45, 0xA0, 0x22, 0xF9, 0x3F, 0x95, 0x01, 0x2A, 0x37, 0xF0, 0xAC, 0x26, 0x02, 0x69, 0xC8, 0x38 |
.byte 0x4D, 0x59, 0xC6, 0x67, 0xB7, 0xF9, 0x57, 0x27, 0xBA, 0x05, 0xB5, 0x93, 0x3C, 0x6E, 0x98, 0x82 |
.byte 0x0F, 0xBA, 0x7B, 0x4F, 0x50, 0x7D, 0x79, 0x88, 0x6E, 0x25, 0xAE, 0x70, 0x8F, 0x76, 0xA9, 0xDC |
.byte 0xD0, 0x6F, 0x43, 0x88, 0x69, 0x9B, 0xB0, 0x23, 0xA1, 0x65, 0xB7, 0xDD, 0xD4, 0x4F, 0x5F, 0xE3 |
.byte 0x0A, 0xDB, 0x32, 0x5A, 0x58, 0xAC, 0xE2, 0xC6, 0xD2, 0x91, 0x37, 0x61, 0x08, 0xE1, 0x3D, 0xD9 |
.byte 0x50, 0x81, 0x61, 0xBA, 0x1C, 0x11, 0xDD, 0xBD, 0x76, 0x94, 0x9B, 0x4A, 0xE4, 0xFA, 0x2E, 0xEE |
.byte 0xD6, 0x61, 0x49, 0x2E, 0x0D, 0x2C, 0xF5, 0xE0, 0xBE, 0x2C, 0x41, 0xC6, 0x0D, 0x7F, 0xA0, 0x5E |
.byte 0x00, 0x01, 0x18, 0x1D, 0x13, 0xF6, 0xDB, 0x8A, 0x8A, 0x76, 0xD5, 0x6E, 0x71, 0x03, 0x5D, 0x47 |
.byte 0x64, 0xA7, 0x75, 0x72, 0xD4, 0x6B, 0x53, 0x92, 0x97, 0x94, 0x59, 0xA5, 0x13, 0xF9, 0x04, 0x14 |
.byte 0xFB, 0x1D, 0x31, 0x0E, 0x13, 0x0C, 0x98, 0x9E, 0x83, 0x6D, 0x0D, 0xF4, 0x71, 0x6B, 0x3B, 0xD6 |
.byte 0x12, 0xB1, 0x49, 0xE6, 0x1C, 0x9C, 0x79, 0xB4, 0x30, 0xD2, 0x5A, 0x44, 0xCC, 0x5E, 0x59, 0xC7 |
.byte 0x7C, 0x8A, 0xD6, 0x8F, 0x97, 0x6F, 0x2E, 0x1A, 0xDD, 0x3B, 0x0E, 0x4E, 0xA6, 0x4A, 0x25, 0xB9 |
.byte 0xFB, 0x6E, 0xA0, 0x18, 0x0A, 0x19, 0xCC, 0x3B, 0xEC, 0x26, 0x80, 0xB9, 0x85, 0xD9, 0x80, 0x01 |
.byte 0x64, 0x57, 0x91, 0xFB, 0xC6, 0xBF, 0x16, 0xA3, 0xFB, 0x25, 0xF2, 0xA1, 0x6F, 0x17, 0x5B, 0x6B |
.byte 0x86, 0xFB, 0x83, 0x91, 0x15, 0x50, 0xCC, 0x01, 0x77, 0x4D, 0xBA, 0xFC, 0x27, 0x3B, 0xFE, 0x8B |
.byte 0x93, 0x90, 0x87, 0x59, 0x4F, 0x9E, 0xFD, 0x4A, 0xC3, 0xEF, 0xEC, 0x33, 0x07, 0x48, 0x9E, 0x8D |
.byte 0x43, 0x22, 0x1E, 0x59, 0x73, 0xEB, 0x5B, 0xEA, 0x38, 0x16, 0xE7, 0x5F, 0x51, 0xE6, 0xEB, 0xE5 |
.byte 0x76, 0x72, 0x3E, 0xC5, 0x10, 0x3B, 0x10, 0xD4, 0x2B, 0xFC, 0x07, 0x32, 0x44, 0xA6, 0xC0, 0x88 |
.byte 0xC9, 0xDE, 0xE1, 0x3C, 0xCA, 0x3C, 0x27, 0x03, 0x53, 0x0E, 0x62, 0xA4, 0xF4, 0x4E, 0x89, 0x6A |
.byte 0xC1, 0xC8, 0x30, 0xD1, 0x04, 0x40, 0xA6, 0x30, 0x3D, 0xAD, 0x62, 0x82, 0x54, 0x23, 0x0B, 0x1E |
.byte 0x01, 0xED, 0x5A, 0xCB, 0x29, 0x81, 0xCE, 0x7C, 0x90, 0x31, 0x21, 0x85, 0x80, 0xAB, 0xF0, 0x41 |
.byte 0x74, 0x20, 0x12, 0x78, 0x61, 0xB9, 0xA8, 0x9F, 0x66, 0x0B, 0x21, 0xBB, 0x2E, 0x2C, 0xD9, 0x30 |
.byte 0x19, 0x34, 0xFC, 0x43, 0xB6, 0xCB, 0xC0, 0x46, 0xFD, 0xE2, 0xCC, 0x7D, 0x8E, 0xBC, 0xBE, 0x02 |
.byte 0xDD, 0xD1, 0x7B, 0x3E, 0x8A, 0x24, 0xDD, 0xF1, 0x30, 0xFF, 0xAD, 0x5F, 0x2C, 0x86, 0x90, 0x46 |
.byte 0xBB, 0x8D, 0x8A, 0x71, 0x58, 0x4A, 0xB8, 0x56, 0x2D, 0x84, 0xD3, 0xBC, 0x40, 0x92, 0xBF, 0x1D |
.byte 0x64, 0x3A, 0x5C, 0xEF, 0x5F, 0x3A, 0xE0, 0x90, 0x39, 0x8E, 0xF0, 0x65, 0x14, 0x80, 0xAC, 0xCF |
.byte 0x0D, 0x36, 0x40, 0x66, 0x81, 0xF9, 0xBC, 0xAE, 0x7D, 0x90, 0x6B, 0xBE, 0x23, 0x2A, 0xDC, 0x88 |
.byte 0x65, 0x38, 0x77, 0xC5, 0x72, 0x58, 0x55, 0xAC, 0xE6, 0x45, 0x11, 0xFB, 0xC6, 0xBE, 0xCA, 0xD3 |
.byte 0xF4, 0x0B, 0x3A, 0x75, 0x04, 0xF7, 0x24, 0x82, 0x87, 0x8F, 0x40, 0xAB, 0xB9, 0x1D, 0x33, 0x1F |
.byte 0x55, 0xAB, 0xE4, 0xC8, 0x03, 0x39, 0x74, 0xEA, 0x7F, 0x86, 0xE5, 0x45, 0x44, 0xAF, 0x19, 0x38 |
.byte 0xBB, 0x53, 0xAE, 0xC0, 0x4A, 0xD2, 0x43, 0xD2, 0x62, 0x84, 0x7E, 0x1C, 0xA1, 0xB2, 0x3B, 0xF6 |
.byte 0x5D, 0x1F, 0xBE, 0x60, 0x59, 0x33, 0x4A, 0xD9, 0xB9, 0x30, 0x1E, 0xFE, 0xE0, 0x38, 0x37, 0x9B |
.byte 0x8C, 0xE5, 0x5C, 0xD6, 0xB7, 0x9F, 0xA9, 0x1A, 0x23, 0x28, 0x36, 0xC4, 0xDA, 0x71, 0xBB, 0x37 |
.byte 0x91, 0x7A, 0x98, 0xEB, 0xAD, 0xE2, 0xC4, 0x67, 0x13, 0xE3, 0x66, 0xF3, 0x1B, 0x9D, 0x8E, 0xA7 |
.byte 0x82, 0xEB, 0x7E, 0x3A, 0x8B, 0x28, 0x54, 0xAF, 0x50, 0x8B, 0x73, 0x2A, 0xFC, 0x2F, 0x61, 0x8E |
.byte 0xA9, 0xF9, 0x79, 0x57, 0xDC, 0x3D, 0xBF, 0xEF, 0x20, 0x25, 0xE2, 0x3C, 0xC3, 0x71, 0xE3, 0x45 |
.byte 0x5D, 0x62, 0x80, 0xE8, 0x8A, 0xD4, 0x97, 0xDB, 0x5F, 0x0B, 0x05, 0x5C, 0x3B, 0x67, 0xEA, 0xE4 |
.byte 0x61, 0x64, 0x3C, 0x3D, 0xA1, 0xFC, 0x2D, 0xC2, 0x22, 0x10, 0xFF, 0xE5, 0x82, 0xE2, 0x2A, 0xDF |
.byte 0x45, 0xAA, 0xC7, 0xD0, 0x7F, 0x5F, 0xAB, 0xDF, 0x6B, 0xB0, 0x3C, 0xA6, 0x17, 0x27, 0x8B, 0x78 |
.byte 0x8B, 0xC7, 0xB6, 0x2D, 0xC4, 0xE4, 0xEF, 0xE6, 0xF4, 0xEF, 0xCB, 0x77, 0xD1, 0xF6, 0x56, 0x17 |
.byte 0xA1, 0x1E, 0xE7, 0x21, 0x7D, 0x92, 0x01, 0xE9, 0x43, 0x3D, 0x8F, 0x5B, 0x64, 0x1A, 0xD4, 0xF0 |
.byte 0xE2, 0x8A, 0x1D, 0xA6, 0x6E, 0x0D, 0x8C, 0x63, 0xFC, 0x58, 0xDA, 0xCE, 0x4F, 0x31, 0xE5, 0xF0 |
.byte 0x4F, 0xCD, 0x12, 0xCD, 0x5F, 0x13, 0xB6, 0xA3, 0x50, 0x45, 0xFE, 0xB5, 0x60, 0xD2, 0xA5, 0x42 |
.byte 0x5C, 0xC3, 0xE8, 0xCB, 0xD0, 0x75, 0x2F, 0xCC, 0xCE, 0x0A, 0x9A, 0x1D, 0x3B, 0x80, 0x0E, 0x8B |
.byte 0x4D, 0x21, 0x58, 0xAD, 0x34, 0x0F, 0x50, 0x85, 0x55, 0x4E, 0x3B, 0xB5, 0x20, 0xE1, 0xF8, 0x7D |
.byte 0xA4, 0xE1, 0x49, 0x74, 0x57, 0x79, 0x41, 0x25, 0x83, 0xDB, 0x43, 0xBF, 0x5C, 0x52, 0x4A, 0xA9 |
.byte 0x73, 0xA3, 0x57, 0xA8, 0xB2, 0xA7, 0x2E, 0x08, 0xF6, 0x69, 0xBE, 0x17, 0x4A, 0xB6, 0x95, 0xEE |
.byte 0x98, 0xDE, 0x63, 0xEF, 0x57, 0xA4, 0x15, 0xDB, 0x80, 0x59, 0x9A, 0xDC, 0xAC, 0xE5, 0x86, 0x20 |
.byte 0x88, 0xDD, 0xC8, 0x3B, 0x85, 0xF7, 0x43, 0x7C, 0x60, 0x02, 0x93, 0xAB, 0xB9, 0x28, 0x9A, 0x51 |
.byte 0x07, 0xFD, 0x40, 0x5F, 0xA2, 0x56, 0x3A, 0x22, 0xAF, 0xD5, 0xFE, 0x5B, 0xBA, 0x85, 0x7B, 0x43 |
.byte 0x63, 0x44, 0x7E, 0xE8, 0x3B, 0xC2, 0x65, 0x9C, 0xC5, 0xF8, 0x48, 0x7E, 0x21, 0xE2, 0xCF, 0x28 |
.byte 0xE0, 0x10, 0x87, 0x82, 0x67, 0xC2, 0xA4, 0x16, 0x98, 0xA3, 0x72, 0x53, 0x29, 0xEE, 0x96, 0x8C |
.byte 0x32, 0x15, 0x75, 0x6E, 0xD7, 0xDA, 0x0B, 0x9C, 0xD3, 0x53, 0x1B, 0xF4, 0x35, 0xEB, 0x1C, 0x15 |
.byte 0xFC, 0xA4, 0x98, 0x63, 0x67, 0x3D, 0x7A, 0xFF, 0xE0, 0xEC, 0x52, 0x0A, 0xDA, 0xE9, 0x96, 0x0D |
.byte 0xFE, 0x0B, 0x7C, 0xD5, 0xE6, 0x87, 0x72, 0xB9, 0xDA, 0x8E, 0xAD, 0x0F, 0x79, 0xCA, 0x25, 0x75 |
.byte 0x6E, 0xBE, 0xD8, 0xD5, 0xFB, 0x52, 0xD5, 0xDC, 0x3E, 0x27, 0xE6, 0x19, 0x10, 0x7D, 0x27, 0x0E |
.byte 0x88, 0xA3, 0xE4, 0x6E, 0x2A, 0x57, 0x28, 0x05, 0xE5, 0xD5, 0x15, 0x5E, 0x9F, 0x3A, 0xD4, 0x0D |
.byte 0xF9, 0xAC, 0xE3, 0xF4, 0xFE, 0xB8, 0xD1, 0x3D, 0xE0, 0xB8, 0x57, 0xF1, 0x35, 0x7F, 0x00, 0xBD |
.byte 0x22, 0xE5, 0x2C, 0x4D, 0x3C, 0x54, 0x52, 0x22, 0x2A, 0x68, 0x81, 0xC9, 0xA3, 0x55, 0xD7, 0x9C |
.byte 0x02, 0xBA, 0x91, 0x00, 0x73, 0x62, 0x3E, 0x54, 0x1A, 0x96, 0x45, 0x4F, 0x15, 0x45, 0x0D, 0x38 |
.byte 0x2B, 0x3A, 0x85, 0x68, 0x8F, 0xD8, 0x8A, 0xB9, 0x40, 0x0C, 0x83, 0xE3, 0x61, 0x5B, 0x80, 0x63 |
.byte 0x15, 0x11, 0x64, 0x89, 0x73, 0xA3, 0xDD, 0x8E, 0x3A, 0x23, 0xDE, 0x4F, 0x69, 0xEC, 0x87, 0x94 |
.byte 0x27, 0x0D, 0xFC, 0xB7, 0xE6, 0x87, 0x71, 0x27, 0x93, 0xF4, 0x0B, 0xF5, 0x4F, 0x8C, 0x59, 0x65 |
.byte 0x9D, 0xBE, 0xEF, 0x11, 0x62, 0xCD, 0xA0, 0x9C, 0xF0, 0x7E, 0xEC, 0x59, 0x6B, 0x74, 0xEE, 0x92 |
.byte 0x81, 0xEB, 0x49, 0x68, 0x72, 0xBA, 0x90, 0x06, 0xAF, 0x9C, 0xFC, 0xFE, 0x28, 0x56, 0x64, 0xC5 |
.byte 0x14, 0x53, 0xD7, 0x76, 0x20, 0x77, 0x13, 0x11, 0xF5, 0xFF, 0x6B, 0x61, 0x73, 0x59, 0xF3, 0xF5 |
.byte 0x45, 0x3D, 0x5E, 0xB7, 0xF7, 0xEE, 0xBE, 0xA6, 0x8B, 0xBB, 0xA5, 0xB3, 0x11, 0x09, 0x79, 0x25 |
.byte 0x5D, 0x50, 0x9C, 0x7D, 0xC7, 0xAF, 0x8F, 0xBD, 0xAE, 0xFA, 0x1E, 0x22, 0x53, 0x12, 0x17, 0x98 |
.byte 0x4F, 0x75, 0x50, 0x46, 0x63, 0x0F, 0xED, 0xEE, 0xCA, 0x92, 0xA2, 0xDC, 0x9C, 0x1B, 0x01, 0xF9 |
.byte 0x6B, 0x9E, 0x77, 0x33, 0x4E, 0x06, 0xF1, 0xFC, 0x00, 0x0F, 0x1F, 0x54, 0x21, 0x36, 0xED, 0x70 |
.byte 0xAB, 0x3D, 0xB7, 0x0F, 0x4D, 0xA4, 0xFE, 0x18, 0x37, 0xA0, 0xF4, 0xD3, 0xBC, 0xF5, 0xCD, 0x28 |
.byte 0x94, 0x44, 0x5C, 0xE2, 0x4B, 0x4D, 0xDF, 0x4C, 0x5C, 0xFE, 0xA0, 0x7E, 0x34, 0x8D, 0xEE, 0xE0 |
.byte 0xCB, 0xA6, 0xF0, 0x18, 0x4A, 0xEE, 0x30, 0x81, 0x8F, 0x25, 0x55, 0x4C, 0x1B, 0x22, 0x74, 0xAF |
.byte 0x67, 0xD0, 0x91, 0xB2, 0x1D, 0x71, 0xFE, 0x7A, 0x70, 0x9F, 0xF8, 0xA4, 0x2C, 0xE7, 0x85, 0xF8 |
.byte 0x8E, 0x75, 0x11, 0xD8, 0x64, 0x42, 0x5A, 0xF3, 0x67, 0xB0, 0x3F, 0x82, 0xD3, 0xB4, 0x31, 0x3A |
.byte 0x85, 0xC3, 0xED, 0xA3, 0x35, 0xEC, 0x1D, 0xA5, 0x8B, 0x16, 0x4A, 0xB8, 0xFE, 0xCF, 0xB0, 0x8C |
.byte 0x45, 0xC2, 0x65, 0xA9, 0x04, 0xC0, 0x9D, 0x6B, 0x71, 0xDD, 0xED, 0x44, 0x91, 0x1F, 0x7E, 0x16 |
.byte 0xE3, 0x6B, 0xB9, 0x18, 0x57, 0xD7, 0xBD, 0xE3, 0xEE, 0x07, 0x9B, 0xEC, 0xD7, 0x4C, 0x79, 0x1C |
.byte 0x0F, 0xDF, 0xC5, 0x13, 0xA0, 0x63, 0x7F, 0x11, 0x40, 0x6D, 0x55, 0xD1, 0x8C, 0xD4, 0xE8, 0x6F |
.byte 0x3F, 0xA2, 0x87, 0x97, 0x79, 0x44, 0x7B, 0x68, 0x4C, 0x17, 0x54, 0x23, 0x64, 0xCE, 0x3F, 0x73 |
.byte 0xAE, 0x05, 0x86, 0x4E, 0x68, 0x06, 0x60, 0xA8, 0x73, 0xB6, 0x7A, 0xFF, 0x8A, 0x62, 0x6F, 0xCA |
.byte 0x04, 0xF6, 0x62, 0x7E, 0x3B, 0xDD, 0xE6, 0x87, 0xF4, 0x3B, 0xAB, 0x58, 0x0A, 0xEA, 0xCC, 0xB8 |
.byte 0xEF, 0x53, 0x07, 0x58, 0x59, 0x68, 0x00, 0xCC, 0x1E, 0x7A, 0xCC, 0xA8, 0xDD, 0x3B, 0x72, 0xE2 |
.byte 0x31, 0xD4, 0x60, 0x6D, 0xB2, 0x47, 0xF5, 0xA6, 0x83, 0xA0, 0xFF, 0x8D, 0x8B, 0xCC, 0x46, 0x7A |
.byte 0x1F, 0x4E, 0xD3, 0x78, 0xB6, 0xD3, 0x45, 0xD5, 0x4E, 0x11, 0x7D, 0x2C, 0x4C, 0xF0, 0x0E, 0x7E |
.byte 0xC4, 0x6F, 0xEC, 0x77, 0xB6, 0xE1, 0x1D, 0x39, 0x82, 0x1D, 0xC7, 0x0D, 0xE9, 0x0D, 0x88, 0x09 |
.byte 0x5C, 0x5B, 0x81, 0x12, 0x2F, 0xC7, 0xE7, 0x7D, 0xD8, 0x65, 0xA9, 0x25, 0x55, 0xB8, 0xA3, 0x1A |
.byte 0x27, 0x90, 0x91, 0xDD, 0x71, 0xAF, 0x17, 0xF3, 0xCD, 0xDE, 0x00, 0xB6, 0xEC, 0x88, 0xBF, 0x48 |
.byte 0xE4, 0x41, 0x5B, 0x13, 0x09, 0x43, 0x90, 0xE1, 0xA8, 0x3A, 0x07, 0xFE, 0xF3, 0xAB, 0x18, 0x1A |
.byte 0x3B, 0xAA, 0xF8, 0xAC, 0x59, 0x0F, 0xA0, 0x26, 0xEE, 0xA1, 0xDD, 0xDB, 0x2A, 0x9D, 0x23, 0x0E |
.byte 0xDF, 0x7E, 0x21, 0xE8, 0xC2, 0xB2, 0xCA, 0x6A, 0xED, 0xD1, 0x68, 0xE0, 0x7C, 0x81, 0xFA, 0xB7 |
.byte 0x2B, 0xF3, 0x64, 0x85, 0x02, 0x04, 0xAB, 0xF1, 0xA6, 0x89, 0xCC, 0xD1, 0x26, 0xF0, 0xDF, 0x05 |
.byte 0x6F, 0x01, 0xEE, 0x31, 0xB4, 0xB8, 0x9B, 0xA1, 0x89, 0x04, 0x82, 0x05, 0x85, 0x7C, 0xBC, 0xB1 |
.byte 0x6F, 0x20, 0x36, 0x72, 0x25, 0xE1, 0x64, 0xCB, 0x6B, 0x30, 0x9C, 0x91, 0x20, 0x7C, 0x97, 0x90 |
.byte 0x7D, 0x85, 0xC1, 0x32, 0x3D, 0x5D, 0xD3, 0xC6, 0x61, 0x55, 0xCC, 0xE7, 0xD2, 0x88, 0x98, 0x42 |
.byte 0xA8, 0xCE, 0xB5, 0xCE, 0xB0, 0x19, 0x9A, 0x1B, 0x49, 0x37, 0xAD, 0x6A, 0xB3, 0x45, 0xFA, 0x31 |
.byte 0xCA, 0xBC, 0x63, 0x08, 0x19, 0x37, 0xCF, 0x7B, 0x8D, 0x9B, 0x62, 0x5F, 0x23, 0xFB, 0xA1, 0xCC |
.byte 0xCA, 0x57, 0x9A, 0x7A, 0x70, 0x35, 0x96, 0xBA, 0x6C, 0x44, 0x24, 0x20, 0x89, 0x1F, 0x52, 0x53 |
.byte 0xDC, 0xB6, 0x5C, 0xF5, 0xEE, 0x2B, 0x71, 0x7B, 0xC6, 0xD3, 0xDA, 0xEA, 0xCF, 0x7C, 0xB6, 0x99 |
.byte 0xD3, 0x51, 0x14, 0x44, 0x86, 0xAA, 0xFE, 0xF3, 0xEF, 0x23, 0x14, 0x78, 0x43, 0x66, 0xCC, 0x1F |
.byte 0x1D, 0x28, 0x15, 0x0B, 0x54, 0x86, 0x86, 0x1A, 0x5A, 0x61, 0x04, 0x29, 0xDE, 0xBB, 0xC3, 0xB2 |
.byte 0x0D, 0xD7, 0xF6, 0x94, 0x82, 0xF4, 0x87, 0x71, 0x17, 0x9C, 0xE9, 0x5A, 0x03, 0xB6, 0x7A, 0x20 |
.byte 0xDE, 0x8F, 0x2C, 0x33, 0x16, 0xB3, 0x4D, 0x70, 0x15, 0x52, 0x9A, 0xF3, 0x0E, 0x5D, 0xA6, 0x1B |
.byte 0x35, 0x9C, 0xAF, 0xB7, 0x90, 0x37, 0x29, 0xA8, 0xD3, 0x12, 0x03, 0xD7, 0xC9, 0x7D, 0xF7, 0xA8 |
.byte 0x0D, 0x24, 0xDB, 0x23, 0xD7, 0x28, 0x94, 0xED, 0x7B, 0x2F, 0xE0, 0x89, 0x8D, 0x86, 0xA5, 0xC2 |
.byte 0x23, 0x54, 0x79, 0xB4, 0x8C, 0xA2, 0x5C, 0x60, 0xB5, 0x60, 0x37, 0x7F, 0xDE, 0x2F, 0x27, 0xEB |
.byte 0x53, 0x02, 0x0F, 0x2B, 0x2B, 0xA4, 0x18, 0xA6, 0xD3, 0xF9, 0x30, 0x60, 0x7F, 0xD5, 0x22, 0xA3 |
.byte 0x2A, 0x9C, 0x57, 0xB7, 0x3F, 0xB4, 0x17, 0xF5, 0x14, 0x4E, 0x74, 0xF2, 0x7E, 0x9B, 0xDE, 0xD1 |
.byte 0x9E, 0xED, 0xFD, 0xC9, 0x91, 0x15, 0x70, 0x65, 0x0E, 0xA1, 0xC5, 0x8E, 0x77, 0xE8, 0x31, 0xA2 |
.byte 0x84, 0x89, 0x59, 0xC4, 0x3D, 0x71, 0xB9, 0x51, 0xC0, 0x2D, 0x44, 0x3E, 0xC9, 0x22, 0x10, 0x67 |
.byte 0x10, 0x0D, 0x31, 0xA2, 0x22, 0xA2, 0x07, 0x31, 0x43, 0xCC, 0xC0, 0xBB, 0xB5, 0xF2, 0x5D, 0x39 |
.byte 0x7B, 0xB6, 0xFD, 0xB8, 0x27, 0xB7, 0x0A, 0xE7, 0xE5, 0x4E, 0x26, 0xAE, 0x70, 0x36, 0x16, 0x81 |
.byte 0x43, 0x48, 0x23, 0x66, 0xEA, 0x2B, 0x98, 0x2E, 0xF8, 0x58, 0xE9, 0xAD, 0x4A, 0x46, 0xE6, 0xC6 |
.byte 0xFD, 0xE4, 0x7E, 0x25, 0x9B, 0x88, 0x0C, 0x80, 0xD6, 0x33, 0x2F, 0x47, 0x69, 0x45, 0xC9, 0xAC |
.byte 0x8E, 0xEC, 0x13, 0x78, 0x17, 0xAB, 0xA6, 0x0F, 0x04, 0x8F, 0xBD, 0x4F, 0xD6, 0xA3, 0x15, 0xD3 |
.byte 0x88, 0x93, 0xF8, 0x24, 0x1C, 0x05, 0xA5, 0xF3, 0x38, 0xD4, 0x3B, 0xA1, 0x1A, 0x04, 0x4E, 0xA8 |
.byte 0xF0, 0x61, 0x21, 0x08, 0x0D, 0xC7, 0x18, 0x11, 0x57, 0xD5, 0x60, 0x2D, 0x79, 0x75, 0x01, 0x02 |
.byte 0x09, 0xF9, 0x26, 0x26, 0xFF, 0xCB, 0x19, 0x37, 0xA0, 0x54, 0xD8, 0xBA, 0x58, 0x27, 0x63, 0x49 |
.byte 0x89, 0x84, 0x52, 0x96, 0x4C, 0x6B, 0xA8, 0xA3, 0x40, 0x08, 0xD1, 0xBA, 0x7E, 0xD2, 0xBC, 0x88 |
.byte 0xCB, 0xE2, 0xAE, 0xCA, 0xAE, 0xC7, 0x02, 0x4E, 0x1C, 0xDB, 0x09, 0x74, 0x02, 0x6C, 0xBE, 0x8B |
.byte 0xF1, 0x10, 0x22, 0x3D, 0x7B, 0xCA, 0xE1, 0xBC, 0xD3, 0xB2, 0x76, 0x52, 0x84, 0x33, 0xDA, 0x50 |
.byte 0x16, 0x89, 0x1B, 0xC4, 0x51, 0x1D, 0x13, 0x6D, 0xF8, 0x1C, 0xE2, 0xFB, 0x89, 0xA0, 0x87, 0x7B |
.byte 0xB1, 0xA9, 0xB8, 0x2D, 0x74, 0x99, 0xE9, 0x47, 0x4C, 0x60, 0x99, 0xD0, 0x93, 0x74, 0x21, 0xA9 |
.byte 0xFD, 0x3C, 0x6E, 0x4E, 0x59, 0x81, 0xBC, 0x52, 0x9E, 0x9E, 0x4E, 0x27, 0x3F, 0xD5, 0xA2, 0xF1 |
.byte 0x7F, 0x5B, 0x1E, 0xF3, 0xF5, 0x08, 0x3B, 0x41, 0x68, 0xD4, 0x12, 0xFC, 0x49, 0x33, 0xA6, 0x46 |
.byte 0x70, 0x15, 0x95, 0xCA, 0x96, 0x51, 0x1C, 0x34, 0xF0, 0x6B, 0x5C, 0x30, 0x40, 0xFF, 0x21, 0xBF |
.byte 0x5B, 0x40, 0xB2, 0x50, 0x48, 0xEE, 0x92, 0xB0, 0xC3, 0xA5, 0xAD, 0x0C, 0xD9, 0x54, 0x53, 0x49 |
.byte 0x69, 0xE8, 0x13, 0xFF, 0x3A, 0x30, 0x34, 0x2B, 0x9B, 0x91, 0x5B, 0xDC, 0x91, 0x7D, 0x9B, 0xEC |
.byte 0xBD, 0x4E, 0x3C, 0x05, 0x3C, 0xCF, 0xB6, 0xFF, 0x74, 0x64, 0x0C, 0x4E, 0xB8, 0x5F, 0x97, 0x21 |
.byte 0x48, 0xAB, 0x21, 0x83, 0xDC, 0x56, 0xAE, 0x77, 0xE8, 0x0A, 0x53, 0x79, 0x88, 0xEF, 0x65, 0x46 |
.byte 0x3E, 0xA2, 0x4B, 0x7A, 0x72, 0x02, 0x7A, 0xE7, 0x66, 0x86, 0x35, 0x1F, 0xE6, 0xCC, 0x40, 0x2E |
.byte 0x78, 0x62, 0xB2, 0x54, 0xB9, 0x61, 0xCC, 0xA1, 0x6B, 0x1F, 0x1A, 0xF4, 0x0F, 0x80, 0x3A, 0x4D |
.byte 0x22, 0x86, 0xC8, 0x94, 0x88, 0x42, 0x7B, 0xEF, 0xC9, 0xB0, 0x0E, 0xAF, 0x7D, 0x4F, 0xDE, 0xF6 |
.byte 0xB2, 0x90, 0x4A, 0x6B, 0xF1, 0x16, 0x0C, 0x5D, 0x36, 0x27, 0x51, 0x45, 0xA7, 0x8C, 0x92, 0xCA |
.byte 0x12, 0x5A, 0x5E, 0x9B, 0x9D, 0xDA, 0x8A, 0x67, 0x8B, 0x99, 0x16, 0x09, 0xE8, 0xF5, 0xFF, 0x9A |
.byte 0x85, 0x49, 0x06, 0x77, 0x60, 0x13, 0xD4, 0x96, 0x3B, 0x26, 0xDB, 0xE2, 0xB2, 0x6E, 0xAD, 0xC5 |
.byte 0xC9, 0x0B, 0x60, 0x67, 0xE6, 0xEB, 0xCE, 0x71, 0x84, 0xE5, 0x7B, 0x6D, 0xDA, 0x7A, 0x08, 0x60 |
.byte 0xC4, 0x0E, 0xD7, 0x24, 0x22, 0xAB, 0xBA, 0x5D, 0xD2, 0x96, 0x3F, 0x85, 0x05, 0xEC, 0x4A, 0xCF |
.byte 0xF8, 0xAB, 0x36, 0xDF, 0x96, 0x04, 0x51, 0x1B, 0xE9, 0xCC, 0x88, 0xC3, 0x46, 0x90, 0x23, 0x0A |
.byte 0x9F, 0xFB, 0x2E, 0xC1, 0xA7, 0xE9, 0x1E, 0x79, 0x80, 0x5E, 0xFF, 0x85, 0x4B, 0x4A, 0x54, 0x44 |
.byte 0xF5, 0x8B, 0x23, 0x8C, 0x8F, 0x74, 0xA8, 0x79, 0x41, 0x30, 0x3D, 0x87, 0xC1, 0x61, 0x92, 0x61 |
.byte 0x5C, 0xC1, 0x22, 0x03, 0xAB, 0x41, 0x7D, 0x2B, 0xA0, 0x7C, 0xB1, 0xEB, 0xC6, 0x06, 0x2F, 0xBC |
.byte 0x91, 0x53, 0x49, 0x21, 0xC8, 0xF1, 0x9A, 0x09, 0x22, 0xD7, 0x91, 0xE4, 0x38, 0x24, 0x45, 0x94 |
.byte 0xE5, 0x68, 0x98, 0x90, 0xAA, 0x15, 0xBB, 0x4A, 0x92, 0x6D, 0x35, 0x59, 0x73, 0x65, 0x16, 0x05 |
.byte 0xB9, 0x5F, 0x26, 0x81, 0x51, 0xC0, 0x8B, 0x73, 0x97, 0x1D, 0x57, 0xD0, 0x41, 0x9D, 0x64, 0x26 |
.byte 0x05, 0xFD, 0xB7, 0xB0, 0x12, 0x73, 0xFA, 0xA5, 0xE0, 0x2F, 0xFE, 0x54, 0x95, 0x14, 0x59, 0x4E |
.byte 0x74, 0x7F, 0xD0, 0xC5, 0x40, 0x5C, 0x38, 0xD8, 0x79, 0x90, 0xA8, 0xBB, 0x2E, 0x0D, 0xE2, 0x34 |
.byte 0x0A, 0x99, 0xE4, 0x1D, 0x0C, 0xDE, 0xC2, 0xED, 0x0E, 0xC1, 0x41, 0xA3, 0xD6, 0x9A, 0xF2, 0x4A |
.byte 0x1A, 0xC3, 0x0F, 0x5A, 0x20, 0x48, 0x33, 0x99, 0xD9, 0xDB, 0x55, 0x07, 0xE9, 0x37, 0x3B, 0xF4 |
.byte 0xD0, 0x20, 0x11, 0xDC, 0xFE, 0xD4, 0xC9, 0x0D, 0x96, 0x0B, 0xB0, 0x6C, 0xA5, 0xA3, 0xB7, 0xC0 |
.byte 0x67, 0xC7, 0x1B, 0x87, 0x0F, 0x4E, 0x21, 0xE9, 0x2A, 0x76, 0xF1, 0x13, 0xAD, 0x2D, 0x08, 0x7D |
.byte 0x4D, 0x1A, 0x5A, 0x4B, 0xEE, 0x24, 0x58, 0x85, 0x2F, 0x09, 0xF2, 0xD5, 0xAD, 0xA9, 0x95, 0x14 |
.byte 0x70, 0xB1, 0x9C, 0x80, 0x00, 0xBD, 0x69, 0x2A, 0x33, 0x5B, 0x3E, 0xE0, 0x88, 0x46, 0x5E, 0xD5 |
.byte 0x60, 0xB9, 0x21, 0x4F, 0xDD, 0x7A, 0xD5, 0x0C, 0x84, 0xC7, 0xE2, 0x32, 0x70, 0x78, 0x47, 0xE0 |
.byte 0x29, 0xE3, 0x61, 0x29, 0xA0, 0xCB, 0x54, 0xD4, 0x26, 0x93, 0xB5, 0xAE, 0xDA, 0x13, 0x84, 0x3B |
.byte 0xCC, 0xA6, 0x8B, 0xAA, 0x21, 0x60, 0xB6, 0xA5, 0x27, 0x99, 0xD8, 0x97, 0x11, 0x1F, 0x78, 0x3A |
.byte 0x02, 0xDA, 0x64, 0xA3, 0xA5, 0xB9, 0x77, 0xCB, 0x4D, 0x2D, 0x7A, 0x27, 0x40, 0xFF, 0x63, 0x0D |
.byte 0xA5, 0xEE, 0xB7, 0xC7, 0x4E, 0x6E, 0x6C, 0x76, 0x07, 0x45, 0x0E, 0x19, 0x64, 0x87, 0x54, 0x67 |
.byte 0x61, 0xB9, 0x0A, 0x06, 0x72, 0x82, 0xD2, 0xBF, 0xB0, 0x4D, 0xE7, 0xF0, 0x4D, 0x4A, 0xFE, 0xF3 |
.byte 0x39, 0xB6, 0xBA, 0x87, 0x25, 0x27, 0xFE, 0x2C, 0x6C, 0x0C, 0x46, 0xD0, 0x94, 0x9A, 0x38, 0xF5 |
.byte 0x53, 0x43, 0xFC, 0xC5, 0xC6, 0xCF, 0x85, 0x76, 0x1D, 0x6D, 0x67, 0x6A, 0xB7, 0x65, 0x5D, 0xF0 |
.byte 0x1C, 0x18, 0x78, 0x41, 0x3F, 0x77, 0x6E, 0xAB, 0x84, 0xB4, 0x7C, 0x18, 0x4E, 0xB4, 0x0E, 0xA1 |
.byte 0xF8, 0x0A, 0x67, 0xBE, 0xDA, 0xED, 0x34, 0xF7, 0x5A, 0x9B, 0x62, 0x12, 0x01, 0xC0, 0x03, 0x1D |
.byte 0xD8, 0x7C, 0x5E, 0x18, 0xF3, 0xCD, 0xC4, 0x77, 0x81, 0x40, 0x8F, 0xD0, 0xF5, 0x9E, 0x72, 0xEE |
.byte 0xA8, 0xDA, 0xAC, 0x83, 0xC7, 0xE0, 0x7A, 0x22, 0x7C, 0xDC, 0x35, 0x7D, 0x9D, 0x39, 0x9A, 0x75 |
.byte 0xB5, 0xF9, 0x8D, 0xA8, 0xC6, 0x52, 0x20, 0x48, 0x93, 0xB0, 0x18, 0x89, 0x4E, 0x8B, 0x77, 0xF7 |
.byte 0x65, 0x23, 0x7A, 0x2D, 0x03, 0xF5, 0x4F, 0x7F, 0xD2, 0x85, 0xFD, 0x6F, 0xBE, 0x97, 0xE4, 0x73 |
.byte 0x91, 0x72, 0x1C, 0x58, 0xC4, 0x3D, 0xA1, 0x58, 0xED, 0xBA, 0xE1, 0x3C, 0x45, 0x58, 0x33, 0xAA |
.byte 0x7B, 0xAE, 0xD7, 0x7F, 0xA3, 0x27, 0xFF, 0x75, 0xAC, 0xFC, 0xE4, 0x6B, 0x94, 0xC9, 0xDE, 0x25 |
.byte 0x3C, 0xFB, 0x7E, 0x01, 0x38, 0x1F, 0x59, 0x26, 0xDA, 0x3A, 0x63, 0x1F, 0x92, 0x96, 0xC9, 0x0E |
.byte 0x45, 0xA1, 0x8D, 0xE8, 0xC8, 0x8C, 0x5D, 0x75, 0x88, 0x42, 0xE0, 0x1C, 0x0B, 0xBF, 0x42, 0x48 |
.byte 0xBA, 0xC1, 0x49, 0xF3, 0xE1, 0xA2, 0x1A, 0xBB, 0xDD, 0x7D, 0xDA, 0x6F, 0x13, 0xA4, 0x7D, 0x58 |
.byte 0x45, 0x0B, 0x41, 0x0E, 0x97, 0x9F, 0x83, 0x20, 0xE1, 0x64, 0x3D, 0xED, 0x23, 0x7F, 0x35, 0xDE |
.byte 0x40, 0x7E, 0xD1, 0x22, 0x21, 0xEB, 0xDD, 0xFE, 0x68, 0xB8, 0x6E, 0x7C, 0x5C, 0xEC, 0xD5, 0xA2 |
.byte 0xF7, 0x17, 0xB0, 0x8F, 0xB6, 0x34, 0xAF, 0x97, 0x98, 0xED, 0x85, 0xBC, 0x6C, 0xBA, 0x9A, 0xAD |
.byte 0x39, 0x6C, 0xCF, 0x5A, 0x57, 0xAD, 0x59, 0xC0, 0x65, 0xC7, 0x3D, 0xC2, 0xB4, 0x13, 0x64, 0xAC |
.byte 0x2A, 0x15, 0x3B, 0xE0, 0x4A, 0xEB, 0x78, 0xE3, 0xD8, 0xFD, 0x9F, 0x45, 0xB8, 0x39, 0xF3, 0xF1 |
.byte 0xA5, 0xC3, 0x4C, 0xFD, 0x70, 0xA5, 0xBE, 0xD6, 0x6D, 0xFC, 0x98, 0x22, 0x0F, 0xFD, 0xCE, 0x3A |
.byte 0x13, 0x0A, 0x1A, 0x5D, 0xF5, 0x93, 0x40, 0xCE, 0x90, 0xDF, 0x14, 0x49, 0x19, 0x07, 0x3A, 0xBF |
.byte 0xCA, 0x87, 0xBD, 0x3A, 0x2D, 0x7B, 0x11, 0x9A, 0x78, 0xA9, 0xBD, 0x87, 0xA7, 0x8B, 0xC1, 0xBA |
.byte 0x95, 0xDC, 0x18, 0x8B, 0x6F, 0x58, 0x5A, 0x00, 0x38, 0x6E, 0x49, 0x52, 0x75, 0x84, 0x11, 0x40 |
.byte 0x0B, 0xCF, 0x7A, 0x38, 0x4B, 0x8C, 0xD3, 0xC3, 0x36, 0x90, 0x4B, 0xDD, 0x1C, 0x0D, 0x98, 0xB2 |
.byte 0xE9, 0xB0, 0x3E, 0x59, 0x09, 0x98, 0x5A, 0x42, 0x07, 0xA3, 0x94, 0x7D, 0x28, 0xA6, 0xBD, 0x33 |
.byte 0x76, 0x37, 0x6C, 0xC1, 0xC4, 0x40, 0x84, 0xFA, 0xD1, 0xD0, 0xD7, 0xED, 0xDD, 0x6F, 0xA0, 0xC6 |
.byte 0x20, 0xDE, 0x20, 0x2A, 0x77, 0x7A, 0x6C, 0x7F, 0x1E, 0x01, 0xFC, 0x46, 0xA8, 0xB9, 0x7A, 0x1E |
.byte 0xF1, 0xE7, 0xE0, 0xB5, 0x27, 0x65, 0xAF, 0xF8, 0x35, 0x87, 0xE6, 0x12, 0xF7, 0x86, 0xD9, 0x17 |
.byte 0x65, 0xFA, 0x41, 0xDD, 0x74, 0xAE, 0x5C, 0x92, 0xB0, 0x59, 0xD9, 0x59, 0x12, 0x53, 0x78, 0x03 |
.byte 0x3A, 0x58, 0xB9, 0x62, 0xBD, 0x68, 0x5A, 0xF3, 0xF0, 0x41, 0x06, 0xE7, 0xC8, 0xE0, 0xFE, 0x2E |
.byte 0xDA, 0x40, 0x0B, 0x4E, 0xEF, 0x68, 0xE1, 0x9F, 0xC1, 0xBA, 0xF8, 0xD4, 0x0E, 0x70, 0xD8, 0x49 |
.byte 0xC9, 0x91, 0xAB, 0x87, 0xFA, 0x06, 0x7A, 0xEA, 0x48, 0x81, 0xD1, 0x10, 0x61, 0xD0, 0x3E, 0x3B |
.byte 0x11, 0x4A, 0x8A, 0x00, 0xB3, 0x6C, 0xA0, 0x75, 0x27, 0x99, 0x49, 0x36, 0x09, 0x21, 0x7F, 0xD3 |
.byte 0xB3, 0x2B, 0x5A, 0xAE, 0x32, 0xD5, 0x98, 0x7A, 0x56, 0x6A, 0x8B, 0xB7, 0x3B, 0xC9, 0xF3, 0x4C |
.byte 0x14, 0x7E, 0x4D, 0xC7, 0xEB, 0xED, 0x3C, 0x12, 0x86, 0x86, 0x48, 0x90, 0xA7, 0xC8, 0x63, 0x5B |
.byte 0xF4, 0xBE, 0x09, 0x26, 0x93, 0xA2, 0xA1, 0xEA, 0x0D, 0x2C, 0xA1, 0x48, 0xF6, 0x95, 0x94, 0x0B |
.byte 0x14, 0xE1, 0xD2, 0xFF, 0xCF, 0x0F, 0x11, 0x55, 0x95, 0x5A, 0xE6, 0x3D, 0x23, 0x49, 0x98, 0x17 |
.byte 0x08, 0xA2, 0x3E, 0x9B, 0x45, 0xE0, 0x85, 0x52, 0x0D, 0x27, 0x9A, 0x03, 0xBD, 0x2F, 0x0E, 0xD1 |
.byte 0x11, 0xE1, 0xD0, 0xE0, 0xF0, 0xE2, 0x35, 0x86, 0x3C, 0x1B, 0xC3, 0x5F, 0x65, 0x5C, 0x77, 0x6E |
.byte 0xFF, 0xB5, 0x09, 0x44, 0x96, 0x8F, 0x96, 0xA3, 0xB7, 0x31, 0xA7, 0x74, 0x60, 0xB6, 0x45, 0x71 |
.byte 0x97, 0x16, 0x51, 0x88, 0xF8, 0x87, 0x0E, 0x35, 0xA3, 0xD2, 0x95, 0x09, 0x2F, 0x0C, 0x77, 0x2E |
.byte 0xC2, 0x81, 0x73, 0x59, 0x10, 0x09, 0xFC, 0xC7, 0x3A, 0xA3, 0x3C, 0x9B, 0x59, 0x82, 0x0C, 0xF1 |
.byte 0x98, 0x5D, 0x79, 0x91, 0xE5, 0x88, 0xC7, 0x88, 0x5B, 0x5C, 0x91, 0x8A, 0x69, 0x09, 0xB9, 0x2C |
.byte 0x8A, 0x2C, 0x85, 0x9A, 0x35, 0x81, 0x62, 0x70, 0x25, 0x9F, 0x0B, 0x7F, 0x21, 0x18, 0x70, 0xBA |
.byte 0x75, 0xEA, 0x4B, 0x5B, 0x72, 0x12, 0xE3, 0xCD, 0x6F, 0x75, 0x58, 0xD9, 0x7E, 0x11, 0x05, 0x09 |
.byte 0x3D, 0x8B, 0xA3, 0x73, 0x0D, 0x06, 0xE4, 0x32, 0xA5, 0xEF, 0xB1, 0xC7, 0x07, 0x21, 0x81, 0x7D |
.byte 0x0B, 0xCD, 0xD9, 0x7E, 0xE0, 0xBC, 0x4C, 0x4F, 0x32, 0xA4, 0x28, 0xB1, 0xB5, 0x2E, 0xBA, 0xF3 |
.byte 0xB9, 0x5E, 0x66, 0xC6, 0x65, 0x4A, 0xF9, 0x0A, 0x3A, 0xAA, 0xD2, 0x42, 0xCC, 0x53, 0xC0, 0xD8 |
.byte 0x20, 0x99, 0x56, 0x00, 0x56, 0xA2, 0x50, 0x88, 0x47, 0x79, 0x3A, 0xFD, 0xA7, 0xF4, 0xF0, 0x61 |
.byte 0x52, 0x57, 0x28, 0xB7, 0xA1, 0x21, 0xC2, 0xDC, 0xCB, 0x94, 0x1F, 0x97, 0xE8, 0xE0, 0x70, 0x08 |
.byte 0x79, 0xC6, 0x09, 0xD0, 0x69, 0x59, 0x59, 0xB1, 0xD2, 0x93, 0xAE, 0x7A, 0x87, 0x9E, 0xDB, 0xDA |
.byte 0xF5, 0x03, 0x92, 0x97, 0x24, 0x55, 0x74, 0xF0, 0xEA, 0x93, 0x88, 0xD2, 0x74, 0xF8, 0xDB, 0xED |
.byte 0xBF, 0xE5, 0xBD, 0x28, 0x3F, 0x17, 0xD9, 0x12, 0xAA, 0x88, 0x8C, 0x32, 0x27, 0x68, 0x0D, 0x1C |
.byte 0x6C, 0x9F, 0xB4, 0x91, 0xF5, 0x29, 0x81, 0xDF, 0xBD, 0x0A, 0xB2, 0x31, 0x02, 0x8E, 0x1F, 0xC1 |
.byte 0x73, 0xDC, 0xEA, 0xB3, 0xF4, 0xC4, 0xC5, 0x9E, 0x4C, 0x51, 0xD0, 0x73, 0xBA, 0xDE, 0x90, 0x26 |
.byte 0x7E, 0x45, 0xB7, 0x73, 0x6E, 0x38, 0x53, 0x2C, 0x42, 0x06, 0x5D, 0x45, 0x94, 0x7C, 0x07, 0x08 |
.byte 0x59, 0xF1, 0xBB, 0x4D, 0xB6, 0x80, 0xEC, 0x03, 0xD2, 0xBD, 0x77, 0x8C, 0x9B, 0x08, 0xB2, 0x19 |
.byte 0x4D, 0x6A, 0x8D, 0xBC, 0xA2, 0xE0, 0xE8, 0xE5, 0xE6, 0x46, 0x2B, 0x7B, 0xC2, 0x32, 0x84, 0x1C |
.byte 0x24, 0x3F, 0x6A, 0xDB, 0xC0, 0x56, 0xDE, 0x93, 0x13, 0x56, 0x20, 0xAE, 0x5E, 0xD3, 0xC8, 0xAB |
.byte 0x3D, 0x55, 0x68, 0xE0, 0x35, 0x51, 0xC6, 0x1C, 0x97, 0xF1, 0x98, 0x5A, 0x24, 0x1C, 0x76, 0x49 |
.byte 0x5C, 0xE0, 0x24, 0x1D, 0x37, 0x03, 0xB0, 0x4A, 0x59, 0xD1, 0xF9, 0xB7, 0xA4, 0xC1, 0x63, 0xE1 |
.byte 0x17, 0xCB, 0xC1, 0x4D, 0x1D, 0x87, 0x69, 0xB4, 0x79, 0x02, 0x0E, 0x9D, 0x1E, 0x85, 0xE6, 0x7A |
.byte 0x66, 0x0A, 0x98, 0x9E, 0x0E, 0x49, 0xE8, 0x67, 0x1A, 0xE2, 0x1F, 0xBE, 0xA3, 0x82, 0x9F, 0xBB |
.byte 0x4E, 0x60, 0x08, 0x6B, 0xE8, 0x72, 0x20, 0x61, 0x74, 0x2F, 0xFE, 0x92, 0xB5, 0xE5, 0x0D, 0x1B |
.byte 0xF0, 0xA6, 0xB9, 0xFE, 0xEF, 0xA2, 0x66, 0x09, 0x84, 0x85, 0xC7, 0x28, 0x08, 0x67, 0xE3, 0x57 |
.byte 0xC8, 0xEC, 0xC2, 0xB0, 0x5E, 0xE3, 0x12, 0xD2, 0x12, 0x11, 0x65, 0xC7, 0xF6, 0x73, 0xE3, 0xE6 |
.byte 0x19, 0x9D, 0xE5, 0x08, 0x40, 0x4B, 0x12, 0xC5, 0xD1, 0xDA, 0xED, 0xD9, 0x41, 0xD1, 0x30, 0x09 |
.byte 0xBD, 0xF3, 0xBA, 0x1C, 0xD7, 0xCD, 0xEE, 0xE9, 0xDE, 0x54, 0xB1, 0xD4, 0xC7, 0x95, 0xBB, 0xE1 |
.byte 0x33, 0xA1, 0xEA, 0x73, 0xED, 0xFC, 0x39, 0xBE, 0xD6, 0x26, 0x98, 0x18, 0xF8, 0xC9, 0x21, 0xB6 |
.byte 0xBD, 0xDC, 0xD2, 0x94, 0xA9, 0xC1, 0x7E, 0x87, 0x16, 0x2F, 0x5C, 0xDD, 0xC5, 0x18, 0xBF, 0xF8 |
.byte 0xBA, 0xA9, 0x6C, 0xA7, 0xA5, 0xA5, 0x66, 0x7C, 0xCC, 0xFE, 0x94, 0xC5, 0xC8, 0xB6, 0x7B, 0x85 |
.byte 0x92, 0x4E, 0x19, 0x3C, 0x10, 0x97, 0xC4, 0x26, 0xC7, 0x21, 0x04, 0x8C, 0x39, 0xC3, 0x85, 0xF4 |
.byte 0x6C, 0xF2, 0x9C, 0x12, 0x97, 0x02, 0x8E, 0x64, 0x01, 0x23, 0x29, 0xC9, 0xD9, 0xA5, 0x4E, 0x6C |
.byte 0xF4, 0x68, 0xA8, 0x04, 0xFF, 0x6C, 0x2B, 0xC7, 0x8D, 0x2F, 0x54, 0xC7, 0xF2, 0xD9, 0xBB, 0x5F |
.byte 0xCB, 0x57, 0x71, 0x63, 0x5A, 0x00, 0xC8, 0x5B, 0x24, 0xF2, 0x25, 0xFD, 0x97, 0x73, 0x69, 0x8C |
.byte 0xDC, 0x11, 0x91, 0xDB, 0x7E, 0xBC, 0xA3, 0x0C, 0xEB, 0xF7, 0xD3, 0xDE, 0xD0, 0x8F, 0x3D, 0x9C |
.byte 0xE7, 0xAF, 0x00, 0x41, 0xB0, 0xC8, 0x9C, 0xD4, 0xBA, 0xC1, 0xD1, 0x52, 0x35, 0x3B, 0xDE, 0x11 |
.byte 0x4D, 0x6F, 0xED, 0xCB, 0x2C, 0x90, 0xD7, 0x17, 0x87, 0xAB, 0xF5, 0x58, 0x3A, 0x33, 0xF4, 0x21 |
.byte 0xE2, 0xF4, 0x62, 0x92, 0xBD, 0xFF, 0x67, 0x77, 0xC1, 0x38, 0xC9, 0xF7, 0x74, 0xA8, 0x09, 0xC1 |
.byte 0x18, 0xF7, 0x8D, 0x44, 0x87, 0x64, 0x5B, 0x0F, 0x10, 0x51, 0x67, 0x4A, 0x84, 0x5C, 0x6C, 0x67 |
.byte 0x51, 0xCF, 0xFA, 0x0E, 0xCF, 0x61, 0x86, 0x91, 0x9A, 0x4F, 0x88, 0x0E, 0xF8, 0x92, 0xCF, 0x10 |
.byte 0x89, 0x5D, 0x54, 0x10, 0xC1, 0xB0, 0x20, 0xD2, 0x02, 0x87, 0x1D, 0x86, 0xE3, 0x89, 0xEE, 0x35 |
.byte 0x59, 0xE8, 0x43, 0x28, 0x49, 0xC9, 0xB9, 0xE4, 0x19, 0x42, 0xF2, 0x12, 0xD5, 0xC2, 0x22, 0x5E |
.byte 0x1F, 0x77, 0x6F, 0xE1, 0x28, 0x8F, 0xB3, 0x2A, 0x16, 0xD1, 0xB0, 0xFA, 0x5A, 0x9E, 0x2F, 0xB4 |
.byte 0x87, 0x73, 0xDD, 0xD1, 0x3D, 0x97, 0xB5, 0x56, 0xD9, 0xA8, 0x69, 0xAE, 0x6B, 0x8B, 0x0D, 0x8A |
.byte 0x03, 0x7C, 0x6C, 0x2B, 0x0B, 0x20, 0x55, 0x22, 0xF1, 0x06, 0x1D, 0x4C, 0xA5, 0x4D, 0x00, 0x2C |
.byte 0xC0, 0xDD, 0xFD, 0xFE, 0x74, 0xB3, 0x55, 0x4E, 0x5C, 0xBE, 0xFD, 0xC7, 0x49, 0x0A, 0x52, 0x4C |
.byte 0x87, 0xBE, 0x78, 0x92, 0xDF, 0xCD, 0xB5, 0xD0, 0xD4, 0xD2, 0x1D, 0x79, 0x1F, 0x1E, 0xA5, 0xE0 |
.byte 0xFB, 0xA3, 0xDE, 0x70, 0x57, 0x33, 0xBF, 0xB3, 0xF1, 0xBD, 0x7A, 0x3B, 0xC8, 0xCC, 0x88, 0x4F |
.byte 0x8B, 0x00, 0xE2, 0x6A, 0xCE, 0x97, 0x3B, 0xA2, 0x69, 0x58, 0x1B, 0x89, 0x76, 0xC1, 0x69, 0x72 |
.byte 0x65, 0x47, 0xE3, 0xBD, 0x7B, 0xA3, 0x70, 0x6C, 0x60, 0xEB, 0xA7, 0x28, 0xB8, 0x2F, 0x78, 0x44 |
.byte 0x30, 0x5A, 0xAE, 0xFE, 0xF2, 0xEA, 0xA0, 0x5B, 0x43, 0xBC, 0xE5, 0xBA, 0x7D, 0x4E, 0x2D, 0xE3 |
.byte 0x96, 0x10, 0xA0, 0x11, 0xB4, 0x10, 0x7E, 0x14, 0xFC, 0x26, 0x3D, 0xB4, 0x55, 0xB5, 0xF9, 0x86 |
.byte 0x10, 0xA8, 0x84, 0x02, 0x92, 0x25, 0x5E, 0xD6, 0xE1, 0x43, 0x90, 0x5F, 0x92, 0xBD, 0x42, 0x28 |
.byte 0xCE, 0xE2, 0x3A, 0x82, 0xF3, 0xB9, 0x97, 0xF0, 0xDF, 0xD4, 0xA5, 0x35, 0x8A, 0x9E, 0xBB, 0x9A |
.byte 0x46, 0x3F, 0x9D, 0xD8, 0x64, 0xFB, 0xAE, 0x46, 0x3E, 0x3F, 0xA5, 0xD0, 0xFC, 0xE7, 0xF9, 0xCB |
.byte 0xCA, 0x34, 0x4D, 0xBD, 0xED, 0xE4, 0xAE, 0xCC, 0xB9, 0x53, 0x02, 0x43, 0xF1, 0xBD, 0xDE, 0x37 |
.byte 0xFD, 0x7B, 0x10, 0x62, 0x76, 0xBE, 0xA8, 0xB4, 0xFE, 0x4E, 0x85, 0xFA, 0x35, 0x7F, 0xC5, 0x00 |
.byte 0xB3, 0x13, 0xBE, 0xA1, 0xF7, 0x6C, 0x6D, 0xB1, 0xBF, 0x70, 0xF4, 0xB0, 0x2D, 0xD2, 0xE7, 0x2B |
.byte 0x4E, 0xF7, 0x8D, 0xC4, 0xB6, 0x36, 0x79, 0xB4, 0x84, 0xFF, 0xAF, 0xBA, 0x7E, 0x75, 0xBB, 0x31 |
.byte 0x89, 0x79, 0xD2, 0x81, 0xE5, 0x40, 0x32, 0xA5, 0xB1, 0x26, 0x55, 0xDE, 0xF9, 0x3D, 0x0A, 0x47 |
.byte 0x35, 0x98, 0x0C, 0xEC, 0xCE, 0x85, 0xA1, 0x53, 0x85, 0x51, 0x0E, 0x03, 0xC6, 0xC9, 0x35, 0x50 |
.byte 0x43, 0x08, 0xD1, 0x29, 0x49, 0x03, 0xCE, 0xFA, 0x2A, 0x24, 0xD9, 0x24, 0x61, 0xE3, 0x6C, 0x97 |
.byte 0x7B, 0x78, 0x83, 0x4A, 0xFE, 0x24, 0x9E, 0x83, 0x75, 0xAD, 0x86, 0x3C, 0x77, 0xBC, 0x8C, 0xBA |
.byte 0xC4, 0x5D, 0xE4, 0x0D, 0x61, 0xB2, 0x07, 0x8B, 0xD6, 0xE0, 0xB0, 0x38, 0xC4, 0x1C, 0xCF, 0x40 |
.byte 0x94, 0x52, 0x8B, 0x93, 0x76, 0x29, 0x17, 0xEC, 0xD7, 0x9E, 0x29, 0x4E, 0x5A, 0xB5, 0x09, 0x1E |
.byte 0x13, 0xED, 0x2C, 0x74, 0x9F, 0x33, 0x00, 0x76, 0x14, 0xB1, 0xAE, 0xD9, 0xCD, 0x7D, 0x19, 0x62 |
.byte 0xD0, 0xA4, 0xF5, 0x47, 0xCE, 0x0C, 0x33, 0xA5, 0xAA, 0x5C, 0xF3, 0x05, 0x12, 0xFD, 0x23, 0x25 |
.byte 0xEA, 0x50, 0x9A, 0x8A, 0x84, 0x9B, 0x01, 0x98, 0x4C, 0xAF, 0x72, 0x1A, 0x2D, 0x8B, 0x7C, 0xFD |
.byte 0x30, 0x72, 0x44, 0xFE, 0x7F, 0x78, 0xA3, 0x2A, 0xD4, 0x97, 0x2F, 0xE7, 0x94, 0x53, 0x0D, 0x7F |
.byte 0xA4, 0xA8, 0x09, 0x28, 0x43, 0x0A, 0xC1, 0x90, 0xBA, 0x33, 0xAB, 0xE7, 0xBE, 0x28, 0xE5, 0xEE |
.byte 0x9A, 0x29, 0xEC, 0x1A, 0xA1, 0x90, 0x45, 0x76, 0x27, 0x75, 0x5E, 0xBC, 0xC8, 0x6B, 0x3B, 0x6D |
.byte 0x13, 0x45, 0x95, 0x57, 0x50, 0x56, 0xE8, 0x0A, 0x89, 0x93, 0xF2, 0x48, 0xBB, 0xD7, 0x37, 0x56 |
.byte 0x01, 0x24, 0x70, 0xA3, 0xB4, 0xB5, 0x19, 0xDC, 0x2B, 0x78, 0x98, 0xF3, 0xE3, 0xD4, 0x60, 0xF6 |
.byte 0x19, 0xF6, 0x4E, 0x69, 0x4C, 0x36, 0x74, 0xD6, 0xC9, 0x66, 0x1E, 0x85, 0x3E, 0x56, 0xDB, 0x3F |
.byte 0x7A, 0x4B, 0xE2, 0x2F, 0x01, 0xFC, 0x0B, 0x2C, 0x74, 0xA4, 0x20, 0x58, 0x78, 0x81, 0x4E, 0x92 |
.byte 0x78, 0x9D, 0xFC, 0xC4, 0xD3, 0x70, 0x9A, 0x9D, 0xD7, 0xB9, 0x22, 0x16, 0x0F, 0xFD, 0x55, 0x89 |
.byte 0x49, 0x38, 0xB8, 0x4B, 0x35, 0xC4, 0x78, 0xA9, 0x69, 0x99, 0x01, 0xE1, 0x1A, 0x50, 0x74, 0x92 |
.byte 0xED, 0x70, 0x57, 0xC1, 0xE1, 0xF2, 0x5E, 0xB9, 0xAB, 0x80, 0xCF, 0xBB, 0x7D, 0x25, 0x44, 0xC7 |
.byte 0x5D, 0xFD, 0x12, 0x92, 0xC2, 0x8A, 0x3C, 0x2B, 0x23, 0x3E, 0x0D, 0x3E, 0x8F, 0x81, 0xD1, 0x7D |
.byte 0xF2, 0x29, 0x3E, 0xD4, 0x1B, 0x9C, 0x8D, 0xC7, 0x1C, 0x5D, 0x82, 0x9A, 0x82, 0xC7, 0x61, 0xE0 |
.byte 0xC5, 0x73, 0x73, 0x87, 0xFE, 0xAF, 0xB2, 0x22, 0xEE, 0xC0, 0x60, 0x7D, 0x41, 0x32, 0xFA, 0x34 |
.byte 0x5B, 0x39, 0x08, 0x76, 0xD5, 0x95, 0x3E, 0xF2, 0xF2, 0xC0, 0x8C, 0x74, 0x87, 0xEE, 0x55, 0x4C |
.byte 0x62, 0xC8, 0xD4, 0x60, 0x77, 0x87, 0x82, 0x66, 0x47, 0xE3, 0xE4, 0x89, 0x15, 0xDF, 0xBD, 0x71 |
.byte 0x18, 0xC5, 0xE8, 0xED, 0x5A, 0x26, 0xE0, 0x4D, 0xE6, 0x6D, 0xC2, 0x6E, 0x5B, 0x17, 0xBB, 0xBD |
.byte 0xDF, 0x8F, 0x1E, 0x57, 0x16, 0xA1, 0xBE, 0x5D, 0x84, 0xA2, 0xE7, 0x9A, 0x81, 0xA4, 0x0B, 0x99 |
.byte 0x69, 0xF4, 0x87, 0xC4, 0x1A, 0x68, 0x11, 0x01, 0xD5, 0xD4, 0x6F, 0x30, 0xEC, 0x2B, 0xEE, 0xCB |
.byte 0xBA, 0x0C, 0x23, 0xD1, 0xAD, 0xE1, 0x2F, 0x32, 0x84, 0x16, 0xCC, 0x05, 0xBA, 0xD8, 0x9F, 0x24 |
.byte 0xCC, 0x27, 0xE8, 0xE7, 0x8F, 0xFA, 0xE8, 0x65, 0xCE, 0x58, 0x95, 0xBA, 0x83, 0x84, 0x86, 0x3E |
.byte 0x90, 0xAA, 0x0F, 0x3E, 0x8C, 0x3F, 0x70, 0x10, 0x55, 0x3C, 0x16, 0x10, 0x15, 0xB6, 0x34, 0xE1 |
.byte 0xDE, 0x1C, 0xC8, 0x6D, 0x16, 0xB1, 0xD3, 0xE5, 0x09, 0x68, 0xA0, 0x8D, 0xEC, 0x26, 0xCB, 0x7D |
.byte 0xD1, 0xDB, 0xBB, 0x5D, 0x1A, 0x2C, 0x6E, 0x70, 0x69, 0x84, 0x80, 0x7E, 0x3B, 0xB4, 0x60, 0x19 |
.byte 0xD1, 0x28, 0x87, 0xE8, 0xDA, 0x5A, 0xCD, 0xE3, 0xC3, 0x6E, 0x71, 0xB0, 0x94, 0x3C, 0x2E, 0x66 |
.byte 0x18, 0xE9, 0xC3, 0x33, 0x16, 0x31, 0xA3, 0x7F, 0xB6, 0x24, 0xFE, 0xF2, 0xD9, 0x5E, 0x0B, 0xAA |
.byte 0x87, 0x93, 0x92, 0x61, 0xED, 0x60, 0x45, 0xB1, 0xCE, 0xB6, 0x61, 0x63, 0xF3, 0x8F, 0xC9, 0x0B |
.byte 0x79, 0x8D, 0x3E, 0x8F, 0xBE, 0xE2, 0x0F, 0x75, 0x07, 0x0D, 0x67, 0xE0, 0x6B, 0x73, 0x8A, 0xF2 |
.byte 0x06, 0x1D, 0x54, 0xF4, 0x7D, 0x99, 0xA5, 0x4C, 0x4F, 0x07, 0xAF, 0x42, 0x96, 0x79, 0x4E, 0x10 |
.byte 0x06, 0x8D, 0xA0, 0xC5, 0x6F, 0xAF, 0x3B, 0x77, 0xBD, 0xA2, 0x57, 0x29, 0x15, 0xE1, 0x1B, 0x1C |
.byte 0xFF, 0x70, 0x10, 0x7D, 0x09, 0xB5, 0xC9, 0x58, 0xBC, 0x79, 0x9B, 0x53, 0xF3, 0xE9, 0x63, 0xF9 |
.byte 0x76, 0x04, 0xBF, 0xE6, 0xB4, 0xFA, 0x5D, 0x71, 0x9D, 0xB4, 0x9A, 0xB3, 0x96, 0xB6, 0xCF, 0x96 |
.byte 0x26, 0xDF, 0x13, 0x30, 0x94, 0xDD, 0x88, 0x51, 0x56, 0x24, 0xA4, 0x4A, 0x0D, 0x08, 0x44, 0x84 |
.byte 0x0D, 0x03, 0x6B, 0xC1, 0xFE, 0xC8, 0x32, 0x9B, 0x7D, 0xCD, 0x4E, 0x14, 0x84, 0x1D, 0xAA, 0xAB |
.byte 0xFD, 0xBE, 0xDB, 0x92, 0x9B, 0x64, 0xE3, 0xF2, 0x88, 0x88, 0x3C, 0x96, 0x91, 0x80, 0x1A, 0x9E |
.byte 0x84, 0x86, 0x5F, 0x82, 0x4F, 0x92, 0x1E, 0xCC, 0x5F, 0x6D, 0xE1, 0xE4, 0x8B, 0x8C, 0x8F, 0x88 |
.byte 0x4A, 0x6B, 0x1A, 0xE5, 0xCF, 0xFD, 0xD7, 0x58, 0x86, 0x14, 0xEE, 0x17, 0x94, 0x09, 0xB5, 0x19 |
.byte 0x8F, 0x14, 0x9C, 0xDE, 0xA6, 0xBA, 0xAB, 0x06, 0x28, 0x8D, 0xEB, 0xB3, 0x19, 0x7A, 0x3B, 0x63 |
.byte 0xE6, 0x56, 0x49, 0xB5, 0x54, 0x20, 0x0E, 0xDA, 0x34, 0xFC, 0xF1, 0xC9, 0x06, 0xA7, 0xE2, 0x96 |
.byte 0xBB, 0x7E, 0x74, 0x62, 0x39, 0x20, 0x69, 0x61, 0xAD, 0x54, 0x14, 0xC6, 0xCF, 0x50, 0x2A, 0xB5 |
.byte 0xA6, 0x73, 0x6B, 0xFA, 0x93, 0x79, 0xD5, 0xC8, 0x76, 0xC6, 0x92, 0x7C, 0x6D, 0x74, 0x12, 0x29 |
.byte 0xF3, 0x87, 0x8C, 0x2D, 0xA7, 0xF5, 0x8E, 0x55, 0x49, 0xA3, 0x1B, 0x18, 0xF3, 0x45, 0xCD, 0x9A |
.byte 0xB8, 0x38, 0x95, 0x4C, 0xB1, 0x6A, 0x15, 0x28, 0x31, 0xA7, 0xA5, 0x9F, 0x1C, 0xB7, 0xC9, 0x0F |
.byte 0x3F, 0x55, 0x3C, 0xE7, 0x4A, 0xCB, 0x3C, 0x93, 0x6E, 0x57, 0xAC, 0x62, 0x9D, 0x7A, 0xFC, 0x56 |
.byte 0xB2, 0x91, 0xA2, 0x64, 0xFC, 0xB7, 0x8C, 0x2D, 0x5F, 0x32, 0xCC, 0x7B, 0xE9, 0x95, 0x8B, 0x29 |
.byte 0xEB, 0xC8, 0x10, 0x35, 0x93, 0x4D, 0xC9, 0x01, 0xA5, 0x75, 0x63, 0x42, 0xEF, 0x60, 0x99, 0xA2 |
.byte 0xF1, 0x3C, 0x07, 0xED, 0xF4, 0x94, 0x1B, 0x53, 0xC6, 0xE8, 0xCE, 0xB0, 0x7E, 0x5A, 0xD9, 0x69 |
.byte 0x22, 0xEA, 0x9E, 0xB5, 0x38, 0x68, 0xB6, 0xDD, 0xDE, 0x1A, 0x20, 0xCE, 0x7A, 0xB9, 0x70, 0x6C |
.byte 0xF5, 0x78, 0x5A, 0xE9, 0x0C, 0x75, 0x3D, 0xD2, 0x5D, 0x0C, 0x83, 0xDC, 0x66, 0x5D, 0x45, 0x88 |
.byte 0x47, 0xE4, 0x3D, 0x80, 0x4C, 0xF4, 0x5D, 0x2A, 0x0E, 0x7E, 0xF8, 0x89, 0x38, 0x69, 0xF6, 0x2E |
.byte 0xE1, 0x50, 0x18, 0xED, 0xC6, 0x55, 0xC0, 0x24, 0x61, 0x43, 0x00, 0xC7, 0xA0, 0x45, 0x50, 0xE8 |
.byte 0x2A, 0x8D, 0x69, 0x76, 0x81, 0xC7, 0xA1, 0x90, 0x45, 0x9A, 0x1A, 0x7E, 0x04, 0x10, 0xAC, 0xE5 |
.byte 0x61, 0xC5, 0xD3, 0x27, 0x1B, 0x94, 0x4C, 0x7C, 0xD8, 0x4C, 0x44, 0x79, 0x92, 0x94, 0x61, 0xBC |
.byte 0x22, 0xCA, 0x33, 0xA3, 0x92, 0xD5, 0x34, 0xD7, 0x6F, 0x4F, 0x55, 0x73, 0x5F, 0x02, 0x59, 0xC1 |
.byte 0xC7, 0x2D, 0xE9, 0xE2, 0xC1, 0x35, 0x5F, 0x99, 0x82, 0xA4, 0x12, 0x14, 0x39, 0x74, 0xD1, 0x5B |
.byte 0x3F, 0x05, 0xFF, 0xD1, 0xDA, 0x33, 0xA9, 0x4A, 0x82, 0xFF, 0xBE, 0xE2, 0x02, 0x18, 0xA4, 0xCA |
.byte 0x45, 0x8D, 0xAD, 0x07, 0xC2, 0x0C, 0xA0, 0x45, 0xB1, 0xB3, 0x59, 0xEA, 0x28, 0x2B, 0x45, 0x67 |
.byte 0x31, 0x44, 0x39, 0x0C, 0x78, 0xE3, 0x57, 0xFB, 0xE2, 0x15, 0xDE, 0xE4, 0x2E, 0x82, 0xAE, 0x74 |
.byte 0x0F, 0x5B, 0x7B, 0xD2, 0x68, 0x1C, 0x17, 0x19, 0xCF, 0x71, 0x04, 0xF8, 0x9D, 0x49, 0x60, 0xCE |
.byte 0x8E, 0x99, 0xDA, 0x07, 0x7C, 0x31, 0x02, 0x5F, 0x47, 0xE1, 0x43, 0x75, 0x63, 0xF2, 0xE9, 0x72 |
.byte 0x4D, 0x65, 0x44, 0xB6, 0x81, 0x5C, 0xCF, 0x51, 0xCD, 0xD3, 0x49, 0x6A, 0x1D, 0xA9, 0x39, 0xAC |
.byte 0x43, 0x13, 0xB3, 0xC0, 0x45, 0xB6, 0x1F, 0x8D, 0x97, 0x63, 0x03, 0xFB, 0x55, 0xED, 0x6D, 0xA3 |
.byte 0x52, 0xB2, 0x59, 0xD3, 0x0F, 0x29, 0x24, 0xDC, 0xFD, 0x6E, 0x47, 0x1B, 0x18, 0x80, 0xC7, 0x5B |
.byte 0x94, 0x7B, 0x1C, 0xDA, 0x32, 0x3C, 0x67, 0xCA, 0x9F, 0x6A, 0xC5, 0xF5, 0x58, 0x33, 0x99, 0xAA |
.byte 0xE6, 0xF3, 0x7E, 0xF5, 0x1C, 0xA3, 0xD2, 0x1A, 0x11, 0x1A, 0x35, 0x29, 0x9B, 0xFD, 0x85, 0x30 |
.byte 0x78, 0xA2, 0x0A, 0xAB, 0xDE, 0x72, 0x76, 0x7E, 0xDD, 0x3B, 0x74, 0x35, 0x6F, 0x0D, 0xDF, 0x55 |
.byte 0x00, 0x5D, 0x4B, 0x1D, 0x00, 0x1E, 0x37, 0x12, 0x38, 0x6D, 0x3C, 0xD3, 0x6A, 0xC2, 0x03, 0xE3 |
.byte 0x64, 0x0E, 0x8E, 0x43, 0x80, 0x05, 0xC1, 0x5D, 0x40, 0x36, 0x93, 0xB0, 0x43, 0x73, 0x06, 0x44 |
.byte 0xD1, 0x52, 0x61, 0xD2, 0x70, 0x99, 0xE4, 0xA8, 0x06, 0x21, 0x7C, 0x71, 0xE3, 0x80, 0x54, 0x48 |
.byte 0x8E, 0xE3, 0x8B, 0x0F, 0xE8, 0x4D, 0x6D, 0x29, 0x83, 0x00, 0xD9, 0xC6, 0x73, 0xE0, 0x0B, 0x45 |
.byte 0x32, 0x6D, 0x17, 0xA2, 0x06, 0xFB, 0x4B, 0x0D, 0x1D, 0xC7, 0x7E, 0x00, 0x48, 0xD2, 0x48, 0xD6 |
.byte 0xB6, 0xD3, 0xE5, 0x9E, 0x21, 0x52, 0xC7, 0xA4, 0x52, 0xA1, 0x6B, 0xC6, 0x81, 0x76, 0x0B, 0xB3 |
.byte 0xE3, 0x22, 0x56, 0xEA, 0x1E, 0xA1, 0xF8, 0x3B, 0x69, 0x76, 0x3C, 0xB1, 0x49, 0x84, 0x87, 0xFF |
.byte 0x58, 0x6D, 0x9E, 0x79, 0xBF, 0x65, 0x1E, 0x12, 0x07, 0x89, 0xD9, 0x88, 0xFF, 0xE4, 0x3C, 0xE3 |
.byte 0x07, 0x92, 0xCD, 0x26, 0x33, 0xC5, 0x62, 0x9D, 0x3C, 0x9E, 0x4E, 0x86, 0x23, 0xD6, 0x86, 0x7C |
.byte 0x43, 0x24, 0xF6, 0x02, 0x8A, 0x15, 0x15, 0x91, 0x9E, 0xEE, 0x19, 0x9E, 0xD3, 0x56, 0x81, 0xDB |
.byte 0xE8, 0x4F, 0x01, 0x1C, 0x14, 0x64, 0xB9, 0x51, 0x03, 0x07, 0xD7, 0x27, 0xDD, 0x5D, 0xA4, 0x21 |
.byte 0x82, 0x9A, 0x24, 0x0C, 0xAF, 0x39, 0x9D, 0x4E, 0x28, 0xB7, 0xEC, 0xFB, 0x0D, 0x6D, 0xD6, 0xF6 |
.byte 0xBC, 0xD8, 0x12, 0xD1, 0x3C, 0xCB, 0x23, 0x40, 0xD3, 0xFB, 0x67, 0xB1, 0x58, 0x0B, 0xD2, 0xDA |
.byte 0xA6, 0xF6, 0xE7, 0x56, 0x30, 0x85, 0xA4, 0x58, 0x3C, 0x90, 0x54, 0x4A, 0xFE, 0x2A, 0x41, 0xBA |
.byte 0x03, 0x53, 0x8C, 0x3F, 0x1F, 0xAF, 0x7F, 0xF2, 0xAA, 0xE7, 0xA3, 0x03, 0xF2, 0x76, 0xDE, 0x98 |
.byte 0x6C, 0xC6, 0xEE, 0x9D, 0x4B, 0x93, 0xF5, 0x88, 0x23, 0x49, 0xD2, 0x22, 0x74, 0x14, 0xDD, 0x77 |
.byte 0x67, 0x69, 0xB7, 0x86, 0x19, 0x37, 0x78, 0xC4, 0x1E, 0x1C, 0xC8, 0x11, 0x92, 0xA7, 0xAA, 0xFF |
.byte 0x6D, 0x99, 0x9D, 0xB8, 0x2C, 0x93, 0x40, 0x50, 0xDC, 0x13, 0x72, 0x51, 0x27, 0x4F, 0xC8, 0x8F |
.byte 0xB8, 0x80, 0x15, 0xD2, 0xB7, 0x8E, 0x97, 0xD6, 0xAB, 0x5F, 0xE7, 0x3E, 0x06, 0x91, 0x3E, 0x74 |
.byte 0x2A, 0xDB, 0x2D, 0x57, 0x6E, 0x6D, 0xA7, 0x4B, 0x81, 0x19, 0x9C, 0xA9, 0x68, 0x65, 0x38, 0x21 |
.byte 0xE6, 0x4E, 0xF4, 0x9D, 0xDD, 0x8B, 0x74, 0x89, 0xEB, 0x5C, 0xC7, 0xF2, 0xED, 0x05, 0x66, 0x18 |
.byte 0xE1, 0x93, 0x6F, 0x4F, 0x01, 0x17, 0x9A, 0x83, 0x30, 0x37, 0x2D, 0x99, 0x9C, 0x66, 0xBB, 0x83 |
.byte 0xB4, 0xAF, 0x21, 0x92, 0x3B, 0x95, 0x1B, 0x26, 0xF1, 0xE3, 0x19, 0xDF, 0xE8, 0x7F, 0xF8, 0xC9 |
.byte 0x13, 0x68, 0x19, 0x15, 0x7F, 0xB3, 0x98, 0xB0, 0xEB, 0xC6, 0x49, 0x88, 0x2C, 0x05, 0x0B, 0xE1 |
.byte 0xB4, 0x2C, 0x73, 0xF0, 0xC1, 0x8F, 0x17, 0xB3, 0x72, 0x30, 0x93, 0x5B, 0xAF, 0x8B, 0x25, 0xC3 |
.byte 0xF3, 0x3E, 0xD8, 0x73, 0xF2, 0x71, 0x23, 0xDD, 0x37, 0x6C, 0x65, 0x64, 0x72, 0x70, 0x45, 0x26 |
.byte 0x9C, 0xB9, 0x17, 0x5E, 0x48, 0x2E, 0x12, 0xBB, 0x5E, 0xA5, 0x17, 0x0E, 0x30, 0x3C, 0xD1, 0x24 |
.byte 0x7B, 0xAA, 0x97, 0x6D, 0x1B, 0xBA, 0x4A, 0x53, 0x27, 0xB0, 0xB7, 0x99, 0x21, 0xFD, 0xC0, 0xBE |
.byte 0xB6, 0xD8, 0x1C, 0xFF, 0x06, 0x2E, 0xBB, 0x64, 0xD3, 0xD2, 0x72, 0x04, 0x0F, 0x44, 0x28, 0x8A |
.byte 0xEE, 0xC0, 0xF7, 0x0A, 0x7B, 0x42, 0x5E, 0xA3, 0xF3, 0x16, 0x3D, 0x14, 0x13, 0xFD, 0xD2, 0xC9 |
.byte 0xD6, 0xEF, 0xC9, 0xDC, 0x1E, 0x84, 0x40, 0xF2, 0x57, 0xB3, 0xF6, 0x66, 0xF7, 0x1F, 0xF0, 0xE6 |
.byte 0xE0, 0xE8, 0xF1, 0x5B, 0x2B, 0x4F, 0xFE, 0x1E, 0x65, 0x3B, 0x33, 0x78, 0x39, 0x06, 0x42, 0x0F |
.byte 0xF6, 0x0B, 0xEC, 0x14, 0x90, 0x2C, 0x07, 0xE7, 0xE0, 0xFE, 0x4D, 0xD8, 0x1D, 0x3E, 0xBE, 0xFE |
.byte 0x27, 0xB0, 0x59, 0x52, 0xFF, 0x58, 0x71, 0x65, 0x94, 0xA5, 0xDD, 0xCD, 0xAC, 0x20, 0xDD, 0xA2 |
.byte 0x2C, 0xC9, 0xB7, 0xBC, 0xF6, 0xBE, 0xA4, 0xD7, 0xBC, 0xF1, 0xAF, 0xDA, 0x30, 0x6E, 0xD8, 0x57 |
.byte 0x1E, 0x32, 0xAA, 0x1E, 0x8A, 0x1B, 0x83, 0x1E, 0xC1, 0x61, 0xEC, 0x6D, 0x81, 0xCA, 0x0F, 0xAD |
.byte 0x94, 0xC6, 0x6A, 0x8B, 0x85, 0x0E, 0x62, 0x42, 0x00, 0x12, 0x1C, 0x30, 0x80, 0xF5, 0x88, 0x9F |
.byte 0x27, 0x32, 0xBD, 0xB1, 0x4E, 0x40, 0xD0, 0x0F, 0xA1, 0xBC, 0x7C, 0x23, 0x87, 0x8C, 0xD1, 0x1B |
.byte 0x53, 0x3B, 0xA6, 0xD8, 0x4A, 0x09, 0x1A, 0x4A, 0x1B, 0x37, 0x7B, 0x9B, 0x2C, 0x03, 0x3A, 0x53 |
.byte 0x36, 0xF7, 0x05, 0x84, 0x38, 0xD5, 0x94, 0xD9, 0x92, 0x11, 0xFD, 0x19, 0x9D, 0xCE, 0x35, 0xF1 |
.byte 0x0A, 0xDC, 0xCA, 0x54, 0xE5, 0xE5, 0x9F, 0x01, 0x1C, 0x1B, 0x9C, 0x49, 0x1E, 0xD7, 0x9D, 0x55 |
.byte 0xCF, 0xA2, 0xD9, 0x07, 0x78, 0x6E, 0xE1, 0x0B, 0x7F, 0xDF, 0x25, 0x1C, 0xAD, 0x5A, 0x0E, 0xB7 |
.byte 0x37, 0xD8, 0x0C, 0x1C, 0xBD, 0xAB, 0x1E, 0xDA, 0xC6, 0xBA, 0x23, 0xE5, 0x92, 0xC0, 0x3A, 0x61 |
.byte 0x63, 0x14, 0x69, 0xDB, 0x82, 0x4B, 0xE6, 0x02, 0x2A, 0x0B, 0x1F, 0xD8, 0x66, 0x2D, 0x90, 0x9D |
.byte 0x05, 0x9C, 0xBA, 0xC3, 0x48, 0xD8, 0x9D, 0x0E, 0x93, 0xC1, 0xF4, 0x25, 0x81, 0x2F, 0x87, 0xE5 |
.byte 0x44, 0xF1, 0xC0, 0xC7, 0x3D, 0xA7, 0xC9, 0x68, 0xB3, 0xE8, 0x40, 0x19, 0x15, 0xD0, 0xB7, 0x1B |
.byte 0x6C, 0x71, 0xDE, 0xB4, 0x4A, 0x7C, 0xC3, 0xDD, 0x3D, 0xB8, 0x03, 0xBF, 0xE8, 0x8A, 0xA4, 0x2C |
.byte 0x7C, 0x64, 0xF3, 0xB9, 0x0C, 0xBD, 0x21, 0xBF, 0xA5, 0x62, 0xD8, 0xBB, 0x32, 0x8F, 0xD6, 0x9F |
.byte 0x01, 0xB5, 0x54, 0x4B, 0x31, 0x18, 0x29, 0x6E, 0xD1, 0x2C, 0x2D, 0xB9, 0xB7, 0xD1, 0xE6, 0x34 |
.byte 0x36, 0xDA, 0xED, 0x43, 0x97, 0x0F, 0x02, 0x3D, 0x72, 0xDB, 0xF8, 0xA5, 0x6B, 0xCF, 0x45, 0x6C |
.byte 0x84, 0x99, 0xB8, 0xB5, 0xB2, 0xE2, 0x23, 0x84, 0x0E, 0x51, 0x3D, 0xC6, 0x23, 0x24, 0xFA, 0x5A |
.byte 0xFE, 0xE8, 0x9D, 0x96, 0xF8, 0x9F, 0xD3, 0x6A, 0x7B, 0xCC, 0x0F, 0xE6, 0x9B, 0x54, 0x53, 0x1F |
.byte 0xEE, 0x0C, 0xD5, 0xA1, 0xEE, 0xF9, 0x25, 0xFC, 0x4A, 0x63, 0xC3, 0x6E, 0x87, 0xBD, 0xC8, 0x86 |
.byte 0xA6, 0x65, 0x1C, 0x9E, 0x05, 0xF0, 0x08, 0x81, 0xBC, 0x18, 0x67, 0x58, 0x6D, 0xBB, 0x77, 0x5B |
.byte 0xC7, 0x4D, 0xFD, 0xB6, 0x46, 0x22, 0xB2, 0x91, 0x85, 0x76, 0x00, 0x0D, 0x34, 0xC8, 0x93, 0xDA |
.byte 0x2E, 0xAF, 0x78, 0x34, 0x9F, 0x81, 0xB5, 0x5C, 0x9A, 0x1D, 0xB4, 0x07, 0xD9, 0x2C, 0x63, 0xA0 |
.byte 0x79, 0x61, 0x56, 0xC0, 0x83, 0x09, 0x51, 0x09, 0x80, 0x52, 0x17, 0xB4, 0x1A, 0xAA, 0x8E, 0x49 |
.byte 0x5A, 0x07, 0x7D, 0xFA, 0x89, 0x33, 0x56, 0x24, 0x50, 0x0A, 0x2C, 0x29, 0x36, 0x90, 0xCA, 0xB0 |
.byte 0xF1, 0x21, 0x70, 0x74, 0x2B, 0xC2, 0x7E, 0xAB, 0x14, 0x95, 0x60, 0x2F, 0x40, 0xEF, 0x78, 0x9A |
.byte 0xF7, 0xF6, 0x95, 0x81, 0x29, 0xEB, 0xA5, 0x79, 0xF6, 0xD1, 0xA3, 0x2D, 0x61, 0x6E, 0xDD, 0x52 |
.byte 0x90, 0x4E, 0xC7, 0xBB, 0x11, 0x46, 0x67, 0x25, 0xDC, 0xC8, 0x55, 0x1C, 0xB7, 0xCD, 0xB7, 0xAE |
.byte 0xC4, 0x4C, 0x2F, 0xED, 0x38, 0xD5, 0x67, 0x2E, 0xA6, 0x0A, 0x5B, 0x08, 0x79, 0x38, 0x5B, 0x09 |
.byte 0x87, 0x23, 0xC4, 0x98, 0x69, 0x2C, 0xBE, 0x46, 0xF4, 0x13, 0x63, 0xAC, 0xE1, 0x1A, 0x5B, 0xA5 |
.byte 0x67, 0x8A, 0x93, 0x9F, 0x60, 0xFA, 0xCD, 0x07, 0x04, 0x29, 0x0F, 0x7D, 0x62, 0x6B, 0x87, 0xE9 |
.byte 0x8E, 0x4C, 0x82, 0xF8, 0x78, 0x40, 0x3F, 0x6D, 0x54, 0xA2, 0x19, 0x36, 0xBC, 0x74, 0xDC, 0x24 |
.byte 0xFF, 0x6F, 0xC3, 0x5F, 0x69, 0x91, 0x66, 0x6E, 0xBB, 0x76, 0xEC, 0x1D, 0xE1, 0x73, 0x07, 0x70 |
.byte 0xBF, 0x89, 0x69, 0x38, 0xCA, 0xA8, 0xA5, 0x1E, 0x4A, 0xBF, 0x55, 0x07, 0x34, 0x31, 0x2B, 0x34 |
.byte 0xA0, 0xEF, 0x93, 0x0A, 0x81, 0xFA, 0x79, 0x3C, 0x71, 0x65, 0x5A, 0x52, 0xD9, 0x61, 0xC3, 0x99 |
.byte 0xEB, 0x2C, 0xD1, 0xB5, 0xD5, 0x77, 0xD4, 0x20, 0x37, 0x29, 0x27, 0x6B, 0x5A, 0x53, 0x9F, 0xFB |
.byte 0x43, 0x33, 0x06, 0xC4, 0x2D, 0x7F, 0x01, 0x9F, 0xE4, 0x5C, 0xF1, 0xBE, 0xBD, 0xB5, 0x57, 0xA9 |
.byte 0xE2, 0x29, 0x5E, 0xB7, 0xA1, 0x32, 0xD7, 0xD8, 0x5C, 0xFF, 0x43, 0xB6, 0x53, 0xE3, 0xB2, 0x96 |
/firmware/test019.asm
1,35 → 1,35
/* |
* This test verifies non-returnable interrupt handling |
* Note: "iret" is never called here |
*/ |
|
lc r100, 0x10000000 // test result output pointer |
lcs r101, halt |
lc r102, failure |
lc r103, 0x20000000 // timer: number of pulses (0xFFFFFFFF - infinite) |
lc r104, 0x20000004 // timer: delay between pulses (in cycles) |
lcs r105, success |
|
lcs r32, 0 // counter |
|
lcs iv0, test_loop@1 // set IRF to mark the interrupt as non-returnable |
mov cr, 1 // enable timer interrupt |
sw r104, 100 // delay between interrupts |
sw r103, 100 // generate 100 interrupts |
hlt // wait for a non-returnable interrupt |
|
test_loop: |
add r32, r32, 1 |
cjmpuge r105, r32, 100 // success |
hlt // wait for a non-returnable interrupt |
|
failure: |
sw r100, 2 // should never reach here |
jmp r101 // halt |
|
success: |
sw r100, 1 // success |
|
halt: |
hlt |
jmp r101 // halt |
/* |
* This test verifies non-returnable interrupt handling |
* Note: "iret" is never called here |
*/ |
|
lc r100, 0x10000000 // test result output pointer |
lcs r101, halt |
lc r102, failure |
lc r103, 0x20000000 // timer: number of pulses (0xFFFFFFFF - infinite) |
lc r104, 0x20000004 // timer: delay between pulses (in cycles) |
lcs r105, success |
|
lcs r32, 0 // counter |
|
lcs iv0, test_loop@1 // set IRF to mark the interrupt as non-returnable |
mov cr, 1 // enable timer interrupt |
sw r104, 100 // delay between interrupts |
sw r103, 100 // generate 100 interrupts |
hlt // wait for a non-returnable interrupt |
|
test_loop: |
add r32, r32, 1 |
cjmpuge r105, r32, 100 // success |
hlt // wait for a non-returnable interrupt |
|
failure: |
sw r100, 2 // should never reach here |
jmp r101 // halt |
|
success: |
sw r100, 1 // success |
|
halt: |
hlt |
jmp r101 // halt |
/firmware/test020.asm
1,39 → 1,39
/* |
* Check that there are no pipeline hazards |
*/ |
|
lc r100, 0x10000000 // test result output pointer |
lcs r101, halt |
lcs r102, failure |
lcs r103, success |
|
add r0, 100, 50 // r0:=150 |
add r1, r0, 3 // r1:=153, potential RAW hazard |
mul r2, r1, 109 // r2:=16677, potential RAW hazard |
mul r3, r2, r0 // r3:=2501550, potential RAW hazard |
sub r4, r3, 15 // r4:=2501535, potential RAW hazard |
|
mul r5, 50, 117 // r2:=5850 |
sub r5, 100, 9 // r2:=91, overwrites previous result, potential WAW hazard |
|
lc r6, 1800 |
mul r7, r6, 49 // r7:=88200, potential RAW hazard |
mov r6, 1 // r6:=1, potential WAR hazard |
|
lc r0, 2501535 |
cjmpne r102, r4, r0 // failure |
cjmpne r102, r5, 91 // failure |
lcs r0, 88200 |
cjmpne r102, r7, r0 // failure |
jmp r103 // success |
|
failure: |
sw r100, 2 |
jmp r101 // halt |
|
success: |
sw r100, 1 // success |
|
halt: |
hlt |
jmp r101 // halt |
/* |
* Check that there are no pipeline hazards |
*/ |
|
lc r100, 0x10000000 // test result output pointer |
lcs r101, halt |
lcs r102, failure |
lcs r103, success |
|
add r0, 100, 50 // r0:=150 |
add r1, r0, 3 // r1:=153, potential RAW hazard |
mul r2, r1, 109 // r2:=16677, potential RAW hazard |
mul r3, r2, r0 // r3:=2501550, potential RAW hazard |
sub r4, r3, 15 // r4:=2501535, potential RAW hazard |
|
mul r5, 50, 117 // r2:=5850 |
sub r5, 100, 9 // r2:=91, overwrites previous result, potential WAW hazard |
|
lc r6, 1800 |
mul r7, r6, 49 // r7:=88200, potential RAW hazard |
mov r6, 1 // r6:=1, potential WAR hazard |
|
lc r0, 2501535 |
cjmpne r102, r4, r0 // failure |
cjmpne r102, r5, 91 // failure |
lcs r0, 88200 |
cjmpne r102, r7, r0 // failure |
jmp r103 // success |
|
failure: |
sw r100, 2 |
jmp r101 // halt |
|
success: |
sw r100, 1 // success |
|
halt: |
hlt |
jmp r101 // halt |
/make/sources.make
1,80 → 1,80
# CPU RTL |
|
LXP32_DIR=../../../../rtl |
LXP32_RTL=$(LXP32_DIR)/lxp32_mul16x16.vhd\ |
$(LXP32_DIR)/lxp32_mul_dsp.vhd\ |
$(LXP32_DIR)/lxp32_mul_opt.vhd\ |
$(LXP32_DIR)/lxp32_mul_seq.vhd\ |
$(LXP32_DIR)/lxp32_compl.vhd\ |
$(LXP32_DIR)/lxp32_divider.vhd\ |
$(LXP32_DIR)/lxp32_shifter.vhd\ |
$(LXP32_DIR)/lxp32_alu.vhd\ |
$(LXP32_DIR)/lxp32_dbus.vhd\ |
$(LXP32_DIR)/lxp32_execute.vhd\ |
$(LXP32_DIR)/lxp32_decode.vhd\ |
$(LXP32_DIR)/lxp32_ubuf.vhd\ |
$(LXP32_DIR)/lxp32_fetch.vhd\ |
$(LXP32_DIR)/lxp32_ram256x32.vhd\ |
$(LXP32_DIR)/lxp32_interrupt_mux.vhd\ |
$(LXP32_DIR)/lxp32_scratchpad.vhd\ |
$(LXP32_DIR)/lxp32_cpu.vhd\ |
$(LXP32_DIR)/lxp32u_top.vhd\ |
$(LXP32_DIR)/lxp32_icache.vhd\ |
$(LXP32_DIR)/lxp32c_top.vhd |
|
# Common package |
|
COMMON_PKG_DIR=../../../common_pkg |
COMMON_SRC=$(COMMON_PKG_DIR)/common_pkg.vhd $(COMMON_PKG_DIR)/common_pkg_body.vhd |
|
# Platform RTL |
|
PLATFORM_DIR=../../src/platform |
PLATFORM_RTL=$(PLATFORM_DIR)/generic_dpram.vhd\ |
$(PLATFORM_DIR)/scrambler.vhd\ |
$(PLATFORM_DIR)/dbus_monitor.vhd\ |
$(PLATFORM_DIR)/program_ram.vhd\ |
$(PLATFORM_DIR)/timer.vhd\ |
$(PLATFORM_DIR)/coprocessor.vhd\ |
$(PLATFORM_DIR)/intercon.vhd\ |
$(PLATFORM_DIR)/ibus_adapter.vhd\ |
$(PLATFORM_DIR)/platform.vhd |
|
# Testbench sources |
|
COMMON_PKG_DIR=../../../common_pkg |
TB_DIR=../../src/tb |
TB_SRC=$(TB_DIR)/tb_pkg.vhd\ |
$(TB_DIR)/tb_pkg_body.vhd\ |
$(TB_DIR)/monitor.vhd\ |
$(TB_DIR)/tb.vhd |
|
TB_MOD=tb |
|
# Firmware |
|
FW_SRC_DIR=../../src/firmware |
FIRMWARE=test001.ram\ |
test002.ram\ |
test003.ram\ |
test004.ram\ |
test005.ram\ |
test006.ram\ |
test007.ram\ |
test008.ram\ |
test009.ram\ |
test010.ram\ |
test011.ram\ |
test012.ram\ |
test013.ram\ |
test014.ram\ |
test015.ram\ |
test016.ram\ |
test017.ram\ |
test018.ram\ |
test019.ram\ |
test020.ram |
|
# LXP32 assembler executable |
|
ASM=../../../../tools/bin/lxp32asm |
# CPU RTL |
|
LXP32_DIR=../../../../rtl |
LXP32_RTL=$(LXP32_DIR)/lxp32_mul16x16.vhd\ |
$(LXP32_DIR)/lxp32_mul_dsp.vhd\ |
$(LXP32_DIR)/lxp32_mul_opt.vhd\ |
$(LXP32_DIR)/lxp32_mul_seq.vhd\ |
$(LXP32_DIR)/lxp32_compl.vhd\ |
$(LXP32_DIR)/lxp32_divider.vhd\ |
$(LXP32_DIR)/lxp32_shifter.vhd\ |
$(LXP32_DIR)/lxp32_alu.vhd\ |
$(LXP32_DIR)/lxp32_dbus.vhd\ |
$(LXP32_DIR)/lxp32_execute.vhd\ |
$(LXP32_DIR)/lxp32_decode.vhd\ |
$(LXP32_DIR)/lxp32_ubuf.vhd\ |
$(LXP32_DIR)/lxp32_fetch.vhd\ |
$(LXP32_DIR)/lxp32_ram256x32.vhd\ |
$(LXP32_DIR)/lxp32_interrupt_mux.vhd\ |
$(LXP32_DIR)/lxp32_scratchpad.vhd\ |
$(LXP32_DIR)/lxp32_cpu.vhd\ |
$(LXP32_DIR)/lxp32u_top.vhd\ |
$(LXP32_DIR)/lxp32_icache.vhd\ |
$(LXP32_DIR)/lxp32c_top.vhd |
|
# Common package |
|
COMMON_PKG_DIR=../../../common_pkg |
COMMON_SRC=$(COMMON_PKG_DIR)/common_pkg.vhd $(COMMON_PKG_DIR)/common_pkg_body.vhd |
|
# Platform RTL |
|
PLATFORM_DIR=../../src/platform |
PLATFORM_RTL=$(PLATFORM_DIR)/generic_dpram.vhd\ |
$(PLATFORM_DIR)/scrambler.vhd\ |
$(PLATFORM_DIR)/dbus_monitor.vhd\ |
$(PLATFORM_DIR)/program_ram.vhd\ |
$(PLATFORM_DIR)/timer.vhd\ |
$(PLATFORM_DIR)/coprocessor.vhd\ |
$(PLATFORM_DIR)/intercon.vhd\ |
$(PLATFORM_DIR)/ibus_adapter.vhd\ |
$(PLATFORM_DIR)/platform.vhd |
|
# Testbench sources |
|
COMMON_PKG_DIR=../../../common_pkg |
TB_DIR=../../src/tb |
TB_SRC=$(TB_DIR)/tb_pkg.vhd\ |
$(TB_DIR)/tb_pkg_body.vhd\ |
$(TB_DIR)/monitor.vhd\ |
$(TB_DIR)/tb.vhd |
|
TB_MOD=tb |
|
# Firmware |
|
FW_SRC_DIR=../../src/firmware |
FIRMWARE=test001.ram\ |
test002.ram\ |
test003.ram\ |
test004.ram\ |
test005.ram\ |
test006.ram\ |
test007.ram\ |
test008.ram\ |
test009.ram\ |
test010.ram\ |
test011.ram\ |
test012.ram\ |
test013.ram\ |
test014.ram\ |
test015.ram\ |
test016.ram\ |
test017.ram\ |
test018.ram\ |
test019.ram\ |
test020.ram |
|
# LXP32 assembler executable |
|
ASM=../../../../tools/bin/lxp32asm |
/platform/coprocessor.vhd
1,97 → 1,97
--------------------------------------------------------------------- |
-- Coprocessor |
-- |
-- Part of the LXP32 test platform |
-- |
-- Copyright (c) 2016 by Alex I. Kuznetsov |
-- |
-- Performs a simple arithmetic operation, uses interrupt to wake |
-- up the CPU. |
-- |
-- Note: regardless of whether this description is synthesizable, |
-- it was designed exclusively for simulation purposes. |
--------------------------------------------------------------------- |
|
library ieee; |
use ieee.std_logic_1164.all; |
use ieee.numeric_std.all; |
|
entity coprocessor is |
port( |
clk_i: in std_logic; |
rst_i: in std_logic; |
|
wbs_cyc_i: in std_logic; |
wbs_stb_i: in std_logic; |
wbs_we_i: in std_logic; |
wbs_sel_i: in std_logic_vector(3 downto 0); |
wbs_ack_o: out std_logic; |
wbs_adr_i: in std_logic_vector(27 downto 2); |
wbs_dat_i: in std_logic_vector(31 downto 0); |
wbs_dat_o: out std_logic_vector(31 downto 0); |
|
irq_o: out std_logic |
); |
end entity; |
|
architecture rtl of coprocessor is |
|
signal value: unsigned(31 downto 0):=(others=>'0'); |
signal result: unsigned(31 downto 0):=(others=>'0'); |
signal cnt: integer range 0 to 5:=0; |
signal irq: std_logic:='0'; |
|
begin |
|
process (clk_i) is |
begin |
if rising_edge(clk_i) then |
if rst_i='1' then |
value<=(others=>'0'); |
cnt<=0; |
irq<='0'; |
else |
if cnt>0 then |
cnt<=cnt-1; |
end if; |
|
if cnt=1 then |
irq<='1'; |
else |
irq<='0'; |
end if; |
|
if wbs_cyc_i='1' and wbs_stb_i='1' and wbs_we_i='1' then |
for i in wbs_sel_i'range loop |
if wbs_sel_i(i)='1' then |
if wbs_adr_i="00"&X"000000" then |
value(i*8+7 downto i*8)<= |
unsigned(wbs_dat_i(i*8+7 downto i*8)); |
cnt<=5; |
end if; |
end if; |
end loop; |
end if; |
end if; |
end if; |
end process; |
|
process (clk_i) is |
begin |
if rising_edge(clk_i) then |
if rst_i='1' then |
result<=(others=>'0'); |
else |
result<=shift_left(value,1)+value; |
end if; |
end if; |
end process; |
|
wbs_ack_o<=wbs_cyc_i and wbs_stb_i; |
wbs_dat_o<=std_logic_vector(value) when wbs_adr_i="00"&X"000000" else |
std_logic_vector(result) when wbs_adr_i="00"&X"000001" else |
(others=>'-'); |
|
irq_o<=irq; |
|
end architecture; |
--------------------------------------------------------------------- |
-- Coprocessor |
-- |
-- Part of the LXP32 test platform |
-- |
-- Copyright (c) 2016 by Alex I. Kuznetsov |
-- |
-- Performs a simple arithmetic operation, uses interrupt to wake |
-- up the CPU. |
-- |
-- Note: regardless of whether this description is synthesizable, |
-- it was designed exclusively for simulation purposes. |
--------------------------------------------------------------------- |
|
library ieee; |
use ieee.std_logic_1164.all; |
use ieee.numeric_std.all; |
|
entity coprocessor is |
port( |
clk_i: in std_logic; |
rst_i: in std_logic; |
|
wbs_cyc_i: in std_logic; |
wbs_stb_i: in std_logic; |
wbs_we_i: in std_logic; |
wbs_sel_i: in std_logic_vector(3 downto 0); |
wbs_ack_o: out std_logic; |
wbs_adr_i: in std_logic_vector(27 downto 2); |
wbs_dat_i: in std_logic_vector(31 downto 0); |
wbs_dat_o: out std_logic_vector(31 downto 0); |
|
irq_o: out std_logic |
); |
end entity; |
|
architecture rtl of coprocessor is |
|
signal value: unsigned(31 downto 0):=(others=>'0'); |
signal result: unsigned(31 downto 0):=(others=>'0'); |
signal cnt: integer range 0 to 5:=0; |
signal irq: std_logic:='0'; |
|
begin |
|
process (clk_i) is |
begin |
if rising_edge(clk_i) then |
if rst_i='1' then |
value<=(others=>'0'); |
cnt<=0; |
irq<='0'; |
else |
if cnt>0 then |
cnt<=cnt-1; |
end if; |
|
if cnt=1 then |
irq<='1'; |
else |
irq<='0'; |
end if; |
|
if wbs_cyc_i='1' and wbs_stb_i='1' and wbs_we_i='1' then |
for i in wbs_sel_i'range loop |
if wbs_sel_i(i)='1' then |
if wbs_adr_i="00"&X"000000" then |
value(i*8+7 downto i*8)<= |
unsigned(wbs_dat_i(i*8+7 downto i*8)); |
cnt<=5; |
end if; |
end if; |
end loop; |
end if; |
end if; |
end if; |
end process; |
|
process (clk_i) is |
begin |
if rising_edge(clk_i) then |
if rst_i='1' then |
result<=(others=>'0'); |
else |
result<=shift_left(value,1)+value; |
end if; |
end if; |
end process; |
|
wbs_ack_o<=wbs_cyc_i and wbs_stb_i; |
wbs_dat_o<=std_logic_vector(value) when wbs_adr_i="00"&X"000000" else |
std_logic_vector(result) when wbs_adr_i="00"&X"000001" else |
(others=>'-'); |
|
irq_o<=irq; |
|
end architecture; |
/platform/dbus_monitor.vhd
1,117 → 1,117
--------------------------------------------------------------------- |
-- DBUS monitor |
-- |
-- Part of the LXP32 test platform |
-- |
-- Copyright (c) 2016 by Alex I. Kuznetsov |
-- |
-- Monitors LXP32 data bus transactions, optionally throttles them. |
-- |
-- Note: regardless of whether this description is synthesizable, |
-- it was designed exclusively for simulation purposes. |
--------------------------------------------------------------------- |
|
library ieee; |
use ieee.std_logic_1164.all; |
|
entity dbus_monitor is |
generic( |
THROTTLE: boolean |
); |
port( |
clk_i: in std_logic; |
rst_i: in std_logic; |
|
wbs_cyc_i: in std_logic; |
wbs_stb_i: in std_logic; |
wbs_we_i: in std_logic; |
wbs_sel_i: in std_logic_vector(3 downto 0); |
wbs_ack_o: out std_logic; |
wbs_adr_i: in std_logic_vector(31 downto 2); |
wbs_dat_i: in std_logic_vector(31 downto 0); |
wbs_dat_o: out std_logic_vector(31 downto 0); |
|
wbm_cyc_o: out std_logic; |
wbm_stb_o: out std_logic; |
wbm_we_o: out std_logic; |
wbm_sel_o: out std_logic_vector(3 downto 0); |
wbm_ack_i: in std_logic; |
wbm_adr_o: out std_logic_vector(31 downto 2); |
wbm_dat_o: out std_logic_vector(31 downto 0); |
wbm_dat_i: in std_logic_vector(31 downto 0) |
); |
end entity; |
|
architecture rtl of dbus_monitor is |
|
signal prbs: std_logic; |
signal cycle: std_logic:='0'; |
|
signal cyc_ff: std_logic:='0'; |
signal ack_ff: std_logic:='0'; |
|
begin |
|
-- Manage throttling |
|
gen_throttling: if THROTTLE generate |
throttle_inst: entity work.scrambler(rtl) |
generic map(TAP1=>6,TAP2=>7) |
port map(clk_i=>clk_i,rst_i=>rst_i,ce_i=>'1',d_o=>prbs); |
end generate; |
|
gen_no_throttling: if not THROTTLE generate |
prbs<='0'; |
end generate; |
|
-- CPU interface |
|
wbs_ack_o<=wbm_ack_i; |
wbs_dat_o<=wbm_dat_i when wbm_ack_i='1' else (others=>'-'); |
|
-- Interconnect interface |
|
process (clk_i) is |
begin |
if rising_edge(clk_i) then |
if rst_i='1' then |
cycle<='0'; |
elsif prbs='0' and wbs_cyc_i='1' then |
cycle<='1'; |
elsif wbs_cyc_i='0' then |
cycle<='0'; |
end if; |
end if; |
end process; |
|
wbm_cyc_o<=wbs_cyc_i and (not prbs or cycle); |
wbm_stb_o<=wbs_stb_i and (not prbs or cycle); |
wbm_we_o<=wbs_we_i; |
wbm_sel_o<=wbs_sel_i; |
wbm_adr_o<=wbs_adr_i; |
wbm_dat_o<=wbs_dat_i; |
|
-- Check handshake correctness |
|
process (clk_i) is |
begin |
if rising_edge(clk_i) then |
if rst_i='1' then |
cyc_ff<='0'; |
ack_ff<='0'; |
else |
cyc_ff<=wbs_cyc_i; |
ack_ff<=wbm_ack_i; |
|
assert wbm_ack_i='0' or (wbs_cyc_i and (not prbs or cycle))='1' |
report "DBUS error: ACK asserted without CYC" |
severity failure; |
|
assert not (wbs_cyc_i='0' and cyc_ff='1' and ack_ff/='1') |
report "DBUS error: cycle terminated prematurely" |
severity failure; |
end if; |
end if; |
end process; |
|
end architecture; |
--------------------------------------------------------------------- |
-- DBUS monitor |
-- |
-- Part of the LXP32 test platform |
-- |
-- Copyright (c) 2016 by Alex I. Kuznetsov |
-- |
-- Monitors LXP32 data bus transactions, optionally throttles them. |
-- |
-- Note: regardless of whether this description is synthesizable, |
-- it was designed exclusively for simulation purposes. |
--------------------------------------------------------------------- |
|
library ieee; |
use ieee.std_logic_1164.all; |
|
entity dbus_monitor is |
generic( |
THROTTLE: boolean |
); |
port( |
clk_i: in std_logic; |
rst_i: in std_logic; |
|
wbs_cyc_i: in std_logic; |
wbs_stb_i: in std_logic; |
wbs_we_i: in std_logic; |
wbs_sel_i: in std_logic_vector(3 downto 0); |
wbs_ack_o: out std_logic; |
wbs_adr_i: in std_logic_vector(31 downto 2); |
wbs_dat_i: in std_logic_vector(31 downto 0); |
wbs_dat_o: out std_logic_vector(31 downto 0); |
|
wbm_cyc_o: out std_logic; |
wbm_stb_o: out std_logic; |
wbm_we_o: out std_logic; |
wbm_sel_o: out std_logic_vector(3 downto 0); |
wbm_ack_i: in std_logic; |
wbm_adr_o: out std_logic_vector(31 downto 2); |
wbm_dat_o: out std_logic_vector(31 downto 0); |
wbm_dat_i: in std_logic_vector(31 downto 0) |
); |
end entity; |
|
architecture rtl of dbus_monitor is |
|
signal prbs: std_logic; |
signal cycle: std_logic:='0'; |
|
signal cyc_ff: std_logic:='0'; |
signal ack_ff: std_logic:='0'; |
|
begin |
|
-- Manage throttling |
|
gen_throttling: if THROTTLE generate |
throttle_inst: entity work.scrambler(rtl) |
generic map(TAP1=>6,TAP2=>7) |
port map(clk_i=>clk_i,rst_i=>rst_i,ce_i=>'1',d_o=>prbs); |
end generate; |
|
gen_no_throttling: if not THROTTLE generate |
prbs<='0'; |
end generate; |
|
-- CPU interface |
|
wbs_ack_o<=wbm_ack_i; |
wbs_dat_o<=wbm_dat_i when wbm_ack_i='1' else (others=>'-'); |
|
-- Interconnect interface |
|
process (clk_i) is |
begin |
if rising_edge(clk_i) then |
if rst_i='1' then |
cycle<='0'; |
elsif prbs='0' and wbs_cyc_i='1' then |
cycle<='1'; |
elsif wbs_cyc_i='0' then |
cycle<='0'; |
end if; |
end if; |
end process; |
|
wbm_cyc_o<=wbs_cyc_i and (not prbs or cycle); |
wbm_stb_o<=wbs_stb_i and (not prbs or cycle); |
wbm_we_o<=wbs_we_i; |
wbm_sel_o<=wbs_sel_i; |
wbm_adr_o<=wbs_adr_i; |
wbm_dat_o<=wbs_dat_i; |
|
-- Check handshake correctness |
|
process (clk_i) is |
begin |
if rising_edge(clk_i) then |
if rst_i='1' then |
cyc_ff<='0'; |
ack_ff<='0'; |
else |
cyc_ff<=wbs_cyc_i; |
ack_ff<=wbm_ack_i; |
|
assert wbm_ack_i='0' or (wbs_cyc_i and (not prbs or cycle))='1' |
report "DBUS error: ACK asserted without CYC" |
severity failure; |
|
assert not (wbs_cyc_i='0' and cyc_ff='1' and ack_ff/='1') |
report "DBUS error: cycle terminated prematurely" |
severity failure; |
end if; |
end if; |
end process; |
|
end architecture; |
/platform/generic_dpram.vhd
1,162 → 1,162
--------------------------------------------------------------------- |
-- Generic FPGA memory block |
-- |
-- Copyright (c) 2015 by Alex I. Kuznetsov |
-- |
-- Portable description of a dual-port memory block with one write |
-- port. |
-- |
-- Parameters: |
-- * DATA_WIDTH: data port width |
-- * ADDR_WIDTH: address port width |
-- * SIZE: memory size |
-- * MODE: read/write synchronization mode for port A |
-- DONTCARE: choose the most efficient design |
-- WR_FIRST: feed written value to the output |
-- RD_FIRST: read old value |
-- NOCHANGE: don't change output during write |
--------------------------------------------------------------------- |
|
library ieee; |
use ieee.std_logic_1164.all; |
use ieee.numeric_std.all; |
|
entity generic_dpram is |
generic( |
DATA_WIDTH: integer; |
ADDR_WIDTH: integer; |
SIZE: integer; |
MODE: string:="DONTCARE" |
); |
port( |
clka_i: in std_logic; |
cea_i: in std_logic; |
wea_i: in std_logic; |
addra_i: in std_logic_vector(ADDR_WIDTH-1 downto 0); |
da_i: in std_logic_vector(DATA_WIDTH-1 downto 0); |
da_o: out std_logic_vector(DATA_WIDTH-1 downto 0); |
|
clkb_i: in std_logic; |
ceb_i: in std_logic; |
addrb_i: in std_logic_vector(ADDR_WIDTH-1 downto 0); |
db_o: out std_logic_vector(DATA_WIDTH-1 downto 0) |
); |
end entity; |
|
architecture rtl of generic_dpram is |
|
type ram_type is array(SIZE-1 downto 0) of std_logic_vector(DATA_WIDTH-1 downto 0); |
signal ram: ram_type; |
|
attribute syn_ramstyle: string; |
attribute syn_ramstyle of ram: signal is "no_rw_check"; |
attribute ram_style: string; -- for Xilinx |
attribute ram_style of ram: signal is "block"; |
|
begin |
|
-- Ensure that generics have valid values |
|
assert SIZE<=2**ADDR_WIDTH |
report "SIZE must be less or equal than 2^ADDR_WIDTH" |
severity failure; |
|
assert MODE="DONTCARE" or MODE="WR_FIRST" or MODE="RD_FIRST" or MODE="NOCHANGE" |
report "Unrecognized MODE value (DONTCARE, WR_FIRST, RD_FIRST or NOCHANGE expected)" |
severity failure; |
|
-- Port A (read/write) |
|
port_a_dont_care_gen: if MODE="DONTCARE" generate |
process (clka_i) is |
begin |
if rising_edge(clka_i) then |
if cea_i='1' then |
if wea_i='1' then |
ram(to_integer(unsigned(addra_i)))<=da_i; |
da_o<=(others=>'-'); |
else |
if is_x(addra_i) then |
da_o<=(others=>'X'); |
else |
da_o<=ram(to_integer(unsigned(addra_i))); |
end if; |
end if; |
end if; |
end if; |
end process; |
end generate; |
|
port_a_write_first_gen: if MODE="WR_FIRST" generate |
process (clka_i) is |
begin |
if rising_edge(clka_i) then |
if cea_i='1' then |
if wea_i='1' then |
ram(to_integer(unsigned(addra_i)))<=da_i; |
da_o<=da_i; |
else |
if is_x(addra_i) then |
da_o<=(others=>'X'); |
else |
da_o<=ram(to_integer(unsigned(addra_i))); |
end if; |
end if; |
end if; |
end if; |
end process; |
end generate; |
|
port_a_read_first_gen: if MODE="RD_FIRST" generate |
process (clka_i) is |
begin |
if rising_edge(clka_i) then |
if cea_i='1' then |
if wea_i='1' then |
ram(to_integer(unsigned(addra_i)))<=da_i; |
end if; |
if is_x(addra_i) then |
da_o<=(others=>'X'); |
else |
da_o<=ram(to_integer(unsigned(addra_i))); |
end if; |
end if; |
end if; |
end process; |
end generate; |
|
port_a_no_change_gen: if MODE="NOCHANGE" generate |
process (clka_i) is |
begin |
if rising_edge(clka_i) then |
if cea_i='1' then |
if wea_i='1' then |
ram(to_integer(unsigned(addra_i)))<=da_i; |
else |
if is_x(addra_i) then |
da_o<=(others=>'X'); |
else |
da_o<=ram(to_integer(unsigned(addra_i))); |
end if; |
end if; |
end if; |
end if; |
end process; |
end generate; |
|
-- Port B (read only) |
|
process (clkb_i) is |
begin |
if rising_edge(clkb_i) then |
if ceb_i='1' then |
if is_x(addrb_i) then |
db_o<=(others=>'X'); |
else |
db_o<=ram(to_integer(unsigned(addrb_i))); |
end if; |
end if; |
end if; |
end process; |
|
end architecture; |
--------------------------------------------------------------------- |
-- Generic FPGA memory block |
-- |
-- Copyright (c) 2015 by Alex I. Kuznetsov |
-- |
-- Portable description of a dual-port memory block with one write |
-- port. |
-- |
-- Parameters: |
-- * DATA_WIDTH: data port width |
-- * ADDR_WIDTH: address port width |
-- * SIZE: memory size |
-- * MODE: read/write synchronization mode for port A |
-- DONTCARE: choose the most efficient design |
-- WR_FIRST: feed written value to the output |
-- RD_FIRST: read old value |
-- NOCHANGE: don't change output during write |
--------------------------------------------------------------------- |
|
library ieee; |
use ieee.std_logic_1164.all; |
use ieee.numeric_std.all; |
|
entity generic_dpram is |
generic( |
DATA_WIDTH: integer; |
ADDR_WIDTH: integer; |
SIZE: integer; |
MODE: string:="DONTCARE" |
); |
port( |
clka_i: in std_logic; |
cea_i: in std_logic; |
wea_i: in std_logic; |
addra_i: in std_logic_vector(ADDR_WIDTH-1 downto 0); |
da_i: in std_logic_vector(DATA_WIDTH-1 downto 0); |
da_o: out std_logic_vector(DATA_WIDTH-1 downto 0); |
|
clkb_i: in std_logic; |
ceb_i: in std_logic; |
addrb_i: in std_logic_vector(ADDR_WIDTH-1 downto 0); |
db_o: out std_logic_vector(DATA_WIDTH-1 downto 0) |
); |
end entity; |
|
architecture rtl of generic_dpram is |
|
type ram_type is array(SIZE-1 downto 0) of std_logic_vector(DATA_WIDTH-1 downto 0); |
signal ram: ram_type; |
|
attribute syn_ramstyle: string; |
attribute syn_ramstyle of ram: signal is "no_rw_check"; |
attribute ram_style: string; -- for Xilinx |
attribute ram_style of ram: signal is "block"; |
|
begin |
|
-- Ensure that generics have valid values |
|
assert SIZE<=2**ADDR_WIDTH |
report "SIZE must be less or equal than 2^ADDR_WIDTH" |
severity failure; |
|
assert MODE="DONTCARE" or MODE="WR_FIRST" or MODE="RD_FIRST" or MODE="NOCHANGE" |
report "Unrecognized MODE value (DONTCARE, WR_FIRST, RD_FIRST or NOCHANGE expected)" |
severity failure; |
|
-- Port A (read/write) |
|
port_a_dont_care_gen: if MODE="DONTCARE" generate |
process (clka_i) is |
begin |
if rising_edge(clka_i) then |
if cea_i='1' then |
if wea_i='1' then |
ram(to_integer(unsigned(addra_i)))<=da_i; |
da_o<=(others=>'-'); |
else |
if is_x(addra_i) then |
da_o<=(others=>'X'); |
else |
da_o<=ram(to_integer(unsigned(addra_i))); |
end if; |
end if; |
end if; |
end if; |
end process; |
end generate; |
|
port_a_write_first_gen: if MODE="WR_FIRST" generate |
process (clka_i) is |
begin |
if rising_edge(clka_i) then |
if cea_i='1' then |
if wea_i='1' then |
ram(to_integer(unsigned(addra_i)))<=da_i; |
da_o<=da_i; |
else |
if is_x(addra_i) then |
da_o<=(others=>'X'); |
else |
da_o<=ram(to_integer(unsigned(addra_i))); |
end if; |
end if; |
end if; |
end if; |
end process; |
end generate; |
|
port_a_read_first_gen: if MODE="RD_FIRST" generate |
process (clka_i) is |
begin |
if rising_edge(clka_i) then |
if cea_i='1' then |
if wea_i='1' then |
ram(to_integer(unsigned(addra_i)))<=da_i; |
end if; |
if is_x(addra_i) then |
da_o<=(others=>'X'); |
else |
da_o<=ram(to_integer(unsigned(addra_i))); |
end if; |
end if; |
end if; |
end process; |
end generate; |
|
port_a_no_change_gen: if MODE="NOCHANGE" generate |
process (clka_i) is |
begin |
if rising_edge(clka_i) then |
if cea_i='1' then |
if wea_i='1' then |
ram(to_integer(unsigned(addra_i)))<=da_i; |
else |
if is_x(addra_i) then |
da_o<=(others=>'X'); |
else |
da_o<=ram(to_integer(unsigned(addra_i))); |
end if; |
end if; |
end if; |
end if; |
end process; |
end generate; |
|
-- Port B (read only) |
|
process (clkb_i) is |
begin |
if rising_edge(clkb_i) then |
if ceb_i='1' then |
if is_x(addrb_i) then |
db_o<=(others=>'X'); |
else |
db_o<=ram(to_integer(unsigned(addrb_i))); |
end if; |
end if; |
end if; |
end process; |
|
end architecture; |
/platform/ibus_adapter.vhd
1,101 → 1,101
--------------------------------------------------------------------- |
-- IBUS adapter |
-- |
-- Part of the LXP32 test platform |
-- |
-- Copyright (c) 2016 by Alex I. Kuznetsov |
-- |
-- Converts the Low Latency Interface to WISHBONE registered |
-- feedback protocol. |
-- |
-- Note: regardless of whether this description is synthesizable, |
-- it was designed exclusively for simulation purposes. |
--------------------------------------------------------------------- |
|
library ieee; |
use ieee.std_logic_1164.all; |
use ieee.numeric_std.all; |
|
entity ibus_adapter is |
port( |
clk_i: in std_logic; |
rst_i: in std_logic; |
|
ibus_cyc_i: in std_logic; |
ibus_stb_i: in std_logic; |
ibus_cti_i: in std_logic_vector(2 downto 0); |
ibus_bte_i: in std_logic_vector(1 downto 0); |
ibus_ack_o: out std_logic; |
ibus_adr_i: in std_logic_vector(29 downto 0); |
ibus_dat_o: out std_logic_vector(31 downto 0); |
|
lli_re_o: out std_logic; |
lli_adr_o: out std_logic_vector(29 downto 0); |
lli_dat_i: in std_logic_vector(31 downto 0); |
lli_busy_i: in std_logic |
); |
end entity; |
|
architecture rtl of ibus_adapter is |
|
constant burst_delay: integer:=5; |
signal burst_delay_cnt: integer:=0; |
signal delay_burst: std_logic; |
|
signal re: std_logic; |
signal requested: std_logic:='0'; |
signal adr: unsigned(29 downto 0); |
signal ack: std_logic; |
|
begin |
|
-- Insert burst delay |
|
process (clk_i) is |
begin |
if rising_edge(clk_i) then |
if rst_i='1' then |
burst_delay_cnt<=0; |
elsif ibus_cyc_i='0' then |
burst_delay_cnt<=burst_delay; |
elsif burst_delay_cnt/=0 then |
burst_delay_cnt<=burst_delay_cnt-1; |
end if; |
end if; |
end process; |
|
delay_burst<='1' when burst_delay_cnt/=0 else '0'; |
|
-- Generate ACK signal |
|
process (clk_i) is |
begin |
if rising_edge(clk_i) then |
if rst_i='1' then |
requested<='0'; |
elsif lli_busy_i='0' then |
requested<=re; |
end if; |
end if; |
end process; |
|
ack<=requested and not lli_busy_i; |
|
-- Generate LLI signals |
|
re<=(ibus_cyc_i and ibus_stb_i and not delay_burst) when ack='0' or |
(ibus_cti_i="010" and ibus_bte_i="00") else '0'; |
|
adr<=unsigned(ibus_adr_i) when re='1' and ack='0' else |
unsigned(ibus_adr_i)+1 when re='1' and ack='1' else |
(others=>'-'); |
|
lli_re_o<=re; |
lli_adr_o<=std_logic_vector(adr); |
|
-- Generate IBUS signals |
|
ibus_ack_o<=ack; |
ibus_dat_o<=lli_dat_i when ack='1' else (others=>'-'); |
|
end architecture; |
--------------------------------------------------------------------- |
-- IBUS adapter |
-- |
-- Part of the LXP32 test platform |
-- |
-- Copyright (c) 2016 by Alex I. Kuznetsov |
-- |
-- Converts the Low Latency Interface to WISHBONE registered |
-- feedback protocol. |
-- |
-- Note: regardless of whether this description is synthesizable, |
-- it was designed exclusively for simulation purposes. |
--------------------------------------------------------------------- |
|
library ieee; |
use ieee.std_logic_1164.all; |
use ieee.numeric_std.all; |
|
entity ibus_adapter is |
port( |
clk_i: in std_logic; |
rst_i: in std_logic; |
|
ibus_cyc_i: in std_logic; |
ibus_stb_i: in std_logic; |
ibus_cti_i: in std_logic_vector(2 downto 0); |
ibus_bte_i: in std_logic_vector(1 downto 0); |
ibus_ack_o: out std_logic; |
ibus_adr_i: in std_logic_vector(29 downto 0); |
ibus_dat_o: out std_logic_vector(31 downto 0); |
|
lli_re_o: out std_logic; |
lli_adr_o: out std_logic_vector(29 downto 0); |
lli_dat_i: in std_logic_vector(31 downto 0); |
lli_busy_i: in std_logic |
); |
end entity; |
|
architecture rtl of ibus_adapter is |
|
constant burst_delay: integer:=5; |
signal burst_delay_cnt: integer:=0; |
signal delay_burst: std_logic; |
|
signal re: std_logic; |
signal requested: std_logic:='0'; |
signal adr: unsigned(29 downto 0); |
signal ack: std_logic; |
|
begin |
|
-- Insert burst delay |
|
process (clk_i) is |
begin |
if rising_edge(clk_i) then |
if rst_i='1' then |
burst_delay_cnt<=0; |
elsif ibus_cyc_i='0' then |
burst_delay_cnt<=burst_delay; |
elsif burst_delay_cnt/=0 then |
burst_delay_cnt<=burst_delay_cnt-1; |
end if; |
end if; |
end process; |
|
delay_burst<='1' when burst_delay_cnt/=0 else '0'; |
|
-- Generate ACK signal |
|
process (clk_i) is |
begin |
if rising_edge(clk_i) then |
if rst_i='1' then |
requested<='0'; |
elsif lli_busy_i='0' then |
requested<=re; |
end if; |
end if; |
end process; |
|
ack<=requested and not lli_busy_i; |
|
-- Generate LLI signals |
|
re<=(ibus_cyc_i and ibus_stb_i and not delay_burst) when ack='0' or |
(ibus_cti_i="010" and ibus_bte_i="00") else '0'; |
|
adr<=unsigned(ibus_adr_i) when re='1' and ack='0' else |
unsigned(ibus_adr_i)+1 when re='1' and ack='1' else |
(others=>'-'); |
|
lli_re_o<=re; |
lli_adr_o<=std_logic_vector(adr); |
|
-- Generate IBUS signals |
|
ibus_ack_o<=ack; |
ibus_dat_o<=lli_dat_i when ack='1' else (others=>'-'); |
|
end architecture; |
/platform/intercon.vhd
1,215 → 1,215
--------------------------------------------------------------------- |
-- Simple WISHBONE interconnect |
-- |
-- Generated by wigen at 02/16/16 06:15:08 |
-- |
-- Configuration: |
-- Number of masters: 2 |
-- Number of slaves: 4 |
-- Master address width: 32 |
-- Slave address width: 28 |
-- Port size: 32 |
-- Port granularity: 8 |
-- Entity name: intercon |
-- Pipelined arbiter: no |
-- Registered feedback: no |
-- Unsafe slave decoder: no |
-- |
-- Command line: |
-- wigen -e intercon 2 4 32 28 32 8 |
--------------------------------------------------------------------- |
|
library ieee; |
use ieee.std_logic_1164.all; |
|
entity intercon is |
port( |
clk_i: in std_logic; |
rst_i: in std_logic; |
|
s0_cyc_i: in std_logic; |
s0_stb_i: in std_logic; |
s0_we_i: in std_logic; |
s0_sel_i: in std_logic_vector(3 downto 0); |
s0_ack_o: out std_logic; |
s0_adr_i: in std_logic_vector(31 downto 2); |
s0_dat_i: in std_logic_vector(31 downto 0); |
s0_dat_o: out std_logic_vector(31 downto 0); |
|
s1_cyc_i: in std_logic; |
s1_stb_i: in std_logic; |
s1_we_i: in std_logic; |
s1_sel_i: in std_logic_vector(3 downto 0); |
s1_ack_o: out std_logic; |
s1_adr_i: in std_logic_vector(31 downto 2); |
s1_dat_i: in std_logic_vector(31 downto 0); |
s1_dat_o: out std_logic_vector(31 downto 0); |
|
m0_cyc_o: out std_logic; |
m0_stb_o: out std_logic; |
m0_we_o: out std_logic; |
m0_sel_o: out std_logic_vector(3 downto 0); |
m0_ack_i: in std_logic; |
m0_adr_o: out std_logic_vector(27 downto 2); |
m0_dat_o: out std_logic_vector(31 downto 0); |
m0_dat_i: in std_logic_vector(31 downto 0); |
|
m1_cyc_o: out std_logic; |
m1_stb_o: out std_logic; |
m1_we_o: out std_logic; |
m1_sel_o: out std_logic_vector(3 downto 0); |
m1_ack_i: in std_logic; |
m1_adr_o: out std_logic_vector(27 downto 2); |
m1_dat_o: out std_logic_vector(31 downto 0); |
m1_dat_i: in std_logic_vector(31 downto 0); |
|
m2_cyc_o: out std_logic; |
m2_stb_o: out std_logic; |
m2_we_o: out std_logic; |
m2_sel_o: out std_logic_vector(3 downto 0); |
m2_ack_i: in std_logic; |
m2_adr_o: out std_logic_vector(27 downto 2); |
m2_dat_o: out std_logic_vector(31 downto 0); |
m2_dat_i: in std_logic_vector(31 downto 0); |
|
m3_cyc_o: out std_logic; |
m3_stb_o: out std_logic; |
m3_we_o: out std_logic; |
m3_sel_o: out std_logic_vector(3 downto 0); |
m3_ack_i: in std_logic; |
m3_adr_o: out std_logic_vector(27 downto 2); |
m3_dat_o: out std_logic_vector(31 downto 0); |
m3_dat_i: in std_logic_vector(31 downto 0) |
); |
end entity; |
|
architecture rtl of intercon is |
|
signal request: std_logic_vector(1 downto 0); |
signal grant_next: std_logic_vector(1 downto 0); |
signal grant: std_logic_vector(1 downto 0); |
signal grant_reg: std_logic_vector(1 downto 0):=(others=>'0'); |
|
signal select_slave: std_logic_vector(4 downto 0); |
|
signal cyc_mux: std_logic; |
signal stb_mux: std_logic; |
signal we_mux: std_logic; |
signal sel_mux: std_logic_vector(3 downto 0); |
signal adr_mux: std_logic_vector(31 downto 2); |
signal wdata_mux: std_logic_vector(31 downto 0); |
|
signal ack_mux: std_logic; |
signal rdata_mux: std_logic_vector(31 downto 0); |
|
begin |
|
-- ARBITER |
-- Selects the active master. Masters with lower port numbers |
-- have higher priority. Ongoing cycles are not interrupted. |
|
request<=s1_cyc_i&s0_cyc_i; |
|
grant_next<="01" when request(0)='1' else |
"10" when request(1)='1' else |
(others=>'0'); |
|
grant<=grant_reg when (request and grant_reg)/="00" else grant_next; |
|
process (clk_i) is |
begin |
if rising_edge(clk_i) then |
if rst_i='1' then |
grant_reg<=(others=>'0'); |
else |
grant_reg<=grant; |
end if; |
end if; |
end process; |
|
-- MASTER->SLAVE MUX |
|
cyc_mux<=(s0_cyc_i and grant(0)) or |
(s1_cyc_i and grant(1)); |
|
stb_mux<=(s0_stb_i and grant(0)) or |
(s1_stb_i and grant(1)); |
|
we_mux<=(s0_we_i and grant(0)) or |
(s1_we_i and grant(1)); |
|
sel_mux_gen: for i in sel_mux'range generate |
sel_mux(i)<=(s0_sel_i(i) and grant(0)) or |
(s1_sel_i(i) and grant(1)); |
end generate; |
|
adr_mux_gen: for i in adr_mux'range generate |
adr_mux(i)<=(s0_adr_i(i) and grant(0)) or |
(s1_adr_i(i) and grant(1)); |
end generate; |
|
wdata_mux_gen: for i in wdata_mux'range generate |
wdata_mux(i)<=(s0_dat_i(i) and grant(0)) or |
(s1_dat_i(i) and grant(1)); |
end generate; |
|
-- MASTER->SLAVE DEMUX |
|
select_slave<="00001" when adr_mux(31 downto 28)="0000" else |
"00010" when adr_mux(31 downto 28)="0001" else |
"00100" when adr_mux(31 downto 28)="0010" else |
"01000" when adr_mux(31 downto 28)="0011" else |
"10000"; -- fallback slave |
|
m0_cyc_o<=cyc_mux and select_slave(0); |
m0_stb_o<=stb_mux and select_slave(0); |
m0_we_o<=we_mux; |
m0_sel_o<=sel_mux; |
m0_adr_o<=adr_mux(m0_adr_o'range); |
m0_dat_o<=wdata_mux; |
|
m1_cyc_o<=cyc_mux and select_slave(1); |
m1_stb_o<=stb_mux and select_slave(1); |
m1_we_o<=we_mux; |
m1_sel_o<=sel_mux; |
m1_adr_o<=adr_mux(m1_adr_o'range); |
m1_dat_o<=wdata_mux; |
|
m2_cyc_o<=cyc_mux and select_slave(2); |
m2_stb_o<=stb_mux and select_slave(2); |
m2_we_o<=we_mux; |
m2_sel_o<=sel_mux; |
m2_adr_o<=adr_mux(m2_adr_o'range); |
m2_dat_o<=wdata_mux; |
|
m3_cyc_o<=cyc_mux and select_slave(3); |
m3_stb_o<=stb_mux and select_slave(3); |
m3_we_o<=we_mux; |
m3_sel_o<=sel_mux; |
m3_adr_o<=adr_mux(m3_adr_o'range); |
m3_dat_o<=wdata_mux; |
|
-- SLAVE->MASTER MUX |
|
ack_mux<=(m0_ack_i and select_slave(0)) or |
(m1_ack_i and select_slave(1)) or |
(m2_ack_i and select_slave(2)) or |
(m3_ack_i and select_slave(3)) or |
(cyc_mux and stb_mux and select_slave(4)); -- fallback slave |
|
rdata_mux_gen: for i in rdata_mux'range generate |
rdata_mux(i)<=(m0_dat_i(i) and select_slave(0)) or |
(m1_dat_i(i) and select_slave(1)) or |
(m2_dat_i(i) and select_slave(2)) or |
(m3_dat_i(i) and select_slave(3)); |
end generate; |
|
-- SLAVE->MASTER DEMUX |
|
s0_ack_o<=ack_mux and grant(0); |
s0_dat_o<=rdata_mux; |
|
s1_ack_o<=ack_mux and grant(1); |
s1_dat_o<=rdata_mux; |
|
end architecture; |
--------------------------------------------------------------------- |
-- Simple WISHBONE interconnect |
-- |
-- Generated by wigen at 02/16/16 06:15:08 |
-- |
-- Configuration: |
-- Number of masters: 2 |
-- Number of slaves: 4 |
-- Master address width: 32 |
-- Slave address width: 28 |
-- Port size: 32 |
-- Port granularity: 8 |
-- Entity name: intercon |
-- Pipelined arbiter: no |
-- Registered feedback: no |
-- Unsafe slave decoder: no |
-- |
-- Command line: |
-- wigen -e intercon 2 4 32 28 32 8 |
--------------------------------------------------------------------- |
|
library ieee; |
use ieee.std_logic_1164.all; |
|
entity intercon is |
port( |
clk_i: in std_logic; |
rst_i: in std_logic; |
|
s0_cyc_i: in std_logic; |
s0_stb_i: in std_logic; |
s0_we_i: in std_logic; |
s0_sel_i: in std_logic_vector(3 downto 0); |
s0_ack_o: out std_logic; |
s0_adr_i: in std_logic_vector(31 downto 2); |
s0_dat_i: in std_logic_vector(31 downto 0); |
s0_dat_o: out std_logic_vector(31 downto 0); |
|
s1_cyc_i: in std_logic; |
s1_stb_i: in std_logic; |
s1_we_i: in std_logic; |
s1_sel_i: in std_logic_vector(3 downto 0); |
s1_ack_o: out std_logic; |
s1_adr_i: in std_logic_vector(31 downto 2); |
s1_dat_i: in std_logic_vector(31 downto 0); |
s1_dat_o: out std_logic_vector(31 downto 0); |
|
m0_cyc_o: out std_logic; |
m0_stb_o: out std_logic; |
m0_we_o: out std_logic; |
m0_sel_o: out std_logic_vector(3 downto 0); |
m0_ack_i: in std_logic; |
m0_adr_o: out std_logic_vector(27 downto 2); |
m0_dat_o: out std_logic_vector(31 downto 0); |
m0_dat_i: in std_logic_vector(31 downto 0); |
|
m1_cyc_o: out std_logic; |
m1_stb_o: out std_logic; |
m1_we_o: out std_logic; |
m1_sel_o: out std_logic_vector(3 downto 0); |
m1_ack_i: in std_logic; |
m1_adr_o: out std_logic_vector(27 downto 2); |
m1_dat_o: out std_logic_vector(31 downto 0); |
m1_dat_i: in std_logic_vector(31 downto 0); |
|
m2_cyc_o: out std_logic; |
m2_stb_o: out std_logic; |
m2_we_o: out std_logic; |
m2_sel_o: out std_logic_vector(3 downto 0); |
m2_ack_i: in std_logic; |
m2_adr_o: out std_logic_vector(27 downto 2); |
m2_dat_o: out std_logic_vector(31 downto 0); |
m2_dat_i: in std_logic_vector(31 downto 0); |
|
m3_cyc_o: out std_logic; |
m3_stb_o: out std_logic; |
m3_we_o: out std_logic; |
m3_sel_o: out std_logic_vector(3 downto 0); |
m3_ack_i: in std_logic; |
m3_adr_o: out std_logic_vector(27 downto 2); |
m3_dat_o: out std_logic_vector(31 downto 0); |
m3_dat_i: in std_logic_vector(31 downto 0) |
); |
end entity; |
|
architecture rtl of intercon is |
|
signal request: std_logic_vector(1 downto 0); |
signal grant_next: std_logic_vector(1 downto 0); |
signal grant: std_logic_vector(1 downto 0); |
signal grant_reg: std_logic_vector(1 downto 0):=(others=>'0'); |
|
signal select_slave: std_logic_vector(4 downto 0); |
|
signal cyc_mux: std_logic; |
signal stb_mux: std_logic; |
signal we_mux: std_logic; |
signal sel_mux: std_logic_vector(3 downto 0); |
signal adr_mux: std_logic_vector(31 downto 2); |
signal wdata_mux: std_logic_vector(31 downto 0); |
|
signal ack_mux: std_logic; |
signal rdata_mux: std_logic_vector(31 downto 0); |
|
begin |
|
-- ARBITER |
-- Selects the active master. Masters with lower port numbers |
-- have higher priority. Ongoing cycles are not interrupted. |
|
request<=s1_cyc_i&s0_cyc_i; |
|
grant_next<="01" when request(0)='1' else |
"10" when request(1)='1' else |
(others=>'0'); |
|
grant<=grant_reg when (request and grant_reg)/="00" else grant_next; |
|
process (clk_i) is |
begin |
if rising_edge(clk_i) then |
if rst_i='1' then |
grant_reg<=(others=>'0'); |
else |
grant_reg<=grant; |
end if; |
end if; |
end process; |
|
-- MASTER->SLAVE MUX |
|
cyc_mux<=(s0_cyc_i and grant(0)) or |
(s1_cyc_i and grant(1)); |
|
stb_mux<=(s0_stb_i and grant(0)) or |
(s1_stb_i and grant(1)); |
|
we_mux<=(s0_we_i and grant(0)) or |
(s1_we_i and grant(1)); |
|
sel_mux_gen: for i in sel_mux'range generate |
sel_mux(i)<=(s0_sel_i(i) and grant(0)) or |
(s1_sel_i(i) and grant(1)); |
end generate; |
|
adr_mux_gen: for i in adr_mux'range generate |
adr_mux(i)<=(s0_adr_i(i) and grant(0)) or |
(s1_adr_i(i) and grant(1)); |
end generate; |
|
wdata_mux_gen: for i in wdata_mux'range generate |
wdata_mux(i)<=(s0_dat_i(i) and grant(0)) or |
(s1_dat_i(i) and grant(1)); |
end generate; |
|
-- MASTER->SLAVE DEMUX |
|
select_slave<="00001" when adr_mux(31 downto 28)="0000" else |
"00010" when adr_mux(31 downto 28)="0001" else |
"00100" when adr_mux(31 downto 28)="0010" else |
"01000" when adr_mux(31 downto 28)="0011" else |
"10000"; -- fallback slave |
|
m0_cyc_o<=cyc_mux and select_slave(0); |
m0_stb_o<=stb_mux and select_slave(0); |
m0_we_o<=we_mux; |
m0_sel_o<=sel_mux; |
m0_adr_o<=adr_mux(m0_adr_o'range); |
m0_dat_o<=wdata_mux; |
|
m1_cyc_o<=cyc_mux and select_slave(1); |
m1_stb_o<=stb_mux and select_slave(1); |
m1_we_o<=we_mux; |
m1_sel_o<=sel_mux; |
m1_adr_o<=adr_mux(m1_adr_o'range); |
m1_dat_o<=wdata_mux; |
|
m2_cyc_o<=cyc_mux and select_slave(2); |
m2_stb_o<=stb_mux and select_slave(2); |
m2_we_o<=we_mux; |
m2_sel_o<=sel_mux; |
m2_adr_o<=adr_mux(m2_adr_o'range); |
m2_dat_o<=wdata_mux; |
|
m3_cyc_o<=cyc_mux and select_slave(3); |
m3_stb_o<=stb_mux and select_slave(3); |
m3_we_o<=we_mux; |
m3_sel_o<=sel_mux; |
m3_adr_o<=adr_mux(m3_adr_o'range); |
m3_dat_o<=wdata_mux; |
|
-- SLAVE->MASTER MUX |
|
ack_mux<=(m0_ack_i and select_slave(0)) or |
(m1_ack_i and select_slave(1)) or |
(m2_ack_i and select_slave(2)) or |
(m3_ack_i and select_slave(3)) or |
(cyc_mux and stb_mux and select_slave(4)); -- fallback slave |
|
rdata_mux_gen: for i in rdata_mux'range generate |
rdata_mux(i)<=(m0_dat_i(i) and select_slave(0)) or |
(m1_dat_i(i) and select_slave(1)) or |
(m2_dat_i(i) and select_slave(2)) or |
(m3_dat_i(i) and select_slave(3)); |
end generate; |
|
-- SLAVE->MASTER DEMUX |
|
s0_ack_o<=ack_mux and grant(0); |
s0_dat_o<=rdata_mux; |
|
s1_ack_o<=ack_mux and grant(1); |
s1_dat_o<=rdata_mux; |
|
end architecture; |
/platform/platform.vhd
1,356 → 1,356
--------------------------------------------------------------------- |
-- LXP32 platform top-level design unit |
-- |
-- Part of the LXP32 test platform |
-- |
-- Copyright (c) 2016 by Alex I. Kuznetsov |
-- |
-- A SoC-like simulation platform for the LXP32 CPU, containing |
-- a few peripherals such as program RAM, timer and coprocessor. |
-- |
-- Note: regardless of whether this description is synthesizable, |
-- it was designed exclusively for simulation purposes. |
--------------------------------------------------------------------- |
|
library ieee; |
use ieee.std_logic_1164.all; |
|
entity platform is |
generic( |
CPU_DBUS_RMW: boolean; |
CPU_MUL_ARCH: string; |
MODEL_LXP32C: boolean; |
THROTTLE_DBUS: boolean; |
THROTTLE_IBUS: boolean |
); |
port( |
clk_i: in std_logic; |
rst_i: in std_logic; |
cpu_rst_i: in std_logic; |
|
wbm_cyc_o: out std_logic; |
wbm_stb_o: out std_logic; |
wbm_we_o: out std_logic; |
wbm_sel_o: out std_logic_vector(3 downto 0); |
wbm_ack_i: in std_logic; |
wbm_adr_o: out std_logic_vector(27 downto 2); |
wbm_dat_o: out std_logic_vector(31 downto 0); |
wbm_dat_i: in std_logic_vector(31 downto 0); |
|
wbs_cyc_i: in std_logic; |
wbs_stb_i: in std_logic; |
wbs_we_i: in std_logic; |
wbs_sel_i: in std_logic_vector(3 downto 0); |
wbs_ack_o: out std_logic; |
wbs_adr_i: in std_logic_vector(31 downto 2); |
wbs_dat_i: in std_logic_vector(31 downto 0); |
wbs_dat_o: out std_logic_vector(31 downto 0); |
|
gp_io: inout std_logic_vector(31 downto 0) |
); |
end entity; |
|
architecture rtl of platform is |
|
type wbm_type is record |
cyc: std_logic; |
stb: std_logic; |
we: std_logic; |
sel: std_logic_vector(3 downto 0); |
ack: std_logic; |
adr: std_logic_vector(31 downto 2); |
wdata: std_logic_vector(31 downto 0); |
rdata: std_logic_vector(31 downto 0); |
end record; |
|
type wbs_type is record |
cyc: std_logic; |
stb: std_logic; |
we: std_logic; |
sel: std_logic_vector(3 downto 0); |
ack: std_logic; |
adr: std_logic_vector(27 downto 2); |
wdata: std_logic_vector(31 downto 0); |
rdata: std_logic_vector(31 downto 0); |
end record; |
|
type ibus_type is record |
cyc: std_logic; |
stb: std_logic; |
cti: std_logic_vector(2 downto 0); |
bte: std_logic_vector(1 downto 0); |
ack: std_logic; |
adr: std_logic_vector(29 downto 0); |
dat: std_logic_vector(31 downto 0); |
end record; |
|
signal cpu_rst: std_logic; |
signal cpu_irq: std_logic_vector(7 downto 0); |
signal cpu_dbus: wbm_type; |
signal cpu_ibus: ibus_type; |
|
signal lli_re: std_logic; |
signal lli_adr: std_logic_vector(29 downto 0); |
signal lli_dat: std_logic_vector(31 downto 0); |
signal lli_busy: std_logic; |
|
signal monitor_dbus: wbm_type; |
|
signal ram_wb: wbs_type; |
|
signal timer_wb: wbs_type; |
signal timer_elapsed: std_logic; |
|
signal coprocessor_wb: wbs_type; |
signal coprocessor_irq: std_logic; |
|
begin |
|
-- Interconnect |
|
intercon_inst: entity work.intercon(rtl) |
port map( |
clk_i=>clk_i, |
rst_i=>rst_i, |
|
s0_cyc_i=>wbs_cyc_i, |
s0_stb_i=>wbs_stb_i, |
s0_we_i=>wbs_we_i, |
s0_sel_i=>wbs_sel_i, |
s0_ack_o=>wbs_ack_o, |
s0_adr_i=>wbs_adr_i, |
s0_dat_i=>wbs_dat_i, |
s0_dat_o=>wbs_dat_o, |
|
s1_cyc_i=>monitor_dbus.cyc, |
s1_stb_i=>monitor_dbus.stb, |
s1_we_i=>monitor_dbus.we, |
s1_sel_i=>monitor_dbus.sel, |
s1_ack_o=>monitor_dbus.ack, |
s1_adr_i=>monitor_dbus.adr, |
s1_dat_i=>monitor_dbus.wdata, |
s1_dat_o=>monitor_dbus.rdata, |
|
m0_cyc_o=>ram_wb.cyc, |
m0_stb_o=>ram_wb.stb, |
m0_we_o=>ram_wb.we, |
m0_sel_o=>ram_wb.sel, |
m0_ack_i=>ram_wb.ack, |
m0_adr_o=>ram_wb.adr, |
m0_dat_o=>ram_wb.wdata, |
m0_dat_i=>ram_wb.rdata, |
|
m1_cyc_o=>wbm_cyc_o, |
m1_stb_o=>wbm_stb_o, |
m1_we_o=>wbm_we_o, |
m1_sel_o=>wbm_sel_o, |
m1_ack_i=>wbm_ack_i, |
m1_adr_o=>wbm_adr_o, |
m1_dat_o=>wbm_dat_o, |
m1_dat_i=>wbm_dat_i, |
|
m2_cyc_o=>timer_wb.cyc, |
m2_stb_o=>timer_wb.stb, |
m2_we_o=>timer_wb.we, |
m2_sel_o=>timer_wb.sel, |
m2_ack_i=>timer_wb.ack, |
m2_adr_o=>timer_wb.adr, |
m2_dat_o=>timer_wb.wdata, |
m2_dat_i=>timer_wb.rdata, |
|
m3_cyc_o=>coprocessor_wb.cyc, |
m3_stb_o=>coprocessor_wb.stb, |
m3_we_o=>coprocessor_wb.we, |
m3_sel_o=>coprocessor_wb.sel, |
m3_ack_i=>coprocessor_wb.ack, |
m3_adr_o=>coprocessor_wb.adr, |
m3_dat_o=>coprocessor_wb.wdata, |
m3_dat_i=>coprocessor_wb.rdata |
); |
|
-- CPU |
|
cpu_rst<=cpu_rst_i or rst_i; |
|
-- Note: we connect the timer IRQ to 2 CPU channels to test |
-- handling of simultaneously arriving interrupt requests. |
|
cpu_irq<="00000"&coprocessor_irq&timer_elapsed&timer_elapsed; |
|
gen_lxp32u: if not MODEL_LXP32C generate |
lxp32u_top_inst: entity work.lxp32u_top(rtl) |
generic map( |
DBUS_RMW=>CPU_DBUS_RMW, |
DIVIDER_EN=>true, |
MUL_ARCH=>CPU_MUL_ARCH, |
START_ADDR=>(others=>'0') |
) |
port map( |
clk_i=>clk_i, |
rst_i=>cpu_rst, |
|
lli_re_o=>lli_re, |
lli_adr_o=>lli_adr, |
lli_dat_i=>lli_dat, |
lli_busy_i=>lli_busy, |
|
dbus_cyc_o=>cpu_dbus.cyc, |
dbus_stb_o=>cpu_dbus.stb, |
dbus_we_o=>cpu_dbus.we, |
dbus_sel_o=>cpu_dbus.sel, |
dbus_ack_i=>cpu_dbus.ack, |
dbus_adr_o=>cpu_dbus.adr, |
dbus_dat_o=>cpu_dbus.wdata, |
dbus_dat_i=>cpu_dbus.rdata, |
|
irq_i=>cpu_irq |
); |
end generate; |
|
gen_lxp32c: if MODEL_LXP32C generate |
lxp32c_top_inst: entity work.lxp32c_top(rtl) |
generic map( |
DBUS_RMW=>CPU_DBUS_RMW, |
DIVIDER_EN=>true, |
IBUS_BURST_SIZE=>16, |
IBUS_PREFETCH_SIZE=>32, |
MUL_ARCH=>CPU_MUL_ARCH, |
START_ADDR=>(others=>'0') |
) |
port map( |
clk_i=>clk_i, |
rst_i=>cpu_rst, |
|
ibus_cyc_o=>cpu_ibus.cyc, |
ibus_stb_o=>cpu_ibus.stb, |
ibus_cti_o=>cpu_ibus.cti, |
ibus_bte_o=>cpu_ibus.bte, |
ibus_ack_i=>cpu_ibus.ack, |
ibus_adr_o=>cpu_ibus.adr, |
ibus_dat_i=>cpu_ibus.dat, |
|
dbus_cyc_o=>cpu_dbus.cyc, |
dbus_stb_o=>cpu_dbus.stb, |
dbus_we_o=>cpu_dbus.we, |
dbus_sel_o=>cpu_dbus.sel, |
dbus_ack_i=>cpu_dbus.ack, |
dbus_adr_o=>cpu_dbus.adr, |
dbus_dat_o=>cpu_dbus.wdata, |
dbus_dat_i=>cpu_dbus.rdata, |
|
irq_i=>cpu_irq |
); |
|
ibus_adapter_inst: entity work.ibus_adapter(rtl) |
port map( |
clk_i=>clk_i, |
rst_i=>rst_i, |
|
ibus_cyc_i=>cpu_ibus.cyc, |
ibus_stb_i=>cpu_ibus.stb, |
ibus_cti_i=>cpu_ibus.cti, |
ibus_bte_i=>cpu_ibus.bte, |
ibus_ack_o=>cpu_ibus.ack, |
ibus_adr_i=>cpu_ibus.adr, |
ibus_dat_o=>cpu_ibus.dat, |
|
lli_re_o=>lli_re, |
lli_adr_o=>lli_adr, |
lli_dat_i=>lli_dat, |
lli_busy_i=>lli_busy |
); |
end generate; |
|
-- DBUS monitor |
|
dbus_monitor_inst: entity work.dbus_monitor(rtl) |
generic map( |
THROTTLE=>THROTTLE_DBUS |
) |
port map( |
clk_i=>clk_i, |
rst_i=>rst_i, |
|
wbs_cyc_i=>cpu_dbus.cyc, |
wbs_stb_i=>cpu_dbus.stb, |
wbs_we_i=>cpu_dbus.we, |
wbs_sel_i=>cpu_dbus.sel, |
wbs_ack_o=>cpu_dbus.ack, |
wbs_adr_i=>cpu_dbus.adr, |
wbs_dat_i=>cpu_dbus.wdata, |
wbs_dat_o=>cpu_dbus.rdata, |
|
wbm_cyc_o=>monitor_dbus.cyc, |
wbm_stb_o=>monitor_dbus.stb, |
wbm_we_o=>monitor_dbus.we, |
wbm_sel_o=>monitor_dbus.sel, |
wbm_ack_i=>monitor_dbus.ack, |
wbm_adr_o=>monitor_dbus.adr, |
wbm_dat_o=>monitor_dbus.wdata, |
wbm_dat_i=>monitor_dbus.rdata |
); |
|
-- Program RAM |
|
program_ram_inst: entity work.program_ram(rtl) |
generic map( |
THROTTLE=>THROTTLE_IBUS |
) |
port map( |
clk_i=>clk_i, |
rst_i=>rst_i, |
|
wbs_cyc_i=>ram_wb.cyc, |
wbs_stb_i=>ram_wb.stb, |
wbs_we_i=>ram_wb.we, |
wbs_sel_i=>ram_wb.sel, |
wbs_ack_o=>ram_wb.ack, |
wbs_adr_i=>ram_wb.adr, |
wbs_dat_i=>ram_wb.wdata, |
wbs_dat_o=>ram_wb.rdata, |
|
lli_re_i=>lli_re, |
lli_adr_i=>lli_adr, |
lli_dat_o=>lli_dat, |
lli_busy_o=>lli_busy |
); |
|
-- Timer |
|
timer_inst: entity work.timer(rtl) |
port map( |
clk_i=>clk_i, |
rst_i=>rst_i, |
|
wbs_cyc_i=>timer_wb.cyc, |
wbs_stb_i=>timer_wb.stb, |
wbs_we_i=>timer_wb.we, |
wbs_sel_i=>timer_wb.sel, |
wbs_ack_o=>timer_wb.ack, |
wbs_adr_i=>timer_wb.adr, |
wbs_dat_i=>timer_wb.wdata, |
wbs_dat_o=>timer_wb.rdata, |
|
elapsed_o=>timer_elapsed |
); |
|
-- Coprocessor |
|
coprocessor_inst: entity work.coprocessor(rtl) |
port map( |
clk_i=>clk_i, |
rst_i=>rst_i, |
|
wbs_cyc_i=>coprocessor_wb.cyc, |
wbs_stb_i=>coprocessor_wb.stb, |
wbs_we_i=>coprocessor_wb.we, |
wbs_sel_i=>coprocessor_wb.sel, |
wbs_ack_o=>coprocessor_wb.ack, |
wbs_adr_i=>coprocessor_wb.adr, |
wbs_dat_i=>coprocessor_wb.wdata, |
wbs_dat_o=>coprocessor_wb.rdata, |
|
irq_o=>coprocessor_irq |
); |
|
end architecture; |
--------------------------------------------------------------------- |
-- LXP32 platform top-level design unit |
-- |
-- Part of the LXP32 test platform |
-- |
-- Copyright (c) 2016 by Alex I. Kuznetsov |
-- |
-- A SoC-like simulation platform for the LXP32 CPU, containing |
-- a few peripherals such as program RAM, timer and coprocessor. |
-- |
-- Note: regardless of whether this description is synthesizable, |
-- it was designed exclusively for simulation purposes. |
--------------------------------------------------------------------- |
|
library ieee; |
use ieee.std_logic_1164.all; |
|
entity platform is |
generic( |
CPU_DBUS_RMW: boolean; |
CPU_MUL_ARCH: string; |
MODEL_LXP32C: boolean; |
THROTTLE_DBUS: boolean; |
THROTTLE_IBUS: boolean |
); |
port( |
clk_i: in std_logic; |
rst_i: in std_logic; |
cpu_rst_i: in std_logic; |
|
wbm_cyc_o: out std_logic; |
wbm_stb_o: out std_logic; |
wbm_we_o: out std_logic; |
wbm_sel_o: out std_logic_vector(3 downto 0); |
wbm_ack_i: in std_logic; |
wbm_adr_o: out std_logic_vector(27 downto 2); |
wbm_dat_o: out std_logic_vector(31 downto 0); |
wbm_dat_i: in std_logic_vector(31 downto 0); |
|
wbs_cyc_i: in std_logic; |
wbs_stb_i: in std_logic; |
wbs_we_i: in std_logic; |
wbs_sel_i: in std_logic_vector(3 downto 0); |
wbs_ack_o: out std_logic; |
wbs_adr_i: in std_logic_vector(31 downto 2); |
wbs_dat_i: in std_logic_vector(31 downto 0); |
wbs_dat_o: out std_logic_vector(31 downto 0); |
|
gp_io: inout std_logic_vector(31 downto 0) |
); |
end entity; |
|
architecture rtl of platform is |
|
type wbm_type is record |
cyc: std_logic; |
stb: std_logic; |
we: std_logic; |
sel: std_logic_vector(3 downto 0); |
ack: std_logic; |
adr: std_logic_vector(31 downto 2); |
wdata: std_logic_vector(31 downto 0); |
rdata: std_logic_vector(31 downto 0); |
end record; |
|
type wbs_type is record |
cyc: std_logic; |
stb: std_logic; |
we: std_logic; |
sel: std_logic_vector(3 downto 0); |
ack: std_logic; |
adr: std_logic_vector(27 downto 2); |
wdata: std_logic_vector(31 downto 0); |
rdata: std_logic_vector(31 downto 0); |
end record; |
|
type ibus_type is record |
cyc: std_logic; |
stb: std_logic; |
cti: std_logic_vector(2 downto 0); |
bte: std_logic_vector(1 downto 0); |
ack: std_logic; |
adr: std_logic_vector(29 downto 0); |
dat: std_logic_vector(31 downto 0); |
end record; |
|
signal cpu_rst: std_logic; |
signal cpu_irq: std_logic_vector(7 downto 0); |
signal cpu_dbus: wbm_type; |
signal cpu_ibus: ibus_type; |
|
signal lli_re: std_logic; |
signal lli_adr: std_logic_vector(29 downto 0); |
signal lli_dat: std_logic_vector(31 downto 0); |
signal lli_busy: std_logic; |
|
signal monitor_dbus: wbm_type; |
|
signal ram_wb: wbs_type; |
|
signal timer_wb: wbs_type; |
signal timer_elapsed: std_logic; |
|
signal coprocessor_wb: wbs_type; |
signal coprocessor_irq: std_logic; |
|
begin |
|
-- Interconnect |
|
intercon_inst: entity work.intercon(rtl) |
port map( |
clk_i=>clk_i, |
rst_i=>rst_i, |
|
s0_cyc_i=>wbs_cyc_i, |
s0_stb_i=>wbs_stb_i, |
s0_we_i=>wbs_we_i, |
s0_sel_i=>wbs_sel_i, |
s0_ack_o=>wbs_ack_o, |
s0_adr_i=>wbs_adr_i, |
s0_dat_i=>wbs_dat_i, |
s0_dat_o=>wbs_dat_o, |
|
s1_cyc_i=>monitor_dbus.cyc, |
s1_stb_i=>monitor_dbus.stb, |
s1_we_i=>monitor_dbus.we, |
s1_sel_i=>monitor_dbus.sel, |
s1_ack_o=>monitor_dbus.ack, |
s1_adr_i=>monitor_dbus.adr, |
s1_dat_i=>monitor_dbus.wdata, |
s1_dat_o=>monitor_dbus.rdata, |
|
m0_cyc_o=>ram_wb.cyc, |
m0_stb_o=>ram_wb.stb, |
m0_we_o=>ram_wb.we, |
m0_sel_o=>ram_wb.sel, |
m0_ack_i=>ram_wb.ack, |
m0_adr_o=>ram_wb.adr, |
m0_dat_o=>ram_wb.wdata, |
m0_dat_i=>ram_wb.rdata, |
|
m1_cyc_o=>wbm_cyc_o, |
m1_stb_o=>wbm_stb_o, |
m1_we_o=>wbm_we_o, |
m1_sel_o=>wbm_sel_o, |
m1_ack_i=>wbm_ack_i, |
m1_adr_o=>wbm_adr_o, |
m1_dat_o=>wbm_dat_o, |
m1_dat_i=>wbm_dat_i, |
|
m2_cyc_o=>timer_wb.cyc, |
m2_stb_o=>timer_wb.stb, |
m2_we_o=>timer_wb.we, |
m2_sel_o=>timer_wb.sel, |
m2_ack_i=>timer_wb.ack, |
m2_adr_o=>timer_wb.adr, |
m2_dat_o=>timer_wb.wdata, |
m2_dat_i=>timer_wb.rdata, |
|
m3_cyc_o=>coprocessor_wb.cyc, |
m3_stb_o=>coprocessor_wb.stb, |
m3_we_o=>coprocessor_wb.we, |
m3_sel_o=>coprocessor_wb.sel, |
m3_ack_i=>coprocessor_wb.ack, |
m3_adr_o=>coprocessor_wb.adr, |
m3_dat_o=>coprocessor_wb.wdata, |
m3_dat_i=>coprocessor_wb.rdata |
); |
|
-- CPU |
|
cpu_rst<=cpu_rst_i or rst_i; |
|
-- Note: we connect the timer IRQ to 2 CPU channels to test |
-- handling of simultaneously arriving interrupt requests. |
|
cpu_irq<="00000"&coprocessor_irq&timer_elapsed&timer_elapsed; |
|
gen_lxp32u: if not MODEL_LXP32C generate |
lxp32u_top_inst: entity work.lxp32u_top(rtl) |
generic map( |
DBUS_RMW=>CPU_DBUS_RMW, |
DIVIDER_EN=>true, |
MUL_ARCH=>CPU_MUL_ARCH, |
START_ADDR=>(others=>'0') |
) |
port map( |
clk_i=>clk_i, |
rst_i=>cpu_rst, |
|
lli_re_o=>lli_re, |
lli_adr_o=>lli_adr, |
lli_dat_i=>lli_dat, |
lli_busy_i=>lli_busy, |
|
dbus_cyc_o=>cpu_dbus.cyc, |
dbus_stb_o=>cpu_dbus.stb, |
dbus_we_o=>cpu_dbus.we, |
dbus_sel_o=>cpu_dbus.sel, |
dbus_ack_i=>cpu_dbus.ack, |
dbus_adr_o=>cpu_dbus.adr, |
dbus_dat_o=>cpu_dbus.wdata, |
dbus_dat_i=>cpu_dbus.rdata, |
|
irq_i=>cpu_irq |
); |
end generate; |
|
gen_lxp32c: if MODEL_LXP32C generate |
lxp32c_top_inst: entity work.lxp32c_top(rtl) |
generic map( |
DBUS_RMW=>CPU_DBUS_RMW, |
DIVIDER_EN=>true, |
IBUS_BURST_SIZE=>16, |
IBUS_PREFETCH_SIZE=>32, |
MUL_ARCH=>CPU_MUL_ARCH, |
START_ADDR=>(others=>'0') |
) |
port map( |
clk_i=>clk_i, |
rst_i=>cpu_rst, |
|
ibus_cyc_o=>cpu_ibus.cyc, |
ibus_stb_o=>cpu_ibus.stb, |
ibus_cti_o=>cpu_ibus.cti, |
ibus_bte_o=>cpu_ibus.bte, |
ibus_ack_i=>cpu_ibus.ack, |
ibus_adr_o=>cpu_ibus.adr, |
ibus_dat_i=>cpu_ibus.dat, |
|
dbus_cyc_o=>cpu_dbus.cyc, |
dbus_stb_o=>cpu_dbus.stb, |
dbus_we_o=>cpu_dbus.we, |
dbus_sel_o=>cpu_dbus.sel, |
dbus_ack_i=>cpu_dbus.ack, |
dbus_adr_o=>cpu_dbus.adr, |
dbus_dat_o=>cpu_dbus.wdata, |
dbus_dat_i=>cpu_dbus.rdata, |
|
irq_i=>cpu_irq |
); |
|
ibus_adapter_inst: entity work.ibus_adapter(rtl) |
port map( |
clk_i=>clk_i, |
rst_i=>rst_i, |
|
ibus_cyc_i=>cpu_ibus.cyc, |
ibus_stb_i=>cpu_ibus.stb, |
ibus_cti_i=>cpu_ibus.cti, |
ibus_bte_i=>cpu_ibus.bte, |
ibus_ack_o=>cpu_ibus.ack, |
ibus_adr_i=>cpu_ibus.adr, |
ibus_dat_o=>cpu_ibus.dat, |
|
lli_re_o=>lli_re, |
lli_adr_o=>lli_adr, |
lli_dat_i=>lli_dat, |
lli_busy_i=>lli_busy |
); |
end generate; |
|
-- DBUS monitor |
|
dbus_monitor_inst: entity work.dbus_monitor(rtl) |
generic map( |
THROTTLE=>THROTTLE_DBUS |
) |
port map( |
clk_i=>clk_i, |
rst_i=>rst_i, |
|
wbs_cyc_i=>cpu_dbus.cyc, |
wbs_stb_i=>cpu_dbus.stb, |
wbs_we_i=>cpu_dbus.we, |
wbs_sel_i=>cpu_dbus.sel, |
wbs_ack_o=>cpu_dbus.ack, |
wbs_adr_i=>cpu_dbus.adr, |
wbs_dat_i=>cpu_dbus.wdata, |
wbs_dat_o=>cpu_dbus.rdata, |
|
wbm_cyc_o=>monitor_dbus.cyc, |
wbm_stb_o=>monitor_dbus.stb, |
wbm_we_o=>monitor_dbus.we, |
wbm_sel_o=>monitor_dbus.sel, |
wbm_ack_i=>monitor_dbus.ack, |
wbm_adr_o=>monitor_dbus.adr, |
wbm_dat_o=>monitor_dbus.wdata, |
wbm_dat_i=>monitor_dbus.rdata |
); |
|
-- Program RAM |
|
program_ram_inst: entity work.program_ram(rtl) |
generic map( |
THROTTLE=>THROTTLE_IBUS |
) |
port map( |
clk_i=>clk_i, |
rst_i=>rst_i, |
|
wbs_cyc_i=>ram_wb.cyc, |
wbs_stb_i=>ram_wb.stb, |
wbs_we_i=>ram_wb.we, |
wbs_sel_i=>ram_wb.sel, |
wbs_ack_o=>ram_wb.ack, |
wbs_adr_i=>ram_wb.adr, |
wbs_dat_i=>ram_wb.wdata, |
wbs_dat_o=>ram_wb.rdata, |
|
lli_re_i=>lli_re, |
lli_adr_i=>lli_adr, |
lli_dat_o=>lli_dat, |
lli_busy_o=>lli_busy |
); |
|
-- Timer |
|
timer_inst: entity work.timer(rtl) |
port map( |
clk_i=>clk_i, |
rst_i=>rst_i, |
|
wbs_cyc_i=>timer_wb.cyc, |
wbs_stb_i=>timer_wb.stb, |
wbs_we_i=>timer_wb.we, |
wbs_sel_i=>timer_wb.sel, |
wbs_ack_o=>timer_wb.ack, |
wbs_adr_i=>timer_wb.adr, |
wbs_dat_i=>timer_wb.wdata, |
wbs_dat_o=>timer_wb.rdata, |
|
elapsed_o=>timer_elapsed |
); |
|
-- Coprocessor |
|
coprocessor_inst: entity work.coprocessor(rtl) |
port map( |
clk_i=>clk_i, |
rst_i=>rst_i, |
|
wbs_cyc_i=>coprocessor_wb.cyc, |
wbs_stb_i=>coprocessor_wb.stb, |
wbs_we_i=>coprocessor_wb.we, |
wbs_sel_i=>coprocessor_wb.sel, |
wbs_ack_o=>coprocessor_wb.ack, |
wbs_adr_i=>coprocessor_wb.adr, |
wbs_dat_i=>coprocessor_wb.wdata, |
wbs_dat_o=>coprocessor_wb.rdata, |
|
irq_o=>coprocessor_irq |
); |
|
end architecture; |
/platform/program_ram.vhd
1,145 → 1,145
--------------------------------------------------------------------- |
-- Program RAM |
-- |
-- Part of the LXP32 test platform |
-- |
-- Copyright (c) 2016 by Alex I. Kuznetsov |
-- |
-- Program RAM for the LXP32 test platform. Has two interfaces: |
-- WISHBONE (for data access) and LLI (for LXP32 instruction bus). |
-- Optionally performs throttling. |
-- |
-- Note: regardless of whether this description is synthesizable, |
-- it was designed exclusively for simulation purposes. |
--------------------------------------------------------------------- |
|
library ieee; |
use ieee.std_logic_1164.all; |
|
use work.common_pkg.all; |
|
entity program_ram is |
generic( |
THROTTLE: boolean |
); |
port( |
clk_i: in std_logic; |
rst_i: in std_logic; |
|
wbs_cyc_i: in std_logic; |
wbs_stb_i: in std_logic; |
wbs_we_i: in std_logic; |
wbs_sel_i: in std_logic_vector(3 downto 0); |
wbs_ack_o: out std_logic; |
wbs_adr_i: in std_logic_vector(27 downto 2); |
wbs_dat_i: in std_logic_vector(31 downto 0); |
wbs_dat_o: out std_logic_vector(31 downto 0); |
|
lli_re_i: in std_logic; |
lli_adr_i: in std_logic_vector(29 downto 0); |
lli_dat_o: out std_logic_vector(31 downto 0); |
lli_busy_o: out std_logic |
); |
end entity; |
|
architecture rtl of program_ram is |
|
signal ram_a_we: std_logic_vector(3 downto 0); |
signal ram_a_rdata: std_logic_vector(31 downto 0); |
|
signal ram_b_re: std_logic; |
signal ram_b_rdata: std_logic_vector(31 downto 0); |
|
signal ack_write: std_logic; |
signal ack_read: std_logic; |
|
signal prbs: std_logic; |
signal lli_busy: std_logic:='0'; |
|
begin |
|
-- The total memory size is 16384 words, i.e. 64K bytes |
|
gen_dprams: for i in 3 downto 0 generate |
generic_dpram_inst: entity work.generic_dpram(rtl) |
generic map( |
DATA_WIDTH=>8, |
ADDR_WIDTH=>14, |
SIZE=>16384, |
MODE=>"DONTCARE" |
) |
port map( |
clka_i=>clk_i, |
cea_i=>'1', |
wea_i=>ram_a_we(i), |
addra_i=>wbs_adr_i(15 downto 2), |
da_i=>wbs_dat_i(i*8+7 downto i*8), |
da_o=>ram_a_rdata(i*8+7 downto i*8), |
|
clkb_i=>clk_i, |
ceb_i=>ram_b_re, |
addrb_i=>lli_adr_i(13 downto 0), |
db_o=>ram_b_rdata(i*8+7 downto i*8) |
); |
end generate; |
|
-- WISHBONE interface |
|
gen_ram_a_we: for i in 3 downto 0 generate |
ram_a_we(i)<='1' when wbs_cyc_i='1' and wbs_stb_i='1' and wbs_we_i='1' |
and wbs_sel_i(i)='1' and wbs_adr_i(27 downto 16)="000000000000" else '0'; |
end generate; |
|
process (clk_i) is |
begin |
if rising_edge(clk_i) then |
ack_read<=wbs_cyc_i and wbs_stb_i and not wbs_we_i and not ack_read; |
end if; |
end process; |
|
ack_write<=wbs_cyc_i and wbs_stb_i and wbs_we_i; |
|
wbs_ack_o<=ack_read or ack_write; |
wbs_dat_o<=ram_a_rdata; |
|
-- Low Latency Interface (with optional pseudo-random throttling) |
|
process (clk_i) is |
begin |
if rising_edge(clk_i) then |
assert lli_re_i='0' or lli_adr_i(lli_adr_i'high downto 14)=X"0000" |
report "Attempted to fetch instruction from a non-existent address 0x"& |
hex_string(lli_adr_i&"00") |
severity failure; |
end if; |
end process; |
|
gen_throttling: if THROTTLE generate |
throttle_inst: entity work.scrambler(rtl) |
generic map(TAP1=>9,TAP2=>11) |
port map(clk_i=>clk_i,rst_i=>rst_i,ce_i=>'1',d_o=>prbs); |
end generate; |
|
gen_no_throttling: if not THROTTLE generate |
prbs<='0'; |
end generate; |
|
process (clk_i) is |
begin |
if rising_edge(clk_i) then |
if rst_i='1' then |
lli_busy<='0'; |
elsif prbs='1' and lli_re_i='1' then |
lli_busy<='1'; |
elsif prbs='0' then |
lli_busy<='0'; |
end if; |
end if; |
end process; |
|
ram_b_re<=lli_re_i and not lli_busy; |
|
lli_busy_o<=lli_busy; |
lli_dat_o<=ram_b_rdata when lli_busy='0' else (others=>'-'); |
|
end architecture; |
--------------------------------------------------------------------- |
-- Program RAM |
-- |
-- Part of the LXP32 test platform |
-- |
-- Copyright (c) 2016 by Alex I. Kuznetsov |
-- |
-- Program RAM for the LXP32 test platform. Has two interfaces: |
-- WISHBONE (for data access) and LLI (for LXP32 instruction bus). |
-- Optionally performs throttling. |
-- |
-- Note: regardless of whether this description is synthesizable, |
-- it was designed exclusively for simulation purposes. |
--------------------------------------------------------------------- |
|
library ieee; |
use ieee.std_logic_1164.all; |
|
use work.common_pkg.all; |
|
entity program_ram is |
generic( |
THROTTLE: boolean |
); |
port( |
clk_i: in std_logic; |
rst_i: in std_logic; |
|
wbs_cyc_i: in std_logic; |
wbs_stb_i: in std_logic; |
wbs_we_i: in std_logic; |
wbs_sel_i: in std_logic_vector(3 downto 0); |
wbs_ack_o: out std_logic; |
wbs_adr_i: in std_logic_vector(27 downto 2); |
wbs_dat_i: in std_logic_vector(31 downto 0); |
wbs_dat_o: out std_logic_vector(31 downto 0); |
|
lli_re_i: in std_logic; |
lli_adr_i: in std_logic_vector(29 downto 0); |
lli_dat_o: out std_logic_vector(31 downto 0); |
lli_busy_o: out std_logic |
); |
end entity; |
|
architecture rtl of program_ram is |
|
signal ram_a_we: std_logic_vector(3 downto 0); |
signal ram_a_rdata: std_logic_vector(31 downto 0); |
|
signal ram_b_re: std_logic; |
signal ram_b_rdata: std_logic_vector(31 downto 0); |
|
signal ack_write: std_logic; |
signal ack_read: std_logic; |
|
signal prbs: std_logic; |
signal lli_busy: std_logic:='0'; |
|
begin |
|
-- The total memory size is 16384 words, i.e. 64K bytes |
|
gen_dprams: for i in 3 downto 0 generate |
generic_dpram_inst: entity work.generic_dpram(rtl) |
generic map( |
DATA_WIDTH=>8, |
ADDR_WIDTH=>14, |
SIZE=>16384, |
MODE=>"DONTCARE" |
) |
port map( |
clka_i=>clk_i, |
cea_i=>'1', |
wea_i=>ram_a_we(i), |
addra_i=>wbs_adr_i(15 downto 2), |
da_i=>wbs_dat_i(i*8+7 downto i*8), |
da_o=>ram_a_rdata(i*8+7 downto i*8), |
|
clkb_i=>clk_i, |
ceb_i=>ram_b_re, |
addrb_i=>lli_adr_i(13 downto 0), |
db_o=>ram_b_rdata(i*8+7 downto i*8) |
); |
end generate; |
|
-- WISHBONE interface |
|
gen_ram_a_we: for i in 3 downto 0 generate |
ram_a_we(i)<='1' when wbs_cyc_i='1' and wbs_stb_i='1' and wbs_we_i='1' |
and wbs_sel_i(i)='1' and wbs_adr_i(27 downto 16)="000000000000" else '0'; |
end generate; |
|
process (clk_i) is |
begin |
if rising_edge(clk_i) then |
ack_read<=wbs_cyc_i and wbs_stb_i and not wbs_we_i and not ack_read; |
end if; |
end process; |
|
ack_write<=wbs_cyc_i and wbs_stb_i and wbs_we_i; |
|
wbs_ack_o<=ack_read or ack_write; |
wbs_dat_o<=ram_a_rdata; |
|
-- Low Latency Interface (with optional pseudo-random throttling) |
|
process (clk_i) is |
begin |
if rising_edge(clk_i) then |
assert lli_re_i='0' or lli_adr_i(lli_adr_i'high downto 14)=X"0000" |
report "Attempted to fetch instruction from a non-existent address 0x"& |
hex_string(lli_adr_i&"00") |
severity failure; |
end if; |
end process; |
|
gen_throttling: if THROTTLE generate |
throttle_inst: entity work.scrambler(rtl) |
generic map(TAP1=>9,TAP2=>11) |
port map(clk_i=>clk_i,rst_i=>rst_i,ce_i=>'1',d_o=>prbs); |
end generate; |
|
gen_no_throttling: if not THROTTLE generate |
prbs<='0'; |
end generate; |
|
process (clk_i) is |
begin |
if rising_edge(clk_i) then |
if rst_i='1' then |
lli_busy<='0'; |
elsif prbs='1' and lli_re_i='1' then |
lli_busy<='1'; |
elsif prbs='0' then |
lli_busy<='0'; |
end if; |
end if; |
end process; |
|
ram_b_re<=lli_re_i and not lli_busy; |
|
lli_busy_o<=lli_busy; |
lli_dat_o<=ram_b_rdata when lli_busy='0' else (others=>'-'); |
|
end architecture; |
/platform/scrambler.vhd
1,54 → 1,54
--------------------------------------------------------------------- |
-- Scrambler |
-- |
-- Part of the LXP32 test platform |
-- |
-- Copyright (c) 2016 by Alex I. Kuznetsov |
-- |
-- Generates a pseudo-random binary sequence using a Linear-Feedback |
-- Shift Register (LFSR). |
-- |
-- In order to generate a maximum-length sequence, 1+x^TAP1+x^TAP2 |
-- must be a primitive polynomial. Typical polynomials include: |
-- (6,7), (9,11), (14,15). |
-- |
-- Note: regardless of whether this description is synthesizable, |
-- it was designed exclusively for simulation purposes. |
--------------------------------------------------------------------- |
|
library ieee; |
use ieee.std_logic_1164.all; |
|
entity scrambler is |
generic( |
TAP1: integer; |
TAP2: integer |
); |
port( |
clk_i: in std_logic; |
rst_i: in std_logic; |
ce_i: in std_logic; |
d_o: out std_logic |
); |
end entity; |
|
architecture rtl of scrambler is |
|
signal reg: std_logic_vector(TAP2 downto 1):=(others=>'1'); |
|
begin |
|
process (clk_i) is |
begin |
if rising_edge(clk_i) then |
if rst_i='1' then |
reg<=(others=>'1'); |
elsif ce_i='1' then |
reg<=reg(TAP2-1 downto 1)&(reg(TAP2) xor reg(TAP1)); |
end if; |
end if; |
end process; |
|
d_o<=reg(1); |
|
end architecture; |
--------------------------------------------------------------------- |
-- Scrambler |
-- |
-- Part of the LXP32 test platform |
-- |
-- Copyright (c) 2016 by Alex I. Kuznetsov |
-- |
-- Generates a pseudo-random binary sequence using a Linear-Feedback |
-- Shift Register (LFSR). |
-- |
-- In order to generate a maximum-length sequence, 1+x^TAP1+x^TAP2 |
-- must be a primitive polynomial. Typical polynomials include: |
-- (6,7), (9,11), (14,15). |
-- |
-- Note: regardless of whether this description is synthesizable, |
-- it was designed exclusively for simulation purposes. |
--------------------------------------------------------------------- |
|
library ieee; |
use ieee.std_logic_1164.all; |
|
entity scrambler is |
generic( |
TAP1: integer; |
TAP2: integer |
); |
port( |
clk_i: in std_logic; |
rst_i: in std_logic; |
ce_i: in std_logic; |
d_o: out std_logic |
); |
end entity; |
|
architecture rtl of scrambler is |
|
signal reg: std_logic_vector(TAP2 downto 1):=(others=>'1'); |
|
begin |
|
process (clk_i) is |
begin |
if rising_edge(clk_i) then |
if rst_i='1' then |
reg<=(others=>'1'); |
elsif ce_i='1' then |
reg<=reg(TAP2-1 downto 1)&(reg(TAP2) xor reg(TAP1)); |
end if; |
end if; |
end process; |
|
d_o<=reg(1); |
|
end architecture; |
/platform/timer.vhd
1,98 → 1,98
--------------------------------------------------------------------- |
-- Timer |
-- |
-- Part of the LXP32 test platform |
-- |
-- Copyright (c) 2016 by Alex I. Kuznetsov |
-- |
-- A simple programmable interval timer. |
-- |
-- Note: regardless of whether this description is synthesizable, |
-- it was designed exclusively for simulation purposes. |
--------------------------------------------------------------------- |
|
library ieee; |
use ieee.std_logic_1164.all; |
use ieee.numeric_std.all; |
|
entity timer is |
port( |
clk_i: in std_logic; |
rst_i: in std_logic; |
|
wbs_cyc_i: in std_logic; |
wbs_stb_i: in std_logic; |
wbs_we_i: in std_logic; |
wbs_sel_i: in std_logic_vector(3 downto 0); |
wbs_ack_o: out std_logic; |
wbs_adr_i: in std_logic_vector(27 downto 2); |
wbs_dat_i: in std_logic_vector(31 downto 0); |
wbs_dat_o: out std_logic_vector(31 downto 0); |
|
elapsed_o: out std_logic |
); |
end entity; |
|
architecture rtl of timer is |
|
signal pulses: unsigned(31 downto 0):=(others=>'0'); |
signal interval: unsigned(31 downto 0):=(others=>'0'); |
signal cnt: unsigned(31 downto 0):=(others=>'0'); |
signal elapsed: std_logic:='0'; |
|
begin |
|
process (clk_i) is |
begin |
if rising_edge(clk_i) then |
if rst_i='1' then |
pulses<=(others=>'0'); |
interval<=(others=>'0'); |
cnt<=(others=>'0'); |
elapsed<='0'; |
else |
elapsed<='0'; |
if pulses/=X"00000000" or cnt/=X"00000000" then |
if cnt=X"00000000" then |
if pulses/=X"FFFFFFFF" then |
pulses<=pulses-1; |
end if; |
if pulses/=X"00000000" then |
cnt<=interval; |
end if; |
else |
cnt<=cnt-1; |
end if; |
if cnt=X"00000001" then |
elapsed<='1'; |
end if; |
end if; |
|
if wbs_cyc_i='1' and wbs_stb_i='1' and wbs_we_i='1' then |
for i in wbs_sel_i'range loop |
if wbs_sel_i(i)='1' then |
if wbs_adr_i="00"&X"000000" then |
pulses(i*8+7 downto i*8)<= |
unsigned(wbs_dat_i(i*8+7 downto i*8)); |
cnt<=(others=>'0'); |
end if; |
if wbs_adr_i="00"&X"000001" then |
interval(i*8+7 downto i*8)<= |
unsigned(wbs_dat_i(i*8+7 downto i*8)); |
cnt<=(others=>'0'); |
end if; |
end if; |
end loop; |
end if; |
end if; |
end if; |
end process; |
|
wbs_ack_o<=wbs_cyc_i and wbs_stb_i; |
wbs_dat_o<=std_logic_vector(pulses) when wbs_adr_i="00"&X"000000" else |
std_logic_vector(interval) when wbs_adr_i="00"&X"000001" else |
(others=>'-'); |
|
elapsed_o<=elapsed; |
|
end architecture; |
--------------------------------------------------------------------- |
-- Timer |
-- |
-- Part of the LXP32 test platform |
-- |
-- Copyright (c) 2016 by Alex I. Kuznetsov |
-- |
-- A simple programmable interval timer. |
-- |
-- Note: regardless of whether this description is synthesizable, |
-- it was designed exclusively for simulation purposes. |
--------------------------------------------------------------------- |
|
library ieee; |
use ieee.std_logic_1164.all; |
use ieee.numeric_std.all; |
|
entity timer is |
port( |
clk_i: in std_logic; |
rst_i: in std_logic; |
|
wbs_cyc_i: in std_logic; |
wbs_stb_i: in std_logic; |
wbs_we_i: in std_logic; |
wbs_sel_i: in std_logic_vector(3 downto 0); |
wbs_ack_o: out std_logic; |
wbs_adr_i: in std_logic_vector(27 downto 2); |
wbs_dat_i: in std_logic_vector(31 downto 0); |
wbs_dat_o: out std_logic_vector(31 downto 0); |
|
elapsed_o: out std_logic |
); |
end entity; |
|
architecture rtl of timer is |
|
signal pulses: unsigned(31 downto 0):=(others=>'0'); |
signal interval: unsigned(31 downto 0):=(others=>'0'); |
signal cnt: unsigned(31 downto 0):=(others=>'0'); |
signal elapsed: std_logic:='0'; |
|
begin |
|
process (clk_i) is |
begin |
if rising_edge(clk_i) then |
if rst_i='1' then |
pulses<=(others=>'0'); |
interval<=(others=>'0'); |
cnt<=(others=>'0'); |
elapsed<='0'; |
else |
elapsed<='0'; |
if pulses/=X"00000000" or cnt/=X"00000000" then |
if cnt=X"00000000" then |
if pulses/=X"FFFFFFFF" then |
pulses<=pulses-1; |
end if; |
if pulses/=X"00000000" then |
cnt<=interval; |
end if; |
else |
cnt<=cnt-1; |
end if; |
if cnt=X"00000001" then |
elapsed<='1'; |
end if; |
end if; |
|
if wbs_cyc_i='1' and wbs_stb_i='1' and wbs_we_i='1' then |
for i in wbs_sel_i'range loop |
if wbs_sel_i(i)='1' then |
if wbs_adr_i="00"&X"000000" then |
pulses(i*8+7 downto i*8)<= |
unsigned(wbs_dat_i(i*8+7 downto i*8)); |
cnt<=(others=>'0'); |
end if; |
if wbs_adr_i="00"&X"000001" then |
interval(i*8+7 downto i*8)<= |
unsigned(wbs_dat_i(i*8+7 downto i*8)); |
cnt<=(others=>'0'); |
end if; |
end if; |
end loop; |
end if; |
end if; |
end if; |
end process; |
|
wbs_ack_o<=wbs_cyc_i and wbs_stb_i; |
wbs_dat_o<=std_logic_vector(pulses) when wbs_adr_i="00"&X"000000" else |
std_logic_vector(interval) when wbs_adr_i="00"&X"000001" else |
(others=>'-'); |
|
elapsed_o<=elapsed; |
|
end architecture; |
/tb/monitor.vhd
1,80 → 1,80
--------------------------------------------------------------------- |
-- Test monitor |
-- |
-- Part of the LXP32 testbench |
-- |
-- Copyright (c) 2016 by Alex I. Kuznetsov |
-- |
-- Provide means for a test platform to interact with the testbench. |
--------------------------------------------------------------------- |
|
library ieee; |
use ieee.std_logic_1164.all; |
use ieee.numeric_std.all; |
|
use work.common_pkg.all; |
use work.tb_pkg.all; |
|
entity monitor is |
generic( |
VERBOSE: boolean |
); |
port( |
clk_i: in std_logic; |
rst_i: in std_logic; |
|
wbs_cyc_i: in std_logic; |
wbs_stb_i: in std_logic; |
wbs_we_i: in std_logic; |
wbs_sel_i: in std_logic_vector(3 downto 0); |
wbs_ack_o: out std_logic; |
wbs_adr_i: in std_logic_vector(27 downto 2); |
wbs_dat_i: in std_logic_vector(31 downto 0); |
wbs_dat_o: out std_logic_vector(31 downto 0); |
|
finished_o: out std_logic; |
result_o: out std_logic_vector(31 downto 0) |
); |
end entity; |
|
architecture sim of monitor is |
|
signal result: std_logic_vector(31 downto 0):=(others=>'0'); |
signal finished: std_logic:='0'; |
|
begin |
|
wbs_ack_o<=wbs_cyc_i and wbs_stb_i; |
wbs_dat_o<=(others=>'0'); |
|
finished_o<=finished; |
result_o<=result; |
|
process (clk_i) is |
begin |
if rising_edge(clk_i) then |
if rst_i='1' then |
finished<='0'; |
result<=(others=>'0'); |
elsif wbs_cyc_i='1' and wbs_stb_i='1' and wbs_we_i='1' then |
assert wbs_sel_i="1111" |
report "Monitor doesn't support byte-granular access "& |
"(SEL_I() is 0x"&hex_string(wbs_sel_i)&")" |
severity failure; |
|
if VERBOSE then |
report "Monitor: value "& |
"0x"&hex_string(wbs_dat_i)& |
" written to address "& |
"0x"&hex_string(wbs_adr_i); |
end if; |
|
if unsigned(wbs_adr_i)=to_unsigned(0,wbs_adr_i'length) then |
result<=wbs_dat_i; |
finished<='1'; |
end if; |
end if; |
end if; |
end process; |
|
end architecture; |
--------------------------------------------------------------------- |
-- Test monitor |
-- |
-- Part of the LXP32 testbench |
-- |
-- Copyright (c) 2016 by Alex I. Kuznetsov |
-- |
-- Provide means for a test platform to interact with the testbench. |
--------------------------------------------------------------------- |
|
library ieee; |
use ieee.std_logic_1164.all; |
use ieee.numeric_std.all; |
|
use work.common_pkg.all; |
use work.tb_pkg.all; |
|
entity monitor is |
generic( |
VERBOSE: boolean |
); |
port( |
clk_i: in std_logic; |
rst_i: in std_logic; |
|
wbs_cyc_i: in std_logic; |
wbs_stb_i: in std_logic; |
wbs_we_i: in std_logic; |
wbs_sel_i: in std_logic_vector(3 downto 0); |
wbs_ack_o: out std_logic; |
wbs_adr_i: in std_logic_vector(27 downto 2); |
wbs_dat_i: in std_logic_vector(31 downto 0); |
wbs_dat_o: out std_logic_vector(31 downto 0); |
|
finished_o: out std_logic; |
result_o: out std_logic_vector(31 downto 0) |
); |
end entity; |
|
architecture sim of monitor is |
|
signal result: std_logic_vector(31 downto 0):=(others=>'0'); |
signal finished: std_logic:='0'; |
|
begin |
|
wbs_ack_o<=wbs_cyc_i and wbs_stb_i; |
wbs_dat_o<=(others=>'0'); |
|
finished_o<=finished; |
result_o<=result; |
|
process (clk_i) is |
begin |
if rising_edge(clk_i) then |
if rst_i='1' then |
finished<='0'; |
result<=(others=>'0'); |
elsif wbs_cyc_i='1' and wbs_stb_i='1' and wbs_we_i='1' then |
assert wbs_sel_i="1111" |
report "Monitor doesn't support byte-granular access "& |
"(SEL_I() is 0x"&hex_string(wbs_sel_i)&")" |
severity failure; |
|
if VERBOSE then |
report "Monitor: value "& |
"0x"&hex_string(wbs_dat_i)& |
" written to address "& |
"0x"&hex_string(wbs_adr_i); |
end if; |
|
if unsigned(wbs_adr_i)=to_unsigned(0,wbs_adr_i'length) then |
result<=wbs_dat_i; |
finished<='1'; |
end if; |
end if; |
end if; |
end process; |
|
end architecture; |
/tb/tb.vhd
1,147 → 1,147
--------------------------------------------------------------------- |
-- LXP32 verification environment (self-checking testbench) |
-- |
-- Part of the LXP32 testbench |
-- |
-- Copyright (c) 2016 by Alex I. Kuznetsov |
-- |
-- Simulates LXP32 test platform, verifies results. |
-- |
-- Parameters: |
-- CPU_DBUS_RMW: DBUS_RMW CPU generic |
-- CPU_MUL_ARCH: MUL_ARCH CPU generic |
-- MODEL_LXP32C: when true, simulates LXP32C variant (with |
-- instruction cache), otherwise LXP32U |
-- TEST_CASE: If non-empty, selects a test case to run. |
-- If empty, all tests are executed. |
-- THROTTLE_IBUS: perform pseudo-random instruction bus |
-- throttling |
-- THROTTLE_DBUS: perform pseudo-random data bus throttling |
-- VERBOSE: report everything that is written to the |
-- test monitor address space |
--------------------------------------------------------------------- |
|
use std.textio.all; |
|
library ieee; |
use ieee.std_logic_1164.all; |
use ieee.numeric_std.all; |
|
use work.tb_pkg.all; |
|
entity tb is |
generic( |
CPU_DBUS_RMW: boolean:=false; |
CPU_MUL_ARCH: string:="dsp"; |
MODEL_LXP32C: boolean:=true; |
TEST_CASE: string:=""; |
THROTTLE_DBUS: boolean:=true; |
THROTTLE_IBUS: boolean:=true; |
VERBOSE: boolean:=false |
); |
end entity; |
|
architecture testbench of tb is |
|
signal clk: std_logic:='0'; |
|
signal globals: soc_globals_type:=(others=>'1'); |
signal soc_wbs_in: soc_wbs_in_type; |
signal soc_wbs_out: soc_wbs_out_type; |
signal soc_wbm_in: soc_wbm_in_type; |
signal soc_wbm_out: soc_wbm_out_type; |
|
signal monitor_out: monitor_out_type; |
|
signal finish: std_logic:='0'; |
|
begin |
|
dut: entity work.platform(rtl) |
generic map( |
CPU_DBUS_RMW=>CPU_DBUS_RMW, |
CPU_MUL_ARCH=>CPU_MUL_ARCH, |
MODEL_LXP32C=>MODEL_LXP32C, |
THROTTLE_DBUS=>THROTTLE_DBUS, |
THROTTLE_IBUS=>THROTTLE_IBUS |
) |
port map( |
clk_i=>clk, |
rst_i=>globals.rst_i, |
cpu_rst_i=>globals.cpu_rst_i, |
|
wbm_cyc_o=>soc_wbm_out.cyc, |
wbm_stb_o=>soc_wbm_out.stb, |
wbm_we_o=>soc_wbm_out.we, |
wbm_sel_o=>soc_wbm_out.sel, |
wbm_ack_i=>soc_wbm_in.ack, |
wbm_adr_o=>soc_wbm_out.adr, |
wbm_dat_o=>soc_wbm_out.dat, |
wbm_dat_i=>soc_wbm_in.dat, |
|
wbs_cyc_i=>soc_wbs_in.cyc, |
wbs_stb_i=>soc_wbs_in.stb, |
wbs_we_i=>soc_wbs_in.we, |
wbs_sel_i=>soc_wbs_in.sel, |
wbs_ack_o=>soc_wbs_out.ack, |
wbs_adr_i=>soc_wbs_in.adr, |
wbs_dat_i=>soc_wbs_in.dat, |
wbs_dat_o=>soc_wbs_out.dat |
); |
|
monitor_inst: entity work.monitor(sim) |
generic map( |
VERBOSE=>VERBOSE |
) |
port map( |
clk_i=>clk, |
rst_i=>globals.rst_i, |
|
wbs_cyc_i=>soc_wbm_out.cyc, |
wbs_stb_i=>soc_wbm_out.stb, |
wbs_we_i=>soc_wbm_out.we, |
wbs_sel_i=>soc_wbm_out.sel, |
wbs_ack_o=>soc_wbm_in.ack, |
wbs_adr_i=>soc_wbm_out.adr, |
wbs_dat_i=>soc_wbm_out.dat, |
wbs_dat_o=>soc_wbm_in.dat, |
|
finished_o=>monitor_out.valid, |
result_o=>monitor_out.data |
); |
|
clk<=not clk and not finish after 5 ns; |
|
process is |
begin |
if TEST_CASE'length=0 then |
run_test("test001.ram",clk,globals,soc_wbs_in,soc_wbs_out,monitor_out); |
run_test("test002.ram",clk,globals,soc_wbs_in,soc_wbs_out,monitor_out); |
run_test("test003.ram",clk,globals,soc_wbs_in,soc_wbs_out,monitor_out); |
run_test("test004.ram",clk,globals,soc_wbs_in,soc_wbs_out,monitor_out); |
run_test("test005.ram",clk,globals,soc_wbs_in,soc_wbs_out,monitor_out); |
run_test("test006.ram",clk,globals,soc_wbs_in,soc_wbs_out,monitor_out); |
run_test("test007.ram",clk,globals,soc_wbs_in,soc_wbs_out,monitor_out); |
run_test("test008.ram",clk,globals,soc_wbs_in,soc_wbs_out,monitor_out); |
run_test("test009.ram",clk,globals,soc_wbs_in,soc_wbs_out,monitor_out); |
run_test("test010.ram",clk,globals,soc_wbs_in,soc_wbs_out,monitor_out); |
run_test("test011.ram",clk,globals,soc_wbs_in,soc_wbs_out,monitor_out); |
run_test("test012.ram",clk,globals,soc_wbs_in,soc_wbs_out,monitor_out); |
run_test("test013.ram",clk,globals,soc_wbs_in,soc_wbs_out,monitor_out); |
run_test("test014.ram",clk,globals,soc_wbs_in,soc_wbs_out,monitor_out); |
run_test("test015.ram",clk,globals,soc_wbs_in,soc_wbs_out,monitor_out); |
run_test("test016.ram",clk,globals,soc_wbs_in,soc_wbs_out,monitor_out); |
run_test("test017.ram",clk,globals,soc_wbs_in,soc_wbs_out,monitor_out); |
run_test("test018.ram",clk,globals,soc_wbs_in,soc_wbs_out,monitor_out); |
run_test("test019.ram",clk,globals,soc_wbs_in,soc_wbs_out,monitor_out); |
run_test("test020.ram",clk,globals,soc_wbs_in,soc_wbs_out,monitor_out); |
else |
run_test(TEST_CASE,clk,globals,soc_wbs_in,soc_wbs_out,monitor_out); |
end if; |
|
report "ALL TESTS WERE COMPLETED SUCCESSFULLY"; |
finish<='1'; |
wait; |
end process; |
|
end architecture; |
--------------------------------------------------------------------- |
-- LXP32 verification environment (self-checking testbench) |
-- |
-- Part of the LXP32 testbench |
-- |
-- Copyright (c) 2016 by Alex I. Kuznetsov |
-- |
-- Simulates LXP32 test platform, verifies results. |
-- |
-- Parameters: |
-- CPU_DBUS_RMW: DBUS_RMW CPU generic |
-- CPU_MUL_ARCH: MUL_ARCH CPU generic |
-- MODEL_LXP32C: when true, simulates LXP32C variant (with |
-- instruction cache), otherwise LXP32U |
-- TEST_CASE: If non-empty, selects a test case to run. |
-- If empty, all tests are executed. |
-- THROTTLE_IBUS: perform pseudo-random instruction bus |
-- throttling |
-- THROTTLE_DBUS: perform pseudo-random data bus throttling |
-- VERBOSE: report everything that is written to the |
-- test monitor address space |
--------------------------------------------------------------------- |
|
use std.textio.all; |
|
library ieee; |
use ieee.std_logic_1164.all; |
use ieee.numeric_std.all; |
|
use work.tb_pkg.all; |
|
entity tb is |
generic( |
CPU_DBUS_RMW: boolean:=false; |
CPU_MUL_ARCH: string:="dsp"; |
MODEL_LXP32C: boolean:=true; |
TEST_CASE: string:=""; |
THROTTLE_DBUS: boolean:=true; |
THROTTLE_IBUS: boolean:=true; |
VERBOSE: boolean:=false |
); |
end entity; |
|
architecture testbench of tb is |
|
signal clk: std_logic:='0'; |
|
signal globals: soc_globals_type:=(others=>'1'); |
signal soc_wbs_in: soc_wbs_in_type; |
signal soc_wbs_out: soc_wbs_out_type; |
signal soc_wbm_in: soc_wbm_in_type; |
signal soc_wbm_out: soc_wbm_out_type; |
|
signal monitor_out: monitor_out_type; |
|
signal finish: std_logic:='0'; |
|
begin |
|
dut: entity work.platform(rtl) |
generic map( |
CPU_DBUS_RMW=>CPU_DBUS_RMW, |
CPU_MUL_ARCH=>CPU_MUL_ARCH, |
MODEL_LXP32C=>MODEL_LXP32C, |
THROTTLE_DBUS=>THROTTLE_DBUS, |
THROTTLE_IBUS=>THROTTLE_IBUS |
) |
port map( |
clk_i=>clk, |
rst_i=>globals.rst_i, |
cpu_rst_i=>globals.cpu_rst_i, |
|
wbm_cyc_o=>soc_wbm_out.cyc, |
wbm_stb_o=>soc_wbm_out.stb, |
wbm_we_o=>soc_wbm_out.we, |
wbm_sel_o=>soc_wbm_out.sel, |
wbm_ack_i=>soc_wbm_in.ack, |
wbm_adr_o=>soc_wbm_out.adr, |
wbm_dat_o=>soc_wbm_out.dat, |
wbm_dat_i=>soc_wbm_in.dat, |
|
wbs_cyc_i=>soc_wbs_in.cyc, |
wbs_stb_i=>soc_wbs_in.stb, |
wbs_we_i=>soc_wbs_in.we, |
wbs_sel_i=>soc_wbs_in.sel, |
wbs_ack_o=>soc_wbs_out.ack, |
wbs_adr_i=>soc_wbs_in.adr, |
wbs_dat_i=>soc_wbs_in.dat, |
wbs_dat_o=>soc_wbs_out.dat |
); |
|
monitor_inst: entity work.monitor(sim) |
generic map( |
VERBOSE=>VERBOSE |
) |
port map( |
clk_i=>clk, |
rst_i=>globals.rst_i, |
|
wbs_cyc_i=>soc_wbm_out.cyc, |
wbs_stb_i=>soc_wbm_out.stb, |
wbs_we_i=>soc_wbm_out.we, |
wbs_sel_i=>soc_wbm_out.sel, |
wbs_ack_o=>soc_wbm_in.ack, |
wbs_adr_i=>soc_wbm_out.adr, |
wbs_dat_i=>soc_wbm_out.dat, |
wbs_dat_o=>soc_wbm_in.dat, |
|
finished_o=>monitor_out.valid, |
result_o=>monitor_out.data |
); |
|
clk<=not clk and not finish after 5 ns; |
|
process is |
begin |
if TEST_CASE'length=0 then |
run_test("test001.ram",clk,globals,soc_wbs_in,soc_wbs_out,monitor_out); |
run_test("test002.ram",clk,globals,soc_wbs_in,soc_wbs_out,monitor_out); |
run_test("test003.ram",clk,globals,soc_wbs_in,soc_wbs_out,monitor_out); |
run_test("test004.ram",clk,globals,soc_wbs_in,soc_wbs_out,monitor_out); |
run_test("test005.ram",clk,globals,soc_wbs_in,soc_wbs_out,monitor_out); |
run_test("test006.ram",clk,globals,soc_wbs_in,soc_wbs_out,monitor_out); |
run_test("test007.ram",clk,globals,soc_wbs_in,soc_wbs_out,monitor_out); |
run_test("test008.ram",clk,globals,soc_wbs_in,soc_wbs_out,monitor_out); |
run_test("test009.ram",clk,globals,soc_wbs_in,soc_wbs_out,monitor_out); |
run_test("test010.ram",clk,globals,soc_wbs_in,soc_wbs_out,monitor_out); |
run_test("test011.ram",clk,globals,soc_wbs_in,soc_wbs_out,monitor_out); |
run_test("test012.ram",clk,globals,soc_wbs_in,soc_wbs_out,monitor_out); |
run_test("test013.ram",clk,globals,soc_wbs_in,soc_wbs_out,monitor_out); |
run_test("test014.ram",clk,globals,soc_wbs_in,soc_wbs_out,monitor_out); |
run_test("test015.ram",clk,globals,soc_wbs_in,soc_wbs_out,monitor_out); |
run_test("test016.ram",clk,globals,soc_wbs_in,soc_wbs_out,monitor_out); |
run_test("test017.ram",clk,globals,soc_wbs_in,soc_wbs_out,monitor_out); |
run_test("test018.ram",clk,globals,soc_wbs_in,soc_wbs_out,monitor_out); |
run_test("test019.ram",clk,globals,soc_wbs_in,soc_wbs_out,monitor_out); |
run_test("test020.ram",clk,globals,soc_wbs_in,soc_wbs_out,monitor_out); |
else |
run_test(TEST_CASE,clk,globals,soc_wbs_in,soc_wbs_out,monitor_out); |
end if; |
|
report "ALL TESTS WERE COMPLETED SUCCESSFULLY"; |
finish<='1'; |
wait; |
end process; |
|
end architecture; |
/tb/tb_pkg.vhd
1,70 → 1,70
--------------------------------------------------------------------- |
-- LXP32 testbench package |
-- |
-- Part of the LXP32 testbench |
-- |
-- Copyright (c) 2016 by Alex I. Kuznetsov |
-- |
-- Auxiliary package declaration for the LXP32 testbench |
--------------------------------------------------------------------- |
|
library ieee; |
use ieee.std_logic_1164.all; |
|
package tb_pkg is |
constant c_max_program_size: integer:=8192; |
|
type soc_globals_type is record |
rst_i: std_logic; |
cpu_rst_i: std_logic; |
end record; |
|
type soc_wbs_in_type is record |
cyc: std_logic; |
stb: std_logic; |
we: std_logic; |
sel: std_logic_vector(3 downto 0); |
adr: std_logic_vector(31 downto 2); |
dat: std_logic_vector(31 downto 0); |
end record; |
|
type soc_wbs_out_type is record |
ack: std_logic; |
dat: std_logic_vector(31 downto 0); |
end record; |
|
type soc_wbm_in_type is record |
ack: std_logic; |
dat: std_logic_vector(31 downto 0); |
end record; |
|
type soc_wbm_out_type is record |
cyc: std_logic; |
stb: std_logic; |
we: std_logic; |
sel: std_logic_vector(3 downto 0); |
adr: std_logic_vector(27 downto 2); |
dat: std_logic_vector(31 downto 0); |
end record; |
|
type monitor_out_type is record |
data: std_logic_vector(31 downto 0); |
valid: std_logic; |
end record; |
|
procedure load_ram( |
filename: string; |
signal clk: in std_logic; |
signal soc_in: out soc_wbs_in_type; |
signal soc_out: in soc_wbs_out_type |
); |
|
procedure run_test( |
filename: string; |
signal clk: in std_logic; |
signal globals: out soc_globals_type; |
signal soc_in: out soc_wbs_in_type; |
signal soc_out: in soc_wbs_out_type; |
signal result: in monitor_out_type |
); |
end package; |
--------------------------------------------------------------------- |
-- LXP32 testbench package |
-- |
-- Part of the LXP32 testbench |
-- |
-- Copyright (c) 2016 by Alex I. Kuznetsov |
-- |
-- Auxiliary package declaration for the LXP32 testbench |
--------------------------------------------------------------------- |
|
library ieee; |
use ieee.std_logic_1164.all; |
|
package tb_pkg is |
constant c_max_program_size: integer:=8192; |
|
type soc_globals_type is record |
rst_i: std_logic; |
cpu_rst_i: std_logic; |
end record; |
|
type soc_wbs_in_type is record |
cyc: std_logic; |
stb: std_logic; |
we: std_logic; |
sel: std_logic_vector(3 downto 0); |
adr: std_logic_vector(31 downto 2); |
dat: std_logic_vector(31 downto 0); |
end record; |
|
type soc_wbs_out_type is record |
ack: std_logic; |
dat: std_logic_vector(31 downto 0); |
end record; |
|
type soc_wbm_in_type is record |
ack: std_logic; |
dat: std_logic_vector(31 downto 0); |
end record; |
|
type soc_wbm_out_type is record |
cyc: std_logic; |
stb: std_logic; |
we: std_logic; |
sel: std_logic_vector(3 downto 0); |
adr: std_logic_vector(27 downto 2); |
dat: std_logic_vector(31 downto 0); |
end record; |
|
type monitor_out_type is record |
data: std_logic_vector(31 downto 0); |
valid: std_logic; |
end record; |
|
procedure load_ram( |
filename: string; |
signal clk: in std_logic; |
signal soc_in: out soc_wbs_in_type; |
signal soc_out: in soc_wbs_out_type |
); |
|
procedure run_test( |
filename: string; |
signal clk: in std_logic; |
signal globals: out soc_globals_type; |
signal soc_in: out soc_wbs_in_type; |
signal soc_out: in soc_wbs_out_type; |
signal result: in monitor_out_type |
); |
end package; |
/tb/tb_pkg_body.vhd
1,100 → 1,100
--------------------------------------------------------------------- |
-- LXP32 testbench package body |
-- |
-- Part of the LXP32 testbench |
-- |
-- Copyright (c) 2016 by Alex I. Kuznetsov |
-- |
-- Auxiliary package body for the LXP32 testbench |
--------------------------------------------------------------------- |
|
use std.textio.all; |
|
library ieee; |
use ieee.std_logic_1164.all; |
use ieee.numeric_std.all; |
|
use work.common_pkg.all; |
|
package body tb_pkg is |
procedure load_ram( |
filename: string; |
signal clk: in std_logic; |
signal soc_in: out soc_wbs_in_type; |
signal soc_out: in soc_wbs_out_type |
) is |
file f: text open read_mode is filename; |
variable i: integer:=0; |
variable l: line; |
variable v: bit_vector(31 downto 0); |
begin |
wait until rising_edge(clk); |
|
report "Loading program RAM from """&filename&""""; |
|
while not endfile(f) loop |
readline(f,l); |
read(l,v); |
|
assert i<c_max_program_size report "Error: program size is too large" severity failure; |
|
soc_in.cyc<='1'; |
soc_in.stb<='1'; |
soc_in.we<='1'; |
soc_in.sel<=(others=>'1'); |
soc_in.adr<=std_logic_vector(to_unsigned(i,30)); |
soc_in.dat<=to_stdlogicvector(v); |
|
wait until rising_edge(clk) and soc_out.ack='1'; |
|
i:=i+1; |
end loop; |
|
report integer'image(i)&" words loaded from """&filename&""""; |
|
soc_in.cyc<='0'; |
soc_in.stb<='0'; |
|
wait until rising_edge(clk); |
end procedure; |
|
procedure run_test( |
filename: string; |
signal clk: in std_logic; |
signal globals: out soc_globals_type; |
signal soc_in: out soc_wbs_in_type; |
signal soc_out: in soc_wbs_out_type; |
signal result: in monitor_out_type |
) is |
begin |
-- Assert SoC and CPU resets |
wait until rising_edge(clk); |
globals.rst_i<='1'; |
globals.cpu_rst_i<='1'; |
wait until rising_edge(clk); |
|
-- Deassert SoC reset, leave CPU in reset state for now |
globals.rst_i<='0'; |
wait until rising_edge(clk); |
|
-- Load RAM |
load_ram(filename,clk,soc_in,soc_out); |
|
-- Deassert CPU reset |
globals.cpu_rst_i<='0'; |
|
while result.valid/='1' loop |
wait until rising_edge(clk); |
end loop; |
|
-- Analyze result |
|
if result.data=X"00000001" then |
report "TEST """&filename&""" RESULT: SUCCESS (return code 0x"& |
hex_string(result.data)&")"; |
else |
report "TEST """&filename&""" RESULT: FAILURE (return code 0x"& |
hex_string(result.data)&")" severity failure; |
end if; |
end procedure; |
end package body; |
--------------------------------------------------------------------- |
-- LXP32 testbench package body |
-- |
-- Part of the LXP32 testbench |
-- |
-- Copyright (c) 2016 by Alex I. Kuznetsov |
-- |
-- Auxiliary package body for the LXP32 testbench |
--------------------------------------------------------------------- |
|
use std.textio.all; |
|
library ieee; |
use ieee.std_logic_1164.all; |
use ieee.numeric_std.all; |
|
use work.common_pkg.all; |
|
package body tb_pkg is |
procedure load_ram( |
filename: string; |
signal clk: in std_logic; |
signal soc_in: out soc_wbs_in_type; |
signal soc_out: in soc_wbs_out_type |
) is |
file f: text open read_mode is filename; |
variable i: integer:=0; |
variable l: line; |
variable v: bit_vector(31 downto 0); |
begin |
wait until rising_edge(clk); |
|
report "Loading program RAM from """&filename&""""; |
|
while not endfile(f) loop |
readline(f,l); |
read(l,v); |
|
assert i<c_max_program_size report "Error: program size is too large" severity failure; |
|
soc_in.cyc<='1'; |
soc_in.stb<='1'; |
soc_in.we<='1'; |
soc_in.sel<=(others=>'1'); |
soc_in.adr<=std_logic_vector(to_unsigned(i,30)); |
soc_in.dat<=to_stdlogicvector(v); |
|
wait until rising_edge(clk) and soc_out.ack='1'; |
|
i:=i+1; |
end loop; |
|
report integer'image(i)&" words loaded from """&filename&""""; |
|
soc_in.cyc<='0'; |
soc_in.stb<='0'; |
|
wait until rising_edge(clk); |
end procedure; |
|
procedure run_test( |
filename: string; |
signal clk: in std_logic; |
signal globals: out soc_globals_type; |
signal soc_in: out soc_wbs_in_type; |
signal soc_out: in soc_wbs_out_type; |
signal result: in monitor_out_type |
) is |
begin |
-- Assert SoC and CPU resets |
wait until rising_edge(clk); |
globals.rst_i<='1'; |
globals.cpu_rst_i<='1'; |
wait until rising_edge(clk); |
|
-- Deassert SoC reset, leave CPU in reset state for now |
globals.rst_i<='0'; |
wait until rising_edge(clk); |
|
-- Load RAM |
load_ram(filename,clk,soc_in,soc_out); |
|
-- Deassert CPU reset |
globals.cpu_rst_i<='0'; |
|
while result.valid/='1' loop |
wait until rising_edge(clk); |
end loop; |
|
-- Analyze result |
|
if result.data=X"00000001" then |
report "TEST """&filename&""" RESULT: SUCCESS (return code 0x"& |
hex_string(result.data)&")"; |
else |
report "TEST """&filename&""" RESULT: FAILURE (return code 0x"& |
hex_string(result.data)&")" severity failure; |
end if; |
end procedure; |
end package body; |