summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGravatar bunnei2017-10-09 23:56:20 -0400
committerGravatar bunnei2017-10-09 23:56:20 -0400
commitb1d5db1cf60344b6b081c9d03cb6ccc3264326cd (patch)
treefde377c4ba3c0f92c032e6f5ec8627aae37270ef /src
parentloader: Various improvements for NSO/NRO loaders. (diff)
parentMerge pull request #2996 from MerryMage/split-travis (diff)
downloadyuzu-b1d5db1cf60344b6b081c9d03cb6ccc3264326cd.tar.gz
yuzu-b1d5db1cf60344b6b081c9d03cb6ccc3264326cd.tar.xz
yuzu-b1d5db1cf60344b6b081c9d03cb6ccc3264326cd.zip
Merge remote-tracking branch 'upstream/master' into nx
# Conflicts: # src/core/CMakeLists.txt # src/core/arm/dynarmic/arm_dynarmic.cpp # src/core/arm/dyncom/arm_dyncom.cpp # src/core/hle/kernel/process.cpp # src/core/hle/kernel/thread.cpp # src/core/hle/kernel/thread.h # src/core/hle/kernel/vm_manager.cpp # src/core/loader/3dsx.cpp # src/core/loader/elf.cpp # src/core/loader/ncch.cpp # src/core/memory.cpp # src/core/memory.h # src/core/memory_setup.h
Diffstat (limited to 'src')
-rw-r--r--src/audio_core/codec.cpp4
-rw-r--r--src/audio_core/codec.h4
-rw-r--r--src/audio_core/hle/source.cpp49
-rw-r--r--src/audio_core/hle/source.h2
-rw-r--r--src/audio_core/interpolate.cpp86
-rw-r--r--src/audio_core/interpolate.h31
-rw-r--r--src/citra/citra.cpp2
-rw-r--r--src/citra/citra.rc8
-rw-r--r--src/citra/config.cpp11
-rw-r--r--src/citra/default_ini.h29
-rw-r--r--src/citra/emu_window/emu_window_sdl2.cpp10
-rw-r--r--src/citra/emu_window/emu_window_sdl2.h4
-rw-r--r--src/citra_qt/CMakeLists.txt8
-rw-r--r--src/citra_qt/bootmanager.cpp10
-rw-r--r--src/citra_qt/bootmanager.h4
-rw-r--r--src/citra_qt/citra-qt.rc12
-rw-r--r--src/citra_qt/configuration/config.cpp23
-rw-r--r--src/citra_qt/configuration/configure.ui15
-rw-r--r--src/citra_qt/configuration/configure_dialog.cpp1
-rw-r--r--src/citra_qt/configuration/configure_graphics.ui33
-rw-r--r--src/citra_qt/configuration/configure_system.cpp3
-rw-r--r--src/citra_qt/configuration/configure_web.cpp102
-rw-r--r--src/citra_qt/configuration/configure_web.h40
-rw-r--r--src/citra_qt/configuration/configure_web.ui190
-rw-r--r--src/citra_qt/debugger/graphics/graphics_cmdlists.cpp4
-rw-r--r--src/citra_qt/debugger/graphics/graphics_surface.cpp3
-rw-r--r--src/citra_qt/debugger/graphics/graphics_vertex_shader.cpp41
-rw-r--r--src/citra_qt/main.cpp48
-rw-r--r--src/citra_qt/main.h2
-rw-r--r--src/citra_qt/ui_settings.h2
-rw-r--r--src/common/common_types.h4
-rw-r--r--src/common/quaternion.h5
-rw-r--r--src/common/scm_rev.cpp.in2
-rw-r--r--src/common/scm_rev.h1
-rw-r--r--src/common/string_util.cpp2
-rw-r--r--src/common/string_util.h2
-rw-r--r--src/common/vector_math.h29
-rw-r--r--src/core/CMakeLists.txt20
-rw-r--r--src/core/arm/arm_interface.h22
-rw-r--r--src/core/arm/dynarmic/arm_dynarmic.cpp93
-rw-r--r--src/core/arm/dynarmic/arm_dynarmic.h17
-rw-r--r--src/core/arm/dyncom/arm_dyncom.cpp19
-rw-r--r--src/core/arm/dyncom/arm_dyncom.h5
-rw-r--r--src/core/arm/dyncom/arm_dyncom_interpreter.cpp8
-rw-r--r--src/core/arm/skyeye_common/armstate.h2
-rw-r--r--src/core/core.cpp12
-rw-r--r--src/core/core.h9
-rw-r--r--src/core/core_timing.cpp36
-rw-r--r--src/core/core_timing.h6
-rw-r--r--src/core/file_sys/archive_backend.cpp2
-rw-r--r--src/core/file_sys/archive_ncch.cpp29
-rw-r--r--src/core/file_sys/archive_sdmc.cpp41
-rw-r--r--src/core/file_sys/archive_selfncch.cpp60
-rw-r--r--src/core/file_sys/archive_selfncch.h13
-rw-r--r--src/core/file_sys/ncch_container.cpp423
-rw-r--r--src/core/file_sys/ncch_container.h274
-rw-r--r--src/core/file_sys/savedata_archive.cpp41
-rw-r--r--src/core/file_sys/title_metadata.cpp212
-rw-r--r--src/core/file_sys/title_metadata.h125
-rw-r--r--src/core/frontend/emu_window.cpp97
-rw-r--r--src/core/frontend/emu_window.h114
-rw-r--r--src/core/frontend/framebuffer_layout.cpp36
-rw-r--r--src/core/frontend/framebuffer_layout.h11
-rw-r--r--src/core/frontend/input.h25
-rw-r--r--src/core/frontend/motion_emu.cpp89
-rw-r--r--src/core/frontend/motion_emu.h52
-rw-r--r--src/core/gdbstub/gdbstub.cpp24
-rw-r--r--src/core/hle/applets/erreula.cpp4
-rw-r--r--src/core/hle/applets/mii_selector.cpp10
-rw-r--r--src/core/hle/applets/mii_selector.h57
-rw-r--r--src/core/hle/applets/mint.cpp4
-rw-r--r--src/core/hle/applets/swkbd.cpp4
-rw-r--r--src/core/hle/function_wrappers.h108
-rw-r--r--src/core/hle/ipc.h8
-rw-r--r--src/core/hle/ipc_helpers.h12
-rw-r--r--src/core/hle/kernel/hle_ipc.cpp2
-rw-r--r--src/core/hle/kernel/kernel.h5
-rw-r--r--src/core/hle/kernel/memory.cpp30
-rw-r--r--src/core/hle/kernel/memory.h2
-rw-r--r--src/core/hle/kernel/mutex.cpp5
-rw-r--r--src/core/hle/kernel/mutex.h3
-rw-r--r--src/core/hle/kernel/process.cpp3
-rw-r--r--src/core/hle/kernel/resource_limit.cpp2
-rw-r--r--src/core/hle/kernel/resource_limit.h2
-rw-r--r--src/core/hle/kernel/semaphore.cpp3
-rw-r--r--src/core/hle/kernel/semaphore.h3
-rw-r--r--src/core/hle/kernel/shared_memory.cpp30
-rw-r--r--src/core/hle/kernel/shared_memory.h2
-rw-r--r--src/core/hle/kernel/thread.cpp68
-rw-r--r--src/core/hle/kernel/thread.h48
-rw-r--r--src/core/hle/kernel/vm_manager.cpp19
-rw-r--r--src/core/hle/kernel/vm_manager.h6
-rw-r--r--src/core/hle/kernel/wait_object.cpp13
-rw-r--r--src/core/hle/lock.cpp11
-rw-r--r--src/core/hle/lock.h18
-rw-r--r--src/core/hle/service/apt/apt.cpp729
-rw-r--r--src/core/hle/service/apt/apt.h20
-rw-r--r--src/core/hle/service/apt/apt_s.cpp8
-rw-r--r--src/core/hle/service/cam/cam.cpp2
-rw-r--r--src/core/hle/service/cfg/cfg.cpp6
-rw-r--r--src/core/hle/service/cfg/cfg.h2
-rw-r--r--src/core/hle/service/csnd_snd.cpp2
-rw-r--r--src/core/hle/service/dlp/dlp_clnt.cpp21
-rw-r--r--src/core/hle/service/dlp/dlp_fkcl.cpp18
-rw-r--r--src/core/hle/service/dlp/dlp_srvr.cpp9
-rw-r--r--src/core/hle/service/dsp_dsp.cpp7
-rw-r--r--src/core/hle/service/fs/archive.cpp20
-rw-r--r--src/core/hle/service/fs/archive.h7
-rw-r--r--src/core/hle/service/hid/hid.cpp44
-rw-r--r--src/core/hle/service/hid/hid.h2
-rw-r--r--src/core/hle/service/ir/ir_rst.cpp2
-rw-r--r--src/core/hle/service/ldr_ro/cro_helper.h6
-rw-r--r--src/core/hle/service/nim/nim.cpp18
-rw-r--r--src/core/hle/service/nim/nim.h11
-rw-r--r--src/core/hle/service/nim/nim_u.cpp2
-rw-r--r--src/core/hle/service/ns/ns.cpp16
-rw-r--r--src/core/hle/service/ns/ns.h16
-rw-r--r--src/core/hle/service/ns/ns_s.cpp34
-rw-r--r--src/core/hle/service/ns/ns_s.h (renamed from src/core/hle/service/ns_s.h)9
-rw-r--r--src/core/hle/service/ns_s.cpp33
-rw-r--r--src/core/hle/service/nwm/nwm_uds.cpp485
-rw-r--r--src/core/hle/service/nwm/nwm_uds.h12
-rw-r--r--src/core/hle/service/nwm/uds_beacon.cpp7
-rw-r--r--src/core/hle/service/nwm/uds_beacon.h30
-rw-r--r--src/core/hle/service/nwm/uds_connection.cpp88
-rw-r--r--src/core/hle/service/nwm/uds_connection.h56
-rw-r--r--src/core/hle/service/nwm/uds_data.cpp103
-rw-r--r--src/core/hle/service/nwm/uds_data.h86
-rw-r--r--src/core/hle/service/service.cpp5
-rw-r--r--src/core/hle/service/sm/sm.cpp4
-rw-r--r--src/core/hle/service/sm/sm.h3
-rw-r--r--src/core/hle/service/sm/srv.cpp28
-rw-r--r--src/core/hle/service/sm/srv.h1
-rw-r--r--src/core/hw/gpu.cpp20
-rw-r--r--src/core/hw/gpu.h4
-rw-r--r--src/core/loader/3dsx.cpp20
-rw-r--r--src/core/loader/3dsx.h2
-rw-r--r--src/core/loader/elf.cpp16
-rw-r--r--src/core/loader/elf.h2
-rw-r--r--src/core/loader/loader.h35
-rw-r--r--src/core/loader/ncch.cpp371
-rw-r--r--src/core/loader/ncch.h203
-rw-r--r--src/core/loader/nro.cpp12
-rw-r--r--src/core/loader/nro.h2
-rw-r--r--src/core/loader/nso.cpp12
-rw-r--r--src/core/loader/nso.h2
-rw-r--r--src/core/memory.cpp354
-rw-r--r--src/core/memory.h91
-rw-r--r--src/core/memory_setup.h10
-rw-r--r--src/core/settings.cpp2
-rw-r--r--src/core/settings.h11
-rw-r--r--src/core/telemetry_session.cpp86
-rw-r--r--src/core/telemetry_session.h22
-rw-r--r--src/input_common/CMakeLists.txt2
-rw-r--r--src/input_common/main.cpp15
-rw-r--r--src/input_common/main.h7
-rw-r--r--src/input_common/motion_emu.cpp168
-rw-r--r--src/input_common/motion_emu.h46
-rw-r--r--src/input_common/sdl/sdl.cpp2
-rw-r--r--src/network/packet.cpp40
-rw-r--r--src/network/packet.h4
-rw-r--r--src/network/room.cpp89
-rw-r--r--src/network/room.h21
-rw-r--r--src/network/room_member.cpp128
-rw-r--r--src/network/room_member.h59
-rw-r--r--src/tests/CMakeLists.txt4
-rw-r--r--src/tests/core/arm/arm_test_common.cpp137
-rw-r--r--src/tests/core/arm/arm_test_common.h84
-rw-r--r--src/tests/core/arm/dyncom/arm_dyncom_vfp_tests.cpp50
-rw-r--r--src/tests/core/arm/dyncom/vfp_vadd_f32.inc13456
-rw-r--r--src/tests/core/memory/memory.cpp56
-rw-r--r--src/video_core/CMakeLists.txt4
-rw-r--r--src/video_core/command_processor.cpp492
-rw-r--r--src/video_core/geometry_pipeline.cpp274
-rw-r--r--src/video_core/geometry_pipeline.h49
-rw-r--r--src/video_core/pica.cpp21
-rw-r--r--src/video_core/pica_state.h13
-rw-r--r--src/video_core/pica_types.h18
-rw-r--r--src/video_core/primitive_assembly.cpp15
-rw-r--r--src/video_core/primitive_assembly.h7
-rw-r--r--src/video_core/regs_framebuffer.h10
-rw-r--r--src/video_core/regs_pipeline.h43
-rw-r--r--src/video_core/regs_rasterizer.h14
-rw-r--r--src/video_core/regs_shader.h7
-rw-r--r--src/video_core/renderer_opengl/gl_rasterizer.cpp56
-rw-r--r--src/video_core/renderer_opengl/gl_rasterizer.h9
-rw-r--r--src/video_core/renderer_opengl/gl_shader_gen.cpp115
-rw-r--r--src/video_core/renderer_opengl/gl_state.cpp13
-rw-r--r--src/video_core/renderer_opengl/gl_state.h3
-rw-r--r--src/video_core/shader/shader.cpp44
-rw-r--r--src/video_core/shader/shader.h49
-rw-r--r--src/video_core/shader/shader_interpreter.cpp18
-rw-r--r--src/video_core/shader/shader_jit_x64_compiler.cpp49
-rw-r--r--src/video_core/shader/shader_jit_x64_compiler.h2
-rw-r--r--src/video_core/swrasterizer/clipper.cpp46
-rw-r--r--src/video_core/swrasterizer/framebuffer.cpp2
-rw-r--r--src/video_core/swrasterizer/lighting.cpp308
-rw-r--r--src/video_core/swrasterizer/lighting.h19
-rw-r--r--src/video_core/swrasterizer/rasterizer.cpp29
-rw-r--r--src/video_core/swrasterizer/rasterizer.h6
-rw-r--r--src/video_core/swrasterizer/texturing.cpp4
-rw-r--r--src/video_core/utils.h14
-rw-r--r--src/web_service/CMakeLists.txt2
-rw-r--r--src/web_service/telemetry_json.cpp3
-rw-r--r--src/web_service/telemetry_json.h7
-rw-r--r--src/web_service/verify_login.cpp28
-rw-r--r--src/web_service/verify_login.h24
-rw-r--r--src/web_service/web_backend.cpp138
-rw-r--r--src/web_service/web_backend.h32
209 files changed, 20476 insertions, 2333 deletions
diff --git a/src/audio_core/codec.cpp b/src/audio_core/codec.cpp
index 7a3bd7eb3..6fba9fdae 100644
--- a/src/audio_core/codec.cpp
+++ b/src/audio_core/codec.cpp
@@ -117,7 +117,9 @@ StereoBuffer16 DecodePCM16(const unsigned num_channels, const u8* const data,
117 ret[i].fill(sample); 117 ret[i].fill(sample);
118 } 118 }
119 } else { 119 } else {
120 std::memcpy(ret.data(), data, sample_count * 2 * sizeof(u16)); 120 for (size_t i = 0; i < sample_count; ++i) {
121 std::memcpy(&ret[i], data + i * sizeof(s16) * 2, 2 * sizeof(s16));
122 }
121 } 123 }
122 124
123 return ret; 125 return ret;
diff --git a/src/audio_core/codec.h b/src/audio_core/codec.h
index 2b0c395e6..877b2202d 100644
--- a/src/audio_core/codec.h
+++ b/src/audio_core/codec.h
@@ -5,13 +5,13 @@
5#pragma once 5#pragma once
6 6
7#include <array> 7#include <array>
8#include <vector> 8#include <deque>
9#include "common/common_types.h" 9#include "common/common_types.h"
10 10
11namespace Codec { 11namespace Codec {
12 12
13/// A variable length buffer of signed PCM16 stereo samples. 13/// A variable length buffer of signed PCM16 stereo samples.
14using StereoBuffer16 = std::vector<std::array<s16, 2>>; 14using StereoBuffer16 = std::deque<std::array<s16, 2>>;
15 15
16/// See: Codec::DecodeADPCM 16/// See: Codec::DecodeADPCM
17struct ADPCMState { 17struct ADPCMState {
diff --git a/src/audio_core/hle/source.cpp b/src/audio_core/hle/source.cpp
index 92484c526..c12287700 100644
--- a/src/audio_core/hle/source.cpp
+++ b/src/audio_core/hle/source.cpp
@@ -244,17 +244,27 @@ void Source::GenerateFrame() {
244 break; 244 break;
245 } 245 }
246 246
247 const size_t size_to_copy = 247 switch (state.interpolation_mode) {
248 std::min(state.current_buffer.size(), current_frame.size() - frame_position); 248 case InterpolationMode::None:
249 249 AudioInterp::None(state.interp_state, state.current_buffer, state.rate_multiplier,
250 std::copy(state.current_buffer.begin(), state.current_buffer.begin() + size_to_copy, 250 current_frame, frame_position);
251 current_frame.begin() + frame_position); 251 break;
252 state.current_buffer.erase(state.current_buffer.begin(), 252 case InterpolationMode::Linear:
253 state.current_buffer.begin() + size_to_copy); 253 AudioInterp::Linear(state.interp_state, state.current_buffer, state.rate_multiplier,
254 254 current_frame, frame_position);
255 frame_position += size_to_copy; 255 break;
256 state.next_sample_number += static_cast<u32>(size_to_copy); 256 case InterpolationMode::Polyphase:
257 // TODO(merry): Implement polyphase interpolation
258 LOG_DEBUG(Audio_DSP, "Polyphase interpolation unimplemented; falling back to linear");
259 AudioInterp::Linear(state.interp_state, state.current_buffer, state.rate_multiplier,
260 current_frame, frame_position);
261 break;
262 default:
263 UNIMPLEMENTED();
264 break;
265 }
257 } 266 }
267 state.next_sample_number += static_cast<u32>(frame_position);
258 268
259 state.filters.ProcessFrame(current_frame); 269 state.filters.ProcessFrame(current_frame);
260} 270}
@@ -305,25 +315,6 @@ bool Source::DequeueBuffer() {
305 return true; 315 return true;
306 } 316 }
307 317
308 switch (state.interpolation_mode) {
309 case InterpolationMode::None:
310 state.current_buffer =
311 AudioInterp::None(state.interp_state, state.current_buffer, state.rate_multiplier);
312 break;
313 case InterpolationMode::Linear:
314 state.current_buffer =
315 AudioInterp::Linear(state.interp_state, state.current_buffer, state.rate_multiplier);
316 break;
317 case InterpolationMode::Polyphase:
318 // TODO(merry): Implement polyphase interpolation
319 state.current_buffer =
320 AudioInterp::Linear(state.interp_state, state.current_buffer, state.rate_multiplier);
321 break;
322 default:
323 UNIMPLEMENTED();
324 break;
325 }
326
327 // the first playthrough starts at play_position, loops start at the beginning of the buffer 318 // the first playthrough starts at play_position, loops start at the beginning of the buffer
328 state.current_sample_number = (!buf.has_played) ? buf.play_position : 0; 319 state.current_sample_number = (!buf.has_played) ? buf.play_position : 0;
329 state.next_sample_number = state.current_sample_number; 320 state.next_sample_number = state.current_sample_number;
diff --git a/src/audio_core/hle/source.h b/src/audio_core/hle/source.h
index ccb7f064f..c4d2debc2 100644
--- a/src/audio_core/hle/source.h
+++ b/src/audio_core/hle/source.h
@@ -108,7 +108,7 @@ private:
108 108
109 u32 current_sample_number = 0; 109 u32 current_sample_number = 0;
110 u32 next_sample_number = 0; 110 u32 next_sample_number = 0;
111 std::vector<std::array<s16, 2>> current_buffer; 111 AudioInterp::StereoBuffer16 current_buffer;
112 112
113 // buffer_id state 113 // buffer_id state
114 114
diff --git a/src/audio_core/interpolate.cpp b/src/audio_core/interpolate.cpp
index 8a5d4181a..83573d772 100644
--- a/src/audio_core/interpolate.cpp
+++ b/src/audio_core/interpolate.cpp
@@ -13,74 +13,64 @@ namespace AudioInterp {
13constexpr u64 scale_factor = 1 << 24; 13constexpr u64 scale_factor = 1 << 24;
14constexpr u64 scale_mask = scale_factor - 1; 14constexpr u64 scale_mask = scale_factor - 1;
15 15
16/// Here we step over the input in steps of rate_multiplier, until we consume all of the input. 16/// Here we step over the input in steps of rate, until we consume all of the input.
17/// Three adjacent samples are passed to fn each step. 17/// Three adjacent samples are passed to fn each step.
18template <typename Function> 18template <typename Function>
19static StereoBuffer16 StepOverSamples(State& state, const StereoBuffer16& input, 19static void StepOverSamples(State& state, StereoBuffer16& input, float rate,
20 float rate_multiplier, Function fn) { 20 DSP::HLE::StereoFrame16& output, size_t& outputi, Function fn) {
21 ASSERT(rate_multiplier > 0); 21 ASSERT(rate > 0);
22 22
23 if (input.size() < 2) 23 if (input.empty())
24 return {}; 24 return;
25 25
26 StereoBuffer16 output; 26 input.insert(input.begin(), {state.xn2, state.xn1});
27 output.reserve(static_cast<size_t>(input.size() / rate_multiplier));
28 27
29 u64 step_size = static_cast<u64>(rate_multiplier * scale_factor); 28 const u64 step_size = static_cast<u64>(rate * scale_factor);
29 u64 fposition = state.fposition;
30 size_t inputi = 0;
30 31
31 u64 fposition = 0; 32 while (outputi < output.size()) {
32 const u64 max_fposition = input.size() * scale_factor; 33 inputi = static_cast<size_t>(fposition / scale_factor);
33 34
34 while (fposition < 1 * scale_factor) { 35 if (inputi + 2 >= input.size()) {
35 u64 fraction = fposition & scale_mask; 36 inputi = input.size() - 2;
36 37 break;
37 output.push_back(fn(fraction, state.xn2, state.xn1, input[0])); 38 }
38
39 fposition += step_size;
40 }
41
42 while (fposition < 2 * scale_factor) {
43 u64 fraction = fposition & scale_mask;
44
45 output.push_back(fn(fraction, state.xn1, input[0], input[1]));
46
47 fposition += step_size;
48 }
49 39
50 while (fposition < max_fposition) {
51 u64 fraction = fposition & scale_mask; 40 u64 fraction = fposition & scale_mask;
52 41 output[outputi++] = fn(fraction, input[inputi], input[inputi + 1], input[inputi + 2]);
53 size_t index = static_cast<size_t>(fposition / scale_factor);
54 output.push_back(fn(fraction, input[index - 2], input[index - 1], input[index]));
55 42
56 fposition += step_size; 43 fposition += step_size;
57 } 44 }
58 45
59 state.xn2 = input[input.size() - 2]; 46 state.xn2 = input[inputi];
60 state.xn1 = input[input.size() - 1]; 47 state.xn1 = input[inputi + 1];
48 state.fposition = fposition - inputi * scale_factor;
61 49
62 return output; 50 input.erase(input.begin(), std::next(input.begin(), inputi + 2));
63} 51}
64 52
65StereoBuffer16 None(State& state, const StereoBuffer16& input, float rate_multiplier) { 53void None(State& state, StereoBuffer16& input, float rate, DSP::HLE::StereoFrame16& output,
66 return StepOverSamples( 54 size_t& outputi) {
67 state, input, rate_multiplier, 55 StepOverSamples(
56 state, input, rate, output, outputi,
68 [](u64 fraction, const auto& x0, const auto& x1, const auto& x2) { return x0; }); 57 [](u64 fraction, const auto& x0, const auto& x1, const auto& x2) { return x0; });
69} 58}
70 59
71StereoBuffer16 Linear(State& state, const StereoBuffer16& input, float rate_multiplier) { 60void Linear(State& state, StereoBuffer16& input, float rate, DSP::HLE::StereoFrame16& output,
61 size_t& outputi) {
72 // Note on accuracy: Some values that this produces are +/- 1 from the actual firmware. 62 // Note on accuracy: Some values that this produces are +/- 1 from the actual firmware.
73 return StepOverSamples(state, input, rate_multiplier, 63 StepOverSamples(state, input, rate, output, outputi,
74 [](u64 fraction, const auto& x0, const auto& x1, const auto& x2) { 64 [](u64 fraction, const auto& x0, const auto& x1, const auto& x2) {
75 // This is a saturated subtraction. (Verified by black-box fuzzing.) 65 // This is a saturated subtraction. (Verified by black-box fuzzing.)
76 s64 delta0 = MathUtil::Clamp<s64>(x1[0] - x0[0], -32768, 32767); 66 s64 delta0 = MathUtil::Clamp<s64>(x1[0] - x0[0], -32768, 32767);
77 s64 delta1 = MathUtil::Clamp<s64>(x1[1] - x0[1], -32768, 32767); 67 s64 delta1 = MathUtil::Clamp<s64>(x1[1] - x0[1], -32768, 32767);
78 68
79 return std::array<s16, 2>{ 69 return std::array<s16, 2>{
80 static_cast<s16>(x0[0] + fraction * delta0 / scale_factor), 70 static_cast<s16>(x0[0] + fraction * delta0 / scale_factor),
81 static_cast<s16>(x0[1] + fraction * delta1 / scale_factor), 71 static_cast<s16>(x0[1] + fraction * delta1 / scale_factor),
82 }; 72 };
83 }); 73 });
84} 74}
85 75
86} // namespace AudioInterp 76} // namespace AudioInterp
diff --git a/src/audio_core/interpolate.h b/src/audio_core/interpolate.h
index 19a7b66cb..8dff6111a 100644
--- a/src/audio_core/interpolate.h
+++ b/src/audio_core/interpolate.h
@@ -5,40 +5,45 @@
5#pragma once 5#pragma once
6 6
7#include <array> 7#include <array>
8#include <vector> 8#include <deque>
9#include "audio_core/hle/common.h"
9#include "common/common_types.h" 10#include "common/common_types.h"
10 11
11namespace AudioInterp { 12namespace AudioInterp {
12 13
13/// A variable length buffer of signed PCM16 stereo samples. 14/// A variable length buffer of signed PCM16 stereo samples.
14using StereoBuffer16 = std::vector<std::array<s16, 2>>; 15using StereoBuffer16 = std::deque<std::array<s16, 2>>;
15 16
16struct State { 17struct State {
17 // Two historical samples. 18 /// Two historical samples.
18 std::array<s16, 2> xn1 = {}; ///< x[n-1] 19 std::array<s16, 2> xn1 = {}; ///< x[n-1]
19 std::array<s16, 2> xn2 = {}; ///< x[n-2] 20 std::array<s16, 2> xn2 = {}; ///< x[n-2]
21 /// Current fractional position.
22 u64 fposition = 0;
20}; 23};
21 24
22/** 25/**
23 * No interpolation. This is equivalent to a zero-order hold. There is a two-sample predelay. 26 * No interpolation. This is equivalent to a zero-order hold. There is a two-sample predelay.
24 * @param state Interpolation state. 27 * @param state Interpolation state.
25 * @param input Input buffer. 28 * @param input Input buffer.
26 * @param rate_multiplier Stretch factor. Must be a positive non-zero value. 29 * @param rate Stretch factor. Must be a positive non-zero value.
27 * rate_multiplier > 1.0 performs decimation and rate_multipler < 1.0 30 * rate > 1.0 performs decimation and rate < 1.0 performs upsampling.
28 * performs upsampling. 31 * @param output The resampled audio buffer.
29 * @return The resampled audio buffer. 32 * @param outputi The index of output to start writing to.
30 */ 33 */
31StereoBuffer16 None(State& state, const StereoBuffer16& input, float rate_multiplier); 34void None(State& state, StereoBuffer16& input, float rate, DSP::HLE::StereoFrame16& output,
35 size_t& outputi);
32 36
33/** 37/**
34 * Linear interpolation. This is equivalent to a first-order hold. There is a two-sample predelay. 38 * Linear interpolation. This is equivalent to a first-order hold. There is a two-sample predelay.
35 * @param state Interpolation state. 39 * @param state Interpolation state.
36 * @param input Input buffer. 40 * @param input Input buffer.
37 * @param rate_multiplier Stretch factor. Must be a positive non-zero value. 41 * @param rate Stretch factor. Must be a positive non-zero value.
38 * rate_multiplier > 1.0 performs decimation and rate_multipler < 1.0 42 * rate > 1.0 performs decimation and rate < 1.0 performs upsampling.
39 * performs upsampling. 43 * @param output The resampled audio buffer.
40 * @return The resampled audio buffer. 44 * @param outputi The index of output to start writing to.
41 */ 45 */
42StereoBuffer16 Linear(State& state, const StereoBuffer16& input, float rate_multiplier); 46void Linear(State& state, StereoBuffer16& input, float rate, DSP::HLE::StereoFrame16& output,
47 size_t& outputi);
43 48
44} // namespace AudioInterp 49} // namespace AudioInterp
diff --git a/src/citra/citra.cpp b/src/citra/citra.cpp
index 14574e56c..e524c5535 100644
--- a/src/citra/citra.cpp
+++ b/src/citra/citra.cpp
@@ -165,6 +165,8 @@ int main(int argc, char** argv) {
165 break; // Expected case 165 break; // Expected case
166 } 166 }
167 167
168 Core::Telemetry().AddField(Telemetry::FieldType::App, "Frontend", "SDL");
169
168 while (emu_window->IsOpen()) { 170 while (emu_window->IsOpen()) {
169 system.RunLoop(); 171 system.RunLoop();
170 } 172 }
diff --git a/src/citra/citra.rc b/src/citra/citra.rc
index fea603004..c490ef302 100644
--- a/src/citra/citra.rc
+++ b/src/citra/citra.rc
@@ -1,3 +1,4 @@
1#include "winresrc.h"
1///////////////////////////////////////////////////////////////////////////// 2/////////////////////////////////////////////////////////////////////////////
2// 3//
3// Icon 4// Icon
@@ -7,3 +8,10 @@
7// remains consistent on all systems. 8// remains consistent on all systems.
8CITRA_ICON ICON "../../dist/citra.ico" 9CITRA_ICON ICON "../../dist/citra.ico"
9 10
11
12/////////////////////////////////////////////////////////////////////////////
13//
14// RT_MANIFEST
15//
16
171 RT_MANIFEST "../../dist/citra.manifest"
diff --git a/src/citra/config.cpp b/src/citra/config.cpp
index 69247b166..45c28ad09 100644
--- a/src/citra/config.cpp
+++ b/src/citra/config.cpp
@@ -76,6 +76,11 @@ void Config::ReadValues() {
76 Settings::values.analogs[i] = default_param; 76 Settings::values.analogs[i] = default_param;
77 } 77 }
78 78
79 Settings::values.motion_device = sdl2_config->Get(
80 "Controls", "motion_device", "engine:motion_emu,update_period:100,sensitivity:0.01");
81 Settings::values.touch_device =
82 sdl2_config->Get("Controls", "touch_device", "engine:emu_window");
83
79 // Core 84 // Core
80 Settings::values.use_cpu_jit = sdl2_config->GetBoolean("Core", "use_cpu_jit", true); 85 Settings::values.use_cpu_jit = sdl2_config->GetBoolean("Core", "use_cpu_jit", true);
81 86
@@ -153,8 +158,14 @@ void Config::ReadValues() {
153 static_cast<u16>(sdl2_config->GetInteger("Debugging", "gdbstub_port", 24689)); 158 static_cast<u16>(sdl2_config->GetInteger("Debugging", "gdbstub_port", 24689));
154 159
155 // Web Service 160 // Web Service
161 Settings::values.enable_telemetry =
162 sdl2_config->GetBoolean("WebService", "enable_telemetry", true);
156 Settings::values.telemetry_endpoint_url = sdl2_config->Get( 163 Settings::values.telemetry_endpoint_url = sdl2_config->Get(
157 "WebService", "telemetry_endpoint_url", "https://services.citra-emu.org/api/telemetry"); 164 "WebService", "telemetry_endpoint_url", "https://services.citra-emu.org/api/telemetry");
165 Settings::values.verify_endpoint_url = sdl2_config->Get(
166 "WebService", "verify_endpoint_url", "https://services.citra-emu.org/api/profile");
167 Settings::values.citra_username = sdl2_config->Get("WebService", "citra_username", "");
168 Settings::values.citra_token = sdl2_config->Get("WebService", "citra_token", "");
158} 169}
159 170
160void Config::Reload() { 171void Config::Reload() {
diff --git a/src/citra/default_ini.h b/src/citra/default_ini.h
index a12498e0f..59faf773f 100644
--- a/src/citra/default_ini.h
+++ b/src/citra/default_ini.h
@@ -12,7 +12,7 @@ const char* sdl2_config_file = R"(
12# It should be in the format of "engine:[engine_name],[param1]:[value1],[param2]:[value2]..." 12# It should be in the format of "engine:[engine_name],[param1]:[value1],[param2]:[value2]..."
13# Escape characters $0 (for ':'), $1 (for ',') and $2 (for '$') can be used in values 13# Escape characters $0 (for ':'), $1 (for ',') and $2 (for '$') can be used in values
14 14
15# for button input, the following devices are avaible: 15# for button input, the following devices are available:
16# - "keyboard" (default) for keyboard input. Required parameters: 16# - "keyboard" (default) for keyboard input. Required parameters:
17# - "code": the code of the key to bind 17# - "code": the code of the key to bind
18# - "sdl" for joystick input using SDL. Required parameters: 18# - "sdl" for joystick input using SDL. Required parameters:
@@ -21,7 +21,7 @@ const char* sdl2_config_file = R"(
21# - "hat"(optional): the index of the hat to bind as direction buttons 21# - "hat"(optional): the index of the hat to bind as direction buttons
22# - "axis"(optional): the index of the axis to bind 22# - "axis"(optional): the index of the axis to bind
23# - "direction"(only used for hat): the direction name of the hat to bind. Can be "up", "down", "left" or "right" 23# - "direction"(only used for hat): the direction name of the hat to bind. Can be "up", "down", "left" or "right"
24# - "threshould"(only used for axis): a float value in (-1.0, 1.0) which the button is 24# - "threshold"(only used for axis): a float value in (-1.0, 1.0) which the button is
25# triggered if the axis value crosses 25# triggered if the axis value crosses
26# - "direction"(only used for axis): "+" means the button is triggered when the axis value 26# - "direction"(only used for axis): "+" means the button is triggered when the axis value
27# is greater than the threshold; "-" means the button is triggered when the axis value 27# is greater than the threshold; "-" means the button is triggered when the axis value
@@ -42,8 +42,8 @@ button_zl=
42button_zr= 42button_zr=
43button_home= 43button_home=
44 44
45# for analog input, the following devices are avaible: 45# for analog input, the following devices are available:
46# - "analog_from_button" (default) for emulating analog input from direction buttons. Required parameters: 46# - "analog_from_button" (default) for emulating analog input from direction buttons. Required parameters:
47# - "up", "down", "left", "right": sub-devices for each direction. 47# - "up", "down", "left", "right": sub-devices for each direction.
48# Should be in the format as a button input devices using escape characters, for example, "engine$0keyboard$1code$00" 48# Should be in the format as a button input devices using escape characters, for example, "engine$0keyboard$1code$00"
49# - "modifier": sub-devices as a modifier. 49# - "modifier": sub-devices as a modifier.
@@ -56,6 +56,16 @@ button_home=
56circle_pad= 56circle_pad=
57c_stick= 57c_stick=
58 58
59# for motion input, the following devices are available:
60# - "motion_emu" (default) for emulating motion input from mouse input. Required parameters:
61# - "update_period": update period in milliseconds (default to 100)
62# - "sensitivity": the coefficient converting mouse movement to tilting angle (default to 0.01)
63motion_device=
64
65# for touch input, the following devices are available:
66# - "emu_window" (default) for emulating touch input from mouse input to the emulation window. No parameters required
67touch_device=
68
59[Core] 69[Core]
60# Whether to use the Just-In-Time (JIT) compiler for CPU emulation 70# Whether to use the Just-In-Time (JIT) compiler for CPU emulation
61# 0: Interpreter (slow), 1 (default): JIT (fast) 71# 0: Interpreter (slow), 1 (default): JIT (fast)
@@ -170,7 +180,16 @@ use_gdbstub=false
170gdbstub_port=24689 180gdbstub_port=24689
171 181
172[WebService] 182[WebService]
183# Whether or not to enable telemetry
184# 0: No, 1 (default): Yes
185enable_telemetry =
173# Endpoint URL for submitting telemetry data 186# Endpoint URL for submitting telemetry data
174telemetry_endpoint_url = 187telemetry_endpoint_url = https://services.citra-emu.org/api/telemetry
188# Endpoint URL to verify the username and token
189verify_endpoint_url = https://services.citra-emu.org/api/profile
190# Username and token for Citra Web Service
191# See https://services.citra-emu.org/ for more info
192citra_username =
193citra_token =
175)"; 194)";
176} 195}
diff --git a/src/citra/emu_window/emu_window_sdl2.cpp b/src/citra/emu_window/emu_window_sdl2.cpp
index b0f808399..25643715a 100644
--- a/src/citra/emu_window/emu_window_sdl2.cpp
+++ b/src/citra/emu_window/emu_window_sdl2.cpp
@@ -16,11 +16,12 @@
16#include "core/settings.h" 16#include "core/settings.h"
17#include "input_common/keyboard.h" 17#include "input_common/keyboard.h"
18#include "input_common/main.h" 18#include "input_common/main.h"
19#include "input_common/motion_emu.h"
19#include "network/network.h" 20#include "network/network.h"
20 21
21void EmuWindow_SDL2::OnMouseMotion(s32 x, s32 y) { 22void EmuWindow_SDL2::OnMouseMotion(s32 x, s32 y) {
22 TouchMoved((unsigned)std::max(x, 0), (unsigned)std::max(y, 0)); 23 TouchMoved((unsigned)std::max(x, 0), (unsigned)std::max(y, 0));
23 motion_emu->Tilt(x, y); 24 InputCommon::GetMotionEmu()->Tilt(x, y);
24} 25}
25 26
26void EmuWindow_SDL2::OnMouseButton(u32 button, u8 state, s32 x, s32 y) { 27void EmuWindow_SDL2::OnMouseButton(u32 button, u8 state, s32 x, s32 y) {
@@ -32,9 +33,9 @@ void EmuWindow_SDL2::OnMouseButton(u32 button, u8 state, s32 x, s32 y) {
32 } 33 }
33 } else if (button == SDL_BUTTON_RIGHT) { 34 } else if (button == SDL_BUTTON_RIGHT) {
34 if (state == SDL_PRESSED) { 35 if (state == SDL_PRESSED) {
35 motion_emu->BeginTilt(x, y); 36 InputCommon::GetMotionEmu()->BeginTilt(x, y);
36 } else { 37 } else {
37 motion_emu->EndTilt(); 38 InputCommon::GetMotionEmu()->EndTilt();
38 } 39 }
39 } 40 }
40} 41}
@@ -61,8 +62,6 @@ EmuWindow_SDL2::EmuWindow_SDL2() {
61 InputCommon::Init(); 62 InputCommon::Init();
62 Network::Init(); 63 Network::Init();
63 64
64 motion_emu = std::make_unique<Motion::MotionEmu>(*this);
65
66 SDL_SetMainReady(); 65 SDL_SetMainReady();
67 66
68 // Initialize the window 67 // Initialize the window
@@ -117,7 +116,6 @@ EmuWindow_SDL2::EmuWindow_SDL2() {
117EmuWindow_SDL2::~EmuWindow_SDL2() { 116EmuWindow_SDL2::~EmuWindow_SDL2() {
118 SDL_GL_DeleteContext(gl_context); 117 SDL_GL_DeleteContext(gl_context);
119 SDL_Quit(); 118 SDL_Quit();
120 motion_emu = nullptr;
121 119
122 Network::Shutdown(); 120 Network::Shutdown();
123 InputCommon::Shutdown(); 121 InputCommon::Shutdown();
diff --git a/src/citra/emu_window/emu_window_sdl2.h b/src/citra/emu_window/emu_window_sdl2.h
index 1ce2991f7..3664d2fbe 100644
--- a/src/citra/emu_window/emu_window_sdl2.h
+++ b/src/citra/emu_window/emu_window_sdl2.h
@@ -7,7 +7,6 @@
7#include <memory> 7#include <memory>
8#include <utility> 8#include <utility>
9#include "core/frontend/emu_window.h" 9#include "core/frontend/emu_window.h"
10#include "core/frontend/motion_emu.h"
11 10
12struct SDL_Window; 11struct SDL_Window;
13 12
@@ -57,7 +56,4 @@ private:
57 using SDL_GLContext = void*; 56 using SDL_GLContext = void*;
58 /// The OpenGL context associated with the window 57 /// The OpenGL context associated with the window
59 SDL_GLContext gl_context; 58 SDL_GLContext gl_context;
60
61 /// Motion sensors emulation
62 std::unique_ptr<Motion::MotionEmu> motion_emu;
63}; 59};
diff --git a/src/citra_qt/CMakeLists.txt b/src/citra_qt/CMakeLists.txt
index f364b2284..add7566c2 100644
--- a/src/citra_qt/CMakeLists.txt
+++ b/src/citra_qt/CMakeLists.txt
@@ -12,6 +12,7 @@ set(SRCS
12 configuration/configure_graphics.cpp 12 configuration/configure_graphics.cpp
13 configuration/configure_input.cpp 13 configuration/configure_input.cpp
14 configuration/configure_system.cpp 14 configuration/configure_system.cpp
15 configuration/configure_web.cpp
15 debugger/graphics/graphics.cpp 16 debugger/graphics/graphics.cpp
16 debugger/graphics/graphics_breakpoint_observer.cpp 17 debugger/graphics/graphics_breakpoint_observer.cpp
17 debugger/graphics/graphics_breakpoints.cpp 18 debugger/graphics/graphics_breakpoints.cpp
@@ -42,6 +43,7 @@ set(HEADERS
42 configuration/configure_graphics.h 43 configuration/configure_graphics.h
43 configuration/configure_input.h 44 configuration/configure_input.h
44 configuration/configure_system.h 45 configuration/configure_system.h
46 configuration/configure_web.h
45 debugger/graphics/graphics.h 47 debugger/graphics/graphics.h
46 debugger/graphics/graphics_breakpoint_observer.h 48 debugger/graphics/graphics_breakpoint_observer.h
47 debugger/graphics/graphics_breakpoints.h 49 debugger/graphics/graphics_breakpoints.h
@@ -71,11 +73,13 @@ set(UIS
71 configuration/configure_graphics.ui 73 configuration/configure_graphics.ui
72 configuration/configure_input.ui 74 configuration/configure_input.ui
73 configuration/configure_system.ui 75 configuration/configure_system.ui
76 configuration/configure_web.ui
74 debugger/registers.ui 77 debugger/registers.ui
75 hotkeys.ui 78 hotkeys.ui
76 main.ui 79 main.ui
77 ) 80 )
78 81
82file(GLOB_RECURSE ICONS ${CMAKE_SOURCE_DIR}/dist/icons/*)
79file(GLOB_RECURSE THEMES ${CMAKE_SOURCE_DIR}/dist/qt_themes/*) 83file(GLOB_RECURSE THEMES ${CMAKE_SOURCE_DIR}/dist/qt_themes/*)
80 84
81create_directory_groups(${SRCS} ${HEADERS} ${UIS}) 85create_directory_groups(${SRCS} ${HEADERS} ${UIS})
@@ -89,10 +93,10 @@ endif()
89if (APPLE) 93if (APPLE)
90 set(MACOSX_ICON "../../dist/citra.icns") 94 set(MACOSX_ICON "../../dist/citra.icns")
91 set_source_files_properties(${MACOSX_ICON} PROPERTIES MACOSX_PACKAGE_LOCATION Resources) 95 set_source_files_properties(${MACOSX_ICON} PROPERTIES MACOSX_PACKAGE_LOCATION Resources)
92 add_executable(citra-qt MACOSX_BUNDLE ${SRCS} ${HEADERS} ${UI_HDRS} ${THEMES} ${MACOSX_ICON}) 96 add_executable(citra-qt MACOSX_BUNDLE ${SRCS} ${HEADERS} ${UI_HDRS} ${ICONS} ${THEMES} ${MACOSX_ICON})
93 set_target_properties(citra-qt PROPERTIES MACOSX_BUNDLE_INFO_PLIST ${CMAKE_CURRENT_SOURCE_DIR}/Info.plist) 97 set_target_properties(citra-qt PROPERTIES MACOSX_BUNDLE_INFO_PLIST ${CMAKE_CURRENT_SOURCE_DIR}/Info.plist)
94else() 98else()
95 add_executable(citra-qt ${SRCS} ${HEADERS} ${UI_HDRS} ${THEMES}) 99 add_executable(citra-qt ${SRCS} ${HEADERS} ${UI_HDRS} ${ICONS} ${THEMES})
96endif() 100endif()
97target_link_libraries(citra-qt PRIVATE audio_core common core input_common network video_core) 101target_link_libraries(citra-qt PRIVATE audio_core common core input_common network video_core)
98target_link_libraries(citra-qt PRIVATE Boost::boost glad nihstro-headers Qt5::OpenGL Qt5::Widgets) 102target_link_libraries(citra-qt PRIVATE Boost::boost glad nihstro-headers Qt5::OpenGL Qt5::Widgets)
diff --git a/src/citra_qt/bootmanager.cpp b/src/citra_qt/bootmanager.cpp
index 30554890f..7107bfc60 100644
--- a/src/citra_qt/bootmanager.cpp
+++ b/src/citra_qt/bootmanager.cpp
@@ -17,6 +17,7 @@
17#include "core/settings.h" 17#include "core/settings.h"
18#include "input_common/keyboard.h" 18#include "input_common/keyboard.h"
19#include "input_common/main.h" 19#include "input_common/main.h"
20#include "input_common/motion_emu.h"
20#include "network/network.h" 21#include "network/network.h"
21 22
22EmuThread::EmuThread(GRenderWindow* render_window) 23EmuThread::EmuThread(GRenderWindow* render_window)
@@ -201,7 +202,6 @@ qreal GRenderWindow::windowPixelRatio() {
201} 202}
202 203
203void GRenderWindow::closeEvent(QCloseEvent* event) { 204void GRenderWindow::closeEvent(QCloseEvent* event) {
204 motion_emu = nullptr;
205 emit Closed(); 205 emit Closed();
206 QWidget::closeEvent(event); 206 QWidget::closeEvent(event);
207} 207}
@@ -221,7 +221,7 @@ void GRenderWindow::mousePressEvent(QMouseEvent* event) {
221 this->TouchPressed(static_cast<unsigned>(pos.x() * pixelRatio), 221 this->TouchPressed(static_cast<unsigned>(pos.x() * pixelRatio),
222 static_cast<unsigned>(pos.y() * pixelRatio)); 222 static_cast<unsigned>(pos.y() * pixelRatio));
223 } else if (event->button() == Qt::RightButton) { 223 } else if (event->button() == Qt::RightButton) {
224 motion_emu->BeginTilt(pos.x(), pos.y()); 224 InputCommon::GetMotionEmu()->BeginTilt(pos.x(), pos.y());
225 } 225 }
226} 226}
227 227
@@ -230,14 +230,14 @@ void GRenderWindow::mouseMoveEvent(QMouseEvent* event) {
230 qreal pixelRatio = windowPixelRatio(); 230 qreal pixelRatio = windowPixelRatio();
231 this->TouchMoved(std::max(static_cast<unsigned>(pos.x() * pixelRatio), 0u), 231 this->TouchMoved(std::max(static_cast<unsigned>(pos.x() * pixelRatio), 0u),
232 std::max(static_cast<unsigned>(pos.y() * pixelRatio), 0u)); 232 std::max(static_cast<unsigned>(pos.y() * pixelRatio), 0u));
233 motion_emu->Tilt(pos.x(), pos.y()); 233 InputCommon::GetMotionEmu()->Tilt(pos.x(), pos.y());
234} 234}
235 235
236void GRenderWindow::mouseReleaseEvent(QMouseEvent* event) { 236void GRenderWindow::mouseReleaseEvent(QMouseEvent* event) {
237 if (event->button() == Qt::LeftButton) 237 if (event->button() == Qt::LeftButton)
238 this->TouchReleased(); 238 this->TouchReleased();
239 else if (event->button() == Qt::RightButton) 239 else if (event->button() == Qt::RightButton)
240 motion_emu->EndTilt(); 240 InputCommon::GetMotionEmu()->EndTilt();
241} 241}
242 242
243void GRenderWindow::focusOutEvent(QFocusEvent* event) { 243void GRenderWindow::focusOutEvent(QFocusEvent* event) {
@@ -290,13 +290,11 @@ void GRenderWindow::OnMinimalClientAreaChangeRequest(
290} 290}
291 291
292void GRenderWindow::OnEmulationStarting(EmuThread* emu_thread) { 292void GRenderWindow::OnEmulationStarting(EmuThread* emu_thread) {
293 motion_emu = std::make_unique<Motion::MotionEmu>(*this);
294 this->emu_thread = emu_thread; 293 this->emu_thread = emu_thread;
295 child->DisablePainting(); 294 child->DisablePainting();
296} 295}
297 296
298void GRenderWindow::OnEmulationStopping() { 297void GRenderWindow::OnEmulationStopping() {
299 motion_emu = nullptr;
300 emu_thread = nullptr; 298 emu_thread = nullptr;
301 child->EnablePainting(); 299 child->EnablePainting();
302} 300}
diff --git a/src/citra_qt/bootmanager.h b/src/citra_qt/bootmanager.h
index 4b3a3b3cc..6974edcbb 100644
--- a/src/citra_qt/bootmanager.h
+++ b/src/citra_qt/bootmanager.h
@@ -12,7 +12,6 @@
12#include "common/thread.h" 12#include "common/thread.h"
13#include "core/core.h" 13#include "core/core.h"
14#include "core/frontend/emu_window.h" 14#include "core/frontend/emu_window.h"
15#include "core/frontend/motion_emu.h"
16 15
17class QKeyEvent; 16class QKeyEvent;
18class QScreen; 17class QScreen;
@@ -158,9 +157,6 @@ private:
158 157
159 EmuThread* emu_thread; 158 EmuThread* emu_thread;
160 159
161 /// Motion sensors emulation
162 std::unique_ptr<Motion::MotionEmu> motion_emu;
163
164protected: 160protected:
165 void showEvent(QShowEvent* event) override; 161 void showEvent(QShowEvent* event) override;
166}; 162};
diff --git a/src/citra_qt/citra-qt.rc b/src/citra_qt/citra-qt.rc
index fea603004..a48a9440d 100644
--- a/src/citra_qt/citra-qt.rc
+++ b/src/citra_qt/citra-qt.rc
@@ -1,3 +1,4 @@
1#include "winresrc.h"
1///////////////////////////////////////////////////////////////////////////// 2/////////////////////////////////////////////////////////////////////////////
2// 3//
3// Icon 4// Icon
@@ -5,5 +6,14 @@
5 6
6// Icon with lowest ID value placed first to ensure application icon 7// Icon with lowest ID value placed first to ensure application icon
7// remains consistent on all systems. 8// remains consistent on all systems.
8CITRA_ICON ICON "../../dist/citra.ico" 9// QT requires that the default application icon is named IDI_ICON1
9 10
11IDI_ICON1 ICON "../../dist/citra.ico"
12
13
14/////////////////////////////////////////////////////////////////////////////
15//
16// RT_MANIFEST
17//
18
191 RT_MANIFEST "../../dist/citra.manifest"
diff --git a/src/citra_qt/configuration/config.cpp b/src/citra_qt/configuration/config.cpp
index 75abb4ce6..5261f4c4c 100644
--- a/src/citra_qt/configuration/config.cpp
+++ b/src/citra_qt/configuration/config.cpp
@@ -57,6 +57,13 @@ void Config::ReadValues() {
57 Settings::values.analogs[i] = default_param; 57 Settings::values.analogs[i] = default_param;
58 } 58 }
59 59
60 Settings::values.motion_device =
61 qt_config->value("motion_device", "engine:motion_emu,update_period:100,sensitivity:0.01")
62 .toString()
63 .toStdString();
64 Settings::values.touch_device =
65 qt_config->value("touch_device", "engine:emu_window").toString().toStdString();
66
60 qt_config->endGroup(); 67 qt_config->endGroup();
61 68
62 qt_config->beginGroup("Core"); 69 qt_config->beginGroup("Core");
@@ -134,10 +141,17 @@ void Config::ReadValues() {
134 qt_config->endGroup(); 141 qt_config->endGroup();
135 142
136 qt_config->beginGroup("WebService"); 143 qt_config->beginGroup("WebService");
144 Settings::values.enable_telemetry = qt_config->value("enable_telemetry", true).toBool();
137 Settings::values.telemetry_endpoint_url = 145 Settings::values.telemetry_endpoint_url =
138 qt_config->value("telemetry_endpoint_url", "https://services.citra-emu.org/api/telemetry") 146 qt_config->value("telemetry_endpoint_url", "https://services.citra-emu.org/api/telemetry")
139 .toString() 147 .toString()
140 .toStdString(); 148 .toStdString();
149 Settings::values.verify_endpoint_url =
150 qt_config->value("verify_endpoint_url", "https://services.citra-emu.org/api/profile")
151 .toString()
152 .toStdString();
153 Settings::values.citra_username = qt_config->value("citra_username").toString().toStdString();
154 Settings::values.citra_token = qt_config->value("citra_token").toString().toStdString();
141 qt_config->endGroup(); 155 qt_config->endGroup();
142 156
143 qt_config->beginGroup("UI"); 157 qt_config->beginGroup("UI");
@@ -189,6 +203,7 @@ void Config::ReadValues() {
189 UISettings::values.show_status_bar = qt_config->value("showStatusBar", true).toBool(); 203 UISettings::values.show_status_bar = qt_config->value("showStatusBar", true).toBool();
190 UISettings::values.confirm_before_closing = qt_config->value("confirmClose", true).toBool(); 204 UISettings::values.confirm_before_closing = qt_config->value("confirmClose", true).toBool();
191 UISettings::values.first_start = qt_config->value("firstStart", true).toBool(); 205 UISettings::values.first_start = qt_config->value("firstStart", true).toBool();
206 UISettings::values.callout_flags = qt_config->value("calloutFlags", 0).toUInt();
192 207
193 qt_config->endGroup(); 208 qt_config->endGroup();
194} 209}
@@ -203,6 +218,8 @@ void Config::SaveValues() {
203 qt_config->setValue(QString::fromStdString(Settings::NativeAnalog::mapping[i]), 218 qt_config->setValue(QString::fromStdString(Settings::NativeAnalog::mapping[i]),
204 QString::fromStdString(Settings::values.analogs[i])); 219 QString::fromStdString(Settings::values.analogs[i]));
205 } 220 }
221 qt_config->setValue("motion_device", QString::fromStdString(Settings::values.motion_device));
222 qt_config->setValue("touch_device", QString::fromStdString(Settings::values.touch_device));
206 qt_config->endGroup(); 223 qt_config->endGroup();
207 224
208 qt_config->beginGroup("Core"); 225 qt_config->beginGroup("Core");
@@ -277,8 +294,13 @@ void Config::SaveValues() {
277 qt_config->endGroup(); 294 qt_config->endGroup();
278 295
279 qt_config->beginGroup("WebService"); 296 qt_config->beginGroup("WebService");
297 qt_config->setValue("enable_telemetry", Settings::values.enable_telemetry);
280 qt_config->setValue("telemetry_endpoint_url", 298 qt_config->setValue("telemetry_endpoint_url",
281 QString::fromStdString(Settings::values.telemetry_endpoint_url)); 299 QString::fromStdString(Settings::values.telemetry_endpoint_url));
300 qt_config->setValue("verify_endpoint_url",
301 QString::fromStdString(Settings::values.verify_endpoint_url));
302 qt_config->setValue("citra_username", QString::fromStdString(Settings::values.citra_username));
303 qt_config->setValue("citra_token", QString::fromStdString(Settings::values.citra_token));
282 qt_config->endGroup(); 304 qt_config->endGroup();
283 305
284 qt_config->beginGroup("UI"); 306 qt_config->beginGroup("UI");
@@ -314,6 +336,7 @@ void Config::SaveValues() {
314 qt_config->setValue("showStatusBar", UISettings::values.show_status_bar); 336 qt_config->setValue("showStatusBar", UISettings::values.show_status_bar);
315 qt_config->setValue("confirmClose", UISettings::values.confirm_before_closing); 337 qt_config->setValue("confirmClose", UISettings::values.confirm_before_closing);
316 qt_config->setValue("firstStart", UISettings::values.first_start); 338 qt_config->setValue("firstStart", UISettings::values.first_start);
339 qt_config->setValue("calloutFlags", UISettings::values.callout_flags);
317 340
318 qt_config->endGroup(); 341 qt_config->endGroup();
319} 342}
diff --git a/src/citra_qt/configuration/configure.ui b/src/citra_qt/configuration/configure.ui
index 85e206e42..6abd1917e 100644
--- a/src/citra_qt/configuration/configure.ui
+++ b/src/citra_qt/configuration/configure.ui
@@ -6,8 +6,8 @@
6 <rect> 6 <rect>
7 <x>0</x> 7 <x>0</x>
8 <y>0</y> 8 <y>0</y>
9 <width>441</width> 9 <width>740</width>
10 <height>501</height> 10 <height>500</height>
11 </rect> 11 </rect>
12 </property> 12 </property>
13 <property name="windowTitle"> 13 <property name="windowTitle">
@@ -49,6 +49,11 @@
49 <string>Debug</string> 49 <string>Debug</string>
50 </attribute> 50 </attribute>
51 </widget> 51 </widget>
52 <widget class="ConfigureWeb" name="webTab">
53 <attribute name="title">
54 <string>Web</string>
55 </attribute>
56 </widget>
52 </widget> 57 </widget>
53 </item> 58 </item>
54 <item> 59 <item>
@@ -97,6 +102,12 @@
97 <header>configuration/configure_graphics.h</header> 102 <header>configuration/configure_graphics.h</header>
98 <container>1</container> 103 <container>1</container>
99 </customwidget> 104 </customwidget>
105 <customwidget>
106 <class>ConfigureWeb</class>
107 <extends>QWidget</extends>
108 <header>configuration/configure_web.h</header>
109 <container>1</container>
110 </customwidget>
100 </customwidgets> 111 </customwidgets>
101 <resources/> 112 <resources/>
102 <connections> 113 <connections>
diff --git a/src/citra_qt/configuration/configure_dialog.cpp b/src/citra_qt/configuration/configure_dialog.cpp
index dfc8c03a7..b87dc0e6c 100644
--- a/src/citra_qt/configuration/configure_dialog.cpp
+++ b/src/citra_qt/configuration/configure_dialog.cpp
@@ -23,5 +23,6 @@ void ConfigureDialog::applyConfiguration() {
23 ui->graphicsTab->applyConfiguration(); 23 ui->graphicsTab->applyConfiguration();
24 ui->audioTab->applyConfiguration(); 24 ui->audioTab->applyConfiguration();
25 ui->debugTab->applyConfiguration(); 25 ui->debugTab->applyConfiguration();
26 ui->webTab->applyConfiguration();
26 Settings::Apply(); 27 Settings::Apply();
27} 28}
diff --git a/src/citra_qt/configuration/configure_graphics.ui b/src/citra_qt/configuration/configure_graphics.ui
index 228f2a869..5667b14b6 100644
--- a/src/citra_qt/configuration/configure_graphics.ui
+++ b/src/citra_qt/configuration/configure_graphics.ui
@@ -63,57 +63,57 @@
63 <widget class="QComboBox" name="resolution_factor_combobox"> 63 <widget class="QComboBox" name="resolution_factor_combobox">
64 <item> 64 <item>
65 <property name="text"> 65 <property name="text">
66 <string notr="true">Auto (Window Size)</string> 66 <string>Auto (Window Size)</string>
67 </property> 67 </property>
68 </item> 68 </item>
69 <item> 69 <item>
70 <property name="text"> 70 <property name="text">
71 <string notr="true">Native (400x240)</string> 71 <string>Native (400x240)</string>
72 </property> 72 </property>
73 </item> 73 </item>
74 <item> 74 <item>
75 <property name="text"> 75 <property name="text">
76 <string notr="true">2x Native (800x480)</string> 76 <string>2x Native (800x480)</string>
77 </property> 77 </property>
78 </item> 78 </item>
79 <item> 79 <item>
80 <property name="text"> 80 <property name="text">
81 <string notr="true">3x Native (1200x720)</string> 81 <string>3x Native (1200x720)</string>
82 </property> 82 </property>
83 </item> 83 </item>
84 <item> 84 <item>
85 <property name="text"> 85 <property name="text">
86 <string notr="true">4x Native (1600x960)</string> 86 <string>4x Native (1600x960)</string>
87 </property> 87 </property>
88 </item> 88 </item>
89 <item> 89 <item>
90 <property name="text"> 90 <property name="text">
91 <string notr="true">5x Native (2000x1200)</string> 91 <string>5x Native (2000x1200)</string>
92 </property> 92 </property>
93 </item> 93 </item>
94 <item> 94 <item>
95 <property name="text"> 95 <property name="text">
96 <string notr="true">6x Native (2400x1440)</string> 96 <string>6x Native (2400x1440)</string>
97 </property> 97 </property>
98 </item> 98 </item>
99 <item> 99 <item>
100 <property name="text"> 100 <property name="text">
101 <string notr="true">7x Native (2800x1680)</string> 101 <string>7x Native (2800x1680)</string>
102 </property> 102 </property>
103 </item> 103 </item>
104 <item> 104 <item>
105 <property name="text"> 105 <property name="text">
106 <string notr="true">8x Native (3200x1920)</string> 106 <string>8x Native (3200x1920)</string>
107 </property> 107 </property>
108 </item> 108 </item>
109 <item> 109 <item>
110 <property name="text"> 110 <property name="text">
111 <string notr="true">9x Native (3600x2160)</string> 111 <string>9x Native (3600x2160)</string>
112 </property> 112 </property>
113 </item> 113 </item>
114 <item> 114 <item>
115 <property name="text"> 115 <property name="text">
116 <string notr="true">10x Native (4000x2400)</string> 116 <string>10x Native (4000x2400)</string>
117 </property> 117 </property>
118 </item> 118 </item>
119 </widget> 119 </widget>
@@ -146,17 +146,22 @@
146 <widget class="QComboBox" name="layout_combobox"> 146 <widget class="QComboBox" name="layout_combobox">
147 <item> 147 <item>
148 <property name="text"> 148 <property name="text">
149 <string notr="true">Default</string> 149 <string>Default</string>
150 </property> 150 </property>
151 </item> 151 </item>
152 <item> 152 <item>
153 <property name="text"> 153 <property name="text">
154 <string notr="true">Single Screen</string> 154 <string>Single Screen</string>
155 </property> 155 </property>
156 </item> 156 </item>
157 <item> 157 <item>
158 <property name="text"> 158 <property name="text">
159 <string notr="true">Large Screen</string> 159 <string>Large Screen</string>
160 </property>
161 </item>
162 <item>
163 <property name="text">
164 <string>Side by Side</string>
160 </property> 165 </property>
161 </item> 166 </item>
162 </widget> 167 </widget>
diff --git a/src/citra_qt/configuration/configure_system.cpp b/src/citra_qt/configuration/configure_system.cpp
index 9b1e6711d..88a067c12 100644
--- a/src/citra_qt/configuration/configure_system.cpp
+++ b/src/citra_qt/configuration/configure_system.cpp
@@ -78,7 +78,8 @@ void ConfigureSystem::ReadSystemSettings() {
78 78
79 // set the console id 79 // set the console id
80 u64 console_id = Service::CFG::GetConsoleUniqueId(); 80 u64 console_id = Service::CFG::GetConsoleUniqueId();
81 ui->label_console_id->setText("Console ID: 0x" + QString::number(console_id, 16).toUpper()); 81 ui->label_console_id->setText(
82 tr("Console ID: 0x%1").arg(QString::number(console_id, 16).toUpper()));
82} 83}
83 84
84void ConfigureSystem::applyConfiguration() { 85void ConfigureSystem::applyConfiguration() {
diff --git a/src/citra_qt/configuration/configure_web.cpp b/src/citra_qt/configuration/configure_web.cpp
new file mode 100644
index 000000000..bf8c21ac7
--- /dev/null
+++ b/src/citra_qt/configuration/configure_web.cpp
@@ -0,0 +1,102 @@
1// Copyright 2017 Citra Emulator Project
2// Licensed under GPLv2 or any later version
3// Refer to the license.txt file included.
4
5#include <QMessageBox>
6#include "citra_qt/configuration/configure_web.h"
7#include "core/settings.h"
8#include "core/telemetry_session.h"
9#include "ui_configure_web.h"
10
11ConfigureWeb::ConfigureWeb(QWidget* parent)
12 : QWidget(parent), ui(std::make_unique<Ui::ConfigureWeb>()) {
13 ui->setupUi(this);
14 connect(ui->button_regenerate_telemetry_id, &QPushButton::clicked, this,
15 &ConfigureWeb::RefreshTelemetryID);
16 connect(ui->button_verify_login, &QPushButton::clicked, this, &ConfigureWeb::VerifyLogin);
17 connect(this, &ConfigureWeb::LoginVerified, this, &ConfigureWeb::OnLoginVerified);
18
19 this->setConfiguration();
20}
21
22ConfigureWeb::~ConfigureWeb() {}
23
24void ConfigureWeb::setConfiguration() {
25 ui->web_credentials_disclaimer->setWordWrap(true);
26 ui->telemetry_learn_more->setOpenExternalLinks(true);
27 ui->telemetry_learn_more->setText(tr("<a "
28 "href='https://citra-emu.org/entry/"
29 "telemetry-and-why-thats-a-good-thing/'>Learn more</a>"));
30
31 ui->web_signup_link->setOpenExternalLinks(true);
32 ui->web_signup_link->setText(tr("<a href='https://services.citra-emu.org/'>Sign up</a>"));
33 ui->web_token_info_link->setOpenExternalLinks(true);
34 ui->web_token_info_link->setText(
35 tr("<a href='https://citra-emu.org/wiki/citra-web-service/'>What is my token?</a>"));
36
37 ui->toggle_telemetry->setChecked(Settings::values.enable_telemetry);
38 ui->edit_username->setText(QString::fromStdString(Settings::values.citra_username));
39 ui->edit_token->setText(QString::fromStdString(Settings::values.citra_token));
40 // Connect after setting the values, to avoid calling OnLoginChanged now
41 connect(ui->edit_token, &QLineEdit::textChanged, this, &ConfigureWeb::OnLoginChanged);
42 connect(ui->edit_username, &QLineEdit::textChanged, this, &ConfigureWeb::OnLoginChanged);
43 ui->label_telemetry_id->setText(
44 tr("Telemetry ID: 0x%1").arg(QString::number(Core::GetTelemetryId(), 16).toUpper()));
45 user_verified = true;
46}
47
48void ConfigureWeb::applyConfiguration() {
49 Settings::values.enable_telemetry = ui->toggle_telemetry->isChecked();
50 if (user_verified) {
51 Settings::values.citra_username = ui->edit_username->text().toStdString();
52 Settings::values.citra_token = ui->edit_token->text().toStdString();
53 } else {
54 QMessageBox::warning(this, tr("Username and token not verfied"),
55 tr("Username and token were not verified. The changes to your "
56 "username and/or token have not been saved."));
57 }
58 Settings::Apply();
59}
60
61void ConfigureWeb::RefreshTelemetryID() {
62 const u64 new_telemetry_id{Core::RegenerateTelemetryId()};
63 ui->label_telemetry_id->setText(
64 tr("Telemetry ID: 0x%1").arg(QString::number(new_telemetry_id, 16).toUpper()));
65}
66
67void ConfigureWeb::OnLoginChanged() {
68 if (ui->edit_username->text().isEmpty() && ui->edit_token->text().isEmpty()) {
69 user_verified = true;
70 ui->label_username_verified->setPixmap(QPixmap(":/icons/checked.png"));
71 ui->label_token_verified->setPixmap(QPixmap(":/icons/checked.png"));
72 } else {
73 user_verified = false;
74 ui->label_username_verified->setPixmap(QPixmap(":/icons/failed.png"));
75 ui->label_token_verified->setPixmap(QPixmap(":/icons/failed.png"));
76 }
77}
78
79void ConfigureWeb::VerifyLogin() {
80 verified =
81 Core::VerifyLogin(ui->edit_username->text().toStdString(),
82 ui->edit_token->text().toStdString(), [&]() { emit LoginVerified(); });
83 ui->button_verify_login->setDisabled(true);
84 ui->button_verify_login->setText(tr("Verifying"));
85}
86
87void ConfigureWeb::OnLoginVerified() {
88 ui->button_verify_login->setEnabled(true);
89 ui->button_verify_login->setText(tr("Verify"));
90 if (verified.get()) {
91 user_verified = true;
92 ui->label_username_verified->setPixmap(QPixmap(":/icons/checked.png"));
93 ui->label_token_verified->setPixmap(QPixmap(":/icons/checked.png"));
94 } else {
95 ui->label_username_verified->setPixmap(QPixmap(":/icons/failed.png"));
96 ui->label_token_verified->setPixmap(QPixmap(":/icons/failed.png"));
97 QMessageBox::critical(
98 this, tr("Verification failed"),
99 tr("Verification failed. Check that you have entered your username and token "
100 "correctly, and that your internet connection is working."));
101 }
102}
diff --git a/src/citra_qt/configuration/configure_web.h b/src/citra_qt/configuration/configure_web.h
new file mode 100644
index 000000000..ad2d58f6e
--- /dev/null
+++ b/src/citra_qt/configuration/configure_web.h
@@ -0,0 +1,40 @@
1// Copyright 2017 Citra Emulator Project
2// Licensed under GPLv2 or any later version
3// Refer to the license.txt file included.
4
5#pragma once
6
7#include <future>
8#include <memory>
9#include <QWidget>
10
11namespace Ui {
12class ConfigureWeb;
13}
14
15class ConfigureWeb : public QWidget {
16 Q_OBJECT
17
18public:
19 explicit ConfigureWeb(QWidget* parent = nullptr);
20 ~ConfigureWeb();
21
22 void applyConfiguration();
23
24public slots:
25 void RefreshTelemetryID();
26 void OnLoginChanged();
27 void VerifyLogin();
28 void OnLoginVerified();
29
30signals:
31 void LoginVerified();
32
33private:
34 void setConfiguration();
35
36 bool user_verified = true;
37 std::future<bool> verified;
38
39 std::unique_ptr<Ui::ConfigureWeb> ui;
40};
diff --git a/src/citra_qt/configuration/configure_web.ui b/src/citra_qt/configuration/configure_web.ui
new file mode 100644
index 000000000..dd996ab62
--- /dev/null
+++ b/src/citra_qt/configuration/configure_web.ui
@@ -0,0 +1,190 @@
1<?xml version="1.0" encoding="UTF-8"?>
2<ui version="4.0">
3 <class>ConfigureWeb</class>
4 <widget class="QWidget" name="ConfigureWeb">
5 <property name="geometry">
6 <rect>
7 <x>0</x>
8 <y>0</y>
9 <width>926</width>
10 <height>561</height>
11 </rect>
12 </property>
13 <property name="windowTitle">
14 <string>Form</string>
15 </property>
16 <layout class="QVBoxLayout" name="verticalLayout">
17 <item>
18 <layout class="QVBoxLayout" name="verticalLayout_3">
19 <item>
20 <widget class="QGroupBox" name="groupBoxWebConfig">
21 <property name="title">
22 <string>Citra Web Service</string>
23 </property>
24 <layout class="QVBoxLayout" name="verticalLayoutCitraWebService">
25 <item>
26 <widget class="QLabel" name="web_credentials_disclaimer">
27 <property name="text">
28 <string>By providing your username and token, you agree to allow Citra to collect additional usage data, which may include user identifying information.</string>
29 </property>
30 </widget>
31 </item>
32 <item>
33 <layout class="QGridLayout" name="gridLayoutCitraUsername">
34 <item row="2" column="3">
35 <widget class="QPushButton" name="button_verify_login">
36 <property name="sizePolicy">
37 <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
38 <horstretch>0</horstretch>
39 <verstretch>0</verstretch>
40 </sizepolicy>
41 </property>
42 <property name="layoutDirection">
43 <enum>Qt::RightToLeft</enum>
44 </property>
45 <property name="text">
46 <string>Verify</string>
47 </property>
48 </widget>
49 </item>
50 <item row="2" column="0">
51 <widget class="QLabel" name="web_signup_link">
52 <property name="text">
53 <string>Sign up</string>
54 </property>
55 </widget>
56 </item>
57 <item row="0" column="1" colspan="3">
58 <widget class="QLineEdit" name="edit_username">
59 <property name="maxLength">
60 <number>36</number>
61 </property>
62 </widget>
63 </item>
64 <item row="1" column="0">
65 <widget class="QLabel" name="label_token">
66 <property name="text">
67 <string>Token: </string>
68 </property>
69 </widget>
70 </item>
71 <item row="1" column="4">
72 <widget class="QLabel" name="label_token_verified">
73 </widget>
74 </item>
75 <item row="0" column="0">
76 <widget class="QLabel" name="label_username">
77 <property name="text">
78 <string>Username: </string>
79 </property>
80 </widget>
81 </item>
82 <item row="0" column="4">
83 <widget class="QLabel" name="label_username_verified">
84 </widget>
85 </item>
86 <item row="1" column="1" colspan="3">
87 <widget class="QLineEdit" name="edit_token">
88 <property name="maxLength">
89 <number>36</number>
90 </property>
91 <property name="echoMode">
92 <enum>QLineEdit::Password</enum>
93 </property>
94 </widget>
95 </item>
96 <item row="2" column="1">
97 <widget class="QLabel" name="web_token_info_link">
98 <property name="text">
99 <string>What is my token?</string>
100 </property>
101 </widget>
102 </item>
103 <item row="2" column="2">
104 <spacer name="horizontalSpacer">
105 <property name="orientation">
106 <enum>Qt::Horizontal</enum>
107 </property>
108 <property name="sizeHint" stdset="0">
109 <size>
110 <width>40</width>
111 <height>20</height>
112 </size>
113 </property>
114 </spacer>
115 </item>
116 </layout>
117 </item>
118 </layout>
119 </widget>
120 </item>
121 <item>
122 <widget class="QGroupBox" name="groupBox">
123 <property name="title">
124 <string>Telemetry</string>
125 </property>
126 <layout class="QVBoxLayout" name="verticalLayout_2">
127 <item>
128 <widget class="QCheckBox" name="toggle_telemetry">
129 <property name="text">
130 <string>Share anonymous usage data with the Citra team</string>
131 </property>
132 </widget>
133 </item>
134 <item>
135 <widget class="QLabel" name="telemetry_learn_more">
136 <property name="text">
137 <string>Learn more</string>
138 </property>
139 </widget>
140 </item>
141 <item>
142 <layout class="QGridLayout" name="gridLayoutTelemetryId">
143 <item row="0" column="0">
144 <widget class="QLabel" name="label_telemetry_id">
145 <property name="text">
146 <string>Telemetry ID:</string>
147 </property>
148 </widget>
149 </item>
150 <item row="0" column="1">
151 <widget class="QPushButton" name="button_regenerate_telemetry_id">
152 <property name="sizePolicy">
153 <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
154 <horstretch>0</horstretch>
155 <verstretch>0</verstretch>
156 </sizepolicy>
157 </property>
158 <property name="layoutDirection">
159 <enum>Qt::RightToLeft</enum>
160 </property>
161 <property name="text">
162 <string>Regenerate</string>
163 </property>
164 </widget>
165 </item>
166 </layout>
167 </item>
168 </layout>
169 </widget>
170 </item>
171 </layout>
172 </item>
173 <item>
174 <spacer name="verticalSpacer">
175 <property name="orientation">
176 <enum>Qt::Vertical</enum>
177 </property>
178 <property name="sizeHint" stdset="0">
179 <size>
180 <width>20</width>
181 <height>40</height>
182 </size>
183 </property>
184 </spacer>
185 </item>
186 </layout>
187 </widget>
188 <resources/>
189 <connections/>
190</ui>
diff --git a/src/citra_qt/debugger/graphics/graphics_cmdlists.cpp b/src/citra_qt/debugger/graphics/graphics_cmdlists.cpp
index 7d06ec28a..ce2b9fa50 100644
--- a/src/citra_qt/debugger/graphics/graphics_cmdlists.cpp
+++ b/src/citra_qt/debugger/graphics/graphics_cmdlists.cpp
@@ -26,8 +26,8 @@
26namespace { 26namespace {
27QImage LoadTexture(const u8* src, const Pica::Texture::TextureInfo& info) { 27QImage LoadTexture(const u8* src, const Pica::Texture::TextureInfo& info) {
28 QImage decoded_image(info.width, info.height, QImage::Format_ARGB32); 28 QImage decoded_image(info.width, info.height, QImage::Format_ARGB32);
29 for (int y = 0; y < info.height; ++y) { 29 for (u32 y = 0; y < info.height; ++y) {
30 for (int x = 0; x < info.width; ++x) { 30 for (u32 x = 0; x < info.width; ++x) {
31 Math::Vec4<u8> color = Pica::Texture::LookupTexture(src, x, y, info, true); 31 Math::Vec4<u8> color = Pica::Texture::LookupTexture(src, x, y, info, true);
32 decoded_image.setPixel(x, y, qRgba(color.r(), color.g(), color.b(), color.a())); 32 decoded_image.setPixel(x, y, qRgba(color.r(), color.g(), color.b(), color.a()));
33 } 33 }
diff --git a/src/citra_qt/debugger/graphics/graphics_surface.cpp b/src/citra_qt/debugger/graphics/graphics_surface.cpp
index 47d9924e1..c974545ef 100644
--- a/src/citra_qt/debugger/graphics/graphics_surface.cpp
+++ b/src/citra_qt/debugger/graphics/graphics_surface.cpp
@@ -273,7 +273,8 @@ void GraphicsSurfaceWidget::Pick(int x, int y) {
273 surface_picker_x_control->setValue(x); 273 surface_picker_x_control->setValue(x);
274 surface_picker_y_control->setValue(y); 274 surface_picker_y_control->setValue(y);
275 275
276 if (x < 0 || x >= surface_width || y < 0 || y >= surface_height) { 276 if (x < 0 || x >= static_cast<int>(surface_width) || y < 0 ||
277 y >= static_cast<int>(surface_height)) {
277 surface_info_label->setText(tr("Pixel out of bounds")); 278 surface_info_label->setText(tr("Pixel out of bounds"));
278 surface_info_label->setAlignment(Qt::AlignLeft | Qt::AlignVCenter); 279 surface_info_label->setAlignment(Qt::AlignLeft | Qt::AlignVCenter);
279 return; 280 return;
diff --git a/src/citra_qt/debugger/graphics/graphics_vertex_shader.cpp b/src/citra_qt/debugger/graphics/graphics_vertex_shader.cpp
index e3f3194db..7f4ec0c52 100644
--- a/src/citra_qt/debugger/graphics/graphics_vertex_shader.cpp
+++ b/src/citra_qt/debugger/graphics/graphics_vertex_shader.cpp
@@ -183,23 +183,13 @@ QVariant GraphicsVertexShaderModel::data(const QModelIndex& index, int role) con
183 print_input(output, src1, swizzle.negate_src1, 183 print_input(output, src1, swizzle.negate_src1,
184 SelectorToString(swizzle.src1_selector)); 184 SelectorToString(swizzle.src1_selector));
185 AlignToColumn(kInputOperandColumnWidth); 185 AlignToColumn(kInputOperandColumnWidth);
186 if (src_is_inverted) { 186 print_input(output, src2, swizzle.negate_src2,
187 print_input(output, src2, swizzle.negate_src2, 187 SelectorToString(swizzle.src2_selector), true,
188 SelectorToString(swizzle.src2_selector)); 188 src_is_inverted ? "" : instr.mad.AddressRegisterName());
189 } else {
190 print_input(output, src2, swizzle.negate_src2,
191 SelectorToString(swizzle.src2_selector), true,
192 instr.mad.AddressRegisterName());
193 }
194 AlignToColumn(kInputOperandColumnWidth); 189 AlignToColumn(kInputOperandColumnWidth);
195 if (src_is_inverted) { 190 print_input(output, src3, swizzle.negate_src3,
196 print_input(output, src3, swizzle.negate_src3, 191 SelectorToString(swizzle.src3_selector), true,
197 SelectorToString(swizzle.src3_selector), true, 192 src_is_inverted ? instr.mad.AddressRegisterName() : "");
198 instr.mad.AddressRegisterName());
199 } else {
200 print_input(output, src3, swizzle.negate_src3,
201 SelectorToString(swizzle.src3_selector));
202 }
203 AlignToColumn(kInputOperandColumnWidth); 193 AlignToColumn(kInputOperandColumnWidth);
204 break; 194 break;
205 } 195 }
@@ -222,16 +212,15 @@ QVariant GraphicsVertexShaderModel::data(const QModelIndex& index, int role) con
222 SourceRegister src1 = instr.common.GetSrc1(src_is_inverted); 212 SourceRegister src1 = instr.common.GetSrc1(src_is_inverted);
223 print_input(output, src1, swizzle.negate_src1, 213 print_input(output, src1, swizzle.negate_src1,
224 swizzle.SelectorToString(false), true, 214 swizzle.SelectorToString(false), true,
225 instr.common.AddressRegisterName()); 215 src_is_inverted ? "" : instr.common.AddressRegisterName());
226 AlignToColumn(kInputOperandColumnWidth); 216 AlignToColumn(kInputOperandColumnWidth);
227 } 217 }
228 218
229 // TODO: In some cases, the Address Register is used as an index for SRC2
230 // instead of SRC1
231 if (opcode_info.subtype & OpCode::Info::Src2) { 219 if (opcode_info.subtype & OpCode::Info::Src2) {
232 SourceRegister src2 = instr.common.GetSrc2(src_is_inverted); 220 SourceRegister src2 = instr.common.GetSrc2(src_is_inverted);
233 print_input(output, src2, swizzle.negate_src2, 221 print_input(output, src2, swizzle.negate_src2,
234 swizzle.SelectorToString(true)); 222 swizzle.SelectorToString(true), true,
223 src_is_inverted ? instr.common.AddressRegisterName() : "");
235 AlignToColumn(kInputOperandColumnWidth); 224 AlignToColumn(kInputOperandColumnWidth);
236 } 225 }
237 break; 226 break;
@@ -247,7 +236,9 @@ QVariant GraphicsVertexShaderModel::data(const QModelIndex& index, int role) con
247 236
248 switch (opcode.EffectiveOpCode()) { 237 switch (opcode.EffectiveOpCode()) {
249 case OpCode::Id::LOOP: 238 case OpCode::Id::LOOP:
250 output << "(unknown instruction format)"; 239 output << 'i' << instr.flow_control.int_uniform_id << " (end on 0x"
240 << std::setw(4) << std::right << std::setfill('0') << std::hex
241 << (4 * instr.flow_control.dest_offset) << ")";
251 break; 242 break;
252 243
253 default: 244 default:
@@ -255,7 +246,7 @@ QVariant GraphicsVertexShaderModel::data(const QModelIndex& index, int role) con
255 output << '('; 246 output << '(';
256 247
257 if (instr.flow_control.op != instr.flow_control.JustY) { 248 if (instr.flow_control.op != instr.flow_control.JustY) {
258 if (instr.flow_control.refx) 249 if (!instr.flow_control.refx)
259 output << '!'; 250 output << '!';
260 output << "cc.x"; 251 output << "cc.x";
261 } 252 }
@@ -267,13 +258,17 @@ QVariant GraphicsVertexShaderModel::data(const QModelIndex& index, int role) con
267 } 258 }
268 259
269 if (instr.flow_control.op != instr.flow_control.JustX) { 260 if (instr.flow_control.op != instr.flow_control.JustX) {
270 if (instr.flow_control.refy) 261 if (!instr.flow_control.refy)
271 output << '!'; 262 output << '!';
272 output << "cc.y"; 263 output << "cc.y";
273 } 264 }
274 265
275 output << ") "; 266 output << ") ";
276 } else if (opcode_info.subtype & OpCode::Info::HasUniformIndex) { 267 } else if (opcode_info.subtype & OpCode::Info::HasUniformIndex) {
268 if (opcode.EffectiveOpCode() == OpCode::Id::JMPU &&
269 (instr.flow_control.num_instructions & 1) == 1) {
270 output << '!';
271 }
277 output << 'b' << instr.flow_control.bool_uniform_id << ' '; 272 output << 'b' << instr.flow_control.bool_uniform_id << ' ';
278 } 273 }
279 274
diff --git a/src/citra_qt/main.cpp b/src/citra_qt/main.cpp
index 02bfdca3d..8adbcfe86 100644
--- a/src/citra_qt/main.cpp
+++ b/src/citra_qt/main.cpp
@@ -48,6 +48,47 @@
48Q_IMPORT_PLUGIN(QWindowsIntegrationPlugin); 48Q_IMPORT_PLUGIN(QWindowsIntegrationPlugin);
49#endif 49#endif
50 50
51/**
52 * "Callouts" are one-time instructional messages shown to the user. In the config settings, there
53 * is a bitfield "callout_flags" options, used to track if a message has already been shown to the
54 * user. This is 32-bits - if we have more than 32 callouts, we should retire and recyle old ones.
55 */
56enum class CalloutFlag : uint32_t {
57 Telemetry = 0x1,
58};
59
60static void ShowCalloutMessage(const QString& message, CalloutFlag flag) {
61 if (UISettings::values.callout_flags & static_cast<uint32_t>(flag)) {
62 return;
63 }
64
65 UISettings::values.callout_flags |= static_cast<uint32_t>(flag);
66
67 QMessageBox msg;
68 msg.setText(message);
69 msg.setStandardButtons(QMessageBox::Ok);
70 msg.setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
71 msg.setStyleSheet("QLabel{min-width: 900px;}");
72 msg.exec();
73}
74
75void GMainWindow::ShowCallouts() {
76 static const QString telemetry_message =
77 tr("To help improve Citra, the Citra Team collects anonymous usage data. No private or "
78 "personally identifying information is collected. This data helps us to understand how "
79 "people use Citra and prioritize our efforts. Furthermore, it helps us to more easily "
80 "identify emulation bugs and performance issues. This data includes:<ul><li>Information"
81 " about the version of Citra you are using</li><li>Performance data about the games you "
82 "play</li><li>Your configuration settings</li><li>Information about your computer "
83 "hardware</li><li>Emulation errors and crash information</li></ul>By default, this "
84 "feature is enabled. To disable this feature, click 'Emulation' from the menu and then "
85 "select 'Configure...'. Then, on the 'Web' tab, uncheck 'Share anonymous usage data with"
86 " the Citra team'. <br/><br/>By using this software, you agree to the above terms.<br/>"
87 "<br/><a href='https://citra-emu.org/entry/telemetry-and-why-thats-a-good-thing/'>Learn "
88 "more</a>");
89 ShowCalloutMessage(telemetry_message, CalloutFlag::Telemetry);
90}
91
51GMainWindow::GMainWindow() : config(new Config()), emu_thread(nullptr) { 92GMainWindow::GMainWindow() : config(new Config()), emu_thread(nullptr) {
52 Pica::g_debug_context = Pica::DebugContext::Construct(); 93 Pica::g_debug_context = Pica::DebugContext::Construct();
53 setAcceptDrops(true); 94 setAcceptDrops(true);
@@ -73,6 +114,9 @@ GMainWindow::GMainWindow() : config(new Config()), emu_thread(nullptr) {
73 114
74 UpdateUITheme(); 115 UpdateUITheme();
75 116
117 // Show one-time "callout" messages to the user
118 ShowCallouts();
119
76 QStringList args = QApplication::arguments(); 120 QStringList args = QApplication::arguments();
77 if (args.length() >= 2) { 121 if (args.length() >= 2) {
78 BootGame(args[1]); 122 BootGame(args[1]);
@@ -311,7 +355,7 @@ bool GMainWindow::LoadROM(const QString& filename) {
311 355
312 if (!gladLoadGL()) { 356 if (!gladLoadGL()) {
313 QMessageBox::critical(this, tr("Error while initializing OpenGL 3.3 Core!"), 357 QMessageBox::critical(this, tr("Error while initializing OpenGL 3.3 Core!"),
314 tr("Your GPU may not support OpenGL 3.3, or you do not" 358 tr("Your GPU may not support OpenGL 3.3, or you do not "
315 "have the latest graphics driver.")); 359 "have the latest graphics driver."));
316 return false; 360 return false;
317 } 361 }
@@ -320,6 +364,8 @@ bool GMainWindow::LoadROM(const QString& filename) {
320 364
321 const Core::System::ResultStatus result{system.Load(render_window, filename.toStdString())}; 365 const Core::System::ResultStatus result{system.Load(render_window, filename.toStdString())};
322 366
367 Core::Telemetry().AddField(Telemetry::FieldType::App, "Frontend", "Qt");
368
323 if (result != Core::System::ResultStatus::Success) { 369 if (result != Core::System::ResultStatus::Success) {
324 switch (result) { 370 switch (result) {
325 case Core::System::ResultStatus::ErrorGetLoader: 371 case Core::System::ResultStatus::ErrorGetLoader:
diff --git a/src/citra_qt/main.h b/src/citra_qt/main.h
index 360de2ced..d59a6d67d 100644
--- a/src/citra_qt/main.h
+++ b/src/citra_qt/main.h
@@ -80,6 +80,8 @@ private:
80 void BootGame(const QString& filename); 80 void BootGame(const QString& filename);
81 void ShutdownGame(); 81 void ShutdownGame();
82 82
83 void ShowCallouts();
84
83 /** 85 /**
84 * Stores the filename in the recently loaded files list. 86 * Stores the filename in the recently loaded files list.
85 * The new filename is stored at the beginning of the recently loaded files list. 87 * The new filename is stored at the beginning of the recently loaded files list.
diff --git a/src/citra_qt/ui_settings.h b/src/citra_qt/ui_settings.h
index 025c73f84..d85c92765 100644
--- a/src/citra_qt/ui_settings.h
+++ b/src/citra_qt/ui_settings.h
@@ -48,6 +48,8 @@ struct Values {
48 48
49 // Shortcut name <Shortcut, context> 49 // Shortcut name <Shortcut, context>
50 std::vector<Shortcut> shortcuts; 50 std::vector<Shortcut> shortcuts;
51
52 uint32_t callout_flags;
51}; 53};
52 54
53extern Values values; 55extern Values values;
diff --git a/src/common/common_types.h b/src/common/common_types.h
index e8f7ac6be..844d34965 100644
--- a/src/common/common_types.h
+++ b/src/common/common_types.h
@@ -24,6 +24,7 @@
24 24
25#pragma once 25#pragma once
26 26
27#include <array>
27#include <cstdint> 28#include <cstdint>
28 29
29#ifdef _MSC_VER 30#ifdef _MSC_VER
@@ -50,6 +51,9 @@ typedef double f64; ///< 64-bit floating point
50typedef u64 VAddr; ///< Represents a pointer in the userspace virtual address space. 51typedef u64 VAddr; ///< Represents a pointer in the userspace virtual address space.
51typedef u64 PAddr; ///< Represents a pointer in the ARM11 physical address space. 52typedef u64 PAddr; ///< Represents a pointer in the ARM11 physical address space.
52 53
54using u128 = std::array<std::uint64_t, 2>;
55static_assert(sizeof(u128) == 16, "u128 must be 128 bits wide");
56
53// An inheritable class to disallow the copy constructor and operator= functions 57// An inheritable class to disallow the copy constructor and operator= functions
54class NonCopyable { 58class NonCopyable {
55protected: 59protected:
diff --git a/src/common/quaternion.h b/src/common/quaternion.h
index 84ac82ed3..77f626bcb 100644
--- a/src/common/quaternion.h
+++ b/src/common/quaternion.h
@@ -30,6 +30,11 @@ public:
30 return {xyz * other.w + other.xyz * w + Cross(xyz, other.xyz), 30 return {xyz * other.w + other.xyz * w + Cross(xyz, other.xyz),
31 w * other.w - Dot(xyz, other.xyz)}; 31 w * other.w - Dot(xyz, other.xyz)};
32 } 32 }
33
34 Quaternion<T> Normalized() const {
35 T length = std::sqrt(xyz.Length2() + w * w);
36 return {xyz / length, w / length};
37 }
33}; 38};
34 39
35template <typename T> 40template <typename T>
diff --git a/src/common/scm_rev.cpp.in b/src/common/scm_rev.cpp.in
index 0080db5d5..4083095d5 100644
--- a/src/common/scm_rev.cpp.in
+++ b/src/common/scm_rev.cpp.in
@@ -8,6 +8,7 @@
8#define GIT_BRANCH "@GIT_BRANCH@" 8#define GIT_BRANCH "@GIT_BRANCH@"
9#define GIT_DESC "@GIT_DESC@" 9#define GIT_DESC "@GIT_DESC@"
10#define BUILD_NAME "@REPO_NAME@" 10#define BUILD_NAME "@REPO_NAME@"
11#define BUILD_DATE "@BUILD_DATE@"
11 12
12namespace Common { 13namespace Common {
13 14
@@ -15,6 +16,7 @@ const char g_scm_rev[] = GIT_REV;
15const char g_scm_branch[] = GIT_BRANCH; 16const char g_scm_branch[] = GIT_BRANCH;
16const char g_scm_desc[] = GIT_DESC; 17const char g_scm_desc[] = GIT_DESC;
17const char g_build_name[] = BUILD_NAME; 18const char g_build_name[] = BUILD_NAME;
19const char g_build_date[] = BUILD_DATE;
18 20
19} // namespace 21} // namespace
20 22
diff --git a/src/common/scm_rev.h b/src/common/scm_rev.h
index e22389803..18aaa1735 100644
--- a/src/common/scm_rev.h
+++ b/src/common/scm_rev.h
@@ -10,5 +10,6 @@ extern const char g_scm_rev[];
10extern const char g_scm_branch[]; 10extern const char g_scm_branch[];
11extern const char g_scm_desc[]; 11extern const char g_scm_desc[];
12extern const char g_build_name[]; 12extern const char g_build_name[];
13extern const char g_build_date[];
13 14
14} // namespace 15} // namespace
diff --git a/src/common/string_util.cpp b/src/common/string_util.cpp
index bad311793..6959915fa 100644
--- a/src/common/string_util.cpp
+++ b/src/common/string_util.cpp
@@ -117,7 +117,7 @@ std::string StringFromFormat(const char* format, ...) {
117} 117}
118 118
119// For Debugging. Read out an u8 array. 119// For Debugging. Read out an u8 array.
120std::string ArrayToString(const u8* data, u32 size, int line_len, bool spaces) { 120std::string ArrayToString(const u8* data, size_t size, int line_len, bool spaces) {
121 std::ostringstream oss; 121 std::ostringstream oss;
122 oss << std::setfill('0') << std::hex; 122 oss << std::setfill('0') << std::hex;
123 123
diff --git a/src/common/string_util.h b/src/common/string_util.h
index 075bf4ecb..259360aec 100644
--- a/src/common/string_util.h
+++ b/src/common/string_util.h
@@ -33,7 +33,7 @@ inline void CharArrayFromFormat(char (&out)[Count], const char* format, ...) {
33} 33}
34 34
35// Good 35// Good
36std::string ArrayToString(const u8* data, u32 size, int line_len = 20, bool spaces = true); 36std::string ArrayToString(const u8* data, size_t size, int line_len = 20, bool spaces = true);
37 37
38std::string StripSpaces(const std::string& s); 38std::string StripSpaces(const std::string& s);
39std::string StripQuotes(const std::string& s); 39std::string StripQuotes(const std::string& s);
diff --git a/src/common/vector_math.h b/src/common/vector_math.h
index c7a461a1e..3f0057d9e 100644
--- a/src/common/vector_math.h
+++ b/src/common/vector_math.h
@@ -90,8 +90,9 @@ public:
90 x -= other.x; 90 x -= other.x;
91 y -= other.y; 91 y -= other.y;
92 } 92 }
93 template <typename Q = T, class = typename std::enable_if<std::is_signed<Q>::value>::type> 93
94 Vec2<decltype(-T{})> operator-() const { 94 template <typename U = T>
95 Vec2<std::enable_if_t<std::is_signed<U>::value, U>> operator-() const {
95 return MakeVec(-x, -y); 96 return MakeVec(-x, -y);
96 } 97 }
97 Vec2<decltype(T{} * T{})> operator*(const Vec2& other) const { 98 Vec2<decltype(T{} * T{})> operator*(const Vec2& other) const {
@@ -103,8 +104,7 @@ public:
103 } 104 }
104 template <typename V> 105 template <typename V>
105 void operator*=(const V& f) { 106 void operator*=(const V& f) {
106 x *= f; 107 *this = *this * f;
107 y *= f;
108 } 108 }
109 template <typename V> 109 template <typename V>
110 Vec2<decltype(T{} / V{})> operator/(const V& f) const { 110 Vec2<decltype(T{} / V{})> operator/(const V& f) const {
@@ -247,8 +247,9 @@ public:
247 y -= other.y; 247 y -= other.y;
248 z -= other.z; 248 z -= other.z;
249 } 249 }
250 template <typename Q = T, class = typename std::enable_if<std::is_signed<Q>::value>::type> 250
251 Vec3<decltype(-T{})> operator-() const { 251 template <typename U = T>
252 Vec3<std::enable_if_t<std::is_signed<U>::value, U>> operator-() const {
252 return MakeVec(-x, -y, -z); 253 return MakeVec(-x, -y, -z);
253 } 254 }
254 Vec3<decltype(T{} * T{})> operator*(const Vec3& other) const { 255 Vec3<decltype(T{} * T{})> operator*(const Vec3& other) const {
@@ -260,9 +261,7 @@ public:
260 } 261 }
261 template <typename V> 262 template <typename V>
262 void operator*=(const V& f) { 263 void operator*=(const V& f) {
263 x *= f; 264 *this = *this * f;
264 y *= f;
265 z *= f;
266 } 265 }
267 template <typename V> 266 template <typename V>
268 Vec3<decltype(T{} / V{})> operator/(const V& f) const { 267 Vec3<decltype(T{} / V{})> operator/(const V& f) const {
@@ -462,8 +461,9 @@ public:
462 z -= other.z; 461 z -= other.z;
463 w -= other.w; 462 w -= other.w;
464 } 463 }
465 template <typename Q = T, class = typename std::enable_if<std::is_signed<Q>::value>::type> 464
466 Vec4<decltype(-T{})> operator-() const { 465 template <typename U = T>
466 Vec4<std::enable_if_t<std::is_signed<U>::value, U>> operator-() const {
467 return MakeVec(-x, -y, -z, -w); 467 return MakeVec(-x, -y, -z, -w);
468 } 468 }
469 Vec4<decltype(T{} * T{})> operator*(const Vec4& other) const { 469 Vec4<decltype(T{} * T{})> operator*(const Vec4& other) const {
@@ -475,10 +475,7 @@ public:
475 } 475 }
476 template <typename V> 476 template <typename V>
477 void operator*=(const V& f) { 477 void operator*=(const V& f) {
478 x *= f; 478 *this = *this * f;
479 y *= f;
480 z *= f;
481 w *= f;
482 } 479 }
483 template <typename V> 480 template <typename V>
484 Vec4<decltype(T{} / V{})> operator/(const V& f) const { 481 Vec4<decltype(T{} / V{})> operator/(const V& f) const {
@@ -721,4 +718,4 @@ static inline Vec4<T> MakeVec(const T& x, const Vec3<T>& yzw) {
721 return MakeVec(x, yzw[0], yzw[1], yzw[2]); 718 return MakeVec(x, yzw[0], yzw[1], yzw[2]);
722} 719}
723 720
724} // namespace 721} // namespace Math
diff --git a/src/core/CMakeLists.txt b/src/core/CMakeLists.txt
index 33ce8dc81..8b25eaf0a 100644
--- a/src/core/CMakeLists.txt
+++ b/src/core/CMakeLists.txt
@@ -6,6 +6,8 @@ set(SRCS
6 arm/dyncom/arm_dyncom_interpreter.cpp 6 arm/dyncom/arm_dyncom_interpreter.cpp
7 arm/dyncom/arm_dyncom_thumb.cpp 7 arm/dyncom/arm_dyncom_thumb.cpp
8 arm/dyncom/arm_dyncom_trans.cpp 8 arm/dyncom/arm_dyncom_trans.cpp
9 arm/unicorn/arm_unicorn.cpp
10 arm/unicorn/unicorn_dynload.c
9 arm/skyeye_common/armstate.cpp 11 arm/skyeye_common/armstate.cpp
10 arm/skyeye_common/armsupp.cpp 12 arm/skyeye_common/armsupp.cpp
11 arm/skyeye_common/vfp/vfp.cpp 13 arm/skyeye_common/vfp/vfp.cpp
@@ -26,14 +28,15 @@ set(SRCS
26 file_sys/archive_systemsavedata.cpp 28 file_sys/archive_systemsavedata.cpp
27 file_sys/disk_archive.cpp 29 file_sys/disk_archive.cpp
28 file_sys/ivfc_archive.cpp 30 file_sys/ivfc_archive.cpp
31 file_sys/ncch_container.cpp
29 file_sys/path_parser.cpp 32 file_sys/path_parser.cpp
30 file_sys/savedata_archive.cpp 33 file_sys/savedata_archive.cpp
34 file_sys/title_metadata.cpp
31 frontend/camera/blank_camera.cpp 35 frontend/camera/blank_camera.cpp
32 frontend/camera/factory.cpp 36 frontend/camera/factory.cpp
33 frontend/camera/interface.cpp 37 frontend/camera/interface.cpp
34 frontend/emu_window.cpp 38 frontend/emu_window.cpp
35 frontend/framebuffer_layout.cpp 39 frontend/framebuffer_layout.cpp
36 frontend/motion_emu.cpp
37 gdbstub/gdbstub.cpp 40 gdbstub/gdbstub.cpp
38 hle/config_mem.cpp 41 hle/config_mem.cpp
39 hle/applets/applet.cpp 42 hle/applets/applet.cpp
@@ -60,6 +63,7 @@ set(SRCS
60 hle/kernel/timer.cpp 63 hle/kernel/timer.cpp
61 hle/kernel/vm_manager.cpp 64 hle/kernel/vm_manager.cpp
62 hle/kernel/wait_object.cpp 65 hle/kernel/wait_object.cpp
66 hle/lock.cpp
63 hle/romfs.cpp 67 hle/romfs.cpp
64 hle/service/ac/ac.cpp 68 hle/service/ac/ac.cpp
65 hle/service/ac/ac_i.cpp 69 hle/service/ac/ac_i.cpp
@@ -135,7 +139,8 @@ set(SRCS
135 hle/service/nim/nim_aoc.cpp 139 hle/service/nim/nim_aoc.cpp
136 hle/service/nim/nim_s.cpp 140 hle/service/nim/nim_s.cpp
137 hle/service/nim/nim_u.cpp 141 hle/service/nim/nim_u.cpp
138 hle/service/ns_s.cpp 142 hle/service/ns/ns.cpp
143 hle/service/ns/ns_s.cpp
139 hle/service/nwm/nwm.cpp 144 hle/service/nwm/nwm.cpp
140 hle/service/nwm/nwm_cec.cpp 145 hle/service/nwm/nwm_cec.cpp
141 hle/service/nwm/nwm_ext.cpp 146 hle/service/nwm/nwm_ext.cpp
@@ -145,6 +150,7 @@ set(SRCS
145 hle/service/nwm/nwm_tst.cpp 150 hle/service/nwm/nwm_tst.cpp
146 hle/service/nwm/nwm_uds.cpp 151 hle/service/nwm/nwm_uds.cpp
147 hle/service/nwm/uds_beacon.cpp 152 hle/service/nwm/uds_beacon.cpp
153 hle/service/nwm/uds_connection.cpp
148 hle/service/nwm/uds_data.cpp 154 hle/service/nwm/uds_data.cpp
149 hle/service/pm_app.cpp 155 hle/service/pm_app.cpp
150 hle/service/ptm/ptm.cpp 156 hle/service/ptm/ptm.cpp
@@ -198,6 +204,8 @@ set(HEADERS
198 arm/dyncom/arm_dyncom_run.h 204 arm/dyncom/arm_dyncom_run.h
199 arm/dyncom/arm_dyncom_thumb.h 205 arm/dyncom/arm_dyncom_thumb.h
200 arm/dyncom/arm_dyncom_trans.h 206 arm/dyncom/arm_dyncom_trans.h
207 arm/unicorn/arm_unicorn.h
208 arm/unicorn/unicorn_dynload.h
201 arm/skyeye_common/arm_regformat.h 209 arm/skyeye_common/arm_regformat.h
202 arm/skyeye_common/armstate.h 210 arm/skyeye_common/armstate.h
203 arm/skyeye_common/armsupp.h 211 arm/skyeye_common/armsupp.h
@@ -229,7 +237,6 @@ set(HEADERS
229 frontend/emu_window.h 237 frontend/emu_window.h
230 frontend/framebuffer_layout.h 238 frontend/framebuffer_layout.h
231 frontend/input.h 239 frontend/input.h
232 frontend/motion_emu.h
233 gdbstub/gdbstub.h 240 gdbstub/gdbstub.h
234 hle/config_mem.h 241 hle/config_mem.h
235 hle/function_wrappers.h 242 hle/function_wrappers.h
@@ -261,6 +268,7 @@ set(HEADERS
261 hle/kernel/timer.h 268 hle/kernel/timer.h
262 hle/kernel/vm_manager.h 269 hle/kernel/vm_manager.h
263 hle/kernel/wait_object.h 270 hle/kernel/wait_object.h
271 hle/lock.h
264 hle/result.h 272 hle/result.h
265 hle/romfs.h 273 hle/romfs.h
266 hle/service/ac/ac.h 274 hle/service/ac/ac.h
@@ -337,7 +345,8 @@ set(HEADERS
337 hle/service/nim/nim_aoc.h 345 hle/service/nim/nim_aoc.h
338 hle/service/nim/nim_s.h 346 hle/service/nim/nim_s.h
339 hle/service/nim/nim_u.h 347 hle/service/nim/nim_u.h
340 hle/service/ns_s.h 348 hle/service/ns/ns.h
349 hle/service/ns/ns_s.h
341 hle/service/nwm/nwm.h 350 hle/service/nwm/nwm.h
342 hle/service/nwm/nwm_cec.h 351 hle/service/nwm/nwm_cec.h
343 hle/service/nwm/nwm_ext.h 352 hle/service/nwm/nwm_ext.h
@@ -347,6 +356,7 @@ set(HEADERS
347 hle/service/nwm/nwm_tst.h 356 hle/service/nwm/nwm_tst.h
348 hle/service/nwm/nwm_uds.h 357 hle/service/nwm/nwm_uds.h
349 hle/service/nwm/uds_beacon.h 358 hle/service/nwm/uds_beacon.h
359 hle/service/nwm/uds_connection.h
350 hle/service/nwm/uds_data.h 360 hle/service/nwm/uds_data.h
351 hle/service/pm_app.h 361 hle/service/pm_app.h
352 hle/service/ptm/ptm.h 362 hle/service/ptm/ptm.h
@@ -394,7 +404,7 @@ set(HEADERS
394 404
395create_directory_groups(${SRCS} ${HEADERS}) 405create_directory_groups(${SRCS} ${HEADERS})
396add_library(core STATIC ${SRCS} ${HEADERS}) 406add_library(core STATIC ${SRCS} ${HEADERS})
397target_link_libraries(core PUBLIC common PRIVATE audio_core video_core) 407target_link_libraries(core PUBLIC common PRIVATE audio_core network video_core)
398target_link_libraries(core PUBLIC Boost::boost PRIVATE cryptopp dynarmic fmt lz4_static) 408target_link_libraries(core PUBLIC Boost::boost PRIVATE cryptopp dynarmic fmt lz4_static)
399if (ENABLE_WEB_SERVICE) 409if (ENABLE_WEB_SERVICE)
400 target_link_libraries(core PUBLIC json-headers web_service) 410 target_link_libraries(core PUBLIC json-headers web_service)
diff --git a/src/core/arm/arm_interface.h b/src/core/arm/arm_interface.h
index f613556dd..0b3096347 100644
--- a/src/core/arm/arm_interface.h
+++ b/src/core/arm/arm_interface.h
@@ -5,6 +5,7 @@
5#pragma once 5#pragma once
6 6
7#include "common/common_types.h" 7#include "common/common_types.h"
8#include "core/hle/kernel/vm_manager.h"
8#include "core/arm/skyeye_common/arm_regformat.h" 9#include "core/arm/skyeye_common/arm_regformat.h"
9#include "core/arm/skyeye_common/vfp/asm_vfp.h" 10#include "core/arm/skyeye_common/vfp/asm_vfp.h"
10 11
@@ -19,10 +20,11 @@ public:
19 u64 sp; 20 u64 sp;
20 u64 pc; 21 u64 pc;
21 u64 cpsr; 22 u64 cpsr;
22 u64 fpu_registers[64]; 23 u128 fpu_registers[32];
23 u64 fpscr; 24 u64 fpscr;
24 u64 fpexc; 25 u64 fpexc;
25 26
27
26 // TODO(bunnei): Fix once we have proper support for tpidrro_el0, etc. in the JIT 28 // TODO(bunnei): Fix once we have proper support for tpidrro_el0, etc. in the JIT
27 VAddr tls_address; 29 VAddr tls_address;
28 }; 30 };
@@ -41,9 +43,14 @@ public:
41 Run(1); 43 Run(1);
42 } 44 }
43 45
46 virtual void MapBackingMemory(VAddr address, size_t size, u8* memory, Kernel::VMAPermission perms) {}
47
44 /// Clear all instruction cache 48 /// Clear all instruction cache
45 virtual void ClearInstructionCache() = 0; 49 virtual void ClearInstructionCache() = 0;
46 50
51 /// Notify CPU emulation that page tables have changed
52 virtual void PageTableChanged() = 0;
53
47 /** 54 /**
48 * Set the Program Counter to an address 55 * Set the Program Counter to an address
49 * @param addr Address to set PC to 56 * @param addr Address to set PC to
@@ -70,6 +77,10 @@ public:
70 */ 77 */
71 virtual void SetReg(int index, u64 value) = 0; 78 virtual void SetReg(int index, u64 value) = 0;
72 79
80 virtual const u128& GetExtReg(int index) const = 0;
81
82 virtual void SetExtReg(int index, u128& value) = 0;
83
73 /** 84 /**
74 * Gets the value of a VFP register 85 * Gets the value of a VFP register
75 * @param index Register index (0-31) 86 * @param index Register index (0-31)
@@ -129,12 +140,6 @@ public:
129 virtual void SetTlsAddress(VAddr address) = 0; 140 virtual void SetTlsAddress(VAddr address) = 0;
130 141
131 /** 142 /**
132 * Advance the CPU core by the specified number of ticks (e.g. to simulate CPU execution time)
133 * @param ticks Number of ticks to advance the CPU core
134 */
135 virtual void AddTicks(u64 ticks) = 0;
136
137 /**
138 * Saves the current CPU context 143 * Saves the current CPU context
139 * @param ctx Thread context to save 144 * @param ctx Thread context to save
140 */ 145 */
@@ -154,9 +159,6 @@ public:
154 return num_instructions; 159 return num_instructions;
155 } 160 }
156 161
157 s64 down_count = 0; ///< A decreasing counter of remaining cycles before the next event,
158 /// decreased by the cpu run loop
159
160protected: 162protected:
161 /** 163 /**
162 * Executes the given number of instructions 164 * Executes the given number of instructions
diff --git a/src/core/arm/dynarmic/arm_dynarmic.cpp b/src/core/arm/dynarmic/arm_dynarmic.cpp
index 0ea1d76e4..6dcab5bab 100644
--- a/src/core/arm/dynarmic/arm_dynarmic.cpp
+++ b/src/core/arm/dynarmic/arm_dynarmic.cpp
@@ -16,24 +16,6 @@
16 16
17static void InterpreterFallback(u64 pc, Dynarmic::Jit* jit, void* user_arg) { 17static void InterpreterFallback(u64 pc, Dynarmic::Jit* jit, void* user_arg) {
18 UNIMPLEMENTED_MSG("InterpreterFallback for ARM64 JIT does not exist!"); 18 UNIMPLEMENTED_MSG("InterpreterFallback for ARM64 JIT does not exist!");
19 //ARMul_State* state = static_cast<ARMul_State*>(user_arg);
20
21 //state->Reg = jit->Regs();
22 //state->Cpsr = jit->Cpsr();
23 //state->Reg[15] = static_cast<u32>(pc);
24 //state->ExtReg = jit->ExtRegs();
25 //state->VFP[VFP_FPSCR] = jit->Fpscr();
26 //state->NumInstrsToExecute = 1;
27
28 //InterpreterMainLoop(state);
29
30 //bool is_thumb = (state->Cpsr & (1 << 5)) != 0;
31 //state->Reg[15] &= (is_thumb ? 0xFFFFFFFE : 0xFFFFFFFC);
32
33 //jit->Regs() = state->Reg;
34 //jit->Cpsr() = state->Cpsr;
35 //jit->ExtRegs() = state->ExtReg;
36 //jit->SetFpscr(state->VFP[VFP_FPSCR]);
37} 19}
38 20
39static bool IsReadOnlyMemory(u64 vaddr) { 21static bool IsReadOnlyMemory(u64 vaddr) {
@@ -73,11 +55,10 @@ void MemoryWrite64(const u64 addr, const u64 data) {
73 Memory::Write64(static_cast<VAddr>(addr), data); 55 Memory::Write64(static_cast<VAddr>(addr), data);
74} 56}
75 57
76static Dynarmic::UserCallbacks GetUserCallbacks( 58static Dynarmic::UserCallbacks GetUserCallbacks(ARM_Dynarmic* this_) {
77 const std::shared_ptr<ARMul_State>& interpeter_state) {
78 Dynarmic::UserCallbacks user_callbacks{}; 59 Dynarmic::UserCallbacks user_callbacks{};
79 //user_callbacks.InterpreterFallback = &InterpreterFallback; 60 user_callbacks.InterpreterFallback = &InterpreterFallback;
80 //user_callbacks.user_arg = static_cast<void*>(interpeter_state.get()); 61 user_callbacks.user_arg = static_cast<void*>(this_);
81 user_callbacks.CallSVC = &SVC::CallSVC; 62 user_callbacks.CallSVC = &SVC::CallSVC;
82 user_callbacks.memory.IsReadOnlyMemory = &IsReadOnlyMemory; 63 user_callbacks.memory.IsReadOnlyMemory = &IsReadOnlyMemory;
83 user_callbacks.memory.ReadCode = &MemoryRead32; 64 user_callbacks.memory.ReadCode = &MemoryRead32;
@@ -90,13 +71,13 @@ static Dynarmic::UserCallbacks GetUserCallbacks(
90 user_callbacks.memory.Write32 = &MemoryWrite32; 71 user_callbacks.memory.Write32 = &MemoryWrite32;
91 user_callbacks.memory.Write64 = &MemoryWrite64; 72 user_callbacks.memory.Write64 = &MemoryWrite64;
92 //user_callbacks.page_table = Memory::GetCurrentPageTablePointers(); 73 //user_callbacks.page_table = Memory::GetCurrentPageTablePointers();
93 user_callbacks.coprocessors[15] = std::make_shared<DynarmicCP15>(interpeter_state);
94 return user_callbacks; 74 return user_callbacks;
95} 75}
96 76
97ARM_Dynarmic::ARM_Dynarmic(PrivilegeMode initial_mode) { 77ARM_Dynarmic::ARM_Dynarmic(PrivilegeMode initial_mode) {
98 interpreter_state = std::make_shared<ARMul_State>(initial_mode); 78}
99 jit = std::make_unique<Dynarmic::Jit>(GetUserCallbacks(interpreter_state), Dynarmic::Arch::ARM64); 79
80void ARM_Dynarmic::MapBackingMemory(VAddr address, size_t size, u8* memory, Kernel::VMAPermission perms) {
100} 81}
101 82
102void ARM_Dynarmic::SetPC(u64 pc) { 83void ARM_Dynarmic::SetPC(u64 pc) {
@@ -115,30 +96,26 @@ void ARM_Dynarmic::SetReg(int index, u64 value) {
115 jit->Regs64()[index] = value; 96 jit->Regs64()[index] = value;
116} 97}
117 98
99const u128& ARM_Dynarmic::GetExtReg(int index) const {
100 return jit->ExtRegs64()[index];
101}
102
103void ARM_Dynarmic::SetExtReg(int index, u128& value) {
104 jit->ExtRegs64()[index] = value;
105}
106
118u32 ARM_Dynarmic::GetVFPReg(int index) const { 107u32 ARM_Dynarmic::GetVFPReg(int index) const {
119 return jit->ExtRegs()[index]; 108 return {};
120} 109}
121 110
122void ARM_Dynarmic::SetVFPReg(int index, u32 value) { 111void ARM_Dynarmic::SetVFPReg(int index, u32 value) {
123 jit->ExtRegs()[index] = value;
124} 112}
125 113
126u32 ARM_Dynarmic::GetVFPSystemReg(VFPSystemRegister reg) const { 114u32 ARM_Dynarmic::GetVFPSystemReg(VFPSystemRegister reg) const {
127 if (reg == VFP_FPSCR) { 115 return {};
128 return jit->Fpscr();
129 }
130
131 // Dynarmic does not implement and/or expose other VFP registers, fallback to interpreter state
132 return interpreter_state->VFP[reg];
133} 116}
134 117
135void ARM_Dynarmic::SetVFPSystemReg(VFPSystemRegister reg, u32 value) { 118void ARM_Dynarmic::SetVFPSystemReg(VFPSystemRegister reg, u32 value) {
136 if (reg == VFP_FPSCR) {
137 jit->SetFpscr(value);
138 }
139
140 // Dynarmic does not implement and/or expose other VFP registers, fallback to interpreter state
141 interpreter_state->VFP[reg] = value;
142} 119}
143 120
144u32 ARM_Dynarmic::GetCPSR() const { 121u32 ARM_Dynarmic::GetCPSR() const {
@@ -150,11 +127,10 @@ void ARM_Dynarmic::SetCPSR(u32 cpsr) {
150} 127}
151 128
152u32 ARM_Dynarmic::GetCP15Register(CP15Register reg) { 129u32 ARM_Dynarmic::GetCP15Register(CP15Register reg) {
153 return interpreter_state->CP15[reg]; 130 return {};
154} 131}
155 132
156void ARM_Dynarmic::SetCP15Register(CP15Register reg, u32 value) { 133void ARM_Dynarmic::SetCP15Register(CP15Register reg, u32 value) {
157 interpreter_state->CP15[reg] = value;
158} 134}
159 135
160VAddr ARM_Dynarmic::GetTlsAddress() const { 136VAddr ARM_Dynarmic::GetTlsAddress() const {
@@ -165,51 +141,39 @@ void ARM_Dynarmic::SetTlsAddress(VAddr address) {
165 jit->TlsAddr() = address; 141 jit->TlsAddr() = address;
166} 142}
167 143
168void ARM_Dynarmic::AddTicks(u64 ticks) {
169 down_count -= ticks;
170 if (down_count < 0) {
171 CoreTiming::Advance();
172 }
173}
174
175MICROPROFILE_DEFINE(ARM_Jit, "ARM JIT", "ARM JIT", MP_RGB(255, 64, 64)); 144MICROPROFILE_DEFINE(ARM_Jit, "ARM JIT", "ARM JIT", MP_RGB(255, 64, 64));
176 145
177void ARM_Dynarmic::ExecuteInstructions(int num_instructions) { 146void ARM_Dynarmic::ExecuteInstructions(int num_instructions) {
147 ASSERT(Memory::GetCurrentPageTable() == current_page_table);
178 MICROPROFILE_SCOPE(ARM_Jit); 148 MICROPROFILE_SCOPE(ARM_Jit);
179 149
180 unsigned ticks_executed = jit->Run(1 /*static_cast<unsigned>(num_instructions)*/); 150 std::size_t ticks_executed = jit->Run(static_cast<unsigned>(num_instructions));
181 151
182 AddTicks(ticks_executed); 152 CoreTiming::AddTicks(ticks_executed);
183} 153}
184 154
185void ARM_Dynarmic::SaveContext(ARM_Interface::ThreadContext& ctx) { 155void ARM_Dynarmic::SaveContext(ARM_Interface::ThreadContext& ctx) {
186 memcpy(ctx.cpu_registers, jit->Regs64().data(), sizeof(ctx.cpu_registers)); 156 memcpy(ctx.cpu_registers, jit->Regs64().data(), sizeof(ctx.cpu_registers));
187 //memcpy(ctx.fpu_registers, jit->ExtRegs().data(), sizeof(ctx.fpu_registers)); 157 memcpy(ctx.fpu_registers, jit->ExtRegs64().data(), sizeof(ctx.fpu_registers));
188 158
189 ctx.lr = jit->Regs64()[30]; 159 ctx.lr = jit->Regs64()[30];
190 ctx.sp = jit->Regs64()[31]; 160 ctx.sp = jit->Regs64()[31];
191 ctx.pc = jit->Regs64()[32]; 161 ctx.pc = jit->Regs64()[32];
192 ctx.cpsr = jit->Cpsr(); 162 ctx.cpsr = jit->Cpsr();
193 163
194 ctx.fpscr = jit->Fpscr();
195 ctx.fpexc = interpreter_state->VFP[VFP_FPEXC];
196
197 // TODO(bunnei): Fix once we have proper support for tpidrro_el0, etc. in the JIT 164 // TODO(bunnei): Fix once we have proper support for tpidrro_el0, etc. in the JIT
198 ctx.tls_address = jit->TlsAddr(); 165 ctx.tls_address = jit->TlsAddr();
199} 166}
200 167
201void ARM_Dynarmic::LoadContext(const ARM_Interface::ThreadContext& ctx) { 168void ARM_Dynarmic::LoadContext(const ARM_Interface::ThreadContext& ctx) {
202 memcpy(jit->Regs64().data(), ctx.cpu_registers, sizeof(ctx.cpu_registers)); 169 memcpy(jit->Regs64().data(), ctx.cpu_registers, sizeof(ctx.cpu_registers));
203 //memcpy(jit->ExtRegs().data(), ctx.fpu_registers, sizeof(ctx.fpu_registers)); 170 memcpy(jit->ExtRegs64().data(), ctx.fpu_registers, sizeof(ctx.fpu_registers));
204 171
205 jit->Regs64()[30] = ctx.lr; 172 jit->Regs64()[30] = ctx.lr;
206 jit->Regs64()[31] = ctx.sp; 173 jit->Regs64()[31] = ctx.sp;
207 jit->Regs64()[32] = ctx.pc; 174 jit->Regs64()[32] = ctx.pc;
208 jit->Cpsr() = ctx.cpsr; 175 jit->Cpsr() = ctx.cpsr;
209 176
210 jit->SetFpscr(ctx.fpscr);
211 interpreter_state->VFP[VFP_FPEXC] = ctx.fpexc;
212
213 // TODO(bunnei): Fix once we have proper support for tpidrro_el0, etc. in the JIT 177 // TODO(bunnei): Fix once we have proper support for tpidrro_el0, etc. in the JIT
214 jit->TlsAddr() = ctx.tls_address; 178 jit->TlsAddr() = ctx.tls_address;
215} 179}
@@ -223,3 +187,16 @@ void ARM_Dynarmic::PrepareReschedule() {
223void ARM_Dynarmic::ClearInstructionCache() { 187void ARM_Dynarmic::ClearInstructionCache() {
224 jit->ClearCache(); 188 jit->ClearCache();
225} 189}
190
191void ARM_Dynarmic::PageTableChanged() {
192 current_page_table = Memory::GetCurrentPageTable();
193
194 auto iter = jits.find(current_page_table);
195 if (iter != jits.end()) {
196 jit = iter->second.get();
197 return;
198 }
199
200 jit = new Dynarmic::Jit(GetUserCallbacks(this), Dynarmic::Arch::ARM64);
201 jits.emplace(current_page_table, std::unique_ptr<Dynarmic::Jit>(jit));
202}
diff --git a/src/core/arm/dynarmic/arm_dynarmic.h b/src/core/arm/dynarmic/arm_dynarmic.h
index fcdc1c0e0..6567359b0 100644
--- a/src/core/arm/dynarmic/arm_dynarmic.h
+++ b/src/core/arm/dynarmic/arm_dynarmic.h
@@ -4,20 +4,29 @@
4 4
5#pragma once 5#pragma once
6 6
7#include <map>
7#include <memory> 8#include <memory>
8#include <dynarmic/dynarmic.h> 9#include <dynarmic/dynarmic.h>
9#include "common/common_types.h" 10#include "common/common_types.h"
10#include "core/arm/arm_interface.h" 11#include "core/arm/arm_interface.h"
11#include "core/arm/skyeye_common/armstate.h" 12#include "core/arm/skyeye_common/armstate.h"
12 13
14namespace Memory {
15struct PageTable;
16} // namespace Memory
17
13class ARM_Dynarmic final : public ARM_Interface { 18class ARM_Dynarmic final : public ARM_Interface {
14public: 19public:
15 ARM_Dynarmic(PrivilegeMode initial_mode); 20 ARM_Dynarmic(PrivilegeMode initial_mode);
16 21
22 void MapBackingMemory(VAddr address, size_t size, u8* memory, Kernel::VMAPermission perms) override;
23
17 void SetPC(u64 pc) override; 24 void SetPC(u64 pc) override;
18 u64 GetPC() const override; 25 u64 GetPC() const override;
19 u64 GetReg(int index) const override; 26 u64 GetReg(int index) const override;
20 void SetReg(int index, u64 value) override; 27 void SetReg(int index, u64 value) override;
28 const u128& GetExtReg(int index) const override;
29 void SetExtReg(int index, u128& value) override;
21 u32 GetVFPReg(int index) const override; 30 u32 GetVFPReg(int index) const override;
22 void SetVFPReg(int index, u32 value) override; 31 void SetVFPReg(int index, u32 value) override;
23 u32 GetVFPSystemReg(VFPSystemRegister reg) const override; 32 u32 GetVFPSystemReg(VFPSystemRegister reg) const override;
@@ -29,8 +38,6 @@ public:
29 VAddr GetTlsAddress() const override; 38 VAddr GetTlsAddress() const override;
30 void SetTlsAddress(VAddr address) override; 39 void SetTlsAddress(VAddr address) override;
31 40
32 void AddTicks(u64 ticks) override;
33
34 void SaveContext(ThreadContext& ctx) override; 41 void SaveContext(ThreadContext& ctx) override;
35 void LoadContext(const ThreadContext& ctx) override; 42 void LoadContext(const ThreadContext& ctx) override;
36 43
@@ -38,8 +45,10 @@ public:
38 void ExecuteInstructions(int num_instructions) override; 45 void ExecuteInstructions(int num_instructions) override;
39 46
40 void ClearInstructionCache() override; 47 void ClearInstructionCache() override;
48 void PageTableChanged() override;
41 49
42private: 50private:
43 std::unique_ptr<Dynarmic::Jit> jit; 51 Dynarmic::Jit* jit = nullptr;
44 std::shared_ptr<ARMul_State> interpreter_state; 52 Memory::PageTable* current_page_table = nullptr;
53 std::map<Memory::PageTable*, std::unique_ptr<Dynarmic::Jit>> jits;
45}; 54};
diff --git a/src/core/arm/dyncom/arm_dyncom.cpp b/src/core/arm/dyncom/arm_dyncom.cpp
index 99758fc2a..5ebf7a2f1 100644
--- a/src/core/arm/dyncom/arm_dyncom.cpp
+++ b/src/core/arm/dyncom/arm_dyncom.cpp
@@ -29,6 +29,10 @@ void ARM_DynCom::SetPC(u64 pc) {
29 state->Reg[15] = pc; 29 state->Reg[15] = pc;
30} 30}
31 31
32void ARM_DynCom::PageTableChanged() {
33 ClearInstructionCache();
34}
35
32u64 ARM_DynCom::GetPC() const { 36u64 ARM_DynCom::GetPC() const {
33 return state->Reg[15]; 37 return state->Reg[15];
34} 38}
@@ -41,6 +45,13 @@ void ARM_DynCom::SetReg(int index, u64 value) {
41 state->Reg[index] = value; 45 state->Reg[index] = value;
42} 46}
43 47
48const u128& ARM_DynCom::GetExtReg(int index) const {
49 return {};
50}
51
52void ARM_DynCom::SetExtReg(int index, u128& value) {
53}
54
44u32 ARM_DynCom::GetVFPReg(int index) const { 55u32 ARM_DynCom::GetVFPReg(int index) const {
45 return state->ExtReg[index]; 56 return state->ExtReg[index];
46} 57}
@@ -80,12 +91,6 @@ VAddr ARM_DynCom::GetTlsAddress() const {
80void ARM_DynCom::SetTlsAddress(VAddr /*address*/) { 91void ARM_DynCom::SetTlsAddress(VAddr /*address*/) {
81} 92}
82 93
83void ARM_DynCom::AddTicks(u64 ticks) {
84 down_count -= ticks;
85 if (down_count < 0)
86 CoreTiming::Advance();
87}
88
89void ARM_DynCom::ExecuteInstructions(int num_instructions) { 94void ARM_DynCom::ExecuteInstructions(int num_instructions) {
90 state->NumInstrsToExecute = num_instructions; 95 state->NumInstrsToExecute = num_instructions;
91 96
@@ -93,7 +98,7 @@ void ARM_DynCom::ExecuteInstructions(int num_instructions) {
93 // executing one instruction at a time. Otherwise, if a block is being executed, more 98 // executing one instruction at a time. Otherwise, if a block is being executed, more
94 // instructions may actually be executed than specified. 99 // instructions may actually be executed than specified.
95 unsigned ticks_executed = InterpreterMainLoop(state.get()); 100 unsigned ticks_executed = InterpreterMainLoop(state.get());
96 AddTicks(ticks_executed); 101 CoreTiming::AddTicks(ticks_executed);
97} 102}
98 103
99void ARM_DynCom::SaveContext(ThreadContext& ctx) { 104void ARM_DynCom::SaveContext(ThreadContext& ctx) {
diff --git a/src/core/arm/dyncom/arm_dyncom.h b/src/core/arm/dyncom/arm_dyncom.h
index 44e674ae2..cc3c0f3da 100644
--- a/src/core/arm/dyncom/arm_dyncom.h
+++ b/src/core/arm/dyncom/arm_dyncom.h
@@ -16,11 +16,14 @@ public:
16 ~ARM_DynCom(); 16 ~ARM_DynCom();
17 17
18 void ClearInstructionCache() override; 18 void ClearInstructionCache() override;
19 void PageTableChanged() override;
19 20
20 void SetPC(u64 pc) override; 21 void SetPC(u64 pc) override;
21 u64 GetPC() const override; 22 u64 GetPC() const override;
22 u64 GetReg(int index) const override; 23 u64 GetReg(int index) const override;
23 void SetReg(int index, u64 value) override; 24 void SetReg(int index, u64 value) override;
25 const u128& GetExtReg(int index) const override;
26 void SetExtReg(int index, u128& value) override;
24 u32 GetVFPReg(int index) const override; 27 u32 GetVFPReg(int index) const override;
25 void SetVFPReg(int index, u32 value) override; 28 void SetVFPReg(int index, u32 value) override;
26 u32 GetVFPSystemReg(VFPSystemRegister reg) const override; 29 u32 GetVFPSystemReg(VFPSystemRegister reg) const override;
@@ -32,8 +35,6 @@ public:
32 VAddr GetTlsAddress() const override; 35 VAddr GetTlsAddress() const override;
33 void SetTlsAddress(VAddr address) override; 36 void SetTlsAddress(VAddr address) override;
34 37
35 void AddTicks(u64 ticks) override;
36
37 void SaveContext(ThreadContext& ctx) override; 38 void SaveContext(ThreadContext& ctx) override;
38 void LoadContext(const ThreadContext& ctx) override; 39 void LoadContext(const ThreadContext& ctx) override;
39 40
diff --git a/src/core/arm/dyncom/arm_dyncom_interpreter.cpp b/src/core/arm/dyncom/arm_dyncom_interpreter.cpp
index f4fbb8d04..3522d1e82 100644
--- a/src/core/arm/dyncom/arm_dyncom_interpreter.cpp
+++ b/src/core/arm/dyncom/arm_dyncom_interpreter.cpp
@@ -759,7 +759,7 @@ static ThumbDecodeStatus DecodeThumbInstruction(u32 inst, u32 addr, u32* arm_ins
759 ThumbDecodeStatus ret = TranslateThumbInstruction(addr, inst, arm_inst, inst_size); 759 ThumbDecodeStatus ret = TranslateThumbInstruction(addr, inst, arm_inst, inst_size);
760 if (ret == ThumbDecodeStatus::BRANCH) { 760 if (ret == ThumbDecodeStatus::BRANCH) {
761 int inst_index; 761 int inst_index;
762 int table_length = arm_instruction_trans_len; 762 int table_length = static_cast<int>(arm_instruction_trans_len);
763 u32 tinstr = GetThumbInstruction(inst, addr); 763 u32 tinstr = GetThumbInstruction(inst, addr);
764 764
765 switch ((tinstr & 0xF800) >> 11) { 765 switch ((tinstr & 0xF800) >> 11) {
@@ -838,7 +838,7 @@ static unsigned int InterpreterTranslateInstruction(const ARMul_State* cpu, cons
838 return inst_size; 838 return inst_size;
839} 839}
840 840
841static int InterpreterTranslateBlock(ARMul_State* cpu, int& bb_start, u32 addr) { 841static int InterpreterTranslateBlock(ARMul_State* cpu, std::size_t& bb_start, u32 addr) {
842 MICROPROFILE_SCOPE(DynCom_Decode); 842 MICROPROFILE_SCOPE(DynCom_Decode);
843 843
844 // Decode instruction, get index 844 // Decode instruction, get index
@@ -871,7 +871,7 @@ static int InterpreterTranslateBlock(ARMul_State* cpu, int& bb_start, u32 addr)
871 return KEEP_GOING; 871 return KEEP_GOING;
872} 872}
873 873
874static int InterpreterTranslateSingle(ARMul_State* cpu, int& bb_start, u32 addr) { 874static int InterpreterTranslateSingle(ARMul_State* cpu, std::size_t& bb_start, u32 addr) {
875 MICROPROFILE_SCOPE(DynCom_Decode); 875 MICROPROFILE_SCOPE(DynCom_Decode);
876 876
877 ARM_INST_PTR inst_base = nullptr; 877 ARM_INST_PTR inst_base = nullptr;
@@ -1620,7 +1620,7 @@ unsigned InterpreterMainLoop(ARMul_State* cpu) {
1620 unsigned int addr; 1620 unsigned int addr;
1621 unsigned int num_instrs = 0; 1621 unsigned int num_instrs = 0;
1622 1622
1623 int ptr; 1623 std::size_t ptr;
1624 1624
1625 LOAD_NZCVT; 1625 LOAD_NZCVT;
1626DISPATCH : { 1626DISPATCH : {
diff --git a/src/core/arm/skyeye_common/armstate.h b/src/core/arm/skyeye_common/armstate.h
index 1a707ff7e..893877797 100644
--- a/src/core/arm/skyeye_common/armstate.h
+++ b/src/core/arm/skyeye_common/armstate.h
@@ -230,7 +230,7 @@ public:
230 230
231 // TODO(bunnei): Move this cache to a better place - it should be per codeset (likely per 231 // TODO(bunnei): Move this cache to a better place - it should be per codeset (likely per
232 // process for our purposes), not per ARMul_State (which tracks CPU core state). 232 // process for our purposes), not per ARMul_State (which tracks CPU core state).
233 std::unordered_map<u32, int> instruction_cache; 233 std::unordered_map<u32, std::size_t> instruction_cache;
234 234
235private: 235private:
236 void ResetMPCoreCP15Registers(); 236 void ResetMPCoreCP15Registers();
diff --git a/src/core/core.cpp b/src/core/core.cpp
index d08f18623..c5448630f 100644
--- a/src/core/core.cpp
+++ b/src/core/core.cpp
@@ -9,16 +9,19 @@
9#include "core/arm/arm_interface.h" 9#include "core/arm/arm_interface.h"
10#include "core/arm/dynarmic/arm_dynarmic.h" 10#include "core/arm/dynarmic/arm_dynarmic.h"
11#include "core/arm/dyncom/arm_dyncom.h" 11#include "core/arm/dyncom/arm_dyncom.h"
12#include "core/arm/unicorn/arm_unicorn.h"
12#include "core/core.h" 13#include "core/core.h"
13#include "core/core_timing.h" 14#include "core/core_timing.h"
14#include "core/gdbstub/gdbstub.h" 15#include "core/gdbstub/gdbstub.h"
15#include "core/hle/kernel/kernel.h" 16#include "core/hle/kernel/kernel.h"
17#include "core/hle/kernel/process.h"
16#include "core/hle/kernel/thread.h" 18#include "core/hle/kernel/thread.h"
17#include "core/hle/service/service.h" 19#include "core/hle/service/service.h"
18#include "core/hw/hw.h" 20#include "core/hw/hw.h"
19#include "core/loader/loader.h" 21#include "core/loader/loader.h"
20#include "core/memory_setup.h" 22#include "core/memory_setup.h"
21#include "core/settings.h" 23#include "core/settings.h"
24#include "network/network.h"
22#include "video_core/video_core.h" 25#include "video_core/video_core.h"
23 26
24namespace Core { 27namespace Core {
@@ -99,7 +102,7 @@ System::ResultStatus System::Load(EmuWindow* emu_window, const std::string& file
99 return init_result; 102 return init_result;
100 } 103 }
101 104
102 const Loader::ResultStatus load_result{app_loader->Load()}; 105 const Loader::ResultStatus load_result{app_loader->Load(Kernel::g_current_process)};
103 if (Loader::ResultStatus::Success != load_result) { 106 if (Loader::ResultStatus::Success != load_result) {
104 LOG_CRITICAL(Core, "Failed to load ROM (Error %i)!", load_result); 107 LOG_CRITICAL(Core, "Failed to load ROM (Error %i)!", load_result);
105 System::Shutdown(); 108 System::Shutdown();
@@ -136,7 +139,6 @@ void System::Reschedule() {
136} 139}
137 140
138System::ResultStatus System::Init(EmuWindow* emu_window, u32 system_mode) { 141System::ResultStatus System::Init(EmuWindow* emu_window, u32 system_mode) {
139 Memory::InitMemoryMap();
140 LOG_DEBUG(HW_Memory, "initialized OK"); 142 LOG_DEBUG(HW_Memory, "initialized OK");
141 143
142 if (Settings::values.use_cpu_jit) { 144 if (Settings::values.use_cpu_jit) {
@@ -188,8 +190,12 @@ void System::Shutdown() {
188 cpu_core = nullptr; 190 cpu_core = nullptr;
189 app_loader = nullptr; 191 app_loader = nullptr;
190 telemetry_session = nullptr; 192 telemetry_session = nullptr;
193 if (auto room_member = Network::GetRoomMember().lock()) {
194 Network::GameInfo game_info{};
195 room_member->SendGameInfo(game_info);
196 }
191 197
192 LOG_DEBUG(Core, "Shutdown OK"); 198 LOG_DEBUG(Core, "Shutdown OK");
193} 199}
194 200
195} // namespace 201} // namespace Core
diff --git a/src/core/core.h b/src/core/core.h
index 4e3b6b409..9805cc694 100644
--- a/src/core/core.h
+++ b/src/core/core.h
@@ -7,6 +7,7 @@
7#include <memory> 7#include <memory>
8#include <string> 8#include <string>
9#include "common/common_types.h" 9#include "common/common_types.h"
10#include "core/loader/loader.h"
10#include "core/memory.h" 11#include "core/memory.h"
11#include "core/perf_stats.h" 12#include "core/perf_stats.h"
12#include "core/telemetry_session.h" 13#include "core/telemetry_session.h"
@@ -14,10 +15,6 @@
14class EmuWindow; 15class EmuWindow;
15class ARM_Interface; 16class ARM_Interface;
16 17
17namespace Loader {
18class AppLoader;
19}
20
21namespace Core { 18namespace Core {
22 19
23class System { 20class System {
@@ -119,6 +116,10 @@ public:
119 return status_details; 116 return status_details;
120 } 117 }
121 118
119 Loader::AppLoader& GetAppLoader() const {
120 return *app_loader;
121 }
122
122private: 123private:
123 /** 124 /**
124 * Initialize the emulated system. 125 * Initialize the emulated system.
diff --git a/src/core/core_timing.cpp b/src/core/core_timing.cpp
index 276ecfdf6..5e2a5d00f 100644
--- a/src/core/core_timing.cpp
+++ b/src/core/core_timing.cpp
@@ -57,6 +57,9 @@ static s64 idled_cycles;
57static s64 last_global_time_ticks; 57static s64 last_global_time_ticks;
58static s64 last_global_time_us; 58static s64 last_global_time_us;
59 59
60static s64 down_count = 0; ///< A decreasing counter of remaining cycles before the next event,
61 /// decreased by the cpu run loop
62
60static std::recursive_mutex external_event_section; 63static std::recursive_mutex external_event_section;
61 64
62// Warning: not included in save state. 65// Warning: not included in save state.
@@ -146,7 +149,7 @@ void UnregisterAllEvents() {
146} 149}
147 150
148void Init() { 151void Init() {
149 Core::CPU().down_count = INITIAL_SLICE_LENGTH; 152 down_count = INITIAL_SLICE_LENGTH;
150 g_slice_length = INITIAL_SLICE_LENGTH; 153 g_slice_length = INITIAL_SLICE_LENGTH;
151 global_timer = 0; 154 global_timer = 0;
152 idled_cycles = 0; 155 idled_cycles = 0;
@@ -185,8 +188,15 @@ void Shutdown() {
185 } 188 }
186} 189}
187 190
191void AddTicks(u64 ticks) {
192 down_count -= ticks;
193 if (down_count < 0) {
194 Advance();
195 }
196}
197
188u64 GetTicks() { 198u64 GetTicks() {
189 return (u64)global_timer + g_slice_length - Core::CPU().down_count; 199 return (u64)global_timer + g_slice_length - down_count;
190} 200}
191 201
192u64 GetIdleTicks() { 202u64 GetIdleTicks() {
@@ -460,18 +470,18 @@ void MoveEvents() {
460} 470}
461 471
462void ForceCheck() { 472void ForceCheck() {
463 s64 cycles_executed = g_slice_length - Core::CPU().down_count; 473 s64 cycles_executed = g_slice_length - down_count;
464 global_timer += cycles_executed; 474 global_timer += cycles_executed;
465 // This will cause us to check for new events immediately. 475 // This will cause us to check for new events immediately.
466 Core::CPU().down_count = 0; 476 down_count = 0;
467 // But let's not eat a bunch more time in Advance() because of this. 477 // But let's not eat a bunch more time in Advance() because of this.
468 g_slice_length = 0; 478 g_slice_length = 0;
469} 479}
470 480
471void Advance() { 481void Advance() {
472 s64 cycles_executed = g_slice_length - Core::CPU().down_count; 482 s64 cycles_executed = g_slice_length - down_count;
473 global_timer += cycles_executed; 483 global_timer += cycles_executed;
474 Core::CPU().down_count = g_slice_length; 484 down_count = g_slice_length;
475 485
476 if (has_ts_events) 486 if (has_ts_events)
477 MoveEvents(); 487 MoveEvents();
@@ -480,7 +490,7 @@ void Advance() {
480 if (!first) { 490 if (!first) {
481 if (g_slice_length < 10000) { 491 if (g_slice_length < 10000) {
482 g_slice_length += 10000; 492 g_slice_length += 10000;
483 Core::CPU().down_count += g_slice_length; 493 down_count += g_slice_length;
484 } 494 }
485 } else { 495 } else {
486 // Note that events can eat cycles as well. 496 // Note that events can eat cycles as well.
@@ -490,7 +500,7 @@ void Advance() {
490 500
491 const int diff = target - g_slice_length; 501 const int diff = target - g_slice_length;
492 g_slice_length += diff; 502 g_slice_length += diff;
493 Core::CPU().down_count += diff; 503 down_count += diff;
494 } 504 }
495 if (advance_callback) 505 if (advance_callback)
496 advance_callback(static_cast<int>(cycles_executed)); 506 advance_callback(static_cast<int>(cycles_executed));
@@ -506,12 +516,12 @@ void LogPendingEvents() {
506} 516}
507 517
508void Idle(int max_idle) { 518void Idle(int max_idle) {
509 s64 cycles_down = Core::CPU().down_count; 519 s64 cycles_down = down_count;
510 if (max_idle != 0 && cycles_down > max_idle) 520 if (max_idle != 0 && cycles_down > max_idle)
511 cycles_down = max_idle; 521 cycles_down = max_idle;
512 522
513 if (first && cycles_down > 0) { 523 if (first && cycles_down > 0) {
514 s64 cycles_executed = g_slice_length - Core::CPU().down_count; 524 s64 cycles_executed = g_slice_length - down_count;
515 s64 cycles_next_event = first->time - global_timer; 525 s64 cycles_next_event = first->time - global_timer;
516 526
517 if (cycles_next_event < cycles_executed + cycles_down) { 527 if (cycles_next_event < cycles_executed + cycles_down) {
@@ -526,9 +536,9 @@ void Idle(int max_idle) {
526 cycles_down / (float)(g_clock_rate_arm11 * 0.001f)); 536 cycles_down / (float)(g_clock_rate_arm11 * 0.001f));
527 537
528 idled_cycles += cycles_down; 538 idled_cycles += cycles_down;
529 Core::CPU().down_count -= cycles_down; 539 down_count -= cycles_down;
530 if (Core::CPU().down_count == 0) 540 if (down_count == 0)
531 Core::CPU().down_count = -1; 541 down_count = -1;
532} 542}
533 543
534std::string GetScheduledEventsSummary() { 544std::string GetScheduledEventsSummary() {
diff --git a/src/core/core_timing.h b/src/core/core_timing.h
index d2f85cd4d..897350801 100644
--- a/src/core/core_timing.h
+++ b/src/core/core_timing.h
@@ -67,6 +67,12 @@ void Shutdown();
67typedef void (*MHzChangeCallback)(); 67typedef void (*MHzChangeCallback)();
68typedef std::function<void(u64 userdata, int cycles_late)> TimedCallback; 68typedef std::function<void(u64 userdata, int cycles_late)> TimedCallback;
69 69
70/**
71* Advance the CPU core by the specified number of ticks (e.g. to simulate CPU execution time)
72* @param ticks Number of ticks to advance the CPU core
73*/
74void AddTicks(u64 ticks);
75
70u64 GetTicks(); 76u64 GetTicks();
71u64 GetIdleTicks(); 77u64 GetIdleTicks();
72u64 GetGlobalTimeUs(); 78u64 GetGlobalTimeUs();
diff --git a/src/core/file_sys/archive_backend.cpp b/src/core/file_sys/archive_backend.cpp
index 1fae0ede0..87a240d7a 100644
--- a/src/core/file_sys/archive_backend.cpp
+++ b/src/core/file_sys/archive_backend.cpp
@@ -90,6 +90,8 @@ std::u16string Path::AsU16Str() const {
90 LOG_ERROR(Service_FS, "LowPathType cannot be converted to u16string!"); 90 LOG_ERROR(Service_FS, "LowPathType cannot be converted to u16string!");
91 return {}; 91 return {};
92 } 92 }
93
94 UNREACHABLE();
93} 95}
94 96
95std::vector<u8> Path::AsBinary() const { 97std::vector<u8> Path::AsBinary() const {
diff --git a/src/core/file_sys/archive_ncch.cpp b/src/core/file_sys/archive_ncch.cpp
index 6d9007731..e8c5be983 100644
--- a/src/core/file_sys/archive_ncch.cpp
+++ b/src/core/file_sys/archive_ncch.cpp
@@ -13,7 +13,10 @@
13#include "core/file_sys/archive_ncch.h" 13#include "core/file_sys/archive_ncch.h"
14#include "core/file_sys/errors.h" 14#include "core/file_sys/errors.h"
15#include "core/file_sys/ivfc_archive.h" 15#include "core/file_sys/ivfc_archive.h"
16#include "core/file_sys/ncch_container.h"
17#include "core/file_sys/title_metadata.h"
16#include "core/hle/service/fs/archive.h" 18#include "core/hle/service/fs/archive.h"
19#include "core/loader/loader.h"
17 20
18//////////////////////////////////////////////////////////////////////////////////////////////////// 21////////////////////////////////////////////////////////////////////////////////////////////////////
19// FileSys namespace 22// FileSys namespace
@@ -25,8 +28,18 @@ static std::string GetNCCHContainerPath(const std::string& nand_directory) {
25} 28}
26 29
27static std::string GetNCCHPath(const std::string& mount_point, u32 high, u32 low) { 30static std::string GetNCCHPath(const std::string& mount_point, u32 high, u32 low) {
28 return Common::StringFromFormat("%s%08x/%08x/content/00000000.app.romfs", mount_point.c_str(), 31 u32 content_id = 0;
29 high, low); 32
33 // TODO(shinyquagsire23): Title database should be doing this path lookup
34 std::string content_path =
35 Common::StringFromFormat("%s%08x/%08x/content/", mount_point.c_str(), high, low);
36 std::string tmd_path = content_path + "00000000.tmd";
37 TitleMetadata tmd(tmd_path);
38 if (tmd.Load() == Loader::ResultStatus::Success) {
39 content_id = tmd.GetBootContentID();
40 }
41
42 return Common::StringFromFormat("%s%08x.app", content_path.c_str(), content_id);
30} 43}
31 44
32ArchiveFactory_NCCH::ArchiveFactory_NCCH(const std::string& nand_directory) 45ArchiveFactory_NCCH::ArchiveFactory_NCCH(const std::string& nand_directory)
@@ -38,9 +51,14 @@ ResultVal<std::unique_ptr<ArchiveBackend>> ArchiveFactory_NCCH::Open(const Path&
38 u32 high = data[1]; 51 u32 high = data[1];
39 u32 low = data[0]; 52 u32 low = data[0];
40 std::string file_path = GetNCCHPath(mount_point, high, low); 53 std::string file_path = GetNCCHPath(mount_point, high, low);
41 auto file = std::make_shared<FileUtil::IOFile>(file_path, "rb");
42 54
43 if (!file->IsOpen()) { 55 std::shared_ptr<FileUtil::IOFile> romfs_file;
56 u64 romfs_offset = 0;
57 u64 romfs_size = 0;
58 auto ncch_container = NCCHContainer(file_path);
59
60 if (ncch_container.ReadRomFS(romfs_file, romfs_offset, romfs_size) !=
61 Loader::ResultStatus::Success) {
44 // High Title ID of the archive: The category (https://3dbrew.org/wiki/Title_list). 62 // High Title ID of the archive: The category (https://3dbrew.org/wiki/Title_list).
45 constexpr u32 shared_data_archive = 0x0004009B; 63 constexpr u32 shared_data_archive = 0x0004009B;
46 constexpr u32 system_data_archive = 0x000400DB; 64 constexpr u32 system_data_archive = 0x000400DB;
@@ -74,9 +92,8 @@ ResultVal<std::unique_ptr<ArchiveBackend>> ArchiveFactory_NCCH::Open(const Path&
74 } 92 }
75 return ERROR_NOT_FOUND; 93 return ERROR_NOT_FOUND;
76 } 94 }
77 auto size = file->GetSize();
78 95
79 auto archive = std::make_unique<IVFCArchive>(file, 0, size); 96 auto archive = std::make_unique<IVFCArchive>(romfs_file, romfs_offset, romfs_size);
80 return MakeResult<std::unique_ptr<ArchiveBackend>>(std::move(archive)); 97 return MakeResult<std::unique_ptr<ArchiveBackend>>(std::move(archive));
81} 98}
82 99
diff --git a/src/core/file_sys/archive_sdmc.cpp b/src/core/file_sys/archive_sdmc.cpp
index 679909d06..fe3dce5d4 100644
--- a/src/core/file_sys/archive_sdmc.cpp
+++ b/src/core/file_sys/archive_sdmc.cpp
@@ -121,7 +121,25 @@ ResultCode SDMCArchive::DeleteFile(const Path& path) const {
121} 121}
122 122
123ResultCode SDMCArchive::RenameFile(const Path& src_path, const Path& dest_path) const { 123ResultCode SDMCArchive::RenameFile(const Path& src_path, const Path& dest_path) const {
124 if (FileUtil::Rename(mount_point + src_path.AsString(), mount_point + dest_path.AsString())) { 124 const PathParser path_parser_src(src_path);
125
126 // TODO: Verify these return codes with HW
127 if (!path_parser_src.IsValid()) {
128 LOG_ERROR(Service_FS, "Invalid src path %s", src_path.DebugStr().c_str());
129 return ERROR_INVALID_PATH;
130 }
131
132 const PathParser path_parser_dest(dest_path);
133
134 if (!path_parser_dest.IsValid()) {
135 LOG_ERROR(Service_FS, "Invalid dest path %s", dest_path.DebugStr().c_str());
136 return ERROR_INVALID_PATH;
137 }
138
139 const auto src_path_full = path_parser_src.BuildHostPath(mount_point);
140 const auto dest_path_full = path_parser_dest.BuildHostPath(mount_point);
141
142 if (FileUtil::Rename(src_path_full, dest_path_full)) {
125 return RESULT_SUCCESS; 143 return RESULT_SUCCESS;
126 } 144 }
127 145
@@ -260,8 +278,27 @@ ResultCode SDMCArchive::CreateDirectory(const Path& path) const {
260} 278}
261 279
262ResultCode SDMCArchive::RenameDirectory(const Path& src_path, const Path& dest_path) const { 280ResultCode SDMCArchive::RenameDirectory(const Path& src_path, const Path& dest_path) const {
263 if (FileUtil::Rename(mount_point + src_path.AsString(), mount_point + dest_path.AsString())) 281 const PathParser path_parser_src(src_path);
282
283 // TODO: Verify these return codes with HW
284 if (!path_parser_src.IsValid()) {
285 LOG_ERROR(Service_FS, "Invalid src path %s", src_path.DebugStr().c_str());
286 return ERROR_INVALID_PATH;
287 }
288
289 const PathParser path_parser_dest(dest_path);
290
291 if (!path_parser_dest.IsValid()) {
292 LOG_ERROR(Service_FS, "Invalid dest path %s", dest_path.DebugStr().c_str());
293 return ERROR_INVALID_PATH;
294 }
295
296 const auto src_path_full = path_parser_src.BuildHostPath(mount_point);
297 const auto dest_path_full = path_parser_dest.BuildHostPath(mount_point);
298
299 if (FileUtil::Rename(src_path_full, dest_path_full)) {
264 return RESULT_SUCCESS; 300 return RESULT_SUCCESS;
301 }
265 302
266 // TODO(yuriks): This code probably isn't right, it'll return a Status even if the file didn't 303 // TODO(yuriks): This code probably isn't right, it'll return a Status even if the file didn't
267 // exist or similar. Verify. 304 // exist or similar. Verify.
diff --git a/src/core/file_sys/archive_selfncch.cpp b/src/core/file_sys/archive_selfncch.cpp
index 298a37a44..3222000cf 100644
--- a/src/core/file_sys/archive_selfncch.cpp
+++ b/src/core/file_sys/archive_selfncch.cpp
@@ -3,12 +3,14 @@
3// Refer to the license.txt file included. 3// Refer to the license.txt file included.
4 4
5#include <array> 5#include <array>
6#include <cinttypes>
6#include "common/common_types.h" 7#include "common/common_types.h"
7#include "common/logging/log.h" 8#include "common/logging/log.h"
8#include "common/swap.h" 9#include "common/swap.h"
9#include "core/file_sys/archive_selfncch.h" 10#include "core/file_sys/archive_selfncch.h"
10#include "core/file_sys/errors.h" 11#include "core/file_sys/errors.h"
11#include "core/file_sys/ivfc_archive.h" 12#include "core/file_sys/ivfc_archive.h"
13#include "core/hle/kernel/process.h"
12 14
13//////////////////////////////////////////////////////////////////////////////////////////////////// 15////////////////////////////////////////////////////////////////////////////////////////////////////
14// FileSys namespace 16// FileSys namespace
@@ -102,8 +104,7 @@ public:
102 104
103 switch (static_cast<SelfNCCHFilePathType>(file_path.type)) { 105 switch (static_cast<SelfNCCHFilePathType>(file_path.type)) {
104 case SelfNCCHFilePathType::UpdateRomFS: 106 case SelfNCCHFilePathType::UpdateRomFS:
105 LOG_WARNING(Service_FS, "(STUBBED) open update RomFS"); 107 return OpenUpdateRomFS();
106 return OpenRomFS();
107 108
108 case SelfNCCHFilePathType::RomFS: 109 case SelfNCCHFilePathType::RomFS:
109 return OpenRomFS(); 110 return OpenRomFS();
@@ -179,6 +180,17 @@ private:
179 } 180 }
180 } 181 }
181 182
183 ResultVal<std::unique_ptr<FileBackend>> OpenUpdateRomFS() const {
184 if (ncch_data.update_romfs_file) {
185 return MakeResult<std::unique_ptr<FileBackend>>(std::make_unique<IVFCFile>(
186 ncch_data.update_romfs_file, ncch_data.update_romfs_offset,
187 ncch_data.update_romfs_size));
188 } else {
189 LOG_INFO(Service_FS, "Unable to read update RomFS");
190 return ERROR_ROMFS_NOT_FOUND;
191 }
192 }
193
182 ResultVal<std::unique_ptr<FileBackend>> OpenExeFS(const std::string& filename) const { 194 ResultVal<std::unique_ptr<FileBackend>> OpenExeFS(const std::string& filename) const {
183 if (filename == "icon") { 195 if (filename == "icon") {
184 if (ncch_data.icon) { 196 if (ncch_data.icon) {
@@ -217,31 +229,59 @@ private:
217 NCCHData ncch_data; 229 NCCHData ncch_data;
218}; 230};
219 231
220ArchiveFactory_SelfNCCH::ArchiveFactory_SelfNCCH(Loader::AppLoader& app_loader) { 232void ArchiveFactory_SelfNCCH::Register(Loader::AppLoader& app_loader) {
233 u64 program_id = 0;
234 if (app_loader.ReadProgramId(program_id) != Loader::ResultStatus::Success) {
235 LOG_WARNING(
236 Service_FS,
237 "Could not read program id when registering with SelfNCCH, this might be a 3dsx file");
238 }
239
240 LOG_DEBUG(Service_FS, "Registering program %016" PRIX64 " with the SelfNCCH archive factory",
241 program_id);
242
243 if (ncch_data.find(program_id) != ncch_data.end()) {
244 LOG_WARNING(Service_FS, "Registering program %016" PRIX64
245 " with SelfNCCH will override existing mapping",
246 program_id);
247 }
248
249 NCCHData& data = ncch_data[program_id];
250
221 std::shared_ptr<FileUtil::IOFile> romfs_file_; 251 std::shared_ptr<FileUtil::IOFile> romfs_file_;
222 if (Loader::ResultStatus::Success == 252 if (Loader::ResultStatus::Success ==
223 app_loader.ReadRomFS(romfs_file_, ncch_data.romfs_offset, ncch_data.romfs_size)) { 253 app_loader.ReadRomFS(romfs_file_, data.romfs_offset, data.romfs_size)) {
254
255 data.romfs_file = std::move(romfs_file_);
256 }
257
258 std::shared_ptr<FileUtil::IOFile> update_romfs_file;
259 if (Loader::ResultStatus::Success ==
260 app_loader.ReadUpdateRomFS(update_romfs_file, data.update_romfs_offset,
261 data.update_romfs_size)) {
224 262
225 ncch_data.romfs_file = std::move(romfs_file_); 263 data.update_romfs_file = std::move(update_romfs_file);
226 } 264 }
227 265
228 std::vector<u8> buffer; 266 std::vector<u8> buffer;
229 267
230 if (Loader::ResultStatus::Success == app_loader.ReadIcon(buffer)) 268 if (Loader::ResultStatus::Success == app_loader.ReadIcon(buffer))
231 ncch_data.icon = std::make_shared<std::vector<u8>>(std::move(buffer)); 269 data.icon = std::make_shared<std::vector<u8>>(std::move(buffer));
232 270
233 buffer.clear(); 271 buffer.clear();
234 if (Loader::ResultStatus::Success == app_loader.ReadLogo(buffer)) 272 if (Loader::ResultStatus::Success == app_loader.ReadLogo(buffer))
235 ncch_data.logo = std::make_shared<std::vector<u8>>(std::move(buffer)); 273 data.logo = std::make_shared<std::vector<u8>>(std::move(buffer));
236 274
237 buffer.clear(); 275 buffer.clear();
238 if (Loader::ResultStatus::Success == app_loader.ReadBanner(buffer)) 276 if (Loader::ResultStatus::Success == app_loader.ReadBanner(buffer))
239 ncch_data.banner = std::make_shared<std::vector<u8>>(std::move(buffer)); 277 data.banner = std::make_shared<std::vector<u8>>(std::move(buffer));
240} 278}
241 279
242ResultVal<std::unique_ptr<ArchiveBackend>> ArchiveFactory_SelfNCCH::Open(const Path& path) { 280ResultVal<std::unique_ptr<ArchiveBackend>> ArchiveFactory_SelfNCCH::Open(const Path& path) {
243 auto archive = std::make_unique<SelfNCCHArchive>(ncch_data); 281 //auto archive = std::make_unique<SelfNCCHArchive>(
244 return MakeResult<std::unique_ptr<ArchiveBackend>>(std::move(archive)); 282 // ncch_data[Kernel::g_current_process->codeset->program_id]);
283 //return MakeResult<std::unique_ptr<ArchiveBackend>>(std::move(archive));
284 return {};
245} 285}
246 286
247ResultCode ArchiveFactory_SelfNCCH::Format(const Path&, const FileSys::ArchiveFormatInfo&) { 287ResultCode ArchiveFactory_SelfNCCH::Format(const Path&, const FileSys::ArchiveFormatInfo&) {
diff --git a/src/core/file_sys/archive_selfncch.h b/src/core/file_sys/archive_selfncch.h
index f1b971296..0d6d6766e 100644
--- a/src/core/file_sys/archive_selfncch.h
+++ b/src/core/file_sys/archive_selfncch.h
@@ -6,6 +6,7 @@
6 6
7#include <memory> 7#include <memory>
8#include <string> 8#include <string>
9#include <unordered_map>
9#include <vector> 10#include <vector>
10#include "common/common_types.h" 11#include "common/common_types.h"
11#include "core/file_sys/archive_backend.h" 12#include "core/file_sys/archive_backend.h"
@@ -24,12 +25,19 @@ struct NCCHData {
24 std::shared_ptr<FileUtil::IOFile> romfs_file; 25 std::shared_ptr<FileUtil::IOFile> romfs_file;
25 u64 romfs_offset = 0; 26 u64 romfs_offset = 0;
26 u64 romfs_size = 0; 27 u64 romfs_size = 0;
28
29 std::shared_ptr<FileUtil::IOFile> update_romfs_file;
30 u64 update_romfs_offset = 0;
31 u64 update_romfs_size = 0;
27}; 32};
28 33
29/// File system interface to the SelfNCCH archive 34/// File system interface to the SelfNCCH archive
30class ArchiveFactory_SelfNCCH final : public ArchiveFactory { 35class ArchiveFactory_SelfNCCH final : public ArchiveFactory {
31public: 36public:
32 explicit ArchiveFactory_SelfNCCH(Loader::AppLoader& app_loader); 37 ArchiveFactory_SelfNCCH() = default;
38
39 /// Registers a loaded application so that we can open its SelfNCCH archive when requested.
40 void Register(Loader::AppLoader& app_loader);
33 41
34 std::string GetName() const override { 42 std::string GetName() const override {
35 return "SelfNCCH"; 43 return "SelfNCCH";
@@ -39,7 +47,8 @@ public:
39 ResultVal<ArchiveFormatInfo> GetFormatInfo(const Path& path) const override; 47 ResultVal<ArchiveFormatInfo> GetFormatInfo(const Path& path) const override;
40 48
41private: 49private:
42 NCCHData ncch_data; 50 /// Mapping of ProgramId -> NCCHData
51 std::unordered_map<u64, NCCHData> ncch_data;
43}; 52};
44 53
45} // namespace FileSys 54} // namespace FileSys
diff --git a/src/core/file_sys/ncch_container.cpp b/src/core/file_sys/ncch_container.cpp
new file mode 100644
index 000000000..b9fb940c7
--- /dev/null
+++ b/src/core/file_sys/ncch_container.cpp
@@ -0,0 +1,423 @@
1// Copyright 2017 Citra Emulator Project
2// Licensed under GPLv2 or any later version
3// Refer to the license.txt file included.
4
5#include <cinttypes>
6#include <cstring>
7#include <memory>
8#include "common/common_types.h"
9#include "common/logging/log.h"
10#include "core/core.h"
11#include "core/file_sys/ncch_container.h"
12#include "core/loader/loader.h"
13
14////////////////////////////////////////////////////////////////////////////////////////////////////
15// FileSys namespace
16
17namespace FileSys {
18
19static const int kMaxSections = 8; ///< Maximum number of sections (files) in an ExeFs
20static const int kBlockSize = 0x200; ///< Size of ExeFS blocks (in bytes)
21
22/**
23 * Get the decompressed size of an LZSS compressed ExeFS file
24 * @param buffer Buffer of compressed file
25 * @param size Size of compressed buffer
26 * @return Size of decompressed buffer
27 */
28static u32 LZSS_GetDecompressedSize(const u8* buffer, u32 size) {
29 u32 offset_size = *(u32*)(buffer + size - 4);
30 return offset_size + size;
31}
32
33/**
34 * Decompress ExeFS file (compressed with LZSS)
35 * @param compressed Compressed buffer
36 * @param compressed_size Size of compressed buffer
37 * @param decompressed Decompressed buffer
38 * @param decompressed_size Size of decompressed buffer
39 * @return True on success, otherwise false
40 */
41static bool LZSS_Decompress(const u8* compressed, u32 compressed_size, u8* decompressed,
42 u32 decompressed_size) {
43 const u8* footer = compressed + compressed_size - 8;
44 u32 buffer_top_and_bottom = *reinterpret_cast<const u32*>(footer);
45 u32 out = decompressed_size;
46 u32 index = compressed_size - ((buffer_top_and_bottom >> 24) & 0xFF);
47 u32 stop_index = compressed_size - (buffer_top_and_bottom & 0xFFFFFF);
48
49 memset(decompressed, 0, decompressed_size);
50 memcpy(decompressed, compressed, compressed_size);
51
52 while (index > stop_index) {
53 u8 control = compressed[--index];
54
55 for (unsigned i = 0; i < 8; i++) {
56 if (index <= stop_index)
57 break;
58 if (index <= 0)
59 break;
60 if (out <= 0)
61 break;
62
63 if (control & 0x80) {
64 // Check if compression is out of bounds
65 if (index < 2)
66 return false;
67 index -= 2;
68
69 u32 segment_offset = compressed[index] | (compressed[index + 1] << 8);
70 u32 segment_size = ((segment_offset >> 12) & 15) + 3;
71 segment_offset &= 0x0FFF;
72 segment_offset += 2;
73
74 // Check if compression is out of bounds
75 if (out < segment_size)
76 return false;
77
78 for (unsigned j = 0; j < segment_size; j++) {
79 // Check if compression is out of bounds
80 if (out + segment_offset >= decompressed_size)
81 return false;
82
83 u8 data = decompressed[out + segment_offset];
84 decompressed[--out] = data;
85 }
86 } else {
87 // Check if compression is out of bounds
88 if (out < 1)
89 return false;
90 decompressed[--out] = compressed[--index];
91 }
92 control <<= 1;
93 }
94 }
95 return true;
96}
97
98NCCHContainer::NCCHContainer(const std::string& filepath) : filepath(filepath) {
99 file = FileUtil::IOFile(filepath, "rb");
100}
101
102Loader::ResultStatus NCCHContainer::OpenFile(const std::string& filepath) {
103 this->filepath = filepath;
104 file = FileUtil::IOFile(filepath, "rb");
105
106 if (!file.IsOpen()) {
107 LOG_WARNING(Service_FS, "Failed to open %s", filepath.c_str());
108 return Loader::ResultStatus::Error;
109 }
110
111 LOG_DEBUG(Service_FS, "Opened %s", filepath.c_str());
112 return Loader::ResultStatus::Success;
113}
114
115Loader::ResultStatus NCCHContainer::Load() {
116 if (is_loaded)
117 return Loader::ResultStatus::Success;
118
119 if (file.IsOpen()) {
120 // Reset read pointer in case this file has been read before.
121 file.Seek(0, SEEK_SET);
122
123 if (file.ReadBytes(&ncch_header, sizeof(NCCH_Header)) != sizeof(NCCH_Header))
124 return Loader::ResultStatus::Error;
125
126 // Skip NCSD header and load first NCCH (NCSD is just a container of NCCH files)...
127 if (Loader::MakeMagic('N', 'C', 'S', 'D') == ncch_header.magic) {
128 LOG_DEBUG(Service_FS, "Only loading the first (bootable) NCCH within the NCSD file!");
129 ncch_offset = 0x4000;
130 file.Seek(ncch_offset, SEEK_SET);
131 file.ReadBytes(&ncch_header, sizeof(NCCH_Header));
132 }
133
134 // Verify we are loading the correct file type...
135 if (Loader::MakeMagic('N', 'C', 'C', 'H') != ncch_header.magic)
136 return Loader::ResultStatus::ErrorInvalidFormat;
137
138 has_header = true;
139
140 // System archives and DLC don't have an extended header but have RomFS
141 if (ncch_header.extended_header_size) {
142 if (file.ReadBytes(&exheader_header, sizeof(ExHeader_Header)) !=
143 sizeof(ExHeader_Header))
144 return Loader::ResultStatus::Error;
145
146 is_compressed = (exheader_header.codeset_info.flags.flag & 1) == 1;
147 u32 entry_point = exheader_header.codeset_info.text.address;
148 u32 code_size = exheader_header.codeset_info.text.code_size;
149 u32 stack_size = exheader_header.codeset_info.stack_size;
150 u32 bss_size = exheader_header.codeset_info.bss_size;
151 u32 core_version = exheader_header.arm11_system_local_caps.core_version;
152 u8 priority = exheader_header.arm11_system_local_caps.priority;
153 u8 resource_limit_category =
154 exheader_header.arm11_system_local_caps.resource_limit_category;
155
156 LOG_DEBUG(Service_FS, "Name: %s",
157 exheader_header.codeset_info.name);
158 LOG_DEBUG(Service_FS, "Program ID: %016" PRIX64,
159 ncch_header.program_id);
160 LOG_DEBUG(Service_FS, "Code compressed: %s", is_compressed ? "yes" : "no");
161 LOG_DEBUG(Service_FS, "Entry point: 0x%08X", entry_point);
162 LOG_DEBUG(Service_FS, "Code size: 0x%08X", code_size);
163 LOG_DEBUG(Service_FS, "Stack size: 0x%08X", stack_size);
164 LOG_DEBUG(Service_FS, "Bss size: 0x%08X", bss_size);
165 LOG_DEBUG(Service_FS, "Core version: %d", core_version);
166 LOG_DEBUG(Service_FS, "Thread priority: 0x%X", priority);
167 LOG_DEBUG(Service_FS, "Resource limit category: %d", resource_limit_category);
168 LOG_DEBUG(Service_FS, "System Mode: %d",
169 static_cast<int>(exheader_header.arm11_system_local_caps.system_mode));
170
171 if (exheader_header.system_info.jump_id != ncch_header.program_id) {
172 LOG_ERROR(Service_FS,
173 "ExHeader Program ID mismatch: the ROM is probably encrypted.");
174 return Loader::ResultStatus::ErrorEncrypted;
175 }
176
177 has_exheader = true;
178 }
179
180 // DLC can have an ExeFS and a RomFS but no extended header
181 if (ncch_header.exefs_size) {
182 exefs_offset = ncch_header.exefs_offset * kBlockSize;
183 u32 exefs_size = ncch_header.exefs_size * kBlockSize;
184
185 LOG_DEBUG(Service_FS, "ExeFS offset: 0x%08X", exefs_offset);
186 LOG_DEBUG(Service_FS, "ExeFS size: 0x%08X", exefs_size);
187
188 file.Seek(exefs_offset + ncch_offset, SEEK_SET);
189 if (file.ReadBytes(&exefs_header, sizeof(ExeFs_Header)) != sizeof(ExeFs_Header))
190 return Loader::ResultStatus::Error;
191
192 exefs_file = FileUtil::IOFile(filepath, "rb");
193 has_exefs = true;
194 }
195
196 if (ncch_header.romfs_offset != 0 && ncch_header.romfs_size != 0)
197 has_romfs = true;
198 }
199
200 LoadOverrides();
201
202 // We need at least one of these or overrides, practically
203 if (!(has_exefs || has_romfs || is_tainted))
204 return Loader::ResultStatus::Error;
205
206 is_loaded = true;
207 return Loader::ResultStatus::Success;
208}
209
210Loader::ResultStatus NCCHContainer::LoadOverrides() {
211 // Check for split-off files, mark the archive as tainted if we will use them
212 std::string romfs_override = filepath + ".romfs";
213 if (FileUtil::Exists(romfs_override)) {
214 is_tainted = true;
215 }
216
217 // If we have a split-off exefs file/folder, it takes priority
218 std::string exefs_override = filepath + ".exefs";
219 std::string exefsdir_override = filepath + ".exefsdir/";
220 if (FileUtil::Exists(exefs_override)) {
221 exefs_file = FileUtil::IOFile(exefs_override, "rb");
222
223 if (exefs_file.ReadBytes(&exefs_header, sizeof(ExeFs_Header)) == sizeof(ExeFs_Header)) {
224 LOG_DEBUG(Service_FS, "Loading ExeFS section from %s", exefs_override.c_str());
225 exefs_offset = 0;
226 is_tainted = true;
227 has_exefs = true;
228 } else {
229 exefs_file = FileUtil::IOFile(filepath, "rb");
230 }
231 } else if (FileUtil::Exists(exefsdir_override) && FileUtil::IsDirectory(exefsdir_override)) {
232 is_tainted = true;
233 }
234
235 if (is_tainted)
236 LOG_WARNING(Service_FS,
237 "Loaded NCCH %s is tainted, application behavior may not be as expected!",
238 filepath.c_str());
239
240 return Loader::ResultStatus::Success;
241}
242
243Loader::ResultStatus NCCHContainer::LoadSectionExeFS(const char* name, std::vector<u8>& buffer) {
244 Loader::ResultStatus result = Load();
245 if (result != Loader::ResultStatus::Success)
246 return result;
247
248 // Check if we have files that can drop-in and replace
249 result = LoadOverrideExeFSSection(name, buffer);
250 if (result == Loader::ResultStatus::Success || !has_exefs)
251 return result;
252
253 // If we don't have any separate files, we'll need a full ExeFS
254 if (!exefs_file.IsOpen())
255 return Loader::ResultStatus::Error;
256
257 LOG_DEBUG(Service_FS, "%d sections:", kMaxSections);
258 // Iterate through the ExeFs archive until we find a section with the specified name...
259 for (unsigned section_number = 0; section_number < kMaxSections; section_number++) {
260 const auto& section = exefs_header.section[section_number];
261
262 // Load the specified section...
263 if (strcmp(section.name, name) == 0) {
264 LOG_DEBUG(Service_FS, "%d - offset: 0x%08X, size: 0x%08X, name: %s", section_number,
265 section.offset, section.size, section.name);
266
267 s64 section_offset =
268 (section.offset + exefs_offset + sizeof(ExeFs_Header) + ncch_offset);
269 exefs_file.Seek(section_offset, SEEK_SET);
270
271 if (strcmp(section.name, ".code") == 0 && is_compressed) {
272 // Section is compressed, read compressed .code section...
273 std::unique_ptr<u8[]> temp_buffer;
274 try {
275 temp_buffer.reset(new u8[section.size]);
276 } catch (std::bad_alloc&) {
277 return Loader::ResultStatus::ErrorMemoryAllocationFailed;
278 }
279
280 if (exefs_file.ReadBytes(&temp_buffer[0], section.size) != section.size)
281 return Loader::ResultStatus::Error;
282
283 // Decompress .code section...
284 u32 decompressed_size = LZSS_GetDecompressedSize(&temp_buffer[0], section.size);
285 buffer.resize(decompressed_size);
286 if (!LZSS_Decompress(&temp_buffer[0], section.size, &buffer[0], decompressed_size))
287 return Loader::ResultStatus::ErrorInvalidFormat;
288 } else {
289 // Section is uncompressed...
290 buffer.resize(section.size);
291 if (exefs_file.ReadBytes(&buffer[0], section.size) != section.size)
292 return Loader::ResultStatus::Error;
293 }
294 return Loader::ResultStatus::Success;
295 }
296 }
297 return Loader::ResultStatus::ErrorNotUsed;
298}
299
300Loader::ResultStatus NCCHContainer::LoadOverrideExeFSSection(const char* name,
301 std::vector<u8>& buffer) {
302 std::string override_name;
303
304 // Map our section name to the extracted equivalent
305 if (!strcmp(name, ".code"))
306 override_name = "code.bin";
307 else if (!strcmp(name, "icon"))
308 override_name = "code.bin";
309 else if (!strcmp(name, "banner"))
310 override_name = "banner.bnr";
311 else if (!strcmp(name, "logo"))
312 override_name = "logo.bcma.lz";
313 else
314 return Loader::ResultStatus::Error;
315
316 std::string section_override = filepath + ".exefsdir/" + override_name;
317 FileUtil::IOFile section_file(section_override, "rb");
318
319 if (section_file.IsOpen()) {
320 auto section_size = section_file.GetSize();
321 buffer.resize(section_size);
322
323 section_file.Seek(0, SEEK_SET);
324 if (section_file.ReadBytes(&buffer[0], section_size) == section_size) {
325 LOG_WARNING(Service_FS, "File %s overriding built-in ExeFS file",
326 section_override.c_str());
327 return Loader::ResultStatus::Success;
328 }
329 }
330 return Loader::ResultStatus::ErrorNotUsed;
331}
332
333Loader::ResultStatus NCCHContainer::ReadRomFS(std::shared_ptr<FileUtil::IOFile>& romfs_file,
334 u64& offset, u64& size) {
335 Loader::ResultStatus result = Load();
336 if (result != Loader::ResultStatus::Success)
337 return result;
338
339 if (ReadOverrideRomFS(romfs_file, offset, size) == Loader::ResultStatus::Success)
340 return Loader::ResultStatus::Success;
341
342 if (!has_romfs) {
343 LOG_DEBUG(Service_FS, "RomFS requested from NCCH which has no RomFS");
344 return Loader::ResultStatus::ErrorNotUsed;
345 }
346
347 if (!file.IsOpen())
348 return Loader::ResultStatus::Error;
349
350 u32 romfs_offset = ncch_offset + (ncch_header.romfs_offset * kBlockSize) + 0x1000;
351 u32 romfs_size = (ncch_header.romfs_size * kBlockSize) - 0x1000;
352
353 LOG_DEBUG(Service_FS, "RomFS offset: 0x%08X", romfs_offset);
354 LOG_DEBUG(Service_FS, "RomFS size: 0x%08X", romfs_size);
355
356 if (file.GetSize() < romfs_offset + romfs_size)
357 return Loader::ResultStatus::Error;
358
359 // We reopen the file, to allow its position to be independent from file's
360 romfs_file = std::make_shared<FileUtil::IOFile>(filepath, "rb");
361 if (!romfs_file->IsOpen())
362 return Loader::ResultStatus::Error;
363
364 offset = romfs_offset;
365 size = romfs_size;
366
367 return Loader::ResultStatus::Success;
368}
369
370Loader::ResultStatus NCCHContainer::ReadOverrideRomFS(std::shared_ptr<FileUtil::IOFile>& romfs_file,
371 u64& offset, u64& size) {
372 // Check for RomFS overrides
373 std::string split_filepath = filepath + ".romfs";
374 if (FileUtil::Exists(split_filepath)) {
375 romfs_file = std::make_shared<FileUtil::IOFile>(split_filepath, "rb");
376 if (romfs_file->IsOpen()) {
377 LOG_WARNING(Service_FS, "File %s overriding built-in RomFS", split_filepath.c_str());
378 offset = 0;
379 size = romfs_file->GetSize();
380 return Loader::ResultStatus::Success;
381 }
382 }
383
384 return Loader::ResultStatus::ErrorNotUsed;
385}
386
387Loader::ResultStatus NCCHContainer::ReadProgramId(u64_le& program_id) {
388 Loader::ResultStatus result = Load();
389 if (result != Loader::ResultStatus::Success)
390 return result;
391
392 if (!has_header)
393 return Loader::ResultStatus::ErrorNotUsed;
394
395 program_id = ncch_header.program_id;
396 return Loader::ResultStatus::Success;
397}
398
399bool NCCHContainer::HasExeFS() {
400 Loader::ResultStatus result = Load();
401 if (result != Loader::ResultStatus::Success)
402 return false;
403
404 return has_exefs;
405}
406
407bool NCCHContainer::HasRomFS() {
408 Loader::ResultStatus result = Load();
409 if (result != Loader::ResultStatus::Success)
410 return false;
411
412 return has_romfs;
413}
414
415bool NCCHContainer::HasExHeader() {
416 Loader::ResultStatus result = Load();
417 if (result != Loader::ResultStatus::Success)
418 return false;
419
420 return has_exheader;
421}
422
423} // namespace FileSys
diff --git a/src/core/file_sys/ncch_container.h b/src/core/file_sys/ncch_container.h
new file mode 100644
index 000000000..2cc9d13dc
--- /dev/null
+++ b/src/core/file_sys/ncch_container.h
@@ -0,0 +1,274 @@
1// Copyright 2017 Citra Emulator Project
2// Licensed under GPLv2 or any later version
3// Refer to the license.txt file included.
4
5#pragma once
6
7#include <cstddef>
8#include <memory>
9#include <string>
10#include <vector>
11#include "common/bit_field.h"
12#include "common/common_types.h"
13#include "common/file_util.h"
14#include "common/swap.h"
15#include "core/core.h"
16
17////////////////////////////////////////////////////////////////////////////////////////////////////
18/// NCCH header (Note: "NCCH" appears to be a publicly unknown acronym)
19
20struct NCCH_Header {
21 u8 signature[0x100];
22 u32_le magic;
23 u32_le content_size;
24 u8 partition_id[8];
25 u16_le maker_code;
26 u16_le version;
27 u8 reserved_0[4];
28 u64_le program_id;
29 u8 reserved_1[0x10];
30 u8 logo_region_hash[0x20];
31 u8 product_code[0x10];
32 u8 extended_header_hash[0x20];
33 u32_le extended_header_size;
34 u8 reserved_2[4];
35 u8 flags[8];
36 u32_le plain_region_offset;
37 u32_le plain_region_size;
38 u32_le logo_region_offset;
39 u32_le logo_region_size;
40 u32_le exefs_offset;
41 u32_le exefs_size;
42 u32_le exefs_hash_region_size;
43 u8 reserved_3[4];
44 u32_le romfs_offset;
45 u32_le romfs_size;
46 u32_le romfs_hash_region_size;
47 u8 reserved_4[4];
48 u8 exefs_super_block_hash[0x20];
49 u8 romfs_super_block_hash[0x20];
50};
51
52static_assert(sizeof(NCCH_Header) == 0x200, "NCCH header structure size is wrong");
53
54////////////////////////////////////////////////////////////////////////////////////////////////////
55// ExeFS (executable file system) headers
56
57struct ExeFs_SectionHeader {
58 char name[8];
59 u32 offset;
60 u32 size;
61};
62
63struct ExeFs_Header {
64 ExeFs_SectionHeader section[8];
65 u8 reserved[0x80];
66 u8 hashes[8][0x20];
67};
68
69////////////////////////////////////////////////////////////////////////////////////////////////////
70// ExHeader (executable file system header) headers
71
72struct ExHeader_SystemInfoFlags {
73 u8 reserved[5];
74 u8 flag;
75 u8 remaster_version[2];
76};
77
78struct ExHeader_CodeSegmentInfo {
79 u32 address;
80 u32 num_max_pages;
81 u32 code_size;
82};
83
84struct ExHeader_CodeSetInfo {
85 u8 name[8];
86 ExHeader_SystemInfoFlags flags;
87 ExHeader_CodeSegmentInfo text;
88 u32 stack_size;
89 ExHeader_CodeSegmentInfo ro;
90 u8 reserved[4];
91 ExHeader_CodeSegmentInfo data;
92 u32 bss_size;
93};
94
95struct ExHeader_DependencyList {
96 u8 program_id[0x30][8];
97};
98
99struct ExHeader_SystemInfo {
100 u64 save_data_size;
101 u64_le jump_id;
102 u8 reserved_2[0x30];
103};
104
105struct ExHeader_StorageInfo {
106 u8 ext_save_data_id[8];
107 u8 system_save_data_id[8];
108 u8 reserved[8];
109 u8 access_info[7];
110 u8 other_attributes;
111};
112
113struct ExHeader_ARM11_SystemLocalCaps {
114 u64_le program_id;
115 u32_le core_version;
116 u8 reserved_flags[2];
117 union {
118 u8 flags0;
119 BitField<0, 2, u8> ideal_processor;
120 BitField<2, 2, u8> affinity_mask;
121 BitField<4, 4, u8> system_mode;
122 };
123 u8 priority;
124 u8 resource_limit_descriptor[0x10][2];
125 ExHeader_StorageInfo storage_info;
126 u8 service_access_control[0x20][8];
127 u8 ex_service_access_control[0x2][8];
128 u8 reserved[0xf];
129 u8 resource_limit_category;
130};
131
132struct ExHeader_ARM11_KernelCaps {
133 u32_le descriptors[28];
134 u8 reserved[0x10];
135};
136
137struct ExHeader_ARM9_AccessControl {
138 u8 descriptors[15];
139 u8 descversion;
140};
141
142struct ExHeader_Header {
143 ExHeader_CodeSetInfo codeset_info;
144 ExHeader_DependencyList dependency_list;
145 ExHeader_SystemInfo system_info;
146 ExHeader_ARM11_SystemLocalCaps arm11_system_local_caps;
147 ExHeader_ARM11_KernelCaps arm11_kernel_caps;
148 ExHeader_ARM9_AccessControl arm9_access_control;
149 struct {
150 u8 signature[0x100];
151 u8 ncch_public_key_modulus[0x100];
152 ExHeader_ARM11_SystemLocalCaps arm11_system_local_caps;
153 ExHeader_ARM11_KernelCaps arm11_kernel_caps;
154 ExHeader_ARM9_AccessControl arm9_access_control;
155 } access_desc;
156};
157
158static_assert(sizeof(ExHeader_Header) == 0x800, "ExHeader structure size is wrong");
159
160////////////////////////////////////////////////////////////////////////////////////////////////////
161// FileSys namespace
162
163namespace FileSys {
164
165/**
166 * Helper which implements an interface to deal with NCCH containers which can
167 * contain ExeFS archives or RomFS archives for games or other applications.
168 */
169class NCCHContainer {
170public:
171 NCCHContainer(const std::string& filepath);
172 NCCHContainer() {}
173
174 Loader::ResultStatus OpenFile(const std::string& filepath);
175
176 /**
177 * Ensure ExeFS and exheader is loaded and ready for reading sections
178 * @return ResultStatus result of function
179 */
180 Loader::ResultStatus Load();
181
182 /**
183 * Attempt to find overridden sections for the NCCH and mark the container as tainted
184 * if any are found.
185 * @return ResultStatus result of function
186 */
187 Loader::ResultStatus LoadOverrides();
188
189 /**
190 * Reads an application ExeFS section of an NCCH file (e.g. .code, .logo, etc.)
191 * @param name Name of section to read out of NCCH file
192 * @param buffer Vector to read data into
193 * @return ResultStatus result of function
194 */
195 Loader::ResultStatus LoadSectionExeFS(const char* name, std::vector<u8>& buffer);
196
197 /**
198 * Reads an application ExeFS section from external files instead of an NCCH file,
199 * (e.g. code.bin, logo.bcma.lz, icon.icn, banner.bnr)
200 * @param name Name of section to read from external files
201 * @param buffer Vector to read data into
202 * @return ResultStatus result of function
203 */
204 Loader::ResultStatus LoadOverrideExeFSSection(const char* name, std::vector<u8>& buffer);
205
206 /**
207 * Get the RomFS of the NCCH container
208 * Since the RomFS can be huge, we return a file reference instead of copying to a buffer
209 * @param romfs_file The file containing the RomFS
210 * @param offset The offset the romfs begins on
211 * @param size The size of the romfs
212 * @return ResultStatus result of function
213 */
214 Loader::ResultStatus ReadRomFS(std::shared_ptr<FileUtil::IOFile>& romfs_file, u64& offset,
215 u64& size);
216
217 /**
218 * Get the override RomFS of the NCCH container
219 * Since the RomFS can be huge, we return a file reference instead of copying to a buffer
220 * @param romfs_file The file containing the RomFS
221 * @param offset The offset the romfs begins on
222 * @param size The size of the romfs
223 * @return ResultStatus result of function
224 */
225 Loader::ResultStatus ReadOverrideRomFS(std::shared_ptr<FileUtil::IOFile>& romfs_file,
226 u64& offset, u64& size);
227
228 /**
229 * Get the Program ID of the NCCH container
230 * @return ResultStatus result of function
231 */
232 Loader::ResultStatus ReadProgramId(u64_le& program_id);
233
234 /**
235 * Checks whether the NCCH container contains an ExeFS
236 * @return bool check result
237 */
238 bool HasExeFS();
239
240 /**
241 * Checks whether the NCCH container contains a RomFS
242 * @return bool check result
243 */
244 bool HasRomFS();
245
246 /**
247 * Checks whether the NCCH container contains an ExHeader
248 * @return bool check result
249 */
250 bool HasExHeader();
251
252 NCCH_Header ncch_header;
253 ExeFs_Header exefs_header;
254 ExHeader_Header exheader_header;
255
256private:
257 bool has_header = false;
258 bool has_exheader = false;
259 bool has_exefs = false;
260 bool has_romfs = false;
261
262 bool is_tainted = false; // Are there parts of this container being overridden?
263 bool is_loaded = false;
264 bool is_compressed = false;
265
266 u32 ncch_offset = 0; // Offset to NCCH header, can be 0 or after NCSD header
267 u32 exefs_offset = 0;
268
269 std::string filepath;
270 FileUtil::IOFile file;
271 FileUtil::IOFile exefs_file;
272};
273
274} // namespace FileSys
diff --git a/src/core/file_sys/savedata_archive.cpp b/src/core/file_sys/savedata_archive.cpp
index f540c4a93..f8f811ba0 100644
--- a/src/core/file_sys/savedata_archive.cpp
+++ b/src/core/file_sys/savedata_archive.cpp
@@ -106,7 +106,25 @@ ResultCode SaveDataArchive::DeleteFile(const Path& path) const {
106} 106}
107 107
108ResultCode SaveDataArchive::RenameFile(const Path& src_path, const Path& dest_path) const { 108ResultCode SaveDataArchive::RenameFile(const Path& src_path, const Path& dest_path) const {
109 if (FileUtil::Rename(mount_point + src_path.AsString(), mount_point + dest_path.AsString())) { 109 const PathParser path_parser_src(src_path);
110
111 // TODO: Verify these return codes with HW
112 if (!path_parser_src.IsValid()) {
113 LOG_ERROR(Service_FS, "Invalid src path %s", src_path.DebugStr().c_str());
114 return ERROR_INVALID_PATH;
115 }
116
117 const PathParser path_parser_dest(dest_path);
118
119 if (!path_parser_dest.IsValid()) {
120 LOG_ERROR(Service_FS, "Invalid dest path %s", dest_path.DebugStr().c_str());
121 return ERROR_INVALID_PATH;
122 }
123
124 const auto src_path_full = path_parser_src.BuildHostPath(mount_point);
125 const auto dest_path_full = path_parser_dest.BuildHostPath(mount_point);
126
127 if (FileUtil::Rename(src_path_full, dest_path_full)) {
110 return RESULT_SUCCESS; 128 return RESULT_SUCCESS;
111 } 129 }
112 130
@@ -247,8 +265,27 @@ ResultCode SaveDataArchive::CreateDirectory(const Path& path) const {
247} 265}
248 266
249ResultCode SaveDataArchive::RenameDirectory(const Path& src_path, const Path& dest_path) const { 267ResultCode SaveDataArchive::RenameDirectory(const Path& src_path, const Path& dest_path) const {
250 if (FileUtil::Rename(mount_point + src_path.AsString(), mount_point + dest_path.AsString())) 268 const PathParser path_parser_src(src_path);
269
270 // TODO: Verify these return codes with HW
271 if (!path_parser_src.IsValid()) {
272 LOG_ERROR(Service_FS, "Invalid src path %s", src_path.DebugStr().c_str());
273 return ERROR_INVALID_PATH;
274 }
275
276 const PathParser path_parser_dest(dest_path);
277
278 if (!path_parser_dest.IsValid()) {
279 LOG_ERROR(Service_FS, "Invalid dest path %s", dest_path.DebugStr().c_str());
280 return ERROR_INVALID_PATH;
281 }
282
283 const auto src_path_full = path_parser_src.BuildHostPath(mount_point);
284 const auto dest_path_full = path_parser_dest.BuildHostPath(mount_point);
285
286 if (FileUtil::Rename(src_path_full, dest_path_full)) {
251 return RESULT_SUCCESS; 287 return RESULT_SUCCESS;
288 }
252 289
253 // TODO(yuriks): This code probably isn't right, it'll return a Status even if the file didn't 290 // TODO(yuriks): This code probably isn't right, it'll return a Status even if the file didn't
254 // exist or similar. Verify. 291 // exist or similar. Verify.
diff --git a/src/core/file_sys/title_metadata.cpp b/src/core/file_sys/title_metadata.cpp
new file mode 100644
index 000000000..1ef8840a0
--- /dev/null
+++ b/src/core/file_sys/title_metadata.cpp
@@ -0,0 +1,212 @@
1// Copyright 2017 Citra Emulator Project
2// Licensed under GPLv2 or any later version
3// Refer to the license.txt file included.
4
5#include <cinttypes>
6#include <cryptopp/sha.h>
7#include "common/alignment.h"
8#include "common/file_util.h"
9#include "common/logging/log.h"
10#include "core/file_sys/title_metadata.h"
11#include "core/loader/loader.h"
12
13////////////////////////////////////////////////////////////////////////////////////////////////////
14// FileSys namespace
15
16namespace FileSys {
17
18static u32 GetSignatureSize(u32 signature_type) {
19 switch (signature_type) {
20 case Rsa4096Sha1:
21 case Rsa4096Sha256:
22 return 0x200;
23
24 case Rsa2048Sha1:
25 case Rsa2048Sha256:
26 return 0x100;
27
28 case EllipticSha1:
29 case EcdsaSha256:
30 return 0x3C;
31 }
32}
33
34Loader::ResultStatus TitleMetadata::Load() {
35 FileUtil::IOFile file(filepath, "rb");
36 if (!file.IsOpen())
37 return Loader::ResultStatus::Error;
38
39 if (!file.ReadBytes(&signature_type, sizeof(u32_be)))
40 return Loader::ResultStatus::Error;
41
42 // Signature lengths are variable, and the body follows the signature
43 u32 signature_size = GetSignatureSize(signature_type);
44
45 tmd_signature.resize(signature_size);
46 if (!file.ReadBytes(&tmd_signature[0], signature_size))
47 return Loader::ResultStatus::Error;
48
49 // The TMD body start position is rounded to the nearest 0x40 after the signature
50 size_t body_start = Common::AlignUp(signature_size + sizeof(u32), 0x40);
51 file.Seek(body_start, SEEK_SET);
52
53 // Read our TMD body, then load the amount of ContentChunks specified
54 if (file.ReadBytes(&tmd_body, sizeof(TitleMetadata::Body)) != sizeof(TitleMetadata::Body))
55 return Loader::ResultStatus::Error;
56
57 for (u16 i = 0; i < tmd_body.content_count; i++) {
58 ContentChunk chunk;
59 if (file.ReadBytes(&chunk, sizeof(ContentChunk)) == sizeof(ContentChunk)) {
60 tmd_chunks.push_back(chunk);
61 } else {
62 LOG_ERROR(Service_FS, "Malformed TMD %s, failed to load content chunk index %u!",
63 filepath.c_str(), i);
64 return Loader::ResultStatus::ErrorInvalidFormat;
65 }
66 }
67
68 return Loader::ResultStatus::Success;
69}
70
71Loader::ResultStatus TitleMetadata::Save() {
72 FileUtil::IOFile file(filepath, "wb");
73 if (!file.IsOpen())
74 return Loader::ResultStatus::Error;
75
76 if (!file.WriteBytes(&signature_type, sizeof(u32_be)))
77 return Loader::ResultStatus::Error;
78
79 // Signature lengths are variable, and the body follows the signature
80 u32 signature_size = GetSignatureSize(signature_type);
81
82 if (!file.WriteBytes(tmd_signature.data(), signature_size))
83 return Loader::ResultStatus::Error;
84
85 // The TMD body start position is rounded to the nearest 0x40 after the signature
86 size_t body_start = Common::AlignUp(signature_size + sizeof(u32), 0x40);
87 file.Seek(body_start, SEEK_SET);
88
89 // Update our TMD body values and hashes
90 tmd_body.content_count = static_cast<u16>(tmd_chunks.size());
91
92 // TODO(shinyquagsire23): Do TMDs with more than one contentinfo exist?
93 // For now we'll just adjust the first index to hold all content chunks
94 // and ensure that no further content info data exists.
95 tmd_body.contentinfo = {};
96 tmd_body.contentinfo[0].index = 0;
97 tmd_body.contentinfo[0].command_count = static_cast<u16>(tmd_chunks.size());
98
99 CryptoPP::SHA256 chunk_hash;
100 for (u16 i = 0; i < tmd_body.content_count; i++) {
101 chunk_hash.Update(reinterpret_cast<u8*>(&tmd_chunks[i]), sizeof(ContentChunk));
102 }
103 chunk_hash.Final(tmd_body.contentinfo[0].hash.data());
104
105 CryptoPP::SHA256 contentinfo_hash;
106 for (size_t i = 0; i < tmd_body.contentinfo.size(); i++) {
107 chunk_hash.Update(reinterpret_cast<u8*>(&tmd_body.contentinfo[i]), sizeof(ContentInfo));
108 }
109 chunk_hash.Final(tmd_body.contentinfo_hash.data());
110
111 // Write our TMD body, then write each of our ContentChunks
112 if (file.WriteBytes(&tmd_body, sizeof(TitleMetadata::Body)) != sizeof(TitleMetadata::Body))
113 return Loader::ResultStatus::Error;
114
115 for (u16 i = 0; i < tmd_body.content_count; i++) {
116 ContentChunk chunk = tmd_chunks[i];
117 if (file.WriteBytes(&chunk, sizeof(ContentChunk)) != sizeof(ContentChunk))
118 return Loader::ResultStatus::Error;
119 }
120
121 return Loader::ResultStatus::Success;
122}
123
124u64 TitleMetadata::GetTitleID() const {
125 return tmd_body.title_id;
126}
127
128u32 TitleMetadata::GetTitleType() const {
129 return tmd_body.title_type;
130}
131
132u16 TitleMetadata::GetTitleVersion() const {
133 return tmd_body.title_version;
134}
135
136u64 TitleMetadata::GetSystemVersion() const {
137 return tmd_body.system_version;
138}
139
140size_t TitleMetadata::GetContentCount() const {
141 return tmd_chunks.size();
142}
143
144u32 TitleMetadata::GetBootContentID() const {
145 return tmd_chunks[TMDContentIndex::Main].id;
146}
147
148u32 TitleMetadata::GetManualContentID() const {
149 return tmd_chunks[TMDContentIndex::Manual].id;
150}
151
152u32 TitleMetadata::GetDLPContentID() const {
153 return tmd_chunks[TMDContentIndex::DLP].id;
154}
155
156void TitleMetadata::SetTitleID(u64 title_id) {
157 tmd_body.title_id = title_id;
158}
159
160void TitleMetadata::SetTitleType(u32 type) {
161 tmd_body.title_type = type;
162}
163
164void TitleMetadata::SetTitleVersion(u16 version) {
165 tmd_body.title_version = version;
166}
167
168void TitleMetadata::SetSystemVersion(u64 version) {
169 tmd_body.system_version = version;
170}
171
172void TitleMetadata::AddContentChunk(const ContentChunk& chunk) {
173 tmd_chunks.push_back(chunk);
174}
175
176void TitleMetadata::Print() const {
177 LOG_DEBUG(Service_FS, "%s - %u chunks", filepath.c_str(),
178 static_cast<u32>(tmd_body.content_count));
179
180 // Content info describes ranges of content chunks
181 LOG_DEBUG(Service_FS, "Content info:");
182 for (size_t i = 0; i < tmd_body.contentinfo.size(); i++) {
183 if (tmd_body.contentinfo[i].command_count == 0)
184 break;
185
186 LOG_DEBUG(Service_FS, " Index %04X, Command Count %04X",
187 static_cast<u32>(tmd_body.contentinfo[i].index),
188 static_cast<u32>(tmd_body.contentinfo[i].command_count));
189 }
190
191 // For each content info, print their content chunk range
192 for (size_t i = 0; i < tmd_body.contentinfo.size(); i++) {
193 u16 index = static_cast<u16>(tmd_body.contentinfo[i].index);
194 u16 count = static_cast<u16>(tmd_body.contentinfo[i].command_count);
195
196 if (count == 0)
197 continue;
198
199 LOG_DEBUG(Service_FS, "Content chunks for content info index %zu:", i);
200 for (u16 j = index; j < index + count; j++) {
201 // Don't attempt to print content we don't have
202 if (j > tmd_body.content_count)
203 break;
204
205 const ContentChunk& chunk = tmd_chunks[j];
206 LOG_DEBUG(Service_FS, " ID %08X, Index %04X, Type %04x, Size %016" PRIX64,
207 static_cast<u32>(chunk.id), static_cast<u32>(chunk.index),
208 static_cast<u32>(chunk.type), static_cast<u64>(chunk.size));
209 }
210 }
211}
212} // namespace FileSys
diff --git a/src/core/file_sys/title_metadata.h b/src/core/file_sys/title_metadata.h
new file mode 100644
index 000000000..1fc157bf3
--- /dev/null
+++ b/src/core/file_sys/title_metadata.h
@@ -0,0 +1,125 @@
1// Copyright 2017 Citra Emulator Project
2// Licensed under GPLv2 or any later version
3// Refer to the license.txt file included.
4
5#pragma once
6
7#include <string>
8#include <vector>
9#include "common/common_types.h"
10#include "common/swap.h"
11
12namespace Loader {
13enum class ResultStatus;
14}
15
16////////////////////////////////////////////////////////////////////////////////////////////////////
17// FileSys namespace
18
19namespace FileSys {
20
21enum TMDSignatureType : u32 {
22 Rsa4096Sha1 = 0x10000,
23 Rsa2048Sha1 = 0x10001,
24 EllipticSha1 = 0x10002,
25 Rsa4096Sha256 = 0x10003,
26 Rsa2048Sha256 = 0x10004,
27 EcdsaSha256 = 0x10005
28};
29
30enum TMDContentTypeFlag : u16 {
31 Encrypted = 1 << 1,
32 Disc = 1 << 2,
33 CFM = 1 << 3,
34 Optional = 1 << 14,
35 Shared = 1 << 15
36};
37
38/**
39 * Helper which implements an interface to read and write Title Metadata (TMD) files.
40 * If a file path is provided and the file exists, it can be parsed and used, otherwise
41 * it must be created. The TMD file can then be interpreted, modified and/or saved.
42 */
43class TitleMetadata {
44public:
45 struct ContentChunk {
46 u32_be id;
47 u16_be index;
48 u16_be type;
49 u64_be size;
50 std::array<u8, 0x20> hash;
51 };
52
53 static_assert(sizeof(ContentChunk) == 0x30, "TMD ContentChunk structure size is wrong");
54
55 struct ContentInfo {
56 u16_be index;
57 u16_be command_count;
58 std::array<u8, 0x20> hash;
59 };
60
61 static_assert(sizeof(ContentInfo) == 0x24, "TMD ContentInfo structure size is wrong");
62
63#pragma pack(push, 1)
64
65 struct Body {
66 std::array<u8, 0x40> issuer;
67 u8 version;
68 u8 ca_crl_version;
69 u8 signer_crl_version;
70 u8 reserved;
71 u64_be system_version;
72 u64_be title_id;
73 u32_be title_type;
74 u16_be group_id;
75 u32_be savedata_size;
76 u32_be srl_private_savedata_size;
77 std::array<u8, 4> reserved_2;
78 u8 srl_flag;
79 std::array<u8, 0x31> reserved_3;
80 u32_be access_rights;
81 u16_be title_version;
82 u16_be content_count;
83 u16_be boot_content;
84 std::array<u8, 2> reserved_4;
85 std::array<u8, 0x20> contentinfo_hash;
86 std::array<ContentInfo, 64> contentinfo;
87 };
88
89 static_assert(sizeof(Body) == 0x9C4, "TMD body structure size is wrong");
90
91#pragma pack(pop)
92
93 explicit TitleMetadata(std::string& path) : filepath(std::move(path)) {}
94 Loader::ResultStatus Load();
95 Loader::ResultStatus Save();
96
97 u64 GetTitleID() const;
98 u32 GetTitleType() const;
99 u16 GetTitleVersion() const;
100 u64 GetSystemVersion() const;
101 size_t GetContentCount() const;
102 u32 GetBootContentID() const;
103 u32 GetManualContentID() const;
104 u32 GetDLPContentID() const;
105
106 void SetTitleID(u64 title_id);
107 void SetTitleType(u32 type);
108 void SetTitleVersion(u16 version);
109 void SetSystemVersion(u64 version);
110 void AddContentChunk(const ContentChunk& chunk);
111
112 void Print() const;
113
114private:
115 enum TMDContentIndex { Main = 0, Manual = 1, DLP = 2 };
116
117 Body tmd_body;
118 u32_be signature_type;
119 std::vector<u8> tmd_signature;
120 std::vector<ContentChunk> tmd_chunks;
121
122 std::string filepath;
123};
124
125} // namespace FileSys
diff --git a/src/core/frontend/emu_window.cpp b/src/core/frontend/emu_window.cpp
index 4f7d54a33..e67394177 100644
--- a/src/core/frontend/emu_window.cpp
+++ b/src/core/frontend/emu_window.cpp
@@ -2,14 +2,55 @@
2// Licensed under GPLv2 or any later version 2// Licensed under GPLv2 or any later version
3// Refer to the license.txt file included. 3// Refer to the license.txt file included.
4 4
5#include <algorithm>
6#include <cmath> 5#include <cmath>
7#include "common/assert.h" 6#include <mutex>
8#include "core/3ds.h"
9#include "core/core.h"
10#include "core/frontend/emu_window.h" 7#include "core/frontend/emu_window.h"
8#include "core/frontend/input.h"
11#include "core/settings.h" 9#include "core/settings.h"
12 10
11class EmuWindow::TouchState : public Input::Factory<Input::TouchDevice>,
12 public std::enable_shared_from_this<TouchState> {
13public:
14 std::unique_ptr<Input::TouchDevice> Create(const Common::ParamPackage&) override {
15 return std::make_unique<Device>(shared_from_this());
16 }
17
18 std::mutex mutex;
19
20 bool touch_pressed = false; ///< True if touchpad area is currently pressed, otherwise false
21
22 float touch_x = 0.0f; ///< Touchpad X-position
23 float touch_y = 0.0f; ///< Touchpad Y-position
24
25private:
26 class Device : public Input::TouchDevice {
27 public:
28 explicit Device(std::weak_ptr<TouchState>&& touch_state) : touch_state(touch_state) {}
29 std::tuple<float, float, bool> GetStatus() const override {
30 if (auto state = touch_state.lock()) {
31 std::lock_guard<std::mutex> guard(state->mutex);
32 return std::make_tuple(state->touch_x, state->touch_y, state->touch_pressed);
33 }
34 return std::make_tuple(0.0f, 0.0f, false);
35 }
36
37 private:
38 std::weak_ptr<TouchState> touch_state;
39 };
40};
41
42EmuWindow::EmuWindow() {
43 // TODO: Find a better place to set this.
44 config.min_client_area_size = std::make_pair(400u, 480u);
45 active_config = config;
46 touch_state = std::make_shared<TouchState>();
47 Input::RegisterFactory<Input::TouchDevice>("emu_window", touch_state);
48}
49
50EmuWindow::~EmuWindow() {
51 Input::UnregisterFactory<Input::TouchDevice>("emu_window");
52}
53
13/** 54/**
14 * Check if the given x/y coordinates are within the touchpad specified by the framebuffer layout 55 * Check if the given x/y coordinates are within the touchpad specified by the framebuffer layout
15 * @param layout FramebufferLayout object describing the framebuffer size and screen positions 56 * @param layout FramebufferLayout object describing the framebuffer size and screen positions
@@ -38,22 +79,26 @@ void EmuWindow::TouchPressed(unsigned framebuffer_x, unsigned framebuffer_y) {
38 if (!IsWithinTouchscreen(framebuffer_layout, framebuffer_x, framebuffer_y)) 79 if (!IsWithinTouchscreen(framebuffer_layout, framebuffer_x, framebuffer_y))
39 return; 80 return;
40 81
41 touch_x = Core::kScreenBottomWidth * (framebuffer_x - framebuffer_layout.bottom_screen.left) / 82 std::lock_guard<std::mutex> guard(touch_state->mutex);
42 (framebuffer_layout.bottom_screen.right - framebuffer_layout.bottom_screen.left); 83 touch_state->touch_x =
43 touch_y = Core::kScreenBottomHeight * (framebuffer_y - framebuffer_layout.bottom_screen.top) / 84 static_cast<float>(framebuffer_x - framebuffer_layout.bottom_screen.left) /
44 (framebuffer_layout.bottom_screen.bottom - framebuffer_layout.bottom_screen.top); 85 (framebuffer_layout.bottom_screen.right - framebuffer_layout.bottom_screen.left);
86 touch_state->touch_y =
87 static_cast<float>(framebuffer_y - framebuffer_layout.bottom_screen.top) /
88 (framebuffer_layout.bottom_screen.bottom - framebuffer_layout.bottom_screen.top);
45 89
46 touch_pressed = true; 90 touch_state->touch_pressed = true;
47} 91}
48 92
49void EmuWindow::TouchReleased() { 93void EmuWindow::TouchReleased() {
50 touch_pressed = false; 94 std::lock_guard<std::mutex> guard(touch_state->mutex);
51 touch_x = 0; 95 touch_state->touch_pressed = false;
52 touch_y = 0; 96 touch_state->touch_x = 0;
97 touch_state->touch_y = 0;
53} 98}
54 99
55void EmuWindow::TouchMoved(unsigned framebuffer_x, unsigned framebuffer_y) { 100void EmuWindow::TouchMoved(unsigned framebuffer_x, unsigned framebuffer_y) {
56 if (!touch_pressed) 101 if (!touch_state->touch_pressed)
57 return; 102 return;
58 103
59 if (!IsWithinTouchscreen(framebuffer_layout, framebuffer_x, framebuffer_y)) 104 if (!IsWithinTouchscreen(framebuffer_layout, framebuffer_x, framebuffer_y))
@@ -62,29 +107,6 @@ void EmuWindow::TouchMoved(unsigned framebuffer_x, unsigned framebuffer_y) {
62 TouchPressed(framebuffer_x, framebuffer_y); 107 TouchPressed(framebuffer_x, framebuffer_y);
63} 108}
64 109
65void EmuWindow::AccelerometerChanged(float x, float y, float z) {
66 constexpr float coef = 512;
67
68 std::lock_guard<std::mutex> lock(accel_mutex);
69
70 // TODO(wwylele): do a time stretch as it in GyroscopeChanged
71 // The time stretch formula should be like
72 // stretched_vector = (raw_vector - gravity) * stretch_ratio + gravity
73 accel_x = static_cast<s16>(x * coef);
74 accel_y = static_cast<s16>(y * coef);
75 accel_z = static_cast<s16>(z * coef);
76}
77
78void EmuWindow::GyroscopeChanged(float x, float y, float z) {
79 constexpr float FULL_FPS = 60;
80 float coef = GetGyroscopeRawToDpsCoefficient();
81 float stretch = Core::System::GetInstance().perf_stats.GetLastFrameTimeScale();
82 std::lock_guard<std::mutex> lock(gyro_mutex);
83 gyro_x = static_cast<s16>(x * coef * stretch);
84 gyro_y = static_cast<s16>(y * coef * stretch);
85 gyro_z = static_cast<s16>(z * coef * stretch);
86}
87
88void EmuWindow::UpdateCurrentFramebufferLayout(unsigned width, unsigned height) { 110void EmuWindow::UpdateCurrentFramebufferLayout(unsigned width, unsigned height) {
89 Layout::FramebufferLayout layout; 111 Layout::FramebufferLayout layout;
90 if (Settings::values.custom_layout == true) { 112 if (Settings::values.custom_layout == true) {
@@ -97,6 +119,9 @@ void EmuWindow::UpdateCurrentFramebufferLayout(unsigned width, unsigned height)
97 case Settings::LayoutOption::LargeScreen: 119 case Settings::LayoutOption::LargeScreen:
98 layout = Layout::LargeFrameLayout(width, height, Settings::values.swap_screen); 120 layout = Layout::LargeFrameLayout(width, height, Settings::values.swap_screen);
99 break; 121 break;
122 case Settings::LayoutOption::SideScreen:
123 layout = Layout::SideFrameLayout(width, height, Settings::values.swap_screen);
124 break;
100 case Settings::LayoutOption::Default: 125 case Settings::LayoutOption::Default:
101 default: 126 default:
102 layout = Layout::DefaultFrameLayout(width, height, Settings::values.swap_screen); 127 layout = Layout::DefaultFrameLayout(width, height, Settings::values.swap_screen);
diff --git a/src/core/frontend/emu_window.h b/src/core/frontend/emu_window.h
index 9414123a4..c10dee51b 100644
--- a/src/core/frontend/emu_window.h
+++ b/src/core/frontend/emu_window.h
@@ -4,11 +4,10 @@
4 4
5#pragma once 5#pragma once
6 6
7#include <mutex> 7#include <memory>
8#include <tuple> 8#include <tuple>
9#include <utility> 9#include <utility>
10#include "common/common_types.h" 10#include "common/common_types.h"
11#include "common/math_util.h"
12#include "core/frontend/framebuffer_layout.h" 11#include "core/frontend/framebuffer_layout.h"
13 12
14/** 13/**
@@ -69,84 +68,6 @@ public:
69 void TouchMoved(unsigned framebuffer_x, unsigned framebuffer_y); 68 void TouchMoved(unsigned framebuffer_x, unsigned framebuffer_y);
70 69
71 /** 70 /**
72 * Signal accelerometer state has changed.
73 * @param x X-axis accelerometer value
74 * @param y Y-axis accelerometer value
75 * @param z Z-axis accelerometer value
76 * @note all values are in unit of g (gravitational acceleration).
77 * e.g. x = 1.0 means 9.8m/s^2 in x direction.
78 * @see GetAccelerometerState for axis explanation.
79 */
80 void AccelerometerChanged(float x, float y, float z);
81
82 /**
83 * Signal gyroscope state has changed.
84 * @param x X-axis accelerometer value
85 * @param y Y-axis accelerometer value
86 * @param z Z-axis accelerometer value
87 * @note all values are in deg/sec.
88 * @see GetGyroscopeState for axis explanation.
89 */
90 void GyroscopeChanged(float x, float y, float z);
91
92 /**
93 * Gets the current touch screen state (touch X/Y coordinates and whether or not it is pressed).
94 * @note This should be called by the core emu thread to get a state set by the window thread.
95 * @todo Fix this function to be thread-safe.
96 * @return std::tuple of (x, y, pressed) where `x` and `y` are the touch coordinates and
97 * `pressed` is true if the touch screen is currently being pressed
98 */
99 std::tuple<u16, u16, bool> GetTouchState() const {
100 return std::make_tuple(touch_x, touch_y, touch_pressed);
101 }
102
103 /**
104 * Gets the current accelerometer state (acceleration along each three axis).
105 * Axis explained:
106 * +x is the same direction as LEFT on D-pad.
107 * +y is normal to the touch screen, pointing outward.
108 * +z is the same direction as UP on D-pad.
109 * Units:
110 * 1 unit of return value = 1/512 g (measured by hw test),
111 * where g is the gravitational acceleration (9.8 m/sec2).
112 * @note This should be called by the core emu thread to get a state set by the window thread.
113 * @return std::tuple of (x, y, z)
114 */
115 std::tuple<s16, s16, s16> GetAccelerometerState() {
116 std::lock_guard<std::mutex> lock(accel_mutex);
117 return std::make_tuple(accel_x, accel_y, accel_z);
118 }
119
120 /**
121 * Gets the current gyroscope state (angular rates about each three axis).
122 * Axis explained:
123 * +x is the same direction as LEFT on D-pad.
124 * +y is normal to the touch screen, pointing outward.
125 * +z is the same direction as UP on D-pad.
126 * Orientation is determined by right-hand rule.
127 * Units:
128 * 1 unit of return value = (1/coef) deg/sec,
129 * where coef is the return value of GetGyroscopeRawToDpsCoefficient().
130 * @note This should be called by the core emu thread to get a state set by the window thread.
131 * @return std::tuple of (x, y, z)
132 */
133 std::tuple<s16, s16, s16> GetGyroscopeState() {
134 std::lock_guard<std::mutex> lock(gyro_mutex);
135 return std::make_tuple(gyro_x, gyro_y, gyro_z);
136 }
137
138 /**
139 * Gets the coefficient for units conversion of gyroscope state.
140 * The conversion formula is r = coefficient * v,
141 * where v is angular rate in deg/sec,
142 * and r is the gyroscope state.
143 * @return float-type coefficient
144 */
145 f32 GetGyroscopeRawToDpsCoefficient() const {
146 return 14.375f; // taken from hw test, and gyroscope's document
147 }
148
149 /**
150 * Returns currently active configuration. 71 * Returns currently active configuration.
151 * @note Accesses to the returned object need not be consistent because it may be modified in 72 * @note Accesses to the returned object need not be consistent because it may be modified in
152 * another thread 73 * another thread
@@ -180,21 +101,8 @@ public:
180 void UpdateCurrentFramebufferLayout(unsigned width, unsigned height); 101 void UpdateCurrentFramebufferLayout(unsigned width, unsigned height);
181 102
182protected: 103protected:
183 EmuWindow() { 104 EmuWindow();
184 // TODO: Find a better place to set this. 105 virtual ~EmuWindow();
185 config.min_client_area_size = std::make_pair(400u, 480u);
186 active_config = config;
187 touch_x = 0;
188 touch_y = 0;
189 touch_pressed = false;
190 accel_x = 0;
191 accel_y = -512;
192 accel_z = 0;
193 gyro_x = 0;
194 gyro_y = 0;
195 gyro_z = 0;
196 }
197 virtual ~EmuWindow() {}
198 106
199 /** 107 /**
200 * Processes any pending configuration changes from the last SetConfig call. 108 * Processes any pending configuration changes from the last SetConfig call.
@@ -250,20 +158,8 @@ private:
250 /// ProcessConfigurationChanges) 158 /// ProcessConfigurationChanges)
251 WindowConfig active_config; ///< Internal active configuration 159 WindowConfig active_config; ///< Internal active configuration
252 160
253 bool touch_pressed; ///< True if touchpad area is currently pressed, otherwise false 161 class TouchState;
254 162 std::shared_ptr<TouchState> touch_state;
255 u16 touch_x; ///< Touchpad X-position in native 3DS pixel coordinates (0-320)
256 u16 touch_y; ///< Touchpad Y-position in native 3DS pixel coordinates (0-240)
257
258 std::mutex accel_mutex;
259 s16 accel_x; ///< Accelerometer X-axis value in native 3DS units
260 s16 accel_y; ///< Accelerometer Y-axis value in native 3DS units
261 s16 accel_z; ///< Accelerometer Z-axis value in native 3DS units
262
263 std::mutex gyro_mutex;
264 s16 gyro_x; ///< Gyroscope X-axis value in native 3DS units
265 s16 gyro_y; ///< Gyroscope Y-axis value in native 3DS units
266 s16 gyro_z; ///< Gyroscope Z-axis value in native 3DS units
267 163
268 /** 164 /**
269 * Clip the provided coordinates to be inside the touchscreen area. 165 * Clip the provided coordinates to be inside the touchscreen area.
diff --git a/src/core/frontend/framebuffer_layout.cpp b/src/core/frontend/framebuffer_layout.cpp
index d2d02f9ff..e9f778fcb 100644
--- a/src/core/frontend/framebuffer_layout.cpp
+++ b/src/core/frontend/framebuffer_layout.cpp
@@ -141,6 +141,40 @@ FramebufferLayout LargeFrameLayout(unsigned width, unsigned height, bool swapped
141 return res; 141 return res;
142} 142}
143 143
144FramebufferLayout SideFrameLayout(unsigned width, unsigned height, bool swapped) {
145 ASSERT(width > 0);
146 ASSERT(height > 0);
147
148 FramebufferLayout res{width, height, true, true, {}, {}};
149 // Aspect ratio of both screens side by side
150 const float emulation_aspect_ratio = static_cast<float>(Core::kScreenTopHeight) /
151 (Core::kScreenTopWidth + Core::kScreenBottomWidth);
152 float window_aspect_ratio = static_cast<float>(height) / width;
153 MathUtil::Rectangle<unsigned> screen_window_area{0, 0, width, height};
154 // Find largest Rectangle that can fit in the window size with the given aspect ratio
155 MathUtil::Rectangle<unsigned> screen_rect =
156 maxRectangle(screen_window_area, emulation_aspect_ratio);
157 // Find sizes of top and bottom screen
158 MathUtil::Rectangle<unsigned> top_screen = maxRectangle(screen_rect, TOP_SCREEN_ASPECT_RATIO);
159 MathUtil::Rectangle<unsigned> bot_screen = maxRectangle(screen_rect, BOT_SCREEN_ASPECT_RATIO);
160
161 if (window_aspect_ratio < emulation_aspect_ratio) {
162 // Apply borders to the left and right sides of the window.
163 u32 shift_horizontal = (screen_window_area.GetWidth() - screen_rect.GetWidth()) / 2;
164 top_screen = top_screen.TranslateX(shift_horizontal);
165 bot_screen = bot_screen.TranslateX(shift_horizontal);
166 } else {
167 // Window is narrower than the emulation content => apply borders to the top and bottom
168 u32 shift_vertical = (screen_window_area.GetHeight() - screen_rect.GetHeight()) / 2;
169 top_screen = top_screen.TranslateY(shift_vertical);
170 bot_screen = bot_screen.TranslateY(shift_vertical);
171 }
172 // Move the top screen to the right if we are swapped.
173 res.top_screen = swapped ? top_screen.TranslateX(bot_screen.GetWidth()) : top_screen;
174 res.bottom_screen = swapped ? bot_screen : bot_screen.TranslateX(top_screen.GetWidth());
175 return res;
176}
177
144FramebufferLayout CustomFrameLayout(unsigned width, unsigned height) { 178FramebufferLayout CustomFrameLayout(unsigned width, unsigned height) {
145 ASSERT(width > 0); 179 ASSERT(width > 0);
146 ASSERT(height > 0); 180 ASSERT(height > 0);
@@ -158,4 +192,4 @@ FramebufferLayout CustomFrameLayout(unsigned width, unsigned height) {
158 res.bottom_screen = bot_screen; 192 res.bottom_screen = bot_screen;
159 return res; 193 return res;
160} 194}
161} 195} // namespace Layout
diff --git a/src/core/frontend/framebuffer_layout.h b/src/core/frontend/framebuffer_layout.h
index 9a7738969..4983cf103 100644
--- a/src/core/frontend/framebuffer_layout.h
+++ b/src/core/frontend/framebuffer_layout.h
@@ -54,6 +54,17 @@ FramebufferLayout SingleFrameLayout(unsigned width, unsigned height, bool is_swa
54FramebufferLayout LargeFrameLayout(unsigned width, unsigned height, bool is_swapped); 54FramebufferLayout LargeFrameLayout(unsigned width, unsigned height, bool is_swapped);
55 55
56/** 56/**
57* Factory method for constructing a Frame with the Top screen and bottom
58* screen side by side
59* This is useful for devices with small screens, like the GPDWin
60* @param width Window framebuffer width in pixels
61* @param height Window framebuffer height in pixels
62* @param is_swapped if true, the bottom screen will be the left display
63* @return Newly created FramebufferLayout object with default screen regions initialized
64*/
65FramebufferLayout SideFrameLayout(unsigned width, unsigned height, bool is_swapped);
66
67/**
57 * Factory method for constructing a custom FramebufferLayout 68 * Factory method for constructing a custom FramebufferLayout
58 * @param width Window framebuffer width in pixels 69 * @param width Window framebuffer width in pixels
59 * @param height Window framebuffer height in pixels 70 * @param height Window framebuffer height in pixels
diff --git a/src/core/frontend/input.h b/src/core/frontend/input.h
index 0a5713dc0..8c256beb5 100644
--- a/src/core/frontend/input.h
+++ b/src/core/frontend/input.h
@@ -11,6 +11,7 @@
11#include <utility> 11#include <utility>
12#include "common/logging/log.h" 12#include "common/logging/log.h"
13#include "common/param_package.h" 13#include "common/param_package.h"
14#include "common/vector_math.h"
14 15
15namespace Input { 16namespace Input {
16 17
@@ -107,4 +108,28 @@ using ButtonDevice = InputDevice<bool>;
107 */ 108 */
108using AnalogDevice = InputDevice<std::tuple<float, float>>; 109using AnalogDevice = InputDevice<std::tuple<float, float>>;
109 110
111/**
112 * A motion device is an input device that returns a tuple of accelerometer state vector and
113 * gyroscope state vector.
114 *
115 * For both vectors:
116 * x+ is the same direction as LEFT on D-pad.
117 * y+ is normal to the touch screen, pointing outward.
118 * z+ is the same direction as UP on D-pad.
119 *
120 * For accelerometer state vector
121 * Units: g (gravitational acceleration)
122 *
123 * For gyroscope state vector:
124 * Orientation is determined by right-hand rule.
125 * Units: deg/sec
126 */
127using MotionDevice = InputDevice<std::tuple<Math::Vec3<float>, Math::Vec3<float>>>;
128
129/**
130 * A touch device is an input device that returns a tuple of two floats and a bool. The floats are
131 * x and y coordinates in the range 0.0 - 1.0, and the bool indicates whether it is pressed.
132 */
133using TouchDevice = InputDevice<std::tuple<float, float, bool>>;
134
110} // namespace Input 135} // namespace Input
diff --git a/src/core/frontend/motion_emu.cpp b/src/core/frontend/motion_emu.cpp
deleted file mode 100644
index 9a5b3185d..000000000
--- a/src/core/frontend/motion_emu.cpp
+++ /dev/null
@@ -1,89 +0,0 @@
1// Copyright 2016 Citra Emulator Project
2// Licensed under GPLv2 or any later version
3// Refer to the license.txt file included.
4
5#include "common/math_util.h"
6#include "common/quaternion.h"
7#include "core/frontend/emu_window.h"
8#include "core/frontend/motion_emu.h"
9
10namespace Motion {
11
12static constexpr int update_millisecond = 100;
13static constexpr auto update_duration =
14 std::chrono::duration_cast<std::chrono::steady_clock::duration>(
15 std::chrono::milliseconds(update_millisecond));
16
17MotionEmu::MotionEmu(EmuWindow& emu_window)
18 : motion_emu_thread(&MotionEmu::MotionEmuThread, this, std::ref(emu_window)) {}
19
20MotionEmu::~MotionEmu() {
21 if (motion_emu_thread.joinable()) {
22 shutdown_event.Set();
23 motion_emu_thread.join();
24 }
25}
26
27void MotionEmu::MotionEmuThread(EmuWindow& emu_window) {
28 auto update_time = std::chrono::steady_clock::now();
29 Math::Quaternion<float> q = MakeQuaternion(Math::Vec3<float>(), 0);
30 Math::Quaternion<float> old_q;
31
32 while (!shutdown_event.WaitUntil(update_time)) {
33 update_time += update_duration;
34 old_q = q;
35
36 {
37 std::lock_guard<std::mutex> guard(tilt_mutex);
38
39 // Find the quaternion describing current 3DS tilting
40 q = MakeQuaternion(Math::MakeVec(-tilt_direction.y, 0.0f, tilt_direction.x),
41 tilt_angle);
42 }
43
44 auto inv_q = q.Inverse();
45
46 // Set the gravity vector in world space
47 auto gravity = Math::MakeVec(0.0f, -1.0f, 0.0f);
48
49 // Find the angular rate vector in world space
50 auto angular_rate = ((q - old_q) * inv_q).xyz * 2;
51 angular_rate *= 1000 / update_millisecond / MathUtil::PI * 180;
52
53 // Transform the two vectors from world space to 3DS space
54 gravity = QuaternionRotate(inv_q, gravity);
55 angular_rate = QuaternionRotate(inv_q, angular_rate);
56
57 // Update the sensor state
58 emu_window.AccelerometerChanged(gravity.x, gravity.y, gravity.z);
59 emu_window.GyroscopeChanged(angular_rate.x, angular_rate.y, angular_rate.z);
60 }
61}
62
63void MotionEmu::BeginTilt(int x, int y) {
64 mouse_origin = Math::MakeVec(x, y);
65 is_tilting = true;
66}
67
68void MotionEmu::Tilt(int x, int y) {
69 constexpr float SENSITIVITY = 0.01f;
70 auto mouse_move = Math::MakeVec(x, y) - mouse_origin;
71 if (is_tilting) {
72 std::lock_guard<std::mutex> guard(tilt_mutex);
73 if (mouse_move.x == 0 && mouse_move.y == 0) {
74 tilt_angle = 0;
75 } else {
76 tilt_direction = mouse_move.Cast<float>();
77 tilt_angle = MathUtil::Clamp(tilt_direction.Normalize() * SENSITIVITY, 0.0f,
78 MathUtil::PI * 0.5f);
79 }
80 }
81}
82
83void MotionEmu::EndTilt() {
84 std::lock_guard<std::mutex> guard(tilt_mutex);
85 tilt_angle = 0;
86 is_tilting = false;
87}
88
89} // namespace Motion
diff --git a/src/core/frontend/motion_emu.h b/src/core/frontend/motion_emu.h
deleted file mode 100644
index 99d41a726..000000000
--- a/src/core/frontend/motion_emu.h
+++ /dev/null
@@ -1,52 +0,0 @@
1// Copyright 2016 Citra Emulator Project
2// Licensed under GPLv2 or any later version
3// Refer to the license.txt file included.
4
5#pragma once
6#include "common/thread.h"
7#include "common/vector_math.h"
8
9class EmuWindow;
10
11namespace Motion {
12
13class MotionEmu final {
14public:
15 MotionEmu(EmuWindow& emu_window);
16 ~MotionEmu();
17
18 /**
19 * Signals that a motion sensor tilt has begun.
20 * @param x the x-coordinate of the cursor
21 * @param y the y-coordinate of the cursor
22 */
23 void BeginTilt(int x, int y);
24
25 /**
26 * Signals that a motion sensor tilt is occurring.
27 * @param x the x-coordinate of the cursor
28 * @param y the y-coordinate of the cursor
29 */
30 void Tilt(int x, int y);
31
32 /**
33 * Signals that a motion sensor tilt has ended.
34 */
35 void EndTilt();
36
37private:
38 Math::Vec2<int> mouse_origin;
39
40 std::mutex tilt_mutex;
41 Math::Vec2<float> tilt_direction;
42 float tilt_angle = 0;
43
44 bool is_tilting = false;
45
46 Common::Event shutdown_event;
47 std::thread motion_emu_thread;
48
49 void MotionEmuThread(EmuWindow& emu_window);
50};
51
52} // namespace Motion
diff --git a/src/core/gdbstub/gdbstub.cpp b/src/core/gdbstub/gdbstub.cpp
index 123fe7cd4..d6be16ef6 100644
--- a/src/core/gdbstub/gdbstub.cpp
+++ b/src/core/gdbstub/gdbstub.cpp
@@ -644,7 +644,7 @@ static void ReadMemory() {
644 644
645 auto start_offset = command_buffer + 1; 645 auto start_offset = command_buffer + 1;
646 auto addr_pos = std::find(start_offset, command_buffer + command_length, ','); 646 auto addr_pos = std::find(start_offset, command_buffer + command_length, ',');
647 PAddr addr = HexToInt(start_offset, static_cast<u32>(addr_pos - start_offset)); 647 VAddr addr = HexToInt(start_offset, static_cast<u32>(addr_pos - start_offset));
648 648
649 start_offset = addr_pos + 1; 649 start_offset = addr_pos + 1;
650 u32 len = 650 u32 len =
@@ -656,12 +656,14 @@ static void ReadMemory() {
656 SendReply("E01"); 656 SendReply("E01");
657 } 657 }
658 658
659 const u8* data = Memory::GetPointer(addr); 659 if (!Memory::IsValidVirtualAddress(addr)) {
660 if (!data) {
661 return SendReply("E00"); 660 return SendReply("E00");
662 } 661 }
663 662
664 MemToGdbHex(reply, data, len); 663 std::vector<u8> data(len);
664 Memory::ReadBlock(addr, data.data(), len);
665
666 MemToGdbHex(reply, data.data(), len);
665 reply[len * 2] = '\0'; 667 reply[len * 2] = '\0';
666 SendReply(reinterpret_cast<char*>(reply)); 668 SendReply(reinterpret_cast<char*>(reply));
667} 669}
@@ -670,18 +672,20 @@ static void ReadMemory() {
670static void WriteMemory() { 672static void WriteMemory() {
671 auto start_offset = command_buffer + 1; 673 auto start_offset = command_buffer + 1;
672 auto addr_pos = std::find(start_offset, command_buffer + command_length, ','); 674 auto addr_pos = std::find(start_offset, command_buffer + command_length, ',');
673 PAddr addr = HexToInt(start_offset, static_cast<u32>(addr_pos - start_offset)); 675 VAddr addr = HexToInt(start_offset, static_cast<u32>(addr_pos - start_offset));
674 676
675 start_offset = addr_pos + 1; 677 start_offset = addr_pos + 1;
676 auto len_pos = std::find(start_offset, command_buffer + command_length, ':'); 678 auto len_pos = std::find(start_offset, command_buffer + command_length, ':');
677 u32 len = HexToInt(start_offset, static_cast<u32>(len_pos - start_offset)); 679 u32 len = HexToInt(start_offset, static_cast<u32>(len_pos - start_offset));
678 680
679 u8* dst = Memory::GetPointer(addr); 681 if (!Memory::IsValidVirtualAddress(addr)) {
680 if (!dst) {
681 return SendReply("E00"); 682 return SendReply("E00");
682 } 683 }
683 684
684 GdbHexToMem(dst, len_pos + 1, len); 685 std::vector<u8> data(len);
686
687 GdbHexToMem(data.data(), len_pos + 1, len);
688 Memory::WriteBlock(addr, data.data(), len);
685 SendReply("OK"); 689 SendReply("OK");
686} 690}
687 691
@@ -946,7 +950,7 @@ static void Init(u16 port) {
946 WSAStartup(MAKEWORD(2, 2), &InitData); 950 WSAStartup(MAKEWORD(2, 2), &InitData);
947#endif 951#endif
948 952
949 int tmpsock = socket(PF_INET, SOCK_STREAM, 0); 953 int tmpsock = static_cast<int>(socket(PF_INET, SOCK_STREAM, 0));
950 if (tmpsock == -1) { 954 if (tmpsock == -1) {
951 LOG_ERROR(Debug_GDBStub, "Failed to create gdb socket"); 955 LOG_ERROR(Debug_GDBStub, "Failed to create gdb socket");
952 } 956 }
@@ -973,7 +977,7 @@ static void Init(u16 port) {
973 sockaddr_in saddr_client; 977 sockaddr_in saddr_client;
974 sockaddr* client_addr = reinterpret_cast<sockaddr*>(&saddr_client); 978 sockaddr* client_addr = reinterpret_cast<sockaddr*>(&saddr_client);
975 socklen_t client_addrlen = sizeof(saddr_client); 979 socklen_t client_addrlen = sizeof(saddr_client);
976 gdbserver_socket = accept(tmpsock, client_addr, &client_addrlen); 980 gdbserver_socket = static_cast<int>(accept(tmpsock, client_addr, &client_addrlen));
977 if (gdbserver_socket < 0) { 981 if (gdbserver_socket < 0) {
978 // In the case that we couldn't start the server for whatever reason, just start CPU 982 // In the case that we couldn't start the server for whatever reason, just start CPU
979 // execution like normal. 983 // execution like normal.
diff --git a/src/core/hle/applets/erreula.cpp b/src/core/hle/applets/erreula.cpp
index 75d7fd9fc..518f371f5 100644
--- a/src/core/hle/applets/erreula.cpp
+++ b/src/core/hle/applets/erreula.cpp
@@ -31,8 +31,8 @@ ResultCode ErrEula::ReceiveParameter(const Service::APT::MessageParameter& param
31 heap_memory = std::make_shared<std::vector<u8>>(capture_info.size); 31 heap_memory = std::make_shared<std::vector<u8>>(capture_info.size);
32 // Create a SharedMemory that directly points to this heap block. 32 // Create a SharedMemory that directly points to this heap block.
33 framebuffer_memory = Kernel::SharedMemory::CreateForApplet( 33 framebuffer_memory = Kernel::SharedMemory::CreateForApplet(
34 heap_memory, 0, heap_memory->size(), MemoryPermission::ReadWrite, 34 heap_memory, 0, capture_info.size, MemoryPermission::ReadWrite, MemoryPermission::ReadWrite,
35 MemoryPermission::ReadWrite, "ErrEula Memory"); 35 "ErrEula Memory");
36 36
37 // Send the response message with the newly created SharedMemory 37 // Send the response message with the newly created SharedMemory
38 Service::APT::MessageParameter result; 38 Service::APT::MessageParameter result;
diff --git a/src/core/hle/applets/mii_selector.cpp b/src/core/hle/applets/mii_selector.cpp
index 89f08daa2..f225c23a5 100644
--- a/src/core/hle/applets/mii_selector.cpp
+++ b/src/core/hle/applets/mii_selector.cpp
@@ -38,8 +38,8 @@ ResultCode MiiSelector::ReceiveParameter(const Service::APT::MessageParameter& p
38 heap_memory = std::make_shared<std::vector<u8>>(capture_info.size); 38 heap_memory = std::make_shared<std::vector<u8>>(capture_info.size);
39 // Create a SharedMemory that directly points to this heap block. 39 // Create a SharedMemory that directly points to this heap block.
40 framebuffer_memory = Kernel::SharedMemory::CreateForApplet( 40 framebuffer_memory = Kernel::SharedMemory::CreateForApplet(
41 heap_memory, 0, heap_memory->size(), MemoryPermission::ReadWrite, 41 heap_memory, 0, capture_info.size, MemoryPermission::ReadWrite, MemoryPermission::ReadWrite,
42 MemoryPermission::ReadWrite, "MiiSelector Memory"); 42 "MiiSelector Memory");
43 43
44 // Send the response message with the newly created SharedMemory 44 // Send the response message with the newly created SharedMemory
45 Service::APT::MessageParameter result; 45 Service::APT::MessageParameter result;
@@ -66,7 +66,7 @@ ResultCode MiiSelector::StartImpl(const Service::APT::AppletStartupParameter& pa
66 // continue. 66 // continue.
67 MiiResult result; 67 MiiResult result;
68 memset(&result, 0, sizeof(result)); 68 memset(&result, 0, sizeof(result));
69 result.result_code = 0; 69 result.return_code = 0;
70 70
71 // Let the application know that we're closing 71 // Let the application know that we're closing
72 Service::APT::MessageParameter message; 72 Service::APT::MessageParameter message;
@@ -82,5 +82,5 @@ ResultCode MiiSelector::StartImpl(const Service::APT::AppletStartupParameter& pa
82} 82}
83 83
84void MiiSelector::Update() {} 84void MiiSelector::Update() {}
85} 85} // namespace Applets
86} // namespace 86} // namespace HLE
diff --git a/src/core/hle/applets/mii_selector.h b/src/core/hle/applets/mii_selector.h
index ec00e29d2..136ce8948 100644
--- a/src/core/hle/applets/mii_selector.h
+++ b/src/core/hle/applets/mii_selector.h
@@ -16,51 +16,46 @@ namespace HLE {
16namespace Applets { 16namespace Applets {
17 17
18struct MiiConfig { 18struct MiiConfig {
19 u8 unk_000; 19 u8 enable_cancel_button;
20 u8 unk_001; 20 u8 enable_guest_mii;
21 u8 unk_002; 21 u8 show_on_top_screen;
22 u8 unk_003; 22 INSERT_PADDING_BYTES(5);
23 u8 unk_004; 23 u16 title[0x40];
24 INSERT_PADDING_BYTES(4);
25 u8 show_guest_miis;
24 INSERT_PADDING_BYTES(3); 26 INSERT_PADDING_BYTES(3);
25 u16 unk_008; 27 u32 initially_selected_mii_index;
26 INSERT_PADDING_BYTES(0x82); 28 u8 guest_mii_whitelist[6];
27 u8 unk_08C; 29 u8 user_mii_whitelist[0x64];
28 INSERT_PADDING_BYTES(3);
29 u16 unk_090;
30 INSERT_PADDING_BYTES(2); 30 INSERT_PADDING_BYTES(2);
31 u32 unk_094; 31 u32 magic_value;
32 u16 unk_098;
33 u8 unk_09A[0x64];
34 u8 unk_0FE;
35 u8 unk_0FF;
36 u32 unk_100;
37}; 32};
38
39static_assert(sizeof(MiiConfig) == 0x104, "MiiConfig structure has incorrect size"); 33static_assert(sizeof(MiiConfig) == 0x104, "MiiConfig structure has incorrect size");
40#define ASSERT_REG_POSITION(field_name, position) \ 34#define ASSERT_REG_POSITION(field_name, position) \
41 static_assert(offsetof(MiiConfig, field_name) == position, \ 35 static_assert(offsetof(MiiConfig, field_name) == position, \
42 "Field " #field_name " has invalid position") 36 "Field " #field_name " has invalid position")
43ASSERT_REG_POSITION(unk_008, 0x08); 37ASSERT_REG_POSITION(title, 0x08);
44ASSERT_REG_POSITION(unk_08C, 0x8C); 38ASSERT_REG_POSITION(show_guest_miis, 0x8C);
45ASSERT_REG_POSITION(unk_090, 0x90); 39ASSERT_REG_POSITION(initially_selected_mii_index, 0x90);
46ASSERT_REG_POSITION(unk_094, 0x94); 40ASSERT_REG_POSITION(guest_mii_whitelist, 0x94);
47ASSERT_REG_POSITION(unk_0FE, 0xFE);
48#undef ASSERT_REG_POSITION 41#undef ASSERT_REG_POSITION
49 42
50struct MiiResult { 43struct MiiResult {
51 u32 result_code; 44 u32 return_code;
52 u8 unk_04; 45 u32 is_guest_mii_selected;
53 INSERT_PADDING_BYTES(7); 46 u32 selected_guest_mii_index;
54 u8 unk_0C[0x60]; 47 // TODO(mailwl): expand to Mii Format structure: https://www.3dbrew.org/wiki/Mii
55 u8 unk_6C[0x16]; 48 u8 selected_mii_data[0x5C];
56 INSERT_PADDING_BYTES(2); 49 INSERT_PADDING_BYTES(2);
50 u16 mii_data_checksum;
51 u16 guest_mii_name[0xC];
57}; 52};
58static_assert(sizeof(MiiResult) == 0x84, "MiiResult structure has incorrect size"); 53static_assert(sizeof(MiiResult) == 0x84, "MiiResult structure has incorrect size");
59#define ASSERT_REG_POSITION(field_name, position) \ 54#define ASSERT_REG_POSITION(field_name, position) \
60 static_assert(offsetof(MiiResult, field_name) == position, \ 55 static_assert(offsetof(MiiResult, field_name) == position, \
61 "Field " #field_name " has invalid position") 56 "Field " #field_name " has invalid position")
62ASSERT_REG_POSITION(unk_0C, 0x0C); 57ASSERT_REG_POSITION(selected_mii_data, 0x0C);
63ASSERT_REG_POSITION(unk_6C, 0x6C); 58ASSERT_REG_POSITION(guest_mii_name, 0x6C);
64#undef ASSERT_REG_POSITION 59#undef ASSERT_REG_POSITION
65 60
66class MiiSelector final : public Applet { 61class MiiSelector final : public Applet {
@@ -79,5 +74,5 @@ private:
79 74
80 MiiConfig config; 75 MiiConfig config;
81}; 76};
82} 77} // namespace Applets
83} // namespace 78} // namespace HLE
diff --git a/src/core/hle/applets/mint.cpp b/src/core/hle/applets/mint.cpp
index 31a79ea17..50d79190b 100644
--- a/src/core/hle/applets/mint.cpp
+++ b/src/core/hle/applets/mint.cpp
@@ -31,8 +31,8 @@ ResultCode Mint::ReceiveParameter(const Service::APT::MessageParameter& paramete
31 heap_memory = std::make_shared<std::vector<u8>>(capture_info.size); 31 heap_memory = std::make_shared<std::vector<u8>>(capture_info.size);
32 // Create a SharedMemory that directly points to this heap block. 32 // Create a SharedMemory that directly points to this heap block.
33 framebuffer_memory = Kernel::SharedMemory::CreateForApplet( 33 framebuffer_memory = Kernel::SharedMemory::CreateForApplet(
34 heap_memory, 0, heap_memory->size(), MemoryPermission::ReadWrite, 34 heap_memory, 0, capture_info.size, MemoryPermission::ReadWrite, MemoryPermission::ReadWrite,
35 MemoryPermission::ReadWrite, "Mint Memory"); 35 "Mint Memory");
36 36
37 // Send the response message with the newly created SharedMemory 37 // Send the response message with the newly created SharedMemory
38 Service::APT::MessageParameter result; 38 Service::APT::MessageParameter result;
diff --git a/src/core/hle/applets/swkbd.cpp b/src/core/hle/applets/swkbd.cpp
index fdf8807b0..0bc471a3a 100644
--- a/src/core/hle/applets/swkbd.cpp
+++ b/src/core/hle/applets/swkbd.cpp
@@ -41,8 +41,8 @@ ResultCode SoftwareKeyboard::ReceiveParameter(Service::APT::MessageParameter con
41 heap_memory = std::make_shared<std::vector<u8>>(capture_info.size); 41 heap_memory = std::make_shared<std::vector<u8>>(capture_info.size);
42 // Create a SharedMemory that directly points to this heap block. 42 // Create a SharedMemory that directly points to this heap block.
43 framebuffer_memory = Kernel::SharedMemory::CreateForApplet( 43 framebuffer_memory = Kernel::SharedMemory::CreateForApplet(
44 heap_memory, 0, heap_memory->size(), MemoryPermission::ReadWrite, 44 heap_memory, 0, capture_info.size, MemoryPermission::ReadWrite, MemoryPermission::ReadWrite,
45 MemoryPermission::ReadWrite, "SoftwareKeyboard Memory"); 45 "SoftwareKeyboard Memory");
46 46
47 // Send the response message with the newly created SharedMemory 47 // Send the response message with the newly created SharedMemory
48 Service::APT::MessageParameter result; 48 Service::APT::MessageParameter result;
diff --git a/src/core/hle/function_wrappers.h b/src/core/hle/function_wrappers.h
index bc81c06b4..31fda6db3 100644
--- a/src/core/hle/function_wrappers.h
+++ b/src/core/hle/function_wrappers.h
@@ -24,19 +24,37 @@ static inline void FuncReturn(u64 res) {
24 Core::CPU().SetReg(0, res); 24 Core::CPU().SetReg(0, res);
25} 25}
26 26
27/**
28 * HLE a function return (64-bit) from the current ARM11 userland process
29 * @param res Result to return (64-bit)
30 * @todo Verify that this function is correct
31 */
32static inline void FuncReturn64(u64 res) {
33 Core::CPU().SetReg(0, (u32)(res & 0xFFFFFFFF));
34 Core::CPU().SetReg(1, (u32)((res >> 32) & 0xFFFFFFFF));
35}
36
37//////////////////////////////////////////////////////////////////////////////////////////////////// 27////////////////////////////////////////////////////////////////////////////////////////////////////
38// Function wrappers that return type ResultCode 28// Function wrappers that return type ResultCode
39 29
30template <ResultCode func(u64)>
31void Wrap() {
32 FuncReturn(func(PARAM(0)).raw);
33}
34
35template <ResultCode func(u32, u64, u32)>
36void Wrap() {
37 FuncReturn(func(PARAM(0), PARAM(1), PARAM(2)).raw);
38}
39
40template <ResultCode func(u64, u32)>
41void Wrap() {
42 FuncReturn(func(PARAM(0), PARAM(1)).raw);
43}
44
45template <ResultCode func(u64, u64, u64)>
46void Wrap() {
47 FuncReturn(func(PARAM(0), PARAM(1), PARAM(2)).raw);
48}
49
50template <ResultCode func(u64*, u64, u64, u64)>
51void Wrap() {
52 u64 param_1 = 0;
53 u32 retval = func(&param_1, PARAM(1), PARAM(2), PARAM(3)).raw;
54 Core::CPU().SetReg(1, param_1);
55 FuncReturn(retval);
56}
57
40template <ResultCode func(u32, u32, u32, u32)> 58template <ResultCode func(u32, u32, u32, u32)>
41void Wrap() { 59void Wrap() {
42 FuncReturn(func(PARAM(0), PARAM(1), PARAM(2), PARAM(3)).raw); 60 FuncReturn(func(PARAM(0), PARAM(1), PARAM(2), PARAM(3)).raw);
@@ -58,22 +76,21 @@ void Wrap() {
58 FuncReturn(retval); 76 FuncReturn(retval);
59} 77}
60 78
61template <ResultCode func(s32*, u32*, s32, bool, s64)> 79template <ResultCode func(s32*, VAddr, s32, bool, s64)>
62void Wrap() { 80void Wrap() {
63 s32 param_1 = 0; 81 s32 param_1 = 0;
64 s32 retval = func(&param_1, (Kernel::Handle*)Memory::GetPointer(PARAM(1)), (s32)PARAM(2), 82 s32 retval =
65 (PARAM(3) != 0), (((s64)PARAM(4) << 32) | PARAM(0))) 83 func(&param_1, PARAM(1), (s32)PARAM(2), (PARAM(3) != 0), (((s64)PARAM(4) << 32) | PARAM(0)))
66 .raw; 84 .raw;
67 85
68 Core::CPU().SetReg(1, (u32)param_1); 86 Core::CPU().SetReg(1, (u32)param_1);
69 FuncReturn(retval); 87 FuncReturn(retval);
70} 88}
71 89
72template <ResultCode func(s32*, u32*, s32, u32)> 90template <ResultCode func(s32*, VAddr, s32, u32)>
73void Wrap() { 91void Wrap() {
74 s32 param_1 = 0; 92 s32 param_1 = 0;
75 u32 retval = 93 u32 retval = func(&param_1, PARAM(1), (s32)PARAM(2), PARAM(3)).raw;
76 func(&param_1, (Kernel::Handle*)Memory::GetPointer(PARAM(1)), (s32)PARAM(2), PARAM(3)).raw;
77 94
78 Core::CPU().SetReg(1, (u32)param_1); 95 Core::CPU().SetReg(1, (u32)param_1);
79 FuncReturn(retval); 96 FuncReturn(retval);
@@ -85,6 +102,14 @@ void Wrap() {
85 func(PARAM(0), PARAM(1), PARAM(2), PARAM(3), (((s64)PARAM(5) << 32) | PARAM(4))).raw); 102 func(PARAM(0), PARAM(1), PARAM(2), PARAM(3), (((s64)PARAM(5) << 32) | PARAM(4))).raw);
86} 103}
87 104
105template <ResultCode func(u32, u64*)>
106void Wrap() {
107 u64 param_1 = 0;
108 u32 retval = func(PARAM(0), &param_1).raw;
109 Core::CPU().SetReg(1, param_1);
110 FuncReturn(retval);
111}
112
88template <ResultCode func(u32*)> 113template <ResultCode func(u32*)>
89void Wrap() { 114void Wrap() {
90 u32 param_1 = 0; 115 u32 param_1 = 0;
@@ -100,16 +125,17 @@ void Wrap() {
100 FuncReturn(retval); 125 FuncReturn(retval);
101} 126}
102 127
103template <ResultCode func(MemoryInfo*, PageInfo*, u32)> 128template <ResultCode func(MemoryInfo*, PageInfo*, u64)>
104void Wrap() { 129void Wrap() {
105 MemoryInfo memory_info = {}; 130 MemoryInfo memory_info = {};
106 PageInfo page_info = {}; 131 PageInfo page_info = {};
107 u32 retval = func(&memory_info, &page_info, PARAM(2)).raw; 132 u32 retval = func(&memory_info, &page_info, PARAM(2)).raw;
108 Core::CPU().SetReg(1, memory_info.base_address); 133
109 Core::CPU().SetReg(2, memory_info.size); 134 Memory::Write64(PARAM(0), memory_info.base_address);
110 Core::CPU().SetReg(3, memory_info.permission); 135 Memory::Write64(PARAM(0) + 8, memory_info.size);
111 Core::CPU().SetReg(4, memory_info.state); 136 Memory::Write64(PARAM(0) + 16, memory_info.permission);
112 Core::CPU().SetReg(5, page_info.flags); 137 Memory::Write64(PARAM(0) + 24, memory_info.state);
138
113 FuncReturn(retval); 139 FuncReturn(retval);
114} 140}
115 141
@@ -139,7 +165,7 @@ void Wrap() {
139 FuncReturn(func(PARAM(0), (s32)PARAM(1)).raw); 165 FuncReturn(func(PARAM(0), (s32)PARAM(1)).raw);
140} 166}
141 167
142template <ResultCode func(u32*, u32)> 168template <ResultCode func(u32*, u64)>
143void Wrap() { 169void Wrap() {
144 u32 param_1 = 0; 170 u32 param_1 = 0;
145 u32 retval = func(&param_1, PARAM(1)).raw; 171 u32 retval = func(&param_1, PARAM(1)).raw;
@@ -152,21 +178,6 @@ void Wrap() {
152 FuncReturn(func(PARAM(0)).raw); 178 FuncReturn(func(PARAM(0)).raw);
153} 179}
154 180
155template <ResultCode func(s64*, u32, u32*, u32)>
156void Wrap() {
157 FuncReturn(func((s64*)Memory::GetPointer(PARAM(0)), PARAM(1),
158 (u32*)Memory::GetPointer(PARAM(2)), (s32)PARAM(3))
159 .raw);
160}
161
162template <ResultCode func(u32*, const char*)>
163void Wrap() {
164 u32 param_1 = 0;
165 u32 retval = func(&param_1, (char*)Memory::GetPointer(PARAM(1))).raw;
166 Core::CPU().SetReg(1, param_1);
167 FuncReturn(retval);
168}
169
170template <ResultCode func(u32*, s32, s32)> 181template <ResultCode func(u32*, s32, s32)>
171void Wrap() { 182void Wrap() {
172 u32 param_1 = 0; 183 u32 param_1 = 0;
@@ -222,13 +233,11 @@ void Wrap() {
222 FuncReturn(func(PARAM(0), PARAM(1)).raw); 233 FuncReturn(func(PARAM(0), PARAM(1)).raw);
223} 234}
224 235
225template <ResultCode func(Kernel::Handle*, Kernel::Handle*, const char*, u32)> 236template <ResultCode func(Kernel::Handle*, Kernel::Handle*, VAddr, u32)>
226void Wrap() { 237void Wrap() {
227 Kernel::Handle param_1 = 0; 238 Kernel::Handle param_1 = 0;
228 Kernel::Handle param_2 = 0; 239 Kernel::Handle param_2 = 0;
229 u32 retval = func(&param_1, &param_2, 240 u32 retval = func(&param_1, &param_2, PARAM(2), PARAM(3)).raw;
230 reinterpret_cast<const char*>(Memory::GetPointer(PARAM(2))), PARAM(3))
231 .raw;
232 Core::CPU().SetReg(1, param_1); 241 Core::CPU().SetReg(1, param_1);
233 Core::CPU().SetReg(2, param_2); 242 Core::CPU().SetReg(2, param_2);
234 FuncReturn(retval); 243 FuncReturn(retval);
@@ -244,6 +253,11 @@ void Wrap() {
244 FuncReturn(retval); 253 FuncReturn(retval);
245} 254}
246 255
256template <ResultCode func(u32, u32, u32)>
257void Wrap() {
258 FuncReturn(func(PARAM(0), PARAM(1), PARAM(2)).raw);
259}
260
247//////////////////////////////////////////////////////////////////////////////////////////////////// 261////////////////////////////////////////////////////////////////////////////////////////////////////
248// Function wrappers that return type u32 262// Function wrappers that return type u32
249 263
@@ -268,14 +282,14 @@ void Wrap() {
268 func(((s64)PARAM(1) << 32) | PARAM(0)); 282 func(((s64)PARAM(1) << 32) | PARAM(0));
269} 283}
270 284
271template <void func(const char*, int len)> 285template <void func(VAddr, int len)>
272void Wrap() { 286void Wrap() {
273 func((char*)Memory::GetPointer(PARAM(0)), PARAM(1)); 287 func(PARAM(0), PARAM(1));
274} 288}
275 289
276template <void func(u8)> 290template <void func(u64, u64, u64)>
277void Wrap() { 291void Wrap() {
278 func((u8)PARAM(0)); 292 func(PARAM(0), PARAM(1), PARAM(2));
279} 293}
280 294
281#undef PARAM 295#undef PARAM
diff --git a/src/core/hle/ipc.h b/src/core/hle/ipc.h
index f7f96125a..87ed85df6 100644
--- a/src/core/hle/ipc.h
+++ b/src/core/hle/ipc.h
@@ -122,11 +122,11 @@ union StaticBufferDescInfo {
122 BitField<14, 18, u32> size; 122 BitField<14, 18, u32> size;
123}; 123};
124 124
125inline u32 StaticBufferDesc(u32 size, u8 buffer_id) { 125inline u32 StaticBufferDesc(size_t size, u8 buffer_id) {
126 StaticBufferDescInfo info{}; 126 StaticBufferDescInfo info{};
127 info.descriptor_type.Assign(StaticBuffer); 127 info.descriptor_type.Assign(StaticBuffer);
128 info.buffer_id.Assign(buffer_id); 128 info.buffer_id.Assign(buffer_id);
129 info.size.Assign(size); 129 info.size.Assign(static_cast<u32>(size));
130 return info.raw; 130 return info.raw;
131} 131}
132 132
@@ -160,11 +160,11 @@ union MappedBufferDescInfo {
160 BitField<4, 28, u32> size; 160 BitField<4, 28, u32> size;
161}; 161};
162 162
163inline u32 MappedBufferDesc(u32 size, MappedBufferPermissions perms) { 163inline u32 MappedBufferDesc(size_t size, MappedBufferPermissions perms) {
164 MappedBufferDescInfo info{}; 164 MappedBufferDescInfo info{};
165 info.flags.Assign(MappedBuffer); 165 info.flags.Assign(MappedBuffer);
166 info.perms.Assign(perms); 166 info.perms.Assign(perms);
167 info.size.Assign(size); 167 info.size.Assign(static_cast<u32>(size));
168 return info.raw; 168 return info.raw;
169} 169}
170 170
diff --git a/src/core/hle/ipc_helpers.h b/src/core/hle/ipc_helpers.h
index f0d89cffe..7cb95cbac 100644
--- a/src/core/hle/ipc_helpers.h
+++ b/src/core/hle/ipc_helpers.h
@@ -117,9 +117,9 @@ public:
117 117
118 void PushCurrentPIDHandle(); 118 void PushCurrentPIDHandle();
119 119
120 void PushStaticBuffer(VAddr buffer_vaddr, u32 size, u8 buffer_id); 120 void PushStaticBuffer(VAddr buffer_vaddr, size_t size, u8 buffer_id);
121 121
122 void PushMappedBuffer(VAddr buffer_vaddr, u32 size, MappedBufferPermissions perms); 122 void PushMappedBuffer(VAddr buffer_vaddr, size_t size, MappedBufferPermissions perms);
123}; 123};
124 124
125/// Push /// 125/// Push ///
@@ -190,12 +190,12 @@ inline void RequestBuilder::PushCurrentPIDHandle() {
190 Push(u32(0)); 190 Push(u32(0));
191} 191}
192 192
193inline void RequestBuilder::PushStaticBuffer(VAddr buffer_vaddr, u32 size, u8 buffer_id) { 193inline void RequestBuilder::PushStaticBuffer(VAddr buffer_vaddr, size_t size, u8 buffer_id) {
194 Push(StaticBufferDesc(size, buffer_id)); 194 Push(StaticBufferDesc(size, buffer_id));
195 Push(buffer_vaddr); 195 Push(buffer_vaddr);
196} 196}
197 197
198inline void RequestBuilder::PushMappedBuffer(VAddr buffer_vaddr, u32 size, 198inline void RequestBuilder::PushMappedBuffer(VAddr buffer_vaddr, size_t size,
199 MappedBufferPermissions perms) { 199 MappedBufferPermissions perms) {
200 Push(MappedBufferDesc(size, perms)); 200 Push(MappedBufferDesc(size, perms));
201 Push(buffer_vaddr); 201 Push(buffer_vaddr);
@@ -227,8 +227,8 @@ public:
227 bool validateHeader = true) { 227 bool validateHeader = true) {
228 if (validateHeader) 228 if (validateHeader)
229 ValidateHeader(); 229 ValidateHeader();
230 Header builderHeader{ 230 Header builderHeader{MakeHeader(static_cast<u16>(header.command_id), normal_params_size,
231 MakeHeader(header.command_id, normal_params_size, translate_params_size)}; 231 translate_params_size)};
232 if (context != nullptr) 232 if (context != nullptr)
233 return {*context, builderHeader}; 233 return {*context, builderHeader};
234 else 234 else
diff --git a/src/core/hle/kernel/hle_ipc.cpp b/src/core/hle/kernel/hle_ipc.cpp
index 5ebe2eca4..6020e9764 100644
--- a/src/core/hle/kernel/hle_ipc.cpp
+++ b/src/core/hle/kernel/hle_ipc.cpp
@@ -37,7 +37,7 @@ SharedPtr<Object> HLERequestContext::GetIncomingHandle(u32 id_from_cmdbuf) const
37 37
38u32 HLERequestContext::AddOutgoingHandle(SharedPtr<Object> object) { 38u32 HLERequestContext::AddOutgoingHandle(SharedPtr<Object> object) {
39 request_handles.push_back(std::move(object)); 39 request_handles.push_back(std::move(object));
40 return request_handles.size() - 1; 40 return static_cast<u32>(request_handles.size() - 1);
41} 41}
42 42
43void HLERequestContext::ClearIncomingObjects() { 43void HLERequestContext::ClearIncomingObjects() {
diff --git a/src/core/hle/kernel/kernel.h b/src/core/hle/kernel/kernel.h
index 9cf288b08..73fab3981 100644
--- a/src/core/hle/kernel/kernel.h
+++ b/src/core/hle/kernel/kernel.h
@@ -8,6 +8,7 @@
8#include <string> 8#include <string>
9#include <utility> 9#include <utility>
10#include <boost/smart_ptr/intrusive_ptr.hpp> 10#include <boost/smart_ptr/intrusive_ptr.hpp>
11#include "common/assert.h"
11#include "common/common_types.h" 12#include "common/common_types.h"
12 13
13namespace Kernel { 14namespace Kernel {
@@ -84,6 +85,8 @@ public:
84 case HandleType::ClientSession: 85 case HandleType::ClientSession:
85 return false; 86 return false;
86 } 87 }
88
89 UNREACHABLE();
87 } 90 }
88 91
89public: 92public:
@@ -129,4 +132,4 @@ void Init(u32 system_mode);
129/// Shutdown the kernel 132/// Shutdown the kernel
130void Shutdown(); 133void Shutdown();
131 134
132} // namespace 135} // namespace Kernel
diff --git a/src/core/hle/kernel/memory.cpp b/src/core/hle/kernel/memory.cpp
index 496d07cb5..7f27e9655 100644
--- a/src/core/hle/kernel/memory.cpp
+++ b/src/core/hle/kernel/memory.cpp
@@ -8,7 +8,6 @@
8#include <memory> 8#include <memory>
9#include <utility> 9#include <utility>
10#include <vector> 10#include <vector>
11#include "audio_core/audio_core.h"
12#include "common/assert.h" 11#include "common/assert.h"
13#include "common/common_types.h" 12#include "common/common_types.h"
14#include "common/logging/log.h" 13#include "common/logging/log.h"
@@ -24,7 +23,7 @@
24 23
25namespace Kernel { 24namespace Kernel {
26 25
27static MemoryRegionInfo memory_regions[3]; 26MemoryRegionInfo memory_regions[3];
28 27
29/// Size of the APPLICATION, SYSTEM and BASE memory regions (respectively) for each system 28/// Size of the APPLICATION, SYSTEM and BASE memory regions (respectively) for each system
30/// memory configuration type. 29/// memory configuration type.
@@ -96,9 +95,6 @@ MemoryRegionInfo* GetMemoryRegion(MemoryRegion region) {
96 } 95 }
97} 96}
98 97
99std::array<u8, Memory::VRAM_SIZE> vram;
100std::array<u8, Memory::N3DS_EXTRA_RAM_SIZE> n3ds_extra_ram;
101
102void HandleSpecialMapping(VMManager& address_space, const AddressMapping& mapping) { 98void HandleSpecialMapping(VMManager& address_space, const AddressMapping& mapping) {
103 using namespace Memory; 99 using namespace Memory;
104 100
@@ -143,30 +139,14 @@ void HandleSpecialMapping(VMManager& address_space, const AddressMapping& mappin
143 return; 139 return;
144 } 140 }
145 141
146 // TODO(yuriks): Use GetPhysicalPointer when that becomes independent of the virtual 142 u8* target_pointer = Memory::GetPhysicalPointer(area->paddr_base + offset_into_region);
147 // mappings.
148 u8* target_pointer = nullptr;
149 switch (area->paddr_base) {
150 case VRAM_PADDR:
151 target_pointer = vram.data();
152 break;
153 case DSP_RAM_PADDR:
154 target_pointer = AudioCore::GetDspMemory().data();
155 break;
156 case N3DS_EXTRA_RAM_PADDR:
157 target_pointer = n3ds_extra_ram.data();
158 break;
159 default:
160 UNREACHABLE();
161 }
162 143
163 // TODO(yuriks): This flag seems to have some other effect, but it's unknown what 144 // TODO(yuriks): This flag seems to have some other effect, but it's unknown what
164 MemoryState memory_state = mapping.unk_flag ? MemoryState::Static : MemoryState::IO; 145 MemoryState memory_state = mapping.unk_flag ? MemoryState::Static : MemoryState::IO;
165 146
166 auto vma = address_space 147 auto vma =
167 .MapBackingMemory(mapping.address, target_pointer + offset_into_region, 148 address_space.MapBackingMemory(mapping.address, target_pointer, mapping.size, memory_state)
168 mapping.size, memory_state) 149 .Unwrap();
169 .Unwrap();
170 address_space.Reprotect(vma, 150 address_space.Reprotect(vma,
171 mapping.read_only ? VMAPermission::Read : VMAPermission::ReadWrite); 151 mapping.read_only ? VMAPermission::Read : VMAPermission::ReadWrite);
172} 152}
diff --git a/src/core/hle/kernel/memory.h b/src/core/hle/kernel/memory.h
index 08c1a9989..da6bb3563 100644
--- a/src/core/hle/kernel/memory.h
+++ b/src/core/hle/kernel/memory.h
@@ -26,4 +26,6 @@ MemoryRegionInfo* GetMemoryRegion(MemoryRegion region);
26 26
27void HandleSpecialMapping(VMManager& address_space, const AddressMapping& mapping); 27void HandleSpecialMapping(VMManager& address_space, const AddressMapping& mapping);
28void MapSharedPages(VMManager& address_space); 28void MapSharedPages(VMManager& address_space);
29
30extern MemoryRegionInfo memory_regions[3];
29} // namespace Kernel 31} // namespace Kernel
diff --git a/src/core/hle/kernel/mutex.cpp b/src/core/hle/kernel/mutex.cpp
index cef961289..30dade552 100644
--- a/src/core/hle/kernel/mutex.cpp
+++ b/src/core/hle/kernel/mutex.cpp
@@ -25,10 +25,11 @@ void ReleaseThreadMutexes(Thread* thread) {
25Mutex::Mutex() {} 25Mutex::Mutex() {}
26Mutex::~Mutex() {} 26Mutex::~Mutex() {}
27 27
28SharedPtr<Mutex> Mutex::Create(bool initial_locked, std::string name) { 28SharedPtr<Mutex> Mutex::Create(bool initial_locked, VAddr addr, std::string name) {
29 SharedPtr<Mutex> mutex(new Mutex); 29 SharedPtr<Mutex> mutex(new Mutex);
30 30
31 mutex->lock_count = 0; 31 mutex->lock_count = 0;
32 mutex->addr = addr;
32 mutex->name = std::move(name); 33 mutex->name = std::move(name);
33 mutex->holding_thread = nullptr; 34 mutex->holding_thread = nullptr;
34 35
@@ -90,7 +91,7 @@ void Mutex::UpdatePriority() {
90 if (!holding_thread) 91 if (!holding_thread)
91 return; 92 return;
92 93
93 s32 best_priority = THREADPRIO_LOWEST; 94 u32 best_priority = THREADPRIO_LOWEST;
94 for (auto& waiter : GetWaitingThreads()) { 95 for (auto& waiter : GetWaitingThreads()) {
95 if (waiter->current_priority < best_priority) 96 if (waiter->current_priority < best_priority)
96 best_priority = waiter->current_priority; 97 best_priority = waiter->current_priority;
diff --git a/src/core/hle/kernel/mutex.h b/src/core/hle/kernel/mutex.h
index bacacd690..503d3ee75 100644
--- a/src/core/hle/kernel/mutex.h
+++ b/src/core/hle/kernel/mutex.h
@@ -21,7 +21,7 @@ public:
21 * @param name Optional name of mutex 21 * @param name Optional name of mutex
22 * @return Pointer to new Mutex object 22 * @return Pointer to new Mutex object
23 */ 23 */
24 static SharedPtr<Mutex> Create(bool initial_locked, std::string name = "Unknown"); 24 static SharedPtr<Mutex> Create(bool initial_locked, VAddr addr, std::string name = "Unknown");
25 25
26 std::string GetTypeName() const override { 26 std::string GetTypeName() const override {
27 return "Mutex"; 27 return "Mutex";
@@ -39,6 +39,7 @@ public:
39 u32 priority; ///< The priority of the mutex, used for priority inheritance. 39 u32 priority; ///< The priority of the mutex, used for priority inheritance.
40 std::string name; ///< Name of mutex (optional) 40 std::string name; ///< Name of mutex (optional)
41 SharedPtr<Thread> holding_thread; ///< Thread that has acquired the mutex 41 SharedPtr<Thread> holding_thread; ///< Thread that has acquired the mutex
42 VAddr addr;
42 43
43 /** 44 /**
44 * Elevate the mutex priority to the best priority 45 * Elevate the mutex priority to the best priority
diff --git a/src/core/hle/kernel/process.cpp b/src/core/hle/kernel/process.cpp
index 84ebdbc58..9e145866f 100644
--- a/src/core/hle/kernel/process.cpp
+++ b/src/core/hle/kernel/process.cpp
@@ -129,7 +129,8 @@ void Process::Run(VAddr entry_point, s32 main_thread_priority, u32 stack_size) {
129 } 129 }
130 130
131 vm_manager.LogLayout(Log::Level::Debug); 131 vm_manager.LogLayout(Log::Level::Debug);
132 Kernel::SetupMainThread(entry_point, main_thread_priority); 132
133 Kernel::SetupMainThread(entry_point, main_thread_priority, this);
133} 134}
134 135
135void Process::LoadModule(SharedPtr<CodeSet> module_, VAddr base_addr) { 136void Process::LoadModule(SharedPtr<CodeSet> module_, VAddr base_addr) {
diff --git a/src/core/hle/kernel/resource_limit.cpp b/src/core/hle/kernel/resource_limit.cpp
index a8f10a3ee..517dc47a8 100644
--- a/src/core/hle/kernel/resource_limit.cpp
+++ b/src/core/hle/kernel/resource_limit.cpp
@@ -61,7 +61,7 @@ s32 ResourceLimit::GetCurrentResourceValue(u32 resource) const {
61 } 61 }
62} 62}
63 63
64s32 ResourceLimit::GetMaxResourceValue(u32 resource) const { 64u32 ResourceLimit::GetMaxResourceValue(u32 resource) const {
65 switch (resource) { 65 switch (resource) {
66 case PRIORITY: 66 case PRIORITY:
67 return max_priority; 67 return max_priority;
diff --git a/src/core/hle/kernel/resource_limit.h b/src/core/hle/kernel/resource_limit.h
index 6cdfbcf8d..42874eb8d 100644
--- a/src/core/hle/kernel/resource_limit.h
+++ b/src/core/hle/kernel/resource_limit.h
@@ -67,7 +67,7 @@ public:
67 * @param resource Requested resource type 67 * @param resource Requested resource type
68 * @returns The max value of the resource type 68 * @returns The max value of the resource type
69 */ 69 */
70 s32 GetMaxResourceValue(u32 resource) const; 70 u32 GetMaxResourceValue(u32 resource) const;
71 71
72 /// Name of resource limit object. 72 /// Name of resource limit object.
73 std::string name; 73 std::string name;
diff --git a/src/core/hle/kernel/semaphore.cpp b/src/core/hle/kernel/semaphore.cpp
index fcf586728..2605b2595 100644
--- a/src/core/hle/kernel/semaphore.cpp
+++ b/src/core/hle/kernel/semaphore.cpp
@@ -13,7 +13,7 @@ namespace Kernel {
13Semaphore::Semaphore() {} 13Semaphore::Semaphore() {}
14Semaphore::~Semaphore() {} 14Semaphore::~Semaphore() {}
15 15
16ResultVal<SharedPtr<Semaphore>> Semaphore::Create(s32 initial_count, s32 max_count, 16ResultVal<SharedPtr<Semaphore>> Semaphore::Create(s32 initial_count, s32 max_count, VAddr address,
17 std::string name) { 17 std::string name) {
18 18
19 if (initial_count > max_count) 19 if (initial_count > max_count)
@@ -25,6 +25,7 @@ ResultVal<SharedPtr<Semaphore>> Semaphore::Create(s32 initial_count, s32 max_cou
25 // and the rest is reserved for the caller thread 25 // and the rest is reserved for the caller thread
26 semaphore->max_count = max_count; 26 semaphore->max_count = max_count;
27 semaphore->available_count = initial_count; 27 semaphore->available_count = initial_count;
28 semaphore->address = address;
28 semaphore->name = std::move(name); 29 semaphore->name = std::move(name);
29 30
30 return MakeResult<SharedPtr<Semaphore>>(std::move(semaphore)); 31 return MakeResult<SharedPtr<Semaphore>>(std::move(semaphore));
diff --git a/src/core/hle/kernel/semaphore.h b/src/core/hle/kernel/semaphore.h
index 7b0cacf2e..77c491a24 100644
--- a/src/core/hle/kernel/semaphore.h
+++ b/src/core/hle/kernel/semaphore.h
@@ -22,7 +22,7 @@ public:
22 * @param name Optional name of semaphore 22 * @param name Optional name of semaphore
23 * @return The created semaphore 23 * @return The created semaphore
24 */ 24 */
25 static ResultVal<SharedPtr<Semaphore>> Create(s32 initial_count, s32 max_count, 25 static ResultVal<SharedPtr<Semaphore>> Create(s32 initial_count, s32 max_count, VAddr address,
26 std::string name = "Unknown"); 26 std::string name = "Unknown");
27 27
28 std::string GetTypeName() const override { 28 std::string GetTypeName() const override {
@@ -39,6 +39,7 @@ public:
39 39
40 s32 max_count; ///< Maximum number of simultaneous holders the semaphore can have 40 s32 max_count; ///< Maximum number of simultaneous holders the semaphore can have
41 s32 available_count; ///< Number of free slots left in the semaphore 41 s32 available_count; ///< Number of free slots left in the semaphore
42 VAddr address;
42 std::string name; ///< Name of semaphore (optional) 43 std::string name; ///< Name of semaphore (optional)
43 44
44 bool ShouldWait(Thread* thread) const override; 45 bool ShouldWait(Thread* thread) const override;
diff --git a/src/core/hle/kernel/shared_memory.cpp b/src/core/hle/kernel/shared_memory.cpp
index a7b66142f..d45daca35 100644
--- a/src/core/hle/kernel/shared_memory.cpp
+++ b/src/core/hle/kernel/shared_memory.cpp
@@ -42,7 +42,8 @@ SharedPtr<SharedMemory> SharedMemory::Create(SharedPtr<Process> owner_process, u
42 memory_region->used += size; 42 memory_region->used += size;
43 43
44 shared_memory->linear_heap_phys_address = 44 shared_memory->linear_heap_phys_address =
45 Memory::FCRAM_PADDR + memory_region->base + shared_memory->backing_block_offset; 45 Memory::FCRAM_PADDR + memory_region->base +
46 static_cast<PAddr>(shared_memory->backing_block_offset);
46 47
47 // Increase the amount of used linear heap memory for the owner process. 48 // Increase the amount of used linear heap memory for the owner process.
48 if (shared_memory->owner_process != nullptr) { 49 if (shared_memory->owner_process != nullptr) {
@@ -54,22 +55,19 @@ SharedPtr<SharedMemory> SharedMemory::Create(SharedPtr<Process> owner_process, u
54 Kernel::g_current_process->vm_manager.RefreshMemoryBlockMappings(linheap_memory.get()); 55 Kernel::g_current_process->vm_manager.RefreshMemoryBlockMappings(linheap_memory.get());
55 } 56 }
56 } else { 57 } else {
57 // TODO(Subv): What happens if an application tries to create multiple memory blocks
58 // pointing to the same address?
59 auto& vm_manager = shared_memory->owner_process->vm_manager; 58 auto& vm_manager = shared_memory->owner_process->vm_manager;
60 // The memory is already available and mapped in the owner process. 59 // The memory is already available and mapped in the owner process.
61 auto vma = vm_manager.FindVMA(address)->second; 60 auto vma = vm_manager.FindVMA(address);
62 // Copy it over to our own storage 61 ASSERT_MSG(vma != vm_manager.vma_map.end(), "Invalid memory address");
63 shared_memory->backing_block = std::make_shared<std::vector<u8>>( 62 ASSERT_MSG(vma->second.backing_block, "Backing block doesn't exist for address");
64 vma.backing_block->data() + vma.offset, vma.backing_block->data() + vma.offset + size); 63
65 shared_memory->backing_block_offset = 0; 64 // The returned VMA might be a bigger one encompassing the desired address.
66 // Unmap the existing pages 65 auto vma_offset = address - vma->first;
67 vm_manager.UnmapRange(address, size); 66 ASSERT_MSG(vma_offset + size <= vma->second.size,
68 // Map our own block into the address space 67 "Shared memory exceeds bounds of mapped block");
69 vm_manager.MapMemoryBlock(address, shared_memory->backing_block, 0, size, 68
70 MemoryState::Shared); 69 shared_memory->backing_block = vma->second.backing_block;
71 // Reprotect the block with the new permissions 70 shared_memory->backing_block_offset = vma->second.offset + vma_offset;
72 vm_manager.ReprotectRange(address, size, ConvertPermissions(permissions));
73 } 71 }
74 72
75 shared_memory->base_address = address; 73 shared_memory->base_address = address;
@@ -183,4 +181,4 @@ u8* SharedMemory::GetPointer(u32 offset) {
183 return backing_block->data() + backing_block_offset + offset; 181 return backing_block->data() + backing_block_offset + offset;
184} 182}
185 183
186} // namespace 184} // namespace Kernel
diff --git a/src/core/hle/kernel/shared_memory.h b/src/core/hle/kernel/shared_memory.h
index 94b335ed1..93a6f2182 100644
--- a/src/core/hle/kernel/shared_memory.h
+++ b/src/core/hle/kernel/shared_memory.h
@@ -114,7 +114,7 @@ public:
114 /// Backing memory for this shared memory block. 114 /// Backing memory for this shared memory block.
115 std::shared_ptr<std::vector<u8>> backing_block; 115 std::shared_ptr<std::vector<u8>> backing_block;
116 /// Offset into the backing block for this shared memory. 116 /// Offset into the backing block for this shared memory.
117 u32 backing_block_offset; 117 size_t backing_block_offset;
118 /// Size of the memory block. Page-aligned. 118 /// Size of the memory block. Page-aligned.
119 u32 size; 119 u32 size;
120 /// Permission restrictions applied to the process which created the block. 120 /// Permission restrictions applied to the process which created the block.
diff --git a/src/core/hle/kernel/thread.cpp b/src/core/hle/kernel/thread.cpp
index c01d08ebb..75df49ac2 100644
--- a/src/core/hle/kernel/thread.cpp
+++ b/src/core/hle/kernel/thread.cpp
@@ -111,7 +111,7 @@ void Thread::Stop() {
111 111
112Thread* ArbitrateHighestPriorityThread(u32 address) { 112Thread* ArbitrateHighestPriorityThread(u32 address) {
113 Thread* highest_priority_thread = nullptr; 113 Thread* highest_priority_thread = nullptr;
114 s32 priority = THREADPRIO_LOWEST; 114 u32 priority = THREADPRIO_LOWEST;
115 115
116 // Iterate through threads, find highest priority thread that is waiting to be arbitrated... 116 // Iterate through threads, find highest priority thread that is waiting to be arbitrated...
117 for (auto& thread : thread_list) { 117 for (auto& thread : thread_list) {
@@ -171,15 +171,24 @@ static void SwitchContext(Thread* new_thread) {
171 // Cancel any outstanding wakeup events for this thread 171 // Cancel any outstanding wakeup events for this thread
172 CoreTiming::UnscheduleEvent(ThreadWakeupEventType, new_thread->callback_handle); 172 CoreTiming::UnscheduleEvent(ThreadWakeupEventType, new_thread->callback_handle);
173 173
174 auto previous_process = Kernel::g_current_process;
175
174 current_thread = new_thread; 176 current_thread = new_thread;
175 177
176 ready_queue.remove(new_thread->current_priority, new_thread); 178 ready_queue.remove(new_thread->current_priority, new_thread);
177 new_thread->status = THREADSTATUS_RUNNING; 179 new_thread->status = THREADSTATUS_RUNNING;
178 180
181 if (previous_process != current_thread->owner_process) {
182 Kernel::g_current_process = current_thread->owner_process;
183 SetCurrentPageTable(&Kernel::g_current_process->vm_manager.page_table);
184 }
185
179 Core::CPU().LoadContext(new_thread->context); 186 Core::CPU().LoadContext(new_thread->context);
180 Core::CPU().SetCP15Register(CP15_THREAD_URO, new_thread->GetTLSAddress()); 187 Core::CPU().SetCP15Register(CP15_THREAD_URO, new_thread->GetTLSAddress());
181 } else { 188 } else {
182 current_thread = nullptr; 189 current_thread = nullptr;
190 // Note: We do not reset the current process and current page table when idling because
191 // technically we haven't changed processes, our threads are just paused.
183 } 192 }
184} 193}
185 194
@@ -238,12 +247,15 @@ static void ThreadWakeupCallback(u64 thread_handle, int cycles_late) {
238 247
239 if (thread->status == THREADSTATUS_WAIT_SYNCH_ANY || 248 if (thread->status == THREADSTATUS_WAIT_SYNCH_ANY ||
240 thread->status == THREADSTATUS_WAIT_SYNCH_ALL || thread->status == THREADSTATUS_WAIT_ARB) { 249 thread->status == THREADSTATUS_WAIT_SYNCH_ALL || thread->status == THREADSTATUS_WAIT_ARB) {
241 thread->wait_set_output = false; 250
251 // Invoke the wakeup callback before clearing the wait objects
252 if (thread->wakeup_callback)
253 thread->wakeup_callback(ThreadWakeupReason::Timeout, thread, nullptr);
254
242 // Remove the thread from each of its waiting objects' waitlists 255 // Remove the thread from each of its waiting objects' waitlists
243 for (auto& object : thread->wait_objects) 256 for (auto& object : thread->wait_objects)
244 object->RemoveWaitingThread(thread.get()); 257 object->RemoveWaitingThread(thread.get());
245 thread->wait_objects.clear(); 258 thread->wait_objects.clear();
246 thread->SetWaitSynchronizationResult(RESULT_TIMEOUT);
247 } 259 }
248 260
249 thread->ResumeFromWait(); 261 thread->ResumeFromWait();
@@ -269,6 +281,9 @@ void Thread::ResumeFromWait() {
269 break; 281 break;
270 282
271 case THREADSTATUS_READY: 283 case THREADSTATUS_READY:
284 // The thread's wakeup callback must have already been cleared when the thread was first
285 // awoken.
286 ASSERT(wakeup_callback == nullptr);
272 // If the thread is waiting on multiple wait objects, it might be awoken more than once 287 // If the thread is waiting on multiple wait objects, it might be awoken more than once
273 // before actually resuming. We can ignore subsequent wakeups if the thread status has 288 // before actually resuming. We can ignore subsequent wakeups if the thread status has
274 // already been set to THREADSTATUS_READY. 289 // already been set to THREADSTATUS_READY.
@@ -284,6 +299,8 @@ void Thread::ResumeFromWait() {
284 return; 299 return;
285 } 300 }
286 301
302 wakeup_callback = nullptr;
303
287 ready_queue.push_back(current_priority, this); 304 ready_queue.push_back(current_priority, this);
288 status = THREADSTATUS_READY; 305 status = THREADSTATUS_READY;
289 Core::System::GetInstance().PrepareReschedule(); 306 Core::System::GetInstance().PrepareReschedule();
@@ -302,7 +319,7 @@ static void DebugThreadQueue() {
302 } 319 }
303 320
304 for (auto& t : thread_list) { 321 for (auto& t : thread_list) {
305 s32 priority = ready_queue.contains(t.get()); 322 u32 priority = ready_queue.contains(t.get());
306 if (priority != -1) { 323 if (priority != -1) {
307 LOG_DEBUG(Kernel, "0x%02X %u", priority, t->GetObjectId()); 324 LOG_DEBUG(Kernel, "0x%02X %u", priority, t->GetObjectId());
308 } 325 }
@@ -352,7 +369,8 @@ static void ResetThreadContext(ARM_Interface::ThreadContext& context, VAddr stac
352} 369}
353 370
354ResultVal<SharedPtr<Thread>> Thread::Create(std::string name, VAddr entry_point, u32 priority, 371ResultVal<SharedPtr<Thread>> Thread::Create(std::string name, VAddr entry_point, u32 priority,
355 u32 arg, s32 processor_id, VAddr stack_top) { 372 u32 arg, s32 processor_id, VAddr stack_top,
373 SharedPtr<Process> owner_process) {
356 // Check if priority is in ranged. Lowest priority -> highest priority id. 374 // Check if priority is in ranged. Lowest priority -> highest priority id.
357 if (priority > THREADPRIO_LOWEST) { 375 if (priority > THREADPRIO_LOWEST) {
358 LOG_ERROR(Kernel_SVC, "Invalid thread priority: %d", priority); 376 LOG_ERROR(Kernel_SVC, "Invalid thread priority: %d", priority);
@@ -366,7 +384,7 @@ ResultVal<SharedPtr<Thread>> Thread::Create(std::string name, VAddr entry_point,
366 384
367 // TODO(yuriks): Other checks, returning 0xD9001BEA 385 // TODO(yuriks): Other checks, returning 0xD9001BEA
368 386
369 if (!Memory::IsValidVirtualAddress(entry_point)) { 387 if (!Memory::IsValidVirtualAddress(*owner_process, entry_point)) {
370 LOG_ERROR(Kernel_SVC, "(name=%s): invalid entry %08x", name.c_str(), entry_point); 388 LOG_ERROR(Kernel_SVC, "(name=%s): invalid entry %08x", name.c_str(), entry_point);
371 // TODO: Verify error 389 // TODO: Verify error
372 return ResultCode(ErrorDescription::InvalidAddress, ErrorModule::Kernel, 390 return ResultCode(ErrorDescription::InvalidAddress, ErrorModule::Kernel,
@@ -385,15 +403,14 @@ ResultVal<SharedPtr<Thread>> Thread::Create(std::string name, VAddr entry_point,
385 thread->nominal_priority = thread->current_priority = priority; 403 thread->nominal_priority = thread->current_priority = priority;
386 thread->last_running_ticks = CoreTiming::GetTicks(); 404 thread->last_running_ticks = CoreTiming::GetTicks();
387 thread->processor_id = processor_id; 405 thread->processor_id = processor_id;
388 thread->wait_set_output = false;
389 thread->wait_objects.clear(); 406 thread->wait_objects.clear();
390 thread->wait_address = 0; 407 thread->wait_address = 0;
391 thread->name = std::move(name); 408 thread->name = std::move(name);
392 thread->callback_handle = wakeup_callback_handle_table.Create(thread).Unwrap(); 409 thread->callback_handle = wakeup_callback_handle_table.Create(thread).Unwrap();
393 thread->owner_process = g_current_process; 410 thread->owner_process = owner_process;
394 411
395 // Find the next available TLS index, and mark it as used 412 // Find the next available TLS index, and mark it as used
396 auto& tls_slots = Kernel::g_current_process->tls_slots; 413 auto& tls_slots = owner_process->tls_slots;
397 bool needs_allocation = true; 414 bool needs_allocation = true;
398 u32 available_page; // Which allocated page has free space 415 u32 available_page; // Which allocated page has free space
399 u32 available_slot; // Which slot within the page is free 416 u32 available_slot; // Which slot within the page is free
@@ -412,18 +429,18 @@ ResultVal<SharedPtr<Thread>> Thread::Create(std::string name, VAddr entry_point,
412 return ERR_OUT_OF_MEMORY; 429 return ERR_OUT_OF_MEMORY;
413 } 430 }
414 431
415 u32 offset = linheap_memory->size(); 432 size_t offset = linheap_memory->size();
416 433
417 // Allocate some memory from the end of the linear heap for this region. 434 // Allocate some memory from the end of the linear heap for this region.
418 linheap_memory->insert(linheap_memory->end(), Memory::PAGE_SIZE, 0); 435 linheap_memory->insert(linheap_memory->end(), Memory::PAGE_SIZE, 0);
419 memory_region->used += Memory::PAGE_SIZE; 436 memory_region->used += Memory::PAGE_SIZE;
420 Kernel::g_current_process->linear_heap_used += Memory::PAGE_SIZE; 437 owner_process->linear_heap_used += Memory::PAGE_SIZE;
421 438
422 tls_slots.emplace_back(0); // The page is completely available at the start 439 tls_slots.emplace_back(0); // The page is completely available at the start
423 available_page = tls_slots.size() - 1; 440 available_page = static_cast<u32>(tls_slots.size() - 1);
424 available_slot = 0; // Use the first slot in the new page 441 available_slot = 0; // Use the first slot in the new page
425 442
426 auto& vm_manager = Kernel::g_current_process->vm_manager; 443 auto& vm_manager = owner_process->vm_manager;
427 vm_manager.RefreshMemoryBlockMappings(linheap_memory.get()); 444 vm_manager.RefreshMemoryBlockMappings(linheap_memory.get());
428 445
429 // Map the page to the current process' address space. 446 // Map the page to the current process' address space.
@@ -447,7 +464,7 @@ ResultVal<SharedPtr<Thread>> Thread::Create(std::string name, VAddr entry_point,
447 return MakeResult<SharedPtr<Thread>>(std::move(thread)); 464 return MakeResult<SharedPtr<Thread>>(std::move(thread));
448} 465}
449 466
450void Thread::SetPriority(s32 priority) { 467void Thread::SetPriority(u32 priority) {
451 ASSERT_MSG(priority <= THREADPRIO_LOWEST && priority >= THREADPRIO_HIGHEST, 468 ASSERT_MSG(priority <= THREADPRIO_LOWEST && priority >= THREADPRIO_HIGHEST,
452 "Invalid priority value."); 469 "Invalid priority value.");
453 // If thread was ready, adjust queues 470 // If thread was ready, adjust queues
@@ -460,7 +477,7 @@ void Thread::SetPriority(s32 priority) {
460} 477}
461 478
462void Thread::UpdatePriority() { 479void Thread::UpdatePriority() {
463 s32 best_priority = nominal_priority; 480 u32 best_priority = nominal_priority;
464 for (auto& mutex : held_mutexes) { 481 for (auto& mutex : held_mutexes) {
465 if (mutex->priority < best_priority) 482 if (mutex->priority < best_priority)
466 best_priority = mutex->priority; 483 best_priority = mutex->priority;
@@ -468,7 +485,7 @@ void Thread::UpdatePriority() {
468 BoostPriority(best_priority); 485 BoostPriority(best_priority);
469} 486}
470 487
471void Thread::BoostPriority(s32 priority) { 488void Thread::BoostPriority(u32 priority) {
472 // If thread was ready, adjust queues 489 // If thread was ready, adjust queues
473 if (status == THREADSTATUS_READY) 490 if (status == THREADSTATUS_READY)
474 ready_queue.move(this, current_priority, priority); 491 ready_queue.move(this, current_priority, priority);
@@ -477,21 +494,20 @@ void Thread::BoostPriority(s32 priority) {
477 current_priority = priority; 494 current_priority = priority;
478} 495}
479 496
480SharedPtr<Thread> SetupMainThread(VAddr entry_point, s32 priority) { 497SharedPtr<Thread> SetupMainThread(u32 entry_point, u32 priority, SharedPtr<Process> owner_process) {
481 DEBUG_ASSERT(!GetCurrentThread()); 498 // Setup page table so we can write to memory
499 SetCurrentPageTable(&Kernel::g_current_process->vm_manager.page_table);
482 500
483 // Initialize new "main" thread 501 // Initialize new "main" thread
484 auto thread_res = Thread::Create("main", entry_point, priority, 0, THREADPROCESSORID_0, 502 auto thread_res = Thread::Create("main", entry_point, priority, 0, THREADPROCESSORID_0,
485 Memory::HEAP_VADDR_END); 503 Memory::HEAP_VADDR_END, owner_process);
486 504
487 SharedPtr<Thread> thread = std::move(thread_res).Unwrap(); 505 SharedPtr<Thread> thread = std::move(thread_res).Unwrap();
488 506
489 thread->context.fpscr = 507 thread->context.fpscr =
490 FPSCR_DEFAULT_NAN | FPSCR_FLUSH_TO_ZERO | FPSCR_ROUND_TOZERO | FPSCR_IXC; // 0x03C00010 508 FPSCR_DEFAULT_NAN | FPSCR_FLUSH_TO_ZERO | FPSCR_ROUND_TOZERO | FPSCR_IXC; // 0x03C00010
491 509
492 // Run new "main" thread 510 // Note: The newly created thread will be run when the scheduler fires.
493 SwitchContext(thread.get());
494
495 return thread; 511 return thread;
496} 512}
497 513
@@ -525,7 +541,13 @@ void Thread::SetWaitSynchronizationOutput(s32 output) {
525s32 Thread::GetWaitObjectIndex(WaitObject* object) const { 541s32 Thread::GetWaitObjectIndex(WaitObject* object) const {
526 ASSERT_MSG(!wait_objects.empty(), "Thread is not waiting for anything"); 542 ASSERT_MSG(!wait_objects.empty(), "Thread is not waiting for anything");
527 auto match = std::find(wait_objects.rbegin(), wait_objects.rend(), object); 543 auto match = std::find(wait_objects.rbegin(), wait_objects.rend(), object);
528 return std::distance(match, wait_objects.rend()) - 1; 544 return static_cast<s32>(std::distance(match, wait_objects.rend()) - 1);
545}
546
547VAddr Thread::GetCommandBufferAddress() const {
548 // Offset from the start of TLS at which the IPC command buffer begins.
549 static constexpr int CommandHeaderOffset = 0x80;
550 return GetTLSAddress() + CommandHeaderOffset;
529} 551}
530 552
531//////////////////////////////////////////////////////////////////////////////////////////////////// 553////////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/src/core/hle/kernel/thread.h b/src/core/hle/kernel/thread.h
index 2cadb91db..fafcab156 100644
--- a/src/core/hle/kernel/thread.h
+++ b/src/core/hle/kernel/thread.h
@@ -15,7 +15,7 @@
15#include "core/hle/kernel/wait_object.h" 15#include "core/hle/kernel/wait_object.h"
16#include "core/hle/result.h" 16#include "core/hle/result.h"
17 17
18enum ThreadPriority : s32 { 18enum ThreadPriority : u32 {
19 THREADPRIO_HIGHEST = 0, ///< Highest thread priority 19 THREADPRIO_HIGHEST = 0, ///< Highest thread priority
20 THREADPRIO_USERLAND_MAX = 24, ///< Highest thread priority for userland apps 20 THREADPRIO_USERLAND_MAX = 24, ///< Highest thread priority for userland apps
21 THREADPRIO_DEFAULT = 48, ///< Default thread priority for userland apps 21 THREADPRIO_DEFAULT = 48, ///< Default thread priority for userland apps
@@ -41,6 +41,11 @@ enum ThreadStatus {
41 THREADSTATUS_DEAD ///< Run to completion, or forcefully terminated 41 THREADSTATUS_DEAD ///< Run to completion, or forcefully terminated
42}; 42};
43 43
44enum class ThreadWakeupReason {
45 Signal, // The thread was woken up by WakeupAllWaitingThreads due to an object signal.
46 Timeout // The thread was woken up due to a wait timeout.
47};
48
44namespace Kernel { 49namespace Kernel {
45 50
46class Mutex; 51class Mutex;
@@ -56,10 +61,12 @@ public:
56 * @param arg User data to pass to the thread 61 * @param arg User data to pass to the thread
57 * @param processor_id The ID(s) of the processors on which the thread is desired to be run 62 * @param processor_id The ID(s) of the processors on which the thread is desired to be run
58 * @param stack_top The address of the thread's stack top 63 * @param stack_top The address of the thread's stack top
64 * @param owner_process The parent process for the thread
59 * @return A shared pointer to the newly created thread 65 * @return A shared pointer to the newly created thread
60 */ 66 */
61 static ResultVal<SharedPtr<Thread>> Create(std::string name, VAddr entry_point, u32 priority, 67 static ResultVal<SharedPtr<Thread>> Create(std::string name, VAddr entry_point, u32 priority,
62 u32 arg, s32 processor_id, VAddr stack_top); 68 u32 arg, s32 processor_id, VAddr stack_top,
69 SharedPtr<Process> owner_process);
63 70
64 std::string GetName() const override { 71 std::string GetName() const override {
65 return name; 72 return name;
@@ -80,7 +87,7 @@ public:
80 * Gets the thread's current priority 87 * Gets the thread's current priority
81 * @return The current thread's priority 88 * @return The current thread's priority
82 */ 89 */
83 s32 GetPriority() const { 90 u32 GetPriority() const {
84 return current_priority; 91 return current_priority;
85 } 92 }
86 93
@@ -88,7 +95,7 @@ public:
88 * Sets the thread's current priority 95 * Sets the thread's current priority
89 * @param priority The new priority 96 * @param priority The new priority
90 */ 97 */
91 void SetPriority(s32 priority); 98 void SetPriority(u32 priority);
92 99
93 /** 100 /**
94 * Boost's a thread's priority to the best priority among the thread's held mutexes. 101 * Boost's a thread's priority to the best priority among the thread's held mutexes.
@@ -100,7 +107,7 @@ public:
100 * Temporarily boosts the thread's priority until the next time it is scheduled 107 * Temporarily boosts the thread's priority until the next time it is scheduled
101 * @param priority The new priority 108 * @param priority The new priority
102 */ 109 */
103 void BoostPriority(s32 priority); 110 void BoostPriority(u32 priority);
104 111
105 /** 112 /**
106 * Gets the thread's thread ID 113 * Gets the thread's thread ID
@@ -116,9 +123,9 @@ public:
116 void ResumeFromWait(); 123 void ResumeFromWait();
117 124
118 /** 125 /**
119 * Schedules an event to wake up the specified thread after the specified delay 126 * Schedules an event to wake up the specified thread after the specified delay
120 * @param nanoseconds The time this thread will be allowed to sleep for 127 * @param nanoseconds The time this thread will be allowed to sleep for
121 */ 128 */
122 void WakeAfterDelay(s64 nanoseconds); 129 void WakeAfterDelay(s64 nanoseconds);
123 130
124 /** 131 /**
@@ -157,6 +164,12 @@ public:
157 return tls_address; 164 return tls_address;
158 } 165 }
159 166
167 /*
168 * Returns the address of the current thread's command buffer, located in the TLS.
169 * @returns VAddr of the thread's command buffer.
170 */
171 VAddr GetCommandBufferAddress() const;
172
160 /** 173 /**
161 * Returns whether this thread is waiting for all the objects in 174 * Returns whether this thread is waiting for all the objects in
162 * its wait list to become ready, as a result of a WaitSynchronizationN call 175 * its wait list to become ready, as a result of a WaitSynchronizationN call
@@ -174,8 +187,8 @@ public:
174 VAddr entry_point; 187 VAddr entry_point;
175 VAddr stack_top; 188 VAddr stack_top;
176 189
177 s32 nominal_priority; ///< Nominal thread priority, as set by the emulated application 190 u32 nominal_priority; ///< Nominal thread priority, as set by the emulated application
178 s32 current_priority; ///< Current thread priority, can be temporarily changed 191 u32 current_priority; ///< Current thread priority, can be temporarily changed
179 192
180 u64 last_running_ticks; ///< CPU tick when thread was last running 193 u64 last_running_ticks; ///< CPU tick when thread was last running
181 194
@@ -197,14 +210,18 @@ public:
197 210
198 VAddr wait_address; ///< If waiting on an AddressArbiter, this is the arbitration address 211 VAddr wait_address; ///< If waiting on an AddressArbiter, this is the arbitration address
199 212
200 /// True if the WaitSynchronizationN output parameter should be set on thread wakeup.
201 bool wait_set_output;
202
203 std::string name; 213 std::string name;
204 214
205 /// Handle used as userdata to reference this object when inserting into the CoreTiming queue. 215 /// Handle used as userdata to reference this object when inserting into the CoreTiming queue.
206 Handle callback_handle; 216 Handle callback_handle;
207 217
218 using WakeupCallback = void(ThreadWakeupReason reason, SharedPtr<Thread> thread,
219 SharedPtr<WaitObject> object);
220 // Callback that will be invoked when the thread is resumed from a waiting state. If the thread
221 // was waiting via WaitSynchronizationN then the object will be the last object that became
222 // available. In case of a timeout, the object will be nullptr.
223 std::function<WakeupCallback> wakeup_callback;
224
208private: 225private:
209 Thread(); 226 Thread();
210 ~Thread() override; 227 ~Thread() override;
@@ -214,9 +231,10 @@ private:
214 * Sets up the primary application thread 231 * Sets up the primary application thread
215 * @param entry_point The address at which the thread should start execution 232 * @param entry_point The address at which the thread should start execution
216 * @param priority The priority to give the main thread 233 * @param priority The priority to give the main thread
234 * @param owner_process The parent process for the main thread
217 * @return A shared pointer to the main thread 235 * @return A shared pointer to the main thread
218 */ 236 */
219SharedPtr<Thread> SetupMainThread(VAddr entry_point, s32 priority); 237SharedPtr<Thread> SetupMainThread(u32 entry_point, u32 priority, SharedPtr<Process> owner_process);
220 238
221/** 239/**
222 * Returns whether there are any threads that are ready to run. 240 * Returns whether there are any threads that are ready to run.
@@ -276,4 +294,4 @@ void ThreadingShutdown();
276 */ 294 */
277const std::vector<SharedPtr<Thread>>& GetThreadList(); 295const std::vector<SharedPtr<Thread>>& GetThreadList();
278 296
279} // namespace 297} // namespace Kernel
diff --git a/src/core/hle/kernel/vm_manager.cpp b/src/core/hle/kernel/vm_manager.cpp
index f70c32501..9762ef535 100644
--- a/src/core/hle/kernel/vm_manager.cpp
+++ b/src/core/hle/kernel/vm_manager.cpp
@@ -4,8 +4,10 @@
4 4
5#include <iterator> 5#include <iterator>
6#include "common/assert.h" 6#include "common/assert.h"
7#include "core/arm/arm_interface.h"
7#include "core/hle/kernel/errors.h" 8#include "core/hle/kernel/errors.h"
8#include "core/hle/kernel/vm_manager.h" 9#include "core/hle/kernel/vm_manager.h"
10#include "core/core.h"
9#include "core/memory.h" 11#include "core/memory.h"
10#include "core/memory_setup.h" 12#include "core/memory_setup.h"
11#include "core/mmio.h" 13#include "core/mmio.h"
@@ -56,6 +58,10 @@ void VMManager::Reset() {
56 initial_vma.size = MAX_ADDRESS; 58 initial_vma.size = MAX_ADDRESS;
57 vma_map.emplace(initial_vma.base, initial_vma); 59 vma_map.emplace(initial_vma.base, initial_vma);
58 60
61 page_table.pointers.fill(nullptr);
62 page_table.attributes.fill(Memory::PageType::Unmapped);
63 page_table.cached_res_count.fill(0);
64
59 //UpdatePageTableForVMA(initial_vma); 65 //UpdatePageTableForVMA(initial_vma);
60} 66}
61 67
@@ -79,6 +85,8 @@ ResultVal<VMManager::VMAHandle> VMManager::MapMemoryBlock(VAddr target,
79 VirtualMemoryArea& final_vma = vma_handle->second; 85 VirtualMemoryArea& final_vma = vma_handle->second;
80 ASSERT(final_vma.size == size); 86 ASSERT(final_vma.size == size);
81 87
88 Core::CPU().MapBackingMemory(target, size, block->data() + offset, VMAPermission::ReadWriteExecute);
89
82 final_vma.type = VMAType::AllocatedMemoryBlock; 90 final_vma.type = VMAType::AllocatedMemoryBlock;
83 final_vma.permissions = VMAPermission::ReadWrite; 91 final_vma.permissions = VMAPermission::ReadWrite;
84 final_vma.meminfo_state = state; 92 final_vma.meminfo_state = state;
@@ -98,6 +106,8 @@ ResultVal<VMManager::VMAHandle> VMManager::MapBackingMemory(VAddr target, u8* me
98 VirtualMemoryArea& final_vma = vma_handle->second; 106 VirtualMemoryArea& final_vma = vma_handle->second;
99 ASSERT(final_vma.size == size); 107 ASSERT(final_vma.size == size);
100 108
109 Core::CPU().MapBackingMemory(target, size, memory, VMAPermission::ReadWriteExecute);
110
101 final_vma.type = VMAType::BackingMemory; 111 final_vma.type = VMAType::BackingMemory;
102 final_vma.permissions = VMAPermission::ReadWrite; 112 final_vma.permissions = VMAPermission::ReadWrite;
103 final_vma.meminfo_state = state; 113 final_vma.meminfo_state = state;
@@ -328,16 +338,17 @@ VMManager::VMAIter VMManager::MergeAdjacent(VMAIter iter) {
328void VMManager::UpdatePageTableForVMA(const VirtualMemoryArea& vma) { 338void VMManager::UpdatePageTableForVMA(const VirtualMemoryArea& vma) {
329 switch (vma.type) { 339 switch (vma.type) {
330 case VMAType::Free: 340 case VMAType::Free:
331 Memory::UnmapRegion(vma.base, vma.size); 341 Memory::UnmapRegion(page_table, vma.base, vma.size);
332 break; 342 break;
333 case VMAType::AllocatedMemoryBlock: 343 case VMAType::AllocatedMemoryBlock:
334 Memory::MapMemoryRegion(vma.base, vma.size, vma.backing_block->data() + vma.offset); 344 Memory::MapMemoryRegion(page_table, vma.base, vma.size,
345 vma.backing_block->data() + vma.offset);
335 break; 346 break;
336 case VMAType::BackingMemory: 347 case VMAType::BackingMemory:
337 Memory::MapMemoryRegion(vma.base, vma.size, vma.backing_memory); 348 Memory::MapMemoryRegion(page_table, vma.base, vma.size, vma.backing_memory);
338 break; 349 break;
339 case VMAType::MMIO: 350 case VMAType::MMIO:
340 Memory::MapIoRegion(vma.base, vma.size, vma.mmio_handler); 351 Memory::MapIoRegion(page_table, vma.base, vma.size, vma.mmio_handler);
341 break; 352 break;
342 } 353 }
343} 354}
diff --git a/src/core/hle/kernel/vm_manager.h b/src/core/hle/kernel/vm_manager.h
index aa2265ce6..cb5bb8243 100644
--- a/src/core/hle/kernel/vm_manager.h
+++ b/src/core/hle/kernel/vm_manager.h
@@ -9,6 +9,7 @@
9#include <vector> 9#include <vector>
10#include "common/common_types.h" 10#include "common/common_types.h"
11#include "core/hle/result.h" 11#include "core/hle/result.h"
12#include "core/memory.h"
12#include "core/mmio.h" 13#include "core/mmio.h"
13 14
14namespace Kernel { 15namespace Kernel {
@@ -102,7 +103,6 @@ struct VirtualMemoryArea {
102 * - http://duartes.org/gustavo/blog/post/page-cache-the-affair-between-memory-and-files/ 103 * - http://duartes.org/gustavo/blog/post/page-cache-the-affair-between-memory-and-files/
103 */ 104 */
104class VMManager final { 105class VMManager final {
105 // TODO(yuriks): Make page tables switchable to support multiple VMManagers
106public: 106public:
107 /** 107 /**
108 * The maximum amount of address space managed by the kernel. Addresses above this are never 108 * The maximum amount of address space managed by the kernel. Addresses above this are never
@@ -184,6 +184,10 @@ public:
184 /// Dumps the address space layout to the log, for debugging 184 /// Dumps the address space layout to the log, for debugging
185 void LogLayout(Log::Level log_level) const; 185 void LogLayout(Log::Level log_level) const;
186 186
187 /// Each VMManager has its own page table, which is set as the main one when the owning process
188 /// is scheduled.
189 Memory::PageTable page_table;
190
187private: 191private:
188 using VMAIter = decltype(vma_map)::iterator; 192 using VMAIter = decltype(vma_map)::iterator;
189 193
diff --git a/src/core/hle/kernel/wait_object.cpp b/src/core/hle/kernel/wait_object.cpp
index f245eda6c..469554908 100644
--- a/src/core/hle/kernel/wait_object.cpp
+++ b/src/core/hle/kernel/wait_object.cpp
@@ -34,7 +34,7 @@ void WaitObject::RemoveWaitingThread(Thread* thread) {
34 34
35SharedPtr<Thread> WaitObject::GetHighestPriorityReadyThread() { 35SharedPtr<Thread> WaitObject::GetHighestPriorityReadyThread() {
36 Thread* candidate = nullptr; 36 Thread* candidate = nullptr;
37 s32 candidate_priority = THREADPRIO_LOWEST + 1; 37 u32 candidate_priority = THREADPRIO_LOWEST + 1;
38 38
39 for (const auto& thread : waiting_threads) { 39 for (const auto& thread : waiting_threads) {
40 // The list of waiting threads must not contain threads that are not waiting to be awakened. 40 // The list of waiting threads must not contain threads that are not waiting to be awakened.
@@ -71,23 +71,20 @@ void WaitObject::WakeupAllWaitingThreads() {
71 while (auto thread = GetHighestPriorityReadyThread()) { 71 while (auto thread = GetHighestPriorityReadyThread()) {
72 if (!thread->IsSleepingOnWaitAll()) { 72 if (!thread->IsSleepingOnWaitAll()) {
73 Acquire(thread.get()); 73 Acquire(thread.get());
74 // Set the output index of the WaitSynchronizationN call to the index of this object.
75 if (thread->wait_set_output) {
76 thread->SetWaitSynchronizationOutput(thread->GetWaitObjectIndex(this));
77 thread->wait_set_output = false;
78 }
79 } else { 74 } else {
80 for (auto& object : thread->wait_objects) { 75 for (auto& object : thread->wait_objects) {
81 object->Acquire(thread.get()); 76 object->Acquire(thread.get());
82 } 77 }
83 // Note: This case doesn't update the output index of WaitSynchronizationN.
84 } 78 }
85 79
80 // Invoke the wakeup callback before clearing the wait objects
81 if (thread->wakeup_callback)
82 thread->wakeup_callback(ThreadWakeupReason::Signal, thread, this);
83
86 for (auto& object : thread->wait_objects) 84 for (auto& object : thread->wait_objects)
87 object->RemoveWaitingThread(thread.get()); 85 object->RemoveWaitingThread(thread.get());
88 thread->wait_objects.clear(); 86 thread->wait_objects.clear();
89 87
90 thread->SetWaitSynchronizationResult(RESULT_SUCCESS);
91 thread->ResumeFromWait(); 88 thread->ResumeFromWait();
92 } 89 }
93} 90}
diff --git a/src/core/hle/lock.cpp b/src/core/hle/lock.cpp
new file mode 100644
index 000000000..1c24c7ce9
--- /dev/null
+++ b/src/core/hle/lock.cpp
@@ -0,0 +1,11 @@
1// Copyright 2017 Citra Emulator Project
2// Licensed under GPLv2 or any later version
3// Refer to the license.txt file included.
4
5#pragma once
6
7#include <core/hle/lock.h>
8
9namespace HLE {
10std::recursive_mutex g_hle_lock;
11}
diff --git a/src/core/hle/lock.h b/src/core/hle/lock.h
new file mode 100644
index 000000000..5c99fe996
--- /dev/null
+++ b/src/core/hle/lock.h
@@ -0,0 +1,18 @@
1// Copyright 2017 Citra Emulator Project
2// Licensed under GPLv2 or any later version
3// Refer to the license.txt file included.
4
5#pragma once
6
7#include <mutex>
8
9namespace HLE {
10/*
11 * Synchronizes access to the internal HLE kernel structures, it is acquired when a guest
12 * application thread performs a syscall. It should be acquired by any host threads that read or
13 * modify the HLE kernel state. Note: Any operation that directly or indirectly reads from or writes
14 * to the emulated memory is not protected by this mutex, and should be avoided in any threads other
15 * than the CPU thread.
16 */
17extern std::recursive_mutex g_hle_lock;
18} // namespace HLE
diff --git a/src/core/hle/service/apt/apt.cpp b/src/core/hle/service/apt/apt.cpp
index 5c44b43bb..912ab550d 100644
--- a/src/core/hle/service/apt/apt.cpp
+++ b/src/core/hle/service/apt/apt.cpp
@@ -2,6 +2,7 @@
2// Licensed under GPLv2 or any later version 2// Licensed under GPLv2 or any later version
3// Refer to the license.txt file included. 3// Refer to the license.txt file included.
4 4
5#include <boost/optional.hpp>
5#include "common/common_paths.h" 6#include "common/common_paths.h"
6#include "common/file_util.h" 7#include "common/file_util.h"
7#include "common/logging/log.h" 8#include "common/logging/log.h"
@@ -18,6 +19,7 @@
18#include "core/hle/service/apt/apt_s.h" 19#include "core/hle/service/apt/apt_s.h"
19#include "core/hle/service/apt/apt_u.h" 20#include "core/hle/service/apt/apt_u.h"
20#include "core/hle/service/apt/bcfnt/bcfnt.h" 21#include "core/hle/service/apt/bcfnt/bcfnt.h"
22#include "core/hle/service/cfg/cfg.h"
21#include "core/hle/service/fs/archive.h" 23#include "core/hle/service/fs/archive.h"
22#include "core/hle/service/ptm/ptm.h" 24#include "core/hle/service/ptm/ptm.h"
23#include "core/hle/service/service.h" 25#include "core/hle/service/service.h"
@@ -33,8 +35,6 @@ static bool shared_font_loaded = false;
33static bool shared_font_relocated = false; 35static bool shared_font_relocated = false;
34 36
35static Kernel::SharedPtr<Kernel::Mutex> lock; 37static Kernel::SharedPtr<Kernel::Mutex> lock;
36static Kernel::SharedPtr<Kernel::Event> notification_event; ///< APT notification event
37static Kernel::SharedPtr<Kernel::Event> parameter_event; ///< APT parameter event
38 38
39static u32 cpu_percent; ///< CPU time available to the running application 39static u32 cpu_percent; ///< CPU time available to the running application
40 40
@@ -43,43 +43,344 @@ static u8 unknown_ns_state_field;
43 43
44static ScreencapPostPermission screen_capture_post_permission; 44static ScreencapPostPermission screen_capture_post_permission;
45 45
46/// Parameter data to be returned in the next call to Glance/ReceiveParameter 46/// Parameter data to be returned in the next call to Glance/ReceiveParameter.
47static MessageParameter next_parameter; 47/// TODO(Subv): Use std::optional once we migrate to C++17.
48static boost::optional<MessageParameter> next_parameter;
49
50enum class AppletPos { Application = 0, Library = 1, System = 2, SysLibrary = 3, Resident = 4 };
51
52static constexpr size_t NumAppletSlot = 4;
53
54enum class AppletSlot : u8 {
55 Application,
56 SystemApplet,
57 HomeMenu,
58 LibraryApplet,
59
60 // An invalid tag
61 Error,
62};
63
64union AppletAttributes {
65 u32 raw;
66
67 BitField<0, 3, u32> applet_pos;
68 BitField<29, 1, u32> is_home_menu;
69
70 AppletAttributes() : raw(0) {}
71 AppletAttributes(u32 attributes) : raw(attributes) {}
72};
73
74struct AppletSlotData {
75 AppletId applet_id;
76 AppletSlot slot;
77 bool registered;
78 AppletAttributes attributes;
79 Kernel::SharedPtr<Kernel::Event> notification_event;
80 Kernel::SharedPtr<Kernel::Event> parameter_event;
81};
82
83// Holds data about the concurrently running applets in the system.
84static std::array<AppletSlotData, NumAppletSlot> applet_slots = {};
85
86// This overload returns nullptr if no applet with the specified id has been started.
87static AppletSlotData* GetAppletSlotData(AppletId id) {
88 auto GetSlot = [](AppletSlot slot) -> AppletSlotData* {
89 return &applet_slots[static_cast<size_t>(slot)];
90 };
91
92 if (id == AppletId::Application) {
93 auto* slot = GetSlot(AppletSlot::Application);
94 if (slot->applet_id != AppletId::None)
95 return slot;
96
97 return nullptr;
98 }
99
100 if (id == AppletId::AnySystemApplet) {
101 auto* system_slot = GetSlot(AppletSlot::SystemApplet);
102 if (system_slot->applet_id != AppletId::None)
103 return system_slot;
104
105 // The Home Menu is also a system applet, but it lives in its own slot to be able to run
106 // concurrently with other system applets.
107 auto* home_slot = GetSlot(AppletSlot::HomeMenu);
108 if (home_slot->applet_id != AppletId::None)
109 return home_slot;
110
111 return nullptr;
112 }
113
114 if (id == AppletId::AnyLibraryApplet || id == AppletId::AnySysLibraryApplet) {
115 auto* slot = GetSlot(AppletSlot::LibraryApplet);
116 if (slot->applet_id == AppletId::None)
117 return nullptr;
118
119 u32 applet_pos = slot->attributes.applet_pos;
120
121 if (id == AppletId::AnyLibraryApplet && applet_pos == static_cast<u32>(AppletPos::Library))
122 return slot;
123
124 if (id == AppletId::AnySysLibraryApplet &&
125 applet_pos == static_cast<u32>(AppletPos::SysLibrary))
126 return slot;
127
128 return nullptr;
129 }
130
131 if (id == AppletId::HomeMenu || id == AppletId::AlternateMenu) {
132 auto* slot = GetSlot(AppletSlot::HomeMenu);
133 if (slot->applet_id != AppletId::None)
134 return slot;
135
136 return nullptr;
137 }
138
139 for (auto& slot : applet_slots) {
140 if (slot.applet_id == id)
141 return &slot;
142 }
143
144 return nullptr;
145}
146
147static AppletSlotData* GetAppletSlotData(AppletAttributes attributes) {
148 // Mapping from AppletPos to AppletSlot
149 static constexpr std::array<AppletSlot, 6> applet_position_slots = {
150 AppletSlot::Application, AppletSlot::LibraryApplet, AppletSlot::SystemApplet,
151 AppletSlot::LibraryApplet, AppletSlot::Error, AppletSlot::LibraryApplet};
152
153 u32 applet_pos = attributes.applet_pos;
154 if (applet_pos >= applet_position_slots.size())
155 return nullptr;
156
157 AppletSlot slot = applet_position_slots[applet_pos];
158
159 if (slot == AppletSlot::Error)
160 return nullptr;
161
162 // The Home Menu is a system applet, however, it has its own applet slot so that it can run
163 // concurrently with other system applets.
164 if (slot == AppletSlot::SystemApplet && attributes.is_home_menu)
165 return &applet_slots[static_cast<size_t>(AppletSlot::HomeMenu)];
166
167 return &applet_slots[static_cast<size_t>(slot)];
168}
48 169
49void SendParameter(const MessageParameter& parameter) { 170void SendParameter(const MessageParameter& parameter) {
50 next_parameter = parameter; 171 next_parameter = parameter;
51 // Signal the event to let the application know that a new parameter is ready to be read 172 // Signal the event to let the receiver know that a new parameter is ready to be read
52 parameter_event->Signal(); 173 auto* const slot_data = GetAppletSlotData(static_cast<AppletId>(parameter.destination_id));
174 if (slot_data == nullptr) {
175 LOG_DEBUG(Service_APT, "No applet was registered with the id %03X",
176 parameter.destination_id);
177 return;
178 }
179
180 slot_data->parameter_event->Signal();
53} 181}
54 182
55void Initialize(Service::Interface* self) { 183void Initialize(Service::Interface* self) {
56 IPC::RequestParser rp(Kernel::GetCommandBuffer(), 0x2, 2, 0); // 0x20080 184 IPC::RequestParser rp(Kernel::GetCommandBuffer(), 0x2, 2, 0); // 0x20080
57 u32 app_id = rp.Pop<u32>(); 185 u32 app_id = rp.Pop<u32>();
58 u32 flags = rp.Pop<u32>(); 186 u32 attributes = rp.Pop<u32>();
187
188 LOG_DEBUG(Service_APT, "called app_id=0x%08X, attributes=0x%08X", app_id, attributes);
189
190 auto* const slot_data = GetAppletSlotData(attributes);
191
192 // Note: The real NS service does not check if the attributes value is valid before accessing
193 // the data in the array
194 ASSERT_MSG(slot_data, "Invalid application attributes");
195
196 if (slot_data->registered) {
197 IPC::RequestBuilder rb = rp.MakeBuilder(1, 0);
198 rb.Push(ResultCode(ErrorDescription::AlreadyExists, ErrorModule::Applet,
199 ErrorSummary::InvalidState, ErrorLevel::Status));
200 return;
201 }
202
203 slot_data->applet_id = static_cast<AppletId>(app_id);
204 slot_data->attributes.raw = attributes;
205
59 IPC::RequestBuilder rb = rp.MakeBuilder(1, 3); 206 IPC::RequestBuilder rb = rp.MakeBuilder(1, 3);
60 rb.Push(RESULT_SUCCESS); 207 rb.Push(RESULT_SUCCESS);
61 rb.PushCopyHandles(Kernel::g_handle_table.Create(notification_event).Unwrap(), 208 rb.PushCopyHandles(Kernel::g_handle_table.Create(slot_data->notification_event).Unwrap(),
62 Kernel::g_handle_table.Create(parameter_event).Unwrap()); 209 Kernel::g_handle_table.Create(slot_data->parameter_event).Unwrap());
210
211 if (slot_data->applet_id == AppletId::Application ||
212 slot_data->applet_id == AppletId::HomeMenu) {
213 // Initialize the APT parameter to wake up the application.
214 next_parameter.emplace();
215 next_parameter->signal = static_cast<u32>(SignalType::Wakeup);
216 next_parameter->sender_id = static_cast<u32>(AppletId::None);
217 next_parameter->destination_id = app_id;
218 // Not signaling the parameter event will cause the application (or Home Menu) to hang
219 // during startup. In the real console, it is usually the Kernel and Home Menu who cause NS
220 // to signal the HomeMenu and Application parameter events, respectively.
221 slot_data->parameter_event->Signal();
222 }
223}
63 224
64 // TODO(bunnei): Check if these events are cleared every time Initialize is called. 225static u32 DecompressLZ11(const u8* in, u8* out) {
65 notification_event->Clear(); 226 u32_le decompressed_size;
66 parameter_event->Clear(); 227 memcpy(&decompressed_size, in, sizeof(u32));
228 in += 4;
229
230 u8 type = decompressed_size & 0xFF;
231 ASSERT(type == 0x11);
232 decompressed_size >>= 8;
67 233
68 ASSERT_MSG((nullptr != lock), "Cannot initialize without lock"); 234 u32 current_out_size = 0;
69 lock->Release(); 235 u8 flags = 0, mask = 1;
236 while (current_out_size < decompressed_size) {
237 if (mask == 1) {
238 flags = *(in++);
239 mask = 0x80;
240 } else {
241 mask >>= 1;
242 }
70 243
71 LOG_DEBUG(Service_APT, "called app_id=0x%08X, flags=0x%08X", app_id, flags); 244 if (flags & mask) {
245 u8 byte1 = *(in++);
246 u32 length = byte1 >> 4;
247 u32 offset;
248 if (length == 0) {
249 u8 byte2 = *(in++);
250 u8 byte3 = *(in++);
251 length = (((byte1 & 0x0F) << 4) | (byte2 >> 4)) + 0x11;
252 offset = (((byte2 & 0x0F) << 8) | byte3) + 0x1;
253 } else if (length == 1) {
254 u8 byte2 = *(in++);
255 u8 byte3 = *(in++);
256 u8 byte4 = *(in++);
257 length = (((byte1 & 0x0F) << 12) | (byte2 << 4) | (byte3 >> 4)) + 0x111;
258 offset = (((byte3 & 0x0F) << 8) | byte4) + 0x1;
259 } else {
260 u8 byte2 = *(in++);
261 length = (byte1 >> 4) + 0x1;
262 offset = (((byte1 & 0x0F) << 8) | byte2) + 0x1;
263 }
264
265 for (u32 i = 0; i < length; i++) {
266 *out = *(out - offset);
267 ++out;
268 }
269
270 current_out_size += length;
271 } else {
272 *(out++) = *(in++);
273 current_out_size++;
274 }
275 }
276 return decompressed_size;
277}
278
279static bool LoadSharedFont() {
280 u8 font_region_code;
281 switch (CFG::GetRegionValue()) {
282 case 4: // CHN
283 font_region_code = 2;
284 break;
285 case 5: // KOR
286 font_region_code = 3;
287 break;
288 case 6: // TWN
289 font_region_code = 4;
290 break;
291 default: // JPN/EUR/USA
292 font_region_code = 1;
293 break;
294 }
295
296 const u64_le shared_font_archive_id_low = 0x0004009b00014002 | ((font_region_code - 1) << 8);
297 const u64_le shared_font_archive_id_high = 0x00000001ffffff00;
298 std::vector<u8> shared_font_archive_id(16);
299 std::memcpy(&shared_font_archive_id[0], &shared_font_archive_id_low, sizeof(u64));
300 std::memcpy(&shared_font_archive_id[8], &shared_font_archive_id_high, sizeof(u64));
301 FileSys::Path archive_path(shared_font_archive_id);
302 auto archive_result = Service::FS::OpenArchive(Service::FS::ArchiveIdCode::NCCH, archive_path);
303 if (archive_result.Failed())
304 return false;
305
306 std::vector<u8> romfs_path(20, 0); // 20-byte all zero path for opening RomFS
307 FileSys::Path file_path(romfs_path);
308 FileSys::Mode open_mode = {};
309 open_mode.read_flag.Assign(1);
310 auto file_result = Service::FS::OpenFileFromArchive(*archive_result, file_path, open_mode);
311 if (file_result.Failed())
312 return false;
313
314 auto romfs = std::move(file_result).Unwrap();
315 std::vector<u8> romfs_buffer(romfs->backend->GetSize());
316 romfs->backend->Read(0, romfs_buffer.size(), romfs_buffer.data());
317 romfs->backend->Close();
318
319 const char16_t* file_name[4] = {u"cbf_std.bcfnt.lz", u"cbf_zh-Hans-CN.bcfnt.lz",
320 u"cbf_ko-Hang-KR.bcfnt.lz", u"cbf_zh-Hant-TW.bcfnt.lz"};
321 const u8* font_file =
322 RomFS::GetFilePointer(romfs_buffer.data(), {file_name[font_region_code - 1]});
323 if (font_file == nullptr)
324 return false;
325
326 struct {
327 u32_le status;
328 u32_le region;
329 u32_le decompressed_size;
330 INSERT_PADDING_WORDS(0x1D);
331 } shared_font_header{};
332 static_assert(sizeof(shared_font_header) == 0x80, "shared_font_header has incorrect size");
333
334 shared_font_header.status = 2; // successfully loaded
335 shared_font_header.region = font_region_code;
336 shared_font_header.decompressed_size =
337 DecompressLZ11(font_file, shared_font_mem->GetPointer(0x80));
338 std::memcpy(shared_font_mem->GetPointer(), &shared_font_header, sizeof(shared_font_header));
339 *shared_font_mem->GetPointer(0x83) = 'U'; // Change the magic from "CFNT" to "CFNU"
340
341 return true;
342}
343
344static bool LoadLegacySharedFont() {
345 // This is the legacy method to load shared font.
346 // The expected format is a decrypted, uncompressed BCFNT file with the 0x80 byte header
347 // generated by the APT:U service. The best way to get is by dumping it from RAM. We've provided
348 // a homebrew app to do this: https://github.com/citra-emu/3dsutils. Put the resulting file
349 // "shared_font.bin" in the Citra "sysdata" directory.
350 std::string filepath = FileUtil::GetUserPath(D_SYSDATA_IDX) + SHARED_FONT;
351
352 FileUtil::CreateFullPath(filepath); // Create path if not already created
353 FileUtil::IOFile file(filepath, "rb");
354 if (file.IsOpen()) {
355 file.ReadBytes(shared_font_mem->GetPointer(), file.GetSize());
356 return true;
357 }
358
359 return false;
72} 360}
73 361
74void GetSharedFont(Service::Interface* self) { 362void GetSharedFont(Service::Interface* self) {
75 IPC::RequestParser rp(Kernel::GetCommandBuffer(), 0x44, 0, 0); // 0x00440000 363 IPC::RequestParser rp(Kernel::GetCommandBuffer(), 0x44, 0, 0); // 0x00440000
76 IPC::RequestBuilder rb = rp.MakeBuilder(2, 2); 364 IPC::RequestBuilder rb = rp.MakeBuilder(2, 2);
365
366 // Log in telemetry if the game uses the shared font
367 Core::Telemetry().AddField(Telemetry::FieldType::Session, "RequiresSharedFont", true);
368
77 if (!shared_font_loaded) { 369 if (!shared_font_loaded) {
78 LOG_ERROR(Service_APT, "shared font file missing - go dump it from your 3ds"); 370 // On real 3DS, font loading happens on booting. However, we load it on demand to coordinate
79 rb.Push<u32>(-1); // TODO: Find the right error code 371 // with CFG region auto configuration, which happens later than APT initialization.
80 rb.Skip(1 + 2, true); 372 if (LoadSharedFont()) {
81 Core::System::GetInstance().SetStatus(Core::System::ResultStatus::ErrorSharedFont); 373 shared_font_loaded = true;
82 return; 374 } else if (LoadLegacySharedFont()) {
375 LOG_WARNING(Service_APT, "Loaded shared font by legacy method");
376 shared_font_loaded = true;
377 } else {
378 LOG_ERROR(Service_APT, "shared font file missing - go dump it from your 3ds");
379 rb.Push<u32>(-1); // TODO: Find the right error code
380 rb.Skip(1 + 2, true);
381 Core::System::GetInstance().SetStatus(Core::System::ResultStatus::ErrorSharedFont);
382 return;
383 }
83 } 384 }
84 385
85 // The shared font has to be relocated to the new address before being passed to the 386 // The shared font has to be relocated to the new address before being passed to the
@@ -115,7 +416,12 @@ void GetLockHandle(Service::Interface* self) {
115 // this will cause the app to wait until parameter_event is signaled. 416 // this will cause the app to wait until parameter_event is signaled.
116 u32 applet_attributes = rp.Pop<u32>(); 417 u32 applet_attributes = rp.Pop<u32>();
117 IPC::RequestBuilder rb = rp.MakeBuilder(3, 2); 418 IPC::RequestBuilder rb = rp.MakeBuilder(3, 2);
118 rb.Push(RESULT_SUCCESS); // No error 419 rb.Push(RESULT_SUCCESS); // No error
420
421 // TODO(Subv): The output attributes should have an AppletPos of either Library or System |
422 // Library (depending on the type of the last launched applet) if the input attributes'
423 // AppletPos has the Library bit set.
424
119 rb.Push(applet_attributes); // Applet Attributes, this value is passed to Enable. 425 rb.Push(applet_attributes); // Applet Attributes, this value is passed to Enable.
120 rb.Push<u32>(0); // Least significant bit = power button state 426 rb.Push<u32>(0); // Least significant bit = power button state
121 Kernel::Handle handle_copy = Kernel::g_handle_table.Create(lock).Unwrap(); 427 Kernel::Handle handle_copy = Kernel::g_handle_table.Create(lock).Unwrap();
@@ -128,10 +434,22 @@ void GetLockHandle(Service::Interface* self) {
128void Enable(Service::Interface* self) { 434void Enable(Service::Interface* self) {
129 IPC::RequestParser rp(Kernel::GetCommandBuffer(), 0x3, 1, 0); // 0x30040 435 IPC::RequestParser rp(Kernel::GetCommandBuffer(), 0x3, 1, 0); // 0x30040
130 u32 attributes = rp.Pop<u32>(); 436 u32 attributes = rp.Pop<u32>();
437
438 LOG_DEBUG(Service_APT, "called attributes=0x%08X", attributes);
439
131 IPC::RequestBuilder rb = rp.MakeBuilder(1, 0); 440 IPC::RequestBuilder rb = rp.MakeBuilder(1, 0);
132 rb.Push(RESULT_SUCCESS); // No error 441
133 parameter_event->Signal(); // Let the application know that it has been started 442 auto* const slot_data = GetAppletSlotData(attributes);
134 LOG_WARNING(Service_APT, "(STUBBED) called attributes=0x%08X", attributes); 443
444 if (!slot_data) {
445 rb.Push(ResultCode(ErrCodes::InvalidAppletSlot, ErrorModule::Applet,
446 ErrorSummary::InvalidState, ErrorLevel::Status));
447 return;
448 }
449
450 slot_data->registered = true;
451
452 rb.Push(RESULT_SUCCESS);
135} 453}
136 454
137void GetAppletManInfo(Service::Interface* self) { 455void GetAppletManInfo(Service::Interface* self) {
@@ -149,22 +467,27 @@ void GetAppletManInfo(Service::Interface* self) {
149 467
150void IsRegistered(Service::Interface* self) { 468void IsRegistered(Service::Interface* self) {
151 IPC::RequestParser rp(Kernel::GetCommandBuffer(), 0x9, 1, 0); // 0x90040 469 IPC::RequestParser rp(Kernel::GetCommandBuffer(), 0x9, 1, 0); // 0x90040
152 u32 app_id = rp.Pop<u32>(); 470 AppletId app_id = static_cast<AppletId>(rp.Pop<u32>());
153 IPC::RequestBuilder rb = rp.MakeBuilder(2, 0); 471 IPC::RequestBuilder rb = rp.MakeBuilder(2, 0);
154 rb.Push(RESULT_SUCCESS); // No error 472 rb.Push(RESULT_SUCCESS); // No error
155 473
156 // TODO(Subv): An application is considered "registered" if it has already called APT::Enable 474 auto* const slot_data = GetAppletSlotData(app_id);
157 // handle this properly once we implement multiprocess support. 475
158 bool is_registered = false; // Set to not registered by default 476 // Check if an LLE applet was registered first, then fallback to HLE applets
477 bool is_registered = slot_data && slot_data->registered;
159 478
160 if (app_id == static_cast<u32>(AppletId::AnyLibraryApplet)) { 479 if (!is_registered) {
161 is_registered = HLE::Applets::IsLibraryAppletRunning(); 480 if (app_id == AppletId::AnyLibraryApplet) {
162 } else if (auto applet = HLE::Applets::Applet::Get(static_cast<AppletId>(app_id))) { 481 is_registered = HLE::Applets::IsLibraryAppletRunning();
163 is_registered = true; // Set to registered 482 } else if (auto applet = HLE::Applets::Applet::Get(app_id)) {
483 // The applet exists, set it as registered.
484 is_registered = true;
485 }
164 } 486 }
487
165 rb.Push(is_registered); 488 rb.Push(is_registered);
166 489
167 LOG_WARNING(Service_APT, "(STUBBED) called app_id=0x%08X", app_id); 490 LOG_DEBUG(Service_APT, "called app_id=0x%08X", static_cast<u32>(app_id));
168} 491}
169 492
170void InquireNotification(Service::Interface* self) { 493void InquireNotification(Service::Interface* self) {
@@ -186,14 +509,17 @@ void SendParameter(Service::Interface* self) {
186 size_t size; 509 size_t size;
187 VAddr buffer = rp.PopStaticBuffer(&size); 510 VAddr buffer = rp.PopStaticBuffer(&size);
188 511
189 std::shared_ptr<HLE::Applets::Applet> dest_applet = 512 LOG_DEBUG(Service_APT,
190 HLE::Applets::Applet::Get(static_cast<AppletId>(dst_app_id)); 513 "called src_app_id=0x%08X, dst_app_id=0x%08X, signal_type=0x%08X,"
514 "buffer_size=0x%08X, handle=0x%08X, size=0x%08zX, in_param_buffer_ptr=0x%08X",
515 src_app_id, dst_app_id, signal_type, buffer_size, handle, size, buffer);
191 516
192 IPC::RequestBuilder rb = rp.MakeBuilder(1, 0); 517 IPC::RequestBuilder rb = rp.MakeBuilder(1, 0);
193 518
194 if (dest_applet == nullptr) { 519 // A new parameter can not be sent if the previous one hasn't been consumed yet
195 LOG_ERROR(Service_APT, "Unknown applet id=0x%08X", dst_app_id); 520 if (next_parameter) {
196 rb.Push<u32>(-1); // TODO(Subv): Find the right error code 521 rb.Push(ResultCode(ErrCodes::ParameterPresent, ErrorModule::Applet,
522 ErrorSummary::InvalidState, ErrorLevel::Status));
197 return; 523 return;
198 } 524 }
199 525
@@ -205,12 +531,14 @@ void SendParameter(Service::Interface* self) {
205 param.buffer.resize(buffer_size); 531 param.buffer.resize(buffer_size);
206 Memory::ReadBlock(buffer, param.buffer.data(), param.buffer.size()); 532 Memory::ReadBlock(buffer, param.buffer.data(), param.buffer.size());
207 533
208 rb.Push(dest_applet->ReceiveParameter(param)); 534 SendParameter(param);
209 535
210 LOG_WARNING(Service_APT, 536 // If the applet is running in HLE mode, use the HLE interface to communicate with it.
211 "(STUBBED) called src_app_id=0x%08X, dst_app_id=0x%08X, signal_type=0x%08X," 537 if (auto dest_applet = HLE::Applets::Applet::Get(static_cast<AppletId>(dst_app_id))) {
212 "buffer_size=0x%08X, handle=0x%08X, size=0x%08zX, in_param_buffer_ptr=0x%08X", 538 rb.Push(dest_applet->ReceiveParameter(param));
213 src_app_id, dst_app_id, signal_type, buffer_size, handle, size, buffer); 539 } else {
540 rb.Push(RESULT_SUCCESS);
541 }
214} 542}
215 543
216void ReceiveParameter(Service::Interface* self) { 544void ReceiveParameter(Service::Interface* self) {
@@ -226,21 +554,40 @@ void ReceiveParameter(Service::Interface* self) {
226 "buffer_size is bigger than the size in the buffer descriptor (0x%08X > 0x%08zX)", 554 "buffer_size is bigger than the size in the buffer descriptor (0x%08X > 0x%08zX)",
227 buffer_size, static_buff_size); 555 buffer_size, static_buff_size);
228 556
557 LOG_DEBUG(Service_APT, "called app_id=0x%08X, buffer_size=0x%08zX", app_id, buffer_size);
558
559 if (!next_parameter) {
560 IPC::RequestBuilder rb = rp.MakeBuilder(1, 0);
561 rb.Push(ResultCode(ErrorDescription::NoData, ErrorModule::Applet,
562 ErrorSummary::InvalidState, ErrorLevel::Status));
563 return;
564 }
565
566 if (next_parameter->destination_id != app_id) {
567 IPC::RequestBuilder rb = rp.MakeBuilder(1, 0);
568 rb.Push(ResultCode(ErrorDescription::NotFound, ErrorModule::Applet, ErrorSummary::NotFound,
569 ErrorLevel::Status));
570 return;
571 }
572
229 IPC::RequestBuilder rb = rp.MakeBuilder(4, 4); 573 IPC::RequestBuilder rb = rp.MakeBuilder(4, 4);
574
230 rb.Push(RESULT_SUCCESS); // No error 575 rb.Push(RESULT_SUCCESS); // No error
231 rb.Push(next_parameter.sender_id); 576 rb.Push(next_parameter->sender_id);
232 rb.Push(next_parameter.signal); // Signal type 577 rb.Push(next_parameter->signal); // Signal type
233 ASSERT_MSG(next_parameter.buffer.size() <= buffer_size, "Input static buffer is too small !"); 578 ASSERT_MSG(next_parameter->buffer.size() <= buffer_size, "Input static buffer is too small !");
234 rb.Push(static_cast<u32>(next_parameter.buffer.size())); // Parameter buffer size 579 rb.Push(static_cast<u32>(next_parameter->buffer.size())); // Parameter buffer size
235 580
236 rb.PushMoveHandles((next_parameter.object != nullptr) 581 rb.PushMoveHandles((next_parameter->object != nullptr)
237 ? Kernel::g_handle_table.Create(next_parameter.object).Unwrap() 582 ? Kernel::g_handle_table.Create(next_parameter->object).Unwrap()
238 : 0); 583 : 0);
239 rb.PushStaticBuffer(buffer, static_cast<u32>(next_parameter.buffer.size()), 0);
240 584
241 Memory::WriteBlock(buffer, next_parameter.buffer.data(), next_parameter.buffer.size()); 585 rb.PushStaticBuffer(buffer, next_parameter->buffer.size(), 0);
586
587 Memory::WriteBlock(buffer, next_parameter->buffer.data(), next_parameter->buffer.size());
242 588
243 LOG_WARNING(Service_APT, "called app_id=0x%08X, buffer_size=0x%08zX", app_id, buffer_size); 589 // Clear the parameter
590 next_parameter = boost::none;
244} 591}
245 592
246void GlanceParameter(Service::Interface* self) { 593void GlanceParameter(Service::Interface* self) {
@@ -256,37 +603,74 @@ void GlanceParameter(Service::Interface* self) {
256 "buffer_size is bigger than the size in the buffer descriptor (0x%08X > 0x%08zX)", 603 "buffer_size is bigger than the size in the buffer descriptor (0x%08X > 0x%08zX)",
257 buffer_size, static_buff_size); 604 buffer_size, static_buff_size);
258 605
606 LOG_DEBUG(Service_APT, "called app_id=0x%08X, buffer_size=0x%08zX", app_id, buffer_size);
607
608 if (!next_parameter) {
609 IPC::RequestBuilder rb = rp.MakeBuilder(1, 0);
610 rb.Push(ResultCode(ErrorDescription::NoData, ErrorModule::Applet,
611 ErrorSummary::InvalidState, ErrorLevel::Status));
612 return;
613 }
614
615 if (next_parameter->destination_id != app_id) {
616 IPC::RequestBuilder rb = rp.MakeBuilder(1, 0);
617 rb.Push(ResultCode(ErrorDescription::NotFound, ErrorModule::Applet, ErrorSummary::NotFound,
618 ErrorLevel::Status));
619 return;
620 }
621
259 IPC::RequestBuilder rb = rp.MakeBuilder(4, 4); 622 IPC::RequestBuilder rb = rp.MakeBuilder(4, 4);
260 rb.Push(RESULT_SUCCESS); // No error 623 rb.Push(RESULT_SUCCESS); // No error
261 rb.Push(next_parameter.sender_id); 624 rb.Push(next_parameter->sender_id);
262 rb.Push(next_parameter.signal); // Signal type 625 rb.Push(next_parameter->signal); // Signal type
263 ASSERT_MSG(next_parameter.buffer.size() <= buffer_size, "Input static buffer is too small !"); 626 ASSERT_MSG(next_parameter->buffer.size() <= buffer_size, "Input static buffer is too small !");
264 rb.Push(static_cast<u32>(next_parameter.buffer.size())); // Parameter buffer size 627 rb.Push(static_cast<u32>(next_parameter->buffer.size())); // Parameter buffer size
265 628
266 rb.PushCopyHandles((next_parameter.object != nullptr) 629 rb.PushMoveHandles((next_parameter->object != nullptr)
267 ? Kernel::g_handle_table.Create(next_parameter.object).Unwrap() 630 ? Kernel::g_handle_table.Create(next_parameter->object).Unwrap()
268 : 0); 631 : 0);
269 rb.PushStaticBuffer(buffer, static_cast<u32>(next_parameter.buffer.size()), 0);
270 632
271 Memory::WriteBlock(buffer, next_parameter.buffer.data(), next_parameter.buffer.size()); 633 rb.PushStaticBuffer(buffer, next_parameter->buffer.size(), 0);
634
635 Memory::WriteBlock(buffer, next_parameter->buffer.data(), next_parameter->buffer.size());
272 636
273 LOG_WARNING(Service_APT, "called app_id=0x%08X, buffer_size=0x%08zX", app_id, buffer_size); 637 // Note: The NS module always clears the DSPSleep and DSPWakeup signals even in GlanceParameter.
638 if (next_parameter->signal == static_cast<u32>(SignalType::DspSleep) ||
639 next_parameter->signal == static_cast<u32>(SignalType::DspWakeup))
640 next_parameter = boost::none;
274} 641}
275 642
276void CancelParameter(Service::Interface* self) { 643void CancelParameter(Service::Interface* self) {
277 IPC::RequestParser rp(Kernel::GetCommandBuffer(), 0xF, 4, 0); // 0xF0100 644 IPC::RequestParser rp(Kernel::GetCommandBuffer(), 0xF, 4, 0); // 0xF0100
278 645
279 u32 check_sender = rp.Pop<u32>(); 646 bool check_sender = rp.Pop<bool>();
280 u32 sender_appid = rp.Pop<u32>(); 647 u32 sender_appid = rp.Pop<u32>();
281 u32 check_receiver = rp.Pop<u32>(); 648 bool check_receiver = rp.Pop<bool>();
282 u32 receiver_appid = rp.Pop<u32>(); 649 u32 receiver_appid = rp.Pop<u32>();
650
651 bool cancellation_success = true;
652
653 if (!next_parameter) {
654 cancellation_success = false;
655 } else {
656 if (check_sender && next_parameter->sender_id != sender_appid)
657 cancellation_success = false;
658
659 if (check_receiver && next_parameter->destination_id != receiver_appid)
660 cancellation_success = false;
661 }
662
663 if (cancellation_success)
664 next_parameter = boost::none;
665
283 IPC::RequestBuilder rb = rp.MakeBuilder(2, 0); 666 IPC::RequestBuilder rb = rp.MakeBuilder(2, 0);
667
284 rb.Push(RESULT_SUCCESS); // No error 668 rb.Push(RESULT_SUCCESS); // No error
285 rb.Push(true); // Set to Success 669 rb.Push(cancellation_success);
286 670
287 LOG_WARNING(Service_APT, "(STUBBED) called check_sender=0x%08X, sender_appid=0x%08X, " 671 LOG_DEBUG(Service_APT, "called check_sender=%u, sender_appid=0x%08X, "
288 "check_receiver=0x%08X, receiver_appid=0x%08X", 672 "check_receiver=%u, receiver_appid=0x%08X",
289 check_sender, sender_appid, check_receiver, receiver_appid); 673 check_sender, sender_appid, check_receiver, receiver_appid);
290} 674}
291 675
292void PrepareToStartApplication(Service::Interface* self) { 676void PrepareToStartApplication(Service::Interface* self) {
@@ -383,7 +767,12 @@ void PrepareToStartLibraryApplet(Service::Interface* self) {
383 IPC::RequestParser rp(Kernel::GetCommandBuffer(), 0x18, 1, 0); // 0x180040 767 IPC::RequestParser rp(Kernel::GetCommandBuffer(), 0x18, 1, 0); // 0x180040
384 AppletId applet_id = static_cast<AppletId>(rp.Pop<u32>()); 768 AppletId applet_id = static_cast<AppletId>(rp.Pop<u32>());
385 769
770 LOG_DEBUG(Service_APT, "called applet_id=%08X", applet_id);
771
386 IPC::RequestBuilder rb = rp.MakeBuilder(1, 0); 772 IPC::RequestBuilder rb = rp.MakeBuilder(1, 0);
773
774 // TODO(Subv): Launch the requested applet application.
775
387 auto applet = HLE::Applets::Applet::Get(applet_id); 776 auto applet = HLE::Applets::Applet::Get(applet_id);
388 if (applet) { 777 if (applet) {
389 LOG_WARNING(Service_APT, "applet has already been started id=%08X", applet_id); 778 LOG_WARNING(Service_APT, "applet has already been started id=%08X", applet_id);
@@ -391,14 +780,32 @@ void PrepareToStartLibraryApplet(Service::Interface* self) {
391 } else { 780 } else {
392 rb.Push(HLE::Applets::Applet::Create(applet_id)); 781 rb.Push(HLE::Applets::Applet::Create(applet_id));
393 } 782 }
394 LOG_DEBUG(Service_APT, "called applet_id=%08X", applet_id); 783}
784
785void PrepareToStartNewestHomeMenu(Service::Interface* self) {
786 IPC::RequestParser rp(Kernel::GetCommandBuffer(), 0x1A, 0, 0); // 0x1A0000
787 IPC::RequestBuilder rb = rp.MakeBuilder(1, 0);
788
789 // TODO(Subv): This command can only be called by a System Applet (return 0xC8A0CC04 otherwise).
790
791 // This command must return an error when called, otherwise the Home Menu will try to reboot the
792 // system.
793 rb.Push(ResultCode(ErrorDescription::AlreadyExists, ErrorModule::Applet,
794 ErrorSummary::InvalidState, ErrorLevel::Status));
795
796 LOG_DEBUG(Service_APT, "called");
395} 797}
396 798
397void PreloadLibraryApplet(Service::Interface* self) { 799void PreloadLibraryApplet(Service::Interface* self) {
398 IPC::RequestParser rp(Kernel::GetCommandBuffer(), 0x16, 1, 0); // 0x160040 800 IPC::RequestParser rp(Kernel::GetCommandBuffer(), 0x16, 1, 0); // 0x160040
399 AppletId applet_id = static_cast<AppletId>(rp.Pop<u32>()); 801 AppletId applet_id = static_cast<AppletId>(rp.Pop<u32>());
400 802
803 LOG_DEBUG(Service_APT, "called applet_id=%08X", applet_id);
804
401 IPC::RequestBuilder rb = rp.MakeBuilder(1, 0); 805 IPC::RequestBuilder rb = rp.MakeBuilder(1, 0);
806
807 // TODO(Subv): Launch the requested applet application.
808
402 auto applet = HLE::Applets::Applet::Get(applet_id); 809 auto applet = HLE::Applets::Applet::Get(applet_id);
403 if (applet) { 810 if (applet) {
404 LOG_WARNING(Service_APT, "applet has already been started id=%08X", applet_id); 811 LOG_WARNING(Service_APT, "applet has already been started id=%08X", applet_id);
@@ -406,34 +813,40 @@ void PreloadLibraryApplet(Service::Interface* self) {
406 } else { 813 } else {
407 rb.Push(HLE::Applets::Applet::Create(applet_id)); 814 rb.Push(HLE::Applets::Applet::Create(applet_id));
408 } 815 }
409 LOG_DEBUG(Service_APT, "called applet_id=%08X", applet_id);
410} 816}
411 817
412void StartLibraryApplet(Service::Interface* self) { 818void StartLibraryApplet(Service::Interface* self) {
413 IPC::RequestParser rp(Kernel::GetCommandBuffer(), 0x1E, 2, 4); // 0x1E0084 819 IPC::RequestParser rp(Kernel::GetCommandBuffer(), 0x1E, 2, 4); // 0x1E0084
414 AppletId applet_id = static_cast<AppletId>(rp.Pop<u32>()); 820 AppletId applet_id = static_cast<AppletId>(rp.Pop<u32>());
415 std::shared_ptr<HLE::Applets::Applet> applet = HLE::Applets::Applet::Get(applet_id);
416
417 LOG_DEBUG(Service_APT, "called applet_id=%08X", applet_id);
418
419 if (applet == nullptr) {
420 LOG_ERROR(Service_APT, "unknown applet id=%08X", applet_id);
421 IPC::RequestBuilder rb = rp.MakeBuilder(1, 0, false);
422 rb.Push<u32>(-1); // TODO(Subv): Find the right error code
423 return;
424 }
425 821
426 size_t buffer_size = rp.Pop<u32>(); 822 size_t buffer_size = rp.Pop<u32>();
427 Kernel::Handle handle = rp.PopHandle(); 823 Kernel::Handle handle = rp.PopHandle();
428 VAddr buffer_addr = rp.PopStaticBuffer(); 824 VAddr buffer_addr = rp.PopStaticBuffer();
429 825
430 AppletStartupParameter parameter; 826 LOG_DEBUG(Service_APT, "called applet_id=%08X", applet_id);
431 parameter.object = Kernel::g_handle_table.GetGeneric(handle);
432 parameter.buffer.resize(buffer_size);
433 Memory::ReadBlock(buffer_addr, parameter.buffer.data(), parameter.buffer.size());
434 827
435 IPC::RequestBuilder rb = rp.MakeBuilder(1, 0); 828 IPC::RequestBuilder rb = rp.MakeBuilder(1, 0);
436 rb.Push(applet->Start(parameter)); 829
830 // Send the Wakeup signal to the applet
831 MessageParameter param;
832 param.destination_id = static_cast<u32>(applet_id);
833 param.sender_id = static_cast<u32>(AppletId::Application);
834 param.object = Kernel::g_handle_table.GetGeneric(handle);
835 param.signal = static_cast<u32>(SignalType::Wakeup);
836 param.buffer.resize(buffer_size);
837 Memory::ReadBlock(buffer_addr, param.buffer.data(), param.buffer.size());
838 SendParameter(param);
839
840 // In case the applet is being HLEd, attempt to communicate with it.
841 if (auto applet = HLE::Applets::Applet::Get(applet_id)) {
842 AppletStartupParameter parameter;
843 parameter.object = Kernel::g_handle_table.GetGeneric(handle);
844 parameter.buffer.resize(buffer_size);
845 Memory::ReadBlock(buffer_addr, parameter.buffer.data(), parameter.buffer.size());
846 rb.Push(applet->Start(parameter));
847 } else {
848 rb.Push(RESULT_SUCCESS);
849 }
437} 850}
438 851
439void CancelLibraryApplet(Service::Interface* self) { 852void CancelLibraryApplet(Service::Interface* self) {
@@ -647,125 +1060,6 @@ void CheckNew3DS(Service::Interface* self) {
647 LOG_WARNING(Service_APT, "(STUBBED) called"); 1060 LOG_WARNING(Service_APT, "(STUBBED) called");
648} 1061}
649 1062
650static u32 DecompressLZ11(const u8* in, u8* out) {
651 u32_le decompressed_size;
652 memcpy(&decompressed_size, in, sizeof(u32));
653 in += 4;
654
655 u8 type = decompressed_size & 0xFF;
656 ASSERT(type == 0x11);
657 decompressed_size >>= 8;
658
659 u32 current_out_size = 0;
660 u8 flags = 0, mask = 1;
661 while (current_out_size < decompressed_size) {
662 if (mask == 1) {
663 flags = *(in++);
664 mask = 0x80;
665 } else {
666 mask >>= 1;
667 }
668
669 if (flags & mask) {
670 u8 byte1 = *(in++);
671 u32 length = byte1 >> 4;
672 u32 offset;
673 if (length == 0) {
674 u8 byte2 = *(in++);
675 u8 byte3 = *(in++);
676 length = (((byte1 & 0x0F) << 4) | (byte2 >> 4)) + 0x11;
677 offset = (((byte2 & 0x0F) << 8) | byte3) + 0x1;
678 } else if (length == 1) {
679 u8 byte2 = *(in++);
680 u8 byte3 = *(in++);
681 u8 byte4 = *(in++);
682 length = (((byte1 & 0x0F) << 12) | (byte2 << 4) | (byte3 >> 4)) + 0x111;
683 offset = (((byte3 & 0x0F) << 8) | byte4) + 0x1;
684 } else {
685 u8 byte2 = *(in++);
686 length = (byte1 >> 4) + 0x1;
687 offset = (((byte1 & 0x0F) << 8) | byte2) + 0x1;
688 }
689
690 for (u32 i = 0; i < length; i++) {
691 *out = *(out - offset);
692 ++out;
693 }
694
695 current_out_size += length;
696 } else {
697 *(out++) = *(in++);
698 current_out_size++;
699 }
700 }
701 return decompressed_size;
702}
703
704static bool LoadSharedFont() {
705 // TODO (wwylele): load different font archive for region CHN/KOR/TWN
706 const u64_le shared_font_archive_id_low = 0x0004009b00014002;
707 const u64_le shared_font_archive_id_high = 0x00000001ffffff00;
708 std::vector<u8> shared_font_archive_id(16);
709 std::memcpy(&shared_font_archive_id[0], &shared_font_archive_id_low, sizeof(u64));
710 std::memcpy(&shared_font_archive_id[8], &shared_font_archive_id_high, sizeof(u64));
711 FileSys::Path archive_path(shared_font_archive_id);
712 auto archive_result = Service::FS::OpenArchive(Service::FS::ArchiveIdCode::NCCH, archive_path);
713 if (archive_result.Failed())
714 return false;
715
716 std::vector<u8> romfs_path(20, 0); // 20-byte all zero path for opening RomFS
717 FileSys::Path file_path(romfs_path);
718 FileSys::Mode open_mode = {};
719 open_mode.read_flag.Assign(1);
720 auto file_result = Service::FS::OpenFileFromArchive(*archive_result, file_path, open_mode);
721 if (file_result.Failed())
722 return false;
723
724 auto romfs = std::move(file_result).Unwrap();
725 std::vector<u8> romfs_buffer(romfs->backend->GetSize());
726 romfs->backend->Read(0, romfs_buffer.size(), romfs_buffer.data());
727 romfs->backend->Close();
728
729 const u8* font_file = RomFS::GetFilePointer(romfs_buffer.data(), {u"cbf_std.bcfnt.lz"});
730 if (font_file == nullptr)
731 return false;
732
733 struct {
734 u32_le status;
735 u32_le region;
736 u32_le decompressed_size;
737 INSERT_PADDING_WORDS(0x1D);
738 } shared_font_header{};
739 static_assert(sizeof(shared_font_header) == 0x80, "shared_font_header has incorrect size");
740
741 shared_font_header.status = 2; // successfully loaded
742 shared_font_header.region = 1; // region JPN/EUR/USA
743 shared_font_header.decompressed_size =
744 DecompressLZ11(font_file, shared_font_mem->GetPointer(0x80));
745 std::memcpy(shared_font_mem->GetPointer(), &shared_font_header, sizeof(shared_font_header));
746 *shared_font_mem->GetPointer(0x83) = 'U'; // Change the magic from "CFNT" to "CFNU"
747
748 return true;
749}
750
751static bool LoadLegacySharedFont() {
752 // This is the legacy method to load shared font.
753 // The expected format is a decrypted, uncompressed BCFNT file with the 0x80 byte header
754 // generated by the APT:U service. The best way to get is by dumping it from RAM. We've provided
755 // a homebrew app to do this: https://github.com/citra-emu/3dsutils. Put the resulting file
756 // "shared_font.bin" in the Citra "sysdata" directory.
757 std::string filepath = FileUtil::GetUserPath(D_SYSDATA_IDX) + SHARED_FONT;
758
759 FileUtil::CreateFullPath(filepath); // Create path if not already created
760 FileUtil::IOFile file(filepath, "rb");
761 if (file.IsOpen()) {
762 file.ReadBytes(shared_font_mem->GetPointer(), file.GetSize());
763 return true;
764 }
765
766 return false;
767}
768
769void Init() { 1063void Init() {
770 AddService(new APT_A_Interface); 1064 AddService(new APT_A_Interface);
771 AddService(new APT_S_Interface); 1065 AddService(new APT_S_Interface);
@@ -789,19 +1083,24 @@ void Init() {
789 shared_font_loaded = false; 1083 shared_font_loaded = false;
790 } 1084 }
791 1085
792 lock = Kernel::Mutex::Create(false, "APT_U:Lock"); 1086 lock = Kernel::Mutex::Create(false, 0, "APT_U:Lock");
793 1087
794 cpu_percent = 0; 1088 cpu_percent = 0;
795 unknown_ns_state_field = 0; 1089 unknown_ns_state_field = 0;
796 screen_capture_post_permission = 1090 screen_capture_post_permission =
797 ScreencapPostPermission::CleanThePermission; // TODO(JamePeng): verify the initial value 1091 ScreencapPostPermission::CleanThePermission; // TODO(JamePeng): verify the initial value
798 1092
799 // TODO(bunnei): Check if these are created in Initialize or on APT process startup. 1093 for (size_t slot = 0; slot < applet_slots.size(); ++slot) {
800 notification_event = Kernel::Event::Create(Kernel::ResetType::OneShot, "APT_U:Notification"); 1094 auto& slot_data = applet_slots[slot];
801 parameter_event = Kernel::Event::Create(Kernel::ResetType::OneShot, "APT_U:Start"); 1095 slot_data.slot = static_cast<AppletSlot>(slot);
802 1096 slot_data.applet_id = AppletId::None;
803 next_parameter.signal = static_cast<u32>(SignalType::Wakeup); 1097 slot_data.attributes.raw = 0;
804 next_parameter.destination_id = 0x300; 1098 slot_data.registered = false;
1099 slot_data.notification_event =
1100 Kernel::Event::Create(Kernel::ResetType::OneShot, "APT:Notification");
1101 slot_data.parameter_event =
1102 Kernel::Event::Create(Kernel::ResetType::OneShot, "APT:Parameter");
1103 }
805} 1104}
806 1105
807void Shutdown() { 1106void Shutdown() {
@@ -809,10 +1108,14 @@ void Shutdown() {
809 shared_font_loaded = false; 1108 shared_font_loaded = false;
810 shared_font_relocated = false; 1109 shared_font_relocated = false;
811 lock = nullptr; 1110 lock = nullptr;
812 notification_event = nullptr;
813 parameter_event = nullptr;
814 1111
815 next_parameter.object = nullptr; 1112 for (auto& slot : applet_slots) {
1113 slot.registered = false;
1114 slot.notification_event = nullptr;
1115 slot.parameter_event = nullptr;
1116 }
1117
1118 next_parameter = boost::none;
816 1119
817 HLE::Applets::Shutdown(); 1120 HLE::Applets::Shutdown();
818} 1121}
diff --git a/src/core/hle/service/apt/apt.h b/src/core/hle/service/apt/apt.h
index ee80926d2..7b79e1f3e 100644
--- a/src/core/hle/service/apt/apt.h
+++ b/src/core/hle/service/apt/apt.h
@@ -72,6 +72,8 @@ enum class SignalType : u32 {
72 72
73/// App Id's used by APT functions 73/// App Id's used by APT functions
74enum class AppletId : u32 { 74enum class AppletId : u32 {
75 None = 0,
76 AnySystemApplet = 0x100,
75 HomeMenu = 0x101, 77 HomeMenu = 0x101,
76 AlternateMenu = 0x103, 78 AlternateMenu = 0x103,
77 Camera = 0x110, 79 Camera = 0x110,
@@ -83,6 +85,7 @@ enum class AppletId : u32 {
83 Miiverse = 0x117, 85 Miiverse = 0x117,
84 MiiversePost = 0x118, 86 MiiversePost = 0x118,
85 AmiiboSettings = 0x119, 87 AmiiboSettings = 0x119,
88 AnySysLibraryApplet = 0x200,
86 SoftwareKeyboard1 = 0x201, 89 SoftwareKeyboard1 = 0x201,
87 Ed1 = 0x202, 90 Ed1 = 0x202,
88 PnoteApp = 0x204, 91 PnoteApp = 0x204,
@@ -116,6 +119,13 @@ enum class ScreencapPostPermission : u32 {
116 DisableScreenshotPostingToMiiverse = 3 119 DisableScreenshotPostingToMiiverse = 3
117}; 120};
118 121
122namespace ErrCodes {
123enum {
124 ParameterPresent = 2,
125 InvalidAppletSlot = 4,
126};
127} // namespace ErrCodes
128
119/// Send a parameter to the currently-running application, which will read it via ReceiveParameter 129/// Send a parameter to the currently-running application, which will read it via ReceiveParameter
120void SendParameter(const MessageParameter& parameter); 130void SendParameter(const MessageParameter& parameter);
121 131
@@ -410,6 +420,16 @@ void GetAppCpuTimeLimit(Service::Interface* self);
410void PrepareToStartLibraryApplet(Service::Interface* self); 420void PrepareToStartLibraryApplet(Service::Interface* self);
411 421
412/** 422/**
423 * APT::PrepareToStartNewestHomeMenu service function
424 * Inputs:
425 * 0 : Command header [0x001A0000]
426 * Outputs:
427 * 0 : Return header
428 * 1 : Result of function
429 */
430void PrepareToStartNewestHomeMenu(Service::Interface* self);
431
432/**
413 * APT::PreloadLibraryApplet service function 433 * APT::PreloadLibraryApplet service function
414 * Inputs: 434 * Inputs:
415 * 0 : Command header [0x00160040] 435 * 0 : Command header [0x00160040]
diff --git a/src/core/hle/service/apt/apt_s.cpp b/src/core/hle/service/apt/apt_s.cpp
index ec5668d05..bb78ee7d7 100644
--- a/src/core/hle/service/apt/apt_s.cpp
+++ b/src/core/hle/service/apt/apt_s.cpp
@@ -17,10 +17,10 @@ const Interface::FunctionInfo FunctionTable[] = {
17 {0x00060040, GetAppletInfo, "GetAppletInfo"}, 17 {0x00060040, GetAppletInfo, "GetAppletInfo"},
18 {0x00070000, nullptr, "GetLastSignaledAppletId"}, 18 {0x00070000, nullptr, "GetLastSignaledAppletId"},
19 {0x00080000, nullptr, "CountRegisteredApplet"}, 19 {0x00080000, nullptr, "CountRegisteredApplet"},
20 {0x00090040, nullptr, "IsRegistered"}, 20 {0x00090040, IsRegistered, "IsRegistered"},
21 {0x000A0040, nullptr, "GetAttribute"}, 21 {0x000A0040, nullptr, "GetAttribute"},
22 {0x000B0040, InquireNotification, "InquireNotification"}, 22 {0x000B0040, InquireNotification, "InquireNotification"},
23 {0x000C0104, nullptr, "SendParameter"}, 23 {0x000C0104, SendParameter, "SendParameter"},
24 {0x000D0080, ReceiveParameter, "ReceiveParameter"}, 24 {0x000D0080, ReceiveParameter, "ReceiveParameter"},
25 {0x000E0080, GlanceParameter, "GlanceParameter"}, 25 {0x000E0080, GlanceParameter, "GlanceParameter"},
26 {0x000F0100, nullptr, "CancelParameter"}, 26 {0x000F0100, nullptr, "CancelParameter"},
@@ -34,11 +34,11 @@ const Interface::FunctionInfo FunctionTable[] = {
34 {0x00170040, nullptr, "FinishPreloadingLibraryApplet"}, 34 {0x00170040, nullptr, "FinishPreloadingLibraryApplet"},
35 {0x00180040, PrepareToStartLibraryApplet, "PrepareToStartLibraryApplet"}, 35 {0x00180040, PrepareToStartLibraryApplet, "PrepareToStartLibraryApplet"},
36 {0x00190040, nullptr, "PrepareToStartSystemApplet"}, 36 {0x00190040, nullptr, "PrepareToStartSystemApplet"},
37 {0x001A0000, nullptr, "PrepareToStartNewestHomeMenu"}, 37 {0x001A0000, PrepareToStartNewestHomeMenu, "PrepareToStartNewestHomeMenu"},
38 {0x001B00C4, nullptr, "StartApplication"}, 38 {0x001B00C4, nullptr, "StartApplication"},
39 {0x001C0000, nullptr, "WakeupApplication"}, 39 {0x001C0000, nullptr, "WakeupApplication"},
40 {0x001D0000, nullptr, "CancelApplication"}, 40 {0x001D0000, nullptr, "CancelApplication"},
41 {0x001E0084, nullptr, "StartLibraryApplet"}, 41 {0x001E0084, StartLibraryApplet, "StartLibraryApplet"},
42 {0x001F0084, nullptr, "StartSystemApplet"}, 42 {0x001F0084, nullptr, "StartSystemApplet"},
43 {0x00200044, nullptr, "StartNewestHomeMenu"}, 43 {0x00200044, nullptr, "StartNewestHomeMenu"},
44 {0x00210000, nullptr, "OrderToCloseApplication"}, 44 {0x00210000, nullptr, "OrderToCloseApplication"},
diff --git a/src/core/hle/service/cam/cam.cpp b/src/core/hle/service/cam/cam.cpp
index c9f9e9d95..8172edae8 100644
--- a/src/core/hle/service/cam/cam.cpp
+++ b/src/core/hle/service/cam/cam.cpp
@@ -177,7 +177,7 @@ void CompletionEventCallBack(u64 port_id, int) {
177 LOG_ERROR(Service_CAM, "The destination size (%u) doesn't match the source (%zu)!", 177 LOG_ERROR(Service_CAM, "The destination size (%u) doesn't match the source (%zu)!",
178 port.dest_size, buffer_size); 178 port.dest_size, buffer_size);
179 } 179 }
180 Memory::WriteBlock(port.dest, buffer.data(), std::min<u32>(port.dest_size, buffer_size)); 180 Memory::WriteBlock(port.dest, buffer.data(), std::min<size_t>(port.dest_size, buffer_size));
181 } 181 }
182 182
183 port.is_receiving = false; 183 port.is_receiving = false;
diff --git a/src/core/hle/service/cfg/cfg.cpp b/src/core/hle/service/cfg/cfg.cpp
index 6624f1711..f78c25fb2 100644
--- a/src/core/hle/service/cfg/cfg.cpp
+++ b/src/core/hle/service/cfg/cfg.cpp
@@ -141,7 +141,7 @@ void GetCountryCodeString(Service::Interface* self) {
141 141
142void GetCountryCodeID(Service::Interface* self) { 142void GetCountryCodeID(Service::Interface* self) {
143 u32* cmd_buff = Kernel::GetCommandBuffer(); 143 u32* cmd_buff = Kernel::GetCommandBuffer();
144 u16 country_code = cmd_buff[1]; 144 u16 country_code = static_cast<u16>(cmd_buff[1]);
145 u16 country_code_id = 0; 145 u16 country_code_id = 0;
146 146
147 // The following algorithm will fail if the first country code isn't 0. 147 // The following algorithm will fail if the first country code isn't 0.
@@ -168,7 +168,7 @@ void GetCountryCodeID(Service::Interface* self) {
168 cmd_buff[2] = country_code_id; 168 cmd_buff[2] = country_code_id;
169} 169}
170 170
171static u32 GetRegionValue() { 171u32 GetRegionValue() {
172 if (Settings::values.region_value == Settings::REGION_VALUE_AUTO_SELECT) 172 if (Settings::values.region_value == Settings::REGION_VALUE_AUTO_SELECT)
173 return preferred_region_code; 173 return preferred_region_code;
174 174
@@ -681,7 +681,7 @@ void GenerateConsoleUniqueId(u32& random_number, u64& console_id) {
681 CryptoPP::AutoSeededRandomPool rng; 681 CryptoPP::AutoSeededRandomPool rng;
682 random_number = rng.GenerateWord32(0, 0xFFFF); 682 random_number = rng.GenerateWord32(0, 0xFFFF);
683 u64_le local_friend_code_seed; 683 u64_le local_friend_code_seed;
684 rng.GenerateBlock(reinterpret_cast<byte*>(&local_friend_code_seed), 684 rng.GenerateBlock(reinterpret_cast<CryptoPP::byte*>(&local_friend_code_seed),
685 sizeof(local_friend_code_seed)); 685 sizeof(local_friend_code_seed));
686 console_id = (local_friend_code_seed & 0x3FFFFFFFF) | (static_cast<u64>(random_number) << 48); 686 console_id = (local_friend_code_seed & 0x3FFFFFFFF) | (static_cast<u64>(random_number) << 48);
687} 687}
diff --git a/src/core/hle/service/cfg/cfg.h b/src/core/hle/service/cfg/cfg.h
index 1659ebf32..282b6936b 100644
--- a/src/core/hle/service/cfg/cfg.h
+++ b/src/core/hle/service/cfg/cfg.h
@@ -101,6 +101,8 @@ void GetCountryCodeString(Service::Interface* self);
101 */ 101 */
102void GetCountryCodeID(Service::Interface* self); 102void GetCountryCodeID(Service::Interface* self);
103 103
104u32 GetRegionValue();
105
104/** 106/**
105 * CFG::SecureInfoGetRegion service function 107 * CFG::SecureInfoGetRegion service function
106 * Inputs: 108 * Inputs:
diff --git a/src/core/hle/service/csnd_snd.cpp b/src/core/hle/service/csnd_snd.cpp
index 9471ec1ef..aac903ccb 100644
--- a/src/core/hle/service/csnd_snd.cpp
+++ b/src/core/hle/service/csnd_snd.cpp
@@ -47,7 +47,7 @@ static void Initialize(Interface* self) {
47 MemoryPermission::ReadWrite, 0, 47 MemoryPermission::ReadWrite, 0,
48 Kernel::MemoryRegion::BASE, "CSND:SharedMemory"); 48 Kernel::MemoryRegion::BASE, "CSND:SharedMemory");
49 49
50 mutex = Kernel::Mutex::Create(false, "CSND:mutex"); 50 mutex = Kernel::Mutex::Create(false, 0, "CSND:mutex");
51 51
52 cmd_buff[1] = RESULT_SUCCESS.raw; 52 cmd_buff[1] = RESULT_SUCCESS.raw;
53 cmd_buff[2] = IPC::CopyHandleDesc(2); 53 cmd_buff[2] = IPC::CopyHandleDesc(2);
diff --git a/src/core/hle/service/dlp/dlp_clnt.cpp b/src/core/hle/service/dlp/dlp_clnt.cpp
index 56f934b3f..6f2bf2061 100644
--- a/src/core/hle/service/dlp/dlp_clnt.cpp
+++ b/src/core/hle/service/dlp/dlp_clnt.cpp
@@ -8,7 +8,26 @@ namespace Service {
8namespace DLP { 8namespace DLP {
9 9
10const Interface::FunctionInfo FunctionTable[] = { 10const Interface::FunctionInfo FunctionTable[] = {
11 {0x000100C3, nullptr, "Initialize"}, {0x00110000, nullptr, "GetWirelessRebootPassphrase"}, 11 {0x000100C3, nullptr, "Initialize"},
12 {0x00020000, nullptr, "Finalize"},
13 {0x00030000, nullptr, "GetEventDesc"},
14 {0x00040000, nullptr, "GetChannel"},
15 {0x00050180, nullptr, "StartScan"},
16 {0x00060000, nullptr, "StopScan"},
17 {0x00070080, nullptr, "GetServerInfo"},
18 {0x00080100, nullptr, "GetTitleInfo"},
19 {0x00090040, nullptr, "GetTitleInfoInOrder"},
20 {0x000A0080, nullptr, "DeleteScanInfo"},
21 {0x000B0100, nullptr, "PrepareForSystemDownload"},
22 {0x000C0000, nullptr, "StartSystemDownload"},
23 {0x000D0100, nullptr, "StartTitleDownload"},
24 {0x000E0000, nullptr, "GetMyStatus"},
25 {0x000F0040, nullptr, "GetConnectingNodes"},
26 {0x00100040, nullptr, "GetNodeInfo"},
27 {0x00110000, nullptr, "GetWirelessRebootPassphrase"},
28 {0x00120000, nullptr, "StopSession"},
29 {0x00130100, nullptr, "GetCupVersion"},
30 {0x00140100, nullptr, "GetDupAvailability"},
12}; 31};
13 32
14DLP_CLNT_Interface::DLP_CLNT_Interface() { 33DLP_CLNT_Interface::DLP_CLNT_Interface() {
diff --git a/src/core/hle/service/dlp/dlp_fkcl.cpp b/src/core/hle/service/dlp/dlp_fkcl.cpp
index 29b9d52e0..fe6be7d32 100644
--- a/src/core/hle/service/dlp/dlp_fkcl.cpp
+++ b/src/core/hle/service/dlp/dlp_fkcl.cpp
@@ -8,7 +8,23 @@ namespace Service {
8namespace DLP { 8namespace DLP {
9 9
10const Interface::FunctionInfo FunctionTable[] = { 10const Interface::FunctionInfo FunctionTable[] = {
11 {0x00010083, nullptr, "Initialize"}, {0x000F0000, nullptr, "GetWirelessRebootPassphrase"}, 11 {0x00010083, nullptr, "Initialize"},
12 {0x00020000, nullptr, "Finalize"},
13 {0x00030000, nullptr, "GetEventDesc"},
14 {0x00040000, nullptr, "GetChannels"},
15 {0x00050180, nullptr, "StartScan"},
16 {0x00060000, nullptr, "StopScan"},
17 {0x00070080, nullptr, "GetServerInfo"},
18 {0x00080100, nullptr, "GetTitleInfo"},
19 {0x00090040, nullptr, "GetTitleInfoInOrder"},
20 {0x000A0080, nullptr, "DeleteScanInfo"},
21 {0x000B0100, nullptr, "StartFakeSession"},
22 {0x000C0000, nullptr, "GetMyStatus"},
23 {0x000D0040, nullptr, "GetConnectingNodes"},
24 {0x000E0040, nullptr, "GetNodeInfo"},
25 {0x000F0000, nullptr, "GetWirelessRebootPassphrase"},
26 {0x00100000, nullptr, "StopSession"},
27 {0x00110203, nullptr, "Initialize2"},
12}; 28};
13 29
14DLP_FKCL_Interface::DLP_FKCL_Interface() { 30DLP_FKCL_Interface::DLP_FKCL_Interface() {
diff --git a/src/core/hle/service/dlp/dlp_srvr.cpp b/src/core/hle/service/dlp/dlp_srvr.cpp
index 32cfa2c44..1bcea43d3 100644
--- a/src/core/hle/service/dlp/dlp_srvr.cpp
+++ b/src/core/hle/service/dlp/dlp_srvr.cpp
@@ -11,7 +11,7 @@
11namespace Service { 11namespace Service {
12namespace DLP { 12namespace DLP {
13 13
14static void unk_0x000E0040(Interface* self) { 14static void IsChild(Interface* self) {
15 u32* cmd_buff = Kernel::GetCommandBuffer(); 15 u32* cmd_buff = Kernel::GetCommandBuffer();
16 16
17 cmd_buff[1] = RESULT_SUCCESS.raw; 17 cmd_buff[1] = RESULT_SUCCESS.raw;
@@ -24,14 +24,19 @@ const Interface::FunctionInfo FunctionTable[] = {
24 {0x00010183, nullptr, "Initialize"}, 24 {0x00010183, nullptr, "Initialize"},
25 {0x00020000, nullptr, "Finalize"}, 25 {0x00020000, nullptr, "Finalize"},
26 {0x00030000, nullptr, "GetServerState"}, 26 {0x00030000, nullptr, "GetServerState"},
27 {0x00040000, nullptr, "GetEventDescription"},
27 {0x00050080, nullptr, "StartAccepting"}, 28 {0x00050080, nullptr, "StartAccepting"},
29 {0x00060000, nullptr, "EndAccepting"},
28 {0x00070000, nullptr, "StartDistribution"}, 30 {0x00070000, nullptr, "StartDistribution"},
29 {0x000800C0, nullptr, "SendWirelessRebootPassphrase"}, 31 {0x000800C0, nullptr, "SendWirelessRebootPassphrase"},
30 {0x00090040, nullptr, "AcceptClient"}, 32 {0x00090040, nullptr, "AcceptClient"},
33 {0x000A0040, nullptr, "DisconnectClient"},
31 {0x000B0042, nullptr, "GetConnectingClients"}, 34 {0x000B0042, nullptr, "GetConnectingClients"},
32 {0x000C0040, nullptr, "GetClientInfo"}, 35 {0x000C0040, nullptr, "GetClientInfo"},
33 {0x000D0040, nullptr, "GetClientState"}, 36 {0x000D0040, nullptr, "GetClientState"},
34 {0x000E0040, unk_0x000E0040, "unk_0x000E0040"}, 37 {0x000E0040, IsChild, "IsChild"},
38 {0x000F0303, nullptr, "InitializeWithName"},
39 {0x00100000, nullptr, "GetDupNoticeNeed"},
35}; 40};
36 41
37DLP_SRVR_Interface::DLP_SRVR_Interface() { 42DLP_SRVR_Interface::DLP_SRVR_Interface() {
diff --git a/src/core/hle/service/dsp_dsp.cpp b/src/core/hle/service/dsp_dsp.cpp
index 7d746054f..42f8950f9 100644
--- a/src/core/hle/service/dsp_dsp.cpp
+++ b/src/core/hle/service/dsp_dsp.cpp
@@ -147,9 +147,10 @@ static void LoadComponent(Service::Interface* self) {
147 LOG_INFO(Service_DSP, "Firmware hash: %#" PRIx64, 147 LOG_INFO(Service_DSP, "Firmware hash: %#" PRIx64,
148 Common::ComputeHash64(component_data.data(), component_data.size())); 148 Common::ComputeHash64(component_data.data(), component_data.size()));
149 // Some versions of the firmware have the location of DSP structures listed here. 149 // Some versions of the firmware have the location of DSP structures listed here.
150 ASSERT(size > 0x37C); 150 if (size > 0x37C) {
151 LOG_INFO(Service_DSP, "Structures hash: %#" PRIx64, 151 LOG_INFO(Service_DSP, "Structures hash: %#" PRIx64,
152 Common::ComputeHash64(component_data.data() + 0x340, 60)); 152 Common::ComputeHash64(component_data.data() + 0x340, 60));
153 }
153 154
154 LOG_WARNING(Service_DSP, 155 LOG_WARNING(Service_DSP,
155 "(STUBBED) called size=0x%X, prog_mask=0x%08X, data_mask=0x%08X, buffer=0x%08X", 156 "(STUBBED) called size=0x%X, prog_mask=0x%08X, data_mask=0x%08X, buffer=0x%08X",
diff --git a/src/core/hle/service/fs/archive.cpp b/src/core/hle/service/fs/archive.cpp
index 033fbc9aa..4ee7df73c 100644
--- a/src/core/hle/service/fs/archive.cpp
+++ b/src/core/hle/service/fs/archive.cpp
@@ -20,6 +20,7 @@
20#include "core/file_sys/archive_savedata.h" 20#include "core/file_sys/archive_savedata.h"
21#include "core/file_sys/archive_sdmc.h" 21#include "core/file_sys/archive_sdmc.h"
22#include "core/file_sys/archive_sdmcwriteonly.h" 22#include "core/file_sys/archive_sdmcwriteonly.h"
23#include "core/file_sys/archive_selfncch.h"
23#include "core/file_sys/archive_systemsavedata.h" 24#include "core/file_sys/archive_systemsavedata.h"
24#include "core/file_sys/directory_backend.h" 25#include "core/file_sys/directory_backend.h"
25#include "core/file_sys/errors.h" 26#include "core/file_sys/errors.h"
@@ -48,7 +49,7 @@ struct hash<Service::FS::ArchiveIdCode> {
48 return std::hash<Type>()(static_cast<Type>(id_code)); 49 return std::hash<Type>()(static_cast<Type>(id_code));
49 } 50 }
50}; 51};
51} 52} // namespace std
52 53
53static constexpr Kernel::Handle INVALID_HANDLE{}; 54static constexpr Kernel::Handle INVALID_HANDLE{};
54 55
@@ -216,7 +217,7 @@ void Directory::HandleSyncRequest(Kernel::SharedPtr<Kernel::ServerSession> serve
216 LOG_TRACE(Service_FS, "Read %s: count=%d", GetName().c_str(), count); 217 LOG_TRACE(Service_FS, "Read %s: count=%d", GetName().c_str(), count);
217 218
218 // Number of entries actually read 219 // Number of entries actually read
219 u32 read = backend->Read(entries.size(), entries.data()); 220 u32 read = backend->Read(static_cast<u32>(entries.size()), entries.data());
220 cmd_buff[2] = read; 221 cmd_buff[2] = read;
221 Memory::WriteBlock(address, entries.data(), read * sizeof(FileSys::Entry)); 222 Memory::WriteBlock(address, entries.data(), read * sizeof(FileSys::Entry));
222 break; 223 break;
@@ -564,6 +565,21 @@ void RegisterArchiveTypes() {
564 auto systemsavedata_factory = 565 auto systemsavedata_factory =
565 std::make_unique<FileSys::ArchiveFactory_SystemSaveData>(nand_directory); 566 std::make_unique<FileSys::ArchiveFactory_SystemSaveData>(nand_directory);
566 RegisterArchiveType(std::move(systemsavedata_factory), ArchiveIdCode::SystemSaveData); 567 RegisterArchiveType(std::move(systemsavedata_factory), ArchiveIdCode::SystemSaveData);
568
569 auto selfncch_factory = std::make_unique<FileSys::ArchiveFactory_SelfNCCH>();
570 RegisterArchiveType(std::move(selfncch_factory), ArchiveIdCode::SelfNCCH);
571}
572
573void RegisterSelfNCCH(Loader::AppLoader& app_loader) {
574 auto itr = id_code_map.find(ArchiveIdCode::SelfNCCH);
575 if (itr == id_code_map.end()) {
576 LOG_ERROR(Service_FS,
577 "Could not register a new NCCH because the SelfNCCH archive hasn't been created");
578 return;
579 }
580
581 auto* factory = static_cast<FileSys::ArchiveFactory_SelfNCCH*>(itr->second.get());
582 factory->Register(app_loader);
567} 583}
568 584
569void UnregisterArchiveTypes() { 585void UnregisterArchiveTypes() {
diff --git a/src/core/hle/service/fs/archive.h b/src/core/hle/service/fs/archive.h
index 3a3371c88..e3c8fc2ef 100644
--- a/src/core/hle/service/fs/archive.h
+++ b/src/core/hle/service/fs/archive.h
@@ -21,6 +21,10 @@ static constexpr char SYSTEM_ID[]{"00000000000000000000000000000000"};
21/// The scrambled SD card CID, also known as ID1 21/// The scrambled SD card CID, also known as ID1
22static constexpr char SDCARD_ID[]{"00000000000000000000000000000000"}; 22static constexpr char SDCARD_ID[]{"00000000000000000000000000000000"};
23 23
24namespace Loader {
25class AppLoader;
26}
27
24namespace Service { 28namespace Service {
25namespace FS { 29namespace FS {
26 30
@@ -259,6 +263,9 @@ void ArchiveInit();
259/// Shutdown archives 263/// Shutdown archives
260void ArchiveShutdown(); 264void ArchiveShutdown();
261 265
266/// Registers a new NCCH file with the SelfNCCH archive factory
267void RegisterSelfNCCH(Loader::AppLoader& app_loader);
268
262/// Register all archive types 269/// Register all archive types
263void RegisterArchiveTypes(); 270void RegisterArchiveTypes();
264 271
diff --git a/src/core/hle/service/hid/hid.cpp b/src/core/hle/service/hid/hid.cpp
index 2014b8461..379fbd71c 100644
--- a/src/core/hle/service/hid/hid.cpp
+++ b/src/core/hle/service/hid/hid.cpp
@@ -7,8 +7,9 @@
7#include <cmath> 7#include <cmath>
8#include <memory> 8#include <memory>
9#include "common/logging/log.h" 9#include "common/logging/log.h"
10#include "core/3ds.h"
11#include "core/core.h"
10#include "core/core_timing.h" 12#include "core/core_timing.h"
11#include "core/frontend/emu_window.h"
12#include "core/frontend/input.h" 13#include "core/frontend/input.h"
13#include "core/hle/ipc.h" 14#include "core/hle/ipc.h"
14#include "core/hle/kernel/event.h" 15#include "core/hle/kernel/event.h"
@@ -18,7 +19,6 @@
18#include "core/hle/service/hid/hid_spvr.h" 19#include "core/hle/service/hid/hid_spvr.h"
19#include "core/hle/service/hid/hid_user.h" 20#include "core/hle/service/hid/hid_user.h"
20#include "core/hle/service/service.h" 21#include "core/hle/service/service.h"
21#include "video_core/video_core.h"
22 22
23namespace Service { 23namespace Service {
24namespace HID { 24namespace HID {
@@ -50,10 +50,15 @@ constexpr u64 pad_update_ticks = BASE_CLOCK_RATE_ARM11 / 234;
50constexpr u64 accelerometer_update_ticks = BASE_CLOCK_RATE_ARM11 / 104; 50constexpr u64 accelerometer_update_ticks = BASE_CLOCK_RATE_ARM11 / 104;
51constexpr u64 gyroscope_update_ticks = BASE_CLOCK_RATE_ARM11 / 101; 51constexpr u64 gyroscope_update_ticks = BASE_CLOCK_RATE_ARM11 / 101;
52 52
53constexpr float accelerometer_coef = 512.0f; // measured from hw test result
54constexpr float gyroscope_coef = 14.375f; // got from hwtest GetGyroscopeLowRawToDpsCoefficient call
55
53static std::atomic<bool> is_device_reload_pending; 56static std::atomic<bool> is_device_reload_pending;
54static std::array<std::unique_ptr<Input::ButtonDevice>, Settings::NativeButton::NUM_BUTTONS_HID> 57static std::array<std::unique_ptr<Input::ButtonDevice>, Settings::NativeButton::NUM_BUTTONS_HID>
55 buttons; 58 buttons;
56static std::unique_ptr<Input::AnalogDevice> circle_pad; 59static std::unique_ptr<Input::AnalogDevice> circle_pad;
60static std::unique_ptr<Input::MotionDevice> motion_device;
61static std::unique_ptr<Input::TouchDevice> touch_device;
57 62
58DirectionState GetStickDirectionState(s16 circle_pad_x, s16 circle_pad_y) { 63DirectionState GetStickDirectionState(s16 circle_pad_x, s16 circle_pad_y) {
59 // 30 degree and 60 degree are angular thresholds for directions 64 // 30 degree and 60 degree are angular thresholds for directions
@@ -90,6 +95,8 @@ static void LoadInputDevices() {
90 buttons.begin(), Input::CreateDevice<Input::ButtonDevice>); 95 buttons.begin(), Input::CreateDevice<Input::ButtonDevice>);
91 circle_pad = Input::CreateDevice<Input::AnalogDevice>( 96 circle_pad = Input::CreateDevice<Input::AnalogDevice>(
92 Settings::values.analogs[Settings::NativeAnalog::CirclePad]); 97 Settings::values.analogs[Settings::NativeAnalog::CirclePad]);
98 motion_device = Input::CreateDevice<Input::MotionDevice>(Settings::values.motion_device);
99 touch_device = Input::CreateDevice<Input::TouchDevice>(Settings::values.touch_device);
93} 100}
94 101
95static void UnloadInputDevices() { 102static void UnloadInputDevices() {
@@ -97,6 +104,8 @@ static void UnloadInputDevices() {
97 button.reset(); 104 button.reset();
98 } 105 }
99 circle_pad.reset(); 106 circle_pad.reset();
107 motion_device.reset();
108 touch_device.reset();
100} 109}
101 110
102static void UpdatePadCallback(u64 userdata, int cycles_late) { 111static void UpdatePadCallback(u64 userdata, int cycles_late) {
@@ -165,8 +174,10 @@ static void UpdatePadCallback(u64 userdata, int cycles_late) {
165 // Get the current touch entry 174 // Get the current touch entry
166 TouchDataEntry& touch_entry = mem->touch.entries[mem->touch.index]; 175 TouchDataEntry& touch_entry = mem->touch.entries[mem->touch.index];
167 bool pressed = false; 176 bool pressed = false;
168 177 float x, y;
169 std::tie(touch_entry.x, touch_entry.y, pressed) = VideoCore::g_emu_window->GetTouchState(); 178 std::tie(x, y, pressed) = touch_device->GetStatus();
179 touch_entry.x = static_cast<u16>(x * Core::kScreenBottomWidth);
180 touch_entry.y = static_cast<u16>(y * Core::kScreenBottomHeight);
170 touch_entry.valid.Assign(pressed ? 1 : 0); 181 touch_entry.valid.Assign(pressed ? 1 : 0);
171 182
172 // TODO(bunnei): We're not doing anything with offset 0xA8 + 0x18 of HID SharedMemory, which 183 // TODO(bunnei): We're not doing anything with offset 0xA8 + 0x18 of HID SharedMemory, which
@@ -193,10 +204,19 @@ static void UpdateAccelerometerCallback(u64 userdata, int cycles_late) {
193 mem->accelerometer.index = next_accelerometer_index; 204 mem->accelerometer.index = next_accelerometer_index;
194 next_accelerometer_index = (next_accelerometer_index + 1) % mem->accelerometer.entries.size(); 205 next_accelerometer_index = (next_accelerometer_index + 1) % mem->accelerometer.entries.size();
195 206
207 Math::Vec3<float> accel;
208 std::tie(accel, std::ignore) = motion_device->GetStatus();
209 accel *= accelerometer_coef;
210 // TODO(wwylele): do a time stretch like the one in UpdateGyroscopeCallback
211 // The time stretch formula should be like
212 // stretched_vector = (raw_vector - gravity) * stretch_ratio + gravity
213
196 AccelerometerDataEntry& accelerometer_entry = 214 AccelerometerDataEntry& accelerometer_entry =
197 mem->accelerometer.entries[mem->accelerometer.index]; 215 mem->accelerometer.entries[mem->accelerometer.index];
198 std::tie(accelerometer_entry.x, accelerometer_entry.y, accelerometer_entry.z) = 216
199 VideoCore::g_emu_window->GetAccelerometerState(); 217 accelerometer_entry.x = static_cast<s16>(accel.x);
218 accelerometer_entry.y = static_cast<s16>(accel.y);
219 accelerometer_entry.z = static_cast<s16>(accel.z);
200 220
201 // Make up "raw" entry 221 // Make up "raw" entry
202 // TODO(wwylele): 222 // TODO(wwylele):
@@ -227,8 +247,14 @@ static void UpdateGyroscopeCallback(u64 userdata, int cycles_late) {
227 next_gyroscope_index = (next_gyroscope_index + 1) % mem->gyroscope.entries.size(); 247 next_gyroscope_index = (next_gyroscope_index + 1) % mem->gyroscope.entries.size();
228 248
229 GyroscopeDataEntry& gyroscope_entry = mem->gyroscope.entries[mem->gyroscope.index]; 249 GyroscopeDataEntry& gyroscope_entry = mem->gyroscope.entries[mem->gyroscope.index];
230 std::tie(gyroscope_entry.x, gyroscope_entry.y, gyroscope_entry.z) = 250
231 VideoCore::g_emu_window->GetGyroscopeState(); 251 Math::Vec3<float> gyro;
252 std::tie(std::ignore, gyro) = motion_device->GetStatus();
253 double stretch = Core::System::GetInstance().perf_stats.GetLastFrameTimeScale();
254 gyro *= gyroscope_coef * static_cast<float>(stretch);
255 gyroscope_entry.x = static_cast<s16>(gyro.x);
256 gyroscope_entry.y = static_cast<s16>(gyro.y);
257 gyroscope_entry.z = static_cast<s16>(gyro.z);
232 258
233 // Make up "raw" entry 259 // Make up "raw" entry
234 mem->gyroscope.raw_entry.x = gyroscope_entry.x; 260 mem->gyroscope.raw_entry.x = gyroscope_entry.x;
@@ -326,7 +352,7 @@ void GetGyroscopeLowRawToDpsCoefficient(Service::Interface* self) {
326 352
327 cmd_buff[1] = RESULT_SUCCESS.raw; 353 cmd_buff[1] = RESULT_SUCCESS.raw;
328 354
329 f32 coef = VideoCore::g_emu_window->GetGyroscopeRawToDpsCoefficient(); 355 f32 coef = gyroscope_coef;
330 memcpy(&cmd_buff[2], &coef, 4); 356 memcpy(&cmd_buff[2], &coef, 4);
331} 357}
332 358
diff --git a/src/core/hle/service/hid/hid.h b/src/core/hle/service/hid/hid.h
index 1ef972e70..ef25926b5 100644
--- a/src/core/hle/service/hid/hid.h
+++ b/src/core/hle/service/hid/hid.h
@@ -24,7 +24,7 @@ namespace HID {
24 */ 24 */
25struct PadState { 25struct PadState {
26 union { 26 union {
27 u32 hex; 27 u32 hex{};
28 28
29 BitField<0, 1, u32> a; 29 BitField<0, 1, u32> a;
30 BitField<1, 1, u32> b; 30 BitField<1, 1, u32> b;
diff --git a/src/core/hle/service/ir/ir_rst.cpp b/src/core/hle/service/ir/ir_rst.cpp
index 837413f93..0912d5756 100644
--- a/src/core/hle/service/ir/ir_rst.cpp
+++ b/src/core/hle/service/ir/ir_rst.cpp
@@ -18,7 +18,7 @@ namespace Service {
18namespace IR { 18namespace IR {
19 19
20union PadState { 20union PadState {
21 u32_le hex; 21 u32_le hex{};
22 22
23 BitField<14, 1, u32_le> zl; 23 BitField<14, 1, u32_le> zl;
24 BitField<15, 1, u32_le> zr; 24 BitField<15, 1, u32_le> zr;
diff --git a/src/core/hle/service/ldr_ro/cro_helper.h b/src/core/hle/service/ldr_ro/cro_helper.h
index 3bc10dbdc..57b4fb6df 100644
--- a/src/core/hle/service/ldr_ro/cro_helper.h
+++ b/src/core/hle/service/ldr_ro/cro_helper.h
@@ -413,7 +413,8 @@ private:
413 */ 413 */
414 template <typename T> 414 template <typename T>
415 void GetEntry(std::size_t index, T& data) const { 415 void GetEntry(std::size_t index, T& data) const {
416 Memory::ReadBlock(GetField(T::TABLE_OFFSET_FIELD) + index * sizeof(T), &data, sizeof(T)); 416 Memory::ReadBlock(GetField(T::TABLE_OFFSET_FIELD) + static_cast<u32>(index * sizeof(T)),
417 &data, sizeof(T));
417 } 418 }
418 419
419 /** 420 /**
@@ -425,7 +426,8 @@ private:
425 */ 426 */
426 template <typename T> 427 template <typename T>
427 void SetEntry(std::size_t index, const T& data) { 428 void SetEntry(std::size_t index, const T& data) {
428 Memory::WriteBlock(GetField(T::TABLE_OFFSET_FIELD) + index * sizeof(T), &data, sizeof(T)); 429 Memory::WriteBlock(GetField(T::TABLE_OFFSET_FIELD) + static_cast<u32>(index * sizeof(T)),
430 &data, sizeof(T));
429 } 431 }
430 432
431 /** 433 /**
diff --git a/src/core/hle/service/nim/nim.cpp b/src/core/hle/service/nim/nim.cpp
index d5624fe54..b10d5852b 100644
--- a/src/core/hle/service/nim/nim.cpp
+++ b/src/core/hle/service/nim/nim.cpp
@@ -5,6 +5,8 @@
5#include "common/common_types.h" 5#include "common/common_types.h"
6#include "common/logging/log.h" 6#include "common/logging/log.h"
7#include "core/hle/ipc.h" 7#include "core/hle/ipc.h"
8#include "core/hle/ipc_helpers.h"
9#include "core/hle/kernel/event.h"
8#include "core/hle/service/nim/nim.h" 10#include "core/hle/service/nim/nim.h"
9#include "core/hle/service/nim/nim_aoc.h" 11#include "core/hle/service/nim/nim_aoc.h"
10#include "core/hle/service/nim/nim_s.h" 12#include "core/hle/service/nim/nim_s.h"
@@ -14,6 +16,16 @@
14namespace Service { 16namespace Service {
15namespace NIM { 17namespace NIM {
16 18
19static Kernel::SharedPtr<Kernel::Event> nim_system_update_event;
20
21void CheckForSysUpdateEvent(Service::Interface* self) {
22 IPC::RequestParser rp(Kernel::GetCommandBuffer(), 0x5, 0, 0); // 0x50000
23 IPC::RequestBuilder rb = rp.MakeBuilder(1, 2);
24 rb.Push(RESULT_SUCCESS);
25 rb.PushCopyHandles(Kernel::g_handle_table.Create(nim_system_update_event).Unwrap());
26 LOG_TRACE(Service_NIM, "called");
27}
28
17void CheckSysUpdateAvailable(Service::Interface* self) { 29void CheckSysUpdateAvailable(Service::Interface* self) {
18 u32* cmd_buff = Kernel::GetCommandBuffer(); 30 u32* cmd_buff = Kernel::GetCommandBuffer();
19 31
@@ -29,9 +41,13 @@ void Init() {
29 AddService(new NIM_AOC_Interface); 41 AddService(new NIM_AOC_Interface);
30 AddService(new NIM_S_Interface); 42 AddService(new NIM_S_Interface);
31 AddService(new NIM_U_Interface); 43 AddService(new NIM_U_Interface);
44
45 nim_system_update_event = Kernel::Event::Create(ResetType::OneShot, "NIM System Update Event");
32} 46}
33 47
34void Shutdown() {} 48void Shutdown() {
49 nim_system_update_event = nullptr;
50}
35 51
36} // namespace NIM 52} // namespace NIM
37 53
diff --git a/src/core/hle/service/nim/nim.h b/src/core/hle/service/nim/nim.h
index c3106f18b..dbf605e5a 100644
--- a/src/core/hle/service/nim/nim.h
+++ b/src/core/hle/service/nim/nim.h
@@ -11,6 +11,17 @@ class Interface;
11namespace NIM { 11namespace NIM {
12 12
13/** 13/**
14 * NIM::CheckForSysUpdateEvent service function
15 * Inputs:
16 * 1 : None
17 * Outputs:
18 * 1 : Result of function, 0 on success, otherwise error code
19 * 2 : Copy handle descriptor
20 * 3 : System Update event handle
21 */
22void CheckForSysUpdateEvent(Service::Interface* self);
23
24/**
14 * NIM::CheckSysUpdateAvailable service function 25 * NIM::CheckSysUpdateAvailable service function
15 * Inputs: 26 * Inputs:
16 * 1 : None 27 * 1 : None
diff --git a/src/core/hle/service/nim/nim_u.cpp b/src/core/hle/service/nim/nim_u.cpp
index 7664bad60..569660278 100644
--- a/src/core/hle/service/nim/nim_u.cpp
+++ b/src/core/hle/service/nim/nim_u.cpp
@@ -12,7 +12,7 @@ const Interface::FunctionInfo FunctionTable[] = {
12 {0x00010000, nullptr, "StartSysUpdate"}, 12 {0x00010000, nullptr, "StartSysUpdate"},
13 {0x00020000, nullptr, "GetUpdateDownloadProgress"}, 13 {0x00020000, nullptr, "GetUpdateDownloadProgress"},
14 {0x00040000, nullptr, "FinishTitlesInstall"}, 14 {0x00040000, nullptr, "FinishTitlesInstall"},
15 {0x00050000, nullptr, "CheckForSysUpdateEvent"}, 15 {0x00050000, CheckForSysUpdateEvent, "CheckForSysUpdateEvent"},
16 {0x00090000, CheckSysUpdateAvailable, "CheckSysUpdateAvailable"}, 16 {0x00090000, CheckSysUpdateAvailable, "CheckSysUpdateAvailable"},
17 {0x000A0000, nullptr, "GetState"}, 17 {0x000A0000, nullptr, "GetState"},
18 {0x000B0000, nullptr, "GetSystemTitleHash"}, 18 {0x000B0000, nullptr, "GetSystemTitleHash"},
diff --git a/src/core/hle/service/ns/ns.cpp b/src/core/hle/service/ns/ns.cpp
new file mode 100644
index 000000000..9e19c38bf
--- /dev/null
+++ b/src/core/hle/service/ns/ns.cpp
@@ -0,0 +1,16 @@
1// Copyright 2017 Citra Emulator Project
2// Licensed under GPLv2 or any later version
3// Refer to the license.txt file included.
4
5#include "core/hle/service/ns/ns.h"
6#include "core/hle/service/ns/ns_s.h"
7
8namespace Service {
9namespace NS {
10
11void InstallInterfaces(SM::ServiceManager& service_manager) {
12 std::make_shared<NS_S>()->InstallAsService(service_manager);
13}
14
15} // namespace NS
16} // namespace Service
diff --git a/src/core/hle/service/ns/ns.h b/src/core/hle/service/ns/ns.h
new file mode 100644
index 000000000..c3d67d98c
--- /dev/null
+++ b/src/core/hle/service/ns/ns.h
@@ -0,0 +1,16 @@
1// Copyright 2017 Citra Emulator Project
2// Licensed under GPLv2 or any later version
3// Refer to the license.txt file included.
4
5#pragma once
6
7#include "core/hle/service/service.h"
8
9namespace Service {
10namespace NS {
11
12/// Registers all NS services with the specified service manager.
13void InstallInterfaces(SM::ServiceManager& service_manager);
14
15} // namespace NS
16} // namespace Service
diff --git a/src/core/hle/service/ns/ns_s.cpp b/src/core/hle/service/ns/ns_s.cpp
new file mode 100644
index 000000000..d952888dc
--- /dev/null
+++ b/src/core/hle/service/ns/ns_s.cpp
@@ -0,0 +1,34 @@
1// Copyright 2015 Citra Emulator Project
2// Licensed under GPLv2 or any later version
3// Refer to the license.txt file included.
4
5#include "core/hle/service/ns/ns_s.h"
6
7namespace Service {
8namespace NS {
9
10NS_S::NS_S() : ServiceFramework("ns:s", 2) {
11 static const FunctionInfo functions[] = {
12 {0x000100C0, nullptr, "LaunchFIRM"},
13 {0x000200C0, nullptr, "LaunchTitle"},
14 {0x00030000, nullptr, "TerminateApplication"},
15 {0x00040040, nullptr, "TerminateProcess"},
16 {0x000500C0, nullptr, "LaunchApplicationFIRM"},
17 {0x00060042, nullptr, "SetFIRMParams4A0"},
18 {0x00070042, nullptr, "CardUpdateInitialize"},
19 {0x00080000, nullptr, "CardUpdateShutdown"},
20 {0x000D0140, nullptr, "SetTWLBannerHMAC"},
21 {0x000E0000, nullptr, "ShutdownAsync"},
22 {0x00100180, nullptr, "RebootSystem"},
23 {0x00110100, nullptr, "TerminateTitle"},
24 {0x001200C0, nullptr, "SetApplicationCpuTimeLimit"},
25 {0x00150140, nullptr, "LaunchApplication"},
26 {0x00160000, nullptr, "RebootSystemClean"},
27 };
28 RegisterHandlers(functions);
29}
30
31NS_S::~NS_S() = default;
32
33} // namespace NS
34} // namespace Service
diff --git a/src/core/hle/service/ns_s.h b/src/core/hle/service/ns/ns_s.h
index 90288a521..660ae453f 100644
--- a/src/core/hle/service/ns_s.h
+++ b/src/core/hle/service/ns/ns_s.h
@@ -4,18 +4,17 @@
4 4
5#pragma once 5#pragma once
6 6
7#include "core/hle/kernel/kernel.h"
7#include "core/hle/service/service.h" 8#include "core/hle/service/service.h"
8 9
9namespace Service { 10namespace Service {
10namespace NS { 11namespace NS {
11 12
12class NS_S final : public Interface { 13/// Interface to "ns:s" service
14class NS_S final : public ServiceFramework<NS_S> {
13public: 15public:
14 NS_S(); 16 NS_S();
15 17 ~NS_S();
16 std::string GetPortName() const override {
17 return "ns:s";
18 }
19}; 18};
20 19
21} // namespace NS 20} // namespace NS
diff --git a/src/core/hle/service/ns_s.cpp b/src/core/hle/service/ns_s.cpp
deleted file mode 100644
index 215c9aacc..000000000
--- a/src/core/hle/service/ns_s.cpp
+++ /dev/null
@@ -1,33 +0,0 @@
1// Copyright 2015 Citra Emulator Project
2// Licensed under GPLv2 or any later version
3// Refer to the license.txt file included.
4
5#include "core/hle/service/ns_s.h"
6
7namespace Service {
8namespace NS {
9
10const Interface::FunctionInfo FunctionTable[] = {
11 {0x000100C0, nullptr, "LaunchFIRM"},
12 {0x000200C0, nullptr, "LaunchTitle"},
13 {0x00030000, nullptr, "TerminateApplication"},
14 {0x00040040, nullptr, "TerminateProcess"},
15 {0x000500C0, nullptr, "LaunchApplicationFIRM"},
16 {0x00060042, nullptr, "SetFIRMParams4A0"},
17 {0x00070042, nullptr, "CardUpdateInitialize"},
18 {0x00080000, nullptr, "CardUpdateShutdown"},
19 {0x000D0140, nullptr, "SetTWLBannerHMAC"},
20 {0x000E0000, nullptr, "ShutdownAsync"},
21 {0x00100180, nullptr, "RebootSystem"},
22 {0x00110100, nullptr, "TerminateTitle"},
23 {0x001200C0, nullptr, "SetApplicationCpuTimeLimit"},
24 {0x00150140, nullptr, "LaunchApplication"},
25 {0x00160000, nullptr, "RebootSystemClean"},
26};
27
28NS_S::NS_S() {
29 Register(FunctionTable);
30}
31
32} // namespace NS
33} // namespace Service
diff --git a/src/core/hle/service/nwm/nwm_uds.cpp b/src/core/hle/service/nwm/nwm_uds.cpp
index 6dbdff044..87a6b0eca 100644
--- a/src/core/hle/service/nwm/nwm_uds.cpp
+++ b/src/core/hle/service/nwm/nwm_uds.cpp
@@ -2,8 +2,11 @@
2// Licensed under GPLv2 or any later version 2// Licensed under GPLv2 or any later version
3// Refer to the license.txt file included. 3// Refer to the license.txt file included.
4 4
5#include <algorithm>
5#include <array> 6#include <array>
6#include <cstring> 7#include <cstring>
8#include <list>
9#include <mutex>
7#include <unordered_map> 10#include <unordered_map>
8#include <vector> 11#include <vector>
9#include "common/common_types.h" 12#include "common/common_types.h"
@@ -12,11 +15,14 @@
12#include "core/hle/ipc_helpers.h" 15#include "core/hle/ipc_helpers.h"
13#include "core/hle/kernel/event.h" 16#include "core/hle/kernel/event.h"
14#include "core/hle/kernel/shared_memory.h" 17#include "core/hle/kernel/shared_memory.h"
18#include "core/hle/lock.h"
15#include "core/hle/result.h" 19#include "core/hle/result.h"
16#include "core/hle/service/nwm/nwm_uds.h" 20#include "core/hle/service/nwm/nwm_uds.h"
17#include "core/hle/service/nwm/uds_beacon.h" 21#include "core/hle/service/nwm/uds_beacon.h"
22#include "core/hle/service/nwm/uds_connection.h"
18#include "core/hle/service/nwm/uds_data.h" 23#include "core/hle/service/nwm/uds_data.h"
19#include "core/memory.h" 24#include "core/memory.h"
25#include "network/network.h"
20 26
21namespace Service { 27namespace Service {
22namespace NWM { 28namespace NWM {
@@ -34,9 +40,12 @@ static ConnectionStatus connection_status{};
34/* Node information about the current network. 40/* Node information about the current network.
35 * The amount of elements in this vector is always the maximum number 41 * The amount of elements in this vector is always the maximum number
36 * of nodes specified in the network configuration. 42 * of nodes specified in the network configuration.
37 * The first node is always the host, so this always contains at least 1 entry. 43 * The first node is always the host.
38 */ 44 */
39static NodeList node_info(1); 45static NodeList node_info;
46
47// Node information about our own system.
48static NodeInfo current_node;
40 49
41// Mapping of bind node ids to their respective events. 50// Mapping of bind node ids to their respective events.
42static std::unordered_map<u32, Kernel::SharedPtr<Kernel::Event>> bind_node_events; 51static std::unordered_map<u32, Kernel::SharedPtr<Kernel::Event>> bind_node_events;
@@ -51,6 +60,298 @@ static NetworkInfo network_info;
51// Event that will generate and send the 802.11 beacon frames. 60// Event that will generate and send the 802.11 beacon frames.
52static int beacon_broadcast_event; 61static int beacon_broadcast_event;
53 62
63// Mutex to synchronize access to the connection status between the emulation thread and the
64// network thread.
65static std::mutex connection_status_mutex;
66
67// Mutex to synchronize access to the list of received beacons between the emulation thread and the
68// network thread.
69static std::mutex beacon_mutex;
70
71// Number of beacons to store before we start dropping the old ones.
72// TODO(Subv): Find a more accurate value for this limit.
73constexpr size_t MaxBeaconFrames = 15;
74
75// List of the last <MaxBeaconFrames> beacons received from the network.
76static std::list<Network::WifiPacket> received_beacons;
77
78/**
79 * Returns a list of received 802.11 beacon frames from the specified sender since the last call.
80 */
81std::list<Network::WifiPacket> GetReceivedBeacons(const MacAddress& sender) {
82 std::lock_guard<std::mutex> lock(beacon_mutex);
83 if (sender != Network::BroadcastMac) {
84 std::list<Network::WifiPacket> filtered_list;
85 const auto beacon = std::find_if(received_beacons.begin(), received_beacons.end(),
86 [&sender](const Network::WifiPacket& packet) {
87 return packet.transmitter_address == sender;
88 });
89 if (beacon != received_beacons.end()) {
90 filtered_list.push_back(*beacon);
91 // TODO(B3N30): Check if the complete deque is cleared or just the fetched entries
92 received_beacons.erase(beacon);
93 }
94 return filtered_list;
95 }
96 return std::move(received_beacons);
97}
98
99/// Sends a WifiPacket to the room we're currently connected to.
100void SendPacket(Network::WifiPacket& packet) {
101 // TODO(Subv): Implement.
102}
103
104/*
105 * Returns an available index in the nodes array for the
106 * currently-hosted UDS network.
107 */
108static u16 GetNextAvailableNodeId() {
109 for (u16 index = 0; index < connection_status.max_nodes; ++index) {
110 if ((connection_status.node_bitmask & (1 << index)) == 0)
111 return index;
112 }
113
114 // Any connection attempts to an already full network should have been refused.
115 ASSERT_MSG(false, "No available connection slots in the network");
116}
117
118// Inserts the received beacon frame in the beacon queue and removes any older beacons if the size
119// limit is exceeded.
120void HandleBeaconFrame(const Network::WifiPacket& packet) {
121 std::lock_guard<std::mutex> lock(beacon_mutex);
122 const auto unique_beacon =
123 std::find_if(received_beacons.begin(), received_beacons.end(),
124 [&packet](const Network::WifiPacket& new_packet) {
125 return new_packet.transmitter_address == packet.transmitter_address;
126 });
127 if (unique_beacon != received_beacons.end()) {
128 // We already have a beacon from the same mac in the deque, remove the old one;
129 received_beacons.erase(unique_beacon);
130 }
131
132 received_beacons.emplace_back(packet);
133
134 // Discard old beacons if the buffer is full.
135 if (received_beacons.size() > MaxBeaconFrames)
136 received_beacons.pop_front();
137}
138
139void HandleAssociationResponseFrame(const Network::WifiPacket& packet) {
140 auto assoc_result = GetAssociationResult(packet.data);
141
142 ASSERT_MSG(std::get<AssocStatus>(assoc_result) == AssocStatus::Successful,
143 "Could not join network");
144 {
145 std::lock_guard<std::mutex> lock(connection_status_mutex);
146 ASSERT(connection_status.status == static_cast<u32>(NetworkStatus::Connecting));
147 }
148
149 // Send the EAPoL-Start packet to the server.
150 using Network::WifiPacket;
151 WifiPacket eapol_start;
152 eapol_start.channel = network_channel;
153 eapol_start.data = GenerateEAPoLStartFrame(std::get<u16>(assoc_result), current_node);
154 // TODO(B3N30): Encrypt the packet.
155 eapol_start.destination_address = packet.transmitter_address;
156 eapol_start.type = WifiPacket::PacketType::Data;
157
158 SendPacket(eapol_start);
159}
160
161static void HandleEAPoLPacket(const Network::WifiPacket& packet) {
162 std::lock_guard<std::mutex> lock(connection_status_mutex);
163
164 if (GetEAPoLFrameType(packet.data) == EAPoLStartMagic) {
165 if (connection_status.status != static_cast<u32>(NetworkStatus::ConnectedAsHost)) {
166 LOG_DEBUG(Service_NWM, "Connection sequence aborted, because connection status is %u",
167 connection_status.status);
168 return;
169 }
170
171 auto node = DeserializeNodeInfoFromFrame(packet.data);
172
173 if (connection_status.max_nodes == connection_status.total_nodes) {
174 // Reject connection attempt
175 LOG_ERROR(Service_NWM, "Reached maximum nodes, but reject packet wasn't sent.");
176 // TODO(B3N30): Figure out what packet is sent here
177 return;
178 }
179
180 // Get an unused network node id
181 u16 node_id = GetNextAvailableNodeId();
182 node.network_node_id = node_id + 1;
183
184 connection_status.node_bitmask |= 1 << node_id;
185 connection_status.changed_nodes |= 1 << node_id;
186 connection_status.nodes[node_id] = node.network_node_id;
187 connection_status.total_nodes++;
188
189 u8 current_nodes = network_info.total_nodes;
190 node_info[current_nodes] = node;
191
192 network_info.total_nodes++;
193
194 // Send the EAPoL-Logoff packet.
195 using Network::WifiPacket;
196 WifiPacket eapol_logoff;
197 eapol_logoff.channel = network_channel;
198 eapol_logoff.data =
199 GenerateEAPoLLogoffFrame(packet.transmitter_address, node.network_node_id, node_info,
200 network_info.max_nodes, network_info.total_nodes);
201 // TODO(Subv): Encrypt the packet.
202 eapol_logoff.destination_address = packet.transmitter_address;
203 eapol_logoff.type = WifiPacket::PacketType::Data;
204
205 SendPacket(eapol_logoff);
206 // TODO(B3N30): Broadcast updated node list
207 // The 3ds does this presumably to support spectators.
208 std::lock_guard<std::recursive_mutex> lock(HLE::g_hle_lock);
209 connection_status_event->Signal();
210 } else {
211 if (connection_status.status != static_cast<u32>(NetworkStatus::NotConnected)) {
212 LOG_DEBUG(Service_NWM, "Connection sequence aborted, because connection status is %u",
213 connection_status.status);
214 return;
215 }
216 auto logoff = ParseEAPoLLogoffFrame(packet.data);
217
218 network_info.total_nodes = logoff.connected_nodes;
219 network_info.max_nodes = logoff.max_nodes;
220
221 connection_status.network_node_id = logoff.assigned_node_id;
222 connection_status.total_nodes = logoff.connected_nodes;
223 connection_status.max_nodes = logoff.max_nodes;
224
225 node_info.clear();
226 node_info.reserve(network_info.max_nodes);
227 for (size_t index = 0; index < logoff.connected_nodes; ++index) {
228 connection_status.node_bitmask |= 1 << index;
229 connection_status.changed_nodes |= 1 << index;
230 connection_status.nodes[index] = logoff.nodes[index].network_node_id;
231
232 node_info.emplace_back(DeserializeNodeInfo(logoff.nodes[index]));
233 }
234
235 // We're now connected, signal the application
236 connection_status.status = static_cast<u32>(NetworkStatus::ConnectedAsClient);
237 // Some games require ConnectToNetwork to block, for now it doesn't
238 // If blocking is implemented this lock needs to be changed,
239 // otherwise it might cause deadlocks
240 std::lock_guard<std::recursive_mutex> lock(HLE::g_hle_lock);
241 connection_status_event->Signal();
242 }
243}
244
245/*
246 * Start a connection sequence with an UDS server. The sequence starts by sending an 802.11
247 * authentication frame with SEQ1.
248 */
249void StartConnectionSequence(const MacAddress& server) {
250 using Network::WifiPacket;
251 WifiPacket auth_request;
252 {
253 std::lock_guard<std::mutex> lock(connection_status_mutex);
254 ASSERT(connection_status.status == static_cast<u32>(NetworkStatus::NotConnected));
255
256 // TODO(Subv): Handle timeout.
257
258 // Send an authentication frame with SEQ1
259 auth_request.channel = network_channel;
260 auth_request.data = GenerateAuthenticationFrame(AuthenticationSeq::SEQ1);
261 auth_request.destination_address = server;
262 auth_request.type = WifiPacket::PacketType::Authentication;
263 }
264
265 SendPacket(auth_request);
266}
267
268/// Sends an Association Response frame to the specified mac address
269void SendAssociationResponseFrame(const MacAddress& address) {
270 using Network::WifiPacket;
271 WifiPacket assoc_response;
272
273 {
274 std::lock_guard<std::mutex> lock(connection_status_mutex);
275 if (connection_status.status != static_cast<u32>(NetworkStatus::ConnectedAsHost)) {
276 LOG_ERROR(Service_NWM, "Connection sequence aborted, because connection status is %u",
277 connection_status.status);
278 return;
279 }
280
281 assoc_response.channel = network_channel;
282 // TODO(Subv): This will cause multiple clients to end up with the same association id, but
283 // we're not using that for anything.
284 u16 association_id = 1;
285 assoc_response.data = GenerateAssocResponseFrame(AssocStatus::Successful, association_id,
286 network_info.network_id);
287 assoc_response.destination_address = address;
288 assoc_response.type = WifiPacket::PacketType::AssociationResponse;
289 }
290
291 SendPacket(assoc_response);
292}
293
294/*
295 * Handles the authentication request frame and sends the authentication response and association
296 * response frames. Once an Authentication frame with SEQ1 is received by the server, it responds
297 * with an Authentication frame containing SEQ2, and immediately sends an Association response frame
298 * containing the details of the access point and the assigned association id for the new client.
299 */
300void HandleAuthenticationFrame(const Network::WifiPacket& packet) {
301 // Only the SEQ1 auth frame is handled here, the SEQ2 frame doesn't need any special behavior
302 if (GetAuthenticationSeqNumber(packet.data) == AuthenticationSeq::SEQ1) {
303 using Network::WifiPacket;
304 WifiPacket auth_request;
305 {
306 std::lock_guard<std::mutex> lock(connection_status_mutex);
307 if (connection_status.status != static_cast<u32>(NetworkStatus::ConnectedAsHost)) {
308 LOG_ERROR(Service_NWM,
309 "Connection sequence aborted, because connection status is %u",
310 connection_status.status);
311 return;
312 }
313
314 // Respond with an authentication response frame with SEQ2
315 auth_request.channel = network_channel;
316 auth_request.data = GenerateAuthenticationFrame(AuthenticationSeq::SEQ2);
317 auth_request.destination_address = packet.transmitter_address;
318 auth_request.type = WifiPacket::PacketType::Authentication;
319 }
320 SendPacket(auth_request);
321
322 SendAssociationResponseFrame(packet.transmitter_address);
323 }
324}
325
326static void HandleDataFrame(const Network::WifiPacket& packet) {
327 switch (GetFrameEtherType(packet.data)) {
328 case EtherType::EAPoL:
329 HandleEAPoLPacket(packet);
330 break;
331 case EtherType::SecureData:
332 // TODO(B3N30): Handle SecureData packets
333 break;
334 }
335}
336
337/// Callback to parse and handle a received wifi packet.
338void OnWifiPacketReceived(const Network::WifiPacket& packet) {
339 switch (packet.type) {
340 case Network::WifiPacket::PacketType::Beacon:
341 HandleBeaconFrame(packet);
342 break;
343 case Network::WifiPacket::PacketType::Authentication:
344 HandleAuthenticationFrame(packet);
345 break;
346 case Network::WifiPacket::PacketType::AssociationResponse:
347 HandleAssociationResponseFrame(packet);
348 break;
349 case Network::WifiPacket::PacketType::Data:
350 HandleDataFrame(packet);
351 break;
352 }
353}
354
54/** 355/**
55 * NWM_UDS::Shutdown service function 356 * NWM_UDS::Shutdown service function
56 * Inputs: 357 * Inputs:
@@ -111,11 +412,10 @@ static void RecvBeaconBroadcastData(Interface* self) {
111 u32 total_size = sizeof(BeaconDataReplyHeader); 412 u32 total_size = sizeof(BeaconDataReplyHeader);
112 413
113 // Retrieve all beacon frames that were received from the desired mac address. 414 // Retrieve all beacon frames that were received from the desired mac address.
114 std::deque<WifiPacket> beacons = 415 auto beacons = GetReceivedBeacons(mac_address);
115 GetReceivedPackets(WifiPacket::PacketType::Beacon, mac_address);
116 416
117 BeaconDataReplyHeader data_reply_header{}; 417 BeaconDataReplyHeader data_reply_header{};
118 data_reply_header.total_entries = beacons.size(); 418 data_reply_header.total_entries = static_cast<u32>(beacons.size());
119 data_reply_header.max_output_size = out_buffer_size; 419 data_reply_header.max_output_size = out_buffer_size;
120 420
121 Memory::WriteBlock(current_buffer_pos, &data_reply_header, sizeof(BeaconDataReplyHeader)); 421 Memory::WriteBlock(current_buffer_pos, &data_reply_header, sizeof(BeaconDataReplyHeader));
@@ -125,8 +425,8 @@ static void RecvBeaconBroadcastData(Interface* self) {
125 for (const auto& beacon : beacons) { 425 for (const auto& beacon : beacons) {
126 BeaconEntryHeader entry{}; 426 BeaconEntryHeader entry{};
127 // TODO(Subv): Figure out what this size is used for. 427 // TODO(Subv): Figure out what this size is used for.
128 entry.unk_size = sizeof(BeaconEntryHeader) + beacon.data.size(); 428 entry.unk_size = static_cast<u32>(sizeof(BeaconEntryHeader) + beacon.data.size());
129 entry.total_size = sizeof(BeaconEntryHeader) + beacon.data.size(); 429 entry.total_size = static_cast<u32>(sizeof(BeaconEntryHeader) + beacon.data.size());
130 entry.wifi_channel = beacon.channel; 430 entry.wifi_channel = beacon.channel;
131 entry.header_size = sizeof(BeaconEntryHeader); 431 entry.header_size = sizeof(BeaconEntryHeader);
132 entry.mac_address = beacon.transmitter_address; 432 entry.mac_address = beacon.transmitter_address;
@@ -137,9 +437,9 @@ static void RecvBeaconBroadcastData(Interface* self) {
137 current_buffer_pos += sizeof(BeaconEntryHeader); 437 current_buffer_pos += sizeof(BeaconEntryHeader);
138 438
139 Memory::WriteBlock(current_buffer_pos, beacon.data.data(), beacon.data.size()); 439 Memory::WriteBlock(current_buffer_pos, beacon.data.data(), beacon.data.size());
140 current_buffer_pos += beacon.data.size(); 440 current_buffer_pos += static_cast<VAddr>(beacon.data.size());
141 441
142 total_size += sizeof(BeaconEntryHeader) + beacon.data.size(); 442 total_size += static_cast<u32>(sizeof(BeaconEntryHeader) + beacon.data.size());
143 } 443 }
144 444
145 // Update the total size in the structure and write it to the buffer again. 445 // Update the total size in the structure and write it to the buffer again.
@@ -174,7 +474,7 @@ static void InitializeWithVersion(Interface* self) {
174 u32 sharedmem_size = rp.Pop<u32>(); 474 u32 sharedmem_size = rp.Pop<u32>();
175 475
176 // Update the node information with the data the game gave us. 476 // Update the node information with the data the game gave us.
177 rp.PopRaw(node_info[0]); 477 rp.PopRaw(current_node);
178 478
179 u16 version = rp.Pop<u16>(); 479 u16 version = rp.Pop<u16>();
180 480
@@ -184,15 +484,22 @@ static void InitializeWithVersion(Interface* self) {
184 484
185 ASSERT_MSG(recv_buffer_memory->size == sharedmem_size, "Invalid shared memory size."); 485 ASSERT_MSG(recv_buffer_memory->size == sharedmem_size, "Invalid shared memory size.");
186 486
187 // Reset the connection status, it contains all zeros after initialization, 487 {
188 // except for the actual status value. 488 std::lock_guard<std::mutex> lock(connection_status_mutex);
189 connection_status = {}; 489
190 connection_status.status = static_cast<u32>(NetworkStatus::NotConnected); 490 // Reset the connection status, it contains all zeros after initialization,
491 // except for the actual status value.
492 connection_status = {};
493 connection_status.status = static_cast<u32>(NetworkStatus::NotConnected);
494 }
191 495
192 IPC::RequestBuilder rb = rp.MakeBuilder(1, 2); 496 IPC::RequestBuilder rb = rp.MakeBuilder(1, 2);
193 rb.Push(RESULT_SUCCESS); 497 rb.Push(RESULT_SUCCESS);
194 rb.PushCopyHandles(Kernel::g_handle_table.Create(connection_status_event).Unwrap()); 498 rb.PushCopyHandles(Kernel::g_handle_table.Create(connection_status_event).Unwrap());
195 499
500 // TODO(Subv): Connect the OnWifiPacketReceived function to the wifi packet received callback of
501 // the room we're currently in.
502
196 LOG_DEBUG(Service_NWM, "called sharedmem_size=0x%08X, version=0x%08X, sharedmem_handle=0x%08X", 503 LOG_DEBUG(Service_NWM, "called sharedmem_size=0x%08X, version=0x%08X, sharedmem_handle=0x%08X",
197 sharedmem_size, version, sharedmem_handle); 504 sharedmem_size, version, sharedmem_handle);
198} 505}
@@ -214,12 +521,16 @@ static void GetConnectionStatus(Interface* self) {
214 IPC::RequestBuilder rb = rp.MakeBuilder(13, 0); 521 IPC::RequestBuilder rb = rp.MakeBuilder(13, 0);
215 522
216 rb.Push(RESULT_SUCCESS); 523 rb.Push(RESULT_SUCCESS);
217 rb.PushRaw(connection_status); 524 {
218 525 std::lock_guard<std::mutex> lock(connection_status_mutex);
219 // Reset the bitmask of changed nodes after each call to this 526 rb.PushRaw(connection_status);
220 // function to prevent falsely informing games of outstanding 527
221 // changes in subsequent calls. 528 // Reset the bitmask of changed nodes after each call to this
222 connection_status.changed_nodes = 0; 529 // function to prevent falsely informing games of outstanding
530 // changes in subsequent calls.
531 // TODO(Subv): Find exactly where the NWM module resets this value.
532 connection_status.changed_nodes = 0;
533 }
223 534
224 LOG_DEBUG(Service_NWM, "called"); 535 LOG_DEBUG(Service_NWM, "called");
225} 536}
@@ -300,31 +611,36 @@ static void BeginHostingNetwork(Interface* self) {
300 // The real UDS module throws a fatal error if this assert fails. 611 // The real UDS module throws a fatal error if this assert fails.
301 ASSERT_MSG(network_info.max_nodes > 1, "Trying to host a network of only one member."); 612 ASSERT_MSG(network_info.max_nodes > 1, "Trying to host a network of only one member.");
302 613
303 connection_status.status = static_cast<u32>(NetworkStatus::ConnectedAsHost); 614 {
304 615 std::lock_guard<std::mutex> lock(connection_status_mutex);
305 // Ensure the application data size is less than the maximum value. 616 connection_status.status = static_cast<u32>(NetworkStatus::ConnectedAsHost);
306 ASSERT_MSG(network_info.application_data_size <= ApplicationDataSize, "Data size is too big."); 617
307 618 // Ensure the application data size is less than the maximum value.
308 // Set up basic information for this network. 619 ASSERT_MSG(network_info.application_data_size <= ApplicationDataSize,
309 network_info.oui_value = NintendoOUI; 620 "Data size is too big.");
310 network_info.oui_type = static_cast<u8>(NintendoTagId::NetworkInfo); 621
311 622 // Set up basic information for this network.
312 connection_status.max_nodes = network_info.max_nodes; 623 network_info.oui_value = NintendoOUI;
313 624 network_info.oui_type = static_cast<u8>(NintendoTagId::NetworkInfo);
314 // Resize the nodes list to hold max_nodes. 625
315 node_info.resize(network_info.max_nodes); 626 connection_status.max_nodes = network_info.max_nodes;
316 627
317 // There's currently only one node in the network (the host). 628 // Resize the nodes list to hold max_nodes.
318 connection_status.total_nodes = 1; 629 node_info.resize(network_info.max_nodes);
319 network_info.total_nodes = 1; 630
320 // The host is always the first node 631 // There's currently only one node in the network (the host).
321 connection_status.network_node_id = 1; 632 connection_status.total_nodes = 1;
322 node_info[0].network_node_id = 1; 633 network_info.total_nodes = 1;
323 connection_status.nodes[0] = connection_status.network_node_id; 634 // The host is always the first node
324 // Set the bit 0 in the nodes bitmask to indicate that node 1 is already taken. 635 connection_status.network_node_id = 1;
325 connection_status.node_bitmask |= 1; 636 current_node.network_node_id = 1;
326 // Notify the application that the first node was set. 637 connection_status.nodes[0] = connection_status.network_node_id;
327 connection_status.changed_nodes |= 1; 638 // Set the bit 0 in the nodes bitmask to indicate that node 1 is already taken.
639 connection_status.node_bitmask |= 1;
640 // Notify the application that the first node was set.
641 connection_status.changed_nodes |= 1;
642 node_info[0] = current_node;
643 }
328 644
329 // If the game has a preferred channel, use that instead. 645 // If the game has a preferred channel, use that instead.
330 if (network_info.channel != 0) 646 if (network_info.channel != 0)
@@ -361,9 +677,13 @@ static void DestroyNetwork(Interface* self) {
361 // Unschedule the beacon broadcast event. 677 // Unschedule the beacon broadcast event.
362 CoreTiming::UnscheduleEvent(beacon_broadcast_event, 0); 678 CoreTiming::UnscheduleEvent(beacon_broadcast_event, 0);
363 679
364 // TODO(Subv): Check if connection_status is indeed reset after this call. 680 {
365 connection_status = {}; 681 std::lock_guard<std::mutex> lock(connection_status_mutex);
366 connection_status.status = static_cast<u8>(NetworkStatus::NotConnected); 682
683 // TODO(Subv): Check if connection_status is indeed reset after this call.
684 connection_status = {};
685 connection_status.status = static_cast<u8>(NetworkStatus::NotConnected);
686 }
367 connection_status_event->Signal(); 687 connection_status_event->Signal();
368 688
369 IPC::RequestBuilder rb = rp.MakeBuilder(1, 0); 689 IPC::RequestBuilder rb = rp.MakeBuilder(1, 0);
@@ -406,17 +726,24 @@ static void SendTo(Interface* self) {
406 726
407 IPC::RequestBuilder rb = rp.MakeBuilder(1, 0); 727 IPC::RequestBuilder rb = rp.MakeBuilder(1, 0);
408 728
409 if (connection_status.status != static_cast<u32>(NetworkStatus::ConnectedAsClient) && 729 u16 network_node_id;
410 connection_status.status != static_cast<u32>(NetworkStatus::ConnectedAsHost)) {
411 rb.Push(ResultCode(ErrorDescription::NotAuthorized, ErrorModule::UDS,
412 ErrorSummary::InvalidState, ErrorLevel::Status));
413 return;
414 }
415 730
416 if (dest_node_id == connection_status.network_node_id) { 731 {
417 rb.Push(ResultCode(ErrorDescription::NotFound, ErrorModule::UDS, 732 std::lock_guard<std::mutex> lock(connection_status_mutex);
418 ErrorSummary::WrongArgument, ErrorLevel::Status)); 733 if (connection_status.status != static_cast<u32>(NetworkStatus::ConnectedAsClient) &&
419 return; 734 connection_status.status != static_cast<u32>(NetworkStatus::ConnectedAsHost)) {
735 rb.Push(ResultCode(ErrorDescription::NotAuthorized, ErrorModule::UDS,
736 ErrorSummary::InvalidState, ErrorLevel::Status));
737 return;
738 }
739
740 if (dest_node_id == connection_status.network_node_id) {
741 rb.Push(ResultCode(ErrorDescription::NotFound, ErrorModule::UDS,
742 ErrorSummary::WrongArgument, ErrorLevel::Status));
743 return;
744 }
745
746 network_node_id = connection_status.network_node_id;
420 } 747 }
421 748
422 // TODO(Subv): Do something with the flags. 749 // TODO(Subv): Do something with the flags.
@@ -433,8 +760,8 @@ static void SendTo(Interface* self) {
433 760
434 // TODO(Subv): Increment the sequence number after each sent packet. 761 // TODO(Subv): Increment the sequence number after each sent packet.
435 u16 sequence_number = 0; 762 u16 sequence_number = 0;
436 std::vector<u8> data_payload = GenerateDataPayload( 763 std::vector<u8> data_payload =
437 data, data_channel, dest_node_id, connection_status.network_node_id, sequence_number); 764 GenerateDataPayload(data, data_channel, dest_node_id, network_node_id, sequence_number);
438 765
439 // TODO(Subv): Retrieve the MAC address of the dest_node_id and our own to encrypt 766 // TODO(Subv): Retrieve the MAC address of the dest_node_id and our own to encrypt
440 // and encapsulate the payload. 767 // and encapsulate the payload.
@@ -461,6 +788,7 @@ static void GetChannel(Interface* self) {
461 IPC::RequestParser rp(Kernel::GetCommandBuffer(), 0x1A, 0, 0); 788 IPC::RequestParser rp(Kernel::GetCommandBuffer(), 0x1A, 0, 0);
462 IPC::RequestBuilder rb = rp.MakeBuilder(2, 0); 789 IPC::RequestBuilder rb = rp.MakeBuilder(2, 0);
463 790
791 std::lock_guard<std::mutex> lock(connection_status_mutex);
464 bool is_connected = connection_status.status != static_cast<u32>(NetworkStatus::NotConnected); 792 bool is_connected = connection_status.status != static_cast<u32>(NetworkStatus::NotConnected);
465 793
466 u8 channel = is_connected ? network_channel : 0; 794 u8 channel = is_connected ? network_channel : 0;
@@ -610,37 +938,29 @@ static void BeaconBroadcastCallback(u64 userdata, int cycles_late) {
610 if (connection_status.status != static_cast<u32>(NetworkStatus::ConnectedAsHost)) 938 if (connection_status.status != static_cast<u32>(NetworkStatus::ConnectedAsHost))
611 return; 939 return;
612 940
613 // TODO(Subv): Actually send the beacon.
614 std::vector<u8> frame = GenerateBeaconFrame(network_info, node_info); 941 std::vector<u8> frame = GenerateBeaconFrame(network_info, node_info);
615 942
943 using Network::WifiPacket;
944 WifiPacket packet;
945 packet.type = WifiPacket::PacketType::Beacon;
946 packet.data = std::move(frame);
947 packet.destination_address = Network::BroadcastMac;
948 packet.channel = network_channel;
949
950 SendPacket(packet);
951
616 // Start broadcasting the network, send a beacon frame every 102.4ms. 952 // Start broadcasting the network, send a beacon frame every 102.4ms.
617 CoreTiming::ScheduleEvent(msToCycles(DefaultBeaconInterval * MillisecondsPerTU) - cycles_late, 953 CoreTiming::ScheduleEvent(msToCycles(DefaultBeaconInterval * MillisecondsPerTU) - cycles_late,
618 beacon_broadcast_event, 0); 954 beacon_broadcast_event, 0);
619} 955}
620 956
621/* 957/*
622 * Returns an available index in the nodes array for the
623 * currently-hosted UDS network.
624 */
625static u32 GetNextAvailableNodeId() {
626 ASSERT_MSG(connection_status.status == static_cast<u32>(NetworkStatus::ConnectedAsHost),
627 "Can not accept clients if we're not hosting a network");
628
629 for (unsigned index = 0; index < connection_status.max_nodes; ++index) {
630 if ((connection_status.node_bitmask & (1 << index)) == 0)
631 return index;
632 }
633
634 // Any connection attempts to an already full network should have been refused.
635 ASSERT_MSG(false, "No available connection slots in the network");
636}
637
638/*
639 * Called when a client connects to an UDS network we're hosting, 958 * Called when a client connects to an UDS network we're hosting,
640 * updates the connection status and signals the update event. 959 * updates the connection status and signals the update event.
641 * @param network_node_id Network Node Id of the connecting client. 960 * @param network_node_id Network Node Id of the connecting client.
642 */ 961 */
643void OnClientConnected(u16 network_node_id) { 962void OnClientConnected(u16 network_node_id) {
963 std::lock_guard<std::mutex> lock(connection_status_mutex);
644 ASSERT_MSG(connection_status.status == static_cast<u32>(NetworkStatus::ConnectedAsHost), 964 ASSERT_MSG(connection_status.status == static_cast<u32>(NetworkStatus::ConnectedAsHost),
645 "Can not accept clients if we're not hosting a network"); 965 "Can not accept clients if we're not hosting a network");
646 ASSERT_MSG(connection_status.total_nodes < connection_status.max_nodes, 966 ASSERT_MSG(connection_status.total_nodes < connection_status.max_nodes,
@@ -655,7 +975,7 @@ void OnClientConnected(u16 network_node_id) {
655} 975}
656 976
657const Interface::FunctionInfo FunctionTable[] = { 977const Interface::FunctionInfo FunctionTable[] = {
658 {0x00010442, nullptr, "Initialize (deprecated)"}, 978 {0x000102C2, nullptr, "Initialize (deprecated)"},
659 {0x00020000, nullptr, "Scrap"}, 979 {0x00020000, nullptr, "Scrap"},
660 {0x00030000, Shutdown, "Shutdown"}, 980 {0x00030000, Shutdown, "Shutdown"},
661 {0x00040402, nullptr, "CreateNetwork (deprecated)"}, 981 {0x00040402, nullptr, "CreateNetwork (deprecated)"},
@@ -702,8 +1022,11 @@ NWM_UDS::~NWM_UDS() {
702 connection_status_event = nullptr; 1022 connection_status_event = nullptr;
703 recv_buffer_memory = nullptr; 1023 recv_buffer_memory = nullptr;
704 1024
705 connection_status = {}; 1025 {
706 connection_status.status = static_cast<u32>(NetworkStatus::NotConnected); 1026 std::lock_guard<std::mutex> lock(connection_status_mutex);
1027 connection_status = {};
1028 connection_status.status = static_cast<u32>(NetworkStatus::NotConnected);
1029 }
707 1030
708 CoreTiming::UnscheduleEvent(beacon_broadcast_event, 0); 1031 CoreTiming::UnscheduleEvent(beacon_broadcast_event, 0);
709} 1032}
diff --git a/src/core/hle/service/nwm/nwm_uds.h b/src/core/hle/service/nwm/nwm_uds.h
index 141f49f9c..f1caaf974 100644
--- a/src/core/hle/service/nwm/nwm_uds.h
+++ b/src/core/hle/service/nwm/nwm_uds.h
@@ -42,6 +42,7 @@ using NodeList = std::vector<NodeInfo>;
42enum class NetworkStatus { 42enum class NetworkStatus {
43 NotConnected = 3, 43 NotConnected = 3,
44 ConnectedAsHost = 6, 44 ConnectedAsHost = 6,
45 Connecting = 7,
45 ConnectedAsClient = 9, 46 ConnectedAsClient = 9,
46 ConnectedAsSpectator = 10, 47 ConnectedAsSpectator = 10,
47}; 48};
@@ -85,6 +86,17 @@ static_assert(offsetof(NetworkInfo, oui_value) == 0xC, "oui_value is at the wron
85static_assert(offsetof(NetworkInfo, wlan_comm_id) == 0x10, "wlancommid is at the wrong offset."); 86static_assert(offsetof(NetworkInfo, wlan_comm_id) == 0x10, "wlancommid is at the wrong offset.");
86static_assert(sizeof(NetworkInfo) == 0x108, "NetworkInfo has incorrect size."); 87static_assert(sizeof(NetworkInfo) == 0x108, "NetworkInfo has incorrect size.");
87 88
89/// Additional block tag ids in the Beacon and Association Response frames
90enum class TagId : u8 {
91 SSID = 0,
92 SupportedRates = 1,
93 DSParameterSet = 2,
94 TrafficIndicationMap = 5,
95 CountryInformation = 7,
96 ERPInformation = 42,
97 VendorSpecific = 221
98};
99
88class NWM_UDS final : public Interface { 100class NWM_UDS final : public Interface {
89public: 101public:
90 NWM_UDS(); 102 NWM_UDS();
diff --git a/src/core/hle/service/nwm/uds_beacon.cpp b/src/core/hle/service/nwm/uds_beacon.cpp
index 6332b404c..73a80d940 100644
--- a/src/core/hle/service/nwm/uds_beacon.cpp
+++ b/src/core/hle/service/nwm/uds_beacon.cpp
@@ -243,7 +243,7 @@ std::vector<u8> GenerateNintendoFirstEncryptedDataTag(const NetworkInfo& network
243 243
244 EncryptedDataTag tag{}; 244 EncryptedDataTag tag{};
245 tag.header.tag_id = static_cast<u8>(TagId::VendorSpecific); 245 tag.header.tag_id = static_cast<u8>(TagId::VendorSpecific);
246 tag.header.length = sizeof(tag) - sizeof(TagHeader) + payload_size; 246 tag.header.length = static_cast<u8>(sizeof(tag) - sizeof(TagHeader) + payload_size);
247 tag.oui_type = static_cast<u8>(NintendoTagId::EncryptedData0); 247 tag.oui_type = static_cast<u8>(NintendoTagId::EncryptedData0);
248 tag.oui = NintendoOUI; 248 tag.oui = NintendoOUI;
249 249
@@ -279,7 +279,7 @@ std::vector<u8> GenerateNintendoSecondEncryptedDataTag(const NetworkInfo& networ
279 279
280 EncryptedDataTag tag{}; 280 EncryptedDataTag tag{};
281 tag.header.tag_id = static_cast<u8>(TagId::VendorSpecific); 281 tag.header.tag_id = static_cast<u8>(TagId::VendorSpecific);
282 tag.header.length = tag_length; 282 tag.header.length = static_cast<u8>(tag_length);
283 tag.oui_type = static_cast<u8>(NintendoTagId::EncryptedData1); 283 tag.oui_type = static_cast<u8>(NintendoTagId::EncryptedData1);
284 tag.oui = NintendoOUI; 284 tag.oui = NintendoOUI;
285 285
@@ -325,8 +325,5 @@ std::vector<u8> GenerateBeaconFrame(const NetworkInfo& network_info, const NodeL
325 return buffer; 325 return buffer;
326} 326}
327 327
328std::deque<WifiPacket> GetReceivedPackets(WifiPacket::PacketType type, const MacAddress& sender) {
329 return {};
330}
331} // namespace NWM 328} // namespace NWM
332} // namespace Service 329} // namespace Service
diff --git a/src/core/hle/service/nwm/uds_beacon.h b/src/core/hle/service/nwm/uds_beacon.h
index caacf4c6f..50cc76da2 100644
--- a/src/core/hle/service/nwm/uds_beacon.h
+++ b/src/core/hle/service/nwm/uds_beacon.h
@@ -17,17 +17,6 @@ namespace NWM {
17using MacAddress = std::array<u8, 6>; 17using MacAddress = std::array<u8, 6>;
18constexpr std::array<u8, 3> NintendoOUI = {0x00, 0x1F, 0x32}; 18constexpr std::array<u8, 3> NintendoOUI = {0x00, 0x1F, 0x32};
19 19
20/// Additional block tag ids in the Beacon frames
21enum class TagId : u8 {
22 SSID = 0,
23 SupportedRates = 1,
24 DSParameterSet = 2,
25 TrafficIndicationMap = 5,
26 CountryInformation = 7,
27 ERPInformation = 42,
28 VendorSpecific = 221
29};
30
31/** 20/**
32 * Internal vendor-specific tag ids as stored inside 21 * Internal vendor-specific tag ids as stored inside
33 * VendorSpecific blocks in the Beacon frames. 22 * VendorSpecific blocks in the Beacon frames.
@@ -135,20 +124,6 @@ struct BeaconData {
135 124
136static_assert(sizeof(BeaconData) == 0x12, "BeaconData has incorrect size."); 125static_assert(sizeof(BeaconData) == 0x12, "BeaconData has incorrect size.");
137 126
138/// Information about a received WiFi packet.
139/// Acts as our own 802.11 header.
140struct WifiPacket {
141 enum class PacketType { Beacon, Data };
142
143 PacketType type; ///< The type of 802.11 frame, Beacon / Data.
144
145 /// Raw 802.11 frame data, starting at the management frame header for management frames.
146 std::vector<u8> data;
147 MacAddress transmitter_address; ///< Mac address of the transmitter.
148 MacAddress destination_address; ///< Mac address of the receiver.
149 u8 channel; ///< WiFi channel where this frame was transmitted.
150};
151
152/** 127/**
153 * Decrypts the beacon data buffer for the network described by `network_info`. 128 * Decrypts the beacon data buffer for the network described by `network_info`.
154 */ 129 */
@@ -161,10 +136,5 @@ void DecryptBeaconData(const NetworkInfo& network_info, std::vector<u8>& buffer)
161 */ 136 */
162std::vector<u8> GenerateBeaconFrame(const NetworkInfo& network_info, const NodeList& nodes); 137std::vector<u8> GenerateBeaconFrame(const NetworkInfo& network_info, const NodeList& nodes);
163 138
164/**
165 * Returns a list of received 802.11 frames from the specified sender
166 * matching the type since the last call.
167 */
168std::deque<WifiPacket> GetReceivedPackets(WifiPacket::PacketType type, const MacAddress& sender);
169} // namespace NWM 139} // namespace NWM
170} // namespace Service 140} // namespace Service
diff --git a/src/core/hle/service/nwm/uds_connection.cpp b/src/core/hle/service/nwm/uds_connection.cpp
new file mode 100644
index 000000000..c74f51253
--- /dev/null
+++ b/src/core/hle/service/nwm/uds_connection.cpp
@@ -0,0 +1,88 @@
1// Copyright 2017 Citra Emulator Project
2// Licensed under GPLv2 or any later version
3// Refer to the license.txt file included.
4
5#include "core/hle/service/nwm/nwm_uds.h"
6#include "core/hle/service/nwm/uds_connection.h"
7#include "fmt/format.h"
8
9namespace Service {
10namespace NWM {
11
12// Note: These values were taken from a packet capture of an o3DS XL
13// broadcasting a Super Smash Bros. 4 lobby.
14constexpr u16 DefaultExtraCapabilities = 0x0431;
15
16std::vector<u8> GenerateAuthenticationFrame(AuthenticationSeq seq) {
17 AuthenticationFrame frame{};
18 frame.auth_seq = static_cast<u16>(seq);
19
20 std::vector<u8> data(sizeof(frame));
21 std::memcpy(data.data(), &frame, sizeof(frame));
22
23 return data;
24}
25
26AuthenticationSeq GetAuthenticationSeqNumber(const std::vector<u8>& body) {
27 AuthenticationFrame frame;
28 std::memcpy(&frame, body.data(), sizeof(frame));
29
30 return static_cast<AuthenticationSeq>(frame.auth_seq);
31}
32
33/**
34 * Generates an SSID tag of an 802.11 Beacon frame with an 8-byte character representation of the
35 * specified network id as the SSID value.
36 * @param network_id The network id to use.
37 * @returns A buffer with the SSID tag.
38 */
39static std::vector<u8> GenerateSSIDTag(u32 network_id) {
40 constexpr u8 SSIDSize = 8;
41
42 struct {
43 u8 id = static_cast<u8>(TagId::SSID);
44 u8 size = SSIDSize;
45 } tag_header;
46
47 std::vector<u8> buffer(sizeof(tag_header) + SSIDSize);
48
49 std::memcpy(buffer.data(), &tag_header, sizeof(tag_header));
50
51 std::string network_name = fmt::format("{0:08X}", network_id);
52
53 std::memcpy(buffer.data() + sizeof(tag_header), network_name.c_str(), SSIDSize);
54
55 return buffer;
56}
57
58std::vector<u8> GenerateAssocResponseFrame(AssocStatus status, u16 association_id, u32 network_id) {
59 AssociationResponseFrame frame{};
60 frame.capabilities = DefaultExtraCapabilities;
61 frame.status_code = static_cast<u16>(status);
62 // The association id is ORed with this magic value (0xC000)
63 constexpr u16 AssociationIdMagic = 0xC000;
64 frame.assoc_id = association_id | AssociationIdMagic;
65
66 std::vector<u8> data(sizeof(frame));
67 std::memcpy(data.data(), &frame, sizeof(frame));
68
69 auto ssid_tag = GenerateSSIDTag(network_id);
70 data.insert(data.end(), ssid_tag.begin(), ssid_tag.end());
71
72 // TODO(Subv): Add the SupportedRates tag.
73 // TODO(Subv): Add the DSParameterSet tag.
74 // TODO(Subv): Add the ERPInformation tag.
75 return data;
76}
77
78std::tuple<AssocStatus, u16> GetAssociationResult(const std::vector<u8>& body) {
79 AssociationResponseFrame frame;
80 memcpy(&frame, body.data(), sizeof(frame));
81
82 constexpr u16 AssociationIdMask = 0x3FFF;
83 return std::make_tuple(static_cast<AssocStatus>(frame.status_code),
84 frame.assoc_id & AssociationIdMask);
85}
86
87} // namespace NWM
88} // namespace Service
diff --git a/src/core/hle/service/nwm/uds_connection.h b/src/core/hle/service/nwm/uds_connection.h
new file mode 100644
index 000000000..a664f8471
--- /dev/null
+++ b/src/core/hle/service/nwm/uds_connection.h
@@ -0,0 +1,56 @@
1// Copyright 2017 Citra Emulator Project
2// Licensed under GPLv2 or any later version
3// Refer to the license.txt file included.
4
5#pragma once
6
7#include <tuple>
8#include <vector>
9#include "common/common_types.h"
10#include "common/swap.h"
11#include "core/hle/service/service.h"
12
13namespace Service {
14namespace NWM {
15
16/// Sequence number of the 802.11 authentication frames.
17enum class AuthenticationSeq : u16 { SEQ1 = 1, SEQ2 = 2 };
18
19enum class AuthAlgorithm : u16 { OpenSystem = 0 };
20
21enum class AuthStatus : u16 { Successful = 0 };
22
23enum class AssocStatus : u16 { Successful = 0 };
24
25struct AuthenticationFrame {
26 u16_le auth_algorithm = static_cast<u16>(AuthAlgorithm::OpenSystem);
27 u16_le auth_seq;
28 u16_le status_code = static_cast<u16>(AuthStatus::Successful);
29};
30
31static_assert(sizeof(AuthenticationFrame) == 6, "AuthenticationFrame has wrong size");
32
33struct AssociationResponseFrame {
34 u16_le capabilities;
35 u16_le status_code;
36 u16_le assoc_id;
37};
38
39static_assert(sizeof(AssociationResponseFrame) == 6, "AssociationResponseFrame has wrong size");
40
41/// Generates an 802.11 authentication frame, starting at the frame body.
42std::vector<u8> GenerateAuthenticationFrame(AuthenticationSeq seq);
43
44/// Returns the sequence number from the body of an Authentication frame.
45AuthenticationSeq GetAuthenticationSeqNumber(const std::vector<u8>& body);
46
47/// Generates an 802.11 association response frame with the specified status, association id and
48/// network id, starting at the frame body.
49std::vector<u8> GenerateAssocResponseFrame(AssocStatus status, u16 association_id, u32 network_id);
50
51/// Returns a tuple of (association status, association id) from the body of an AssociationResponse
52/// frame.
53std::tuple<AssocStatus, u16> GetAssociationResult(const std::vector<u8>& body);
54
55} // namespace NWM
56} // namespace Service
diff --git a/src/core/hle/service/nwm/uds_data.cpp b/src/core/hle/service/nwm/uds_data.cpp
index 8c6742dba..4b389710f 100644
--- a/src/core/hle/service/nwm/uds_data.cpp
+++ b/src/core/hle/service/nwm/uds_data.cpp
@@ -2,6 +2,7 @@
2// Licensed under GPLv2 or any later version 2// Licensed under GPLv2 or any later version
3// Refer to the license.txt file included. 3// Refer to the license.txt file included.
4 4
5#include <algorithm>
5#include <cstring> 6#include <cstring>
6#include <cryptopp/aes.h> 7#include <cryptopp/aes.h>
7#include <cryptopp/ccm.h> 8#include <cryptopp/ccm.h>
@@ -197,7 +198,7 @@ static std::vector<u8> DecryptDataFrame(const std::vector<u8>& encrypted_payload
197 df.ChannelMessageEnd(CryptoPP::DEFAULT_CHANNEL); 198 df.ChannelMessageEnd(CryptoPP::DEFAULT_CHANNEL);
198 df.SetRetrievalChannel(CryptoPP::DEFAULT_CHANNEL); 199 df.SetRetrievalChannel(CryptoPP::DEFAULT_CHANNEL);
199 200
200 int size = df.MaxRetrievable(); 201 size_t size = df.MaxRetrievable();
201 202
202 std::vector<u8> pdata(size); 203 std::vector<u8> pdata(size);
203 df.Get(pdata.data(), size); 204 df.Get(pdata.data(), size);
@@ -251,7 +252,7 @@ static std::vector<u8> EncryptDataFrame(const std::vector<u8>& payload,
251 252
252 df.SetRetrievalChannel(CryptoPP::DEFAULT_CHANNEL); 253 df.SetRetrievalChannel(CryptoPP::DEFAULT_CHANNEL);
253 254
254 int size = df.MaxRetrievable(); 255 size_t size = df.MaxRetrievable();
255 256
256 std::vector<u8> cipher(size); 257 std::vector<u8> cipher(size);
257 df.Get(cipher.data(), size); 258 df.Get(cipher.data(), size);
@@ -266,13 +267,107 @@ static std::vector<u8> EncryptDataFrame(const std::vector<u8>& payload,
266std::vector<u8> GenerateDataPayload(const std::vector<u8>& data, u8 channel, u16 dest_node, 267std::vector<u8> GenerateDataPayload(const std::vector<u8>& data, u8 channel, u16 dest_node,
267 u16 src_node, u16 sequence_number) { 268 u16 src_node, u16 sequence_number) {
268 std::vector<u8> buffer = GenerateLLCHeader(EtherType::SecureData); 269 std::vector<u8> buffer = GenerateLLCHeader(EtherType::SecureData);
269 std::vector<u8> securedata_header = 270 std::vector<u8> securedata_header = GenerateSecureDataHeader(
270 GenerateSecureDataHeader(data.size(), channel, dest_node, src_node, sequence_number); 271 static_cast<u16>(data.size()), channel, dest_node, src_node, sequence_number);
271 272
272 buffer.insert(buffer.end(), securedata_header.begin(), securedata_header.end()); 273 buffer.insert(buffer.end(), securedata_header.begin(), securedata_header.end());
273 buffer.insert(buffer.end(), data.begin(), data.end()); 274 buffer.insert(buffer.end(), data.begin(), data.end());
274 return buffer; 275 return buffer;
275} 276}
276 277
278std::vector<u8> GenerateEAPoLStartFrame(u16 association_id, const NodeInfo& node_info) {
279 EAPoLStartPacket eapol_start{};
280 eapol_start.association_id = association_id;
281 eapol_start.node.friend_code_seed = node_info.friend_code_seed;
282
283 std::copy(node_info.username.begin(), node_info.username.end(),
284 eapol_start.node.username.begin());
285
286 // Note: The network_node_id and unknown bytes seem to be uninitialized in the NWM module.
287 // TODO(B3N30): The last 8 bytes seem to have a fixed value of 07 88 15 00 04 e9 13 00 in
288 // EAPoL-Start packets from different 3DSs to the same host during a Super Smash Bros. 4 game.
289 // Find out what that means.
290
291 std::vector<u8> eapol_buffer(sizeof(EAPoLStartPacket));
292 std::memcpy(eapol_buffer.data(), &eapol_start, sizeof(eapol_start));
293
294 std::vector<u8> buffer = GenerateLLCHeader(EtherType::EAPoL);
295 buffer.insert(buffer.end(), eapol_buffer.begin(), eapol_buffer.end());
296 return buffer;
297}
298
299EtherType GetFrameEtherType(const std::vector<u8>& frame) {
300 LLCHeader header;
301 std::memcpy(&header, frame.data(), sizeof(header));
302
303 u16 ethertype = header.protocol;
304 return static_cast<EtherType>(ethertype);
305}
306
307u16 GetEAPoLFrameType(const std::vector<u8>& frame) {
308 // Ignore the LLC header
309 u16_be eapol_type;
310 std::memcpy(&eapol_type, frame.data() + sizeof(LLCHeader), sizeof(eapol_type));
311 return eapol_type;
312}
313
314NodeInfo DeserializeNodeInfoFromFrame(const std::vector<u8>& frame) {
315 EAPoLStartPacket eapol_start;
316
317 // Skip the LLC header
318 std::memcpy(&eapol_start, frame.data() + sizeof(LLCHeader), sizeof(eapol_start));
319
320 NodeInfo node{};
321 node.friend_code_seed = eapol_start.node.friend_code_seed;
322
323 std::copy(eapol_start.node.username.begin(), eapol_start.node.username.end(),
324 node.username.begin());
325
326 return node;
327}
328
329NodeInfo DeserializeNodeInfo(const EAPoLNodeInfo& node) {
330 NodeInfo node_info{};
331 node_info.friend_code_seed = node.friend_code_seed;
332 node_info.network_node_id = node.network_node_id;
333
334 std::copy(node.username.begin(), node.username.end(), node_info.username.begin());
335
336 return node_info;
337}
338
339std::vector<u8> GenerateEAPoLLogoffFrame(const MacAddress& mac_address, u16 network_node_id,
340 const NodeList& nodes, u8 max_nodes, u8 total_nodes) {
341 EAPoLLogoffPacket eapol_logoff{};
342 eapol_logoff.assigned_node_id = network_node_id;
343 eapol_logoff.connected_nodes = total_nodes;
344 eapol_logoff.max_nodes = max_nodes;
345
346 for (size_t index = 0; index < total_nodes; ++index) {
347 const auto& node_info = nodes[index];
348 auto& node = eapol_logoff.nodes[index];
349
350 node.friend_code_seed = node_info.friend_code_seed;
351 node.network_node_id = node_info.network_node_id;
352
353 std::copy(node_info.username.begin(), node_info.username.end(), node.username.begin());
354 }
355
356 std::vector<u8> eapol_buffer(sizeof(EAPoLLogoffPacket));
357 std::memcpy(eapol_buffer.data(), &eapol_logoff, sizeof(eapol_logoff));
358
359 std::vector<u8> buffer = GenerateLLCHeader(EtherType::EAPoL);
360 buffer.insert(buffer.end(), eapol_buffer.begin(), eapol_buffer.end());
361 return buffer;
362}
363
364EAPoLLogoffPacket ParseEAPoLLogoffFrame(const std::vector<u8>& frame) {
365 EAPoLLogoffPacket eapol_logoff;
366
367 // Skip the LLC header
368 std::memcpy(&eapol_logoff, frame.data() + sizeof(LLCHeader), sizeof(eapol_logoff));
369 return eapol_logoff;
370}
371
277} // namespace NWM 372} // namespace NWM
278} // namespace Service 373} // namespace Service
diff --git a/src/core/hle/service/nwm/uds_data.h b/src/core/hle/service/nwm/uds_data.h
index a23520a41..76bccb1bf 100644
--- a/src/core/hle/service/nwm/uds_data.h
+++ b/src/core/hle/service/nwm/uds_data.h
@@ -8,6 +8,7 @@
8#include <vector> 8#include <vector>
9#include "common/common_types.h" 9#include "common/common_types.h"
10#include "common/swap.h" 10#include "common/swap.h"
11#include "core/hle/service/nwm/uds_beacon.h"
11#include "core/hle/service/service.h" 12#include "core/hle/service/service.h"
12 13
13namespace Service { 14namespace Service {
@@ -67,6 +68,49 @@ struct DataFrameCryptoCTR {
67 68
68static_assert(sizeof(DataFrameCryptoCTR) == 16, "DataFrameCryptoCTR has the wrong size"); 69static_assert(sizeof(DataFrameCryptoCTR) == 16, "DataFrameCryptoCTR has the wrong size");
69 70
71struct EAPoLNodeInfo {
72 u64_be friend_code_seed;
73 std::array<u16_be, 10> username;
74 INSERT_PADDING_BYTES(4);
75 u16_be network_node_id;
76 INSERT_PADDING_BYTES(6);
77};
78
79static_assert(sizeof(EAPoLNodeInfo) == 0x28, "EAPoLNodeInfo has the wrong size");
80
81constexpr u16 EAPoLStartMagic = 0x201;
82
83/*
84 * Nintendo EAPoLStartPacket, is used to initaliaze a connection between client and host
85 */
86struct EAPoLStartPacket {
87 u16_be magic = EAPoLStartMagic;
88 u16_be association_id;
89 // This value is hardcoded to 1 in the NWM module.
90 u16_be unknown = 1;
91 INSERT_PADDING_BYTES(2);
92 EAPoLNodeInfo node;
93};
94
95static_assert(sizeof(EAPoLStartPacket) == 0x30, "EAPoLStartPacket has the wrong size");
96
97constexpr u16 EAPoLLogoffMagic = 0x202;
98
99struct EAPoLLogoffPacket {
100 u16_be magic = EAPoLLogoffMagic;
101 INSERT_PADDING_BYTES(2);
102 u16_be assigned_node_id;
103 MacAddress client_mac_address;
104 INSERT_PADDING_BYTES(6);
105 u8 connected_nodes;
106 u8 max_nodes;
107 INSERT_PADDING_BYTES(4);
108
109 std::array<EAPoLNodeInfo, UDSMaxNodes> nodes;
110};
111
112static_assert(sizeof(EAPoLLogoffPacket) == 0x298, "EAPoLLogoffPacket has the wrong size");
113
70/** 114/**
71 * Generates an unencrypted 802.11 data payload. 115 * Generates an unencrypted 802.11 data payload.
72 * @returns The generated frame payload. 116 * @returns The generated frame payload.
@@ -74,5 +118,47 @@ static_assert(sizeof(DataFrameCryptoCTR) == 16, "DataFrameCryptoCTR has the wron
74std::vector<u8> GenerateDataPayload(const std::vector<u8>& data, u8 channel, u16 dest_node, 118std::vector<u8> GenerateDataPayload(const std::vector<u8>& data, u8 channel, u16 dest_node,
75 u16 src_node, u16 sequence_number); 119 u16 src_node, u16 sequence_number);
76 120
121/*
122 * Generates an unencrypted 802.11 data frame body with the EAPoL-Start format for UDS
123 * communication.
124 * @returns The generated frame body.
125 */
126std::vector<u8> GenerateEAPoLStartFrame(u16 association_id, const NodeInfo& node_info);
127
128/*
129 * Returns the EtherType of the specified 802.11 frame.
130 */
131EtherType GetFrameEtherType(const std::vector<u8>& frame);
132
133/*
134 * Returns the EAPoL type (Start / Logoff) of the specified 802.11 frame.
135 * Note: The frame *must* be an EAPoL frame.
136 */
137u16 GetEAPoLFrameType(const std::vector<u8>& frame);
138
139/*
140 * Returns a deserialized NodeInfo structure from the information inside an EAPoL-Start packet
141 * encapsulated in an 802.11 data frame.
142 */
143NodeInfo DeserializeNodeInfoFromFrame(const std::vector<u8>& frame);
144
145/*
146 * Returns a NodeInfo constructed from the data in the specified EAPoLNodeInfo.
147 */
148NodeInfo DeserializeNodeInfo(const EAPoLNodeInfo& node);
149
150/*
151 * Generates an unencrypted 802.11 data frame body with the EAPoL-Logoff format for UDS
152 * communication.
153 * @returns The generated frame body.
154 */
155std::vector<u8> GenerateEAPoLLogoffFrame(const MacAddress& mac_address, u16 network_node_id,
156 const NodeList& nodes, u8 max_nodes, u8 total_nodes);
157
158/*
159 * Returns a EAPoLLogoffPacket representing the specified 802.11-encapsulated data frame.
160 */
161EAPoLLogoffPacket ParseEAPoLLogoffFrame(const std::vector<u8>& frame);
162
77} // namespace NWM 163} // namespace NWM
78} // namespace Service 164} // namespace Service
diff --git a/src/core/hle/service/service.cpp b/src/core/hle/service/service.cpp
index aad950e50..f267aad74 100644
--- a/src/core/hle/service/service.cpp
+++ b/src/core/hle/service/service.cpp
@@ -38,7 +38,7 @@
38#include "core/hle/service/news/news.h" 38#include "core/hle/service/news/news.h"
39#include "core/hle/service/nfc/nfc.h" 39#include "core/hle/service/nfc/nfc.h"
40#include "core/hle/service/nim/nim.h" 40#include "core/hle/service/nim/nim.h"
41#include "core/hle/service/ns_s.h" 41#include "core/hle/service/ns/ns.h"
42#include "core/hle/service/nwm/nwm.h" 42#include "core/hle/service/nwm/nwm.h"
43#include "core/hle/service/pm_app.h" 43#include "core/hle/service/pm_app.h"
44#include "core/hle/service/ptm/ptm.h" 44#include "core/hle/service/ptm/ptm.h"
@@ -215,6 +215,8 @@ void Init() {
215 SM::g_service_manager = std::make_shared<SM::ServiceManager>(); 215 SM::g_service_manager = std::make_shared<SM::ServiceManager>();
216 SM::ServiceManager::InstallInterfaces(SM::g_service_manager); 216 SM::ServiceManager::InstallInterfaces(SM::g_service_manager);
217 217
218 NS::InstallInterfaces(*SM::g_service_manager);
219
218 AddNamedPort(new ERR::ERR_F); 220 AddNamedPort(new ERR::ERR_F);
219 221
220 FS::ArchiveInit(); 222 FS::ArchiveInit();
@@ -246,7 +248,6 @@ void Init() {
246 AddService(new HTTP::HTTP_C); 248 AddService(new HTTP::HTTP_C);
247 AddService(new LDR::LDR_RO); 249 AddService(new LDR::LDR_RO);
248 AddService(new MIC::MIC_U); 250 AddService(new MIC::MIC_U);
249 AddService(new NS::NS_S);
250 AddService(new PM::PM_APP); 251 AddService(new PM::PM_APP);
251 AddService(new SOC::SOC_U); 252 AddService(new SOC::SOC_U);
252 AddService(new SSL::SSL_C); 253 AddService(new SSL::SSL_C);
diff --git a/src/core/hle/service/sm/sm.cpp b/src/core/hle/service/sm/sm.cpp
index 5e7fc68f9..854ab9a05 100644
--- a/src/core/hle/service/sm/sm.cpp
+++ b/src/core/hle/service/sm/sm.cpp
@@ -36,6 +36,10 @@ ResultVal<Kernel::SharedPtr<Kernel::ServerPort>> ServiceManager::RegisterService
36 std::string name, unsigned int max_sessions) { 36 std::string name, unsigned int max_sessions) {
37 37
38 CASCADE_CODE(ValidateServiceName(name)); 38 CASCADE_CODE(ValidateServiceName(name));
39
40 if (registered_services.find(name) != registered_services.end())
41 return ERR_ALREADY_REGISTERED;
42
39 Kernel::SharedPtr<Kernel::ServerPort> server_port; 43 Kernel::SharedPtr<Kernel::ServerPort> server_port;
40 Kernel::SharedPtr<Kernel::ClientPort> client_port; 44 Kernel::SharedPtr<Kernel::ClientPort> client_port;
41 std::tie(server_port, client_port) = Kernel::ServerPort::CreatePortPair(max_sessions, name); 45 std::tie(server_port, client_port) = Kernel::ServerPort::CreatePortPair(max_sessions, name);
diff --git a/src/core/hle/service/sm/sm.h b/src/core/hle/service/sm/sm.h
index 8f0dbf2db..9f60a7965 100644
--- a/src/core/hle/service/sm/sm.h
+++ b/src/core/hle/service/sm/sm.h
@@ -32,6 +32,9 @@ constexpr ResultCode ERR_ACCESS_DENIED(6, ErrorModule::SRV, ErrorSummary::Invali
32 ErrorLevel::Permanent); // 0xD8E06406 32 ErrorLevel::Permanent); // 0xD8E06406
33constexpr ResultCode ERR_NAME_CONTAINS_NUL(7, ErrorModule::SRV, ErrorSummary::WrongArgument, 33constexpr ResultCode ERR_NAME_CONTAINS_NUL(7, ErrorModule::SRV, ErrorSummary::WrongArgument,
34 ErrorLevel::Permanent); // 0xD9006407 34 ErrorLevel::Permanent); // 0xD9006407
35constexpr ResultCode ERR_ALREADY_REGISTERED(ErrorDescription::AlreadyExists, ErrorModule::OS,
36 ErrorSummary::WrongArgument,
37 ErrorLevel::Permanent); // 0xD9001BFC
35 38
36class ServiceManager { 39class ServiceManager {
37public: 40public:
diff --git a/src/core/hle/service/sm/srv.cpp b/src/core/hle/service/sm/srv.cpp
index 352941e69..fb873981c 100644
--- a/src/core/hle/service/sm/srv.cpp
+++ b/src/core/hle/service/sm/srv.cpp
@@ -13,6 +13,7 @@
13#include "core/hle/kernel/errors.h" 13#include "core/hle/kernel/errors.h"
14#include "core/hle/kernel/hle_ipc.h" 14#include "core/hle/kernel/hle_ipc.h"
15#include "core/hle/kernel/semaphore.h" 15#include "core/hle/kernel/semaphore.h"
16#include "core/hle/kernel/server_port.h"
16#include "core/hle/kernel/server_session.h" 17#include "core/hle/kernel/server_session.h"
17#include "core/hle/service/sm/sm.h" 18#include "core/hle/service/sm/sm.h"
18#include "core/hle/service/sm/srv.h" 19#include "core/hle/service/sm/srv.h"
@@ -61,7 +62,7 @@ void SRV::EnableNotification(Kernel::HLERequestContext& ctx) {
61 IPC::RequestParser rp(ctx, 0x2, 0, 0); 62 IPC::RequestParser rp(ctx, 0x2, 0, 0);
62 63
63 notification_semaphore = 64 notification_semaphore =
64 Kernel::Semaphore::Create(0, MAX_PENDING_NOTIFICATIONS, "SRV:Notification").Unwrap(); 65 Kernel::Semaphore::Create(0, MAX_PENDING_NOTIFICATIONS, 0, "SRV:Notification").Unwrap();
65 66
66 IPC::RequestBuilder rb = rp.MakeBuilder(1, 2); 67 IPC::RequestBuilder rb = rp.MakeBuilder(1, 2);
67 rb.Push(RESULT_SUCCESS); 68 rb.Push(RESULT_SUCCESS);
@@ -184,12 +185,35 @@ void SRV::PublishToSubscriber(Kernel::HLERequestContext& ctx) {
184 flags); 185 flags);
185} 186}
186 187
188void SRV::RegisterService(Kernel::HLERequestContext& ctx) {
189 IPC::RequestParser rp(ctx, 0x3, 4, 0);
190
191 auto name_buf = rp.PopRaw<std::array<char, 8>>();
192 size_t name_len = rp.Pop<u32>();
193 u32 max_sessions = rp.Pop<u32>();
194
195 std::string name(name_buf.data(), std::min(name_len, name_buf.size()));
196
197 auto port = service_manager->RegisterService(name, max_sessions);
198
199 if (port.Failed()) {
200 IPC::RequestBuilder rb = rp.MakeBuilder(1, 0);
201 rb.Push(port.Code());
202 LOG_ERROR(Service_SRV, "called service=%s -> error 0x%08X", name.c_str(), port.Code().raw);
203 return;
204 }
205
206 IPC::RequestBuilder rb = rp.MakeBuilder(1, 2);
207 rb.Push(RESULT_SUCCESS);
208 rb.PushObjects(port.Unwrap());
209}
210
187SRV::SRV(std::shared_ptr<ServiceManager> service_manager) 211SRV::SRV(std::shared_ptr<ServiceManager> service_manager)
188 : ServiceFramework("srv:", 4), service_manager(std::move(service_manager)) { 212 : ServiceFramework("srv:", 4), service_manager(std::move(service_manager)) {
189 static const FunctionInfo functions[] = { 213 static const FunctionInfo functions[] = {
190 {0x00010002, &SRV::RegisterClient, "RegisterClient"}, 214 {0x00010002, &SRV::RegisterClient, "RegisterClient"},
191 {0x00020000, &SRV::EnableNotification, "EnableNotification"}, 215 {0x00020000, &SRV::EnableNotification, "EnableNotification"},
192 {0x00030100, nullptr, "RegisterService"}, 216 {0x00030100, &SRV::RegisterService, "RegisterService"},
193 {0x000400C0, nullptr, "UnregisterService"}, 217 {0x000400C0, nullptr, "UnregisterService"},
194 {0x00050100, &SRV::GetServiceHandle, "GetServiceHandle"}, 218 {0x00050100, &SRV::GetServiceHandle, "GetServiceHandle"},
195 {0x000600C2, nullptr, "RegisterPort"}, 219 {0x000600C2, nullptr, "RegisterPort"},
diff --git a/src/core/hle/service/sm/srv.h b/src/core/hle/service/sm/srv.h
index 75cca5184..aad839563 100644
--- a/src/core/hle/service/sm/srv.h
+++ b/src/core/hle/service/sm/srv.h
@@ -28,6 +28,7 @@ private:
28 void Subscribe(Kernel::HLERequestContext& ctx); 28 void Subscribe(Kernel::HLERequestContext& ctx);
29 void Unsubscribe(Kernel::HLERequestContext& ctx); 29 void Unsubscribe(Kernel::HLERequestContext& ctx);
30 void PublishToSubscriber(Kernel::HLERequestContext& ctx); 30 void PublishToSubscriber(Kernel::HLERequestContext& ctx);
31 void RegisterService(Kernel::HLERequestContext& ctx);
31 32
32 std::shared_ptr<ServiceManager> service_manager; 33 std::shared_ptr<ServiceManager> service_manager;
33 Kernel::SharedPtr<Kernel::Semaphore> notification_semaphore; 34 Kernel::SharedPtr<Kernel::Semaphore> notification_semaphore;
diff --git a/src/core/hw/gpu.cpp b/src/core/hw/gpu.cpp
index 6838e449c..d1bfe51e6 100644
--- a/src/core/hw/gpu.cpp
+++ b/src/core/hw/gpu.cpp
@@ -29,7 +29,7 @@ namespace GPU {
29Regs g_regs; 29Regs g_regs;
30 30
31/// 268MHz CPU clocks / 60Hz frames per second 31/// 268MHz CPU clocks / 60Hz frames per second
32const u64 frame_ticks = BASE_CLOCK_RATE_ARM11 / SCREEN_REFRESH_RATE; 32const u64 frame_ticks = static_cast<u64>(BASE_CLOCK_RATE_ARM11 / SCREEN_REFRESH_RATE);
33/// Event id for CoreTiming 33/// Event id for CoreTiming
34static int vblank_event; 34static int vblank_event;
35 35
@@ -515,15 +515,15 @@ template void Write<u8>(u32 addr, const u8 data);
515 515
516/// Update hardware 516/// Update hardware
517static void VBlankCallback(u64 userdata, int cycles_late) { 517static void VBlankCallback(u64 userdata, int cycles_late) {
518 VideoCore::g_renderer->SwapBuffers(); 518 //VideoCore::g_renderer->SwapBuffers();
519 519
520 // Signal to GSP that GPU interrupt has occurred 520 //// Signal to GSP that GPU interrupt has occurred
521 // TODO(yuriks): hwtest to determine if PDC0 is for the Top screen and PDC1 for the Sub 521 //// TODO(yuriks): hwtest to determine if PDC0 is for the Top screen and PDC1 for the Sub
522 // screen, or if both use the same interrupts and these two instead determine the 522 //// screen, or if both use the same interrupts and these two instead determine the
523 // beginning and end of the VBlank period. If needed, split the interrupt firing into 523 //// beginning and end of the VBlank period. If needed, split the interrupt firing into
524 // two different intervals. 524 //// two different intervals.
525 Service::GSP::SignalInterrupt(Service::GSP::InterruptId::PDC0); 525 //Service::GSP::SignalInterrupt(Service::GSP::InterruptId::PDC0);
526 Service::GSP::SignalInterrupt(Service::GSP::InterruptId::PDC1); 526 //Service::GSP::SignalInterrupt(Service::GSP::InterruptId::PDC1);
527 527
528 // Reschedule recurrent event 528 // Reschedule recurrent event
529 CoreTiming::ScheduleEvent(frame_ticks - cycles_late, vblank_event); 529 CoreTiming::ScheduleEvent(frame_ticks - cycles_late, vblank_event);
diff --git a/src/core/hw/gpu.h b/src/core/hw/gpu.h
index 21b127fee..e3d0a0e08 100644
--- a/src/core/hw/gpu.h
+++ b/src/core/hw/gpu.h
@@ -74,9 +74,9 @@ struct Regs {
74 case PixelFormat::RGB5A1: 74 case PixelFormat::RGB5A1:
75 case PixelFormat::RGBA4: 75 case PixelFormat::RGBA4:
76 return 2; 76 return 2;
77 default:
78 UNIMPLEMENTED();
79 } 77 }
78
79 UNREACHABLE();
80 } 80 }
81 81
82 INSERT_PADDING_WORDS(0x4); 82 INSERT_PADDING_WORDS(0x4);
diff --git a/src/core/loader/3dsx.cpp b/src/core/loader/3dsx.cpp
index 209328347..7b0342cc9 100644
--- a/src/core/loader/3dsx.cpp
+++ b/src/core/loader/3dsx.cpp
@@ -91,8 +91,8 @@ static u32 TranslateAddr(u32 addr, const THREEloadinfo* loadinfo, u32* offsets)
91 return loadinfo->seg_addrs[2] + addr - offsets[1]; 91 return loadinfo->seg_addrs[2] + addr - offsets[1];
92} 92}
93 93
94using Kernel::SharedPtr;
95using Kernel::CodeSet; 94using Kernel::CodeSet;
95using Kernel::SharedPtr;
96 96
97static THREEDSX_Error Load3DSXFile(FileUtil::IOFile& file, u32 base_addr, 97static THREEDSX_Error Load3DSXFile(FileUtil::IOFile& file, u32 base_addr,
98 SharedPtr<CodeSet>* out_codeset) { 98 SharedPtr<CodeSet>* out_codeset) {
@@ -255,7 +255,7 @@ FileType AppLoader_THREEDSX::IdentifyType(FileUtil::IOFile& file) {
255 return FileType::Error; 255 return FileType::Error;
256} 256}
257 257
258ResultStatus AppLoader_THREEDSX::Load() { 258ResultStatus AppLoader_THREEDSX::Load(Kernel::SharedPtr<Kernel::Process>& process) {
259 if (is_loaded) 259 if (is_loaded)
260 return ResultStatus::ErrorAlreadyLoaded; 260 return ResultStatus::ErrorAlreadyLoaded;
261 261
@@ -267,19 +267,17 @@ ResultStatus AppLoader_THREEDSX::Load() {
267 return ResultStatus::Error; 267 return ResultStatus::Error;
268 codeset->name = filename; 268 codeset->name = filename;
269 269
270 Kernel::g_current_process = Kernel::Process::Create("main"); 270 process = Kernel::Process::Create("main");
271 Kernel::g_current_process->LoadModule(codeset, codeset->entrypoint); 271 process->LoadModule(codeset, codeset->entrypoint);
272 Kernel::g_current_process->svc_access_mask.set(); 272 process->svc_access_mask.set();
273 Kernel::g_current_process->address_mappings = default_address_mappings; 273 process->address_mappings = default_address_mappings;
274 274
275 // Attach the default resource limit (APPLICATION) to the process 275 // Attach the default resource limit (APPLICATION) to the process
276 Kernel::g_current_process->resource_limit = 276 process->resource_limit =
277 Kernel::ResourceLimit::GetForCategory(Kernel::ResourceLimitCategory::APPLICATION); 277 Kernel::ResourceLimit::GetForCategory(Kernel::ResourceLimitCategory::APPLICATION);
278 process->Run(codeset->entrypoint, 48, Kernel::DEFAULT_STACK_SIZE);
278 279
279 Kernel::g_current_process->Run(codeset->entrypoint, 48, Kernel::DEFAULT_STACK_SIZE); 280 Service::FS::RegisterSelfNCCH(*this);
280
281 Service::FS::RegisterArchiveType(std::make_unique<FileSys::ArchiveFactory_SelfNCCH>(*this),
282 Service::FS::ArchiveIdCode::SelfNCCH);
283 281
284 is_loaded = true; 282 is_loaded = true;
285 return ResultStatus::Success; 283 return ResultStatus::Success;
diff --git a/src/core/loader/3dsx.h b/src/core/loader/3dsx.h
index 3f376778a..1e59bbb9d 100644
--- a/src/core/loader/3dsx.h
+++ b/src/core/loader/3dsx.h
@@ -31,7 +31,7 @@ public:
31 return IdentifyType(file); 31 return IdentifyType(file);
32 } 32 }
33 33
34 ResultStatus Load() override; 34 ResultStatus Load(Kernel::SharedPtr<Kernel::Process>& process) override;
35 35
36 ResultStatus ReadIcon(std::vector<u8>& buffer) override; 36 ResultStatus ReadIcon(std::vector<u8>& buffer) override;
37 37
diff --git a/src/core/loader/elf.cpp b/src/core/loader/elf.cpp
index 2efc67ff8..9969a8c39 100644
--- a/src/core/loader/elf.cpp
+++ b/src/core/loader/elf.cpp
@@ -13,8 +13,8 @@
13#include "core/loader/elf.h" 13#include "core/loader/elf.h"
14#include "core/memory.h" 14#include "core/memory.h"
15 15
16using Kernel::SharedPtr;
17using Kernel::CodeSet; 16using Kernel::CodeSet;
17using Kernel::SharedPtr;
18 18
19//////////////////////////////////////////////////////////////////////////////////////////////////// 19////////////////////////////////////////////////////////////////////////////////////////////////////
20// ELF Header Constants 20// ELF Header Constants
@@ -382,7 +382,7 @@ FileType AppLoader_ELF::IdentifyType(FileUtil::IOFile& file) {
382 return FileType::Error; 382 return FileType::Error;
383} 383}
384 384
385ResultStatus AppLoader_ELF::Load() { 385ResultStatus AppLoader_ELF::Load(Kernel::SharedPtr<Kernel::Process>& process) {
386 if (is_loaded) 386 if (is_loaded)
387 return ResultStatus::ErrorAlreadyLoaded; 387 return ResultStatus::ErrorAlreadyLoaded;
388 388
@@ -401,16 +401,16 @@ ResultStatus AppLoader_ELF::Load() {
401 SharedPtr<CodeSet> codeset = elf_reader.LoadInto(Memory::PROCESS_IMAGE_VADDR); 401 SharedPtr<CodeSet> codeset = elf_reader.LoadInto(Memory::PROCESS_IMAGE_VADDR);
402 codeset->name = filename; 402 codeset->name = filename;
403 403
404 Kernel::g_current_process = Kernel::Process::Create("main"); 404 process = Kernel::Process::Create("main");
405 Kernel::g_current_process->LoadModule(codeset, codeset->entrypoint); 405 process->LoadModule(codeset, codeset->entrypoint);
406 Kernel::g_current_process->svc_access_mask.set(); 406 process->svc_access_mask.set();
407 Kernel::g_current_process->address_mappings = default_address_mappings; 407 process->address_mappings = default_address_mappings;
408 408
409 // Attach the default resource limit (APPLICATION) to the process 409 // Attach the default resource limit (APPLICATION) to the process
410 Kernel::g_current_process->resource_limit = 410 process->resource_limit =
411 Kernel::ResourceLimit::GetForCategory(Kernel::ResourceLimitCategory::APPLICATION); 411 Kernel::ResourceLimit::GetForCategory(Kernel::ResourceLimitCategory::APPLICATION);
412 412
413 Kernel::g_current_process->Run(codeset->entrypoint, 48, Kernel::DEFAULT_STACK_SIZE); 413 process->Run(codeset->entrypoint, 48, Kernel::DEFAULT_STACK_SIZE);
414 414
415 is_loaded = true; 415 is_loaded = true;
416 return ResultStatus::Success; 416 return ResultStatus::Success;
diff --git a/src/core/loader/elf.h b/src/core/loader/elf.h
index 862aa90d8..113da5917 100644
--- a/src/core/loader/elf.h
+++ b/src/core/loader/elf.h
@@ -30,7 +30,7 @@ public:
30 return IdentifyType(file); 30 return IdentifyType(file);
31 } 31 }
32 32
33 ResultStatus Load() override; 33 ResultStatus Load(Kernel::SharedPtr<Kernel::Process>& process) override;
34 34
35private: 35private:
36 std::string filename; 36 std::string filename;
diff --git a/src/core/loader/loader.h b/src/core/loader/loader.h
index ac26f31fa..311785d05 100644
--- a/src/core/loader/loader.h
+++ b/src/core/loader/loader.h
@@ -13,10 +13,12 @@
13#include <boost/optional.hpp> 13#include <boost/optional.hpp>
14#include "common/common_types.h" 14#include "common/common_types.h"
15#include "common/file_util.h" 15#include "common/file_util.h"
16#include "core/hle/kernel/kernel.h"
16 17
17namespace Kernel { 18namespace Kernel {
18struct AddressMapping; 19struct AddressMapping;
19} 20class Process;
21} // namespace Kernel
20 22
21//////////////////////////////////////////////////////////////////////////////////////////////////// 23////////////////////////////////////////////////////////////////////////////////////////////////////
22// Loader namespace 24// Loader namespace
@@ -94,10 +96,11 @@ public:
94 virtual FileType GetFileType() = 0; 96 virtual FileType GetFileType() = 0;
95 97
96 /** 98 /**
97 * Load the application 99 * Load the application and return the created Process instance
98 * @return ResultStatus result of function 100 * @param process The newly created process.
101 * @return The status result of the operation.
99 */ 102 */
100 virtual ResultStatus Load() = 0; 103 virtual ResultStatus Load(Kernel::SharedPtr<Kernel::Process>& process) = 0;
101 104
102 /** 105 /**
103 * Loads the system mode that this application needs. 106 * Loads the system mode that this application needs.
@@ -168,6 +171,28 @@ public:
168 return ResultStatus::ErrorNotImplemented; 171 return ResultStatus::ErrorNotImplemented;
169 } 172 }
170 173
174 /**
175 * Get the update RomFS of the application
176 * Since the RomFS can be huge, we return a file reference instead of copying to a buffer
177 * @param romfs_file The file containing the RomFS
178 * @param offset The offset the romfs begins on
179 * @param size The size of the romfs
180 * @return ResultStatus result of function
181 */
182 virtual ResultStatus ReadUpdateRomFS(std::shared_ptr<FileUtil::IOFile>& romfs_file, u64& offset,
183 u64& size) {
184 return ResultStatus::ErrorNotImplemented;
185 }
186
187 /**
188 * Get the title of the application
189 * @param title Reference to store the application title into
190 * @return ResultStatus result of function
191 */
192 virtual ResultStatus ReadTitle(std::string& title) {
193 return ResultStatus::ErrorNotImplemented;
194 }
195
171protected: 196protected:
172 FileUtil::IOFile file; 197 FileUtil::IOFile file;
173 bool is_loaded = false; 198 bool is_loaded = false;
@@ -186,4 +211,4 @@ extern const std::initializer_list<Kernel::AddressMapping> default_address_mappi
186 */ 211 */
187std::unique_ptr<AppLoader> GetLoader(const std::string& filename); 212std::unique_ptr<AppLoader> GetLoader(const std::string& filename);
188 213
189} // namespace 214} // namespace Loader
diff --git a/src/core/loader/ncch.cpp b/src/core/loader/ncch.cpp
index 728886ea8..e33a37b2e 100644
--- a/src/core/loader/ncch.cpp
+++ b/src/core/loader/ncch.cpp
@@ -4,13 +4,17 @@
4 4
5#include <algorithm> 5#include <algorithm>
6#include <cinttypes> 6#include <cinttypes>
7#include <codecvt>
7#include <cstring> 8#include <cstring>
9#include <locale>
8#include <memory> 10#include <memory>
9#include "common/logging/log.h" 11#include "common/logging/log.h"
10#include "common/string_util.h" 12#include "common/string_util.h"
11#include "common/swap.h" 13#include "common/swap.h"
12#include "core/core.h" 14#include "core/core.h"
13#include "core/file_sys/archive_selfncch.h" 15#include "core/file_sys/archive_selfncch.h"
16#include "core/file_sys/ncch_container.h"
17#include "core/file_sys/title_metadata.h"
14#include "core/hle/kernel/process.h" 18#include "core/hle/kernel/process.h"
15#include "core/hle/kernel/resource_limit.h" 19#include "core/hle/kernel/resource_limit.h"
16#include "core/hle/service/cfg/cfg.h" 20#include "core/hle/service/cfg/cfg.h"
@@ -18,93 +22,14 @@
18#include "core/loader/ncch.h" 22#include "core/loader/ncch.h"
19#include "core/loader/smdh.h" 23#include "core/loader/smdh.h"
20#include "core/memory.h" 24#include "core/memory.h"
25#include "network/network.h"
21 26
22//////////////////////////////////////////////////////////////////////////////////////////////////// 27////////////////////////////////////////////////////////////////////////////////////////////////////
23// Loader namespace 28// Loader namespace
24 29
25namespace Loader { 30namespace Loader {
26 31
27static const int kMaxSections = 8; ///< Maximum number of sections (files) in an ExeFs 32static const u64 UPDATE_MASK = 0x0000000e00000000;
28static const int kBlockSize = 0x200; ///< Size of ExeFS blocks (in bytes)
29
30/**
31 * Get the decompressed size of an LZSS compressed ExeFS file
32 * @param buffer Buffer of compressed file
33 * @param size Size of compressed buffer
34 * @return Size of decompressed buffer
35 */
36static u32 LZSS_GetDecompressedSize(const u8* buffer, u32 size) {
37 u32 offset_size = *(u32*)(buffer + size - 4);
38 return offset_size + size;
39}
40
41/**
42 * Decompress ExeFS file (compressed with LZSS)
43 * @param compressed Compressed buffer
44 * @param compressed_size Size of compressed buffer
45 * @param decompressed Decompressed buffer
46 * @param decompressed_size Size of decompressed buffer
47 * @return True on success, otherwise false
48 */
49static bool LZSS_Decompress(const u8* compressed, u32 compressed_size, u8* decompressed,
50 u32 decompressed_size) {
51 const u8* footer = compressed + compressed_size - 8;
52 u32 buffer_top_and_bottom = *reinterpret_cast<const u32*>(footer);
53 u32 out = decompressed_size;
54 u32 index = compressed_size - ((buffer_top_and_bottom >> 24) & 0xFF);
55 u32 stop_index = compressed_size - (buffer_top_and_bottom & 0xFFFFFF);
56
57 memset(decompressed, 0, decompressed_size);
58 memcpy(decompressed, compressed, compressed_size);
59
60 while (index > stop_index) {
61 u8 control = compressed[--index];
62
63 for (unsigned i = 0; i < 8; i++) {
64 if (index <= stop_index)
65 break;
66 if (index <= 0)
67 break;
68 if (out <= 0)
69 break;
70
71 if (control & 0x80) {
72 // Check if compression is out of bounds
73 if (index < 2)
74 return false;
75 index -= 2;
76
77 u32 segment_offset = compressed[index] | (compressed[index + 1] << 8);
78 u32 segment_size = ((segment_offset >> 12) & 15) + 3;
79 segment_offset &= 0x0FFF;
80 segment_offset += 2;
81
82 // Check if compression is out of bounds
83 if (out < segment_size)
84 return false;
85
86 for (unsigned j = 0; j < segment_size; j++) {
87 // Check if compression is out of bounds
88 if (out + segment_offset >= decompressed_size)
89 return false;
90
91 u8 data = decompressed[out + segment_offset];
92 decompressed[--out] = data;
93 }
94 } else {
95 // Check if compression is out of bounds
96 if (out < 1)
97 return false;
98 decompressed[--out] = compressed[--index];
99 }
100 control <<= 1;
101 }
102 }
103 return true;
104}
105
106////////////////////////////////////////////////////////////////////////////////////////////////////
107// AppLoader_NCCH class
108 33
109FileType AppLoader_NCCH::IdentifyType(FileUtil::IOFile& file) { 34FileType AppLoader_NCCH::IdentifyType(FileUtil::IOFile& file) {
110 u32 magic; 35 u32 magic;
@@ -121,203 +46,105 @@ FileType AppLoader_NCCH::IdentifyType(FileUtil::IOFile& file) {
121 return FileType::Error; 46 return FileType::Error;
122} 47}
123 48
49static std::string GetUpdateNCCHPath(u64_le program_id) {
50 u32 high = static_cast<u32>((program_id | UPDATE_MASK) >> 32);
51 u32 low = static_cast<u32>((program_id | UPDATE_MASK) & 0xFFFFFFFF);
52
53 // TODO(shinyquagsire23): Title database should be doing this path lookup
54 std::string content_path = Common::StringFromFormat(
55 "%sNintendo 3DS/%s/%s/title/%08x/%08x/content/", FileUtil::GetUserPath(D_SDMC_IDX).c_str(),
56 SYSTEM_ID, SDCARD_ID, high, low);
57 std::string tmd_path = content_path + "00000000.tmd";
58
59 u32 content_id = 0;
60 FileSys::TitleMetadata tmd(tmd_path);
61 if (tmd.Load() == ResultStatus::Success) {
62 content_id = tmd.GetBootContentID();
63 }
64
65 return Common::StringFromFormat("%s%08x.app", content_path.c_str(), content_id);
66}
67
124std::pair<boost::optional<u32>, ResultStatus> AppLoader_NCCH::LoadKernelSystemMode() { 68std::pair<boost::optional<u32>, ResultStatus> AppLoader_NCCH::LoadKernelSystemMode() {
125 if (!is_loaded) { 69 if (!is_loaded) {
126 ResultStatus res = LoadExeFS(); 70 ResultStatus res = base_ncch.Load();
127 if (res != ResultStatus::Success) { 71 if (res != ResultStatus::Success) {
128 return std::make_pair(boost::none, res); 72 return std::make_pair(boost::none, res);
129 } 73 }
130 } 74 }
75
131 // Set the system mode as the one from the exheader. 76 // Set the system mode as the one from the exheader.
132 return std::make_pair(exheader_header.arm11_system_local_caps.system_mode.Value(), 77 return std::make_pair(overlay_ncch->exheader_header.arm11_system_local_caps.system_mode.Value(),
133 ResultStatus::Success); 78 ResultStatus::Success);
134} 79}
135 80
136ResultStatus AppLoader_NCCH::LoadExec() { 81ResultStatus AppLoader_NCCH::LoadExec(Kernel::SharedPtr<Kernel::Process>& process) {
137 using Kernel::SharedPtr;
138 using Kernel::CodeSet; 82 using Kernel::CodeSet;
83 using Kernel::SharedPtr;
139 84
140 if (!is_loaded) 85 if (!is_loaded)
141 return ResultStatus::ErrorNotLoaded; 86 return ResultStatus::ErrorNotLoaded;
142 87
143 std::vector<u8> code; 88 std::vector<u8> code;
144 if (ResultStatus::Success == ReadCode(code)) { 89 u64_le program_id;
90 if (ResultStatus::Success == ReadCode(code) &&
91 ResultStatus::Success == ReadProgramId(program_id)) {
145 std::string process_name = Common::StringFromFixedZeroTerminatedBuffer( 92 std::string process_name = Common::StringFromFixedZeroTerminatedBuffer(
146 (const char*)exheader_header.codeset_info.name, 8); 93 (const char*)overlay_ncch->exheader_header.codeset_info.name, 8);
147 94
148 SharedPtr<CodeSet> codeset = CodeSet::Create(process_name, ncch_header.program_id); 95 SharedPtr<CodeSet> codeset = CodeSet::Create(process_name, program_id);
149 96
150 codeset->code.offset = 0; 97 codeset->code.offset = 0;
151 codeset->code.addr = exheader_header.codeset_info.text.address; 98 codeset->code.addr = overlay_ncch->exheader_header.codeset_info.text.address;
152 codeset->code.size = exheader_header.codeset_info.text.num_max_pages * Memory::PAGE_SIZE; 99 codeset->code.size =
100 overlay_ncch->exheader_header.codeset_info.text.num_max_pages * Memory::PAGE_SIZE;
153 101
154 codeset->rodata.offset = codeset->code.offset + codeset->code.size; 102 codeset->rodata.offset = codeset->code.offset + codeset->code.size;
155 codeset->rodata.addr = exheader_header.codeset_info.ro.address; 103 codeset->rodata.addr = overlay_ncch->exheader_header.codeset_info.ro.address;
156 codeset->rodata.size = exheader_header.codeset_info.ro.num_max_pages * Memory::PAGE_SIZE; 104 codeset->rodata.size =
105 overlay_ncch->exheader_header.codeset_info.ro.num_max_pages * Memory::PAGE_SIZE;
157 106
158 // TODO(yuriks): Not sure if the bss size is added to the page-aligned .data size or just 107 // TODO(yuriks): Not sure if the bss size is added to the page-aligned .data size or just
159 // to the regular size. Playing it safe for now. 108 // to the regular size. Playing it safe for now.
160 u32 bss_page_size = (exheader_header.codeset_info.bss_size + 0xFFF) & ~0xFFF; 109 u32 bss_page_size = (overlay_ncch->exheader_header.codeset_info.bss_size + 0xFFF) & ~0xFFF;
161 code.resize(code.size() + bss_page_size, 0); 110 code.resize(code.size() + bss_page_size, 0);
162 111
163 codeset->data.offset = codeset->rodata.offset + codeset->rodata.size; 112 codeset->data.offset = codeset->rodata.offset + codeset->rodata.size;
164 codeset->data.addr = exheader_header.codeset_info.data.address; 113 codeset->data.addr = overlay_ncch->exheader_header.codeset_info.data.address;
165 codeset->data.size = 114 codeset->data.size =
166 exheader_header.codeset_info.data.num_max_pages * Memory::PAGE_SIZE + bss_page_size; 115 overlay_ncch->exheader_header.codeset_info.data.num_max_pages * Memory::PAGE_SIZE +
116 bss_page_size;
167 117
168 codeset->entrypoint = codeset->code.addr; 118 codeset->entrypoint = codeset->code.addr;
169 codeset->memory = std::make_shared<std::vector<u8>>(std::move(code)); 119 codeset->memory = std::make_shared<std::vector<u8>>(std::move(code));
170 120
171 Kernel::g_current_process = Kernel::Process::Create("main"); 121 process = Kernel::Process::Create("main");
172 Kernel::g_current_process->LoadModule(codeset, codeset->entrypoint); 122 process->LoadModule(codeset, codeset->entrypoint);
173 123
174 // Attach a resource limit to the process based on the resource limit category 124 // Attach a resource limit to the process based on the resource limit category
175 Kernel::g_current_process->resource_limit = 125 process->resource_limit =
176 Kernel::ResourceLimit::GetForCategory(static_cast<Kernel::ResourceLimitCategory>( 126 Kernel::ResourceLimit::GetForCategory(static_cast<Kernel::ResourceLimitCategory>(
177 exheader_header.arm11_system_local_caps.resource_limit_category)); 127 overlay_ncch->exheader_header.arm11_system_local_caps.resource_limit_category));
178 128
179 // Set the default CPU core for this process 129 // Set the default CPU core for this process
180 Kernel::g_current_process->ideal_processor = 130 process->ideal_processor =
181 exheader_header.arm11_system_local_caps.ideal_processor; 131 overlay_ncch->exheader_header.arm11_system_local_caps.ideal_processor;
182 132
183 // Copy data while converting endianness 133 // Copy data while converting endianness
184 std::array<u32, ARRAY_SIZE(exheader_header.arm11_kernel_caps.descriptors)> kernel_caps; 134 std::array<u32, ARRAY_SIZE(overlay_ncch->exheader_header.arm11_kernel_caps.descriptors)>
185 std::copy_n(exheader_header.arm11_kernel_caps.descriptors, kernel_caps.size(), 135 kernel_caps;
136 std::copy_n(overlay_ncch->exheader_header.arm11_kernel_caps.descriptors, kernel_caps.size(),
186 begin(kernel_caps)); 137 begin(kernel_caps));
187 Kernel::g_current_process->ParseKernelCaps(kernel_caps.data(), kernel_caps.size()); 138 process->ParseKernelCaps(kernel_caps.data(), kernel_caps.size());
188 139
189 s32 priority = exheader_header.arm11_system_local_caps.priority; 140 s32 priority = overlay_ncch->exheader_header.arm11_system_local_caps.priority;
190 u32 stack_size = exheader_header.codeset_info.stack_size; 141 u32 stack_size = overlay_ncch->exheader_header.codeset_info.stack_size;
191 Kernel::g_current_process->Run(codeset->entrypoint, priority, stack_size); 142 process->Run(codeset->entrypoint, priority, stack_size);
192 return ResultStatus::Success; 143 return ResultStatus::Success;
193 } 144 }
194 return ResultStatus::Error; 145 return ResultStatus::Error;
195} 146}
196 147
197ResultStatus AppLoader_NCCH::LoadSectionExeFS(const char* name, std::vector<u8>& buffer) {
198 if (!file.IsOpen())
199 return ResultStatus::Error;
200
201 ResultStatus result = LoadExeFS();
202 if (result != ResultStatus::Success)
203 return result;
204
205 LOG_DEBUG(Loader, "%d sections:", kMaxSections);
206 // Iterate through the ExeFs archive until we find a section with the specified name...
207 for (unsigned section_number = 0; section_number < kMaxSections; section_number++) {
208 const auto& section = exefs_header.section[section_number];
209
210 // Load the specified section...
211 if (strcmp(section.name, name) == 0) {
212 LOG_DEBUG(Loader, "%d - offset: 0x%08X, size: 0x%08X, name: %s", section_number,
213 section.offset, section.size, section.name);
214
215 s64 section_offset =
216 (section.offset + exefs_offset + sizeof(ExeFs_Header) + ncch_offset);
217 file.Seek(section_offset, SEEK_SET);
218
219 if (strcmp(section.name, ".code") == 0 && is_compressed) {
220 // Section is compressed, read compressed .code section...
221 std::unique_ptr<u8[]> temp_buffer;
222 try {
223 temp_buffer.reset(new u8[section.size]);
224 } catch (std::bad_alloc&) {
225 return ResultStatus::ErrorMemoryAllocationFailed;
226 }
227
228 if (file.ReadBytes(&temp_buffer[0], section.size) != section.size)
229 return ResultStatus::Error;
230
231 // Decompress .code section...
232 u32 decompressed_size = LZSS_GetDecompressedSize(&temp_buffer[0], section.size);
233 buffer.resize(decompressed_size);
234 if (!LZSS_Decompress(&temp_buffer[0], section.size, &buffer[0], decompressed_size))
235 return ResultStatus::ErrorInvalidFormat;
236 } else {
237 // Section is uncompressed...
238 buffer.resize(section.size);
239 if (file.ReadBytes(&buffer[0], section.size) != section.size)
240 return ResultStatus::Error;
241 }
242 return ResultStatus::Success;
243 }
244 }
245 return ResultStatus::ErrorNotUsed;
246}
247
248ResultStatus AppLoader_NCCH::LoadExeFS() {
249 if (is_exefs_loaded)
250 return ResultStatus::Success;
251
252 if (!file.IsOpen())
253 return ResultStatus::Error;
254
255 // Reset read pointer in case this file has been read before.
256 file.Seek(0, SEEK_SET);
257
258 if (file.ReadBytes(&ncch_header, sizeof(NCCH_Header)) != sizeof(NCCH_Header))
259 return ResultStatus::Error;
260
261 // Skip NCSD header and load first NCCH (NCSD is just a container of NCCH files)...
262 if (MakeMagic('N', 'C', 'S', 'D') == ncch_header.magic) {
263 LOG_DEBUG(Loader, "Only loading the first (bootable) NCCH within the NCSD file!");
264 ncch_offset = 0x4000;
265 file.Seek(ncch_offset, SEEK_SET);
266 file.ReadBytes(&ncch_header, sizeof(NCCH_Header));
267 }
268
269 // Verify we are loading the correct file type...
270 if (MakeMagic('N', 'C', 'C', 'H') != ncch_header.magic)
271 return ResultStatus::ErrorInvalidFormat;
272
273 // Read ExHeader...
274
275 if (file.ReadBytes(&exheader_header, sizeof(ExHeader_Header)) != sizeof(ExHeader_Header))
276 return ResultStatus::Error;
277
278 is_compressed = (exheader_header.codeset_info.flags.flag & 1) == 1;
279 entry_point = exheader_header.codeset_info.text.address;
280 code_size = exheader_header.codeset_info.text.code_size;
281 stack_size = exheader_header.codeset_info.stack_size;
282 bss_size = exheader_header.codeset_info.bss_size;
283 core_version = exheader_header.arm11_system_local_caps.core_version;
284 priority = exheader_header.arm11_system_local_caps.priority;
285 resource_limit_category = exheader_header.arm11_system_local_caps.resource_limit_category;
286
287 LOG_DEBUG(Loader, "Name: %s", exheader_header.codeset_info.name);
288 LOG_DEBUG(Loader, "Program ID: %016" PRIX64, ncch_header.program_id);
289 LOG_DEBUG(Loader, "Code compressed: %s", is_compressed ? "yes" : "no");
290 LOG_DEBUG(Loader, "Entry point: 0x%08X", entry_point);
291 LOG_DEBUG(Loader, "Code size: 0x%08X", code_size);
292 LOG_DEBUG(Loader, "Stack size: 0x%08X", stack_size);
293 LOG_DEBUG(Loader, "Bss size: 0x%08X", bss_size);
294 LOG_DEBUG(Loader, "Core version: %d", core_version);
295 LOG_DEBUG(Loader, "Thread priority: 0x%X", priority);
296 LOG_DEBUG(Loader, "Resource limit category: %d", resource_limit_category);
297 LOG_DEBUG(Loader, "System Mode: %d",
298 static_cast<int>(exheader_header.arm11_system_local_caps.system_mode));
299
300 if (exheader_header.arm11_system_local_caps.program_id != ncch_header.program_id) {
301 LOG_ERROR(Loader, "ExHeader Program ID mismatch: the ROM is probably encrypted.");
302 return ResultStatus::ErrorEncrypted;
303 }
304
305 // Read ExeFS...
306
307 exefs_offset = ncch_header.exefs_offset * kBlockSize;
308 u32 exefs_size = ncch_header.exefs_size * kBlockSize;
309
310 LOG_DEBUG(Loader, "ExeFS offset: 0x%08X", exefs_offset);
311 LOG_DEBUG(Loader, "ExeFS size: 0x%08X", exefs_size);
312
313 file.Seek(exefs_offset + ncch_offset, SEEK_SET);
314 if (file.ReadBytes(&exefs_header, sizeof(ExeFs_Header)) != sizeof(ExeFs_Header))
315 return ResultStatus::Error;
316
317 is_exefs_loaded = true;
318 return ResultStatus::Success;
319}
320
321void AppLoader_NCCH::ParseRegionLockoutInfo() { 148void AppLoader_NCCH::ParseRegionLockoutInfo() {
322 std::vector<u8> smdh_buffer; 149 std::vector<u8> smdh_buffer;
323 if (ReadIcon(smdh_buffer) == ResultStatus::Success && smdh_buffer.size() >= sizeof(SMDH)) { 150 if (ReadIcon(smdh_buffer) == ResultStatus::Success && smdh_buffer.size() >= sizeof(SMDH)) {
@@ -335,28 +162,43 @@ void AppLoader_NCCH::ParseRegionLockoutInfo() {
335 } 162 }
336} 163}
337 164
338ResultStatus AppLoader_NCCH::Load() { 165ResultStatus AppLoader_NCCH::Load(Kernel::SharedPtr<Kernel::Process>& process) {
166 u64_le ncch_program_id;
167
339 if (is_loaded) 168 if (is_loaded)
340 return ResultStatus::ErrorAlreadyLoaded; 169 return ResultStatus::ErrorAlreadyLoaded;
341 170
342 ResultStatus result = LoadExeFS(); 171 ResultStatus result = base_ncch.Load();
343 if (result != ResultStatus::Success) 172 if (result != ResultStatus::Success)
344 return result; 173 return result;
345 174
346 std::string program_id{Common::StringFromFormat("%016" PRIX64, ncch_header.program_id)}; 175 ReadProgramId(ncch_program_id);
176 std::string program_id{Common::StringFromFormat("%016" PRIX64, ncch_program_id)};
347 177
348 LOG_INFO(Loader, "Program ID: %s", program_id.c_str()); 178 LOG_INFO(Loader, "Program ID: %s", program_id.c_str());
349 179
180 update_ncch.OpenFile(GetUpdateNCCHPath(ncch_program_id));
181 result = update_ncch.Load();
182 if (result == ResultStatus::Success) {
183 overlay_ncch = &update_ncch;
184 }
185
350 Core::Telemetry().AddField(Telemetry::FieldType::Session, "ProgramId", program_id); 186 Core::Telemetry().AddField(Telemetry::FieldType::Session, "ProgramId", program_id);
351 187
188 if (auto room_member = Network::GetRoomMember().lock()) {
189 Network::GameInfo game_info;
190 ReadTitle(game_info.name);
191 game_info.id = ncch_program_id;
192 room_member->SendGameInfo(game_info);
193 }
194
352 is_loaded = true; // Set state to loaded 195 is_loaded = true; // Set state to loaded
353 196
354 result = LoadExec(); // Load the executable into memory for booting 197 result = LoadExec(process); // Load the executable into memory for booting
355 if (ResultStatus::Success != result) 198 if (ResultStatus::Success != result)
356 return result; 199 return result;
357 200
358 Service::FS::RegisterArchiveType(std::make_unique<FileSys::ArchiveFactory_SelfNCCH>(*this), 201 Service::FS::RegisterSelfNCCH(*this);
359 Service::FS::ArchiveIdCode::SelfNCCH);
360 202
361 ParseRegionLockoutInfo(); 203 ParseRegionLockoutInfo();
362 204
@@ -364,61 +206,58 @@ ResultStatus AppLoader_NCCH::Load() {
364} 206}
365 207
366ResultStatus AppLoader_NCCH::ReadCode(std::vector<u8>& buffer) { 208ResultStatus AppLoader_NCCH::ReadCode(std::vector<u8>& buffer) {
367 return LoadSectionExeFS(".code", buffer); 209 return overlay_ncch->LoadSectionExeFS(".code", buffer);
368} 210}
369 211
370ResultStatus AppLoader_NCCH::ReadIcon(std::vector<u8>& buffer) { 212ResultStatus AppLoader_NCCH::ReadIcon(std::vector<u8>& buffer) {
371 return LoadSectionExeFS("icon", buffer); 213 return overlay_ncch->LoadSectionExeFS("icon", buffer);
372} 214}
373 215
374ResultStatus AppLoader_NCCH::ReadBanner(std::vector<u8>& buffer) { 216ResultStatus AppLoader_NCCH::ReadBanner(std::vector<u8>& buffer) {
375 return LoadSectionExeFS("banner", buffer); 217 return overlay_ncch->LoadSectionExeFS("banner", buffer);
376} 218}
377 219
378ResultStatus AppLoader_NCCH::ReadLogo(std::vector<u8>& buffer) { 220ResultStatus AppLoader_NCCH::ReadLogo(std::vector<u8>& buffer) {
379 return LoadSectionExeFS("logo", buffer); 221 return overlay_ncch->LoadSectionExeFS("logo", buffer);
380} 222}
381 223
382ResultStatus AppLoader_NCCH::ReadProgramId(u64& out_program_id) { 224ResultStatus AppLoader_NCCH::ReadProgramId(u64& out_program_id) {
383 if (!file.IsOpen()) 225 ResultStatus result = base_ncch.ReadProgramId(out_program_id);
384 return ResultStatus::Error;
385
386 ResultStatus result = LoadExeFS();
387 if (result != ResultStatus::Success) 226 if (result != ResultStatus::Success)
388 return result; 227 return result;
389 228
390 out_program_id = ncch_header.program_id;
391 return ResultStatus::Success; 229 return ResultStatus::Success;
392} 230}
393 231
394ResultStatus AppLoader_NCCH::ReadRomFS(std::shared_ptr<FileUtil::IOFile>& romfs_file, u64& offset, 232ResultStatus AppLoader_NCCH::ReadRomFS(std::shared_ptr<FileUtil::IOFile>& romfs_file, u64& offset,
395 u64& size) { 233 u64& size) {
396 if (!file.IsOpen()) 234 return base_ncch.ReadRomFS(romfs_file, offset, size);
397 return ResultStatus::Error; 235}
398 236
399 // Check if the NCCH has a RomFS... 237ResultStatus AppLoader_NCCH::ReadUpdateRomFS(std::shared_ptr<FileUtil::IOFile>& romfs_file,
400 if (ncch_header.romfs_offset != 0 && ncch_header.romfs_size != 0) { 238 u64& offset, u64& size) {
401 u32 romfs_offset = ncch_offset + (ncch_header.romfs_offset * kBlockSize) + 0x1000; 239 ResultStatus result = update_ncch.ReadRomFS(romfs_file, offset, size);
402 u32 romfs_size = (ncch_header.romfs_size * kBlockSize) - 0x1000;
403 240
404 LOG_DEBUG(Loader, "RomFS offset: 0x%08X", romfs_offset); 241 if (result != ResultStatus::Success)
405 LOG_DEBUG(Loader, "RomFS size: 0x%08X", romfs_size); 242 return base_ncch.ReadRomFS(romfs_file, offset, size);
243}
406 244
407 if (file.GetSize() < romfs_offset + romfs_size) 245ResultStatus AppLoader_NCCH::ReadTitle(std::string& title) {
408 return ResultStatus::Error; 246 std::vector<u8> data;
247 Loader::SMDH smdh;
248 ReadIcon(data);
409 249
410 // We reopen the file, to allow its position to be independent from file's 250 if (!Loader::IsValidSMDH(data)) {
411 romfs_file = std::make_shared<FileUtil::IOFile>(filepath, "rb"); 251 return ResultStatus::ErrorInvalidFormat;
412 if (!romfs_file->IsOpen()) 252 }
413 return ResultStatus::Error;
414 253
415 offset = romfs_offset; 254 memcpy(&smdh, data.data(), sizeof(Loader::SMDH));
416 size = romfs_size;
417 255
418 return ResultStatus::Success; 256 const auto& short_title = smdh.GetShortTitle(SMDH::TitleLanguage::English);
419 } 257 auto title_end = std::find(short_title.begin(), short_title.end(), u'\0');
420 LOG_DEBUG(Loader, "NCCH has no RomFS"); 258 title = Common::UTF16ToUTF8(std::u16string{short_title.begin(), title_end});
421 return ResultStatus::ErrorNotUsed; 259
260 return ResultStatus::Success;
422} 261}
423 262
424} // namespace Loader 263} // namespace Loader
diff --git a/src/core/loader/ncch.h b/src/core/loader/ncch.h
index 0ebd47fd5..09230ae33 100644
--- a/src/core/loader/ncch.h
+++ b/src/core/loader/ncch.h
@@ -5,155 +5,12 @@
5#pragma once 5#pragma once
6 6
7#include <memory> 7#include <memory>
8#include "common/bit_field.h"
9#include "common/common_types.h" 8#include "common/common_types.h"
10#include "common/swap.h" 9#include "common/swap.h"
10#include "core/file_sys/ncch_container.h"
11#include "core/loader/loader.h" 11#include "core/loader/loader.h"
12 12
13//////////////////////////////////////////////////////////////////////////////////////////////////// 13////////////////////////////////////////////////////////////////////////////////////////////////////
14/// NCCH header (Note: "NCCH" appears to be a publicly unknown acronym)
15
16struct NCCH_Header {
17 u8 signature[0x100];
18 u32_le magic;
19 u32_le content_size;
20 u8 partition_id[8];
21 u16_le maker_code;
22 u16_le version;
23 u8 reserved_0[4];
24 u64_le program_id;
25 u8 reserved_1[0x10];
26 u8 logo_region_hash[0x20];
27 u8 product_code[0x10];
28 u8 extended_header_hash[0x20];
29 u32_le extended_header_size;
30 u8 reserved_2[4];
31 u8 flags[8];
32 u32_le plain_region_offset;
33 u32_le plain_region_size;
34 u32_le logo_region_offset;
35 u32_le logo_region_size;
36 u32_le exefs_offset;
37 u32_le exefs_size;
38 u32_le exefs_hash_region_size;
39 u8 reserved_3[4];
40 u32_le romfs_offset;
41 u32_le romfs_size;
42 u32_le romfs_hash_region_size;
43 u8 reserved_4[4];
44 u8 exefs_super_block_hash[0x20];
45 u8 romfs_super_block_hash[0x20];
46};
47
48static_assert(sizeof(NCCH_Header) == 0x200, "NCCH header structure size is wrong");
49
50////////////////////////////////////////////////////////////////////////////////////////////////////
51// ExeFS (executable file system) headers
52
53struct ExeFs_SectionHeader {
54 char name[8];
55 u32 offset;
56 u32 size;
57};
58
59struct ExeFs_Header {
60 ExeFs_SectionHeader section[8];
61 u8 reserved[0x80];
62 u8 hashes[8][0x20];
63};
64
65////////////////////////////////////////////////////////////////////////////////////////////////////
66// ExHeader (executable file system header) headers
67
68struct ExHeader_SystemInfoFlags {
69 u8 reserved[5];
70 u8 flag;
71 u8 remaster_version[2];
72};
73
74struct ExHeader_CodeSegmentInfo {
75 u32 address;
76 u32 num_max_pages;
77 u32 code_size;
78};
79
80struct ExHeader_CodeSetInfo {
81 u8 name[8];
82 ExHeader_SystemInfoFlags flags;
83 ExHeader_CodeSegmentInfo text;
84 u32 stack_size;
85 ExHeader_CodeSegmentInfo ro;
86 u8 reserved[4];
87 ExHeader_CodeSegmentInfo data;
88 u32 bss_size;
89};
90
91struct ExHeader_DependencyList {
92 u8 program_id[0x30][8];
93};
94
95struct ExHeader_SystemInfo {
96 u64 save_data_size;
97 u8 jump_id[8];
98 u8 reserved_2[0x30];
99};
100
101struct ExHeader_StorageInfo {
102 u8 ext_save_data_id[8];
103 u8 system_save_data_id[8];
104 u8 reserved[8];
105 u8 access_info[7];
106 u8 other_attributes;
107};
108
109struct ExHeader_ARM11_SystemLocalCaps {
110 u64_le program_id;
111 u32_le core_version;
112 u8 reserved_flags[2];
113 union {
114 u8 flags0;
115 BitField<0, 2, u8> ideal_processor;
116 BitField<2, 2, u8> affinity_mask;
117 BitField<4, 4, u8> system_mode;
118 };
119 u8 priority;
120 u8 resource_limit_descriptor[0x10][2];
121 ExHeader_StorageInfo storage_info;
122 u8 service_access_control[0x20][8];
123 u8 ex_service_access_control[0x2][8];
124 u8 reserved[0xf];
125 u8 resource_limit_category;
126};
127
128struct ExHeader_ARM11_KernelCaps {
129 u32_le descriptors[28];
130 u8 reserved[0x10];
131};
132
133struct ExHeader_ARM9_AccessControl {
134 u8 descriptors[15];
135 u8 descversion;
136};
137
138struct ExHeader_Header {
139 ExHeader_CodeSetInfo codeset_info;
140 ExHeader_DependencyList dependency_list;
141 ExHeader_SystemInfo system_info;
142 ExHeader_ARM11_SystemLocalCaps arm11_system_local_caps;
143 ExHeader_ARM11_KernelCaps arm11_kernel_caps;
144 ExHeader_ARM9_AccessControl arm9_access_control;
145 struct {
146 u8 signature[0x100];
147 u8 ncch_public_key_modulus[0x100];
148 ExHeader_ARM11_SystemLocalCaps arm11_system_local_caps;
149 ExHeader_ARM11_KernelCaps arm11_kernel_caps;
150 ExHeader_ARM9_AccessControl arm9_access_control;
151 } access_desc;
152};
153
154static_assert(sizeof(ExHeader_Header) == 0x800, "ExHeader structure size is wrong");
155
156////////////////////////////////////////////////////////////////////////////////////////////////////
157// Loader namespace 14// Loader namespace
158 15
159namespace Loader { 16namespace Loader {
@@ -162,7 +19,8 @@ namespace Loader {
162class AppLoader_NCCH final : public AppLoader { 19class AppLoader_NCCH final : public AppLoader {
163public: 20public:
164 AppLoader_NCCH(FileUtil::IOFile&& file, const std::string& filepath) 21 AppLoader_NCCH(FileUtil::IOFile&& file, const std::string& filepath)
165 : AppLoader(std::move(file)), filepath(filepath) {} 22 : AppLoader(std::move(file)), filepath(filepath), base_ncch(filepath),
23 overlay_ncch(&base_ncch) {}
166 24
167 /** 25 /**
168 * Returns the type of the file 26 * Returns the type of the file
@@ -175,7 +33,7 @@ public:
175 return IdentifyType(file); 33 return IdentifyType(file);
176 } 34 }
177 35
178 ResultStatus Load() override; 36 ResultStatus Load(Kernel::SharedPtr<Kernel::Process>& process) override;
179 37
180 /** 38 /**
181 * Loads the Exheader and returns the system mode for this application. 39 * Loads the Exheader and returns the system mode for this application.
@@ -191,63 +49,30 @@ public:
191 49
192 ResultStatus ReadLogo(std::vector<u8>& buffer) override; 50 ResultStatus ReadLogo(std::vector<u8>& buffer) override;
193 51
194 /**
195 * Get the program id of the application
196 * @param out_program_id Reference to store program id into
197 * @return ResultStatus result of function
198 */
199 ResultStatus ReadProgramId(u64& out_program_id) override; 52 ResultStatus ReadProgramId(u64& out_program_id) override;
200 53
201 /**
202 * Get the RomFS of the application
203 * @param romfs_file Reference to buffer to store data
204 * @param offset Offset in the file to the RomFS
205 * @param size Size of the RomFS in bytes
206 * @return ResultStatus result of function
207 */
208 ResultStatus ReadRomFS(std::shared_ptr<FileUtil::IOFile>& romfs_file, u64& offset, 54 ResultStatus ReadRomFS(std::shared_ptr<FileUtil::IOFile>& romfs_file, u64& offset,
209 u64& size) override; 55 u64& size) override;
210 56
211private: 57 ResultStatus ReadUpdateRomFS(std::shared_ptr<FileUtil::IOFile>& romfs_file, u64& offset,
212 /** 58 u64& size) override;
213 * Reads an application ExeFS section of an NCCH file into AppLoader (e.g. .code, .logo, etc.)
214 * @param name Name of section to read out of NCCH file
215 * @param buffer Vector to read data into
216 * @return ResultStatus result of function
217 */
218 ResultStatus LoadSectionExeFS(const char* name, std::vector<u8>& buffer);
219 59
220 /** 60 ResultStatus ReadTitle(std::string& title) override;
221 * Loads .code section into memory for booting
222 * @return ResultStatus result of function
223 */
224 ResultStatus LoadExec();
225 61
62private:
226 /** 63 /**
227 * Ensure ExeFS is loaded and ready for reading sections 64 * Loads .code section into memory for booting
65 * @param process The newly created process
228 * @return ResultStatus result of function 66 * @return ResultStatus result of function
229 */ 67 */
230 ResultStatus LoadExeFS(); 68 ResultStatus LoadExec(Kernel::SharedPtr<Kernel::Process>& process);
231 69
232 /// Reads the region lockout info in the SMDH and send it to CFG service 70 /// Reads the region lockout info in the SMDH and send it to CFG service
233 void ParseRegionLockoutInfo(); 71 void ParseRegionLockoutInfo();
234 72
235 bool is_exefs_loaded = false; 73 FileSys::NCCHContainer base_ncch;
236 bool is_compressed = false; 74 FileSys::NCCHContainer update_ncch;
237 75 FileSys::NCCHContainer* overlay_ncch;
238 u32 entry_point = 0;
239 u32 code_size = 0;
240 u32 stack_size = 0;
241 u32 bss_size = 0;
242 u32 core_version = 0;
243 u8 priority = 0;
244 u8 resource_limit_category = 0;
245 u32 ncch_offset = 0; // Offset to NCCH header, can be 0 or after NCSD header
246 u32 exefs_offset = 0;
247
248 NCCH_Header ncch_header;
249 ExeFs_Header exefs_header;
250 ExHeader_Header exheader_header;
251 76
252 std::string filepath; 77 std::string filepath;
253}; 78};
diff --git a/src/core/loader/nro.cpp b/src/core/loader/nro.cpp
index 753e7e08b..24c2c55a9 100644
--- a/src/core/loader/nro.cpp
+++ b/src/core/loader/nro.cpp
@@ -132,7 +132,7 @@ bool AppLoader_NRO::LoadNro(const std::string& path, VAddr load_base) {
132 return true; 132 return true;
133} 133}
134 134
135ResultStatus AppLoader_NRO::Load() { 135ResultStatus AppLoader_NRO::Load(Kernel::SharedPtr<Kernel::Process>& process) {
136 if (is_loaded) { 136 if (is_loaded) {
137 return ResultStatus::ErrorAlreadyLoaded; 137 return ResultStatus::ErrorAlreadyLoaded;
138 } 138 }
@@ -142,16 +142,16 @@ ResultStatus AppLoader_NRO::Load() {
142 142
143 // Load and relocate "main" and "sdk" NSO 143 // Load and relocate "main" and "sdk" NSO
144 static constexpr VAddr base_addr{Memory::PROCESS_IMAGE_VADDR}; 144 static constexpr VAddr base_addr{Memory::PROCESS_IMAGE_VADDR};
145 Kernel::g_current_process = Kernel::Process::Create("main"); 145 process = Kernel::Process::Create("main");
146 if (!LoadNro(filepath, base_addr)) { 146 if (!LoadNro(filepath, base_addr)) {
147 return ResultStatus::ErrorInvalidFormat; 147 return ResultStatus::ErrorInvalidFormat;
148 } 148 }
149 149
150 Kernel::g_current_process->svc_access_mask.set(); 150 process->svc_access_mask.set();
151 Kernel::g_current_process->address_mappings = default_address_mappings; 151 process->address_mappings = default_address_mappings;
152 Kernel::g_current_process->resource_limit = 152 process->resource_limit =
153 Kernel::ResourceLimit::GetForCategory(Kernel::ResourceLimitCategory::APPLICATION); 153 Kernel::ResourceLimit::GetForCategory(Kernel::ResourceLimitCategory::APPLICATION);
154 Kernel::g_current_process->Run(base_addr, 48, Kernel::DEFAULT_STACK_SIZE); 154 process->Run(base_addr, 48, Kernel::DEFAULT_STACK_SIZE);
155 155
156 ResolveImports(); 156 ResolveImports();
157 157
diff --git a/src/core/loader/nro.h b/src/core/loader/nro.h
index c3c7622fd..c85768c5b 100644
--- a/src/core/loader/nro.h
+++ b/src/core/loader/nro.h
@@ -31,7 +31,7 @@ public:
31 return IdentifyType(file); 31 return IdentifyType(file);
32 } 32 }
33 33
34 ResultStatus Load() override; 34 ResultStatus Load(Kernel::SharedPtr<Kernel::Process>& process) override;
35 35
36private: 36private:
37 bool LoadNro(const std::string& path, VAddr load_base); 37 bool LoadNro(const std::string& path, VAddr load_base);
diff --git a/src/core/loader/nso.cpp b/src/core/loader/nso.cpp
index ac8d12ecc..b1b57d0c0 100644
--- a/src/core/loader/nso.cpp
+++ b/src/core/loader/nso.cpp
@@ -144,7 +144,7 @@ VAddr AppLoader_NSO::LoadNso(const std::string& path, VAddr load_base, bool relo
144 return load_base + image_size; 144 return load_base + image_size;
145} 145}
146 146
147ResultStatus AppLoader_NSO::Load() { 147ResultStatus AppLoader_NSO::Load(Kernel::SharedPtr<Kernel::Process>& process) {
148 if (is_loaded) { 148 if (is_loaded) {
149 return ResultStatus::ErrorAlreadyLoaded; 149 return ResultStatus::ErrorAlreadyLoaded;
150 } 150 }
@@ -154,7 +154,7 @@ ResultStatus AppLoader_NSO::Load() {
154 154
155 // Load and relocate "rtld" NSO 155 // Load and relocate "rtld" NSO
156 static constexpr VAddr base_addr{Memory::PROCESS_IMAGE_VADDR}; 156 static constexpr VAddr base_addr{Memory::PROCESS_IMAGE_VADDR};
157 Kernel::g_current_process = Kernel::Process::Create("main"); 157 process = Kernel::Process::Create("main");
158 VAddr next_base_addr{LoadNso(filepath, base_addr)}; 158 VAddr next_base_addr{LoadNso(filepath, base_addr)};
159 if (!next_base_addr) { 159 if (!next_base_addr) {
160 return ResultStatus::ErrorInvalidFormat; 160 return ResultStatus::ErrorInvalidFormat;
@@ -170,11 +170,11 @@ ResultStatus AppLoader_NSO::Load() {
170 } 170 }
171 } 171 }
172 172
173 Kernel::g_current_process->svc_access_mask.set(); 173 process->svc_access_mask.set();
174 Kernel::g_current_process->address_mappings = default_address_mappings; 174 process->address_mappings = default_address_mappings;
175 Kernel::g_current_process->resource_limit = 175 process->resource_limit =
176 Kernel::ResourceLimit::GetForCategory(Kernel::ResourceLimitCategory::APPLICATION); 176 Kernel::ResourceLimit::GetForCategory(Kernel::ResourceLimitCategory::APPLICATION);
177 Kernel::g_current_process->Run(base_addr, 48, Kernel::DEFAULT_STACK_SIZE); 177 process->Run(base_addr, 48, Kernel::DEFAULT_STACK_SIZE);
178 178
179 ResolveImports(); 179 ResolveImports();
180 180
diff --git a/src/core/loader/nso.h b/src/core/loader/nso.h
index c29803d81..b6b86c209 100644
--- a/src/core/loader/nso.h
+++ b/src/core/loader/nso.h
@@ -32,7 +32,7 @@ public:
32 return IdentifyType(file); 32 return IdentifyType(file);
33 } 33 }
34 34
35 ResultStatus Load() override; 35 ResultStatus Load(Kernel::SharedPtr<Kernel::Process>& process) override;
36 36
37private: 37private:
38 VAddr LoadNso(const std::string& path, VAddr load_base, bool relocate = false); 38 VAddr LoadNso(const std::string& path, VAddr load_base, bool relocate = false);
diff --git a/src/core/memory.cpp b/src/core/memory.cpp
index ebe16b030..462d68386 100644
--- a/src/core/memory.cpp
+++ b/src/core/memory.cpp
@@ -4,95 +4,53 @@
4 4
5#include <array> 5#include <array>
6#include <cstring> 6#include <cstring>
7#include "audio_core/audio_core.h"
7#include "common/assert.h" 8#include "common/assert.h"
8#include "common/common_types.h" 9#include "common/common_types.h"
9#include "common/logging/log.h" 10#include "common/logging/log.h"
10#include "common/swap.h" 11#include "common/swap.h"
12#include "core/arm/arm_interface.h"
13#include "core/core.h"
14#include "core/hle/kernel/memory.h"
11#include "core/hle/kernel/process.h" 15#include "core/hle/kernel/process.h"
16#include "core/hle/lock.h"
12#include "core/memory.h" 17#include "core/memory.h"
13#include "core/memory_setup.h" 18#include "core/memory_setup.h"
14#include "core/mmio.h"
15#include "video_core/renderer_base.h" 19#include "video_core/renderer_base.h"
16#include "video_core/video_core.h" 20#include "video_core/video_core.h"
17 21
18namespace Memory { 22namespace Memory {
19 23
20enum class PageType { 24static std::array<u8, Memory::VRAM_SIZE> vram;
21 /// Page is unmapped and should cause an access error. 25static std::array<u8, Memory::N3DS_EXTRA_RAM_SIZE> n3ds_extra_ram;
22 Unmapped,
23 /// Page is mapped to regular memory. This is the only type you can get pointers to.
24 Memory,
25 /// Page is mapped to regular memory, but also needs to check for rasterizer cache flushing and
26 /// invalidation
27 RasterizerCachedMemory,
28 /// Page is mapped to a I/O region. Writing and reading to this page is handled by functions.
29 Special,
30 /// Page is mapped to a I/O region, but also needs to check for rasterizer cache flushing and
31 /// invalidation
32 RasterizerCachedSpecial,
33};
34
35struct SpecialRegion {
36 VAddr base;
37 u64 size;
38 MMIORegionPointer handler;
39};
40 26
41/** 27static PageTable* current_page_table = nullptr;
42 * A (reasonably) fast way of allowing switchable and remappable process address spaces. It loosely 28
43 * mimics the way a real CPU page table works, but instead is optimized for minimal decoding and 29void SetCurrentPageTable(PageTable* page_table) {
44 * fetching requirements when accessing. In the usual case of an access to regular memory, it only 30 current_page_table = page_table;
45 * requires an indexed fetch and a check for NULL. 31 if (Core::System::GetInstance().IsPoweredOn()) {
46 */ 32 Core::CPU().PageTableChanged();
47struct PageTable { 33 }
48 /** 34}
49 * Array of memory pointers backing each page. An entry can only be non-null if the 35
50 * corresponding entry in the `attributes` array is of type `Memory`. 36PageTable* GetCurrentPageTable() {
51 */ 37 return current_page_table;
52 std::map<u64, u8*> pointers; 38}
53 39
54 /** 40static void MapPages(PageTable& page_table, VAddr base, u32 size, u8* memory, PageType type) {
55 * Contains MMIO handlers that back memory regions whose entries in the `attribute` array is of
56 * type `Special`.
57 */
58 std::vector<SpecialRegion> special_regions;
59
60 /**
61 * Array of fine grained page attributes. If it is set to any value other than `Memory`, then
62 * the corresponding entry in `pointers` MUST be set to null.
63 */
64 std::map<u64, PageType> attributes;
65
66 /**
67 * Indicates the number of externally cached resources touching a page that should be
68 * flushed before the memory is accessed
69 */
70 std::map<u64, u8> cached_res_count;
71};
72
73/// Singular page table used for the singleton process
74static PageTable main_page_table;
75/// Currently active page table
76static PageTable* current_page_table = &main_page_table;
77
78//std::array<u8*, PAGE_TABLE_NUM_ENTRIES>* GetCurrentPageTablePointers() {
79// return &current_page_table->pointers;
80//}
81
82static void MapPages(u64 base, u64 size, u8* memory, PageType type) {
83 LOG_DEBUG(HW_Memory, "Mapping %p onto %08X-%08X", memory, base * PAGE_SIZE, 41 LOG_DEBUG(HW_Memory, "Mapping %p onto %08X-%08X", memory, base * PAGE_SIZE,
84 (base + size) * PAGE_SIZE); 42 (base + size) * PAGE_SIZE);
85 43
86 RasterizerFlushVirtualRegion(base << PAGE_BITS, size * PAGE_SIZE, 44 RasterizerFlushVirtualRegion(base << PAGE_BITS, size * PAGE_SIZE,
87 FlushMode::FlushAndInvalidate); 45 FlushMode::FlushAndInvalidate);
88 46
89 u64 end = base + size; 47 VAddr end = base + size;
90 while (base != end) { 48 while (base != end) {
91 ASSERT_MSG(base < PAGE_TABLE_NUM_ENTRIES, "out of range mapping at %08X", base); 49 ASSERT_MSG(base < PAGE_TABLE_NUM_ENTRIES, "out of range mapping at %08X", base);
92 50
93 current_page_table->attributes[base] = type; 51 page_table.attributes[base] = type;
94 current_page_table->pointers[base] = memory; 52 page_table.pointers[base] = memory;
95 current_page_table->cached_res_count[base] = 0; 53 page_table.cached_res_count[base] = 0;
96 54
97 base += 1; 55 base += 1;
98 if (memory != nullptr) 56 if (memory != nullptr)
@@ -100,40 +58,34 @@ static void MapPages(u64 base, u64 size, u8* memory, PageType type) {
100 } 58 }
101} 59}
102 60
103void InitMemoryMap() { 61void MapMemoryRegion(PageTable& page_table, VAddr base, u32 size, u8* target) {
104 //main_page_table.pointers.fill(nullptr);
105 //main_page_table.attributes.fill(PageType::Unmapped);
106 //main_page_table.cached_res_count.fill(0);
107}
108
109void MapMemoryRegion(VAddr base, u64 size, u8* target) {
110 ASSERT_MSG((size & PAGE_MASK) == 0, "non-page aligned size: %08X", size); 62 ASSERT_MSG((size & PAGE_MASK) == 0, "non-page aligned size: %08X", size);
111 ASSERT_MSG((base & PAGE_MASK) == 0, "non-page aligned base: %08X", base); 63 ASSERT_MSG((base & PAGE_MASK) == 0, "non-page aligned base: %08X", base);
112 MapPages(base / PAGE_SIZE, size / PAGE_SIZE, target, PageType::Memory); 64 MapPages(page_table, base / PAGE_SIZE, size / PAGE_SIZE, target, PageType::Memory);
113} 65}
114 66
115void MapIoRegion(VAddr base, u64 size, MMIORegionPointer mmio_handler) { 67void MapIoRegion(PageTable& page_table, VAddr base, u32 size, MMIORegionPointer mmio_handler) {
116 ASSERT_MSG((size & PAGE_MASK) == 0, "non-page aligned size: %08X", size); 68 ASSERT_MSG((size & PAGE_MASK) == 0, "non-page aligned size: %08X", size);
117 ASSERT_MSG((base & PAGE_MASK) == 0, "non-page aligned base: %08X", base); 69 ASSERT_MSG((base & PAGE_MASK) == 0, "non-page aligned base: %08X", base);
118 MapPages(base / PAGE_SIZE, size / PAGE_SIZE, nullptr, PageType::Special); 70 MapPages(page_table, base / PAGE_SIZE, size / PAGE_SIZE, nullptr, PageType::Special);
119 71
120 current_page_table->special_regions.emplace_back(SpecialRegion{base, size, mmio_handler}); 72 page_table.special_regions.emplace_back(SpecialRegion{base, size, mmio_handler});
121} 73}
122 74
123void UnmapRegion(VAddr base, u64 size) { 75void UnmapRegion(PageTable& page_table, VAddr base, u32 size) {
124 ASSERT_MSG((size & PAGE_MASK) == 0, "non-page aligned size: %08X", size); 76 ASSERT_MSG((size & PAGE_MASK) == 0, "non-page aligned size: %08X", size);
125 ASSERT_MSG((base & PAGE_MASK) == 0, "non-page aligned base: %08X", base); 77 ASSERT_MSG((base & PAGE_MASK) == 0, "non-page aligned base: %08X", base);
126 MapPages(base / PAGE_SIZE, size / PAGE_SIZE, nullptr, PageType::Unmapped); 78 MapPages(page_table, base / PAGE_SIZE, size / PAGE_SIZE, nullptr, PageType::Unmapped);
127} 79}
128 80
129/** 81/**
130 * Gets a pointer to the exact memory at the virtual address (i.e. not page aligned) 82 * Gets a pointer to the exact memory at the virtual address (i.e. not page aligned)
131 * using a VMA from the current process 83 * using a VMA from the current process
132 */ 84 */
133static u8* GetPointerFromVMA(VAddr vaddr) { 85static u8* GetPointerFromVMA(const Kernel::Process& process, VAddr vaddr) {
134 u8* direct_pointer = nullptr; 86 u8* direct_pointer = nullptr;
135 87
136 auto& vm_manager = Kernel::g_current_process->vm_manager; 88 auto& vm_manager = process.vm_manager;
137 89
138 auto it = vm_manager.FindVMA(vaddr); 90 auto it = vm_manager.FindVMA(vaddr);
139 ASSERT(it != vm_manager.vma_map.end()); 91 ASSERT(it != vm_manager.vma_map.end());
@@ -156,10 +108,18 @@ static u8* GetPointerFromVMA(VAddr vaddr) {
156} 108}
157 109
158/** 110/**
111 * Gets a pointer to the exact memory at the virtual address (i.e. not page aligned)
112 * using a VMA from the current process.
113 */
114static u8* GetPointerFromVMA(VAddr vaddr) {
115 return GetPointerFromVMA(*Kernel::g_current_process, vaddr);
116}
117
118/**
159 * This function should only be called for virtual addreses with attribute `PageType::Special`. 119 * This function should only be called for virtual addreses with attribute `PageType::Special`.
160 */ 120 */
161static MMIORegionPointer GetMMIOHandler(VAddr vaddr) { 121static MMIORegionPointer GetMMIOHandler(const PageTable& page_table, VAddr vaddr) {
162 for (const auto& region : current_page_table->special_regions) { 122 for (const auto& region : page_table.special_regions) {
163 if (vaddr >= region.base && vaddr < (region.base + region.size)) { 123 if (vaddr >= region.base && vaddr < (region.base + region.size)) {
164 return region.handler; 124 return region.handler;
165 } 125 }
@@ -168,6 +128,11 @@ static MMIORegionPointer GetMMIOHandler(VAddr vaddr) {
168 return nullptr; // Should never happen 128 return nullptr; // Should never happen
169} 129}
170 130
131static MMIORegionPointer GetMMIOHandler(VAddr vaddr) {
132 const PageTable& page_table = Kernel::g_current_process->vm_manager.page_table;
133 return GetMMIOHandler(page_table, vaddr);
134}
135
171template <typename T> 136template <typename T>
172T ReadMMIO(MMIORegionPointer mmio_handler, VAddr addr); 137T ReadMMIO(MMIORegionPointer mmio_handler, VAddr addr);
173 138
@@ -181,10 +146,13 @@ T Read(const VAddr vaddr) {
181 return value; 146 return value;
182 } 147 }
183 148
149 // The memory access might do an MMIO or cached access, so we have to lock the HLE kernel state
150 std::lock_guard<std::recursive_mutex> lock(HLE::g_hle_lock);
151
184 PageType type = current_page_table->attributes[vaddr >> PAGE_BITS]; 152 PageType type = current_page_table->attributes[vaddr >> PAGE_BITS];
185 switch (type) { 153 switch (type) {
186 case PageType::Unmapped: 154 case PageType::Unmapped:
187 LOG_ERROR(HW_Memory, "unmapped Read%lu @ 0x%llx", sizeof(T) * 8, vaddr); 155 LOG_ERROR(HW_Memory, "unmapped Read%lu @ 0x%08X", sizeof(T) * 8, vaddr);
188 return 0; 156 return 0;
189 case PageType::Memory: 157 case PageType::Memory:
190 ASSERT_MSG(false, "Mapped memory page without a pointer @ %08X", vaddr); 158 ASSERT_MSG(false, "Mapped memory page without a pointer @ %08X", vaddr);
@@ -219,10 +187,13 @@ void Write(const VAddr vaddr, const T data) {
219 return; 187 return;
220 } 188 }
221 189
190 // The memory access might do an MMIO or cached access, so we have to lock the HLE kernel state
191 std::lock_guard<std::recursive_mutex> lock(HLE::g_hle_lock);
192
222 PageType type = current_page_table->attributes[vaddr >> PAGE_BITS]; 193 PageType type = current_page_table->attributes[vaddr >> PAGE_BITS];
223 switch (type) { 194 switch (type) {
224 case PageType::Unmapped: 195 case PageType::Unmapped:
225 LOG_ERROR(HW_Memory, "unmapped Write%lu 0x%llx @ 0x%llx", sizeof(data) * 8, (u64)data, 196 LOG_ERROR(HW_Memory, "unmapped Write%lu 0x%08X @ 0x%08X", sizeof(data) * 8, (u32)data,
226 vaddr); 197 vaddr);
227 return; 198 return;
228 case PageType::Memory: 199 case PageType::Memory:
@@ -246,18 +217,20 @@ void Write(const VAddr vaddr, const T data) {
246 } 217 }
247} 218}
248 219
249bool IsValidVirtualAddress(const VAddr vaddr) { 220bool IsValidVirtualAddress(const Kernel::Process& process, const VAddr vaddr) {
250 const u8* page_pointer = current_page_table->pointers[vaddr >> PAGE_BITS]; 221 auto& page_table = process.vm_manager.page_table;
222
223 const u8* page_pointer = page_table.pointers[vaddr >> PAGE_BITS];
251 if (page_pointer) 224 if (page_pointer)
252 return true; 225 return true;
253 226
254 if (current_page_table->attributes[vaddr >> PAGE_BITS] == PageType::RasterizerCachedMemory) 227 if (page_table.attributes[vaddr >> PAGE_BITS] == PageType::RasterizerCachedMemory)
255 return true; 228 return true;
256 229
257 if (current_page_table->attributes[vaddr >> PAGE_BITS] != PageType::Special) 230 if (page_table.attributes[vaddr >> PAGE_BITS] != PageType::Special)
258 return false; 231 return false;
259 232
260 MMIORegionPointer mmio_region = GetMMIOHandler(vaddr); 233 MMIORegionPointer mmio_region = GetMMIOHandler(page_table, vaddr);
261 if (mmio_region) { 234 if (mmio_region) {
262 return mmio_region->IsValidAddress(vaddr); 235 return mmio_region->IsValidAddress(vaddr);
263 } 236 }
@@ -265,9 +238,12 @@ bool IsValidVirtualAddress(const VAddr vaddr) {
265 return false; 238 return false;
266} 239}
267 240
241bool IsValidVirtualAddress(const VAddr vaddr) {
242 return IsValidVirtualAddress(*Kernel::g_current_process, vaddr);
243}
244
268bool IsValidPhysicalAddress(const PAddr paddr) { 245bool IsValidPhysicalAddress(const PAddr paddr) {
269 boost::optional<VAddr> vaddr = PhysicalToVirtualAddress(paddr); 246 return GetPhysicalPointer(paddr) != nullptr;
270 return vaddr && IsValidVirtualAddress(*vaddr);
271} 247}
272 248
273u8* GetPointer(const VAddr vaddr) { 249u8* GetPointer(const VAddr vaddr) {
@@ -280,7 +256,7 @@ u8* GetPointer(const VAddr vaddr) {
280 return GetPointerFromVMA(vaddr); 256 return GetPointerFromVMA(vaddr);
281 } 257 }
282 258
283 LOG_ERROR(HW_Memory, "unknown GetPointer @ 0x%llx", vaddr); 259 LOG_ERROR(HW_Memory, "unknown GetPointer @ 0x%08x", vaddr);
284 return nullptr; 260 return nullptr;
285} 261}
286 262
@@ -299,12 +275,66 @@ std::string ReadCString(VAddr vaddr, std::size_t max_length) {
299} 275}
300 276
301u8* GetPhysicalPointer(PAddr address) { 277u8* GetPhysicalPointer(PAddr address) {
302 // TODO(Subv): This call should not go through the application's memory mapping. 278 struct MemoryArea {
303 boost::optional<VAddr> vaddr = PhysicalToVirtualAddress(address); 279 PAddr paddr_base;
304 return vaddr ? GetPointer(*vaddr) : nullptr; 280 u32 size;
281 };
282
283 static constexpr MemoryArea memory_areas[] = {
284 {VRAM_PADDR, VRAM_SIZE},
285 {IO_AREA_PADDR, IO_AREA_SIZE},
286 {DSP_RAM_PADDR, DSP_RAM_SIZE},
287 {FCRAM_PADDR, FCRAM_N3DS_SIZE},
288 {N3DS_EXTRA_RAM_PADDR, N3DS_EXTRA_RAM_SIZE},
289 };
290
291 const auto area =
292 std::find_if(std::begin(memory_areas), std::end(memory_areas), [&](const auto& area) {
293 return address >= area.paddr_base && address < area.paddr_base + area.size;
294 });
295
296 if (area == std::end(memory_areas)) {
297 LOG_ERROR(HW_Memory, "unknown GetPhysicalPointer @ 0x%08X", address);
298 return nullptr;
299 }
300
301 if (area->paddr_base == IO_AREA_PADDR) {
302 LOG_ERROR(HW_Memory, "MMIO mappings are not supported yet. phys_addr=0x%08X", address);
303 return nullptr;
304 }
305
306 u64 offset_into_region = address - area->paddr_base;
307
308 u8* target_pointer = nullptr;
309 switch (area->paddr_base) {
310 case VRAM_PADDR:
311 target_pointer = vram.data() + offset_into_region;
312 break;
313 case DSP_RAM_PADDR:
314 target_pointer = AudioCore::GetDspMemory().data() + offset_into_region;
315 break;
316 case FCRAM_PADDR:
317 for (const auto& region : Kernel::memory_regions) {
318 if (offset_into_region >= region.base &&
319 offset_into_region < region.base + region.size) {
320 target_pointer =
321 region.linear_heap_memory->data() + offset_into_region - region.base;
322 break;
323 }
324 }
325 ASSERT_MSG(target_pointer != nullptr, "Invalid FCRAM address");
326 break;
327 case N3DS_EXTRA_RAM_PADDR:
328 target_pointer = n3ds_extra_ram.data() + offset_into_region;
329 break;
330 default:
331 UNREACHABLE();
332 }
333
334 return target_pointer;
305} 335}
306 336
307void RasterizerMarkRegionCached(PAddr start, u64 size, int count_delta) { 337void RasterizerMarkRegionCached(PAddr start, u32 size, int count_delta) {
308 if (start == 0) { 338 if (start == 0) {
309 return; 339 return;
310 } 340 }
@@ -314,8 +344,15 @@ void RasterizerMarkRegionCached(PAddr start, u64 size, int count_delta) {
314 344
315 for (unsigned i = 0; i < num_pages; ++i, paddr += PAGE_SIZE) { 345 for (unsigned i = 0; i < num_pages; ++i, paddr += PAGE_SIZE) {
316 boost::optional<VAddr> maybe_vaddr = PhysicalToVirtualAddress(paddr); 346 boost::optional<VAddr> maybe_vaddr = PhysicalToVirtualAddress(paddr);
317 if (!maybe_vaddr) 347 // While the physical <-> virtual mapping is 1:1 for the regions supported by the cache,
348 // some games (like Pokemon Super Mystery Dungeon) will try to use textures that go beyond
349 // the end address of VRAM, causing the Virtual->Physical translation to fail when flushing
350 // parts of the texture.
351 if (!maybe_vaddr) {
352 LOG_ERROR(HW_Memory,
353 "Trying to flush a cached region to an invalid physical address %08X", paddr);
318 continue; 354 continue;
355 }
319 VAddr vaddr = *maybe_vaddr; 356 VAddr vaddr = *maybe_vaddr;
320 357
321 u8& res_count = current_page_table->cached_res_count[vaddr >> PAGE_BITS]; 358 u8& res_count = current_page_table->cached_res_count[vaddr >> PAGE_BITS];
@@ -327,6 +364,10 @@ void RasterizerMarkRegionCached(PAddr start, u64 size, int count_delta) {
327 if (res_count == 0) { 364 if (res_count == 0) {
328 PageType& page_type = current_page_table->attributes[vaddr >> PAGE_BITS]; 365 PageType& page_type = current_page_table->attributes[vaddr >> PAGE_BITS];
329 switch (page_type) { 366 switch (page_type) {
367 case PageType::Unmapped:
368 // It is not necessary for a process to have this region mapped into its address
369 // space, for example, a system module need not have a VRAM mapping.
370 break;
330 case PageType::Memory: 371 case PageType::Memory:
331 page_type = PageType::RasterizerCachedMemory; 372 page_type = PageType::RasterizerCachedMemory;
332 current_page_table->pointers[vaddr >> PAGE_BITS] = nullptr; 373 current_page_table->pointers[vaddr >> PAGE_BITS] = nullptr;
@@ -345,6 +386,10 @@ void RasterizerMarkRegionCached(PAddr start, u64 size, int count_delta) {
345 if (res_count == 0) { 386 if (res_count == 0) {
346 PageType& page_type = current_page_table->attributes[vaddr >> PAGE_BITS]; 387 PageType& page_type = current_page_table->attributes[vaddr >> PAGE_BITS];
347 switch (page_type) { 388 switch (page_type) {
389 case PageType::Unmapped:
390 // It is not necessary for a process to have this region mapped into its address
391 // space, for example, a system module need not have a VRAM mapping.
392 break;
348 case PageType::RasterizerCachedMemory: { 393 case PageType::RasterizerCachedMemory: {
349 u8* pointer = GetPointerFromVMA(vaddr & ~PAGE_MASK); 394 u8* pointer = GetPointerFromVMA(vaddr & ~PAGE_MASK);
350 if (pointer == nullptr) { 395 if (pointer == nullptr) {
@@ -368,13 +413,13 @@ void RasterizerMarkRegionCached(PAddr start, u64 size, int count_delta) {
368 } 413 }
369} 414}
370 415
371void RasterizerFlushRegion(PAddr start, u64 size) { 416void RasterizerFlushRegion(PAddr start, u32 size) {
372 if (VideoCore::g_renderer != nullptr) { 417 if (VideoCore::g_renderer != nullptr) {
373 VideoCore::g_renderer->Rasterizer()->FlushRegion(start, size); 418 VideoCore::g_renderer->Rasterizer()->FlushRegion(start, size);
374 } 419 }
375} 420}
376 421
377void RasterizerFlushAndInvalidateRegion(PAddr start, u64 size) { 422void RasterizerFlushAndInvalidateRegion(PAddr start, u32 size) {
378 // Since pages are unmapped on shutdown after video core is shutdown, the renderer may be 423 // Since pages are unmapped on shutdown after video core is shutdown, the renderer may be
379 // null here 424 // null here
380 if (VideoCore::g_renderer != nullptr) { 425 if (VideoCore::g_renderer != nullptr) {
@@ -382,7 +427,7 @@ void RasterizerFlushAndInvalidateRegion(PAddr start, u64 size) {
382 } 427 }
383} 428}
384 429
385void RasterizerFlushVirtualRegion(VAddr start, u64 size, FlushMode mode) { 430void RasterizerFlushVirtualRegion(VAddr start, u32 size, FlushMode mode) {
386 // Since pages are unmapped on shutdown after video core is shutdown, the renderer may be 431 // Since pages are unmapped on shutdown after video core is shutdown, the renderer may be
387 // null here 432 // null here
388 if (VideoCore::g_renderer != nullptr) { 433 if (VideoCore::g_renderer != nullptr) {
@@ -398,7 +443,7 @@ void RasterizerFlushVirtualRegion(VAddr start, u64 size, FlushMode mode) {
398 VAddr overlap_end = std::min(end, region_end); 443 VAddr overlap_end = std::min(end, region_end);
399 444
400 PAddr physical_start = TryVirtualToPhysicalAddress(overlap_start).value(); 445 PAddr physical_start = TryVirtualToPhysicalAddress(overlap_start).value();
401 u64 overlap_size = overlap_end - overlap_start; 446 u32 overlap_size = static_cast<u32>(overlap_end - overlap_start);
402 447
403 auto* rasterizer = VideoCore::g_renderer->Rasterizer(); 448 auto* rasterizer = VideoCore::g_renderer->Rasterizer();
404 switch (mode) { 449 switch (mode) {
@@ -433,44 +478,50 @@ u64 Read64(const VAddr addr) {
433 return Read<u64_le>(addr); 478 return Read<u64_le>(addr);
434} 479}
435 480
436void ReadBlock(const VAddr src_addr, void* dest_buffer, const size_t size) { 481void ReadBlock(const Kernel::Process& process, const VAddr src_addr, void* dest_buffer,
482 const size_t size) {
483 auto& page_table = process.vm_manager.page_table;
484
437 size_t remaining_size = size; 485 size_t remaining_size = size;
438 size_t page_index = src_addr >> PAGE_BITS; 486 size_t page_index = src_addr >> PAGE_BITS;
439 size_t page_offset = src_addr & PAGE_MASK; 487 size_t page_offset = src_addr & PAGE_MASK;
440 488
441 while (remaining_size > 0) { 489 while (remaining_size > 0) {
442 const size_t copy_amount = std::min(PAGE_SIZE - page_offset, remaining_size); 490 const size_t copy_amount = std::min(PAGE_SIZE - page_offset, remaining_size);
443 const VAddr current_vaddr = (page_index << PAGE_BITS) + page_offset; 491 const VAddr current_vaddr = static_cast<VAddr>((page_index << PAGE_BITS) + page_offset);
444 492
445 switch (current_page_table->attributes[page_index]) { 493 switch (page_table.attributes[page_index]) {
446 case PageType::Unmapped: { 494 case PageType::Unmapped: {
447 LOG_ERROR(HW_Memory, "unmapped ReadBlock @ 0x%llx (start address = 0x%llx, size = %zu)", 495 LOG_ERROR(HW_Memory, "unmapped ReadBlock @ 0x%08X (start address = 0x%08X, size = %zu)",
448 current_vaddr, src_addr, size); 496 current_vaddr, src_addr, size);
449 std::memset(dest_buffer, 0, copy_amount); 497 std::memset(dest_buffer, 0, copy_amount);
450 break; 498 break;
451 } 499 }
452 case PageType::Memory: { 500 case PageType::Memory: {
453 DEBUG_ASSERT(current_page_table->pointers[page_index]); 501 DEBUG_ASSERT(page_table.pointers[page_index]);
454 502
455 const u8* src_ptr = current_page_table->pointers[page_index] + page_offset; 503 const u8* src_ptr = page_table.pointers[page_index] + page_offset;
456 std::memcpy(dest_buffer, src_ptr, copy_amount); 504 std::memcpy(dest_buffer, src_ptr, copy_amount);
457 break; 505 break;
458 } 506 }
459 case PageType::Special: { 507 case PageType::Special: {
460 DEBUG_ASSERT(GetMMIOHandler(current_vaddr)); 508 MMIORegionPointer handler = GetMMIOHandler(page_table, current_vaddr);
461 509 DEBUG_ASSERT(handler);
462 GetMMIOHandler(current_vaddr)->ReadBlock(current_vaddr, dest_buffer, copy_amount); 510 handler->ReadBlock(current_vaddr, dest_buffer, copy_amount);
463 break; 511 break;
464 } 512 }
465 case PageType::RasterizerCachedMemory: { 513 case PageType::RasterizerCachedMemory: {
466 RasterizerFlushVirtualRegion(current_vaddr, copy_amount, FlushMode::Flush); 514 RasterizerFlushVirtualRegion(current_vaddr, static_cast<u32>(copy_amount),
467 std::memcpy(dest_buffer, GetPointerFromVMA(current_vaddr), copy_amount); 515 FlushMode::Flush);
516 std::memcpy(dest_buffer, GetPointerFromVMA(process, current_vaddr), copy_amount);
468 break; 517 break;
469 } 518 }
470 case PageType::RasterizerCachedSpecial: { 519 case PageType::RasterizerCachedSpecial: {
471 DEBUG_ASSERT(GetMMIOHandler(current_vaddr)); 520 MMIORegionPointer handler = GetMMIOHandler(page_table, current_vaddr);
472 RasterizerFlushVirtualRegion(current_vaddr, copy_amount, FlushMode::Flush); 521 DEBUG_ASSERT(handler);
473 GetMMIOHandler(current_vaddr)->ReadBlock(current_vaddr, dest_buffer, copy_amount); 522 RasterizerFlushVirtualRegion(current_vaddr, static_cast<u32>(copy_amount),
523 FlushMode::Flush);
524 handler->ReadBlock(current_vaddr, dest_buffer, copy_amount);
474 break; 525 break;
475 } 526 }
476 default: 527 default:
@@ -484,6 +535,10 @@ void ReadBlock(const VAddr src_addr, void* dest_buffer, const size_t size) {
484 } 535 }
485} 536}
486 537
538void ReadBlock(const VAddr src_addr, void* dest_buffer, const size_t size) {
539 ReadBlock(*Kernel::g_current_process, src_addr, dest_buffer, size);
540}
541
487void Write8(const VAddr addr, const u8 data) { 542void Write8(const VAddr addr, const u8 data) {
488 Write<u8>(addr, data); 543 Write<u8>(addr, data);
489} 544}
@@ -500,44 +555,49 @@ void Write64(const VAddr addr, const u64 data) {
500 Write<u64_le>(addr, data); 555 Write<u64_le>(addr, data);
501} 556}
502 557
503void WriteBlock(const VAddr dest_addr, const void* src_buffer, const size_t size) { 558void WriteBlock(const Kernel::Process& process, const VAddr dest_addr, const void* src_buffer,
559 const size_t size) {
560 auto& page_table = process.vm_manager.page_table;
504 size_t remaining_size = size; 561 size_t remaining_size = size;
505 size_t page_index = dest_addr >> PAGE_BITS; 562 size_t page_index = dest_addr >> PAGE_BITS;
506 size_t page_offset = dest_addr & PAGE_MASK; 563 size_t page_offset = dest_addr & PAGE_MASK;
507 564
508 while (remaining_size > 0) { 565 while (remaining_size > 0) {
509 const size_t copy_amount = std::min(PAGE_SIZE - page_offset, remaining_size); 566 const size_t copy_amount = std::min(PAGE_SIZE - page_offset, remaining_size);
510 const VAddr current_vaddr = (page_index << PAGE_BITS) + page_offset; 567 const VAddr current_vaddr = static_cast<VAddr>((page_index << PAGE_BITS) + page_offset);
511 568
512 switch (current_page_table->attributes[page_index]) { 569 switch (page_table.attributes[page_index]) {
513 case PageType::Unmapped: { 570 case PageType::Unmapped: {
514 LOG_ERROR(HW_Memory, 571 LOG_ERROR(HW_Memory,
515 "unmapped WriteBlock @ 0x%llx (start address = 0x%llx, size = %zu)", 572 "unmapped WriteBlock @ 0x%08X (start address = 0x%08X, size = %zu)",
516 current_vaddr, dest_addr, size); 573 current_vaddr, dest_addr, size);
517 break; 574 break;
518 } 575 }
519 case PageType::Memory: { 576 case PageType::Memory: {
520 DEBUG_ASSERT(current_page_table->pointers[page_index]); 577 DEBUG_ASSERT(page_table.pointers[page_index]);
521 578
522 u8* dest_ptr = current_page_table->pointers[page_index] + page_offset; 579 u8* dest_ptr = page_table.pointers[page_index] + page_offset;
523 std::memcpy(dest_ptr, src_buffer, copy_amount); 580 std::memcpy(dest_ptr, src_buffer, copy_amount);
524 break; 581 break;
525 } 582 }
526 case PageType::Special: { 583 case PageType::Special: {
527 DEBUG_ASSERT(GetMMIOHandler(current_vaddr)); 584 MMIORegionPointer handler = GetMMIOHandler(page_table, current_vaddr);
528 585 DEBUG_ASSERT(handler);
529 GetMMIOHandler(current_vaddr)->WriteBlock(current_vaddr, src_buffer, copy_amount); 586 handler->WriteBlock(current_vaddr, src_buffer, copy_amount);
530 break; 587 break;
531 } 588 }
532 case PageType::RasterizerCachedMemory: { 589 case PageType::RasterizerCachedMemory: {
533 RasterizerFlushVirtualRegion(current_vaddr, copy_amount, FlushMode::FlushAndInvalidate); 590 RasterizerFlushVirtualRegion(current_vaddr, static_cast<u32>(copy_amount),
534 std::memcpy(GetPointerFromVMA(current_vaddr), src_buffer, copy_amount); 591 FlushMode::FlushAndInvalidate);
592 std::memcpy(GetPointerFromVMA(process, current_vaddr), src_buffer, copy_amount);
535 break; 593 break;
536 } 594 }
537 case PageType::RasterizerCachedSpecial: { 595 case PageType::RasterizerCachedSpecial: {
538 DEBUG_ASSERT(GetMMIOHandler(current_vaddr)); 596 MMIORegionPointer handler = GetMMIOHandler(page_table, current_vaddr);
539 RasterizerFlushVirtualRegion(current_vaddr, copy_amount, FlushMode::FlushAndInvalidate); 597 DEBUG_ASSERT(handler);
540 GetMMIOHandler(current_vaddr)->WriteBlock(current_vaddr, src_buffer, copy_amount); 598 RasterizerFlushVirtualRegion(current_vaddr, static_cast<u32>(copy_amount),
599 FlushMode::FlushAndInvalidate);
600 handler->WriteBlock(current_vaddr, src_buffer, copy_amount);
541 break; 601 break;
542 } 602 }
543 default: 603 default:
@@ -551,6 +611,10 @@ void WriteBlock(const VAddr dest_addr, const void* src_buffer, const size_t size
551 } 611 }
552} 612}
553 613
614void WriteBlock(const VAddr dest_addr, const void* src_buffer, const size_t size) {
615 WriteBlock(*Kernel::g_current_process, dest_addr, src_buffer, size);
616}
617
554void ZeroBlock(const VAddr dest_addr, const size_t size) { 618void ZeroBlock(const VAddr dest_addr, const size_t size) {
555 size_t remaining_size = size; 619 size_t remaining_size = size;
556 size_t page_index = dest_addr >> PAGE_BITS; 620 size_t page_index = dest_addr >> PAGE_BITS;
@@ -560,11 +624,11 @@ void ZeroBlock(const VAddr dest_addr, const size_t size) {
560 624
561 while (remaining_size > 0) { 625 while (remaining_size > 0) {
562 const size_t copy_amount = std::min(PAGE_SIZE - page_offset, remaining_size); 626 const size_t copy_amount = std::min(PAGE_SIZE - page_offset, remaining_size);
563 const VAddr current_vaddr = (page_index << PAGE_BITS) + page_offset; 627 const VAddr current_vaddr = static_cast<VAddr>((page_index << PAGE_BITS) + page_offset);
564 628
565 switch (current_page_table->attributes[page_index]) { 629 switch (current_page_table->attributes[page_index]) {
566 case PageType::Unmapped: { 630 case PageType::Unmapped: {
567 LOG_ERROR(HW_Memory, "unmapped ZeroBlock @ 0x%llx (start address = 0x%llx, size = %zu)", 631 LOG_ERROR(HW_Memory, "unmapped ZeroBlock @ 0x%08X (start address = 0x%08X, size = %zu)",
568 current_vaddr, dest_addr, size); 632 current_vaddr, dest_addr, size);
569 break; 633 break;
570 } 634 }
@@ -582,13 +646,15 @@ void ZeroBlock(const VAddr dest_addr, const size_t size) {
582 break; 646 break;
583 } 647 }
584 case PageType::RasterizerCachedMemory: { 648 case PageType::RasterizerCachedMemory: {
585 RasterizerFlushVirtualRegion(current_vaddr, copy_amount, FlushMode::FlushAndInvalidate); 649 RasterizerFlushVirtualRegion(current_vaddr, static_cast<u32>(copy_amount),
650 FlushMode::FlushAndInvalidate);
586 std::memset(GetPointerFromVMA(current_vaddr), 0, copy_amount); 651 std::memset(GetPointerFromVMA(current_vaddr), 0, copy_amount);
587 break; 652 break;
588 } 653 }
589 case PageType::RasterizerCachedSpecial: { 654 case PageType::RasterizerCachedSpecial: {
590 DEBUG_ASSERT(GetMMIOHandler(current_vaddr)); 655 DEBUG_ASSERT(GetMMIOHandler(current_vaddr));
591 RasterizerFlushVirtualRegion(current_vaddr, copy_amount, FlushMode::FlushAndInvalidate); 656 RasterizerFlushVirtualRegion(current_vaddr, static_cast<u32>(copy_amount),
657 FlushMode::FlushAndInvalidate);
592 GetMMIOHandler(current_vaddr)->WriteBlock(current_vaddr, zeros.data(), copy_amount); 658 GetMMIOHandler(current_vaddr)->WriteBlock(current_vaddr, zeros.data(), copy_amount);
593 break; 659 break;
594 } 660 }
@@ -609,11 +675,11 @@ void CopyBlock(VAddr dest_addr, VAddr src_addr, const size_t size) {
609 675
610 while (remaining_size > 0) { 676 while (remaining_size > 0) {
611 const size_t copy_amount = std::min(PAGE_SIZE - page_offset, remaining_size); 677 const size_t copy_amount = std::min(PAGE_SIZE - page_offset, remaining_size);
612 const VAddr current_vaddr = (page_index << PAGE_BITS) + page_offset; 678 const VAddr current_vaddr = static_cast<VAddr>((page_index << PAGE_BITS) + page_offset);
613 679
614 switch (current_page_table->attributes[page_index]) { 680 switch (current_page_table->attributes[page_index]) {
615 case PageType::Unmapped: { 681 case PageType::Unmapped: {
616 LOG_ERROR(HW_Memory, "unmapped CopyBlock @ 0x%llx (start address = 0x%llx, size = %zu)", 682 LOG_ERROR(HW_Memory, "unmapped CopyBlock @ 0x%08X (start address = 0x%08X, size = %zu)",
617 current_vaddr, src_addr, size); 683 current_vaddr, src_addr, size);
618 ZeroBlock(dest_addr, copy_amount); 684 ZeroBlock(dest_addr, copy_amount);
619 break; 685 break;
@@ -633,13 +699,15 @@ void CopyBlock(VAddr dest_addr, VAddr src_addr, const size_t size) {
633 break; 699 break;
634 } 700 }
635 case PageType::RasterizerCachedMemory: { 701 case PageType::RasterizerCachedMemory: {
636 RasterizerFlushVirtualRegion(current_vaddr, copy_amount, FlushMode::Flush); 702 RasterizerFlushVirtualRegion(current_vaddr, static_cast<u32>(copy_amount),
703 FlushMode::Flush);
637 WriteBlock(dest_addr, GetPointerFromVMA(current_vaddr), copy_amount); 704 WriteBlock(dest_addr, GetPointerFromVMA(current_vaddr), copy_amount);
638 break; 705 break;
639 } 706 }
640 case PageType::RasterizerCachedSpecial: { 707 case PageType::RasterizerCachedSpecial: {
641 DEBUG_ASSERT(GetMMIOHandler(current_vaddr)); 708 DEBUG_ASSERT(GetMMIOHandler(current_vaddr));
642 RasterizerFlushVirtualRegion(current_vaddr, copy_amount, FlushMode::Flush); 709 RasterizerFlushVirtualRegion(current_vaddr, static_cast<u32>(copy_amount),
710 FlushMode::Flush);
643 711
644 std::vector<u8> buffer(copy_amount); 712 std::vector<u8> buffer(copy_amount);
645 GetMMIOHandler(current_vaddr)->ReadBlock(current_vaddr, buffer.data(), buffer.size()); 713 GetMMIOHandler(current_vaddr)->ReadBlock(current_vaddr, buffer.data(), buffer.size());
@@ -652,8 +720,8 @@ void CopyBlock(VAddr dest_addr, VAddr src_addr, const size_t size) {
652 720
653 page_index++; 721 page_index++;
654 page_offset = 0; 722 page_offset = 0;
655 dest_addr += copy_amount; 723 dest_addr += static_cast<VAddr>(copy_amount);
656 src_addr += copy_amount; 724 src_addr += static_cast<VAddr>(copy_amount);
657 remaining_size -= copy_amount; 725 remaining_size -= copy_amount;
658 } 726 }
659} 727}
@@ -721,7 +789,7 @@ boost::optional<PAddr> TryVirtualToPhysicalAddress(const VAddr addr) {
721PAddr VirtualToPhysicalAddress(const VAddr addr) { 789PAddr VirtualToPhysicalAddress(const VAddr addr) {
722 auto paddr = TryVirtualToPhysicalAddress(addr); 790 auto paddr = TryVirtualToPhysicalAddress(addr);
723 if (!paddr) { 791 if (!paddr) {
724 LOG_ERROR(HW_Memory, "Unknown virtual address @ 0x%llx", addr); 792 LOG_ERROR(HW_Memory, "Unknown virtual address @ 0x%08X", addr);
725 // To help with debugging, set bit on address so that it's obviously invalid. 793 // To help with debugging, set bit on address so that it's obviously invalid.
726 return addr | 0x80000000; 794 return addr | 0x80000000;
727 } 795 }
@@ -746,4 +814,4 @@ boost::optional<VAddr> PhysicalToVirtualAddress(const PAddr addr) {
746 return boost::none; 814 return boost::none;
747} 815}
748 816
749} // namespace 817} // namespace Memory
diff --git a/src/core/memory.h b/src/core/memory.h
index e14d68654..9a04b9a16 100644
--- a/src/core/memory.h
+++ b/src/core/memory.h
@@ -6,9 +6,16 @@
6 6
7#include <array> 7#include <array>
8#include <cstddef> 8#include <cstddef>
9#include <map>
9#include <string> 10#include <string>
11#include <vector>
10#include <boost/optional.hpp> 12#include <boost/optional.hpp>
11#include "common/common_types.h" 13#include "common/common_types.h"
14#include "core/mmio.h"
15
16namespace Kernel {
17class Process;
18}
12 19
13namespace Memory { 20namespace Memory {
14 21
@@ -19,7 +26,60 @@ namespace Memory {
19const int PAGE_BITS = 12; 26const int PAGE_BITS = 12;
20const u64 PAGE_SIZE = 1 << PAGE_BITS; 27const u64 PAGE_SIZE = 1 << PAGE_BITS;
21const u64 PAGE_MASK = PAGE_SIZE - 1; 28const u64 PAGE_MASK = PAGE_SIZE - 1;
22const size_t PAGE_TABLE_NUM_ENTRIES = 1ULL << (64 - PAGE_BITS); 29const size_t PAGE_TABLE_NUM_ENTRIES = 1ULL << (32 - PAGE_BITS);
30
31enum class PageType {
32 /// Page is unmapped and should cause an access error.
33 Unmapped,
34 /// Page is mapped to regular memory. This is the only type you can get pointers to.
35 Memory,
36 /// Page is mapped to regular memory, but also needs to check for rasterizer cache flushing and
37 /// invalidation
38 RasterizerCachedMemory,
39 /// Page is mapped to a I/O region. Writing and reading to this page is handled by functions.
40 Special,
41 /// Page is mapped to a I/O region, but also needs to check for rasterizer cache flushing and
42 /// invalidation
43 RasterizerCachedSpecial,
44};
45
46struct SpecialRegion {
47 VAddr base;
48 u32 size;
49 MMIORegionPointer handler;
50};
51
52/**
53 * A (reasonably) fast way of allowing switchable and remappable process address spaces. It loosely
54 * mimics the way a real CPU page table works, but instead is optimized for minimal decoding and
55 * fetching requirements when accessing. In the usual case of an access to regular memory, it only
56 * requires an indexed fetch and a check for NULL.
57 */
58struct PageTable {
59 /**
60 * Array of memory pointers backing each page. An entry can only be non-null if the
61 * corresponding entry in the `attributes` array is of type `Memory`.
62 */
63 std::array<u8*, PAGE_TABLE_NUM_ENTRIES> pointers;
64
65 /**
66 * Contains MMIO handlers that back memory regions whose entries in the `attribute` array is of
67 * type `Special`.
68 */
69 std::vector<SpecialRegion> special_regions;
70
71 /**
72 * Array of fine grained page attributes. If it is set to any value other than `Memory`, then
73 * the corresponding entry in `pointers` MUST be set to null.
74 */
75 std::array<PageType, PAGE_TABLE_NUM_ENTRIES> attributes;
76
77 /**
78 * Indicates the number of externally cached resources touching a page that should be
79 * flushed before the memory is accessed
80 */
81 std::array<u8, PAGE_TABLE_NUM_ENTRIES> cached_res_count;
82};
23 83
24/// Physical memory regions as seen from the ARM11 84/// Physical memory regions as seen from the ARM11
25enum : PAddr { 85enum : PAddr {
@@ -126,7 +186,14 @@ enum : VAddr {
126 NEW_LINEAR_HEAP_VADDR_END = NEW_LINEAR_HEAP_VADDR + NEW_LINEAR_HEAP_SIZE, 186 NEW_LINEAR_HEAP_VADDR_END = NEW_LINEAR_HEAP_VADDR + NEW_LINEAR_HEAP_SIZE,
127}; 187};
128 188
189/// Currently active page table
190void SetCurrentPageTable(PageTable* page_table);
191PageTable* GetCurrentPageTable();
192
193/// Determines if the given VAddr is valid for the specified process.
194bool IsValidVirtualAddress(const Kernel::Process& process, const VAddr vaddr);
129bool IsValidVirtualAddress(const VAddr addr); 195bool IsValidVirtualAddress(const VAddr addr);
196
130bool IsValidPhysicalAddress(const PAddr addr); 197bool IsValidPhysicalAddress(const PAddr addr);
131 198
132u8 Read8(VAddr addr); 199u8 Read8(VAddr addr);
@@ -139,7 +206,11 @@ void Write16(VAddr addr, u16 data);
139void Write32(VAddr addr, u32 data); 206void Write32(VAddr addr, u32 data);
140void Write64(VAddr addr, u64 data); 207void Write64(VAddr addr, u64 data);
141 208
209void ReadBlock(const Kernel::Process& process, const VAddr src_addr, void* dest_buffer,
210 size_t size);
142void ReadBlock(const VAddr src_addr, void* dest_buffer, size_t size); 211void ReadBlock(const VAddr src_addr, void* dest_buffer, size_t size);
212void WriteBlock(const Kernel::Process& process, const VAddr dest_addr, const void* src_buffer,
213 size_t size);
143void WriteBlock(const VAddr dest_addr, const void* src_buffer, size_t size); 214void WriteBlock(const VAddr dest_addr, const void* src_buffer, size_t size);
144void ZeroBlock(const VAddr dest_addr, const size_t size); 215void ZeroBlock(const VAddr dest_addr, const size_t size);
145void CopyBlock(VAddr dest_addr, VAddr src_addr, size_t size); 216void CopyBlock(VAddr dest_addr, VAddr src_addr, size_t size);
@@ -169,8 +240,6 @@ boost::optional<VAddr> PhysicalToVirtualAddress(PAddr addr);
169 240
170/** 241/**
171 * Gets a pointer to the memory region beginning at the specified physical address. 242 * Gets a pointer to the memory region beginning at the specified physical address.
172 *
173 * @note This is currently implemented using PhysicalToVirtualAddress().
174 */ 243 */
175u8* GetPhysicalPointer(PAddr address); 244u8* GetPhysicalPointer(PAddr address);
176 245
@@ -178,17 +247,17 @@ u8* GetPhysicalPointer(PAddr address);
178 * Adds the supplied value to the rasterizer resource cache counter of each 247 * Adds the supplied value to the rasterizer resource cache counter of each
179 * page touching the region. 248 * page touching the region.
180 */ 249 */
181void RasterizerMarkRegionCached(PAddr start, u64 size, int count_delta); 250void RasterizerMarkRegionCached(PAddr start, u32 size, int count_delta);
182 251
183/** 252/**
184 * Flushes any externally cached rasterizer resources touching the given region. 253 * Flushes any externally cached rasterizer resources touching the given region.
185 */ 254 */
186void RasterizerFlushRegion(PAddr start, u64 size); 255void RasterizerFlushRegion(PAddr start, u32 size);
187 256
188/** 257/**
189 * Flushes and invalidates any externally cached rasterizer resources touching the given region. 258 * Flushes and invalidates any externally cached rasterizer resources touching the given region.
190 */ 259 */
191void RasterizerFlushAndInvalidateRegion(PAddr start, u64 size); 260void RasterizerFlushAndInvalidateRegion(PAddr start, u32 size);
192 261
193enum class FlushMode { 262enum class FlushMode {
194 /// Write back modified surfaces to RAM 263 /// Write back modified surfaces to RAM
@@ -201,12 +270,6 @@ enum class FlushMode {
201 * Flushes and invalidates any externally cached rasterizer resources touching the given virtual 270 * Flushes and invalidates any externally cached rasterizer resources touching the given virtual
202 * address region. 271 * address region.
203 */ 272 */
204void RasterizerFlushVirtualRegion(VAddr start, u64 size, FlushMode mode); 273void RasterizerFlushVirtualRegion(VAddr start, u32 size, FlushMode mode);
205 274
206/** 275} // namespace Memory
207 * Dynarmic has an optimization to memory accesses when the pointer to the page exists that
208 * can be used by setting up the current page table as a callback. This function is used to
209 * retrieve the current page table for that purpose.
210 */
211//std::array<u8*, PAGE_TABLE_NUM_ENTRIES>* GetCurrentPageTablePointers();
212}
diff --git a/src/core/memory_setup.h b/src/core/memory_setup.h
index fc3fda466..c58baa50b 100644
--- a/src/core/memory_setup.h
+++ b/src/core/memory_setup.h
@@ -9,24 +9,24 @@
9 9
10namespace Memory { 10namespace Memory {
11 11
12void InitMemoryMap();
13
14/** 12/**
15 * Maps an allocated buffer onto a region of the emulated process address space. 13 * Maps an allocated buffer onto a region of the emulated process address space.
16 * 14 *
15 * @param page_table The page table of the emulated process.
17 * @param base The address to start mapping at. Must be page-aligned. 16 * @param base The address to start mapping at. Must be page-aligned.
18 * @param size The amount of bytes to map. Must be page-aligned. 17 * @param size The amount of bytes to map. Must be page-aligned.
19 * @param target Buffer with the memory backing the mapping. Must be of length at least `size`. 18 * @param target Buffer with the memory backing the mapping. Must be of length at least `size`.
20 */ 19 */
21void MapMemoryRegion(VAddr base, u64 size, u8* target); 20void MapMemoryRegion(PageTable& page_table, VAddr base, u32 size, u8* target);
22 21
23/** 22/**
24 * Maps a region of the emulated process address space as a IO region. 23 * Maps a region of the emulated process address space as a IO region.
24 * @param page_table The page table of the emulated process.
25 * @param base The address to start mapping at. Must be page-aligned. 25 * @param base The address to start mapping at. Must be page-aligned.
26 * @param size The amount of bytes to map. Must be page-aligned. 26 * @param size The amount of bytes to map. Must be page-aligned.
27 * @param mmio_handler The handler that backs the mapping. 27 * @param mmio_handler The handler that backs the mapping.
28 */ 28 */
29void MapIoRegion(VAddr base, u64 size, MMIORegionPointer mmio_handler); 29void MapIoRegion(PageTable& page_table, VAddr base, u32 size, MMIORegionPointer mmio_handler);
30 30
31void UnmapRegion(VAddr base, u64 size); 31void UnmapRegion(PageTable& page_table, VAddr base, u32 size);
32} 32}
diff --git a/src/core/settings.cpp b/src/core/settings.cpp
index d4f0429d1..efcf1267d 100644
--- a/src/core/settings.cpp
+++ b/src/core/settings.cpp
@@ -36,4 +36,4 @@ void Apply() {
36 Service::IR::ReloadInputDevices(); 36 Service::IR::ReloadInputDevices();
37} 37}
38 38
39} // namespace 39} // namespace Settings
diff --git a/src/core/settings.h b/src/core/settings.h
index ee16bb90a..8d78cb424 100644
--- a/src/core/settings.h
+++ b/src/core/settings.h
@@ -15,6 +15,7 @@ enum class LayoutOption {
15 Default, 15 Default,
16 SingleScreen, 16 SingleScreen,
17 LargeScreen, 17 LargeScreen,
18 SideScreen,
18}; 19};
19 20
20namespace NativeButton { 21namespace NativeButton {
@@ -70,7 +71,7 @@ enum Values {
70static const std::array<const char*, NumAnalogs> mapping = {{ 71static const std::array<const char*, NumAnalogs> mapping = {{
71 "circle_pad", "c_stick", 72 "circle_pad", "c_stick",
72}}; 73}};
73} // namespace NumAnalog 74} // namespace NativeAnalog
74 75
75struct Values { 76struct Values {
76 // CheckNew3DS 77 // CheckNew3DS
@@ -79,6 +80,8 @@ struct Values {
79 // Controls 80 // Controls
80 std::array<std::string, NativeButton::NumButtons> buttons; 81 std::array<std::string, NativeButton::NumButtons> buttons;
81 std::array<std::string, NativeAnalog::NumAnalogs> analogs; 82 std::array<std::string, NativeAnalog::NumAnalogs> analogs;
83 std::string motion_device;
84 std::string touch_device;
82 85
83 // Core 86 // Core
84 bool use_cpu_jit; 87 bool use_cpu_jit;
@@ -128,7 +131,11 @@ struct Values {
128 u16 gdbstub_port; 131 u16 gdbstub_port;
129 132
130 // WebService 133 // WebService
134 bool enable_telemetry;
131 std::string telemetry_endpoint_url; 135 std::string telemetry_endpoint_url;
136 std::string verify_endpoint_url;
137 std::string citra_username;
138 std::string citra_token;
132} extern values; 139} extern values;
133 140
134// a special value for Values::region_value indicating that citra will automatically select a region 141// a special value for Values::region_value indicating that citra will automatically select a region
@@ -136,4 +143,4 @@ struct Values {
136static constexpr int REGION_VALUE_AUTO_SELECT = -1; 143static constexpr int REGION_VALUE_AUTO_SELECT = -1;
137 144
138void Apply(); 145void Apply();
139} 146} // namespace Settings
diff --git a/src/core/telemetry_session.cpp b/src/core/telemetry_session.cpp
index 841d6cfa1..ca517ff44 100644
--- a/src/core/telemetry_session.cpp
+++ b/src/core/telemetry_session.cpp
@@ -3,15 +3,19 @@
3// Refer to the license.txt file included. 3// Refer to the license.txt file included.
4 4
5#include <cstring> 5#include <cstring>
6#include <cryptopp/osrng.h>
6 7
7#include "common/assert.h" 8#include "common/assert.h"
9#include "common/file_util.h"
8#include "common/scm_rev.h" 10#include "common/scm_rev.h"
9#include "common/x64/cpu_detect.h" 11#include "common/x64/cpu_detect.h"
12#include "core/core.h"
10#include "core/settings.h" 13#include "core/settings.h"
11#include "core/telemetry_session.h" 14#include "core/telemetry_session.h"
12 15
13#ifdef ENABLE_WEB_SERVICE 16#ifdef ENABLE_WEB_SERVICE
14#include "web_service/telemetry_json.h" 17#include "web_service/telemetry_json.h"
18#include "web_service/verify_login.h"
15#endif 19#endif
16 20
17namespace Core { 21namespace Core {
@@ -28,23 +32,94 @@ static const char* CpuVendorToStr(Common::CPUVendor vendor) {
28 UNREACHABLE(); 32 UNREACHABLE();
29} 33}
30 34
35static u64 GenerateTelemetryId() {
36 u64 telemetry_id{};
37 CryptoPP::AutoSeededRandomPool rng;
38 rng.GenerateBlock(reinterpret_cast<CryptoPP::byte*>(&telemetry_id), sizeof(u64));
39 return telemetry_id;
40}
41
42u64 GetTelemetryId() {
43 u64 telemetry_id{};
44 static const std::string& filename{FileUtil::GetUserPath(D_CONFIG_IDX) + "telemetry_id"};
45
46 if (FileUtil::Exists(filename)) {
47 FileUtil::IOFile file(filename, "rb");
48 if (!file.IsOpen()) {
49 LOG_ERROR(Core, "failed to open telemetry_id: %s", filename.c_str());
50 return {};
51 }
52 file.ReadBytes(&telemetry_id, sizeof(u64));
53 } else {
54 FileUtil::IOFile file(filename, "wb");
55 if (!file.IsOpen()) {
56 LOG_ERROR(Core, "failed to open telemetry_id: %s", filename.c_str());
57 return {};
58 }
59 telemetry_id = GenerateTelemetryId();
60 file.WriteBytes(&telemetry_id, sizeof(u64));
61 }
62
63 return telemetry_id;
64}
65
66u64 RegenerateTelemetryId() {
67 const u64 new_telemetry_id{GenerateTelemetryId()};
68 static const std::string& filename{FileUtil::GetUserPath(D_CONFIG_IDX) + "telemetry_id"};
69
70 FileUtil::IOFile file(filename, "wb");
71 if (!file.IsOpen()) {
72 LOG_ERROR(Core, "failed to open telemetry_id: %s", filename.c_str());
73 return {};
74 }
75 file.WriteBytes(&new_telemetry_id, sizeof(u64));
76 return new_telemetry_id;
77}
78
79std::future<bool> VerifyLogin(std::string username, std::string token, std::function<void()> func) {
80#ifdef ENABLE_WEB_SERVICE
81 return WebService::VerifyLogin(username, token, Settings::values.verify_endpoint_url, func);
82#else
83 return std::async(std::launch::async, [func{std::move(func)}]() {
84 func();
85 return false;
86 });
87#endif
88}
89
31TelemetrySession::TelemetrySession() { 90TelemetrySession::TelemetrySession() {
32#ifdef ENABLE_WEB_SERVICE 91#ifdef ENABLE_WEB_SERVICE
33 backend = std::make_unique<WebService::TelemetryJson>(); 92 if (Settings::values.enable_telemetry) {
93 backend = std::make_unique<WebService::TelemetryJson>(
94 Settings::values.telemetry_endpoint_url, Settings::values.citra_username,
95 Settings::values.citra_token);
96 } else {
97 backend = std::make_unique<Telemetry::NullVisitor>();
98 }
34#else 99#else
35 backend = std::make_unique<Telemetry::NullVisitor>(); 100 backend = std::make_unique<Telemetry::NullVisitor>();
36#endif 101#endif
102 // Log one-time top-level information
103 AddField(Telemetry::FieldType::None, "TelemetryId", GetTelemetryId());
104
37 // Log one-time session start information 105 // Log one-time session start information
38 const s64 init_time{std::chrono::duration_cast<std::chrono::milliseconds>( 106 const s64 init_time{std::chrono::duration_cast<std::chrono::milliseconds>(
39 std::chrono::system_clock::now().time_since_epoch()) 107 std::chrono::system_clock::now().time_since_epoch())
40 .count()}; 108 .count()};
41 AddField(Telemetry::FieldType::Session, "Init_Time", init_time); 109 AddField(Telemetry::FieldType::Session, "Init_Time", init_time);
110 std::string program_name;
111 const Loader::ResultStatus res{System::GetInstance().GetAppLoader().ReadTitle(program_name)};
112 if (res == Loader::ResultStatus::Success) {
113 AddField(Telemetry::FieldType::Session, "ProgramName", program_name);
114 }
42 115
43 // Log application information 116 // Log application information
44 const bool is_git_dirty{std::strstr(Common::g_scm_desc, "dirty") != nullptr}; 117 const bool is_git_dirty{std::strstr(Common::g_scm_desc, "dirty") != nullptr};
45 AddField(Telemetry::FieldType::App, "Git_IsDirty", is_git_dirty); 118 AddField(Telemetry::FieldType::App, "Git_IsDirty", is_git_dirty);
46 AddField(Telemetry::FieldType::App, "Git_Branch", Common::g_scm_branch); 119 AddField(Telemetry::FieldType::App, "Git_Branch", Common::g_scm_branch);
47 AddField(Telemetry::FieldType::App, "Git_Revision", Common::g_scm_rev); 120 AddField(Telemetry::FieldType::App, "Git_Revision", Common::g_scm_rev);
121 AddField(Telemetry::FieldType::App, "BuildDate", Common::g_build_date);
122 AddField(Telemetry::FieldType::App, "BuildName", Common::g_build_name);
48 123
49 // Log user system information 124 // Log user system information
50 AddField(Telemetry::FieldType::UserSystem, "CPU_Model", Common::GetCPUCaps().cpu_string); 125 AddField(Telemetry::FieldType::UserSystem, "CPU_Model", Common::GetCPUCaps().cpu_string);
@@ -68,6 +143,15 @@ TelemetrySession::TelemetrySession() {
68 Common::GetCPUCaps().sse4_1); 143 Common::GetCPUCaps().sse4_1);
69 AddField(Telemetry::FieldType::UserSystem, "CPU_Extension_x64_SSE42", 144 AddField(Telemetry::FieldType::UserSystem, "CPU_Extension_x64_SSE42",
70 Common::GetCPUCaps().sse4_2); 145 Common::GetCPUCaps().sse4_2);
146#ifdef __APPLE__
147 AddField(Telemetry::FieldType::UserSystem, "OsPlatform", "Apple");
148#elif defined(_WIN32)
149 AddField(Telemetry::FieldType::UserSystem, "OsPlatform", "Windows");
150#elif defined(__linux__) || defined(linux) || defined(__linux)
151 AddField(Telemetry::FieldType::UserSystem, "OsPlatform", "Linux");
152#else
153 AddField(Telemetry::FieldType::UserSystem, "OsPlatform", "Unknown");
154#endif
71 155
72 // Log user configuration information 156 // Log user configuration information
73 AddField(Telemetry::FieldType::UserConfig, "Audio_EnableAudioStretching", 157 AddField(Telemetry::FieldType::UserConfig, "Audio_EnableAudioStretching",
diff --git a/src/core/telemetry_session.h b/src/core/telemetry_session.h
index cf53835c3..550c6ea2d 100644
--- a/src/core/telemetry_session.h
+++ b/src/core/telemetry_session.h
@@ -4,6 +4,7 @@
4 4
5#pragma once 5#pragma once
6 6
7#include <future>
7#include <memory> 8#include <memory>
8#include "common/telemetry.h" 9#include "common/telemetry.h"
9 10
@@ -35,4 +36,25 @@ private:
35 std::unique_ptr<Telemetry::VisitorInterface> backend; ///< Backend interface that logs fields 36 std::unique_ptr<Telemetry::VisitorInterface> backend; ///< Backend interface that logs fields
36}; 37};
37 38
39/**
40 * Gets TelemetryId, a unique identifier used for the user's telemetry sessions.
41 * @returns The current TelemetryId for the session.
42 */
43u64 GetTelemetryId();
44
45/**
46 * Regenerates TelemetryId, a unique identifier used for the user's telemetry sessions.
47 * @returns The new TelemetryId that was generated.
48 */
49u64 RegenerateTelemetryId();
50
51/**
52 * Verifies the username and token.
53 * @param username Citra username to use for authentication.
54 * @param token Citra token to use for authentication.
55 * @param func A function that gets exectued when the verification is finished
56 * @returns Future with bool indicating whether the verification succeeded
57 */
58std::future<bool> VerifyLogin(std::string username, std::string token, std::function<void()> func);
59
38} // namespace Core 60} // namespace Core
diff --git a/src/input_common/CMakeLists.txt b/src/input_common/CMakeLists.txt
index e3e36ada7..92792a702 100644
--- a/src/input_common/CMakeLists.txt
+++ b/src/input_common/CMakeLists.txt
@@ -2,12 +2,14 @@ set(SRCS
2 analog_from_button.cpp 2 analog_from_button.cpp
3 keyboard.cpp 3 keyboard.cpp
4 main.cpp 4 main.cpp
5 motion_emu.cpp
5 ) 6 )
6 7
7set(HEADERS 8set(HEADERS
8 analog_from_button.h 9 analog_from_button.h
9 keyboard.h 10 keyboard.h
10 main.h 11 main.h
12 motion_emu.h
11 ) 13 )
12 14
13if(SDL2_FOUND) 15if(SDL2_FOUND)
diff --git a/src/input_common/main.cpp b/src/input_common/main.cpp
index 699f41e6b..557353740 100644
--- a/src/input_common/main.cpp
+++ b/src/input_common/main.cpp
@@ -7,6 +7,7 @@
7#include "input_common/analog_from_button.h" 7#include "input_common/analog_from_button.h"
8#include "input_common/keyboard.h" 8#include "input_common/keyboard.h"
9#include "input_common/main.h" 9#include "input_common/main.h"
10#include "input_common/motion_emu.h"
10#ifdef HAVE_SDL2 11#ifdef HAVE_SDL2
11#include "input_common/sdl/sdl.h" 12#include "input_common/sdl/sdl.h"
12#endif 13#endif
@@ -14,12 +15,16 @@
14namespace InputCommon { 15namespace InputCommon {
15 16
16static std::shared_ptr<Keyboard> keyboard; 17static std::shared_ptr<Keyboard> keyboard;
18static std::shared_ptr<MotionEmu> motion_emu;
17 19
18void Init() { 20void Init() {
19 keyboard = std::make_shared<InputCommon::Keyboard>(); 21 keyboard = std::make_shared<Keyboard>();
20 Input::RegisterFactory<Input::ButtonDevice>("keyboard", keyboard); 22 Input::RegisterFactory<Input::ButtonDevice>("keyboard", keyboard);
21 Input::RegisterFactory<Input::AnalogDevice>("analog_from_button", 23 Input::RegisterFactory<Input::AnalogDevice>("analog_from_button",
22 std::make_shared<InputCommon::AnalogFromButton>()); 24 std::make_shared<AnalogFromButton>());
25 motion_emu = std::make_shared<MotionEmu>();
26 Input::RegisterFactory<Input::MotionDevice>("motion_emu", motion_emu);
27
23#ifdef HAVE_SDL2 28#ifdef HAVE_SDL2
24 SDL::Init(); 29 SDL::Init();
25#endif 30#endif
@@ -29,6 +34,8 @@ void Shutdown() {
29 Input::UnregisterFactory<Input::ButtonDevice>("keyboard"); 34 Input::UnregisterFactory<Input::ButtonDevice>("keyboard");
30 keyboard.reset(); 35 keyboard.reset();
31 Input::UnregisterFactory<Input::AnalogDevice>("analog_from_button"); 36 Input::UnregisterFactory<Input::AnalogDevice>("analog_from_button");
37 Input::UnregisterFactory<Input::MotionDevice>("motion_emu");
38 motion_emu.reset();
32 39
33#ifdef HAVE_SDL2 40#ifdef HAVE_SDL2
34 SDL::Shutdown(); 41 SDL::Shutdown();
@@ -39,6 +46,10 @@ Keyboard* GetKeyboard() {
39 return keyboard.get(); 46 return keyboard.get();
40} 47}
41 48
49MotionEmu* GetMotionEmu() {
50 return motion_emu.get();
51}
52
42std::string GenerateKeyboardParam(int key_code) { 53std::string GenerateKeyboardParam(int key_code) {
43 Common::ParamPackage param{ 54 Common::ParamPackage param{
44 {"engine", "keyboard"}, {"code", std::to_string(key_code)}, 55 {"engine", "keyboard"}, {"code", std::to_string(key_code)},
diff --git a/src/input_common/main.h b/src/input_common/main.h
index 140bbd014..5604f0fa8 100644
--- a/src/input_common/main.h
+++ b/src/input_common/main.h
@@ -11,7 +11,7 @@ namespace InputCommon {
11/// Initializes and registers all built-in input device factories. 11/// Initializes and registers all built-in input device factories.
12void Init(); 12void Init();
13 13
14/// Unresisters all build-in input device factories and shut them down. 14/// Deregisters all built-in input device factories and shuts them down.
15void Shutdown(); 15void Shutdown();
16 16
17class Keyboard; 17class Keyboard;
@@ -19,6 +19,11 @@ class Keyboard;
19/// Gets the keyboard button device factory. 19/// Gets the keyboard button device factory.
20Keyboard* GetKeyboard(); 20Keyboard* GetKeyboard();
21 21
22class MotionEmu;
23
24/// Gets the motion emulation factory.
25MotionEmu* GetMotionEmu();
26
22/// Generates a serialized param package for creating a keyboard button device 27/// Generates a serialized param package for creating a keyboard button device
23std::string GenerateKeyboardParam(int key_code); 28std::string GenerateKeyboardParam(int key_code);
24 29
diff --git a/src/input_common/motion_emu.cpp b/src/input_common/motion_emu.cpp
new file mode 100644
index 000000000..59a035e70
--- /dev/null
+++ b/src/input_common/motion_emu.cpp
@@ -0,0 +1,168 @@
1// Copyright 2017 Citra Emulator Project
2// Licensed under GPLv2 or any later version
3// Refer to the license.txt file included.
4
5#include <chrono>
6#include <mutex>
7#include <thread>
8#include <tuple>
9#include "common/math_util.h"
10#include "common/quaternion.h"
11#include "common/thread.h"
12#include "common/vector_math.h"
13#include "input_common/motion_emu.h"
14
15namespace InputCommon {
16
17// Implementation class of the motion emulation device
18class MotionEmuDevice {
19public:
20 MotionEmuDevice(int update_millisecond, float sensitivity)
21 : update_millisecond(update_millisecond),
22 update_duration(std::chrono::duration_cast<std::chrono::steady_clock::duration>(
23 std::chrono::milliseconds(update_millisecond))),
24 sensitivity(sensitivity), motion_emu_thread(&MotionEmuDevice::MotionEmuThread, this) {}
25
26 ~MotionEmuDevice() {
27 if (motion_emu_thread.joinable()) {
28 shutdown_event.Set();
29 motion_emu_thread.join();
30 }
31 }
32
33 void BeginTilt(int x, int y) {
34 mouse_origin = Math::MakeVec(x, y);
35 is_tilting = true;
36 }
37
38 void Tilt(int x, int y) {
39 auto mouse_move = Math::MakeVec(x, y) - mouse_origin;
40 if (is_tilting) {
41 std::lock_guard<std::mutex> guard(tilt_mutex);
42 if (mouse_move.x == 0 && mouse_move.y == 0) {
43 tilt_angle = 0;
44 } else {
45 tilt_direction = mouse_move.Cast<float>();
46 tilt_angle = MathUtil::Clamp(tilt_direction.Normalize() * sensitivity, 0.0f,
47 MathUtil::PI * 0.5f);
48 }
49 }
50 }
51
52 void EndTilt() {
53 std::lock_guard<std::mutex> guard(tilt_mutex);
54 tilt_angle = 0;
55 is_tilting = false;
56 }
57
58 std::tuple<Math::Vec3<float>, Math::Vec3<float>> GetStatus() {
59 std::lock_guard<std::mutex> guard(status_mutex);
60 return status;
61 }
62
63private:
64 const int update_millisecond;
65 const std::chrono::steady_clock::duration update_duration;
66 const float sensitivity;
67
68 Math::Vec2<int> mouse_origin;
69
70 std::mutex tilt_mutex;
71 Math::Vec2<float> tilt_direction;
72 float tilt_angle = 0;
73
74 bool is_tilting = false;
75
76 Common::Event shutdown_event;
77
78 std::tuple<Math::Vec3<float>, Math::Vec3<float>> status;
79 std::mutex status_mutex;
80
81 // Note: always keep the thread declaration at the end so that other objects are initialized
82 // before this!
83 std::thread motion_emu_thread;
84
85 void MotionEmuThread() {
86 auto update_time = std::chrono::steady_clock::now();
87 Math::Quaternion<float> q = MakeQuaternion(Math::Vec3<float>(), 0);
88 Math::Quaternion<float> old_q;
89
90 while (!shutdown_event.WaitUntil(update_time)) {
91 update_time += update_duration;
92 old_q = q;
93
94 {
95 std::lock_guard<std::mutex> guard(tilt_mutex);
96
97 // Find the quaternion describing current 3DS tilting
98 q = MakeQuaternion(Math::MakeVec(-tilt_direction.y, 0.0f, tilt_direction.x),
99 tilt_angle);
100 }
101
102 auto inv_q = q.Inverse();
103
104 // Set the gravity vector in world space
105 auto gravity = Math::MakeVec(0.0f, -1.0f, 0.0f);
106
107 // Find the angular rate vector in world space
108 auto angular_rate = ((q - old_q) * inv_q).xyz * 2;
109 angular_rate *= 1000 / update_millisecond / MathUtil::PI * 180;
110
111 // Transform the two vectors from world space to 3DS space
112 gravity = QuaternionRotate(inv_q, gravity);
113 angular_rate = QuaternionRotate(inv_q, angular_rate);
114
115 // Update the sensor state
116 {
117 std::lock_guard<std::mutex> guard(status_mutex);
118 status = std::make_tuple(gravity, angular_rate);
119 }
120 }
121 }
122};
123
124// Interface wrapper held by input receiver as a unique_ptr. It holds the implementation class as
125// a shared_ptr, which is also observed by the factory class as a weak_ptr. In this way the factory
126// can forward all the inputs to the implementation only when it is valid.
127class MotionEmuDeviceWrapper : public Input::MotionDevice {
128public:
129 MotionEmuDeviceWrapper(int update_millisecond, float sensitivity) {
130 device = std::make_shared<MotionEmuDevice>(update_millisecond, sensitivity);
131 }
132
133 std::tuple<Math::Vec3<float>, Math::Vec3<float>> GetStatus() const {
134 return device->GetStatus();
135 }
136
137 std::shared_ptr<MotionEmuDevice> device;
138};
139
140std::unique_ptr<Input::MotionDevice> MotionEmu::Create(const Common::ParamPackage& params) {
141 int update_period = params.Get("update_period", 100);
142 float sensitivity = params.Get("sensitivity", 0.01f);
143 auto device_wrapper = std::make_unique<MotionEmuDeviceWrapper>(update_period, sensitivity);
144 // Previously created device is disconnected here. Having two motion devices for 3DS is not
145 // expected.
146 current_device = device_wrapper->device;
147 return std::move(device_wrapper);
148}
149
150void MotionEmu::BeginTilt(int x, int y) {
151 if (auto ptr = current_device.lock()) {
152 ptr->BeginTilt(x, y);
153 }
154}
155
156void MotionEmu::Tilt(int x, int y) {
157 if (auto ptr = current_device.lock()) {
158 ptr->Tilt(x, y);
159 }
160}
161
162void MotionEmu::EndTilt() {
163 if (auto ptr = current_device.lock()) {
164 ptr->EndTilt();
165 }
166}
167
168} // namespace InputCommon
diff --git a/src/input_common/motion_emu.h b/src/input_common/motion_emu.h
new file mode 100644
index 000000000..7a7e22467
--- /dev/null
+++ b/src/input_common/motion_emu.h
@@ -0,0 +1,46 @@
1// Copyright 2017 Citra Emulator Project
2// Licensed under GPLv2 or any later version
3// Refer to the license.txt file included.
4
5#pragma once
6
7#include "core/frontend/input.h"
8
9namespace InputCommon {
10
11class MotionEmuDevice;
12
13class MotionEmu : public Input::Factory<Input::MotionDevice> {
14public:
15 /**
16 * Creates a motion device emulated from mouse input
17 * @param params contains parameters for creating the device:
18 * - "update_period": update period in milliseconds
19 * - "sensitivity": the coefficient converting mouse movement to tilting angle
20 */
21 std::unique_ptr<Input::MotionDevice> Create(const Common::ParamPackage& params) override;
22
23 /**
24 * Signals that a motion sensor tilt has begun.
25 * @param x the x-coordinate of the cursor
26 * @param y the y-coordinate of the cursor
27 */
28 void BeginTilt(int x, int y);
29
30 /**
31 * Signals that a motion sensor tilt is occurring.
32 * @param x the x-coordinate of the cursor
33 * @param y the y-coordinate of the cursor
34 */
35 void Tilt(int x, int y);
36
37 /**
38 * Signals that a motion sensor tilt has ended.
39 */
40 void EndTilt();
41
42private:
43 std::weak_ptr<MotionEmuDevice> current_device;
44};
45
46} // namespace InputCommon
diff --git a/src/input_common/sdl/sdl.cpp b/src/input_common/sdl/sdl.cpp
index 756ee58b7..d404afa89 100644
--- a/src/input_common/sdl/sdl.cpp
+++ b/src/input_common/sdl/sdl.cpp
@@ -159,7 +159,7 @@ public:
159 * - "axis"(optional): the index of the axis to bind 159 * - "axis"(optional): the index of the axis to bind
160 * - "direction"(only used for hat): the direction name of the hat to bind. Can be "up", 160 * - "direction"(only used for hat): the direction name of the hat to bind. Can be "up",
161 * "down", "left" or "right" 161 * "down", "left" or "right"
162 * - "threshould"(only used for axis): a float value in (-1.0, 1.0) which the button is 162 * - "threshold"(only used for axis): a float value in (-1.0, 1.0) which the button is
163 * triggered if the axis value crosses 163 * triggered if the axis value crosses
164 * - "direction"(only used for axis): "+" means the button is triggered when the axis value 164 * - "direction"(only used for axis): "+" means the button is triggered when the axis value
165 * is greater than the threshold; "-" means the button is triggered when the axis value 165 * is greater than the threshold; "-" means the button is triggered when the axis value
diff --git a/src/network/packet.cpp b/src/network/packet.cpp
index 660e92c0d..7e1a812f3 100644
--- a/src/network/packet.cpp
+++ b/src/network/packet.cpp
@@ -13,6 +13,18 @@
13 13
14namespace Network { 14namespace Network {
15 15
16#ifndef htonll
17u64 htonll(u64 x) {
18 return ((1 == htonl(1)) ? (x) : ((uint64_t)htonl((x)&0xFFFFFFFF) << 32) | htonl((x) >> 32));
19}
20#endif
21
22#ifndef ntohll
23u64 ntohll(u64 x) {
24 return ((1 == ntohl(1)) ? (x) : ((uint64_t)ntohl((x)&0xFFFFFFFF) << 32) | ntohl((x) >> 32));
25}
26#endif
27
16void Packet::Append(const void* in_data, std::size_t size_in_bytes) { 28void Packet::Append(const void* in_data, std::size_t size_in_bytes) {
17 if (in_data && (size_in_bytes > 0)) { 29 if (in_data && (size_in_bytes > 0)) {
18 std::size_t start = data.size(); 30 std::size_t start = data.size();
@@ -100,6 +112,20 @@ Packet& Packet::operator>>(u32& out_data) {
100 return *this; 112 return *this;
101} 113}
102 114
115Packet& Packet::operator>>(s64& out_data) {
116 s64 value;
117 Read(&value, sizeof(value));
118 out_data = ntohll(value);
119 return *this;
120}
121
122Packet& Packet::operator>>(u64& out_data) {
123 u64 value;
124 Read(&value, sizeof(value));
125 out_data = ntohll(value);
126 return *this;
127}
128
103Packet& Packet::operator>>(float& out_data) { 129Packet& Packet::operator>>(float& out_data) {
104 Read(&out_data, sizeof(out_data)); 130 Read(&out_data, sizeof(out_data));
105 return *this; 131 return *this;
@@ -183,6 +209,18 @@ Packet& Packet::operator<<(u32 in_data) {
183 return *this; 209 return *this;
184} 210}
185 211
212Packet& Packet::operator<<(s64 in_data) {
213 s64 toWrite = htonll(in_data);
214 Append(&toWrite, sizeof(toWrite));
215 return *this;
216}
217
218Packet& Packet::operator<<(u64 in_data) {
219 u64 toWrite = htonll(in_data);
220 Append(&toWrite, sizeof(toWrite));
221 return *this;
222}
223
186Packet& Packet::operator<<(float in_data) { 224Packet& Packet::operator<<(float in_data) {
187 Append(&in_data, sizeof(in_data)); 225 Append(&in_data, sizeof(in_data));
188 return *this; 226 return *this;
@@ -195,7 +233,7 @@ Packet& Packet::operator<<(double in_data) {
195 233
196Packet& Packet::operator<<(const char* in_data) { 234Packet& Packet::operator<<(const char* in_data) {
197 // First insert string length 235 // First insert string length
198 u32 length = std::strlen(in_data); 236 u32 length = static_cast<u32>(std::strlen(in_data));
199 *this << length; 237 *this << length;
200 238
201 // Then insert characters 239 // Then insert characters
diff --git a/src/network/packet.h b/src/network/packet.h
index 94b351ab1..5a2e58dc2 100644
--- a/src/network/packet.h
+++ b/src/network/packet.h
@@ -72,6 +72,8 @@ public:
72 Packet& operator>>(u16& out_data); 72 Packet& operator>>(u16& out_data);
73 Packet& operator>>(s32& out_data); 73 Packet& operator>>(s32& out_data);
74 Packet& operator>>(u32& out_data); 74 Packet& operator>>(u32& out_data);
75 Packet& operator>>(s64& out_data);
76 Packet& operator>>(u64& out_data);
75 Packet& operator>>(float& out_data); 77 Packet& operator>>(float& out_data);
76 Packet& operator>>(double& out_data); 78 Packet& operator>>(double& out_data);
77 Packet& operator>>(char* out_data); 79 Packet& operator>>(char* out_data);
@@ -89,6 +91,8 @@ public:
89 Packet& operator<<(u16 in_data); 91 Packet& operator<<(u16 in_data);
90 Packet& operator<<(s32 in_data); 92 Packet& operator<<(s32 in_data);
91 Packet& operator<<(u32 in_data); 93 Packet& operator<<(u32 in_data);
94 Packet& operator<<(s64 in_data);
95 Packet& operator<<(u64 in_data);
92 Packet& operator<<(float in_data); 96 Packet& operator<<(float in_data);
93 Packet& operator<<(double in_data); 97 Packet& operator<<(double in_data);
94 Packet& operator<<(const char* in_data); 98 Packet& operator<<(const char* in_data);
diff --git a/src/network/room.cpp b/src/network/room.cpp
index 8b7915bb7..261049ab0 100644
--- a/src/network/room.cpp
+++ b/src/network/room.cpp
@@ -4,9 +4,9 @@
4 4
5#include <algorithm> 5#include <algorithm>
6#include <atomic> 6#include <atomic>
7#include <mutex>
7#include <random> 8#include <random>
8#include <thread> 9#include <thread>
9#include <vector>
10#include "enet/enet.h" 10#include "enet/enet.h"
11#include "network/packet.h" 11#include "network/packet.h"
12#include "network/room.h" 12#include "network/room.h"
@@ -19,7 +19,7 @@ static constexpr u32 MaxConcurrentConnections = 10;
19class Room::RoomImpl { 19class Room::RoomImpl {
20public: 20public:
21 // This MAC address is used to generate a 'Nintendo' like Mac address. 21 // This MAC address is used to generate a 'Nintendo' like Mac address.
22 const MacAddress NintendoOUI = {0x00, 0x1F, 0x32, 0x00, 0x00, 0x00}; 22 const MacAddress NintendoOUI;
23 std::mt19937 random_gen; ///< Random number generator. Used for GenerateMacAddress 23 std::mt19937 random_gen; ///< Random number generator. Used for GenerateMacAddress
24 24
25 ENetHost* server = nullptr; ///< Network interface. 25 ENetHost* server = nullptr; ///< Network interface.
@@ -29,14 +29,17 @@ public:
29 29
30 struct Member { 30 struct Member {
31 std::string nickname; ///< The nickname of the member. 31 std::string nickname; ///< The nickname of the member.
32 std::string game_name; ///< The current game of the member 32 GameInfo game_info; ///< The current game of the member
33 MacAddress mac_address; ///< The assigned mac address of the member. 33 MacAddress mac_address; ///< The assigned mac address of the member.
34 ENetPeer* peer; ///< The remote peer. 34 ENetPeer* peer; ///< The remote peer.
35 }; 35 };
36 using MemberList = std::vector<Member>; 36 using MemberList = std::vector<Member>;
37 MemberList members; ///< Information about the members of this room. 37 MemberList members; ///< Information about the members of this room
38 mutable std::mutex member_mutex; ///< Mutex for locking the members list
39 /// This should be a std::shared_mutex as soon as C++17 is supported
38 40
39 RoomImpl() : random_gen(std::random_device()()) {} 41 RoomImpl()
42 : random_gen(std::random_device()()), NintendoOUI{0x00, 0x1F, 0x32, 0x00, 0x00, 0x00} {}
40 43
41 /// Thread that receives and dispatches network packets 44 /// Thread that receives and dispatches network packets
42 std::unique_ptr<std::thread> room_thread; 45 std::unique_ptr<std::thread> room_thread;
@@ -146,7 +149,7 @@ void Room::RoomImpl::ServerLoop() {
146 case IdJoinRequest: 149 case IdJoinRequest:
147 HandleJoinRequest(&event); 150 HandleJoinRequest(&event);
148 break; 151 break;
149 case IdSetGameName: 152 case IdSetGameInfo:
150 HandleGameNamePacket(&event); 153 HandleGameNamePacket(&event);
151 break; 154 break;
152 case IdWifiPacket: 155 case IdWifiPacket:
@@ -212,7 +215,10 @@ void Room::RoomImpl::HandleJoinRequest(const ENetEvent* event) {
212 member.nickname = nickname; 215 member.nickname = nickname;
213 member.peer = event->peer; 216 member.peer = event->peer;
214 217
215 members.push_back(std::move(member)); 218 {
219 std::lock_guard<std::mutex> lock(member_mutex);
220 members.push_back(std::move(member));
221 }
216 222
217 // Notify everyone that the room information has changed. 223 // Notify everyone that the room information has changed.
218 BroadcastRoomInformation(); 224 BroadcastRoomInformation();
@@ -222,12 +228,14 @@ void Room::RoomImpl::HandleJoinRequest(const ENetEvent* event) {
222bool Room::RoomImpl::IsValidNickname(const std::string& nickname) const { 228bool Room::RoomImpl::IsValidNickname(const std::string& nickname) const {
223 // A nickname is valid if it is not already taken by anybody else in the room. 229 // A nickname is valid if it is not already taken by anybody else in the room.
224 // TODO(B3N30): Check for empty names, spaces, etc. 230 // TODO(B3N30): Check for empty names, spaces, etc.
231 std::lock_guard<std::mutex> lock(member_mutex);
225 return std::all_of(members.begin(), members.end(), 232 return std::all_of(members.begin(), members.end(),
226 [&nickname](const auto& member) { return member.nickname != nickname; }); 233 [&nickname](const auto& member) { return member.nickname != nickname; });
227} 234}
228 235
229bool Room::RoomImpl::IsValidMacAddress(const MacAddress& address) const { 236bool Room::RoomImpl::IsValidMacAddress(const MacAddress& address) const {
230 // A MAC address is valid if it is not already taken by anybody else in the room. 237 // A MAC address is valid if it is not already taken by anybody else in the room.
238 std::lock_guard<std::mutex> lock(member_mutex);
231 return std::all_of(members.begin(), members.end(), 239 return std::all_of(members.begin(), members.end(),
232 [&address](const auto& member) { return member.mac_address != address; }); 240 [&address](const auto& member) { return member.mac_address != address; });
233} 241}
@@ -278,6 +286,7 @@ void Room::RoomImpl::SendCloseMessage() {
278 packet << static_cast<u8>(IdCloseRoom); 286 packet << static_cast<u8>(IdCloseRoom);
279 ENetPacket* enet_packet = 287 ENetPacket* enet_packet =
280 enet_packet_create(packet.GetData(), packet.GetDataSize(), ENET_PACKET_FLAG_RELIABLE); 288 enet_packet_create(packet.GetData(), packet.GetDataSize(), ENET_PACKET_FLAG_RELIABLE);
289 std::lock_guard<std::mutex> lock(member_mutex);
281 for (auto& member : members) { 290 for (auto& member : members) {
282 enet_peer_send(member.peer, 0, enet_packet); 291 enet_peer_send(member.peer, 0, enet_packet);
283 } 292 }
@@ -294,10 +303,14 @@ void Room::RoomImpl::BroadcastRoomInformation() {
294 packet << room_information.member_slots; 303 packet << room_information.member_slots;
295 304
296 packet << static_cast<u32>(members.size()); 305 packet << static_cast<u32>(members.size());
297 for (const auto& member : members) { 306 {
298 packet << member.nickname; 307 std::lock_guard<std::mutex> lock(member_mutex);
299 packet << member.mac_address; 308 for (const auto& member : members) {
300 packet << member.game_name; 309 packet << member.nickname;
310 packet << member.mac_address;
311 packet << member.game_info.name;
312 packet << member.game_info.id;
313 }
301 } 314 }
302 315
303 ENetPacket* enet_packet = 316 ENetPacket* enet_packet =
@@ -334,11 +347,13 @@ void Room::RoomImpl::HandleWifiPacket(const ENetEvent* event) {
334 ENET_PACKET_FLAG_RELIABLE); 347 ENET_PACKET_FLAG_RELIABLE);
335 348
336 if (destination_address == BroadcastMac) { // Send the data to everyone except the sender 349 if (destination_address == BroadcastMac) { // Send the data to everyone except the sender
350 std::lock_guard<std::mutex> lock(member_mutex);
337 for (const auto& member : members) { 351 for (const auto& member : members) {
338 if (member.peer != event->peer) 352 if (member.peer != event->peer)
339 enet_peer_send(member.peer, 0, enet_packet); 353 enet_peer_send(member.peer, 0, enet_packet);
340 } 354 }
341 } else { // Send the data only to the destination client 355 } else { // Send the data only to the destination client
356 std::lock_guard<std::mutex> lock(member_mutex);
342 auto member = std::find_if(members.begin(), members.end(), 357 auto member = std::find_if(members.begin(), members.end(),
343 [destination_address](const Member& member) -> bool { 358 [destination_address](const Member& member) -> bool {
344 return member.mac_address == destination_address; 359 return member.mac_address == destination_address;
@@ -360,6 +375,8 @@ void Room::RoomImpl::HandleChatPacket(const ENetEvent* event) {
360 auto CompareNetworkAddress = [event](const Member member) -> bool { 375 auto CompareNetworkAddress = [event](const Member member) -> bool {
361 return member.peer == event->peer; 376 return member.peer == event->peer;
362 }; 377 };
378
379 std::lock_guard<std::mutex> lock(member_mutex);
363 const auto sending_member = std::find_if(members.begin(), members.end(), CompareNetworkAddress); 380 const auto sending_member = std::find_if(members.begin(), members.end(), CompareNetworkAddress);
364 if (sending_member == members.end()) { 381 if (sending_member == members.end()) {
365 return; // Received a chat message from a unknown sender 382 return; // Received a chat message from a unknown sender
@@ -384,22 +401,32 @@ void Room::RoomImpl::HandleGameNamePacket(const ENetEvent* event) {
384 in_packet.Append(event->packet->data, event->packet->dataLength); 401 in_packet.Append(event->packet->data, event->packet->dataLength);
385 402
386 in_packet.IgnoreBytes(sizeof(u8)); // Igonore the message type 403 in_packet.IgnoreBytes(sizeof(u8)); // Igonore the message type
387 std::string game_name; 404 GameInfo game_info;
388 in_packet >> game_name; 405 in_packet >> game_info.name;
389 auto member = 406 in_packet >> game_info.id;
390 std::find_if(members.begin(), members.end(), 407
391 [event](const Member& member) -> bool { return member.peer == event->peer; }); 408 {
392 if (member != members.end()) { 409 std::lock_guard<std::mutex> lock(member_mutex);
393 member->game_name = game_name; 410 auto member =
394 BroadcastRoomInformation(); 411 std::find_if(members.begin(), members.end(), [event](const Member& member) -> bool {
412 return member.peer == event->peer;
413 });
414 if (member != members.end()) {
415 member->game_info = game_info;
416 }
395 } 417 }
418 BroadcastRoomInformation();
396} 419}
397 420
398void Room::RoomImpl::HandleClientDisconnection(ENetPeer* client) { 421void Room::RoomImpl::HandleClientDisconnection(ENetPeer* client) {
399 // Remove the client from the members list. 422 // Remove the client from the members list.
400 members.erase(std::remove_if(members.begin(), members.end(), 423 {
401 [client](const Member& member) { return member.peer == client; }), 424 std::lock_guard<std::mutex> lock(member_mutex);
402 members.end()); 425 members.erase(
426 std::remove_if(members.begin(), members.end(),
427 [client](const Member& member) { return member.peer == client; }),
428 members.end());
429 }
403 430
404 // Announce the change to all clients. 431 // Announce the change to all clients.
405 enet_peer_disconnect(client, 0); 432 enet_peer_disconnect(client, 0);
@@ -436,6 +463,19 @@ const RoomInformation& Room::GetRoomInformation() const {
436 return room_impl->room_information; 463 return room_impl->room_information;
437} 464}
438 465
466std::vector<Room::Member> Room::GetRoomMemberList() const {
467 std::vector<Room::Member> member_list;
468 std::lock_guard<std::mutex> lock(room_impl->member_mutex);
469 for (const auto& member_impl : room_impl->members) {
470 Member member;
471 member.nickname = member_impl.nickname;
472 member.mac_address = member_impl.mac_address;
473 member.game_info = member_impl.game_info;
474 member_list.push_back(member);
475 }
476 return member_list;
477};
478
439void Room::Destroy() { 479void Room::Destroy() {
440 room_impl->state = State::Closed; 480 room_impl->state = State::Closed;
441 room_impl->room_thread->join(); 481 room_impl->room_thread->join();
@@ -446,7 +486,10 @@ void Room::Destroy() {
446 } 486 }
447 room_impl->room_information = {}; 487 room_impl->room_information = {};
448 room_impl->server = nullptr; 488 room_impl->server = nullptr;
449 room_impl->members.clear(); 489 {
490 std::lock_guard<std::mutex> lock(room_impl->member_mutex);
491 room_impl->members.clear();
492 }
450 room_impl->room_information.member_slots = 0; 493 room_impl->room_information.member_slots = 0;
451 room_impl->room_information.name.clear(); 494 room_impl->room_information.name.clear();
452} 495}
diff --git a/src/network/room.h b/src/network/room.h
index 54cccf0ae..8285a4d0c 100644
--- a/src/network/room.h
+++ b/src/network/room.h
@@ -7,6 +7,7 @@
7#include <array> 7#include <array>
8#include <memory> 8#include <memory>
9#include <string> 9#include <string>
10#include <vector>
10#include "common/common_types.h" 11#include "common/common_types.h"
11 12
12namespace Network { 13namespace Network {
@@ -21,10 +22,15 @@ struct RoomInformation {
21 u32 member_slots; ///< Maximum number of members in this room 22 u32 member_slots; ///< Maximum number of members in this room
22}; 23};
23 24
25struct GameInfo {
26 std::string name{""};
27 u64 id{0};
28};
29
24using MacAddress = std::array<u8, 6>; 30using MacAddress = std::array<u8, 6>;
25/// A special MAC address that tells the room we're joining to assign us a MAC address 31/// A special MAC address that tells the room we're joining to assign us a MAC address
26/// automatically. 32/// automatically.
27const MacAddress NoPreferredMac = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}; 33constexpr MacAddress NoPreferredMac = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};
28 34
29// 802.11 broadcast MAC address 35// 802.11 broadcast MAC address
30constexpr MacAddress BroadcastMac = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}; 36constexpr MacAddress BroadcastMac = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};
@@ -34,7 +40,7 @@ enum RoomMessageTypes : u8 {
34 IdJoinRequest = 1, 40 IdJoinRequest = 1,
35 IdJoinSuccess, 41 IdJoinSuccess,
36 IdRoomInformation, 42 IdRoomInformation,
37 IdSetGameName, 43 IdSetGameInfo,
38 IdWifiPacket, 44 IdWifiPacket,
39 IdChatMessage, 45 IdChatMessage,
40 IdNameCollision, 46 IdNameCollision,
@@ -51,6 +57,12 @@ public:
51 Closed, ///< The room is not opened and can not accept connections. 57 Closed, ///< The room is not opened and can not accept connections.
52 }; 58 };
53 59
60 struct Member {
61 std::string nickname; ///< The nickname of the member.
62 GameInfo game_info; ///< The current game of the member
63 MacAddress mac_address; ///< The assigned mac address of the member.
64 };
65
54 Room(); 66 Room();
55 ~Room(); 67 ~Room();
56 68
@@ -65,6 +77,11 @@ public:
65 const RoomInformation& GetRoomInformation() const; 77 const RoomInformation& GetRoomInformation() const;
66 78
67 /** 79 /**
80 * Gets a list of the mbmers connected to the room.
81 */
82 std::vector<Member> GetRoomMemberList() const;
83
84 /**
68 * Creates the socket for this room. Will bind to default address if 85 * Creates the socket for this room. Will bind to default address if
69 * server is empty string. 86 * server is empty string.
70 */ 87 */
diff --git a/src/network/room_member.cpp b/src/network/room_member.cpp
index dac9bacae..f229ec6fd 100644
--- a/src/network/room_member.cpp
+++ b/src/network/room_member.cpp
@@ -5,6 +5,7 @@
5#include <atomic> 5#include <atomic>
6#include <list> 6#include <list>
7#include <mutex> 7#include <mutex>
8#include <set>
8#include <thread> 9#include <thread>
9#include "common/assert.h" 10#include "common/assert.h"
10#include "enet/enet.h" 11#include "enet/enet.h"
@@ -25,6 +26,9 @@ public:
25 /// Information about the room we're connected to. 26 /// Information about the room we're connected to.
26 RoomInformation room_information; 27 RoomInformation room_information;
27 28
29 /// The current game name, id and version
30 GameInfo current_game_info;
31
28 std::atomic<State> state{State::Idle}; ///< Current state of the RoomMember. 32 std::atomic<State> state{State::Idle}; ///< Current state of the RoomMember.
29 void SetState(const State new_state); 33 void SetState(const State new_state);
30 bool IsConnected() const; 34 bool IsConnected() const;
@@ -37,6 +41,24 @@ public:
37 std::unique_ptr<std::thread> loop_thread; 41 std::unique_ptr<std::thread> loop_thread;
38 std::mutex send_list_mutex; ///< Mutex that controls access to the `send_list` variable. 42 std::mutex send_list_mutex; ///< Mutex that controls access to the `send_list` variable.
39 std::list<Packet> send_list; ///< A list that stores all packets to send the async 43 std::list<Packet> send_list; ///< A list that stores all packets to send the async
44
45 template <typename T>
46 using CallbackSet = std::set<CallbackHandle<T>>;
47 std::mutex callback_mutex; ///< The mutex used for handling callbacks
48
49 class Callbacks {
50 public:
51 template <typename T>
52 CallbackSet<T>& Get();
53
54 private:
55 CallbackSet<WifiPacket> callback_set_wifi_packet;
56 CallbackSet<ChatEntry> callback_set_chat_messages;
57 CallbackSet<RoomInformation> callback_set_room_information;
58 CallbackSet<State> callback_set_state;
59 };
60 Callbacks callbacks; ///< All CallbackSets to all events
61
40 void MemberLoop(); 62 void MemberLoop();
41 63
42 void StartLoop(); 64 void StartLoop();
@@ -84,12 +106,20 @@ public:
84 * Disconnects the RoomMember from the Room 106 * Disconnects the RoomMember from the Room
85 */ 107 */
86 void Disconnect(); 108 void Disconnect();
109
110 template <typename T>
111 void Invoke(const T& data);
112
113 template <typename T>
114 CallbackHandle<T> Bind(std::function<void(const T&)> callback);
87}; 115};
88 116
89// RoomMemberImpl 117// RoomMemberImpl
90void RoomMember::RoomMemberImpl::SetState(const State new_state) { 118void RoomMember::RoomMemberImpl::SetState(const State new_state) {
91 state = new_state; 119 if (state != new_state) {
92 // TODO(B3N30): Invoke the callback functions 120 state = new_state;
121 Invoke<State>(state);
122 }
93} 123}
94 124
95bool RoomMember::RoomMemberImpl::IsConnected() const { 125bool RoomMember::RoomMemberImpl::IsConnected() const {
@@ -195,9 +225,10 @@ void RoomMember::RoomMemberImpl::HandleRoomInformationPacket(const ENetEvent* ev
195 for (auto& member : member_information) { 225 for (auto& member : member_information) {
196 packet >> member.nickname; 226 packet >> member.nickname;
197 packet >> member.mac_address; 227 packet >> member.mac_address;
198 packet >> member.game_name; 228 packet >> member.game_info.name;
229 packet >> member.game_info.id;
199 } 230 }
200 // TODO(B3N30): Invoke callbacks 231 Invoke(room_information);
201} 232}
202 233
203void RoomMember::RoomMemberImpl::HandleJoinPacket(const ENetEvent* event) { 234void RoomMember::RoomMemberImpl::HandleJoinPacket(const ENetEvent* event) {
@@ -209,7 +240,7 @@ void RoomMember::RoomMemberImpl::HandleJoinPacket(const ENetEvent* event) {
209 240
210 // Parse the MAC Address from the packet 241 // Parse the MAC Address from the packet
211 packet >> mac_address; 242 packet >> mac_address;
212 // TODO(B3N30): Invoke callbacks 243 SetState(State::Joined);
213} 244}
214 245
215void RoomMember::RoomMemberImpl::HandleWifiPackets(const ENetEvent* event) { 246void RoomMember::RoomMemberImpl::HandleWifiPackets(const ENetEvent* event) {
@@ -235,7 +266,7 @@ void RoomMember::RoomMemberImpl::HandleWifiPackets(const ENetEvent* event) {
235 266
236 packet >> wifi_packet.data; 267 packet >> wifi_packet.data;
237 268
238 // TODO(B3N30): Invoke callbacks 269 Invoke<WifiPacket>(wifi_packet);
239} 270}
240 271
241void RoomMember::RoomMemberImpl::HandleChatPacket(const ENetEvent* event) { 272void RoomMember::RoomMemberImpl::HandleChatPacket(const ENetEvent* event) {
@@ -248,7 +279,7 @@ void RoomMember::RoomMemberImpl::HandleChatPacket(const ENetEvent* event) {
248 ChatEntry chat_entry{}; 279 ChatEntry chat_entry{};
249 packet >> chat_entry.nickname; 280 packet >> chat_entry.nickname;
250 packet >> chat_entry.message; 281 packet >> chat_entry.message;
251 // TODO(B3N30): Invoke callbacks 282 Invoke<ChatEntry>(chat_entry);
252} 283}
253 284
254void RoomMember::RoomMemberImpl::Disconnect() { 285void RoomMember::RoomMemberImpl::Disconnect() {
@@ -276,6 +307,46 @@ void RoomMember::RoomMemberImpl::Disconnect() {
276 server = nullptr; 307 server = nullptr;
277} 308}
278 309
310template <>
311RoomMember::RoomMemberImpl::CallbackSet<WifiPacket>& RoomMember::RoomMemberImpl::Callbacks::Get() {
312 return callback_set_wifi_packet;
313}
314
315template <>
316RoomMember::RoomMemberImpl::CallbackSet<RoomMember::State>&
317RoomMember::RoomMemberImpl::Callbacks::Get() {
318 return callback_set_state;
319}
320
321template <>
322RoomMember::RoomMemberImpl::CallbackSet<RoomInformation>&
323RoomMember::RoomMemberImpl::Callbacks::Get() {
324 return callback_set_room_information;
325}
326
327template <>
328RoomMember::RoomMemberImpl::CallbackSet<ChatEntry>& RoomMember::RoomMemberImpl::Callbacks::Get() {
329 return callback_set_chat_messages;
330}
331
332template <typename T>
333void RoomMember::RoomMemberImpl::Invoke(const T& data) {
334 std::lock_guard<std::mutex> lock(callback_mutex);
335 CallbackSet<T> callback_set = callbacks.Get<T>();
336 for (auto const& callback : callback_set)
337 (*callback)(data);
338}
339
340template <typename T>
341RoomMember::CallbackHandle<T> RoomMember::RoomMemberImpl::Bind(
342 std::function<void(const T&)> callback) {
343 std::lock_guard<std::mutex> lock(callback_mutex);
344 CallbackHandle<T> handle;
345 handle = std::make_shared<std::function<void(const T&)>>(callback);
346 callbacks.Get<T>().insert(handle);
347 return handle;
348}
349
279// RoomMember 350// RoomMember
280RoomMember::RoomMember() : room_member_impl{std::make_unique<RoomMemberImpl>()} { 351RoomMember::RoomMember() : room_member_impl{std::make_unique<RoomMemberImpl>()} {
281 room_member_impl->client = enet_host_create(nullptr, 1, NumChannels, 0, 0); 352 room_member_impl->client = enet_host_create(nullptr, 1, NumChannels, 0, 0);
@@ -339,6 +410,7 @@ void RoomMember::Join(const std::string& nick, const char* server_addr, u16 serv
339 room_member_impl->SetState(State::Joining); 410 room_member_impl->SetState(State::Joining);
340 room_member_impl->StartLoop(); 411 room_member_impl->StartLoop();
341 room_member_impl->SendJoinRequest(nick, preferred_mac); 412 room_member_impl->SendJoinRequest(nick, preferred_mac);
413 SendGameInfo(room_member_impl->current_game_info);
342 } else { 414 } else {
343 room_member_impl->SetState(State::CouldNotConnect); 415 room_member_impl->SetState(State::CouldNotConnect);
344 } 416 }
@@ -366,17 +438,53 @@ void RoomMember::SendChatMessage(const std::string& message) {
366 room_member_impl->Send(std::move(packet)); 438 room_member_impl->Send(std::move(packet));
367} 439}
368 440
369void RoomMember::SendGameName(const std::string& game_name) { 441void RoomMember::SendGameInfo(const GameInfo& game_info) {
442 room_member_impl->current_game_info = game_info;
443 if (!IsConnected())
444 return;
445
370 Packet packet; 446 Packet packet;
371 packet << static_cast<u8>(IdSetGameName); 447 packet << static_cast<u8>(IdSetGameInfo);
372 packet << game_name; 448 packet << game_info.name;
449 packet << game_info.id;
373 room_member_impl->Send(std::move(packet)); 450 room_member_impl->Send(std::move(packet));
374} 451}
375 452
453RoomMember::CallbackHandle<RoomMember::State> RoomMember::BindOnStateChanged(
454 std::function<void(const RoomMember::State&)> callback) {
455 return room_member_impl->Bind(callback);
456}
457
458RoomMember::CallbackHandle<WifiPacket> RoomMember::BindOnWifiPacketReceived(
459 std::function<void(const WifiPacket&)> callback) {
460 return room_member_impl->Bind(callback);
461}
462
463RoomMember::CallbackHandle<RoomInformation> RoomMember::BindOnRoomInformationChanged(
464 std::function<void(const RoomInformation&)> callback) {
465 return room_member_impl->Bind(callback);
466}
467
468RoomMember::CallbackHandle<ChatEntry> RoomMember::BindOnChatMessageRecieved(
469 std::function<void(const ChatEntry&)> callback) {
470 return room_member_impl->Bind(callback);
471}
472
473template <typename T>
474void RoomMember::Unbind(CallbackHandle<T> handle) {
475 std::lock_guard<std::mutex> lock(room_member_impl->callback_mutex);
476 room_member_impl->callbacks.Get<T>().erase(handle);
477}
478
376void RoomMember::Leave() { 479void RoomMember::Leave() {
377 room_member_impl->SetState(State::Idle); 480 room_member_impl->SetState(State::Idle);
378 room_member_impl->loop_thread->join(); 481 room_member_impl->loop_thread->join();
379 room_member_impl->loop_thread.reset(); 482 room_member_impl->loop_thread.reset();
380} 483}
381 484
485template void RoomMember::Unbind(CallbackHandle<WifiPacket>);
486template void RoomMember::Unbind(CallbackHandle<RoomMember::State>);
487template void RoomMember::Unbind(CallbackHandle<RoomInformation>);
488template void RoomMember::Unbind(CallbackHandle<ChatEntry>);
489
382} // namespace Network 490} // namespace Network
diff --git a/src/network/room_member.h b/src/network/room_member.h
index bc1af3a7e..98770a234 100644
--- a/src/network/room_member.h
+++ b/src/network/room_member.h
@@ -4,6 +4,7 @@
4 4
5#pragma once 5#pragma once
6 6
7#include <functional>
7#include <memory> 8#include <memory>
8#include <string> 9#include <string>
9#include <vector> 10#include <vector>
@@ -53,12 +54,23 @@ public:
53 54
54 struct MemberInformation { 55 struct MemberInformation {
55 std::string nickname; ///< Nickname of the member. 56 std::string nickname; ///< Nickname of the member.
56 std::string game_name; ///< Name of the game they're currently playing, or empty if they're 57 GameInfo game_info; ///< Name of the game they're currently playing, or empty if they're
57 /// not playing anything. 58 /// not playing anything.
58 MacAddress mac_address; ///< MAC address associated with this member. 59 MacAddress mac_address; ///< MAC address associated with this member.
59 }; 60 };
60 using MemberList = std::vector<MemberInformation>; 61 using MemberList = std::vector<MemberInformation>;
61 62
63 // The handle for the callback functions
64 template <typename T>
65 using CallbackHandle = std::shared_ptr<std::function<void(const T&)>>;
66
67 /**
68 * Unbinds a callback function from the events.
69 * @param handle The connection handle to disconnect
70 */
71 template <typename T>
72 void Unbind(CallbackHandle<T> handle);
73
62 RoomMember(); 74 RoomMember();
63 ~RoomMember(); 75 ~RoomMember();
64 76
@@ -113,10 +125,49 @@ public:
113 void SendChatMessage(const std::string& message); 125 void SendChatMessage(const std::string& message);
114 126
115 /** 127 /**
116 * Sends the current game name to the room. 128 * Sends the current game info to the room.
117 * @param game_name The game name. 129 * @param game_info The game information.
130 */
131 void SendGameInfo(const GameInfo& game_info);
132
133 /**
134 * Binds a function to an event that will be triggered every time the State of the member
135 * changed. The function wil be called every time the event is triggered. The callback function
136 * must not bind or unbind a function. Doing so will cause a deadlock
137 * @param callback The function to call
138 * @return A handle used for removing the function from the registered list
139 */
140 CallbackHandle<State> BindOnStateChanged(std::function<void(const State&)> callback);
141
142 /**
143 * Binds a function to an event that will be triggered every time a WifiPacket is received.
144 * The function wil be called everytime the event is triggered.
145 * The callback function must not bind or unbind a function. Doing so will cause a deadlock
146 * @param callback The function to call
147 * @return A handle used for removing the function from the registered list
148 */
149 CallbackHandle<WifiPacket> BindOnWifiPacketReceived(
150 std::function<void(const WifiPacket&)> callback);
151
152 /**
153 * Binds a function to an event that will be triggered every time the RoomInformation changes.
154 * The function wil be called every time the event is triggered.
155 * The callback function must not bind or unbind a function. Doing so will cause a deadlock
156 * @param callback The function to call
157 * @return A handle used for removing the function from the registered list
158 */
159 CallbackHandle<RoomInformation> BindOnRoomInformationChanged(
160 std::function<void(const RoomInformation&)> callback);
161
162 /**
163 * Binds a function to an event that will be triggered every time a ChatMessage is received.
164 * The function wil be called every time the event is triggered.
165 * The callback function must not bind or unbind a function. Doing so will cause a deadlock
166 * @param callback The function to call
167 * @return A handle used for removing the function from the registered list
118 */ 168 */
119 void SendGameName(const std::string& game_name); 169 CallbackHandle<ChatEntry> BindOnChatMessageRecieved(
170 std::function<void(const ChatEntry&)> callback);
120 171
121 /** 172 /**
122 * Leaves the current room. 173 * Leaves the current room.
diff --git a/src/tests/CMakeLists.txt b/src/tests/CMakeLists.txt
index a14df325a..1aac0daa2 100644
--- a/src/tests/CMakeLists.txt
+++ b/src/tests/CMakeLists.txt
@@ -1,12 +1,16 @@
1set(SRCS 1set(SRCS
2 common/param_package.cpp 2 common/param_package.cpp
3 core/arm/arm_test_common.cpp
4 core/arm/dyncom/arm_dyncom_vfp_tests.cpp
3 core/file_sys/path_parser.cpp 5 core/file_sys/path_parser.cpp
4 core/hle/kernel/hle_ipc.cpp 6 core/hle/kernel/hle_ipc.cpp
7 core/memory/memory.cpp
5 glad.cpp 8 glad.cpp
6 tests.cpp 9 tests.cpp
7 ) 10 )
8 11
9set(HEADERS 12set(HEADERS
13 core/arm/arm_test_common.h
10 ) 14 )
11 15
12create_directory_groups(${SRCS} ${HEADERS}) 16create_directory_groups(${SRCS} ${HEADERS})
diff --git a/src/tests/core/arm/arm_test_common.cpp b/src/tests/core/arm/arm_test_common.cpp
new file mode 100644
index 000000000..2339bdfb8
--- /dev/null
+++ b/src/tests/core/arm/arm_test_common.cpp
@@ -0,0 +1,137 @@
1// Copyright 2016 Citra Emulator Project
2// Licensed under GPLv2 or any later version
3// Refer to the license.txt file included.
4
5#include "core/core.h"
6#include "core/hle/kernel/process.h"
7#include "core/memory.h"
8#include "core/memory_setup.h"
9#include "tests/core/arm/arm_test_common.h"
10
11namespace ArmTests {
12
13static Memory::PageTable* page_table = nullptr;
14
15TestEnvironment::TestEnvironment(bool mutable_memory_)
16 : mutable_memory(mutable_memory_), test_memory(std::make_shared<TestMemory>(this)) {
17
18 Kernel::g_current_process = Kernel::Process::Create("");
19 page_table = &Kernel::g_current_process->vm_manager.page_table;
20
21 page_table->pointers.fill(nullptr);
22 page_table->attributes.fill(Memory::PageType::Unmapped);
23 page_table->cached_res_count.fill(0);
24
25 Memory::MapIoRegion(*page_table, 0x00000000, 0x80000000, test_memory);
26 Memory::MapIoRegion(*page_table, 0x80000000, 0x80000000, test_memory);
27
28 Memory::SetCurrentPageTable(page_table);
29}
30
31TestEnvironment::~TestEnvironment() {
32 Memory::UnmapRegion(*page_table, 0x80000000, 0x80000000);
33 Memory::UnmapRegion(*page_table, 0x00000000, 0x80000000);
34}
35
36void TestEnvironment::SetMemory64(VAddr vaddr, u64 value) {
37 SetMemory32(vaddr + 0, static_cast<u32>(value));
38 SetMemory32(vaddr + 4, static_cast<u32>(value >> 32));
39}
40
41void TestEnvironment::SetMemory32(VAddr vaddr, u32 value) {
42 SetMemory16(vaddr + 0, static_cast<u16>(value));
43 SetMemory16(vaddr + 2, static_cast<u16>(value >> 16));
44}
45
46void TestEnvironment::SetMemory16(VAddr vaddr, u16 value) {
47 SetMemory8(vaddr + 0, static_cast<u8>(value));
48 SetMemory8(vaddr + 1, static_cast<u8>(value >> 8));
49}
50
51void TestEnvironment::SetMemory8(VAddr vaddr, u8 value) {
52 test_memory->data[vaddr] = value;
53}
54
55std::vector<WriteRecord> TestEnvironment::GetWriteRecords() const {
56 return write_records;
57}
58
59void TestEnvironment::ClearWriteRecords() {
60 write_records.clear();
61}
62
63TestEnvironment::TestMemory::~TestMemory() {}
64
65bool TestEnvironment::TestMemory::IsValidAddress(VAddr addr) {
66 return true;
67}
68
69u8 TestEnvironment::TestMemory::Read8(VAddr addr) {
70 auto iter = data.find(addr);
71 if (iter == data.end()) {
72 return addr; // Some arbitrary data
73 }
74 return iter->second;
75}
76
77u16 TestEnvironment::TestMemory::Read16(VAddr addr) {
78 return Read8(addr) | static_cast<u16>(Read8(addr + 1)) << 8;
79}
80
81u32 TestEnvironment::TestMemory::Read32(VAddr addr) {
82 return Read16(addr) | static_cast<u32>(Read16(addr + 2)) << 16;
83}
84
85u64 TestEnvironment::TestMemory::Read64(VAddr addr) {
86 return Read32(addr) | static_cast<u64>(Read32(addr + 4)) << 32;
87}
88
89bool TestEnvironment::TestMemory::ReadBlock(VAddr src_addr, void* dest_buffer, size_t size) {
90 VAddr addr = src_addr;
91 u8* data = static_cast<u8*>(dest_buffer);
92
93 for (size_t i = 0; i < size; i++, addr++, data++) {
94 *data = Read8(addr);
95 }
96
97 return true;
98}
99
100void TestEnvironment::TestMemory::Write8(VAddr addr, u8 data) {
101 env->write_records.emplace_back(8, addr, data);
102 if (env->mutable_memory)
103 env->SetMemory8(addr, data);
104}
105
106void TestEnvironment::TestMemory::Write16(VAddr addr, u16 data) {
107 env->write_records.emplace_back(16, addr, data);
108 if (env->mutable_memory)
109 env->SetMemory16(addr, data);
110}
111
112void TestEnvironment::TestMemory::Write32(VAddr addr, u32 data) {
113 env->write_records.emplace_back(32, addr, data);
114 if (env->mutable_memory)
115 env->SetMemory32(addr, data);
116}
117
118void TestEnvironment::TestMemory::Write64(VAddr addr, u64 data) {
119 env->write_records.emplace_back(64, addr, data);
120 if (env->mutable_memory)
121 env->SetMemory64(addr, data);
122}
123
124bool TestEnvironment::TestMemory::WriteBlock(VAddr dest_addr, const void* src_buffer, size_t size) {
125 VAddr addr = dest_addr;
126 const u8* data = static_cast<const u8*>(src_buffer);
127
128 for (size_t i = 0; i < size; i++, addr++, data++) {
129 env->write_records.emplace_back(8, addr, *data);
130 if (env->mutable_memory)
131 env->SetMemory8(addr, *data);
132 }
133
134 return true;
135}
136
137} // namespace ArmTests
diff --git a/src/tests/core/arm/arm_test_common.h b/src/tests/core/arm/arm_test_common.h
new file mode 100644
index 000000000..592c28594
--- /dev/null
+++ b/src/tests/core/arm/arm_test_common.h
@@ -0,0 +1,84 @@
1// Copyright 2016 Citra Emulator Project
2// Licensed under GPLv2 or any later version
3// Refer to the license.txt file included.
4
5#include <tuple>
6#include <unordered_map>
7#include <vector>
8
9#include "common/common_types.h"
10#include "core/mmio.h"
11
12namespace ArmTests {
13
14struct WriteRecord {
15 WriteRecord(size_t size, VAddr addr, u64 data) : size(size), addr(addr), data(data) {}
16 size_t size;
17 VAddr addr;
18 u64 data;
19 bool operator==(const WriteRecord& o) const {
20 return std::tie(size, addr, data) == std::tie(o.size, o.addr, o.data);
21 }
22};
23
24class TestEnvironment final {
25public:
26 /*
27 * Inititalise test environment
28 * @param mutable_memory If false, writes to memory can never be read back.
29 * (Memory is immutable.)
30 */
31 explicit TestEnvironment(bool mutable_memory = false);
32
33 /// Shutdown test environment
34 ~TestEnvironment();
35
36 /// Sets value at memory location vaddr.
37 void SetMemory8(VAddr vaddr, u8 value);
38 void SetMemory16(VAddr vaddr, u16 value);
39 void SetMemory32(VAddr vaddr, u32 value);
40 void SetMemory64(VAddr vaddr, u64 value);
41
42 /**
43 * Whenever Memory::Write{8,16,32,64} is called within the test environment,
44 * a new write-record is made.
45 * @returns A vector of write records made since they were last cleared.
46 */
47 std::vector<WriteRecord> GetWriteRecords() const;
48
49 /// Empties the internal write-record store.
50 void ClearWriteRecords();
51
52private:
53 friend struct TestMemory;
54 struct TestMemory final : Memory::MMIORegion {
55 explicit TestMemory(TestEnvironment* env_) : env(env_) {}
56 TestEnvironment* env;
57
58 ~TestMemory() override;
59
60 bool IsValidAddress(VAddr addr) override;
61
62 u8 Read8(VAddr addr) override;
63 u16 Read16(VAddr addr) override;
64 u32 Read32(VAddr addr) override;
65 u64 Read64(VAddr addr) override;
66
67 bool ReadBlock(VAddr src_addr, void* dest_buffer, size_t size) override;
68
69 void Write8(VAddr addr, u8 data) override;
70 void Write16(VAddr addr, u16 data) override;
71 void Write32(VAddr addr, u32 data) override;
72 void Write64(VAddr addr, u64 data) override;
73
74 bool WriteBlock(VAddr dest_addr, const void* src_buffer, size_t size) override;
75
76 std::unordered_map<VAddr, u8> data;
77 };
78
79 bool mutable_memory;
80 std::shared_ptr<TestMemory> test_memory;
81 std::vector<WriteRecord> write_records;
82};
83
84} // namespace ArmTests
diff --git a/src/tests/core/arm/dyncom/arm_dyncom_vfp_tests.cpp b/src/tests/core/arm/dyncom/arm_dyncom_vfp_tests.cpp
new file mode 100644
index 000000000..83719a58e
--- /dev/null
+++ b/src/tests/core/arm/dyncom/arm_dyncom_vfp_tests.cpp
@@ -0,0 +1,50 @@
1// Copyright 2016 Citra Emulator Project
2// Licensed under GPLv2 or any later version
3// Refer to the license.txt file included.
4
5#include <catch.hpp>
6
7#include "core/arm/dyncom/arm_dyncom.h"
8#include "core/core_timing.h"
9#include "tests/core/arm/arm_test_common.h"
10
11namespace ArmTests {
12
13struct VfpTestCase {
14 u32 initial_fpscr;
15 u32 a;
16 u32 b;
17 u32 result;
18 u32 final_fpscr;
19};
20
21TEST_CASE("ARM_DynCom (vfp): vadd", "[arm_dyncom]") {
22 TestEnvironment test_env(false);
23 test_env.SetMemory32(0, 0xEE321A03); // vadd.f32 s2, s4, s6
24 test_env.SetMemory32(4, 0xEAFFFFFE); // b +#0
25
26 ARM_DynCom dyncom(USER32MODE);
27
28 std::vector<VfpTestCase> test_cases{{
29#include "vfp_vadd_f32.inc"
30 }};
31
32 for (const auto& test_case : test_cases) {
33 dyncom.SetPC(0);
34 dyncom.SetVFPSystemReg(VFP_FPSCR, test_case.initial_fpscr);
35 dyncom.SetVFPReg(4, test_case.a);
36 dyncom.SetVFPReg(6, test_case.b);
37 dyncom.ExecuteInstructions(1);
38 if (dyncom.GetVFPReg(2) != test_case.result ||
39 dyncom.GetVFPSystemReg(VFP_FPSCR) != test_case.final_fpscr) {
40 printf("f: %x\n", test_case.initial_fpscr);
41 printf("a: %x\n", test_case.a);
42 printf("b: %x\n", test_case.b);
43 printf("c: %x (%x)\n", dyncom.GetVFPReg(2), test_case.result);
44 printf("f: %x (%x)\n", dyncom.GetVFPSystemReg(VFP_FPSCR), test_case.final_fpscr);
45 FAIL();
46 }
47 }
48}
49
50} // namespace ArmTests \ No newline at end of file
diff --git a/src/tests/core/arm/dyncom/vfp_vadd_f32.inc b/src/tests/core/arm/dyncom/vfp_vadd_f32.inc
new file mode 100644
index 000000000..d0032c2e6
--- /dev/null
+++ b/src/tests/core/arm/dyncom/vfp_vadd_f32.inc
@@ -0,0 +1,13456 @@
1{0x3c00000, 0x0, 0x0, 0x0, 0x3c00000},
2{0x3c00000, 0x0, 0x1, 0x0, 0x3c00080},
3{0x3c00000, 0x0, 0x76, 0x0, 0x3c00080},
4{0x3c00000, 0x0, 0x2b94, 0x0, 0x3c00080},
5{0x3c00000, 0x0, 0x636d24, 0x0, 0x3c00080},
6{0x3c00000, 0x0, 0x7fffff, 0x0, 0x3c00080},
7{0x3c00000, 0x0, 0x800000, 0x800000, 0x3c00000},
8{0x3c00000, 0x0, 0x800002, 0x800002, 0x3c00000},
9{0x3c00000, 0x0, 0x1398437, 0x1398437, 0x3c00000},
10{0x3c00000, 0x0, 0xba98d27, 0xba98d27, 0x3c00000},
11{0x3c00000, 0x0, 0xba98d7a, 0xba98d7a, 0x3c00000},
12{0x3c00000, 0x0, 0x751f853a, 0x751f853a, 0x3c00000},
13{0x3c00000, 0x0, 0x7f7ffff0, 0x7f7ffff0, 0x3c00000},
14{0x3c00000, 0x0, 0x7f7fffff, 0x7f7fffff, 0x3c00000},
15{0x3c00000, 0x0, 0x7f800000, 0x7f800000, 0x3c00000},
16{0x3c00000, 0x0, 0x7f800001, 0x7fc00000, 0x3c00001},
17{0x3c00000, 0x0, 0x7f984a37, 0x7fc00000, 0x3c00001},
18{0x3c00000, 0x0, 0x7fbfffff, 0x7fc00000, 0x3c00001},
19{0x3c00000, 0x0, 0x7fc00000, 0x7fc00000, 0x3c00000},
20{0x3c00000, 0x0, 0x7fd9ba98, 0x7fc00000, 0x3c00000},
21{0x3c00000, 0x0, 0x7fffffff, 0x7fc00000, 0x3c00000},
22{0x3c00000, 0x0, 0x80000000, 0x0, 0x3c00000},
23{0x3c00000, 0x0, 0x80000001, 0x0, 0x3c00080},
24{0x3c00000, 0x0, 0x80000076, 0x0, 0x3c00080},
25{0x3c00000, 0x0, 0x80002b94, 0x0, 0x3c00080},
26{0x3c00000, 0x0, 0x80636d24, 0x0, 0x3c00080},
27{0x3c00000, 0x0, 0x807fffff, 0x0, 0x3c00080},
28{0x3c00000, 0x0, 0x80800000, 0x80800000, 0x3c00000},
29{0x3c00000, 0x0, 0x80800002, 0x80800002, 0x3c00000},
30{0x3c00000, 0x0, 0x81398437, 0x81398437, 0x3c00000},
31{0x3c00000, 0x0, 0x8ba98d27, 0x8ba98d27, 0x3c00000},
32{0x3c00000, 0x0, 0x8ba98d7a, 0x8ba98d7a, 0x3c00000},
33{0x3c00000, 0x0, 0xf51f853a, 0xf51f853a, 0x3c00000},
34{0x3c00000, 0x0, 0xff7ffff0, 0xff7ffff0, 0x3c00000},
35{0x3c00000, 0x0, 0xff7fffff, 0xff7fffff, 0x3c00000},
36{0x3c00000, 0x0, 0xff800000, 0xff800000, 0x3c00000},
37{0x3c00000, 0x0, 0xff800001, 0x7fc00000, 0x3c00001},
38{0x3c00000, 0x0, 0xff984a37, 0x7fc00000, 0x3c00001},
39{0x3c00000, 0x0, 0xffbfffff, 0x7fc00000, 0x3c00001},
40{0x3c00000, 0x0, 0xffc00000, 0x7fc00000, 0x3c00000},
41{0x3c00000, 0x0, 0xffd9ba98, 0x7fc00000, 0x3c00000},
42{0x3c00000, 0x0, 0xffffffff, 0x7fc00000, 0x3c00000},
43{0x3c00000, 0x0, 0x4f3495cb, 0x4f3495cb, 0x3c00000},
44{0x3c00000, 0x0, 0xe73a5134, 0xe73a5134, 0x3c00000},
45{0x3c00000, 0x0, 0x7c994e9e, 0x7c994e9e, 0x3c00000},
46{0x3c00000, 0x0, 0x6164bd6c, 0x6164bd6c, 0x3c00000},
47{0x3c00000, 0x0, 0x9503366, 0x9503366, 0x3c00000},
48{0x3c00000, 0x0, 0xbf5a97c9, 0xbf5a97c9, 0x3c00000},
49{0x3c00000, 0x0, 0xe6ff1a14, 0xe6ff1a14, 0x3c00000},
50{0x3c00000, 0x0, 0x77f31e2f, 0x77f31e2f, 0x3c00000},
51{0x3c00000, 0x0, 0xaab4d7d8, 0xaab4d7d8, 0x3c00000},
52{0x3c00000, 0x0, 0x966320b, 0x966320b, 0x3c00000},
53{0x3c00000, 0x0, 0xb26bddee, 0xb26bddee, 0x3c00000},
54{0x3c00000, 0x0, 0xb5c8e5d3, 0xb5c8e5d3, 0x3c00000},
55{0x3c00000, 0x0, 0x317285d3, 0x317285d3, 0x3c00000},
56{0x3c00000, 0x0, 0x3c9623b1, 0x3c9623b1, 0x3c00000},
57{0x3c00000, 0x0, 0x51fd2c7c, 0x51fd2c7c, 0x3c00000},
58{0x3c00000, 0x0, 0x7b906a6c, 0x7b906a6c, 0x3c00000},
59{0x3c00000, 0x1, 0x0, 0x0, 0x3c00080},
60{0x3c00000, 0x1, 0x1, 0x0, 0x3c00080},
61{0x3c00000, 0x1, 0x76, 0x0, 0x3c00080},
62{0x3c00000, 0x1, 0x2b94, 0x0, 0x3c00080},
63{0x3c00000, 0x1, 0x636d24, 0x0, 0x3c00080},
64{0x3c00000, 0x1, 0x7fffff, 0x0, 0x3c00080},
65{0x3c00000, 0x1, 0x800000, 0x800000, 0x3c00080},
66{0x3c00000, 0x1, 0x800002, 0x800002, 0x3c00080},
67{0x3c00000, 0x1, 0x1398437, 0x1398437, 0x3c00080},
68{0x3c00000, 0x1, 0xba98d27, 0xba98d27, 0x3c00080},
69{0x3c00000, 0x1, 0xba98d7a, 0xba98d7a, 0x3c00080},
70{0x3c00000, 0x1, 0x751f853a, 0x751f853a, 0x3c00080},
71{0x3c00000, 0x1, 0x7f7ffff0, 0x7f7ffff0, 0x3c00080},
72{0x3c00000, 0x1, 0x7f7fffff, 0x7f7fffff, 0x3c00080},
73{0x3c00000, 0x1, 0x7f800000, 0x7f800000, 0x3c00080},
74{0x3c00000, 0x1, 0x7f800001, 0x7fc00000, 0x3c00081},
75{0x3c00000, 0x1, 0x7f984a37, 0x7fc00000, 0x3c00081},
76{0x3c00000, 0x1, 0x7fbfffff, 0x7fc00000, 0x3c00081},
77{0x3c00000, 0x1, 0x7fc00000, 0x7fc00000, 0x3c00080},
78{0x3c00000, 0x1, 0x7fd9ba98, 0x7fc00000, 0x3c00080},
79{0x3c00000, 0x1, 0x7fffffff, 0x7fc00000, 0x3c00080},
80{0x3c00000, 0x1, 0x80000000, 0x0, 0x3c00080},
81{0x3c00000, 0x1, 0x80000001, 0x0, 0x3c00080},
82{0x3c00000, 0x1, 0x80000076, 0x0, 0x3c00080},
83{0x3c00000, 0x1, 0x80002b94, 0x0, 0x3c00080},
84{0x3c00000, 0x1, 0x80636d24, 0x0, 0x3c00080},
85{0x3c00000, 0x1, 0x807fffff, 0x0, 0x3c00080},
86{0x3c00000, 0x1, 0x80800000, 0x80800000, 0x3c00080},
87{0x3c00000, 0x1, 0x80800002, 0x80800002, 0x3c00080},
88{0x3c00000, 0x1, 0x81398437, 0x81398437, 0x3c00080},
89{0x3c00000, 0x1, 0x8ba98d27, 0x8ba98d27, 0x3c00080},
90{0x3c00000, 0x1, 0x8ba98d7a, 0x8ba98d7a, 0x3c00080},
91{0x3c00000, 0x1, 0xf51f853a, 0xf51f853a, 0x3c00080},
92{0x3c00000, 0x1, 0xff7ffff0, 0xff7ffff0, 0x3c00080},
93{0x3c00000, 0x1, 0xff7fffff, 0xff7fffff, 0x3c00080},
94{0x3c00000, 0x1, 0xff800000, 0xff800000, 0x3c00080},
95{0x3c00000, 0x1, 0xff800001, 0x7fc00000, 0x3c00081},
96{0x3c00000, 0x1, 0xff984a37, 0x7fc00000, 0x3c00081},
97{0x3c00000, 0x1, 0xffbfffff, 0x7fc00000, 0x3c00081},
98{0x3c00000, 0x1, 0xffc00000, 0x7fc00000, 0x3c00080},
99{0x3c00000, 0x1, 0xffd9ba98, 0x7fc00000, 0x3c00080},
100{0x3c00000, 0x1, 0xffffffff, 0x7fc00000, 0x3c00080},
101{0x3c00000, 0x1, 0x4f3495cb, 0x4f3495cb, 0x3c00080},
102{0x3c00000, 0x1, 0xe73a5134, 0xe73a5134, 0x3c00080},
103{0x3c00000, 0x1, 0x7c994e9e, 0x7c994e9e, 0x3c00080},
104{0x3c00000, 0x1, 0x6164bd6c, 0x6164bd6c, 0x3c00080},
105{0x3c00000, 0x1, 0x9503366, 0x9503366, 0x3c00080},
106{0x3c00000, 0x1, 0xbf5a97c9, 0xbf5a97c9, 0x3c00080},
107{0x3c00000, 0x1, 0xe6ff1a14, 0xe6ff1a14, 0x3c00080},
108{0x3c00000, 0x1, 0x77f31e2f, 0x77f31e2f, 0x3c00080},
109{0x3c00000, 0x1, 0xaab4d7d8, 0xaab4d7d8, 0x3c00080},
110{0x3c00000, 0x1, 0x966320b, 0x966320b, 0x3c00080},
111{0x3c00000, 0x1, 0xb26bddee, 0xb26bddee, 0x3c00080},
112{0x3c00000, 0x1, 0xb5c8e5d3, 0xb5c8e5d3, 0x3c00080},
113{0x3c00000, 0x1, 0x317285d3, 0x317285d3, 0x3c00080},
114{0x3c00000, 0x1, 0x3c9623b1, 0x3c9623b1, 0x3c00080},
115{0x3c00000, 0x1, 0x51fd2c7c, 0x51fd2c7c, 0x3c00080},
116{0x3c00000, 0x1, 0x7b906a6c, 0x7b906a6c, 0x3c00080},
117{0x3c00000, 0x76, 0x0, 0x0, 0x3c00080},
118{0x3c00000, 0x76, 0x1, 0x0, 0x3c00080},
119{0x3c00000, 0x76, 0x76, 0x0, 0x3c00080},
120{0x3c00000, 0x76, 0x2b94, 0x0, 0x3c00080},
121{0x3c00000, 0x76, 0x636d24, 0x0, 0x3c00080},
122{0x3c00000, 0x76, 0x7fffff, 0x0, 0x3c00080},
123{0x3c00000, 0x76, 0x800000, 0x800000, 0x3c00080},
124{0x3c00000, 0x76, 0x800002, 0x800002, 0x3c00080},
125{0x3c00000, 0x76, 0x1398437, 0x1398437, 0x3c00080},
126{0x3c00000, 0x76, 0xba98d27, 0xba98d27, 0x3c00080},
127{0x3c00000, 0x76, 0xba98d7a, 0xba98d7a, 0x3c00080},
128{0x3c00000, 0x76, 0x751f853a, 0x751f853a, 0x3c00080},
129{0x3c00000, 0x76, 0x7f7ffff0, 0x7f7ffff0, 0x3c00080},
130{0x3c00000, 0x76, 0x7f7fffff, 0x7f7fffff, 0x3c00080},
131{0x3c00000, 0x76, 0x7f800000, 0x7f800000, 0x3c00080},
132{0x3c00000, 0x76, 0x7f800001, 0x7fc00000, 0x3c00081},
133{0x3c00000, 0x76, 0x7f984a37, 0x7fc00000, 0x3c00081},
134{0x3c00000, 0x76, 0x7fbfffff, 0x7fc00000, 0x3c00081},
135{0x3c00000, 0x76, 0x7fc00000, 0x7fc00000, 0x3c00080},
136{0x3c00000, 0x76, 0x7fd9ba98, 0x7fc00000, 0x3c00080},
137{0x3c00000, 0x76, 0x7fffffff, 0x7fc00000, 0x3c00080},
138{0x3c00000, 0x76, 0x80000000, 0x0, 0x3c00080},
139{0x3c00000, 0x76, 0x80000001, 0x0, 0x3c00080},
140{0x3c00000, 0x76, 0x80000076, 0x0, 0x3c00080},
141{0x3c00000, 0x76, 0x80002b94, 0x0, 0x3c00080},
142{0x3c00000, 0x76, 0x80636d24, 0x0, 0x3c00080},
143{0x3c00000, 0x76, 0x807fffff, 0x0, 0x3c00080},
144{0x3c00000, 0x76, 0x80800000, 0x80800000, 0x3c00080},
145{0x3c00000, 0x76, 0x80800002, 0x80800002, 0x3c00080},
146{0x3c00000, 0x76, 0x81398437, 0x81398437, 0x3c00080},
147{0x3c00000, 0x76, 0x8ba98d27, 0x8ba98d27, 0x3c00080},
148{0x3c00000, 0x76, 0x8ba98d7a, 0x8ba98d7a, 0x3c00080},
149{0x3c00000, 0x76, 0xf51f853a, 0xf51f853a, 0x3c00080},
150{0x3c00000, 0x76, 0xff7ffff0, 0xff7ffff0, 0x3c00080},
151{0x3c00000, 0x76, 0xff7fffff, 0xff7fffff, 0x3c00080},
152{0x3c00000, 0x76, 0xff800000, 0xff800000, 0x3c00080},
153{0x3c00000, 0x76, 0xff800001, 0x7fc00000, 0x3c00081},
154{0x3c00000, 0x76, 0xff984a37, 0x7fc00000, 0x3c00081},
155{0x3c00000, 0x76, 0xffbfffff, 0x7fc00000, 0x3c00081},
156{0x3c00000, 0x76, 0xffc00000, 0x7fc00000, 0x3c00080},
157{0x3c00000, 0x76, 0xffd9ba98, 0x7fc00000, 0x3c00080},
158{0x3c00000, 0x76, 0xffffffff, 0x7fc00000, 0x3c00080},
159{0x3c00000, 0x76, 0x4f3495cb, 0x4f3495cb, 0x3c00080},
160{0x3c00000, 0x76, 0xe73a5134, 0xe73a5134, 0x3c00080},
161{0x3c00000, 0x76, 0x7c994e9e, 0x7c994e9e, 0x3c00080},
162{0x3c00000, 0x76, 0x6164bd6c, 0x6164bd6c, 0x3c00080},
163{0x3c00000, 0x76, 0x9503366, 0x9503366, 0x3c00080},
164{0x3c00000, 0x76, 0xbf5a97c9, 0xbf5a97c9, 0x3c00080},
165{0x3c00000, 0x76, 0xe6ff1a14, 0xe6ff1a14, 0x3c00080},
166{0x3c00000, 0x76, 0x77f31e2f, 0x77f31e2f, 0x3c00080},
167{0x3c00000, 0x76, 0xaab4d7d8, 0xaab4d7d8, 0x3c00080},
168{0x3c00000, 0x76, 0x966320b, 0x966320b, 0x3c00080},
169{0x3c00000, 0x76, 0xb26bddee, 0xb26bddee, 0x3c00080},
170{0x3c00000, 0x76, 0xb5c8e5d3, 0xb5c8e5d3, 0x3c00080},
171{0x3c00000, 0x76, 0x317285d3, 0x317285d3, 0x3c00080},
172{0x3c00000, 0x76, 0x3c9623b1, 0x3c9623b1, 0x3c00080},
173{0x3c00000, 0x76, 0x51fd2c7c, 0x51fd2c7c, 0x3c00080},
174{0x3c00000, 0x76, 0x7b906a6c, 0x7b906a6c, 0x3c00080},
175{0x3c00000, 0x2b94, 0x0, 0x0, 0x3c00080},
176{0x3c00000, 0x2b94, 0x1, 0x0, 0x3c00080},
177{0x3c00000, 0x2b94, 0x76, 0x0, 0x3c00080},
178{0x3c00000, 0x2b94, 0x2b94, 0x0, 0x3c00080},
179{0x3c00000, 0x2b94, 0x636d24, 0x0, 0x3c00080},
180{0x3c00000, 0x2b94, 0x7fffff, 0x0, 0x3c00080},
181{0x3c00000, 0x2b94, 0x800000, 0x800000, 0x3c00080},
182{0x3c00000, 0x2b94, 0x800002, 0x800002, 0x3c00080},
183{0x3c00000, 0x2b94, 0x1398437, 0x1398437, 0x3c00080},
184{0x3c00000, 0x2b94, 0xba98d27, 0xba98d27, 0x3c00080},
185{0x3c00000, 0x2b94, 0xba98d7a, 0xba98d7a, 0x3c00080},
186{0x3c00000, 0x2b94, 0x751f853a, 0x751f853a, 0x3c00080},
187{0x3c00000, 0x2b94, 0x7f7ffff0, 0x7f7ffff0, 0x3c00080},
188{0x3c00000, 0x2b94, 0x7f7fffff, 0x7f7fffff, 0x3c00080},
189{0x3c00000, 0x2b94, 0x7f800000, 0x7f800000, 0x3c00080},
190{0x3c00000, 0x2b94, 0x7f800001, 0x7fc00000, 0x3c00081},
191{0x3c00000, 0x2b94, 0x7f984a37, 0x7fc00000, 0x3c00081},
192{0x3c00000, 0x2b94, 0x7fbfffff, 0x7fc00000, 0x3c00081},
193{0x3c00000, 0x2b94, 0x7fc00000, 0x7fc00000, 0x3c00080},
194{0x3c00000, 0x2b94, 0x7fd9ba98, 0x7fc00000, 0x3c00080},
195{0x3c00000, 0x2b94, 0x7fffffff, 0x7fc00000, 0x3c00080},
196{0x3c00000, 0x2b94, 0x80000000, 0x0, 0x3c00080},
197{0x3c00000, 0x2b94, 0x80000001, 0x0, 0x3c00080},
198{0x3c00000, 0x2b94, 0x80000076, 0x0, 0x3c00080},
199{0x3c00000, 0x2b94, 0x80002b94, 0x0, 0x3c00080},
200{0x3c00000, 0x2b94, 0x80636d24, 0x0, 0x3c00080},
201{0x3c00000, 0x2b94, 0x807fffff, 0x0, 0x3c00080},
202{0x3c00000, 0x2b94, 0x80800000, 0x80800000, 0x3c00080},
203{0x3c00000, 0x2b94, 0x80800002, 0x80800002, 0x3c00080},
204{0x3c00000, 0x2b94, 0x81398437, 0x81398437, 0x3c00080},
205{0x3c00000, 0x2b94, 0x8ba98d27, 0x8ba98d27, 0x3c00080},
206{0x3c00000, 0x2b94, 0x8ba98d7a, 0x8ba98d7a, 0x3c00080},
207{0x3c00000, 0x2b94, 0xf51f853a, 0xf51f853a, 0x3c00080},
208{0x3c00000, 0x2b94, 0xff7ffff0, 0xff7ffff0, 0x3c00080},
209{0x3c00000, 0x2b94, 0xff7fffff, 0xff7fffff, 0x3c00080},
210{0x3c00000, 0x2b94, 0xff800000, 0xff800000, 0x3c00080},
211{0x3c00000, 0x2b94, 0xff800001, 0x7fc00000, 0x3c00081},
212{0x3c00000, 0x2b94, 0xff984a37, 0x7fc00000, 0x3c00081},
213{0x3c00000, 0x2b94, 0xffbfffff, 0x7fc00000, 0x3c00081},
214{0x3c00000, 0x2b94, 0xffc00000, 0x7fc00000, 0x3c00080},
215{0x3c00000, 0x2b94, 0xffd9ba98, 0x7fc00000, 0x3c00080},
216{0x3c00000, 0x2b94, 0xffffffff, 0x7fc00000, 0x3c00080},
217{0x3c00000, 0x2b94, 0x4f3495cb, 0x4f3495cb, 0x3c00080},
218{0x3c00000, 0x2b94, 0xe73a5134, 0xe73a5134, 0x3c00080},
219{0x3c00000, 0x2b94, 0x7c994e9e, 0x7c994e9e, 0x3c00080},
220{0x3c00000, 0x2b94, 0x6164bd6c, 0x6164bd6c, 0x3c00080},
221{0x3c00000, 0x2b94, 0x9503366, 0x9503366, 0x3c00080},
222{0x3c00000, 0x2b94, 0xbf5a97c9, 0xbf5a97c9, 0x3c00080},
223{0x3c00000, 0x2b94, 0xe6ff1a14, 0xe6ff1a14, 0x3c00080},
224{0x3c00000, 0x2b94, 0x77f31e2f, 0x77f31e2f, 0x3c00080},
225{0x3c00000, 0x2b94, 0xaab4d7d8, 0xaab4d7d8, 0x3c00080},
226{0x3c00000, 0x2b94, 0x966320b, 0x966320b, 0x3c00080},
227{0x3c00000, 0x2b94, 0xb26bddee, 0xb26bddee, 0x3c00080},
228{0x3c00000, 0x2b94, 0xb5c8e5d3, 0xb5c8e5d3, 0x3c00080},
229{0x3c00000, 0x2b94, 0x317285d3, 0x317285d3, 0x3c00080},
230{0x3c00000, 0x2b94, 0x3c9623b1, 0x3c9623b1, 0x3c00080},
231{0x3c00000, 0x2b94, 0x51fd2c7c, 0x51fd2c7c, 0x3c00080},
232{0x3c00000, 0x2b94, 0x7b906a6c, 0x7b906a6c, 0x3c00080},
233{0x3c00000, 0x636d24, 0x0, 0x0, 0x3c00080},
234{0x3c00000, 0x636d24, 0x1, 0x0, 0x3c00080},
235{0x3c00000, 0x636d24, 0x76, 0x0, 0x3c00080},
236{0x3c00000, 0x636d24, 0x2b94, 0x0, 0x3c00080},
237{0x3c00000, 0x636d24, 0x636d24, 0x0, 0x3c00080},
238{0x3c00000, 0x636d24, 0x7fffff, 0x0, 0x3c00080},
239{0x3c00000, 0x636d24, 0x800000, 0x800000, 0x3c00080},
240{0x3c00000, 0x636d24, 0x800002, 0x800002, 0x3c00080},
241{0x3c00000, 0x636d24, 0x1398437, 0x1398437, 0x3c00080},
242{0x3c00000, 0x636d24, 0xba98d27, 0xba98d27, 0x3c00080},
243{0x3c00000, 0x636d24, 0xba98d7a, 0xba98d7a, 0x3c00080},
244{0x3c00000, 0x636d24, 0x751f853a, 0x751f853a, 0x3c00080},
245{0x3c00000, 0x636d24, 0x7f7ffff0, 0x7f7ffff0, 0x3c00080},
246{0x3c00000, 0x636d24, 0x7f7fffff, 0x7f7fffff, 0x3c00080},
247{0x3c00000, 0x636d24, 0x7f800000, 0x7f800000, 0x3c00080},
248{0x3c00000, 0x636d24, 0x7f800001, 0x7fc00000, 0x3c00081},
249{0x3c00000, 0x636d24, 0x7f984a37, 0x7fc00000, 0x3c00081},
250{0x3c00000, 0x636d24, 0x7fbfffff, 0x7fc00000, 0x3c00081},
251{0x3c00000, 0x636d24, 0x7fc00000, 0x7fc00000, 0x3c00080},
252{0x3c00000, 0x636d24, 0x7fd9ba98, 0x7fc00000, 0x3c00080},
253{0x3c00000, 0x636d24, 0x7fffffff, 0x7fc00000, 0x3c00080},
254{0x3c00000, 0x636d24, 0x80000000, 0x0, 0x3c00080},
255{0x3c00000, 0x636d24, 0x80000001, 0x0, 0x3c00080},
256{0x3c00000, 0x636d24, 0x80000076, 0x0, 0x3c00080},
257{0x3c00000, 0x636d24, 0x80002b94, 0x0, 0x3c00080},
258{0x3c00000, 0x636d24, 0x80636d24, 0x0, 0x3c00080},
259{0x3c00000, 0x636d24, 0x807fffff, 0x0, 0x3c00080},
260{0x3c00000, 0x636d24, 0x80800000, 0x80800000, 0x3c00080},
261{0x3c00000, 0x636d24, 0x80800002, 0x80800002, 0x3c00080},
262{0x3c00000, 0x636d24, 0x81398437, 0x81398437, 0x3c00080},
263{0x3c00000, 0x636d24, 0x8ba98d27, 0x8ba98d27, 0x3c00080},
264{0x3c00000, 0x636d24, 0x8ba98d7a, 0x8ba98d7a, 0x3c00080},
265{0x3c00000, 0x636d24, 0xf51f853a, 0xf51f853a, 0x3c00080},
266{0x3c00000, 0x636d24, 0xff7ffff0, 0xff7ffff0, 0x3c00080},
267{0x3c00000, 0x636d24, 0xff7fffff, 0xff7fffff, 0x3c00080},
268{0x3c00000, 0x636d24, 0xff800000, 0xff800000, 0x3c00080},
269{0x3c00000, 0x636d24, 0xff800001, 0x7fc00000, 0x3c00081},
270{0x3c00000, 0x636d24, 0xff984a37, 0x7fc00000, 0x3c00081},
271{0x3c00000, 0x636d24, 0xffbfffff, 0x7fc00000, 0x3c00081},
272{0x3c00000, 0x636d24, 0xffc00000, 0x7fc00000, 0x3c00080},
273{0x3c00000, 0x636d24, 0xffd9ba98, 0x7fc00000, 0x3c00080},
274{0x3c00000, 0x636d24, 0xffffffff, 0x7fc00000, 0x3c00080},
275{0x3c00000, 0x636d24, 0x4f3495cb, 0x4f3495cb, 0x3c00080},
276{0x3c00000, 0x636d24, 0xe73a5134, 0xe73a5134, 0x3c00080},
277{0x3c00000, 0x636d24, 0x7c994e9e, 0x7c994e9e, 0x3c00080},
278{0x3c00000, 0x636d24, 0x6164bd6c, 0x6164bd6c, 0x3c00080},
279{0x3c00000, 0x636d24, 0x9503366, 0x9503366, 0x3c00080},
280{0x3c00000, 0x636d24, 0xbf5a97c9, 0xbf5a97c9, 0x3c00080},
281{0x3c00000, 0x636d24, 0xe6ff1a14, 0xe6ff1a14, 0x3c00080},
282{0x3c00000, 0x636d24, 0x77f31e2f, 0x77f31e2f, 0x3c00080},
283{0x3c00000, 0x636d24, 0xaab4d7d8, 0xaab4d7d8, 0x3c00080},
284{0x3c00000, 0x636d24, 0x966320b, 0x966320b, 0x3c00080},
285{0x3c00000, 0x636d24, 0xb26bddee, 0xb26bddee, 0x3c00080},
286{0x3c00000, 0x636d24, 0xb5c8e5d3, 0xb5c8e5d3, 0x3c00080},
287{0x3c00000, 0x636d24, 0x317285d3, 0x317285d3, 0x3c00080},
288{0x3c00000, 0x636d24, 0x3c9623b1, 0x3c9623b1, 0x3c00080},
289{0x3c00000, 0x636d24, 0x51fd2c7c, 0x51fd2c7c, 0x3c00080},
290{0x3c00000, 0x636d24, 0x7b906a6c, 0x7b906a6c, 0x3c00080},
291{0x3c00000, 0x7fffff, 0x0, 0x0, 0x3c00080},
292{0x3c00000, 0x7fffff, 0x1, 0x0, 0x3c00080},
293{0x3c00000, 0x7fffff, 0x76, 0x0, 0x3c00080},
294{0x3c00000, 0x7fffff, 0x2b94, 0x0, 0x3c00080},
295{0x3c00000, 0x7fffff, 0x636d24, 0x0, 0x3c00080},
296{0x3c00000, 0x7fffff, 0x7fffff, 0x0, 0x3c00080},
297{0x3c00000, 0x7fffff, 0x800000, 0x800000, 0x3c00080},
298{0x3c00000, 0x7fffff, 0x800002, 0x800002, 0x3c00080},
299{0x3c00000, 0x7fffff, 0x1398437, 0x1398437, 0x3c00080},
300{0x3c00000, 0x7fffff, 0xba98d27, 0xba98d27, 0x3c00080},
301{0x3c00000, 0x7fffff, 0xba98d7a, 0xba98d7a, 0x3c00080},
302{0x3c00000, 0x7fffff, 0x751f853a, 0x751f853a, 0x3c00080},
303{0x3c00000, 0x7fffff, 0x7f7ffff0, 0x7f7ffff0, 0x3c00080},
304{0x3c00000, 0x7fffff, 0x7f7fffff, 0x7f7fffff, 0x3c00080},
305{0x3c00000, 0x7fffff, 0x7f800000, 0x7f800000, 0x3c00080},
306{0x3c00000, 0x7fffff, 0x7f800001, 0x7fc00000, 0x3c00081},
307{0x3c00000, 0x7fffff, 0x7f984a37, 0x7fc00000, 0x3c00081},
308{0x3c00000, 0x7fffff, 0x7fbfffff, 0x7fc00000, 0x3c00081},
309{0x3c00000, 0x7fffff, 0x7fc00000, 0x7fc00000, 0x3c00080},
310{0x3c00000, 0x7fffff, 0x7fd9ba98, 0x7fc00000, 0x3c00080},
311{0x3c00000, 0x7fffff, 0x7fffffff, 0x7fc00000, 0x3c00080},
312{0x3c00000, 0x7fffff, 0x80000000, 0x0, 0x3c00080},
313{0x3c00000, 0x7fffff, 0x80000001, 0x0, 0x3c00080},
314{0x3c00000, 0x7fffff, 0x80000076, 0x0, 0x3c00080},
315{0x3c00000, 0x7fffff, 0x80002b94, 0x0, 0x3c00080},
316{0x3c00000, 0x7fffff, 0x80636d24, 0x0, 0x3c00080},
317{0x3c00000, 0x7fffff, 0x807fffff, 0x0, 0x3c00080},
318{0x3c00000, 0x7fffff, 0x80800000, 0x80800000, 0x3c00080},
319{0x3c00000, 0x7fffff, 0x80800002, 0x80800002, 0x3c00080},
320{0x3c00000, 0x7fffff, 0x81398437, 0x81398437, 0x3c00080},
321{0x3c00000, 0x7fffff, 0x8ba98d27, 0x8ba98d27, 0x3c00080},
322{0x3c00000, 0x7fffff, 0x8ba98d7a, 0x8ba98d7a, 0x3c00080},
323{0x3c00000, 0x7fffff, 0xf51f853a, 0xf51f853a, 0x3c00080},
324{0x3c00000, 0x7fffff, 0xff7ffff0, 0xff7ffff0, 0x3c00080},
325{0x3c00000, 0x7fffff, 0xff7fffff, 0xff7fffff, 0x3c00080},
326{0x3c00000, 0x7fffff, 0xff800000, 0xff800000, 0x3c00080},
327{0x3c00000, 0x7fffff, 0xff800001, 0x7fc00000, 0x3c00081},
328{0x3c00000, 0x7fffff, 0xff984a37, 0x7fc00000, 0x3c00081},
329{0x3c00000, 0x7fffff, 0xffbfffff, 0x7fc00000, 0x3c00081},
330{0x3c00000, 0x7fffff, 0xffc00000, 0x7fc00000, 0x3c00080},
331{0x3c00000, 0x7fffff, 0xffd9ba98, 0x7fc00000, 0x3c00080},
332{0x3c00000, 0x7fffff, 0xffffffff, 0x7fc00000, 0x3c00080},
333{0x3c00000, 0x7fffff, 0x4f3495cb, 0x4f3495cb, 0x3c00080},
334{0x3c00000, 0x7fffff, 0xe73a5134, 0xe73a5134, 0x3c00080},
335{0x3c00000, 0x7fffff, 0x7c994e9e, 0x7c994e9e, 0x3c00080},
336{0x3c00000, 0x7fffff, 0x6164bd6c, 0x6164bd6c, 0x3c00080},
337{0x3c00000, 0x7fffff, 0x9503366, 0x9503366, 0x3c00080},
338{0x3c00000, 0x7fffff, 0xbf5a97c9, 0xbf5a97c9, 0x3c00080},
339{0x3c00000, 0x7fffff, 0xe6ff1a14, 0xe6ff1a14, 0x3c00080},
340{0x3c00000, 0x7fffff, 0x77f31e2f, 0x77f31e2f, 0x3c00080},
341{0x3c00000, 0x7fffff, 0xaab4d7d8, 0xaab4d7d8, 0x3c00080},
342{0x3c00000, 0x7fffff, 0x966320b, 0x966320b, 0x3c00080},
343{0x3c00000, 0x7fffff, 0xb26bddee, 0xb26bddee, 0x3c00080},
344{0x3c00000, 0x7fffff, 0xb5c8e5d3, 0xb5c8e5d3, 0x3c00080},
345{0x3c00000, 0x7fffff, 0x317285d3, 0x317285d3, 0x3c00080},
346{0x3c00000, 0x7fffff, 0x3c9623b1, 0x3c9623b1, 0x3c00080},
347{0x3c00000, 0x7fffff, 0x51fd2c7c, 0x51fd2c7c, 0x3c00080},
348{0x3c00000, 0x7fffff, 0x7b906a6c, 0x7b906a6c, 0x3c00080},
349{0x3c00000, 0x800000, 0x0, 0x800000, 0x3c00000},
350{0x3c00000, 0x800000, 0x1, 0x800000, 0x3c00080},
351{0x3c00000, 0x800000, 0x76, 0x800000, 0x3c00080},
352{0x3c00000, 0x800000, 0x2b94, 0x800000, 0x3c00080},
353{0x3c00000, 0x800000, 0x636d24, 0x800000, 0x3c00080},
354{0x3c00000, 0x800000, 0x7fffff, 0x800000, 0x3c00080},
355{0x3c00000, 0x800000, 0x800000, 0x1000000, 0x3c00000},
356{0x3c00000, 0x800000, 0x800002, 0x1000001, 0x3c00000},
357{0x3c00000, 0x800000, 0x1398437, 0x1798437, 0x3c00000},
358{0x3c00000, 0x800000, 0xba98d27, 0xba98d29, 0x3c00000},
359{0x3c00000, 0x800000, 0xba98d7a, 0xba98d7c, 0x3c00000},
360{0x3c00000, 0x800000, 0x751f853a, 0x751f853a, 0x3c00010},
361{0x3c00000, 0x800000, 0x7f7ffff0, 0x7f7ffff0, 0x3c00010},
362{0x3c00000, 0x800000, 0x7f7fffff, 0x7f7fffff, 0x3c00010},
363{0x3c00000, 0x800000, 0x7f800000, 0x7f800000, 0x3c00000},
364{0x3c00000, 0x800000, 0x7f800001, 0x7fc00000, 0x3c00001},
365{0x3c00000, 0x800000, 0x7f984a37, 0x7fc00000, 0x3c00001},
366{0x3c00000, 0x800000, 0x7fbfffff, 0x7fc00000, 0x3c00001},
367{0x3c00000, 0x800000, 0x7fc00000, 0x7fc00000, 0x3c00000},
368{0x3c00000, 0x800000, 0x7fd9ba98, 0x7fc00000, 0x3c00000},
369{0x3c00000, 0x800000, 0x7fffffff, 0x7fc00000, 0x3c00000},
370{0x3c00000, 0x800000, 0x80000000, 0x800000, 0x3c00000},
371{0x3c00000, 0x800000, 0x80000001, 0x800000, 0x3c00080},
372{0x3c00000, 0x800000, 0x80000076, 0x800000, 0x3c00080},
373{0x3c00000, 0x800000, 0x80002b94, 0x800000, 0x3c00080},
374{0x3c00000, 0x800000, 0x80636d24, 0x800000, 0x3c00080},
375{0x3c00000, 0x800000, 0x807fffff, 0x800000, 0x3c00080},
376{0x3c00000, 0x800000, 0x80800000, 0x0, 0x3c00000},
377{0x3c00000, 0x800000, 0x80800002, 0x0, 0x3c00008},
378{0x3c00000, 0x800000, 0x81398437, 0x80f3086e, 0x3c00000},
379{0x3c00000, 0x800000, 0x8ba98d27, 0x8ba98d25, 0x3c00000},
380{0x3c00000, 0x800000, 0x8ba98d7a, 0x8ba98d78, 0x3c00000},
381{0x3c00000, 0x800000, 0xf51f853a, 0xf51f8539, 0x3c00010},
382{0x3c00000, 0x800000, 0xff7ffff0, 0xff7fffef, 0x3c00010},
383{0x3c00000, 0x800000, 0xff7fffff, 0xff7ffffe, 0x3c00010},
384{0x3c00000, 0x800000, 0xff800000, 0xff800000, 0x3c00000},
385{0x3c00000, 0x800000, 0xff800001, 0x7fc00000, 0x3c00001},
386{0x3c00000, 0x800000, 0xff984a37, 0x7fc00000, 0x3c00001},
387{0x3c00000, 0x800000, 0xffbfffff, 0x7fc00000, 0x3c00001},
388{0x3c00000, 0x800000, 0xffc00000, 0x7fc00000, 0x3c00000},
389{0x3c00000, 0x800000, 0xffd9ba98, 0x7fc00000, 0x3c00000},
390{0x3c00000, 0x800000, 0xffffffff, 0x7fc00000, 0x3c00000},
391{0x3c00000, 0x800000, 0x4f3495cb, 0x4f3495cb, 0x3c00010},
392{0x3c00000, 0x800000, 0xe73a5134, 0xe73a5133, 0x3c00010},
393{0x3c00000, 0x800000, 0x7c994e9e, 0x7c994e9e, 0x3c00010},
394{0x3c00000, 0x800000, 0x6164bd6c, 0x6164bd6c, 0x3c00010},
395{0x3c00000, 0x800000, 0x9503366, 0x95033a6, 0x3c00000},
396{0x3c00000, 0x800000, 0xbf5a97c9, 0xbf5a97c8, 0x3c00010},
397{0x3c00000, 0x800000, 0xe6ff1a14, 0xe6ff1a13, 0x3c00010},
398{0x3c00000, 0x800000, 0x77f31e2f, 0x77f31e2f, 0x3c00010},
399{0x3c00000, 0x800000, 0xaab4d7d8, 0xaab4d7d7, 0x3c00010},
400{0x3c00000, 0x800000, 0x966320b, 0x966324b, 0x3c00000},
401{0x3c00000, 0x800000, 0xb26bddee, 0xb26bdded, 0x3c00010},
402{0x3c00000, 0x800000, 0xb5c8e5d3, 0xb5c8e5d2, 0x3c00010},
403{0x3c00000, 0x800000, 0x317285d3, 0x317285d3, 0x3c00010},
404{0x3c00000, 0x800000, 0x3c9623b1, 0x3c9623b1, 0x3c00010},
405{0x3c00000, 0x800000, 0x51fd2c7c, 0x51fd2c7c, 0x3c00010},
406{0x3c00000, 0x800000, 0x7b906a6c, 0x7b906a6c, 0x3c00010},
407{0x3c00000, 0x800002, 0x0, 0x800002, 0x3c00000},
408{0x3c00000, 0x800002, 0x1, 0x800002, 0x3c00080},
409{0x3c00000, 0x800002, 0x76, 0x800002, 0x3c00080},
410{0x3c00000, 0x800002, 0x2b94, 0x800002, 0x3c00080},
411{0x3c00000, 0x800002, 0x636d24, 0x800002, 0x3c00080},
412{0x3c00000, 0x800002, 0x7fffff, 0x800002, 0x3c00080},
413{0x3c00000, 0x800002, 0x800000, 0x1000001, 0x3c00000},
414{0x3c00000, 0x800002, 0x800002, 0x1000002, 0x3c00000},
415{0x3c00000, 0x800002, 0x1398437, 0x1798438, 0x3c00000},
416{0x3c00000, 0x800002, 0xba98d27, 0xba98d29, 0x3c00010},
417{0x3c00000, 0x800002, 0xba98d7a, 0xba98d7c, 0x3c00010},
418{0x3c00000, 0x800002, 0x751f853a, 0x751f853a, 0x3c00010},
419{0x3c00000, 0x800002, 0x7f7ffff0, 0x7f7ffff0, 0x3c00010},
420{0x3c00000, 0x800002, 0x7f7fffff, 0x7f7fffff, 0x3c00010},
421{0x3c00000, 0x800002, 0x7f800000, 0x7f800000, 0x3c00000},
422{0x3c00000, 0x800002, 0x7f800001, 0x7fc00000, 0x3c00001},
423{0x3c00000, 0x800002, 0x7f984a37, 0x7fc00000, 0x3c00001},
424{0x3c00000, 0x800002, 0x7fbfffff, 0x7fc00000, 0x3c00001},
425{0x3c00000, 0x800002, 0x7fc00000, 0x7fc00000, 0x3c00000},
426{0x3c00000, 0x800002, 0x7fd9ba98, 0x7fc00000, 0x3c00000},
427{0x3c00000, 0x800002, 0x7fffffff, 0x7fc00000, 0x3c00000},
428{0x3c00000, 0x800002, 0x80000000, 0x800002, 0x3c00000},
429{0x3c00000, 0x800002, 0x80000001, 0x800002, 0x3c00080},
430{0x3c00000, 0x800002, 0x80000076, 0x800002, 0x3c00080},
431{0x3c00000, 0x800002, 0x80002b94, 0x800002, 0x3c00080},
432{0x3c00000, 0x800002, 0x80636d24, 0x800002, 0x3c00080},
433{0x3c00000, 0x800002, 0x807fffff, 0x800002, 0x3c00080},
434{0x3c00000, 0x800002, 0x80800000, 0x0, 0x3c00008},
435{0x3c00000, 0x800002, 0x80800002, 0x0, 0x3c00000},
436{0x3c00000, 0x800002, 0x81398437, 0x80f3086c, 0x3c00000},
437{0x3c00000, 0x800002, 0x8ba98d27, 0x8ba98d24, 0x3c00010},
438{0x3c00000, 0x800002, 0x8ba98d7a, 0x8ba98d77, 0x3c00010},
439{0x3c00000, 0x800002, 0xf51f853a, 0xf51f8539, 0x3c00010},
440{0x3c00000, 0x800002, 0xff7ffff0, 0xff7fffef, 0x3c00010},
441{0x3c00000, 0x800002, 0xff7fffff, 0xff7ffffe, 0x3c00010},
442{0x3c00000, 0x800002, 0xff800000, 0xff800000, 0x3c00000},
443{0x3c00000, 0x800002, 0xff800001, 0x7fc00000, 0x3c00001},
444{0x3c00000, 0x800002, 0xff984a37, 0x7fc00000, 0x3c00001},
445{0x3c00000, 0x800002, 0xffbfffff, 0x7fc00000, 0x3c00001},
446{0x3c00000, 0x800002, 0xffc00000, 0x7fc00000, 0x3c00000},
447{0x3c00000, 0x800002, 0xffd9ba98, 0x7fc00000, 0x3c00000},
448{0x3c00000, 0x800002, 0xffffffff, 0x7fc00000, 0x3c00000},
449{0x3c00000, 0x800002, 0x4f3495cb, 0x4f3495cb, 0x3c00010},
450{0x3c00000, 0x800002, 0xe73a5134, 0xe73a5133, 0x3c00010},
451{0x3c00000, 0x800002, 0x7c994e9e, 0x7c994e9e, 0x3c00010},
452{0x3c00000, 0x800002, 0x6164bd6c, 0x6164bd6c, 0x3c00010},
453{0x3c00000, 0x800002, 0x9503366, 0x95033a6, 0x3c00010},
454{0x3c00000, 0x800002, 0xbf5a97c9, 0xbf5a97c8, 0x3c00010},
455{0x3c00000, 0x800002, 0xe6ff1a14, 0xe6ff1a13, 0x3c00010},
456{0x3c00000, 0x800002, 0x77f31e2f, 0x77f31e2f, 0x3c00010},
457{0x3c00000, 0x800002, 0xaab4d7d8, 0xaab4d7d7, 0x3c00010},
458{0x3c00000, 0x800002, 0x966320b, 0x966324b, 0x3c00010},
459{0x3c00000, 0x800002, 0xb26bddee, 0xb26bdded, 0x3c00010},
460{0x3c00000, 0x800002, 0xb5c8e5d3, 0xb5c8e5d2, 0x3c00010},
461{0x3c00000, 0x800002, 0x317285d3, 0x317285d3, 0x3c00010},
462{0x3c00000, 0x800002, 0x3c9623b1, 0x3c9623b1, 0x3c00010},
463{0x3c00000, 0x800002, 0x51fd2c7c, 0x51fd2c7c, 0x3c00010},
464{0x3c00000, 0x800002, 0x7b906a6c, 0x7b906a6c, 0x3c00010},
465{0x3c00000, 0x1398437, 0x0, 0x1398437, 0x3c00000},
466{0x3c00000, 0x1398437, 0x1, 0x1398437, 0x3c00080},
467{0x3c00000, 0x1398437, 0x76, 0x1398437, 0x3c00080},
468{0x3c00000, 0x1398437, 0x2b94, 0x1398437, 0x3c00080},
469{0x3c00000, 0x1398437, 0x636d24, 0x1398437, 0x3c00080},
470{0x3c00000, 0x1398437, 0x7fffff, 0x1398437, 0x3c00080},
471{0x3c00000, 0x1398437, 0x800000, 0x1798437, 0x3c00000},
472{0x3c00000, 0x1398437, 0x800002, 0x1798438, 0x3c00000},
473{0x3c00000, 0x1398437, 0x1398437, 0x1b98437, 0x3c00000},
474{0x3c00000, 0x1398437, 0xba98d27, 0xba98d2c, 0x3c00010},
475{0x3c00000, 0x1398437, 0xba98d7a, 0xba98d7f, 0x3c00010},
476{0x3c00000, 0x1398437, 0x751f853a, 0x751f853a, 0x3c00010},
477{0x3c00000, 0x1398437, 0x7f7ffff0, 0x7f7ffff0, 0x3c00010},
478{0x3c00000, 0x1398437, 0x7f7fffff, 0x7f7fffff, 0x3c00010},
479{0x3c00000, 0x1398437, 0x7f800000, 0x7f800000, 0x3c00000},
480{0x3c00000, 0x1398437, 0x7f800001, 0x7fc00000, 0x3c00001},
481{0x3c00000, 0x1398437, 0x7f984a37, 0x7fc00000, 0x3c00001},
482{0x3c00000, 0x1398437, 0x7fbfffff, 0x7fc00000, 0x3c00001},
483{0x3c00000, 0x1398437, 0x7fc00000, 0x7fc00000, 0x3c00000},
484{0x3c00000, 0x1398437, 0x7fd9ba98, 0x7fc00000, 0x3c00000},
485{0x3c00000, 0x1398437, 0x7fffffff, 0x7fc00000, 0x3c00000},
486{0x3c00000, 0x1398437, 0x80000000, 0x1398437, 0x3c00000},
487{0x3c00000, 0x1398437, 0x80000001, 0x1398437, 0x3c00080},
488{0x3c00000, 0x1398437, 0x80000076, 0x1398437, 0x3c00080},
489{0x3c00000, 0x1398437, 0x80002b94, 0x1398437, 0x3c00080},
490{0x3c00000, 0x1398437, 0x80636d24, 0x1398437, 0x3c00080},
491{0x3c00000, 0x1398437, 0x807fffff, 0x1398437, 0x3c00080},
492{0x3c00000, 0x1398437, 0x80800000, 0xf3086e, 0x3c00000},
493{0x3c00000, 0x1398437, 0x80800002, 0xf3086c, 0x3c00000},
494{0x3c00000, 0x1398437, 0x81398437, 0x0, 0x3c00000},
495{0x3c00000, 0x1398437, 0x8ba98d27, 0x8ba98d21, 0x3c00010},
496{0x3c00000, 0x1398437, 0x8ba98d7a, 0x8ba98d74, 0x3c00010},
497{0x3c00000, 0x1398437, 0xf51f853a, 0xf51f8539, 0x3c00010},
498{0x3c00000, 0x1398437, 0xff7ffff0, 0xff7fffef, 0x3c00010},
499{0x3c00000, 0x1398437, 0xff7fffff, 0xff7ffffe, 0x3c00010},
500{0x3c00000, 0x1398437, 0xff800000, 0xff800000, 0x3c00000},
501{0x3c00000, 0x1398437, 0xff800001, 0x7fc00000, 0x3c00001},
502{0x3c00000, 0x1398437, 0xff984a37, 0x7fc00000, 0x3c00001},
503{0x3c00000, 0x1398437, 0xffbfffff, 0x7fc00000, 0x3c00001},
504{0x3c00000, 0x1398437, 0xffc00000, 0x7fc00000, 0x3c00000},
505{0x3c00000, 0x1398437, 0xffd9ba98, 0x7fc00000, 0x3c00000},
506{0x3c00000, 0x1398437, 0xffffffff, 0x7fc00000, 0x3c00000},
507{0x3c00000, 0x1398437, 0x4f3495cb, 0x4f3495cb, 0x3c00010},
508{0x3c00000, 0x1398437, 0xe73a5134, 0xe73a5133, 0x3c00010},
509{0x3c00000, 0x1398437, 0x7c994e9e, 0x7c994e9e, 0x3c00010},
510{0x3c00000, 0x1398437, 0x6164bd6c, 0x6164bd6c, 0x3c00010},
511{0x3c00000, 0x1398437, 0x9503366, 0x950341f, 0x3c00010},
512{0x3c00000, 0x1398437, 0xbf5a97c9, 0xbf5a97c8, 0x3c00010},
513{0x3c00000, 0x1398437, 0xe6ff1a14, 0xe6ff1a13, 0x3c00010},
514{0x3c00000, 0x1398437, 0x77f31e2f, 0x77f31e2f, 0x3c00010},
515{0x3c00000, 0x1398437, 0xaab4d7d8, 0xaab4d7d7, 0x3c00010},
516{0x3c00000, 0x1398437, 0x966320b, 0x96632c4, 0x3c00010},
517{0x3c00000, 0x1398437, 0xb26bddee, 0xb26bdded, 0x3c00010},
518{0x3c00000, 0x1398437, 0xb5c8e5d3, 0xb5c8e5d2, 0x3c00010},
519{0x3c00000, 0x1398437, 0x317285d3, 0x317285d3, 0x3c00010},
520{0x3c00000, 0x1398437, 0x3c9623b1, 0x3c9623b1, 0x3c00010},
521{0x3c00000, 0x1398437, 0x51fd2c7c, 0x51fd2c7c, 0x3c00010},
522{0x3c00000, 0x1398437, 0x7b906a6c, 0x7b906a6c, 0x3c00010},
523{0x3c00000, 0xba98d27, 0x0, 0xba98d27, 0x3c00000},
524{0x3c00000, 0xba98d27, 0x1, 0xba98d27, 0x3c00080},
525{0x3c00000, 0xba98d27, 0x76, 0xba98d27, 0x3c00080},
526{0x3c00000, 0xba98d27, 0x2b94, 0xba98d27, 0x3c00080},
527{0x3c00000, 0xba98d27, 0x636d24, 0xba98d27, 0x3c00080},
528{0x3c00000, 0xba98d27, 0x7fffff, 0xba98d27, 0x3c00080},
529{0x3c00000, 0xba98d27, 0x800000, 0xba98d29, 0x3c00000},
530{0x3c00000, 0xba98d27, 0x800002, 0xba98d29, 0x3c00010},
531{0x3c00000, 0xba98d27, 0x1398437, 0xba98d2c, 0x3c00010},
532{0x3c00000, 0xba98d27, 0xba98d27, 0xc298d27, 0x3c00000},
533{0x3c00000, 0xba98d27, 0xba98d7a, 0xc298d50, 0x3c00010},
534{0x3c00000, 0xba98d27, 0x751f853a, 0x751f853a, 0x3c00010},
535{0x3c00000, 0xba98d27, 0x7f7ffff0, 0x7f7ffff0, 0x3c00010},
536{0x3c00000, 0xba98d27, 0x7f7fffff, 0x7f7fffff, 0x3c00010},
537{0x3c00000, 0xba98d27, 0x7f800000, 0x7f800000, 0x3c00000},
538{0x3c00000, 0xba98d27, 0x7f800001, 0x7fc00000, 0x3c00001},
539{0x3c00000, 0xba98d27, 0x7f984a37, 0x7fc00000, 0x3c00001},
540{0x3c00000, 0xba98d27, 0x7fbfffff, 0x7fc00000, 0x3c00001},
541{0x3c00000, 0xba98d27, 0x7fc00000, 0x7fc00000, 0x3c00000},
542{0x3c00000, 0xba98d27, 0x7fd9ba98, 0x7fc00000, 0x3c00000},
543{0x3c00000, 0xba98d27, 0x7fffffff, 0x7fc00000, 0x3c00000},
544{0x3c00000, 0xba98d27, 0x80000000, 0xba98d27, 0x3c00000},
545{0x3c00000, 0xba98d27, 0x80000001, 0xba98d27, 0x3c00080},
546{0x3c00000, 0xba98d27, 0x80000076, 0xba98d27, 0x3c00080},
547{0x3c00000, 0xba98d27, 0x80002b94, 0xba98d27, 0x3c00080},
548{0x3c00000, 0xba98d27, 0x80636d24, 0xba98d27, 0x3c00080},
549{0x3c00000, 0xba98d27, 0x807fffff, 0xba98d27, 0x3c00080},
550{0x3c00000, 0xba98d27, 0x80800000, 0xba98d25, 0x3c00000},
551{0x3c00000, 0xba98d27, 0x80800002, 0xba98d24, 0x3c00010},
552{0x3c00000, 0xba98d27, 0x81398437, 0xba98d21, 0x3c00010},
553{0x3c00000, 0xba98d27, 0x8ba98d27, 0x0, 0x3c00000},
554{0x3c00000, 0xba98d27, 0x8ba98d7a, 0x83260000, 0x3c00000},
555{0x3c00000, 0xba98d27, 0xf51f853a, 0xf51f8539, 0x3c00010},
556{0x3c00000, 0xba98d27, 0xff7ffff0, 0xff7fffef, 0x3c00010},
557{0x3c00000, 0xba98d27, 0xff7fffff, 0xff7ffffe, 0x3c00010},
558{0x3c00000, 0xba98d27, 0xff800000, 0xff800000, 0x3c00000},
559{0x3c00000, 0xba98d27, 0xff800001, 0x7fc00000, 0x3c00001},
560{0x3c00000, 0xba98d27, 0xff984a37, 0x7fc00000, 0x3c00001},
561{0x3c00000, 0xba98d27, 0xffbfffff, 0x7fc00000, 0x3c00001},
562{0x3c00000, 0xba98d27, 0xffc00000, 0x7fc00000, 0x3c00000},
563{0x3c00000, 0xba98d27, 0xffd9ba98, 0x7fc00000, 0x3c00000},
564{0x3c00000, 0xba98d27, 0xffffffff, 0x7fc00000, 0x3c00000},
565{0x3c00000, 0xba98d27, 0x4f3495cb, 0x4f3495cb, 0x3c00010},
566{0x3c00000, 0xba98d27, 0xe73a5134, 0xe73a5133, 0x3c00010},
567{0x3c00000, 0xba98d27, 0x7c994e9e, 0x7c994e9e, 0x3c00010},
568{0x3c00000, 0xba98d27, 0x6164bd6c, 0x6164bd6c, 0x3c00010},
569{0x3c00000, 0xba98d27, 0x9503366, 0xbb00ec2, 0x3c00010},
570{0x3c00000, 0xba98d27, 0xbf5a97c9, 0xbf5a97c8, 0x3c00010},
571{0x3c00000, 0xba98d27, 0xe6ff1a14, 0xe6ff1a13, 0x3c00010},
572{0x3c00000, 0xba98d27, 0x77f31e2f, 0x77f31e2f, 0x3c00010},
573{0x3c00000, 0xba98d27, 0xaab4d7d8, 0xaab4d7d7, 0x3c00010},
574{0x3c00000, 0xba98d27, 0x966320b, 0xbb0beb7, 0x3c00010},
575{0x3c00000, 0xba98d27, 0xb26bddee, 0xb26bdded, 0x3c00010},
576{0x3c00000, 0xba98d27, 0xb5c8e5d3, 0xb5c8e5d2, 0x3c00010},
577{0x3c00000, 0xba98d27, 0x317285d3, 0x317285d3, 0x3c00010},
578{0x3c00000, 0xba98d27, 0x3c9623b1, 0x3c9623b1, 0x3c00010},
579{0x3c00000, 0xba98d27, 0x51fd2c7c, 0x51fd2c7c, 0x3c00010},
580{0x3c00000, 0xba98d27, 0x7b906a6c, 0x7b906a6c, 0x3c00010},
581{0x3c00000, 0xba98d7a, 0x0, 0xba98d7a, 0x3c00000},
582{0x3c00000, 0xba98d7a, 0x1, 0xba98d7a, 0x3c00080},
583{0x3c00000, 0xba98d7a, 0x76, 0xba98d7a, 0x3c00080},
584{0x3c00000, 0xba98d7a, 0x2b94, 0xba98d7a, 0x3c00080},
585{0x3c00000, 0xba98d7a, 0x636d24, 0xba98d7a, 0x3c00080},
586{0x3c00000, 0xba98d7a, 0x7fffff, 0xba98d7a, 0x3c00080},
587{0x3c00000, 0xba98d7a, 0x800000, 0xba98d7c, 0x3c00000},
588{0x3c00000, 0xba98d7a, 0x800002, 0xba98d7c, 0x3c00010},
589{0x3c00000, 0xba98d7a, 0x1398437, 0xba98d7f, 0x3c00010},
590{0x3c00000, 0xba98d7a, 0xba98d27, 0xc298d50, 0x3c00010},
591{0x3c00000, 0xba98d7a, 0xba98d7a, 0xc298d7a, 0x3c00000},
592{0x3c00000, 0xba98d7a, 0x751f853a, 0x751f853a, 0x3c00010},
593{0x3c00000, 0xba98d7a, 0x7f7ffff0, 0x7f7ffff0, 0x3c00010},
594{0x3c00000, 0xba98d7a, 0x7f7fffff, 0x7f7fffff, 0x3c00010},
595{0x3c00000, 0xba98d7a, 0x7f800000, 0x7f800000, 0x3c00000},
596{0x3c00000, 0xba98d7a, 0x7f800001, 0x7fc00000, 0x3c00001},
597{0x3c00000, 0xba98d7a, 0x7f984a37, 0x7fc00000, 0x3c00001},
598{0x3c00000, 0xba98d7a, 0x7fbfffff, 0x7fc00000, 0x3c00001},
599{0x3c00000, 0xba98d7a, 0x7fc00000, 0x7fc00000, 0x3c00000},
600{0x3c00000, 0xba98d7a, 0x7fd9ba98, 0x7fc00000, 0x3c00000},
601{0x3c00000, 0xba98d7a, 0x7fffffff, 0x7fc00000, 0x3c00000},
602{0x3c00000, 0xba98d7a, 0x80000000, 0xba98d7a, 0x3c00000},
603{0x3c00000, 0xba98d7a, 0x80000001, 0xba98d7a, 0x3c00080},
604{0x3c00000, 0xba98d7a, 0x80000076, 0xba98d7a, 0x3c00080},
605{0x3c00000, 0xba98d7a, 0x80002b94, 0xba98d7a, 0x3c00080},
606{0x3c00000, 0xba98d7a, 0x80636d24, 0xba98d7a, 0x3c00080},
607{0x3c00000, 0xba98d7a, 0x807fffff, 0xba98d7a, 0x3c00080},
608{0x3c00000, 0xba98d7a, 0x80800000, 0xba98d78, 0x3c00000},
609{0x3c00000, 0xba98d7a, 0x80800002, 0xba98d77, 0x3c00010},
610{0x3c00000, 0xba98d7a, 0x81398437, 0xba98d74, 0x3c00010},
611{0x3c00000, 0xba98d7a, 0x8ba98d27, 0x3260000, 0x3c00000},
612{0x3c00000, 0xba98d7a, 0x8ba98d7a, 0x0, 0x3c00000},
613{0x3c00000, 0xba98d7a, 0xf51f853a, 0xf51f8539, 0x3c00010},
614{0x3c00000, 0xba98d7a, 0xff7ffff0, 0xff7fffef, 0x3c00010},
615{0x3c00000, 0xba98d7a, 0xff7fffff, 0xff7ffffe, 0x3c00010},
616{0x3c00000, 0xba98d7a, 0xff800000, 0xff800000, 0x3c00000},
617{0x3c00000, 0xba98d7a, 0xff800001, 0x7fc00000, 0x3c00001},
618{0x3c00000, 0xba98d7a, 0xff984a37, 0x7fc00000, 0x3c00001},
619{0x3c00000, 0xba98d7a, 0xffbfffff, 0x7fc00000, 0x3c00001},
620{0x3c00000, 0xba98d7a, 0xffc00000, 0x7fc00000, 0x3c00000},
621{0x3c00000, 0xba98d7a, 0xffd9ba98, 0x7fc00000, 0x3c00000},
622{0x3c00000, 0xba98d7a, 0xffffffff, 0x7fc00000, 0x3c00000},
623{0x3c00000, 0xba98d7a, 0x4f3495cb, 0x4f3495cb, 0x3c00010},
624{0x3c00000, 0xba98d7a, 0xe73a5134, 0xe73a5133, 0x3c00010},
625{0x3c00000, 0xba98d7a, 0x7c994e9e, 0x7c994e9e, 0x3c00010},
626{0x3c00000, 0xba98d7a, 0x6164bd6c, 0x6164bd6c, 0x3c00010},
627{0x3c00000, 0xba98d7a, 0x9503366, 0xbb00f15, 0x3c00010},
628{0x3c00000, 0xba98d7a, 0xbf5a97c9, 0xbf5a97c8, 0x3c00010},
629{0x3c00000, 0xba98d7a, 0xe6ff1a14, 0xe6ff1a13, 0x3c00010},
630{0x3c00000, 0xba98d7a, 0x77f31e2f, 0x77f31e2f, 0x3c00010},
631{0x3c00000, 0xba98d7a, 0xaab4d7d8, 0xaab4d7d7, 0x3c00010},
632{0x3c00000, 0xba98d7a, 0x966320b, 0xbb0bf0a, 0x3c00010},
633{0x3c00000, 0xba98d7a, 0xb26bddee, 0xb26bdded, 0x3c00010},
634{0x3c00000, 0xba98d7a, 0xb5c8e5d3, 0xb5c8e5d2, 0x3c00010},
635{0x3c00000, 0xba98d7a, 0x317285d3, 0x317285d3, 0x3c00010},
636{0x3c00000, 0xba98d7a, 0x3c9623b1, 0x3c9623b1, 0x3c00010},
637{0x3c00000, 0xba98d7a, 0x51fd2c7c, 0x51fd2c7c, 0x3c00010},
638{0x3c00000, 0xba98d7a, 0x7b906a6c, 0x7b906a6c, 0x3c00010},
639{0x3c00000, 0x751f853a, 0x0, 0x751f853a, 0x3c00000},
640{0x3c00000, 0x751f853a, 0x1, 0x751f853a, 0x3c00080},
641{0x3c00000, 0x751f853a, 0x76, 0x751f853a, 0x3c00080},
642{0x3c00000, 0x751f853a, 0x2b94, 0x751f853a, 0x3c00080},
643{0x3c00000, 0x751f853a, 0x636d24, 0x751f853a, 0x3c00080},
644{0x3c00000, 0x751f853a, 0x7fffff, 0x751f853a, 0x3c00080},
645{0x3c00000, 0x751f853a, 0x800000, 0x751f853a, 0x3c00010},
646{0x3c00000, 0x751f853a, 0x800002, 0x751f853a, 0x3c00010},
647{0x3c00000, 0x751f853a, 0x1398437, 0x751f853a, 0x3c00010},
648{0x3c00000, 0x751f853a, 0xba98d27, 0x751f853a, 0x3c00010},
649{0x3c00000, 0x751f853a, 0xba98d7a, 0x751f853a, 0x3c00010},
650{0x3c00000, 0x751f853a, 0x751f853a, 0x759f853a, 0x3c00000},
651{0x3c00000, 0x751f853a, 0x7f7ffff0, 0x7f7ffff9, 0x3c00010},
652{0x3c00000, 0x751f853a, 0x7f7fffff, 0x7f7fffff, 0x3c00014},
653{0x3c00000, 0x751f853a, 0x7f800000, 0x7f800000, 0x3c00000},
654{0x3c00000, 0x751f853a, 0x7f800001, 0x7fc00000, 0x3c00001},
655{0x3c00000, 0x751f853a, 0x7f984a37, 0x7fc00000, 0x3c00001},
656{0x3c00000, 0x751f853a, 0x7fbfffff, 0x7fc00000, 0x3c00001},
657{0x3c00000, 0x751f853a, 0x7fc00000, 0x7fc00000, 0x3c00000},
658{0x3c00000, 0x751f853a, 0x7fd9ba98, 0x7fc00000, 0x3c00000},
659{0x3c00000, 0x751f853a, 0x7fffffff, 0x7fc00000, 0x3c00000},
660{0x3c00000, 0x751f853a, 0x80000000, 0x751f853a, 0x3c00000},
661{0x3c00000, 0x751f853a, 0x80000001, 0x751f853a, 0x3c00080},
662{0x3c00000, 0x751f853a, 0x80000076, 0x751f853a, 0x3c00080},
663{0x3c00000, 0x751f853a, 0x80002b94, 0x751f853a, 0x3c00080},
664{0x3c00000, 0x751f853a, 0x80636d24, 0x751f853a, 0x3c00080},
665{0x3c00000, 0x751f853a, 0x807fffff, 0x751f853a, 0x3c00080},
666{0x3c00000, 0x751f853a, 0x80800000, 0x751f8539, 0x3c00010},
667{0x3c00000, 0x751f853a, 0x80800002, 0x751f8539, 0x3c00010},
668{0x3c00000, 0x751f853a, 0x81398437, 0x751f8539, 0x3c00010},
669{0x3c00000, 0x751f853a, 0x8ba98d27, 0x751f8539, 0x3c00010},
670{0x3c00000, 0x751f853a, 0x8ba98d7a, 0x751f8539, 0x3c00010},
671{0x3c00000, 0x751f853a, 0xf51f853a, 0x0, 0x3c00000},
672{0x3c00000, 0x751f853a, 0xff7ffff0, 0xff7fffe6, 0x3c00010},
673{0x3c00000, 0x751f853a, 0xff7fffff, 0xff7ffff5, 0x3c00010},
674{0x3c00000, 0x751f853a, 0xff800000, 0xff800000, 0x3c00000},
675{0x3c00000, 0x751f853a, 0xff800001, 0x7fc00000, 0x3c00001},
676{0x3c00000, 0x751f853a, 0xff984a37, 0x7fc00000, 0x3c00001},
677{0x3c00000, 0x751f853a, 0xffbfffff, 0x7fc00000, 0x3c00001},
678{0x3c00000, 0x751f853a, 0xffc00000, 0x7fc00000, 0x3c00000},
679{0x3c00000, 0x751f853a, 0xffd9ba98, 0x7fc00000, 0x3c00000},
680{0x3c00000, 0x751f853a, 0xffffffff, 0x7fc00000, 0x3c00000},
681{0x3c00000, 0x751f853a, 0x4f3495cb, 0x751f853a, 0x3c00010},
682{0x3c00000, 0x751f853a, 0xe73a5134, 0x751f8539, 0x3c00010},
683{0x3c00000, 0x751f853a, 0x7c994e9e, 0x7c994fdd, 0x3c00010},
684{0x3c00000, 0x751f853a, 0x6164bd6c, 0x751f853a, 0x3c00010},
685{0x3c00000, 0x751f853a, 0x9503366, 0x751f853a, 0x3c00010},
686{0x3c00000, 0x751f853a, 0xbf5a97c9, 0x751f8539, 0x3c00010},
687{0x3c00000, 0x751f853a, 0xe6ff1a14, 0x751f8539, 0x3c00010},
688{0x3c00000, 0x751f853a, 0x77f31e2f, 0x77f81a58, 0x3c00010},
689{0x3c00000, 0x751f853a, 0xaab4d7d8, 0x751f8539, 0x3c00010},
690{0x3c00000, 0x751f853a, 0x966320b, 0x751f853a, 0x3c00010},
691{0x3c00000, 0x751f853a, 0xb26bddee, 0x751f8539, 0x3c00010},
692{0x3c00000, 0x751f853a, 0xb5c8e5d3, 0x751f8539, 0x3c00010},
693{0x3c00000, 0x751f853a, 0x317285d3, 0x751f853a, 0x3c00010},
694{0x3c00000, 0x751f853a, 0x3c9623b1, 0x751f853a, 0x3c00010},
695{0x3c00000, 0x751f853a, 0x51fd2c7c, 0x751f853a, 0x3c00010},
696{0x3c00000, 0x751f853a, 0x7b906a6c, 0x7b906f68, 0x3c00010},
697{0x3c00000, 0x7f7ffff0, 0x0, 0x7f7ffff0, 0x3c00000},
698{0x3c00000, 0x7f7ffff0, 0x1, 0x7f7ffff0, 0x3c00080},
699{0x3c00000, 0x7f7ffff0, 0x76, 0x7f7ffff0, 0x3c00080},
700{0x3c00000, 0x7f7ffff0, 0x2b94, 0x7f7ffff0, 0x3c00080},
701{0x3c00000, 0x7f7ffff0, 0x636d24, 0x7f7ffff0, 0x3c00080},
702{0x3c00000, 0x7f7ffff0, 0x7fffff, 0x7f7ffff0, 0x3c00080},
703{0x3c00000, 0x7f7ffff0, 0x800000, 0x7f7ffff0, 0x3c00010},
704{0x3c00000, 0x7f7ffff0, 0x800002, 0x7f7ffff0, 0x3c00010},
705{0x3c00000, 0x7f7ffff0, 0x1398437, 0x7f7ffff0, 0x3c00010},
706{0x3c00000, 0x7f7ffff0, 0xba98d27, 0x7f7ffff0, 0x3c00010},
707{0x3c00000, 0x7f7ffff0, 0xba98d7a, 0x7f7ffff0, 0x3c00010},
708{0x3c00000, 0x7f7ffff0, 0x751f853a, 0x7f7ffff9, 0x3c00010},
709{0x3c00000, 0x7f7ffff0, 0x7f7ffff0, 0x7f7fffff, 0x3c00014},
710{0x3c00000, 0x7f7ffff0, 0x7f7fffff, 0x7f7fffff, 0x3c00014},
711{0x3c00000, 0x7f7ffff0, 0x7f800000, 0x7f800000, 0x3c00000},
712{0x3c00000, 0x7f7ffff0, 0x7f800001, 0x7fc00000, 0x3c00001},
713{0x3c00000, 0x7f7ffff0, 0x7f984a37, 0x7fc00000, 0x3c00001},
714{0x3c00000, 0x7f7ffff0, 0x7fbfffff, 0x7fc00000, 0x3c00001},
715{0x3c00000, 0x7f7ffff0, 0x7fc00000, 0x7fc00000, 0x3c00000},
716{0x3c00000, 0x7f7ffff0, 0x7fd9ba98, 0x7fc00000, 0x3c00000},
717{0x3c00000, 0x7f7ffff0, 0x7fffffff, 0x7fc00000, 0x3c00000},
718{0x3c00000, 0x7f7ffff0, 0x80000000, 0x7f7ffff0, 0x3c00000},
719{0x3c00000, 0x7f7ffff0, 0x80000001, 0x7f7ffff0, 0x3c00080},
720{0x3c00000, 0x7f7ffff0, 0x80000076, 0x7f7ffff0, 0x3c00080},
721{0x3c00000, 0x7f7ffff0, 0x80002b94, 0x7f7ffff0, 0x3c00080},
722{0x3c00000, 0x7f7ffff0, 0x80636d24, 0x7f7ffff0, 0x3c00080},
723{0x3c00000, 0x7f7ffff0, 0x807fffff, 0x7f7ffff0, 0x3c00080},
724{0x3c00000, 0x7f7ffff0, 0x80800000, 0x7f7fffef, 0x3c00010},
725{0x3c00000, 0x7f7ffff0, 0x80800002, 0x7f7fffef, 0x3c00010},
726{0x3c00000, 0x7f7ffff0, 0x81398437, 0x7f7fffef, 0x3c00010},
727{0x3c00000, 0x7f7ffff0, 0x8ba98d27, 0x7f7fffef, 0x3c00010},
728{0x3c00000, 0x7f7ffff0, 0x8ba98d7a, 0x7f7fffef, 0x3c00010},
729{0x3c00000, 0x7f7ffff0, 0xf51f853a, 0x7f7fffe6, 0x3c00010},
730{0x3c00000, 0x7f7ffff0, 0xff7ffff0, 0x0, 0x3c00000},
731{0x3c00000, 0x7f7ffff0, 0xff7fffff, 0xf5700000, 0x3c00000},
732{0x3c00000, 0x7f7ffff0, 0xff800000, 0xff800000, 0x3c00000},
733{0x3c00000, 0x7f7ffff0, 0xff800001, 0x7fc00000, 0x3c00001},
734{0x3c00000, 0x7f7ffff0, 0xff984a37, 0x7fc00000, 0x3c00001},
735{0x3c00000, 0x7f7ffff0, 0xffbfffff, 0x7fc00000, 0x3c00001},
736{0x3c00000, 0x7f7ffff0, 0xffc00000, 0x7fc00000, 0x3c00000},
737{0x3c00000, 0x7f7ffff0, 0xffd9ba98, 0x7fc00000, 0x3c00000},
738{0x3c00000, 0x7f7ffff0, 0xffffffff, 0x7fc00000, 0x3c00000},
739{0x3c00000, 0x7f7ffff0, 0x4f3495cb, 0x7f7ffff0, 0x3c00010},
740{0x3c00000, 0x7f7ffff0, 0xe73a5134, 0x7f7fffef, 0x3c00010},
741{0x3c00000, 0x7f7ffff0, 0x7c994e9e, 0x7f7fffff, 0x3c00014},
742{0x3c00000, 0x7f7ffff0, 0x6164bd6c, 0x7f7ffff0, 0x3c00010},
743{0x3c00000, 0x7f7ffff0, 0x9503366, 0x7f7ffff0, 0x3c00010},
744{0x3c00000, 0x7f7ffff0, 0xbf5a97c9, 0x7f7fffef, 0x3c00010},
745{0x3c00000, 0x7f7ffff0, 0xe6ff1a14, 0x7f7fffef, 0x3c00010},
746{0x3c00000, 0x7f7ffff0, 0x77f31e2f, 0x7f7fffff, 0x3c00014},
747{0x3c00000, 0x7f7ffff0, 0xaab4d7d8, 0x7f7fffef, 0x3c00010},
748{0x3c00000, 0x7f7ffff0, 0x966320b, 0x7f7ffff0, 0x3c00010},
749{0x3c00000, 0x7f7ffff0, 0xb26bddee, 0x7f7fffef, 0x3c00010},
750{0x3c00000, 0x7f7ffff0, 0xb5c8e5d3, 0x7f7fffef, 0x3c00010},
751{0x3c00000, 0x7f7ffff0, 0x317285d3, 0x7f7ffff0, 0x3c00010},
752{0x3c00000, 0x7f7ffff0, 0x3c9623b1, 0x7f7ffff0, 0x3c00010},
753{0x3c00000, 0x7f7ffff0, 0x51fd2c7c, 0x7f7ffff0, 0x3c00010},
754{0x3c00000, 0x7f7ffff0, 0x7b906a6c, 0x7f7fffff, 0x3c00014},
755{0x3c00000, 0x7f7fffff, 0x0, 0x7f7fffff, 0x3c00000},
756{0x3c00000, 0x7f7fffff, 0x1, 0x7f7fffff, 0x3c00080},
757{0x3c00000, 0x7f7fffff, 0x76, 0x7f7fffff, 0x3c00080},
758{0x3c00000, 0x7f7fffff, 0x2b94, 0x7f7fffff, 0x3c00080},
759{0x3c00000, 0x7f7fffff, 0x636d24, 0x7f7fffff, 0x3c00080},
760{0x3c00000, 0x7f7fffff, 0x7fffff, 0x7f7fffff, 0x3c00080},
761{0x3c00000, 0x7f7fffff, 0x800000, 0x7f7fffff, 0x3c00010},
762{0x3c00000, 0x7f7fffff, 0x800002, 0x7f7fffff, 0x3c00010},
763{0x3c00000, 0x7f7fffff, 0x1398437, 0x7f7fffff, 0x3c00010},
764{0x3c00000, 0x7f7fffff, 0xba98d27, 0x7f7fffff, 0x3c00010},
765{0x3c00000, 0x7f7fffff, 0xba98d7a, 0x7f7fffff, 0x3c00010},
766{0x3c00000, 0x7f7fffff, 0x751f853a, 0x7f7fffff, 0x3c00014},
767{0x3c00000, 0x7f7fffff, 0x7f7ffff0, 0x7f7fffff, 0x3c00014},
768{0x3c00000, 0x7f7fffff, 0x7f7fffff, 0x7f7fffff, 0x3c00014},
769{0x3c00000, 0x7f7fffff, 0x7f800000, 0x7f800000, 0x3c00000},
770{0x3c00000, 0x7f7fffff, 0x7f800001, 0x7fc00000, 0x3c00001},
771{0x3c00000, 0x7f7fffff, 0x7f984a37, 0x7fc00000, 0x3c00001},
772{0x3c00000, 0x7f7fffff, 0x7fbfffff, 0x7fc00000, 0x3c00001},
773{0x3c00000, 0x7f7fffff, 0x7fc00000, 0x7fc00000, 0x3c00000},
774{0x3c00000, 0x7f7fffff, 0x7fd9ba98, 0x7fc00000, 0x3c00000},
775{0x3c00000, 0x7f7fffff, 0x7fffffff, 0x7fc00000, 0x3c00000},
776{0x3c00000, 0x7f7fffff, 0x80000000, 0x7f7fffff, 0x3c00000},
777{0x3c00000, 0x7f7fffff, 0x80000001, 0x7f7fffff, 0x3c00080},
778{0x3c00000, 0x7f7fffff, 0x80000076, 0x7f7fffff, 0x3c00080},
779{0x3c00000, 0x7f7fffff, 0x80002b94, 0x7f7fffff, 0x3c00080},
780{0x3c00000, 0x7f7fffff, 0x80636d24, 0x7f7fffff, 0x3c00080},
781{0x3c00000, 0x7f7fffff, 0x807fffff, 0x7f7fffff, 0x3c00080},
782{0x3c00000, 0x7f7fffff, 0x80800000, 0x7f7ffffe, 0x3c00010},
783{0x3c00000, 0x7f7fffff, 0x80800002, 0x7f7ffffe, 0x3c00010},
784{0x3c00000, 0x7f7fffff, 0x81398437, 0x7f7ffffe, 0x3c00010},
785{0x3c00000, 0x7f7fffff, 0x8ba98d27, 0x7f7ffffe, 0x3c00010},
786{0x3c00000, 0x7f7fffff, 0x8ba98d7a, 0x7f7ffffe, 0x3c00010},
787{0x3c00000, 0x7f7fffff, 0xf51f853a, 0x7f7ffff5, 0x3c00010},
788{0x3c00000, 0x7f7fffff, 0xff7ffff0, 0x75700000, 0x3c00000},
789{0x3c00000, 0x7f7fffff, 0xff7fffff, 0x0, 0x3c00000},
790{0x3c00000, 0x7f7fffff, 0xff800000, 0xff800000, 0x3c00000},
791{0x3c00000, 0x7f7fffff, 0xff800001, 0x7fc00000, 0x3c00001},
792{0x3c00000, 0x7f7fffff, 0xff984a37, 0x7fc00000, 0x3c00001},
793{0x3c00000, 0x7f7fffff, 0xffbfffff, 0x7fc00000, 0x3c00001},
794{0x3c00000, 0x7f7fffff, 0xffc00000, 0x7fc00000, 0x3c00000},
795{0x3c00000, 0x7f7fffff, 0xffd9ba98, 0x7fc00000, 0x3c00000},
796{0x3c00000, 0x7f7fffff, 0xffffffff, 0x7fc00000, 0x3c00000},
797{0x3c00000, 0x7f7fffff, 0x4f3495cb, 0x7f7fffff, 0x3c00010},
798{0x3c00000, 0x7f7fffff, 0xe73a5134, 0x7f7ffffe, 0x3c00010},
799{0x3c00000, 0x7f7fffff, 0x7c994e9e, 0x7f7fffff, 0x3c00014},
800{0x3c00000, 0x7f7fffff, 0x6164bd6c, 0x7f7fffff, 0x3c00010},
801{0x3c00000, 0x7f7fffff, 0x9503366, 0x7f7fffff, 0x3c00010},
802{0x3c00000, 0x7f7fffff, 0xbf5a97c9, 0x7f7ffffe, 0x3c00010},
803{0x3c00000, 0x7f7fffff, 0xe6ff1a14, 0x7f7ffffe, 0x3c00010},
804{0x3c00000, 0x7f7fffff, 0x77f31e2f, 0x7f7fffff, 0x3c00014},
805{0x3c00000, 0x7f7fffff, 0xaab4d7d8, 0x7f7ffffe, 0x3c00010},
806{0x3c00000, 0x7f7fffff, 0x966320b, 0x7f7fffff, 0x3c00010},
807{0x3c00000, 0x7f7fffff, 0xb26bddee, 0x7f7ffffe, 0x3c00010},
808{0x3c00000, 0x7f7fffff, 0xb5c8e5d3, 0x7f7ffffe, 0x3c00010},
809{0x3c00000, 0x7f7fffff, 0x317285d3, 0x7f7fffff, 0x3c00010},
810{0x3c00000, 0x7f7fffff, 0x3c9623b1, 0x7f7fffff, 0x3c00010},
811{0x3c00000, 0x7f7fffff, 0x51fd2c7c, 0x7f7fffff, 0x3c00010},
812{0x3c00000, 0x7f7fffff, 0x7b906a6c, 0x7f7fffff, 0x3c00014},
813{0x3c00000, 0x7f800000, 0x0, 0x7f800000, 0x3c00000},
814{0x3c00000, 0x7f800000, 0x1, 0x7f800000, 0x3c00080},
815{0x3c00000, 0x7f800000, 0x76, 0x7f800000, 0x3c00080},
816{0x3c00000, 0x7f800000, 0x2b94, 0x7f800000, 0x3c00080},
817{0x3c00000, 0x7f800000, 0x636d24, 0x7f800000, 0x3c00080},
818{0x3c00000, 0x7f800000, 0x7fffff, 0x7f800000, 0x3c00080},
819{0x3c00000, 0x7f800000, 0x800000, 0x7f800000, 0x3c00000},
820{0x3c00000, 0x7f800000, 0x800002, 0x7f800000, 0x3c00000},
821{0x3c00000, 0x7f800000, 0x1398437, 0x7f800000, 0x3c00000},
822{0x3c00000, 0x7f800000, 0xba98d27, 0x7f800000, 0x3c00000},
823{0x3c00000, 0x7f800000, 0xba98d7a, 0x7f800000, 0x3c00000},
824{0x3c00000, 0x7f800000, 0x751f853a, 0x7f800000, 0x3c00000},
825{0x3c00000, 0x7f800000, 0x7f7ffff0, 0x7f800000, 0x3c00000},
826{0x3c00000, 0x7f800000, 0x7f7fffff, 0x7f800000, 0x3c00000},
827{0x3c00000, 0x7f800000, 0x7f800000, 0x7f800000, 0x3c00000},
828{0x3c00000, 0x7f800000, 0x7f800001, 0x7fc00000, 0x3c00001},
829{0x3c00000, 0x7f800000, 0x7f984a37, 0x7fc00000, 0x3c00001},
830{0x3c00000, 0x7f800000, 0x7fbfffff, 0x7fc00000, 0x3c00001},
831{0x3c00000, 0x7f800000, 0x7fc00000, 0x7fc00000, 0x3c00000},
832{0x3c00000, 0x7f800000, 0x7fd9ba98, 0x7fc00000, 0x3c00000},
833{0x3c00000, 0x7f800000, 0x7fffffff, 0x7fc00000, 0x3c00000},
834{0x3c00000, 0x7f800000, 0x80000000, 0x7f800000, 0x3c00000},
835{0x3c00000, 0x7f800000, 0x80000001, 0x7f800000, 0x3c00080},
836{0x3c00000, 0x7f800000, 0x80000076, 0x7f800000, 0x3c00080},
837{0x3c00000, 0x7f800000, 0x80002b94, 0x7f800000, 0x3c00080},
838{0x3c00000, 0x7f800000, 0x80636d24, 0x7f800000, 0x3c00080},
839{0x3c00000, 0x7f800000, 0x807fffff, 0x7f800000, 0x3c00080},
840{0x3c00000, 0x7f800000, 0x80800000, 0x7f800000, 0x3c00000},
841{0x3c00000, 0x7f800000, 0x80800002, 0x7f800000, 0x3c00000},
842{0x3c00000, 0x7f800000, 0x81398437, 0x7f800000, 0x3c00000},
843{0x3c00000, 0x7f800000, 0x8ba98d27, 0x7f800000, 0x3c00000},
844{0x3c00000, 0x7f800000, 0x8ba98d7a, 0x7f800000, 0x3c00000},
845{0x3c00000, 0x7f800000, 0xf51f853a, 0x7f800000, 0x3c00000},
846{0x3c00000, 0x7f800000, 0xff7ffff0, 0x7f800000, 0x3c00000},
847{0x3c00000, 0x7f800000, 0xff7fffff, 0x7f800000, 0x3c00000},
848{0x3c00000, 0x7f800000, 0xff800000, 0x7fc00000, 0x3c00001},
849{0x3c00000, 0x7f800000, 0xff800001, 0x7fc00000, 0x3c00001},
850{0x3c00000, 0x7f800000, 0xff984a37, 0x7fc00000, 0x3c00001},
851{0x3c00000, 0x7f800000, 0xffbfffff, 0x7fc00000, 0x3c00001},
852{0x3c00000, 0x7f800000, 0xffc00000, 0x7fc00000, 0x3c00000},
853{0x3c00000, 0x7f800000, 0xffd9ba98, 0x7fc00000, 0x3c00000},
854{0x3c00000, 0x7f800000, 0xffffffff, 0x7fc00000, 0x3c00000},
855{0x3c00000, 0x7f800000, 0x4f3495cb, 0x7f800000, 0x3c00000},
856{0x3c00000, 0x7f800000, 0xe73a5134, 0x7f800000, 0x3c00000},
857{0x3c00000, 0x7f800000, 0x7c994e9e, 0x7f800000, 0x3c00000},
858{0x3c00000, 0x7f800000, 0x6164bd6c, 0x7f800000, 0x3c00000},
859{0x3c00000, 0x7f800000, 0x9503366, 0x7f800000, 0x3c00000},
860{0x3c00000, 0x7f800000, 0xbf5a97c9, 0x7f800000, 0x3c00000},
861{0x3c00000, 0x7f800000, 0xe6ff1a14, 0x7f800000, 0x3c00000},
862{0x3c00000, 0x7f800000, 0x77f31e2f, 0x7f800000, 0x3c00000},
863{0x3c00000, 0x7f800000, 0xaab4d7d8, 0x7f800000, 0x3c00000},
864{0x3c00000, 0x7f800000, 0x966320b, 0x7f800000, 0x3c00000},
865{0x3c00000, 0x7f800000, 0xb26bddee, 0x7f800000, 0x3c00000},
866{0x3c00000, 0x7f800000, 0xb5c8e5d3, 0x7f800000, 0x3c00000},
867{0x3c00000, 0x7f800000, 0x317285d3, 0x7f800000, 0x3c00000},
868{0x3c00000, 0x7f800000, 0x3c9623b1, 0x7f800000, 0x3c00000},
869{0x3c00000, 0x7f800000, 0x51fd2c7c, 0x7f800000, 0x3c00000},
870{0x3c00000, 0x7f800000, 0x7b906a6c, 0x7f800000, 0x3c00000},
871{0x3c00000, 0x7f800001, 0x0, 0x7fc00000, 0x3c00001},
872{0x3c00000, 0x7f800001, 0x1, 0x7fc00000, 0x3c00081},
873{0x3c00000, 0x7f800001, 0x76, 0x7fc00000, 0x3c00081},
874{0x3c00000, 0x7f800001, 0x2b94, 0x7fc00000, 0x3c00081},
875{0x3c00000, 0x7f800001, 0x636d24, 0x7fc00000, 0x3c00081},
876{0x3c00000, 0x7f800001, 0x7fffff, 0x7fc00000, 0x3c00081},
877{0x3c00000, 0x7f800001, 0x800000, 0x7fc00000, 0x3c00001},
878{0x3c00000, 0x7f800001, 0x800002, 0x7fc00000, 0x3c00001},
879{0x3c00000, 0x7f800001, 0x1398437, 0x7fc00000, 0x3c00001},
880{0x3c00000, 0x7f800001, 0xba98d27, 0x7fc00000, 0x3c00001},
881{0x3c00000, 0x7f800001, 0xba98d7a, 0x7fc00000, 0x3c00001},
882{0x3c00000, 0x7f800001, 0x751f853a, 0x7fc00000, 0x3c00001},
883{0x3c00000, 0x7f800001, 0x7f7ffff0, 0x7fc00000, 0x3c00001},
884{0x3c00000, 0x7f800001, 0x7f7fffff, 0x7fc00000, 0x3c00001},
885{0x3c00000, 0x7f800001, 0x7f800000, 0x7fc00000, 0x3c00001},
886{0x3c00000, 0x7f800001, 0x7f800001, 0x7fc00000, 0x3c00001},
887{0x3c00000, 0x7f800001, 0x7f984a37, 0x7fc00000, 0x3c00001},
888{0x3c00000, 0x7f800001, 0x7fbfffff, 0x7fc00000, 0x3c00001},
889{0x3c00000, 0x7f800001, 0x7fc00000, 0x7fc00000, 0x3c00001},
890{0x3c00000, 0x7f800001, 0x7fd9ba98, 0x7fc00000, 0x3c00001},
891{0x3c00000, 0x7f800001, 0x7fffffff, 0x7fc00000, 0x3c00001},
892{0x3c00000, 0x7f800001, 0x80000000, 0x7fc00000, 0x3c00001},
893{0x3c00000, 0x7f800001, 0x80000001, 0x7fc00000, 0x3c00081},
894{0x3c00000, 0x7f800001, 0x80000076, 0x7fc00000, 0x3c00081},
895{0x3c00000, 0x7f800001, 0x80002b94, 0x7fc00000, 0x3c00081},
896{0x3c00000, 0x7f800001, 0x80636d24, 0x7fc00000, 0x3c00081},
897{0x3c00000, 0x7f800001, 0x807fffff, 0x7fc00000, 0x3c00081},
898{0x3c00000, 0x7f800001, 0x80800000, 0x7fc00000, 0x3c00001},
899{0x3c00000, 0x7f800001, 0x80800002, 0x7fc00000, 0x3c00001},
900{0x3c00000, 0x7f800001, 0x81398437, 0x7fc00000, 0x3c00001},
901{0x3c00000, 0x7f800001, 0x8ba98d27, 0x7fc00000, 0x3c00001},
902{0x3c00000, 0x7f800001, 0x8ba98d7a, 0x7fc00000, 0x3c00001},
903{0x3c00000, 0x7f800001, 0xf51f853a, 0x7fc00000, 0x3c00001},
904{0x3c00000, 0x7f800001, 0xff7ffff0, 0x7fc00000, 0x3c00001},
905{0x3c00000, 0x7f800001, 0xff7fffff, 0x7fc00000, 0x3c00001},
906{0x3c00000, 0x7f800001, 0xff800000, 0x7fc00000, 0x3c00001},
907{0x3c00000, 0x7f800001, 0xff800001, 0x7fc00000, 0x3c00001},
908{0x3c00000, 0x7f800001, 0xff984a37, 0x7fc00000, 0x3c00001},
909{0x3c00000, 0x7f800001, 0xffbfffff, 0x7fc00000, 0x3c00001},
910{0x3c00000, 0x7f800001, 0xffc00000, 0x7fc00000, 0x3c00001},
911{0x3c00000, 0x7f800001, 0xffd9ba98, 0x7fc00000, 0x3c00001},
912{0x3c00000, 0x7f800001, 0xffffffff, 0x7fc00000, 0x3c00001},
913{0x3c00000, 0x7f800001, 0x4f3495cb, 0x7fc00000, 0x3c00001},
914{0x3c00000, 0x7f800001, 0xe73a5134, 0x7fc00000, 0x3c00001},
915{0x3c00000, 0x7f800001, 0x7c994e9e, 0x7fc00000, 0x3c00001},
916{0x3c00000, 0x7f800001, 0x6164bd6c, 0x7fc00000, 0x3c00001},
917{0x3c00000, 0x7f800001, 0x9503366, 0x7fc00000, 0x3c00001},
918{0x3c00000, 0x7f800001, 0xbf5a97c9, 0x7fc00000, 0x3c00001},
919{0x3c00000, 0x7f800001, 0xe6ff1a14, 0x7fc00000, 0x3c00001},
920{0x3c00000, 0x7f800001, 0x77f31e2f, 0x7fc00000, 0x3c00001},
921{0x3c00000, 0x7f800001, 0xaab4d7d8, 0x7fc00000, 0x3c00001},
922{0x3c00000, 0x7f800001, 0x966320b, 0x7fc00000, 0x3c00001},
923{0x3c00000, 0x7f800001, 0xb26bddee, 0x7fc00000, 0x3c00001},
924{0x3c00000, 0x7f800001, 0xb5c8e5d3, 0x7fc00000, 0x3c00001},
925{0x3c00000, 0x7f800001, 0x317285d3, 0x7fc00000, 0x3c00001},
926{0x3c00000, 0x7f800001, 0x3c9623b1, 0x7fc00000, 0x3c00001},
927{0x3c00000, 0x7f800001, 0x51fd2c7c, 0x7fc00000, 0x3c00001},
928{0x3c00000, 0x7f800001, 0x7b906a6c, 0x7fc00000, 0x3c00001},
929{0x3c00000, 0x7f984a37, 0x0, 0x7fc00000, 0x3c00001},
930{0x3c00000, 0x7f984a37, 0x1, 0x7fc00000, 0x3c00081},
931{0x3c00000, 0x7f984a37, 0x76, 0x7fc00000, 0x3c00081},
932{0x3c00000, 0x7f984a37, 0x2b94, 0x7fc00000, 0x3c00081},
933{0x3c00000, 0x7f984a37, 0x636d24, 0x7fc00000, 0x3c00081},
934{0x3c00000, 0x7f984a37, 0x7fffff, 0x7fc00000, 0x3c00081},
935{0x3c00000, 0x7f984a37, 0x800000, 0x7fc00000, 0x3c00001},
936{0x3c00000, 0x7f984a37, 0x800002, 0x7fc00000, 0x3c00001},
937{0x3c00000, 0x7f984a37, 0x1398437, 0x7fc00000, 0x3c00001},
938{0x3c00000, 0x7f984a37, 0xba98d27, 0x7fc00000, 0x3c00001},
939{0x3c00000, 0x7f984a37, 0xba98d7a, 0x7fc00000, 0x3c00001},
940{0x3c00000, 0x7f984a37, 0x751f853a, 0x7fc00000, 0x3c00001},
941{0x3c00000, 0x7f984a37, 0x7f7ffff0, 0x7fc00000, 0x3c00001},
942{0x3c00000, 0x7f984a37, 0x7f7fffff, 0x7fc00000, 0x3c00001},
943{0x3c00000, 0x7f984a37, 0x7f800000, 0x7fc00000, 0x3c00001},
944{0x3c00000, 0x7f984a37, 0x7f800001, 0x7fc00000, 0x3c00001},
945{0x3c00000, 0x7f984a37, 0x7f984a37, 0x7fc00000, 0x3c00001},
946{0x3c00000, 0x7f984a37, 0x7fbfffff, 0x7fc00000, 0x3c00001},
947{0x3c00000, 0x7f984a37, 0x7fc00000, 0x7fc00000, 0x3c00001},
948{0x3c00000, 0x7f984a37, 0x7fd9ba98, 0x7fc00000, 0x3c00001},
949{0x3c00000, 0x7f984a37, 0x7fffffff, 0x7fc00000, 0x3c00001},
950{0x3c00000, 0x7f984a37, 0x80000000, 0x7fc00000, 0x3c00001},
951{0x3c00000, 0x7f984a37, 0x80000001, 0x7fc00000, 0x3c00081},
952{0x3c00000, 0x7f984a37, 0x80000076, 0x7fc00000, 0x3c00081},
953{0x3c00000, 0x7f984a37, 0x80002b94, 0x7fc00000, 0x3c00081},
954{0x3c00000, 0x7f984a37, 0x80636d24, 0x7fc00000, 0x3c00081},
955{0x3c00000, 0x7f984a37, 0x807fffff, 0x7fc00000, 0x3c00081},
956{0x3c00000, 0x7f984a37, 0x80800000, 0x7fc00000, 0x3c00001},
957{0x3c00000, 0x7f984a37, 0x80800002, 0x7fc00000, 0x3c00001},
958{0x3c00000, 0x7f984a37, 0x81398437, 0x7fc00000, 0x3c00001},
959{0x3c00000, 0x7f984a37, 0x8ba98d27, 0x7fc00000, 0x3c00001},
960{0x3c00000, 0x7f984a37, 0x8ba98d7a, 0x7fc00000, 0x3c00001},
961{0x3c00000, 0x7f984a37, 0xf51f853a, 0x7fc00000, 0x3c00001},
962{0x3c00000, 0x7f984a37, 0xff7ffff0, 0x7fc00000, 0x3c00001},
963{0x3c00000, 0x7f984a37, 0xff7fffff, 0x7fc00000, 0x3c00001},
964{0x3c00000, 0x7f984a37, 0xff800000, 0x7fc00000, 0x3c00001},
965{0x3c00000, 0x7f984a37, 0xff800001, 0x7fc00000, 0x3c00001},
966{0x3c00000, 0x7f984a37, 0xff984a37, 0x7fc00000, 0x3c00001},
967{0x3c00000, 0x7f984a37, 0xffbfffff, 0x7fc00000, 0x3c00001},
968{0x3c00000, 0x7f984a37, 0xffc00000, 0x7fc00000, 0x3c00001},
969{0x3c00000, 0x7f984a37, 0xffd9ba98, 0x7fc00000, 0x3c00001},
970{0x3c00000, 0x7f984a37, 0xffffffff, 0x7fc00000, 0x3c00001},
971{0x3c00000, 0x7f984a37, 0x4f3495cb, 0x7fc00000, 0x3c00001},
972{0x3c00000, 0x7f984a37, 0xe73a5134, 0x7fc00000, 0x3c00001},
973{0x3c00000, 0x7f984a37, 0x7c994e9e, 0x7fc00000, 0x3c00001},
974{0x3c00000, 0x7f984a37, 0x6164bd6c, 0x7fc00000, 0x3c00001},
975{0x3c00000, 0x7f984a37, 0x9503366, 0x7fc00000, 0x3c00001},
976{0x3c00000, 0x7f984a37, 0xbf5a97c9, 0x7fc00000, 0x3c00001},
977{0x3c00000, 0x7f984a37, 0xe6ff1a14, 0x7fc00000, 0x3c00001},
978{0x3c00000, 0x7f984a37, 0x77f31e2f, 0x7fc00000, 0x3c00001},
979{0x3c00000, 0x7f984a37, 0xaab4d7d8, 0x7fc00000, 0x3c00001},
980{0x3c00000, 0x7f984a37, 0x966320b, 0x7fc00000, 0x3c00001},
981{0x3c00000, 0x7f984a37, 0xb26bddee, 0x7fc00000, 0x3c00001},
982{0x3c00000, 0x7f984a37, 0xb5c8e5d3, 0x7fc00000, 0x3c00001},
983{0x3c00000, 0x7f984a37, 0x317285d3, 0x7fc00000, 0x3c00001},
984{0x3c00000, 0x7f984a37, 0x3c9623b1, 0x7fc00000, 0x3c00001},
985{0x3c00000, 0x7f984a37, 0x51fd2c7c, 0x7fc00000, 0x3c00001},
986{0x3c00000, 0x7f984a37, 0x7b906a6c, 0x7fc00000, 0x3c00001},
987{0x3c00000, 0x7fbfffff, 0x0, 0x7fc00000, 0x3c00001},
988{0x3c00000, 0x7fbfffff, 0x1, 0x7fc00000, 0x3c00081},
989{0x3c00000, 0x7fbfffff, 0x76, 0x7fc00000, 0x3c00081},
990{0x3c00000, 0x7fbfffff, 0x2b94, 0x7fc00000, 0x3c00081},
991{0x3c00000, 0x7fbfffff, 0x636d24, 0x7fc00000, 0x3c00081},
992{0x3c00000, 0x7fbfffff, 0x7fffff, 0x7fc00000, 0x3c00081},
993{0x3c00000, 0x7fbfffff, 0x800000, 0x7fc00000, 0x3c00001},
994{0x3c00000, 0x7fbfffff, 0x800002, 0x7fc00000, 0x3c00001},
995{0x3c00000, 0x7fbfffff, 0x1398437, 0x7fc00000, 0x3c00001},
996{0x3c00000, 0x7fbfffff, 0xba98d27, 0x7fc00000, 0x3c00001},
997{0x3c00000, 0x7fbfffff, 0xba98d7a, 0x7fc00000, 0x3c00001},
998{0x3c00000, 0x7fbfffff, 0x751f853a, 0x7fc00000, 0x3c00001},
999{0x3c00000, 0x7fbfffff, 0x7f7ffff0, 0x7fc00000, 0x3c00001},
1000{0x3c00000, 0x7fbfffff, 0x7f7fffff, 0x7fc00000, 0x3c00001},
1001{0x3c00000, 0x7fbfffff, 0x7f800000, 0x7fc00000, 0x3c00001},
1002{0x3c00000, 0x7fbfffff, 0x7f800001, 0x7fc00000, 0x3c00001},
1003{0x3c00000, 0x7fbfffff, 0x7f984a37, 0x7fc00000, 0x3c00001},
1004{0x3c00000, 0x7fbfffff, 0x7fbfffff, 0x7fc00000, 0x3c00001},
1005{0x3c00000, 0x7fbfffff, 0x7fc00000, 0x7fc00000, 0x3c00001},
1006{0x3c00000, 0x7fbfffff, 0x7fd9ba98, 0x7fc00000, 0x3c00001},
1007{0x3c00000, 0x7fbfffff, 0x7fffffff, 0x7fc00000, 0x3c00001},
1008{0x3c00000, 0x7fbfffff, 0x80000000, 0x7fc00000, 0x3c00001},
1009{0x3c00000, 0x7fbfffff, 0x80000001, 0x7fc00000, 0x3c00081},
1010{0x3c00000, 0x7fbfffff, 0x80000076, 0x7fc00000, 0x3c00081},
1011{0x3c00000, 0x7fbfffff, 0x80002b94, 0x7fc00000, 0x3c00081},
1012{0x3c00000, 0x7fbfffff, 0x80636d24, 0x7fc00000, 0x3c00081},
1013{0x3c00000, 0x7fbfffff, 0x807fffff, 0x7fc00000, 0x3c00081},
1014{0x3c00000, 0x7fbfffff, 0x80800000, 0x7fc00000, 0x3c00001},
1015{0x3c00000, 0x7fbfffff, 0x80800002, 0x7fc00000, 0x3c00001},
1016{0x3c00000, 0x7fbfffff, 0x81398437, 0x7fc00000, 0x3c00001},
1017{0x3c00000, 0x7fbfffff, 0x8ba98d27, 0x7fc00000, 0x3c00001},
1018{0x3c00000, 0x7fbfffff, 0x8ba98d7a, 0x7fc00000, 0x3c00001},
1019{0x3c00000, 0x7fbfffff, 0xf51f853a, 0x7fc00000, 0x3c00001},
1020{0x3c00000, 0x7fbfffff, 0xff7ffff0, 0x7fc00000, 0x3c00001},
1021{0x3c00000, 0x7fbfffff, 0xff7fffff, 0x7fc00000, 0x3c00001},
1022{0x3c00000, 0x7fbfffff, 0xff800000, 0x7fc00000, 0x3c00001},
1023{0x3c00000, 0x7fbfffff, 0xff800001, 0x7fc00000, 0x3c00001},
1024{0x3c00000, 0x7fbfffff, 0xff984a37, 0x7fc00000, 0x3c00001},
1025{0x3c00000, 0x7fbfffff, 0xffbfffff, 0x7fc00000, 0x3c00001},
1026{0x3c00000, 0x7fbfffff, 0xffc00000, 0x7fc00000, 0x3c00001},
1027{0x3c00000, 0x7fbfffff, 0xffd9ba98, 0x7fc00000, 0x3c00001},
1028{0x3c00000, 0x7fbfffff, 0xffffffff, 0x7fc00000, 0x3c00001},
1029{0x3c00000, 0x7fbfffff, 0x4f3495cb, 0x7fc00000, 0x3c00001},
1030{0x3c00000, 0x7fbfffff, 0xe73a5134, 0x7fc00000, 0x3c00001},
1031{0x3c00000, 0x7fbfffff, 0x7c994e9e, 0x7fc00000, 0x3c00001},
1032{0x3c00000, 0x7fbfffff, 0x6164bd6c, 0x7fc00000, 0x3c00001},
1033{0x3c00000, 0x7fbfffff, 0x9503366, 0x7fc00000, 0x3c00001},
1034{0x3c00000, 0x7fbfffff, 0xbf5a97c9, 0x7fc00000, 0x3c00001},
1035{0x3c00000, 0x7fbfffff, 0xe6ff1a14, 0x7fc00000, 0x3c00001},
1036{0x3c00000, 0x7fbfffff, 0x77f31e2f, 0x7fc00000, 0x3c00001},
1037{0x3c00000, 0x7fbfffff, 0xaab4d7d8, 0x7fc00000, 0x3c00001},
1038{0x3c00000, 0x7fbfffff, 0x966320b, 0x7fc00000, 0x3c00001},
1039{0x3c00000, 0x7fbfffff, 0xb26bddee, 0x7fc00000, 0x3c00001},
1040{0x3c00000, 0x7fbfffff, 0xb5c8e5d3, 0x7fc00000, 0x3c00001},
1041{0x3c00000, 0x7fbfffff, 0x317285d3, 0x7fc00000, 0x3c00001},
1042{0x3c00000, 0x7fbfffff, 0x3c9623b1, 0x7fc00000, 0x3c00001},
1043{0x3c00000, 0x7fbfffff, 0x51fd2c7c, 0x7fc00000, 0x3c00001},
1044{0x3c00000, 0x7fbfffff, 0x7b906a6c, 0x7fc00000, 0x3c00001},
1045{0x3c00000, 0x7fc00000, 0x0, 0x7fc00000, 0x3c00000},
1046{0x3c00000, 0x7fc00000, 0x1, 0x7fc00000, 0x3c00080},
1047{0x3c00000, 0x7fc00000, 0x76, 0x7fc00000, 0x3c00080},
1048{0x3c00000, 0x7fc00000, 0x2b94, 0x7fc00000, 0x3c00080},
1049{0x3c00000, 0x7fc00000, 0x636d24, 0x7fc00000, 0x3c00080},
1050{0x3c00000, 0x7fc00000, 0x7fffff, 0x7fc00000, 0x3c00080},
1051{0x3c00000, 0x7fc00000, 0x800000, 0x7fc00000, 0x3c00000},
1052{0x3c00000, 0x7fc00000, 0x800002, 0x7fc00000, 0x3c00000},
1053{0x3c00000, 0x7fc00000, 0x1398437, 0x7fc00000, 0x3c00000},
1054{0x3c00000, 0x7fc00000, 0xba98d27, 0x7fc00000, 0x3c00000},
1055{0x3c00000, 0x7fc00000, 0xba98d7a, 0x7fc00000, 0x3c00000},
1056{0x3c00000, 0x7fc00000, 0x751f853a, 0x7fc00000, 0x3c00000},
1057{0x3c00000, 0x7fc00000, 0x7f7ffff0, 0x7fc00000, 0x3c00000},
1058{0x3c00000, 0x7fc00000, 0x7f7fffff, 0x7fc00000, 0x3c00000},
1059{0x3c00000, 0x7fc00000, 0x7f800000, 0x7fc00000, 0x3c00000},
1060{0x3c00000, 0x7fc00000, 0x7f800001, 0x7fc00000, 0x3c00001},
1061{0x3c00000, 0x7fc00000, 0x7f984a37, 0x7fc00000, 0x3c00001},
1062{0x3c00000, 0x7fc00000, 0x7fbfffff, 0x7fc00000, 0x3c00001},
1063{0x3c00000, 0x7fc00000, 0x7fc00000, 0x7fc00000, 0x3c00000},
1064{0x3c00000, 0x7fc00000, 0x7fd9ba98, 0x7fc00000, 0x3c00000},
1065{0x3c00000, 0x7fc00000, 0x7fffffff, 0x7fc00000, 0x3c00000},
1066{0x3c00000, 0x7fc00000, 0x80000000, 0x7fc00000, 0x3c00000},
1067{0x3c00000, 0x7fc00000, 0x80000001, 0x7fc00000, 0x3c00080},
1068{0x3c00000, 0x7fc00000, 0x80000076, 0x7fc00000, 0x3c00080},
1069{0x3c00000, 0x7fc00000, 0x80002b94, 0x7fc00000, 0x3c00080},
1070{0x3c00000, 0x7fc00000, 0x80636d24, 0x7fc00000, 0x3c00080},
1071{0x3c00000, 0x7fc00000, 0x807fffff, 0x7fc00000, 0x3c00080},
1072{0x3c00000, 0x7fc00000, 0x80800000, 0x7fc00000, 0x3c00000},
1073{0x3c00000, 0x7fc00000, 0x80800002, 0x7fc00000, 0x3c00000},
1074{0x3c00000, 0x7fc00000, 0x81398437, 0x7fc00000, 0x3c00000},
1075{0x3c00000, 0x7fc00000, 0x8ba98d27, 0x7fc00000, 0x3c00000},
1076{0x3c00000, 0x7fc00000, 0x8ba98d7a, 0x7fc00000, 0x3c00000},
1077{0x3c00000, 0x7fc00000, 0xf51f853a, 0x7fc00000, 0x3c00000},
1078{0x3c00000, 0x7fc00000, 0xff7ffff0, 0x7fc00000, 0x3c00000},
1079{0x3c00000, 0x7fc00000, 0xff7fffff, 0x7fc00000, 0x3c00000},
1080{0x3c00000, 0x7fc00000, 0xff800000, 0x7fc00000, 0x3c00000},
1081{0x3c00000, 0x7fc00000, 0xff800001, 0x7fc00000, 0x3c00001},
1082{0x3c00000, 0x7fc00000, 0xff984a37, 0x7fc00000, 0x3c00001},
1083{0x3c00000, 0x7fc00000, 0xffbfffff, 0x7fc00000, 0x3c00001},
1084{0x3c00000, 0x7fc00000, 0xffc00000, 0x7fc00000, 0x3c00000},
1085{0x3c00000, 0x7fc00000, 0xffd9ba98, 0x7fc00000, 0x3c00000},
1086{0x3c00000, 0x7fc00000, 0xffffffff, 0x7fc00000, 0x3c00000},
1087{0x3c00000, 0x7fc00000, 0x4f3495cb, 0x7fc00000, 0x3c00000},
1088{0x3c00000, 0x7fc00000, 0xe73a5134, 0x7fc00000, 0x3c00000},
1089{0x3c00000, 0x7fc00000, 0x7c994e9e, 0x7fc00000, 0x3c00000},
1090{0x3c00000, 0x7fc00000, 0x6164bd6c, 0x7fc00000, 0x3c00000},
1091{0x3c00000, 0x7fc00000, 0x9503366, 0x7fc00000, 0x3c00000},
1092{0x3c00000, 0x7fc00000, 0xbf5a97c9, 0x7fc00000, 0x3c00000},
1093{0x3c00000, 0x7fc00000, 0xe6ff1a14, 0x7fc00000, 0x3c00000},
1094{0x3c00000, 0x7fc00000, 0x77f31e2f, 0x7fc00000, 0x3c00000},
1095{0x3c00000, 0x7fc00000, 0xaab4d7d8, 0x7fc00000, 0x3c00000},
1096{0x3c00000, 0x7fc00000, 0x966320b, 0x7fc00000, 0x3c00000},
1097{0x3c00000, 0x7fc00000, 0xb26bddee, 0x7fc00000, 0x3c00000},
1098{0x3c00000, 0x7fc00000, 0xb5c8e5d3, 0x7fc00000, 0x3c00000},
1099{0x3c00000, 0x7fc00000, 0x317285d3, 0x7fc00000, 0x3c00000},
1100{0x3c00000, 0x7fc00000, 0x3c9623b1, 0x7fc00000, 0x3c00000},
1101{0x3c00000, 0x7fc00000, 0x51fd2c7c, 0x7fc00000, 0x3c00000},
1102{0x3c00000, 0x7fc00000, 0x7b906a6c, 0x7fc00000, 0x3c00000},
1103{0x3c00000, 0x7fd9ba98, 0x0, 0x7fc00000, 0x3c00000},
1104{0x3c00000, 0x7fd9ba98, 0x1, 0x7fc00000, 0x3c00080},
1105{0x3c00000, 0x7fd9ba98, 0x76, 0x7fc00000, 0x3c00080},
1106{0x3c00000, 0x7fd9ba98, 0x2b94, 0x7fc00000, 0x3c00080},
1107{0x3c00000, 0x7fd9ba98, 0x636d24, 0x7fc00000, 0x3c00080},
1108{0x3c00000, 0x7fd9ba98, 0x7fffff, 0x7fc00000, 0x3c00080},
1109{0x3c00000, 0x7fd9ba98, 0x800000, 0x7fc00000, 0x3c00000},
1110{0x3c00000, 0x7fd9ba98, 0x800002, 0x7fc00000, 0x3c00000},
1111{0x3c00000, 0x7fd9ba98, 0x1398437, 0x7fc00000, 0x3c00000},
1112{0x3c00000, 0x7fd9ba98, 0xba98d27, 0x7fc00000, 0x3c00000},
1113{0x3c00000, 0x7fd9ba98, 0xba98d7a, 0x7fc00000, 0x3c00000},
1114{0x3c00000, 0x7fd9ba98, 0x751f853a, 0x7fc00000, 0x3c00000},
1115{0x3c00000, 0x7fd9ba98, 0x7f7ffff0, 0x7fc00000, 0x3c00000},
1116{0x3c00000, 0x7fd9ba98, 0x7f7fffff, 0x7fc00000, 0x3c00000},
1117{0x3c00000, 0x7fd9ba98, 0x7f800000, 0x7fc00000, 0x3c00000},
1118{0x3c00000, 0x7fd9ba98, 0x7f800001, 0x7fc00000, 0x3c00001},
1119{0x3c00000, 0x7fd9ba98, 0x7f984a37, 0x7fc00000, 0x3c00001},
1120{0x3c00000, 0x7fd9ba98, 0x7fbfffff, 0x7fc00000, 0x3c00001},
1121{0x3c00000, 0x7fd9ba98, 0x7fc00000, 0x7fc00000, 0x3c00000},
1122{0x3c00000, 0x7fd9ba98, 0x7fd9ba98, 0x7fc00000, 0x3c00000},
1123{0x3c00000, 0x7fd9ba98, 0x7fffffff, 0x7fc00000, 0x3c00000},
1124{0x3c00000, 0x7fd9ba98, 0x80000000, 0x7fc00000, 0x3c00000},
1125{0x3c00000, 0x7fd9ba98, 0x80000001, 0x7fc00000, 0x3c00080},
1126{0x3c00000, 0x7fd9ba98, 0x80000076, 0x7fc00000, 0x3c00080},
1127{0x3c00000, 0x7fd9ba98, 0x80002b94, 0x7fc00000, 0x3c00080},
1128{0x3c00000, 0x7fd9ba98, 0x80636d24, 0x7fc00000, 0x3c00080},
1129{0x3c00000, 0x7fd9ba98, 0x807fffff, 0x7fc00000, 0x3c00080},
1130{0x3c00000, 0x7fd9ba98, 0x80800000, 0x7fc00000, 0x3c00000},
1131{0x3c00000, 0x7fd9ba98, 0x80800002, 0x7fc00000, 0x3c00000},
1132{0x3c00000, 0x7fd9ba98, 0x81398437, 0x7fc00000, 0x3c00000},
1133{0x3c00000, 0x7fd9ba98, 0x8ba98d27, 0x7fc00000, 0x3c00000},
1134{0x3c00000, 0x7fd9ba98, 0x8ba98d7a, 0x7fc00000, 0x3c00000},
1135{0x3c00000, 0x7fd9ba98, 0xf51f853a, 0x7fc00000, 0x3c00000},
1136{0x3c00000, 0x7fd9ba98, 0xff7ffff0, 0x7fc00000, 0x3c00000},
1137{0x3c00000, 0x7fd9ba98, 0xff7fffff, 0x7fc00000, 0x3c00000},
1138{0x3c00000, 0x7fd9ba98, 0xff800000, 0x7fc00000, 0x3c00000},
1139{0x3c00000, 0x7fd9ba98, 0xff800001, 0x7fc00000, 0x3c00001},
1140{0x3c00000, 0x7fd9ba98, 0xff984a37, 0x7fc00000, 0x3c00001},
1141{0x3c00000, 0x7fd9ba98, 0xffbfffff, 0x7fc00000, 0x3c00001},
1142{0x3c00000, 0x7fd9ba98, 0xffc00000, 0x7fc00000, 0x3c00000},
1143{0x3c00000, 0x7fd9ba98, 0xffd9ba98, 0x7fc00000, 0x3c00000},
1144{0x3c00000, 0x7fd9ba98, 0xffffffff, 0x7fc00000, 0x3c00000},
1145{0x3c00000, 0x7fd9ba98, 0x4f3495cb, 0x7fc00000, 0x3c00000},
1146{0x3c00000, 0x7fd9ba98, 0xe73a5134, 0x7fc00000, 0x3c00000},
1147{0x3c00000, 0x7fd9ba98, 0x7c994e9e, 0x7fc00000, 0x3c00000},
1148{0x3c00000, 0x7fd9ba98, 0x6164bd6c, 0x7fc00000, 0x3c00000},
1149{0x3c00000, 0x7fd9ba98, 0x9503366, 0x7fc00000, 0x3c00000},
1150{0x3c00000, 0x7fd9ba98, 0xbf5a97c9, 0x7fc00000, 0x3c00000},
1151{0x3c00000, 0x7fd9ba98, 0xe6ff1a14, 0x7fc00000, 0x3c00000},
1152{0x3c00000, 0x7fd9ba98, 0x77f31e2f, 0x7fc00000, 0x3c00000},
1153{0x3c00000, 0x7fd9ba98, 0xaab4d7d8, 0x7fc00000, 0x3c00000},
1154{0x3c00000, 0x7fd9ba98, 0x966320b, 0x7fc00000, 0x3c00000},
1155{0x3c00000, 0x7fd9ba98, 0xb26bddee, 0x7fc00000, 0x3c00000},
1156{0x3c00000, 0x7fd9ba98, 0xb5c8e5d3, 0x7fc00000, 0x3c00000},
1157{0x3c00000, 0x7fd9ba98, 0x317285d3, 0x7fc00000, 0x3c00000},
1158{0x3c00000, 0x7fd9ba98, 0x3c9623b1, 0x7fc00000, 0x3c00000},
1159{0x3c00000, 0x7fd9ba98, 0x51fd2c7c, 0x7fc00000, 0x3c00000},
1160{0x3c00000, 0x7fd9ba98, 0x7b906a6c, 0x7fc00000, 0x3c00000},
1161{0x3c00000, 0x7fffffff, 0x0, 0x7fc00000, 0x3c00000},
1162{0x3c00000, 0x7fffffff, 0x1, 0x7fc00000, 0x3c00080},
1163{0x3c00000, 0x7fffffff, 0x76, 0x7fc00000, 0x3c00080},
1164{0x3c00000, 0x7fffffff, 0x2b94, 0x7fc00000, 0x3c00080},
1165{0x3c00000, 0x7fffffff, 0x636d24, 0x7fc00000, 0x3c00080},
1166{0x3c00000, 0x7fffffff, 0x7fffff, 0x7fc00000, 0x3c00080},
1167{0x3c00000, 0x7fffffff, 0x800000, 0x7fc00000, 0x3c00000},
1168{0x3c00000, 0x7fffffff, 0x800002, 0x7fc00000, 0x3c00000},
1169{0x3c00000, 0x7fffffff, 0x1398437, 0x7fc00000, 0x3c00000},
1170{0x3c00000, 0x7fffffff, 0xba98d27, 0x7fc00000, 0x3c00000},
1171{0x3c00000, 0x7fffffff, 0xba98d7a, 0x7fc00000, 0x3c00000},
1172{0x3c00000, 0x7fffffff, 0x751f853a, 0x7fc00000, 0x3c00000},
1173{0x3c00000, 0x7fffffff, 0x7f7ffff0, 0x7fc00000, 0x3c00000},
1174{0x3c00000, 0x7fffffff, 0x7f7fffff, 0x7fc00000, 0x3c00000},
1175{0x3c00000, 0x7fffffff, 0x7f800000, 0x7fc00000, 0x3c00000},
1176{0x3c00000, 0x7fffffff, 0x7f800001, 0x7fc00000, 0x3c00001},
1177{0x3c00000, 0x7fffffff, 0x7f984a37, 0x7fc00000, 0x3c00001},
1178{0x3c00000, 0x7fffffff, 0x7fbfffff, 0x7fc00000, 0x3c00001},
1179{0x3c00000, 0x7fffffff, 0x7fc00000, 0x7fc00000, 0x3c00000},
1180{0x3c00000, 0x7fffffff, 0x7fd9ba98, 0x7fc00000, 0x3c00000},
1181{0x3c00000, 0x7fffffff, 0x7fffffff, 0x7fc00000, 0x3c00000},
1182{0x3c00000, 0x7fffffff, 0x80000000, 0x7fc00000, 0x3c00000},
1183{0x3c00000, 0x7fffffff, 0x80000001, 0x7fc00000, 0x3c00080},
1184{0x3c00000, 0x7fffffff, 0x80000076, 0x7fc00000, 0x3c00080},
1185{0x3c00000, 0x7fffffff, 0x80002b94, 0x7fc00000, 0x3c00080},
1186{0x3c00000, 0x7fffffff, 0x80636d24, 0x7fc00000, 0x3c00080},
1187{0x3c00000, 0x7fffffff, 0x807fffff, 0x7fc00000, 0x3c00080},
1188{0x3c00000, 0x7fffffff, 0x80800000, 0x7fc00000, 0x3c00000},
1189{0x3c00000, 0x7fffffff, 0x80800002, 0x7fc00000, 0x3c00000},
1190{0x3c00000, 0x7fffffff, 0x81398437, 0x7fc00000, 0x3c00000},
1191{0x3c00000, 0x7fffffff, 0x8ba98d27, 0x7fc00000, 0x3c00000},
1192{0x3c00000, 0x7fffffff, 0x8ba98d7a, 0x7fc00000, 0x3c00000},
1193{0x3c00000, 0x7fffffff, 0xf51f853a, 0x7fc00000, 0x3c00000},
1194{0x3c00000, 0x7fffffff, 0xff7ffff0, 0x7fc00000, 0x3c00000},
1195{0x3c00000, 0x7fffffff, 0xff7fffff, 0x7fc00000, 0x3c00000},
1196{0x3c00000, 0x7fffffff, 0xff800000, 0x7fc00000, 0x3c00000},
1197{0x3c00000, 0x7fffffff, 0xff800001, 0x7fc00000, 0x3c00001},
1198{0x3c00000, 0x7fffffff, 0xff984a37, 0x7fc00000, 0x3c00001},
1199{0x3c00000, 0x7fffffff, 0xffbfffff, 0x7fc00000, 0x3c00001},
1200{0x3c00000, 0x7fffffff, 0xffc00000, 0x7fc00000, 0x3c00000},
1201{0x3c00000, 0x7fffffff, 0xffd9ba98, 0x7fc00000, 0x3c00000},
1202{0x3c00000, 0x7fffffff, 0xffffffff, 0x7fc00000, 0x3c00000},
1203{0x3c00000, 0x7fffffff, 0x4f3495cb, 0x7fc00000, 0x3c00000},
1204{0x3c00000, 0x7fffffff, 0xe73a5134, 0x7fc00000, 0x3c00000},
1205{0x3c00000, 0x7fffffff, 0x7c994e9e, 0x7fc00000, 0x3c00000},
1206{0x3c00000, 0x7fffffff, 0x6164bd6c, 0x7fc00000, 0x3c00000},
1207{0x3c00000, 0x7fffffff, 0x9503366, 0x7fc00000, 0x3c00000},
1208{0x3c00000, 0x7fffffff, 0xbf5a97c9, 0x7fc00000, 0x3c00000},
1209{0x3c00000, 0x7fffffff, 0xe6ff1a14, 0x7fc00000, 0x3c00000},
1210{0x3c00000, 0x7fffffff, 0x77f31e2f, 0x7fc00000, 0x3c00000},
1211{0x3c00000, 0x7fffffff, 0xaab4d7d8, 0x7fc00000, 0x3c00000},
1212{0x3c00000, 0x7fffffff, 0x966320b, 0x7fc00000, 0x3c00000},
1213{0x3c00000, 0x7fffffff, 0xb26bddee, 0x7fc00000, 0x3c00000},
1214{0x3c00000, 0x7fffffff, 0xb5c8e5d3, 0x7fc00000, 0x3c00000},
1215{0x3c00000, 0x7fffffff, 0x317285d3, 0x7fc00000, 0x3c00000},
1216{0x3c00000, 0x7fffffff, 0x3c9623b1, 0x7fc00000, 0x3c00000},
1217{0x3c00000, 0x7fffffff, 0x51fd2c7c, 0x7fc00000, 0x3c00000},
1218{0x3c00000, 0x7fffffff, 0x7b906a6c, 0x7fc00000, 0x3c00000},
1219{0x3c00000, 0x80000000, 0x0, 0x0, 0x3c00000},
1220{0x3c00000, 0x80000000, 0x1, 0x0, 0x3c00080},
1221{0x3c00000, 0x80000000, 0x76, 0x0, 0x3c00080},
1222{0x3c00000, 0x80000000, 0x2b94, 0x0, 0x3c00080},
1223{0x3c00000, 0x80000000, 0x636d24, 0x0, 0x3c00080},
1224{0x3c00000, 0x80000000, 0x7fffff, 0x0, 0x3c00080},
1225{0x3c00000, 0x80000000, 0x800000, 0x800000, 0x3c00000},
1226{0x3c00000, 0x80000000, 0x800002, 0x800002, 0x3c00000},
1227{0x3c00000, 0x80000000, 0x1398437, 0x1398437, 0x3c00000},
1228{0x3c00000, 0x80000000, 0xba98d27, 0xba98d27, 0x3c00000},
1229{0x3c00000, 0x80000000, 0xba98d7a, 0xba98d7a, 0x3c00000},
1230{0x3c00000, 0x80000000, 0x751f853a, 0x751f853a, 0x3c00000},
1231{0x3c00000, 0x80000000, 0x7f7ffff0, 0x7f7ffff0, 0x3c00000},
1232{0x3c00000, 0x80000000, 0x7f7fffff, 0x7f7fffff, 0x3c00000},
1233{0x3c00000, 0x80000000, 0x7f800000, 0x7f800000, 0x3c00000},
1234{0x3c00000, 0x80000000, 0x7f800001, 0x7fc00000, 0x3c00001},
1235{0x3c00000, 0x80000000, 0x7f984a37, 0x7fc00000, 0x3c00001},
1236{0x3c00000, 0x80000000, 0x7fbfffff, 0x7fc00000, 0x3c00001},
1237{0x3c00000, 0x80000000, 0x7fc00000, 0x7fc00000, 0x3c00000},
1238{0x3c00000, 0x80000000, 0x7fd9ba98, 0x7fc00000, 0x3c00000},
1239{0x3c00000, 0x80000000, 0x7fffffff, 0x7fc00000, 0x3c00000},
1240{0x3c00000, 0x80000000, 0x80000000, 0x80000000, 0x3c00000},
1241{0x3c00000, 0x80000000, 0x80000001, 0x0, 0x3c00080},
1242{0x3c00000, 0x80000000, 0x80000076, 0x0, 0x3c00080},
1243{0x3c00000, 0x80000000, 0x80002b94, 0x0, 0x3c00080},
1244{0x3c00000, 0x80000000, 0x80636d24, 0x0, 0x3c00080},
1245{0x3c00000, 0x80000000, 0x807fffff, 0x0, 0x3c00080},
1246{0x3c00000, 0x80000000, 0x80800000, 0x80800000, 0x3c00000},
1247{0x3c00000, 0x80000000, 0x80800002, 0x80800002, 0x3c00000},
1248{0x3c00000, 0x80000000, 0x81398437, 0x81398437, 0x3c00000},
1249{0x3c00000, 0x80000000, 0x8ba98d27, 0x8ba98d27, 0x3c00000},
1250{0x3c00000, 0x80000000, 0x8ba98d7a, 0x8ba98d7a, 0x3c00000},
1251{0x3c00000, 0x80000000, 0xf51f853a, 0xf51f853a, 0x3c00000},
1252{0x3c00000, 0x80000000, 0xff7ffff0, 0xff7ffff0, 0x3c00000},
1253{0x3c00000, 0x80000000, 0xff7fffff, 0xff7fffff, 0x3c00000},
1254{0x3c00000, 0x80000000, 0xff800000, 0xff800000, 0x3c00000},
1255{0x3c00000, 0x80000000, 0xff800001, 0x7fc00000, 0x3c00001},
1256{0x3c00000, 0x80000000, 0xff984a37, 0x7fc00000, 0x3c00001},
1257{0x3c00000, 0x80000000, 0xffbfffff, 0x7fc00000, 0x3c00001},
1258{0x3c00000, 0x80000000, 0xffc00000, 0x7fc00000, 0x3c00000},
1259{0x3c00000, 0x80000000, 0xffd9ba98, 0x7fc00000, 0x3c00000},
1260{0x3c00000, 0x80000000, 0xffffffff, 0x7fc00000, 0x3c00000},
1261{0x3c00000, 0x80000000, 0x4f3495cb, 0x4f3495cb, 0x3c00000},
1262{0x3c00000, 0x80000000, 0xe73a5134, 0xe73a5134, 0x3c00000},
1263{0x3c00000, 0x80000000, 0x7c994e9e, 0x7c994e9e, 0x3c00000},
1264{0x3c00000, 0x80000000, 0x6164bd6c, 0x6164bd6c, 0x3c00000},
1265{0x3c00000, 0x80000000, 0x9503366, 0x9503366, 0x3c00000},
1266{0x3c00000, 0x80000000, 0xbf5a97c9, 0xbf5a97c9, 0x3c00000},
1267{0x3c00000, 0x80000000, 0xe6ff1a14, 0xe6ff1a14, 0x3c00000},
1268{0x3c00000, 0x80000000, 0x77f31e2f, 0x77f31e2f, 0x3c00000},
1269{0x3c00000, 0x80000000, 0xaab4d7d8, 0xaab4d7d8, 0x3c00000},
1270{0x3c00000, 0x80000000, 0x966320b, 0x966320b, 0x3c00000},
1271{0x3c00000, 0x80000000, 0xb26bddee, 0xb26bddee, 0x3c00000},
1272{0x3c00000, 0x80000000, 0xb5c8e5d3, 0xb5c8e5d3, 0x3c00000},
1273{0x3c00000, 0x80000000, 0x317285d3, 0x317285d3, 0x3c00000},
1274{0x3c00000, 0x80000000, 0x3c9623b1, 0x3c9623b1, 0x3c00000},
1275{0x3c00000, 0x80000000, 0x51fd2c7c, 0x51fd2c7c, 0x3c00000},
1276{0x3c00000, 0x80000000, 0x7b906a6c, 0x7b906a6c, 0x3c00000},
1277{0x3c00000, 0x80000001, 0x0, 0x0, 0x3c00080},
1278{0x3c00000, 0x80000001, 0x1, 0x0, 0x3c00080},
1279{0x3c00000, 0x80000001, 0x76, 0x0, 0x3c00080},
1280{0x3c00000, 0x80000001, 0x2b94, 0x0, 0x3c00080},
1281{0x3c00000, 0x80000001, 0x636d24, 0x0, 0x3c00080},
1282{0x3c00000, 0x80000001, 0x7fffff, 0x0, 0x3c00080},
1283{0x3c00000, 0x80000001, 0x800000, 0x800000, 0x3c00080},
1284{0x3c00000, 0x80000001, 0x800002, 0x800002, 0x3c00080},
1285{0x3c00000, 0x80000001, 0x1398437, 0x1398437, 0x3c00080},
1286{0x3c00000, 0x80000001, 0xba98d27, 0xba98d27, 0x3c00080},
1287{0x3c00000, 0x80000001, 0xba98d7a, 0xba98d7a, 0x3c00080},
1288{0x3c00000, 0x80000001, 0x751f853a, 0x751f853a, 0x3c00080},
1289{0x3c00000, 0x80000001, 0x7f7ffff0, 0x7f7ffff0, 0x3c00080},
1290{0x3c00000, 0x80000001, 0x7f7fffff, 0x7f7fffff, 0x3c00080},
1291{0x3c00000, 0x80000001, 0x7f800000, 0x7f800000, 0x3c00080},
1292{0x3c00000, 0x80000001, 0x7f800001, 0x7fc00000, 0x3c00081},
1293{0x3c00000, 0x80000001, 0x7f984a37, 0x7fc00000, 0x3c00081},
1294{0x3c00000, 0x80000001, 0x7fbfffff, 0x7fc00000, 0x3c00081},
1295{0x3c00000, 0x80000001, 0x7fc00000, 0x7fc00000, 0x3c00080},
1296{0x3c00000, 0x80000001, 0x7fd9ba98, 0x7fc00000, 0x3c00080},
1297{0x3c00000, 0x80000001, 0x7fffffff, 0x7fc00000, 0x3c00080},
1298{0x3c00000, 0x80000001, 0x80000000, 0x0, 0x3c00080},
1299{0x3c00000, 0x80000001, 0x80000001, 0x0, 0x3c00080},
1300{0x3c00000, 0x80000001, 0x80000076, 0x0, 0x3c00080},
1301{0x3c00000, 0x80000001, 0x80002b94, 0x0, 0x3c00080},
1302{0x3c00000, 0x80000001, 0x80636d24, 0x0, 0x3c00080},
1303{0x3c00000, 0x80000001, 0x807fffff, 0x0, 0x3c00080},
1304{0x3c00000, 0x80000001, 0x80800000, 0x80800000, 0x3c00080},
1305{0x3c00000, 0x80000001, 0x80800002, 0x80800002, 0x3c00080},
1306{0x3c00000, 0x80000001, 0x81398437, 0x81398437, 0x3c00080},
1307{0x3c00000, 0x80000001, 0x8ba98d27, 0x8ba98d27, 0x3c00080},
1308{0x3c00000, 0x80000001, 0x8ba98d7a, 0x8ba98d7a, 0x3c00080},
1309{0x3c00000, 0x80000001, 0xf51f853a, 0xf51f853a, 0x3c00080},
1310{0x3c00000, 0x80000001, 0xff7ffff0, 0xff7ffff0, 0x3c00080},
1311{0x3c00000, 0x80000001, 0xff7fffff, 0xff7fffff, 0x3c00080},
1312{0x3c00000, 0x80000001, 0xff800000, 0xff800000, 0x3c00080},
1313{0x3c00000, 0x80000001, 0xff800001, 0x7fc00000, 0x3c00081},
1314{0x3c00000, 0x80000001, 0xff984a37, 0x7fc00000, 0x3c00081},
1315{0x3c00000, 0x80000001, 0xffbfffff, 0x7fc00000, 0x3c00081},
1316{0x3c00000, 0x80000001, 0xffc00000, 0x7fc00000, 0x3c00080},
1317{0x3c00000, 0x80000001, 0xffd9ba98, 0x7fc00000, 0x3c00080},
1318{0x3c00000, 0x80000001, 0xffffffff, 0x7fc00000, 0x3c00080},
1319{0x3c00000, 0x80000001, 0x4f3495cb, 0x4f3495cb, 0x3c00080},
1320{0x3c00000, 0x80000001, 0xe73a5134, 0xe73a5134, 0x3c00080},
1321{0x3c00000, 0x80000001, 0x7c994e9e, 0x7c994e9e, 0x3c00080},
1322{0x3c00000, 0x80000001, 0x6164bd6c, 0x6164bd6c, 0x3c00080},
1323{0x3c00000, 0x80000001, 0x9503366, 0x9503366, 0x3c00080},
1324{0x3c00000, 0x80000001, 0xbf5a97c9, 0xbf5a97c9, 0x3c00080},
1325{0x3c00000, 0x80000001, 0xe6ff1a14, 0xe6ff1a14, 0x3c00080},
1326{0x3c00000, 0x80000001, 0x77f31e2f, 0x77f31e2f, 0x3c00080},
1327{0x3c00000, 0x80000001, 0xaab4d7d8, 0xaab4d7d8, 0x3c00080},
1328{0x3c00000, 0x80000001, 0x966320b, 0x966320b, 0x3c00080},
1329{0x3c00000, 0x80000001, 0xb26bddee, 0xb26bddee, 0x3c00080},
1330{0x3c00000, 0x80000001, 0xb5c8e5d3, 0xb5c8e5d3, 0x3c00080},
1331{0x3c00000, 0x80000001, 0x317285d3, 0x317285d3, 0x3c00080},
1332{0x3c00000, 0x80000001, 0x3c9623b1, 0x3c9623b1, 0x3c00080},
1333{0x3c00000, 0x80000001, 0x51fd2c7c, 0x51fd2c7c, 0x3c00080},
1334{0x3c00000, 0x80000001, 0x7b906a6c, 0x7b906a6c, 0x3c00080},
1335{0x3c00000, 0x80000076, 0x0, 0x0, 0x3c00080},
1336{0x3c00000, 0x80000076, 0x1, 0x0, 0x3c00080},
1337{0x3c00000, 0x80000076, 0x76, 0x0, 0x3c00080},
1338{0x3c00000, 0x80000076, 0x2b94, 0x0, 0x3c00080},
1339{0x3c00000, 0x80000076, 0x636d24, 0x0, 0x3c00080},
1340{0x3c00000, 0x80000076, 0x7fffff, 0x0, 0x3c00080},
1341{0x3c00000, 0x80000076, 0x800000, 0x800000, 0x3c00080},
1342{0x3c00000, 0x80000076, 0x800002, 0x800002, 0x3c00080},
1343{0x3c00000, 0x80000076, 0x1398437, 0x1398437, 0x3c00080},
1344{0x3c00000, 0x80000076, 0xba98d27, 0xba98d27, 0x3c00080},
1345{0x3c00000, 0x80000076, 0xba98d7a, 0xba98d7a, 0x3c00080},
1346{0x3c00000, 0x80000076, 0x751f853a, 0x751f853a, 0x3c00080},
1347{0x3c00000, 0x80000076, 0x7f7ffff0, 0x7f7ffff0, 0x3c00080},
1348{0x3c00000, 0x80000076, 0x7f7fffff, 0x7f7fffff, 0x3c00080},
1349{0x3c00000, 0x80000076, 0x7f800000, 0x7f800000, 0x3c00080},
1350{0x3c00000, 0x80000076, 0x7f800001, 0x7fc00000, 0x3c00081},
1351{0x3c00000, 0x80000076, 0x7f984a37, 0x7fc00000, 0x3c00081},
1352{0x3c00000, 0x80000076, 0x7fbfffff, 0x7fc00000, 0x3c00081},
1353{0x3c00000, 0x80000076, 0x7fc00000, 0x7fc00000, 0x3c00080},
1354{0x3c00000, 0x80000076, 0x7fd9ba98, 0x7fc00000, 0x3c00080},
1355{0x3c00000, 0x80000076, 0x7fffffff, 0x7fc00000, 0x3c00080},
1356{0x3c00000, 0x80000076, 0x80000000, 0x0, 0x3c00080},
1357{0x3c00000, 0x80000076, 0x80000001, 0x0, 0x3c00080},
1358{0x3c00000, 0x80000076, 0x80000076, 0x0, 0x3c00080},
1359{0x3c00000, 0x80000076, 0x80002b94, 0x0, 0x3c00080},
1360{0x3c00000, 0x80000076, 0x80636d24, 0x0, 0x3c00080},
1361{0x3c00000, 0x80000076, 0x807fffff, 0x0, 0x3c00080},
1362{0x3c00000, 0x80000076, 0x80800000, 0x80800000, 0x3c00080},
1363{0x3c00000, 0x80000076, 0x80800002, 0x80800002, 0x3c00080},
1364{0x3c00000, 0x80000076, 0x81398437, 0x81398437, 0x3c00080},
1365{0x3c00000, 0x80000076, 0x8ba98d27, 0x8ba98d27, 0x3c00080},
1366{0x3c00000, 0x80000076, 0x8ba98d7a, 0x8ba98d7a, 0x3c00080},
1367{0x3c00000, 0x80000076, 0xf51f853a, 0xf51f853a, 0x3c00080},
1368{0x3c00000, 0x80000076, 0xff7ffff0, 0xff7ffff0, 0x3c00080},
1369{0x3c00000, 0x80000076, 0xff7fffff, 0xff7fffff, 0x3c00080},
1370{0x3c00000, 0x80000076, 0xff800000, 0xff800000, 0x3c00080},
1371{0x3c00000, 0x80000076, 0xff800001, 0x7fc00000, 0x3c00081},
1372{0x3c00000, 0x80000076, 0xff984a37, 0x7fc00000, 0x3c00081},
1373{0x3c00000, 0x80000076, 0xffbfffff, 0x7fc00000, 0x3c00081},
1374{0x3c00000, 0x80000076, 0xffc00000, 0x7fc00000, 0x3c00080},
1375{0x3c00000, 0x80000076, 0xffd9ba98, 0x7fc00000, 0x3c00080},
1376{0x3c00000, 0x80000076, 0xffffffff, 0x7fc00000, 0x3c00080},
1377{0x3c00000, 0x80000076, 0x4f3495cb, 0x4f3495cb, 0x3c00080},
1378{0x3c00000, 0x80000076, 0xe73a5134, 0xe73a5134, 0x3c00080},
1379{0x3c00000, 0x80000076, 0x7c994e9e, 0x7c994e9e, 0x3c00080},
1380{0x3c00000, 0x80000076, 0x6164bd6c, 0x6164bd6c, 0x3c00080},
1381{0x3c00000, 0x80000076, 0x9503366, 0x9503366, 0x3c00080},
1382{0x3c00000, 0x80000076, 0xbf5a97c9, 0xbf5a97c9, 0x3c00080},
1383{0x3c00000, 0x80000076, 0xe6ff1a14, 0xe6ff1a14, 0x3c00080},
1384{0x3c00000, 0x80000076, 0x77f31e2f, 0x77f31e2f, 0x3c00080},
1385{0x3c00000, 0x80000076, 0xaab4d7d8, 0xaab4d7d8, 0x3c00080},
1386{0x3c00000, 0x80000076, 0x966320b, 0x966320b, 0x3c00080},
1387{0x3c00000, 0x80000076, 0xb26bddee, 0xb26bddee, 0x3c00080},
1388{0x3c00000, 0x80000076, 0xb5c8e5d3, 0xb5c8e5d3, 0x3c00080},
1389{0x3c00000, 0x80000076, 0x317285d3, 0x317285d3, 0x3c00080},
1390{0x3c00000, 0x80000076, 0x3c9623b1, 0x3c9623b1, 0x3c00080},
1391{0x3c00000, 0x80000076, 0x51fd2c7c, 0x51fd2c7c, 0x3c00080},
1392{0x3c00000, 0x80000076, 0x7b906a6c, 0x7b906a6c, 0x3c00080},
1393{0x3c00000, 0x80002b94, 0x0, 0x0, 0x3c00080},
1394{0x3c00000, 0x80002b94, 0x1, 0x0, 0x3c00080},
1395{0x3c00000, 0x80002b94, 0x76, 0x0, 0x3c00080},
1396{0x3c00000, 0x80002b94, 0x2b94, 0x0, 0x3c00080},
1397{0x3c00000, 0x80002b94, 0x636d24, 0x0, 0x3c00080},
1398{0x3c00000, 0x80002b94, 0x7fffff, 0x0, 0x3c00080},
1399{0x3c00000, 0x80002b94, 0x800000, 0x800000, 0x3c00080},
1400{0x3c00000, 0x80002b94, 0x800002, 0x800002, 0x3c00080},
1401{0x3c00000, 0x80002b94, 0x1398437, 0x1398437, 0x3c00080},
1402{0x3c00000, 0x80002b94, 0xba98d27, 0xba98d27, 0x3c00080},
1403{0x3c00000, 0x80002b94, 0xba98d7a, 0xba98d7a, 0x3c00080},
1404{0x3c00000, 0x80002b94, 0x751f853a, 0x751f853a, 0x3c00080},
1405{0x3c00000, 0x80002b94, 0x7f7ffff0, 0x7f7ffff0, 0x3c00080},
1406{0x3c00000, 0x80002b94, 0x7f7fffff, 0x7f7fffff, 0x3c00080},
1407{0x3c00000, 0x80002b94, 0x7f800000, 0x7f800000, 0x3c00080},
1408{0x3c00000, 0x80002b94, 0x7f800001, 0x7fc00000, 0x3c00081},
1409{0x3c00000, 0x80002b94, 0x7f984a37, 0x7fc00000, 0x3c00081},
1410{0x3c00000, 0x80002b94, 0x7fbfffff, 0x7fc00000, 0x3c00081},
1411{0x3c00000, 0x80002b94, 0x7fc00000, 0x7fc00000, 0x3c00080},
1412{0x3c00000, 0x80002b94, 0x7fd9ba98, 0x7fc00000, 0x3c00080},
1413{0x3c00000, 0x80002b94, 0x7fffffff, 0x7fc00000, 0x3c00080},
1414{0x3c00000, 0x80002b94, 0x80000000, 0x0, 0x3c00080},
1415{0x3c00000, 0x80002b94, 0x80000001, 0x0, 0x3c00080},
1416{0x3c00000, 0x80002b94, 0x80000076, 0x0, 0x3c00080},
1417{0x3c00000, 0x80002b94, 0x80002b94, 0x0, 0x3c00080},
1418{0x3c00000, 0x80002b94, 0x80636d24, 0x0, 0x3c00080},
1419{0x3c00000, 0x80002b94, 0x807fffff, 0x0, 0x3c00080},
1420{0x3c00000, 0x80002b94, 0x80800000, 0x80800000, 0x3c00080},
1421{0x3c00000, 0x80002b94, 0x80800002, 0x80800002, 0x3c00080},
1422{0x3c00000, 0x80002b94, 0x81398437, 0x81398437, 0x3c00080},
1423{0x3c00000, 0x80002b94, 0x8ba98d27, 0x8ba98d27, 0x3c00080},
1424{0x3c00000, 0x80002b94, 0x8ba98d7a, 0x8ba98d7a, 0x3c00080},
1425{0x3c00000, 0x80002b94, 0xf51f853a, 0xf51f853a, 0x3c00080},
1426{0x3c00000, 0x80002b94, 0xff7ffff0, 0xff7ffff0, 0x3c00080},
1427{0x3c00000, 0x80002b94, 0xff7fffff, 0xff7fffff, 0x3c00080},
1428{0x3c00000, 0x80002b94, 0xff800000, 0xff800000, 0x3c00080},
1429{0x3c00000, 0x80002b94, 0xff800001, 0x7fc00000, 0x3c00081},
1430{0x3c00000, 0x80002b94, 0xff984a37, 0x7fc00000, 0x3c00081},
1431{0x3c00000, 0x80002b94, 0xffbfffff, 0x7fc00000, 0x3c00081},
1432{0x3c00000, 0x80002b94, 0xffc00000, 0x7fc00000, 0x3c00080},
1433{0x3c00000, 0x80002b94, 0xffd9ba98, 0x7fc00000, 0x3c00080},
1434{0x3c00000, 0x80002b94, 0xffffffff, 0x7fc00000, 0x3c00080},
1435{0x3c00000, 0x80002b94, 0x4f3495cb, 0x4f3495cb, 0x3c00080},
1436{0x3c00000, 0x80002b94, 0xe73a5134, 0xe73a5134, 0x3c00080},
1437{0x3c00000, 0x80002b94, 0x7c994e9e, 0x7c994e9e, 0x3c00080},
1438{0x3c00000, 0x80002b94, 0x6164bd6c, 0x6164bd6c, 0x3c00080},
1439{0x3c00000, 0x80002b94, 0x9503366, 0x9503366, 0x3c00080},
1440{0x3c00000, 0x80002b94, 0xbf5a97c9, 0xbf5a97c9, 0x3c00080},
1441{0x3c00000, 0x80002b94, 0xe6ff1a14, 0xe6ff1a14, 0x3c00080},
1442{0x3c00000, 0x80002b94, 0x77f31e2f, 0x77f31e2f, 0x3c00080},
1443{0x3c00000, 0x80002b94, 0xaab4d7d8, 0xaab4d7d8, 0x3c00080},
1444{0x3c00000, 0x80002b94, 0x966320b, 0x966320b, 0x3c00080},
1445{0x3c00000, 0x80002b94, 0xb26bddee, 0xb26bddee, 0x3c00080},
1446{0x3c00000, 0x80002b94, 0xb5c8e5d3, 0xb5c8e5d3, 0x3c00080},
1447{0x3c00000, 0x80002b94, 0x317285d3, 0x317285d3, 0x3c00080},
1448{0x3c00000, 0x80002b94, 0x3c9623b1, 0x3c9623b1, 0x3c00080},
1449{0x3c00000, 0x80002b94, 0x51fd2c7c, 0x51fd2c7c, 0x3c00080},
1450{0x3c00000, 0x80002b94, 0x7b906a6c, 0x7b906a6c, 0x3c00080},
1451{0x3c00000, 0x80636d24, 0x0, 0x0, 0x3c00080},
1452{0x3c00000, 0x80636d24, 0x1, 0x0, 0x3c00080},
1453{0x3c00000, 0x80636d24, 0x76, 0x0, 0x3c00080},
1454{0x3c00000, 0x80636d24, 0x2b94, 0x0, 0x3c00080},
1455{0x3c00000, 0x80636d24, 0x636d24, 0x0, 0x3c00080},
1456{0x3c00000, 0x80636d24, 0x7fffff, 0x0, 0x3c00080},
1457{0x3c00000, 0x80636d24, 0x800000, 0x800000, 0x3c00080},
1458{0x3c00000, 0x80636d24, 0x800002, 0x800002, 0x3c00080},
1459{0x3c00000, 0x80636d24, 0x1398437, 0x1398437, 0x3c00080},
1460{0x3c00000, 0x80636d24, 0xba98d27, 0xba98d27, 0x3c00080},
1461{0x3c00000, 0x80636d24, 0xba98d7a, 0xba98d7a, 0x3c00080},
1462{0x3c00000, 0x80636d24, 0x751f853a, 0x751f853a, 0x3c00080},
1463{0x3c00000, 0x80636d24, 0x7f7ffff0, 0x7f7ffff0, 0x3c00080},
1464{0x3c00000, 0x80636d24, 0x7f7fffff, 0x7f7fffff, 0x3c00080},
1465{0x3c00000, 0x80636d24, 0x7f800000, 0x7f800000, 0x3c00080},
1466{0x3c00000, 0x80636d24, 0x7f800001, 0x7fc00000, 0x3c00081},
1467{0x3c00000, 0x80636d24, 0x7f984a37, 0x7fc00000, 0x3c00081},
1468{0x3c00000, 0x80636d24, 0x7fbfffff, 0x7fc00000, 0x3c00081},
1469{0x3c00000, 0x80636d24, 0x7fc00000, 0x7fc00000, 0x3c00080},
1470{0x3c00000, 0x80636d24, 0x7fd9ba98, 0x7fc00000, 0x3c00080},
1471{0x3c00000, 0x80636d24, 0x7fffffff, 0x7fc00000, 0x3c00080},
1472{0x3c00000, 0x80636d24, 0x80000000, 0x0, 0x3c00080},
1473{0x3c00000, 0x80636d24, 0x80000001, 0x0, 0x3c00080},
1474{0x3c00000, 0x80636d24, 0x80000076, 0x0, 0x3c00080},
1475{0x3c00000, 0x80636d24, 0x80002b94, 0x0, 0x3c00080},
1476{0x3c00000, 0x80636d24, 0x80636d24, 0x0, 0x3c00080},
1477{0x3c00000, 0x80636d24, 0x807fffff, 0x0, 0x3c00080},
1478{0x3c00000, 0x80636d24, 0x80800000, 0x80800000, 0x3c00080},
1479{0x3c00000, 0x80636d24, 0x80800002, 0x80800002, 0x3c00080},
1480{0x3c00000, 0x80636d24, 0x81398437, 0x81398437, 0x3c00080},
1481{0x3c00000, 0x80636d24, 0x8ba98d27, 0x8ba98d27, 0x3c00080},
1482{0x3c00000, 0x80636d24, 0x8ba98d7a, 0x8ba98d7a, 0x3c00080},
1483{0x3c00000, 0x80636d24, 0xf51f853a, 0xf51f853a, 0x3c00080},
1484{0x3c00000, 0x80636d24, 0xff7ffff0, 0xff7ffff0, 0x3c00080},
1485{0x3c00000, 0x80636d24, 0xff7fffff, 0xff7fffff, 0x3c00080},
1486{0x3c00000, 0x80636d24, 0xff800000, 0xff800000, 0x3c00080},
1487{0x3c00000, 0x80636d24, 0xff800001, 0x7fc00000, 0x3c00081},
1488{0x3c00000, 0x80636d24, 0xff984a37, 0x7fc00000, 0x3c00081},
1489{0x3c00000, 0x80636d24, 0xffbfffff, 0x7fc00000, 0x3c00081},
1490{0x3c00000, 0x80636d24, 0xffc00000, 0x7fc00000, 0x3c00080},
1491{0x3c00000, 0x80636d24, 0xffd9ba98, 0x7fc00000, 0x3c00080},
1492{0x3c00000, 0x80636d24, 0xffffffff, 0x7fc00000, 0x3c00080},
1493{0x3c00000, 0x80636d24, 0x4f3495cb, 0x4f3495cb, 0x3c00080},
1494{0x3c00000, 0x80636d24, 0xe73a5134, 0xe73a5134, 0x3c00080},
1495{0x3c00000, 0x80636d24, 0x7c994e9e, 0x7c994e9e, 0x3c00080},
1496{0x3c00000, 0x80636d24, 0x6164bd6c, 0x6164bd6c, 0x3c00080},
1497{0x3c00000, 0x80636d24, 0x9503366, 0x9503366, 0x3c00080},
1498{0x3c00000, 0x80636d24, 0xbf5a97c9, 0xbf5a97c9, 0x3c00080},
1499{0x3c00000, 0x80636d24, 0xe6ff1a14, 0xe6ff1a14, 0x3c00080},
1500{0x3c00000, 0x80636d24, 0x77f31e2f, 0x77f31e2f, 0x3c00080},
1501{0x3c00000, 0x80636d24, 0xaab4d7d8, 0xaab4d7d8, 0x3c00080},
1502{0x3c00000, 0x80636d24, 0x966320b, 0x966320b, 0x3c00080},
1503{0x3c00000, 0x80636d24, 0xb26bddee, 0xb26bddee, 0x3c00080},
1504{0x3c00000, 0x80636d24, 0xb5c8e5d3, 0xb5c8e5d3, 0x3c00080},
1505{0x3c00000, 0x80636d24, 0x317285d3, 0x317285d3, 0x3c00080},
1506{0x3c00000, 0x80636d24, 0x3c9623b1, 0x3c9623b1, 0x3c00080},
1507{0x3c00000, 0x80636d24, 0x51fd2c7c, 0x51fd2c7c, 0x3c00080},
1508{0x3c00000, 0x80636d24, 0x7b906a6c, 0x7b906a6c, 0x3c00080},
1509{0x3c00000, 0x807fffff, 0x0, 0x0, 0x3c00080},
1510{0x3c00000, 0x807fffff, 0x1, 0x0, 0x3c00080},
1511{0x3c00000, 0x807fffff, 0x76, 0x0, 0x3c00080},
1512{0x3c00000, 0x807fffff, 0x2b94, 0x0, 0x3c00080},
1513{0x3c00000, 0x807fffff, 0x636d24, 0x0, 0x3c00080},
1514{0x3c00000, 0x807fffff, 0x7fffff, 0x0, 0x3c00080},
1515{0x3c00000, 0x807fffff, 0x800000, 0x800000, 0x3c00080},
1516{0x3c00000, 0x807fffff, 0x800002, 0x800002, 0x3c00080},
1517{0x3c00000, 0x807fffff, 0x1398437, 0x1398437, 0x3c00080},
1518{0x3c00000, 0x807fffff, 0xba98d27, 0xba98d27, 0x3c00080},
1519{0x3c00000, 0x807fffff, 0xba98d7a, 0xba98d7a, 0x3c00080},
1520{0x3c00000, 0x807fffff, 0x751f853a, 0x751f853a, 0x3c00080},
1521{0x3c00000, 0x807fffff, 0x7f7ffff0, 0x7f7ffff0, 0x3c00080},
1522{0x3c00000, 0x807fffff, 0x7f7fffff, 0x7f7fffff, 0x3c00080},
1523{0x3c00000, 0x807fffff, 0x7f800000, 0x7f800000, 0x3c00080},
1524{0x3c00000, 0x807fffff, 0x7f800001, 0x7fc00000, 0x3c00081},
1525{0x3c00000, 0x807fffff, 0x7f984a37, 0x7fc00000, 0x3c00081},
1526{0x3c00000, 0x807fffff, 0x7fbfffff, 0x7fc00000, 0x3c00081},
1527{0x3c00000, 0x807fffff, 0x7fc00000, 0x7fc00000, 0x3c00080},
1528{0x3c00000, 0x807fffff, 0x7fd9ba98, 0x7fc00000, 0x3c00080},
1529{0x3c00000, 0x807fffff, 0x7fffffff, 0x7fc00000, 0x3c00080},
1530{0x3c00000, 0x807fffff, 0x80000000, 0x0, 0x3c00080},
1531{0x3c00000, 0x807fffff, 0x80000001, 0x0, 0x3c00080},
1532{0x3c00000, 0x807fffff, 0x80000076, 0x0, 0x3c00080},
1533{0x3c00000, 0x807fffff, 0x80002b94, 0x0, 0x3c00080},
1534{0x3c00000, 0x807fffff, 0x80636d24, 0x0, 0x3c00080},
1535{0x3c00000, 0x807fffff, 0x807fffff, 0x0, 0x3c00080},
1536{0x3c00000, 0x807fffff, 0x80800000, 0x80800000, 0x3c00080},
1537{0x3c00000, 0x807fffff, 0x80800002, 0x80800002, 0x3c00080},
1538{0x3c00000, 0x807fffff, 0x81398437, 0x81398437, 0x3c00080},
1539{0x3c00000, 0x807fffff, 0x8ba98d27, 0x8ba98d27, 0x3c00080},
1540{0x3c00000, 0x807fffff, 0x8ba98d7a, 0x8ba98d7a, 0x3c00080},
1541{0x3c00000, 0x807fffff, 0xf51f853a, 0xf51f853a, 0x3c00080},
1542{0x3c00000, 0x807fffff, 0xff7ffff0, 0xff7ffff0, 0x3c00080},
1543{0x3c00000, 0x807fffff, 0xff7fffff, 0xff7fffff, 0x3c00080},
1544{0x3c00000, 0x807fffff, 0xff800000, 0xff800000, 0x3c00080},
1545{0x3c00000, 0x807fffff, 0xff800001, 0x7fc00000, 0x3c00081},
1546{0x3c00000, 0x807fffff, 0xff984a37, 0x7fc00000, 0x3c00081},
1547{0x3c00000, 0x807fffff, 0xffbfffff, 0x7fc00000, 0x3c00081},
1548{0x3c00000, 0x807fffff, 0xffc00000, 0x7fc00000, 0x3c00080},
1549{0x3c00000, 0x807fffff, 0xffd9ba98, 0x7fc00000, 0x3c00080},
1550{0x3c00000, 0x807fffff, 0xffffffff, 0x7fc00000, 0x3c00080},
1551{0x3c00000, 0x807fffff, 0x4f3495cb, 0x4f3495cb, 0x3c00080},
1552{0x3c00000, 0x807fffff, 0xe73a5134, 0xe73a5134, 0x3c00080},
1553{0x3c00000, 0x807fffff, 0x7c994e9e, 0x7c994e9e, 0x3c00080},
1554{0x3c00000, 0x807fffff, 0x6164bd6c, 0x6164bd6c, 0x3c00080},
1555{0x3c00000, 0x807fffff, 0x9503366, 0x9503366, 0x3c00080},
1556{0x3c00000, 0x807fffff, 0xbf5a97c9, 0xbf5a97c9, 0x3c00080},
1557{0x3c00000, 0x807fffff, 0xe6ff1a14, 0xe6ff1a14, 0x3c00080},
1558{0x3c00000, 0x807fffff, 0x77f31e2f, 0x77f31e2f, 0x3c00080},
1559{0x3c00000, 0x807fffff, 0xaab4d7d8, 0xaab4d7d8, 0x3c00080},
1560{0x3c00000, 0x807fffff, 0x966320b, 0x966320b, 0x3c00080},
1561{0x3c00000, 0x807fffff, 0xb26bddee, 0xb26bddee, 0x3c00080},
1562{0x3c00000, 0x807fffff, 0xb5c8e5d3, 0xb5c8e5d3, 0x3c00080},
1563{0x3c00000, 0x807fffff, 0x317285d3, 0x317285d3, 0x3c00080},
1564{0x3c00000, 0x807fffff, 0x3c9623b1, 0x3c9623b1, 0x3c00080},
1565{0x3c00000, 0x807fffff, 0x51fd2c7c, 0x51fd2c7c, 0x3c00080},
1566{0x3c00000, 0x807fffff, 0x7b906a6c, 0x7b906a6c, 0x3c00080},
1567{0x3c00000, 0x80800000, 0x0, 0x80800000, 0x3c00000},
1568{0x3c00000, 0x80800000, 0x1, 0x80800000, 0x3c00080},
1569{0x3c00000, 0x80800000, 0x76, 0x80800000, 0x3c00080},
1570{0x3c00000, 0x80800000, 0x2b94, 0x80800000, 0x3c00080},
1571{0x3c00000, 0x80800000, 0x636d24, 0x80800000, 0x3c00080},
1572{0x3c00000, 0x80800000, 0x7fffff, 0x80800000, 0x3c00080},
1573{0x3c00000, 0x80800000, 0x800000, 0x0, 0x3c00000},
1574{0x3c00000, 0x80800000, 0x800002, 0x0, 0x3c00008},
1575{0x3c00000, 0x80800000, 0x1398437, 0xf3086e, 0x3c00000},
1576{0x3c00000, 0x80800000, 0xba98d27, 0xba98d25, 0x3c00000},
1577{0x3c00000, 0x80800000, 0xba98d7a, 0xba98d78, 0x3c00000},
1578{0x3c00000, 0x80800000, 0x751f853a, 0x751f8539, 0x3c00010},
1579{0x3c00000, 0x80800000, 0x7f7ffff0, 0x7f7fffef, 0x3c00010},
1580{0x3c00000, 0x80800000, 0x7f7fffff, 0x7f7ffffe, 0x3c00010},
1581{0x3c00000, 0x80800000, 0x7f800000, 0x7f800000, 0x3c00000},
1582{0x3c00000, 0x80800000, 0x7f800001, 0x7fc00000, 0x3c00001},
1583{0x3c00000, 0x80800000, 0x7f984a37, 0x7fc00000, 0x3c00001},
1584{0x3c00000, 0x80800000, 0x7fbfffff, 0x7fc00000, 0x3c00001},
1585{0x3c00000, 0x80800000, 0x7fc00000, 0x7fc00000, 0x3c00000},
1586{0x3c00000, 0x80800000, 0x7fd9ba98, 0x7fc00000, 0x3c00000},
1587{0x3c00000, 0x80800000, 0x7fffffff, 0x7fc00000, 0x3c00000},
1588{0x3c00000, 0x80800000, 0x80000000, 0x80800000, 0x3c00000},
1589{0x3c00000, 0x80800000, 0x80000001, 0x80800000, 0x3c00080},
1590{0x3c00000, 0x80800000, 0x80000076, 0x80800000, 0x3c00080},
1591{0x3c00000, 0x80800000, 0x80002b94, 0x80800000, 0x3c00080},
1592{0x3c00000, 0x80800000, 0x80636d24, 0x80800000, 0x3c00080},
1593{0x3c00000, 0x80800000, 0x807fffff, 0x80800000, 0x3c00080},
1594{0x3c00000, 0x80800000, 0x80800000, 0x81000000, 0x3c00000},
1595{0x3c00000, 0x80800000, 0x80800002, 0x81000001, 0x3c00000},
1596{0x3c00000, 0x80800000, 0x81398437, 0x81798437, 0x3c00000},
1597{0x3c00000, 0x80800000, 0x8ba98d27, 0x8ba98d29, 0x3c00000},
1598{0x3c00000, 0x80800000, 0x8ba98d7a, 0x8ba98d7c, 0x3c00000},
1599{0x3c00000, 0x80800000, 0xf51f853a, 0xf51f853a, 0x3c00010},
1600{0x3c00000, 0x80800000, 0xff7ffff0, 0xff7ffff0, 0x3c00010},
1601{0x3c00000, 0x80800000, 0xff7fffff, 0xff7fffff, 0x3c00010},
1602{0x3c00000, 0x80800000, 0xff800000, 0xff800000, 0x3c00000},
1603{0x3c00000, 0x80800000, 0xff800001, 0x7fc00000, 0x3c00001},
1604{0x3c00000, 0x80800000, 0xff984a37, 0x7fc00000, 0x3c00001},
1605{0x3c00000, 0x80800000, 0xffbfffff, 0x7fc00000, 0x3c00001},
1606{0x3c00000, 0x80800000, 0xffc00000, 0x7fc00000, 0x3c00000},
1607{0x3c00000, 0x80800000, 0xffd9ba98, 0x7fc00000, 0x3c00000},
1608{0x3c00000, 0x80800000, 0xffffffff, 0x7fc00000, 0x3c00000},
1609{0x3c00000, 0x80800000, 0x4f3495cb, 0x4f3495ca, 0x3c00010},
1610{0x3c00000, 0x80800000, 0xe73a5134, 0xe73a5134, 0x3c00010},
1611{0x3c00000, 0x80800000, 0x7c994e9e, 0x7c994e9d, 0x3c00010},
1612{0x3c00000, 0x80800000, 0x6164bd6c, 0x6164bd6b, 0x3c00010},
1613{0x3c00000, 0x80800000, 0x9503366, 0x9503326, 0x3c00000},
1614{0x3c00000, 0x80800000, 0xbf5a97c9, 0xbf5a97c9, 0x3c00010},
1615{0x3c00000, 0x80800000, 0xe6ff1a14, 0xe6ff1a14, 0x3c00010},
1616{0x3c00000, 0x80800000, 0x77f31e2f, 0x77f31e2e, 0x3c00010},
1617{0x3c00000, 0x80800000, 0xaab4d7d8, 0xaab4d7d8, 0x3c00010},
1618{0x3c00000, 0x80800000, 0x966320b, 0x96631cb, 0x3c00000},
1619{0x3c00000, 0x80800000, 0xb26bddee, 0xb26bddee, 0x3c00010},
1620{0x3c00000, 0x80800000, 0xb5c8e5d3, 0xb5c8e5d3, 0x3c00010},
1621{0x3c00000, 0x80800000, 0x317285d3, 0x317285d2, 0x3c00010},
1622{0x3c00000, 0x80800000, 0x3c9623b1, 0x3c9623b0, 0x3c00010},
1623{0x3c00000, 0x80800000, 0x51fd2c7c, 0x51fd2c7b, 0x3c00010},
1624{0x3c00000, 0x80800000, 0x7b906a6c, 0x7b906a6b, 0x3c00010},
1625{0x3c00000, 0x80800002, 0x0, 0x80800002, 0x3c00000},
1626{0x3c00000, 0x80800002, 0x1, 0x80800002, 0x3c00080},
1627{0x3c00000, 0x80800002, 0x76, 0x80800002, 0x3c00080},
1628{0x3c00000, 0x80800002, 0x2b94, 0x80800002, 0x3c00080},
1629{0x3c00000, 0x80800002, 0x636d24, 0x80800002, 0x3c00080},
1630{0x3c00000, 0x80800002, 0x7fffff, 0x80800002, 0x3c00080},
1631{0x3c00000, 0x80800002, 0x800000, 0x0, 0x3c00008},
1632{0x3c00000, 0x80800002, 0x800002, 0x0, 0x3c00000},
1633{0x3c00000, 0x80800002, 0x1398437, 0xf3086c, 0x3c00000},
1634{0x3c00000, 0x80800002, 0xba98d27, 0xba98d24, 0x3c00010},
1635{0x3c00000, 0x80800002, 0xba98d7a, 0xba98d77, 0x3c00010},
1636{0x3c00000, 0x80800002, 0x751f853a, 0x751f8539, 0x3c00010},
1637{0x3c00000, 0x80800002, 0x7f7ffff0, 0x7f7fffef, 0x3c00010},
1638{0x3c00000, 0x80800002, 0x7f7fffff, 0x7f7ffffe, 0x3c00010},
1639{0x3c00000, 0x80800002, 0x7f800000, 0x7f800000, 0x3c00000},
1640{0x3c00000, 0x80800002, 0x7f800001, 0x7fc00000, 0x3c00001},
1641{0x3c00000, 0x80800002, 0x7f984a37, 0x7fc00000, 0x3c00001},
1642{0x3c00000, 0x80800002, 0x7fbfffff, 0x7fc00000, 0x3c00001},
1643{0x3c00000, 0x80800002, 0x7fc00000, 0x7fc00000, 0x3c00000},
1644{0x3c00000, 0x80800002, 0x7fd9ba98, 0x7fc00000, 0x3c00000},
1645{0x3c00000, 0x80800002, 0x7fffffff, 0x7fc00000, 0x3c00000},
1646{0x3c00000, 0x80800002, 0x80000000, 0x80800002, 0x3c00000},
1647{0x3c00000, 0x80800002, 0x80000001, 0x80800002, 0x3c00080},
1648{0x3c00000, 0x80800002, 0x80000076, 0x80800002, 0x3c00080},
1649{0x3c00000, 0x80800002, 0x80002b94, 0x80800002, 0x3c00080},
1650{0x3c00000, 0x80800002, 0x80636d24, 0x80800002, 0x3c00080},
1651{0x3c00000, 0x80800002, 0x807fffff, 0x80800002, 0x3c00080},
1652{0x3c00000, 0x80800002, 0x80800000, 0x81000001, 0x3c00000},
1653{0x3c00000, 0x80800002, 0x80800002, 0x81000002, 0x3c00000},
1654{0x3c00000, 0x80800002, 0x81398437, 0x81798438, 0x3c00000},
1655{0x3c00000, 0x80800002, 0x8ba98d27, 0x8ba98d29, 0x3c00010},
1656{0x3c00000, 0x80800002, 0x8ba98d7a, 0x8ba98d7c, 0x3c00010},
1657{0x3c00000, 0x80800002, 0xf51f853a, 0xf51f853a, 0x3c00010},
1658{0x3c00000, 0x80800002, 0xff7ffff0, 0xff7ffff0, 0x3c00010},
1659{0x3c00000, 0x80800002, 0xff7fffff, 0xff7fffff, 0x3c00010},
1660{0x3c00000, 0x80800002, 0xff800000, 0xff800000, 0x3c00000},
1661{0x3c00000, 0x80800002, 0xff800001, 0x7fc00000, 0x3c00001},
1662{0x3c00000, 0x80800002, 0xff984a37, 0x7fc00000, 0x3c00001},
1663{0x3c00000, 0x80800002, 0xffbfffff, 0x7fc00000, 0x3c00001},
1664{0x3c00000, 0x80800002, 0xffc00000, 0x7fc00000, 0x3c00000},
1665{0x3c00000, 0x80800002, 0xffd9ba98, 0x7fc00000, 0x3c00000},
1666{0x3c00000, 0x80800002, 0xffffffff, 0x7fc00000, 0x3c00000},
1667{0x3c00000, 0x80800002, 0x4f3495cb, 0x4f3495ca, 0x3c00010},
1668{0x3c00000, 0x80800002, 0xe73a5134, 0xe73a5134, 0x3c00010},
1669{0x3c00000, 0x80800002, 0x7c994e9e, 0x7c994e9d, 0x3c00010},
1670{0x3c00000, 0x80800002, 0x6164bd6c, 0x6164bd6b, 0x3c00010},
1671{0x3c00000, 0x80800002, 0x9503366, 0x9503325, 0x3c00010},
1672{0x3c00000, 0x80800002, 0xbf5a97c9, 0xbf5a97c9, 0x3c00010},
1673{0x3c00000, 0x80800002, 0xe6ff1a14, 0xe6ff1a14, 0x3c00010},
1674{0x3c00000, 0x80800002, 0x77f31e2f, 0x77f31e2e, 0x3c00010},
1675{0x3c00000, 0x80800002, 0xaab4d7d8, 0xaab4d7d8, 0x3c00010},
1676{0x3c00000, 0x80800002, 0x966320b, 0x96631ca, 0x3c00010},
1677{0x3c00000, 0x80800002, 0xb26bddee, 0xb26bddee, 0x3c00010},
1678{0x3c00000, 0x80800002, 0xb5c8e5d3, 0xb5c8e5d3, 0x3c00010},
1679{0x3c00000, 0x80800002, 0x317285d3, 0x317285d2, 0x3c00010},
1680{0x3c00000, 0x80800002, 0x3c9623b1, 0x3c9623b0, 0x3c00010},
1681{0x3c00000, 0x80800002, 0x51fd2c7c, 0x51fd2c7b, 0x3c00010},
1682{0x3c00000, 0x80800002, 0x7b906a6c, 0x7b906a6b, 0x3c00010},
1683{0x3c00000, 0x81398437, 0x0, 0x81398437, 0x3c00000},
1684{0x3c00000, 0x81398437, 0x1, 0x81398437, 0x3c00080},
1685{0x3c00000, 0x81398437, 0x76, 0x81398437, 0x3c00080},
1686{0x3c00000, 0x81398437, 0x2b94, 0x81398437, 0x3c00080},
1687{0x3c00000, 0x81398437, 0x636d24, 0x81398437, 0x3c00080},
1688{0x3c00000, 0x81398437, 0x7fffff, 0x81398437, 0x3c00080},
1689{0x3c00000, 0x81398437, 0x800000, 0x80f3086e, 0x3c00000},
1690{0x3c00000, 0x81398437, 0x800002, 0x80f3086c, 0x3c00000},
1691{0x3c00000, 0x81398437, 0x1398437, 0x0, 0x3c00000},
1692{0x3c00000, 0x81398437, 0xba98d27, 0xba98d21, 0x3c00010},
1693{0x3c00000, 0x81398437, 0xba98d7a, 0xba98d74, 0x3c00010},
1694{0x3c00000, 0x81398437, 0x751f853a, 0x751f8539, 0x3c00010},
1695{0x3c00000, 0x81398437, 0x7f7ffff0, 0x7f7fffef, 0x3c00010},
1696{0x3c00000, 0x81398437, 0x7f7fffff, 0x7f7ffffe, 0x3c00010},
1697{0x3c00000, 0x81398437, 0x7f800000, 0x7f800000, 0x3c00000},
1698{0x3c00000, 0x81398437, 0x7f800001, 0x7fc00000, 0x3c00001},
1699{0x3c00000, 0x81398437, 0x7f984a37, 0x7fc00000, 0x3c00001},
1700{0x3c00000, 0x81398437, 0x7fbfffff, 0x7fc00000, 0x3c00001},
1701{0x3c00000, 0x81398437, 0x7fc00000, 0x7fc00000, 0x3c00000},
1702{0x3c00000, 0x81398437, 0x7fd9ba98, 0x7fc00000, 0x3c00000},
1703{0x3c00000, 0x81398437, 0x7fffffff, 0x7fc00000, 0x3c00000},
1704{0x3c00000, 0x81398437, 0x80000000, 0x81398437, 0x3c00000},
1705{0x3c00000, 0x81398437, 0x80000001, 0x81398437, 0x3c00080},
1706{0x3c00000, 0x81398437, 0x80000076, 0x81398437, 0x3c00080},
1707{0x3c00000, 0x81398437, 0x80002b94, 0x81398437, 0x3c00080},
1708{0x3c00000, 0x81398437, 0x80636d24, 0x81398437, 0x3c00080},
1709{0x3c00000, 0x81398437, 0x807fffff, 0x81398437, 0x3c00080},
1710{0x3c00000, 0x81398437, 0x80800000, 0x81798437, 0x3c00000},
1711{0x3c00000, 0x81398437, 0x80800002, 0x81798438, 0x3c00000},
1712{0x3c00000, 0x81398437, 0x81398437, 0x81b98437, 0x3c00000},
1713{0x3c00000, 0x81398437, 0x8ba98d27, 0x8ba98d2c, 0x3c00010},
1714{0x3c00000, 0x81398437, 0x8ba98d7a, 0x8ba98d7f, 0x3c00010},
1715{0x3c00000, 0x81398437, 0xf51f853a, 0xf51f853a, 0x3c00010},
1716{0x3c00000, 0x81398437, 0xff7ffff0, 0xff7ffff0, 0x3c00010},
1717{0x3c00000, 0x81398437, 0xff7fffff, 0xff7fffff, 0x3c00010},
1718{0x3c00000, 0x81398437, 0xff800000, 0xff800000, 0x3c00000},
1719{0x3c00000, 0x81398437, 0xff800001, 0x7fc00000, 0x3c00001},
1720{0x3c00000, 0x81398437, 0xff984a37, 0x7fc00000, 0x3c00001},
1721{0x3c00000, 0x81398437, 0xffbfffff, 0x7fc00000, 0x3c00001},
1722{0x3c00000, 0x81398437, 0xffc00000, 0x7fc00000, 0x3c00000},
1723{0x3c00000, 0x81398437, 0xffd9ba98, 0x7fc00000, 0x3c00000},
1724{0x3c00000, 0x81398437, 0xffffffff, 0x7fc00000, 0x3c00000},
1725{0x3c00000, 0x81398437, 0x4f3495cb, 0x4f3495ca, 0x3c00010},
1726{0x3c00000, 0x81398437, 0xe73a5134, 0xe73a5134, 0x3c00010},
1727{0x3c00000, 0x81398437, 0x7c994e9e, 0x7c994e9d, 0x3c00010},
1728{0x3c00000, 0x81398437, 0x6164bd6c, 0x6164bd6b, 0x3c00010},
1729{0x3c00000, 0x81398437, 0x9503366, 0x95032ac, 0x3c00010},
1730{0x3c00000, 0x81398437, 0xbf5a97c9, 0xbf5a97c9, 0x3c00010},
1731{0x3c00000, 0x81398437, 0xe6ff1a14, 0xe6ff1a14, 0x3c00010},
1732{0x3c00000, 0x81398437, 0x77f31e2f, 0x77f31e2e, 0x3c00010},
1733{0x3c00000, 0x81398437, 0xaab4d7d8, 0xaab4d7d8, 0x3c00010},
1734{0x3c00000, 0x81398437, 0x966320b, 0x9663151, 0x3c00010},
1735{0x3c00000, 0x81398437, 0xb26bddee, 0xb26bddee, 0x3c00010},
1736{0x3c00000, 0x81398437, 0xb5c8e5d3, 0xb5c8e5d3, 0x3c00010},
1737{0x3c00000, 0x81398437, 0x317285d3, 0x317285d2, 0x3c00010},
1738{0x3c00000, 0x81398437, 0x3c9623b1, 0x3c9623b0, 0x3c00010},
1739{0x3c00000, 0x81398437, 0x51fd2c7c, 0x51fd2c7b, 0x3c00010},
1740{0x3c00000, 0x81398437, 0x7b906a6c, 0x7b906a6b, 0x3c00010},
1741{0x3c00000, 0x8ba98d27, 0x0, 0x8ba98d27, 0x3c00000},
1742{0x3c00000, 0x8ba98d27, 0x1, 0x8ba98d27, 0x3c00080},
1743{0x3c00000, 0x8ba98d27, 0x76, 0x8ba98d27, 0x3c00080},
1744{0x3c00000, 0x8ba98d27, 0x2b94, 0x8ba98d27, 0x3c00080},
1745{0x3c00000, 0x8ba98d27, 0x636d24, 0x8ba98d27, 0x3c00080},
1746{0x3c00000, 0x8ba98d27, 0x7fffff, 0x8ba98d27, 0x3c00080},
1747{0x3c00000, 0x8ba98d27, 0x800000, 0x8ba98d25, 0x3c00000},
1748{0x3c00000, 0x8ba98d27, 0x800002, 0x8ba98d24, 0x3c00010},
1749{0x3c00000, 0x8ba98d27, 0x1398437, 0x8ba98d21, 0x3c00010},
1750{0x3c00000, 0x8ba98d27, 0xba98d27, 0x0, 0x3c00000},
1751{0x3c00000, 0x8ba98d27, 0xba98d7a, 0x3260000, 0x3c00000},
1752{0x3c00000, 0x8ba98d27, 0x751f853a, 0x751f8539, 0x3c00010},
1753{0x3c00000, 0x8ba98d27, 0x7f7ffff0, 0x7f7fffef, 0x3c00010},
1754{0x3c00000, 0x8ba98d27, 0x7f7fffff, 0x7f7ffffe, 0x3c00010},
1755{0x3c00000, 0x8ba98d27, 0x7f800000, 0x7f800000, 0x3c00000},
1756{0x3c00000, 0x8ba98d27, 0x7f800001, 0x7fc00000, 0x3c00001},
1757{0x3c00000, 0x8ba98d27, 0x7f984a37, 0x7fc00000, 0x3c00001},
1758{0x3c00000, 0x8ba98d27, 0x7fbfffff, 0x7fc00000, 0x3c00001},
1759{0x3c00000, 0x8ba98d27, 0x7fc00000, 0x7fc00000, 0x3c00000},
1760{0x3c00000, 0x8ba98d27, 0x7fd9ba98, 0x7fc00000, 0x3c00000},
1761{0x3c00000, 0x8ba98d27, 0x7fffffff, 0x7fc00000, 0x3c00000},
1762{0x3c00000, 0x8ba98d27, 0x80000000, 0x8ba98d27, 0x3c00000},
1763{0x3c00000, 0x8ba98d27, 0x80000001, 0x8ba98d27, 0x3c00080},
1764{0x3c00000, 0x8ba98d27, 0x80000076, 0x8ba98d27, 0x3c00080},
1765{0x3c00000, 0x8ba98d27, 0x80002b94, 0x8ba98d27, 0x3c00080},
1766{0x3c00000, 0x8ba98d27, 0x80636d24, 0x8ba98d27, 0x3c00080},
1767{0x3c00000, 0x8ba98d27, 0x807fffff, 0x8ba98d27, 0x3c00080},
1768{0x3c00000, 0x8ba98d27, 0x80800000, 0x8ba98d29, 0x3c00000},
1769{0x3c00000, 0x8ba98d27, 0x80800002, 0x8ba98d29, 0x3c00010},
1770{0x3c00000, 0x8ba98d27, 0x81398437, 0x8ba98d2c, 0x3c00010},
1771{0x3c00000, 0x8ba98d27, 0x8ba98d27, 0x8c298d27, 0x3c00000},
1772{0x3c00000, 0x8ba98d27, 0x8ba98d7a, 0x8c298d50, 0x3c00010},
1773{0x3c00000, 0x8ba98d27, 0xf51f853a, 0xf51f853a, 0x3c00010},
1774{0x3c00000, 0x8ba98d27, 0xff7ffff0, 0xff7ffff0, 0x3c00010},
1775{0x3c00000, 0x8ba98d27, 0xff7fffff, 0xff7fffff, 0x3c00010},
1776{0x3c00000, 0x8ba98d27, 0xff800000, 0xff800000, 0x3c00000},
1777{0x3c00000, 0x8ba98d27, 0xff800001, 0x7fc00000, 0x3c00001},
1778{0x3c00000, 0x8ba98d27, 0xff984a37, 0x7fc00000, 0x3c00001},
1779{0x3c00000, 0x8ba98d27, 0xffbfffff, 0x7fc00000, 0x3c00001},
1780{0x3c00000, 0x8ba98d27, 0xffc00000, 0x7fc00000, 0x3c00000},
1781{0x3c00000, 0x8ba98d27, 0xffd9ba98, 0x7fc00000, 0x3c00000},
1782{0x3c00000, 0x8ba98d27, 0xffffffff, 0x7fc00000, 0x3c00000},
1783{0x3c00000, 0x8ba98d27, 0x4f3495cb, 0x4f3495ca, 0x3c00010},
1784{0x3c00000, 0x8ba98d27, 0xe73a5134, 0xe73a5134, 0x3c00010},
1785{0x3c00000, 0x8ba98d27, 0x7c994e9e, 0x7c994e9d, 0x3c00010},
1786{0x3c00000, 0x8ba98d27, 0x6164bd6c, 0x6164bd6b, 0x3c00010},
1787{0x3c00000, 0x8ba98d27, 0x9503366, 0x8ba30b8b, 0x3c00010},
1788{0x3c00000, 0x8ba98d27, 0xbf5a97c9, 0xbf5a97c9, 0x3c00010},
1789{0x3c00000, 0x8ba98d27, 0xe6ff1a14, 0xe6ff1a14, 0x3c00010},
1790{0x3c00000, 0x8ba98d27, 0x77f31e2f, 0x77f31e2e, 0x3c00010},
1791{0x3c00000, 0x8ba98d27, 0xaab4d7d8, 0xaab4d7d8, 0x3c00010},
1792{0x3c00000, 0x8ba98d27, 0x966320b, 0x8ba25b96, 0x3c00010},
1793{0x3c00000, 0x8ba98d27, 0xb26bddee, 0xb26bddee, 0x3c00010},
1794{0x3c00000, 0x8ba98d27, 0xb5c8e5d3, 0xb5c8e5d3, 0x3c00010},
1795{0x3c00000, 0x8ba98d27, 0x317285d3, 0x317285d2, 0x3c00010},
1796{0x3c00000, 0x8ba98d27, 0x3c9623b1, 0x3c9623b0, 0x3c00010},
1797{0x3c00000, 0x8ba98d27, 0x51fd2c7c, 0x51fd2c7b, 0x3c00010},
1798{0x3c00000, 0x8ba98d27, 0x7b906a6c, 0x7b906a6b, 0x3c00010},
1799{0x3c00000, 0x8ba98d7a, 0x0, 0x8ba98d7a, 0x3c00000},
1800{0x3c00000, 0x8ba98d7a, 0x1, 0x8ba98d7a, 0x3c00080},
1801{0x3c00000, 0x8ba98d7a, 0x76, 0x8ba98d7a, 0x3c00080},
1802{0x3c00000, 0x8ba98d7a, 0x2b94, 0x8ba98d7a, 0x3c00080},
1803{0x3c00000, 0x8ba98d7a, 0x636d24, 0x8ba98d7a, 0x3c00080},
1804{0x3c00000, 0x8ba98d7a, 0x7fffff, 0x8ba98d7a, 0x3c00080},
1805{0x3c00000, 0x8ba98d7a, 0x800000, 0x8ba98d78, 0x3c00000},
1806{0x3c00000, 0x8ba98d7a, 0x800002, 0x8ba98d77, 0x3c00010},
1807{0x3c00000, 0x8ba98d7a, 0x1398437, 0x8ba98d74, 0x3c00010},
1808{0x3c00000, 0x8ba98d7a, 0xba98d27, 0x83260000, 0x3c00000},
1809{0x3c00000, 0x8ba98d7a, 0xba98d7a, 0x0, 0x3c00000},
1810{0x3c00000, 0x8ba98d7a, 0x751f853a, 0x751f8539, 0x3c00010},
1811{0x3c00000, 0x8ba98d7a, 0x7f7ffff0, 0x7f7fffef, 0x3c00010},
1812{0x3c00000, 0x8ba98d7a, 0x7f7fffff, 0x7f7ffffe, 0x3c00010},
1813{0x3c00000, 0x8ba98d7a, 0x7f800000, 0x7f800000, 0x3c00000},
1814{0x3c00000, 0x8ba98d7a, 0x7f800001, 0x7fc00000, 0x3c00001},
1815{0x3c00000, 0x8ba98d7a, 0x7f984a37, 0x7fc00000, 0x3c00001},
1816{0x3c00000, 0x8ba98d7a, 0x7fbfffff, 0x7fc00000, 0x3c00001},
1817{0x3c00000, 0x8ba98d7a, 0x7fc00000, 0x7fc00000, 0x3c00000},
1818{0x3c00000, 0x8ba98d7a, 0x7fd9ba98, 0x7fc00000, 0x3c00000},
1819{0x3c00000, 0x8ba98d7a, 0x7fffffff, 0x7fc00000, 0x3c00000},
1820{0x3c00000, 0x8ba98d7a, 0x80000000, 0x8ba98d7a, 0x3c00000},
1821{0x3c00000, 0x8ba98d7a, 0x80000001, 0x8ba98d7a, 0x3c00080},
1822{0x3c00000, 0x8ba98d7a, 0x80000076, 0x8ba98d7a, 0x3c00080},
1823{0x3c00000, 0x8ba98d7a, 0x80002b94, 0x8ba98d7a, 0x3c00080},
1824{0x3c00000, 0x8ba98d7a, 0x80636d24, 0x8ba98d7a, 0x3c00080},
1825{0x3c00000, 0x8ba98d7a, 0x807fffff, 0x8ba98d7a, 0x3c00080},
1826{0x3c00000, 0x8ba98d7a, 0x80800000, 0x8ba98d7c, 0x3c00000},
1827{0x3c00000, 0x8ba98d7a, 0x80800002, 0x8ba98d7c, 0x3c00010},
1828{0x3c00000, 0x8ba98d7a, 0x81398437, 0x8ba98d7f, 0x3c00010},
1829{0x3c00000, 0x8ba98d7a, 0x8ba98d27, 0x8c298d50, 0x3c00010},
1830{0x3c00000, 0x8ba98d7a, 0x8ba98d7a, 0x8c298d7a, 0x3c00000},
1831{0x3c00000, 0x8ba98d7a, 0xf51f853a, 0xf51f853a, 0x3c00010},
1832{0x3c00000, 0x8ba98d7a, 0xff7ffff0, 0xff7ffff0, 0x3c00010},
1833{0x3c00000, 0x8ba98d7a, 0xff7fffff, 0xff7fffff, 0x3c00010},
1834{0x3c00000, 0x8ba98d7a, 0xff800000, 0xff800000, 0x3c00000},
1835{0x3c00000, 0x8ba98d7a, 0xff800001, 0x7fc00000, 0x3c00001},
1836{0x3c00000, 0x8ba98d7a, 0xff984a37, 0x7fc00000, 0x3c00001},
1837{0x3c00000, 0x8ba98d7a, 0xffbfffff, 0x7fc00000, 0x3c00001},
1838{0x3c00000, 0x8ba98d7a, 0xffc00000, 0x7fc00000, 0x3c00000},
1839{0x3c00000, 0x8ba98d7a, 0xffd9ba98, 0x7fc00000, 0x3c00000},
1840{0x3c00000, 0x8ba98d7a, 0xffffffff, 0x7fc00000, 0x3c00000},
1841{0x3c00000, 0x8ba98d7a, 0x4f3495cb, 0x4f3495ca, 0x3c00010},
1842{0x3c00000, 0x8ba98d7a, 0xe73a5134, 0xe73a5134, 0x3c00010},
1843{0x3c00000, 0x8ba98d7a, 0x7c994e9e, 0x7c994e9d, 0x3c00010},
1844{0x3c00000, 0x8ba98d7a, 0x6164bd6c, 0x6164bd6b, 0x3c00010},
1845{0x3c00000, 0x8ba98d7a, 0x9503366, 0x8ba30bde, 0x3c00010},
1846{0x3c00000, 0x8ba98d7a, 0xbf5a97c9, 0xbf5a97c9, 0x3c00010},
1847{0x3c00000, 0x8ba98d7a, 0xe6ff1a14, 0xe6ff1a14, 0x3c00010},
1848{0x3c00000, 0x8ba98d7a, 0x77f31e2f, 0x77f31e2e, 0x3c00010},
1849{0x3c00000, 0x8ba98d7a, 0xaab4d7d8, 0xaab4d7d8, 0x3c00010},
1850{0x3c00000, 0x8ba98d7a, 0x966320b, 0x8ba25be9, 0x3c00010},
1851{0x3c00000, 0x8ba98d7a, 0xb26bddee, 0xb26bddee, 0x3c00010},
1852{0x3c00000, 0x8ba98d7a, 0xb5c8e5d3, 0xb5c8e5d3, 0x3c00010},
1853{0x3c00000, 0x8ba98d7a, 0x317285d3, 0x317285d2, 0x3c00010},
1854{0x3c00000, 0x8ba98d7a, 0x3c9623b1, 0x3c9623b0, 0x3c00010},
1855{0x3c00000, 0x8ba98d7a, 0x51fd2c7c, 0x51fd2c7b, 0x3c00010},
1856{0x3c00000, 0x8ba98d7a, 0x7b906a6c, 0x7b906a6b, 0x3c00010},
1857{0x3c00000, 0xf51f853a, 0x0, 0xf51f853a, 0x3c00000},
1858{0x3c00000, 0xf51f853a, 0x1, 0xf51f853a, 0x3c00080},
1859{0x3c00000, 0xf51f853a, 0x76, 0xf51f853a, 0x3c00080},
1860{0x3c00000, 0xf51f853a, 0x2b94, 0xf51f853a, 0x3c00080},
1861{0x3c00000, 0xf51f853a, 0x636d24, 0xf51f853a, 0x3c00080},
1862{0x3c00000, 0xf51f853a, 0x7fffff, 0xf51f853a, 0x3c00080},
1863{0x3c00000, 0xf51f853a, 0x800000, 0xf51f8539, 0x3c00010},
1864{0x3c00000, 0xf51f853a, 0x800002, 0xf51f8539, 0x3c00010},
1865{0x3c00000, 0xf51f853a, 0x1398437, 0xf51f8539, 0x3c00010},
1866{0x3c00000, 0xf51f853a, 0xba98d27, 0xf51f8539, 0x3c00010},
1867{0x3c00000, 0xf51f853a, 0xba98d7a, 0xf51f8539, 0x3c00010},
1868{0x3c00000, 0xf51f853a, 0x751f853a, 0x0, 0x3c00000},
1869{0x3c00000, 0xf51f853a, 0x7f7ffff0, 0x7f7fffe6, 0x3c00010},
1870{0x3c00000, 0xf51f853a, 0x7f7fffff, 0x7f7ffff5, 0x3c00010},
1871{0x3c00000, 0xf51f853a, 0x7f800000, 0x7f800000, 0x3c00000},
1872{0x3c00000, 0xf51f853a, 0x7f800001, 0x7fc00000, 0x3c00001},
1873{0x3c00000, 0xf51f853a, 0x7f984a37, 0x7fc00000, 0x3c00001},
1874{0x3c00000, 0xf51f853a, 0x7fbfffff, 0x7fc00000, 0x3c00001},
1875{0x3c00000, 0xf51f853a, 0x7fc00000, 0x7fc00000, 0x3c00000},
1876{0x3c00000, 0xf51f853a, 0x7fd9ba98, 0x7fc00000, 0x3c00000},
1877{0x3c00000, 0xf51f853a, 0x7fffffff, 0x7fc00000, 0x3c00000},
1878{0x3c00000, 0xf51f853a, 0x80000000, 0xf51f853a, 0x3c00000},
1879{0x3c00000, 0xf51f853a, 0x80000001, 0xf51f853a, 0x3c00080},
1880{0x3c00000, 0xf51f853a, 0x80000076, 0xf51f853a, 0x3c00080},
1881{0x3c00000, 0xf51f853a, 0x80002b94, 0xf51f853a, 0x3c00080},
1882{0x3c00000, 0xf51f853a, 0x80636d24, 0xf51f853a, 0x3c00080},
1883{0x3c00000, 0xf51f853a, 0x807fffff, 0xf51f853a, 0x3c00080},
1884{0x3c00000, 0xf51f853a, 0x80800000, 0xf51f853a, 0x3c00010},
1885{0x3c00000, 0xf51f853a, 0x80800002, 0xf51f853a, 0x3c00010},
1886{0x3c00000, 0xf51f853a, 0x81398437, 0xf51f853a, 0x3c00010},
1887{0x3c00000, 0xf51f853a, 0x8ba98d27, 0xf51f853a, 0x3c00010},
1888{0x3c00000, 0xf51f853a, 0x8ba98d7a, 0xf51f853a, 0x3c00010},
1889{0x3c00000, 0xf51f853a, 0xf51f853a, 0xf59f853a, 0x3c00000},
1890{0x3c00000, 0xf51f853a, 0xff7ffff0, 0xff7ffff9, 0x3c00010},
1891{0x3c00000, 0xf51f853a, 0xff7fffff, 0xff7fffff, 0x3c00014},
1892{0x3c00000, 0xf51f853a, 0xff800000, 0xff800000, 0x3c00000},
1893{0x3c00000, 0xf51f853a, 0xff800001, 0x7fc00000, 0x3c00001},
1894{0x3c00000, 0xf51f853a, 0xff984a37, 0x7fc00000, 0x3c00001},
1895{0x3c00000, 0xf51f853a, 0xffbfffff, 0x7fc00000, 0x3c00001},
1896{0x3c00000, 0xf51f853a, 0xffc00000, 0x7fc00000, 0x3c00000},
1897{0x3c00000, 0xf51f853a, 0xffd9ba98, 0x7fc00000, 0x3c00000},
1898{0x3c00000, 0xf51f853a, 0xffffffff, 0x7fc00000, 0x3c00000},
1899{0x3c00000, 0xf51f853a, 0x4f3495cb, 0xf51f8539, 0x3c00010},
1900{0x3c00000, 0xf51f853a, 0xe73a5134, 0xf51f853a, 0x3c00010},
1901{0x3c00000, 0xf51f853a, 0x7c994e9e, 0x7c994d5e, 0x3c00010},
1902{0x3c00000, 0xf51f853a, 0x6164bd6c, 0xf51f8539, 0x3c00010},
1903{0x3c00000, 0xf51f853a, 0x9503366, 0xf51f8539, 0x3c00010},
1904{0x3c00000, 0xf51f853a, 0xbf5a97c9, 0xf51f853a, 0x3c00010},
1905{0x3c00000, 0xf51f853a, 0xe6ff1a14, 0xf51f853a, 0x3c00010},
1906{0x3c00000, 0xf51f853a, 0x77f31e2f, 0x77ee2205, 0x3c00010},
1907{0x3c00000, 0xf51f853a, 0xaab4d7d8, 0xf51f853a, 0x3c00010},
1908{0x3c00000, 0xf51f853a, 0x966320b, 0xf51f8539, 0x3c00010},
1909{0x3c00000, 0xf51f853a, 0xb26bddee, 0xf51f853a, 0x3c00010},
1910{0x3c00000, 0xf51f853a, 0xb5c8e5d3, 0xf51f853a, 0x3c00010},
1911{0x3c00000, 0xf51f853a, 0x317285d3, 0xf51f8539, 0x3c00010},
1912{0x3c00000, 0xf51f853a, 0x3c9623b1, 0xf51f8539, 0x3c00010},
1913{0x3c00000, 0xf51f853a, 0x51fd2c7c, 0xf51f8539, 0x3c00010},
1914{0x3c00000, 0xf51f853a, 0x7b906a6c, 0x7b90656f, 0x3c00010},
1915{0x3c00000, 0xff7ffff0, 0x0, 0xff7ffff0, 0x3c00000},
1916{0x3c00000, 0xff7ffff0, 0x1, 0xff7ffff0, 0x3c00080},
1917{0x3c00000, 0xff7ffff0, 0x76, 0xff7ffff0, 0x3c00080},
1918{0x3c00000, 0xff7ffff0, 0x2b94, 0xff7ffff0, 0x3c00080},
1919{0x3c00000, 0xff7ffff0, 0x636d24, 0xff7ffff0, 0x3c00080},
1920{0x3c00000, 0xff7ffff0, 0x7fffff, 0xff7ffff0, 0x3c00080},
1921{0x3c00000, 0xff7ffff0, 0x800000, 0xff7fffef, 0x3c00010},
1922{0x3c00000, 0xff7ffff0, 0x800002, 0xff7fffef, 0x3c00010},
1923{0x3c00000, 0xff7ffff0, 0x1398437, 0xff7fffef, 0x3c00010},
1924{0x3c00000, 0xff7ffff0, 0xba98d27, 0xff7fffef, 0x3c00010},
1925{0x3c00000, 0xff7ffff0, 0xba98d7a, 0xff7fffef, 0x3c00010},
1926{0x3c00000, 0xff7ffff0, 0x751f853a, 0xff7fffe6, 0x3c00010},
1927{0x3c00000, 0xff7ffff0, 0x7f7ffff0, 0x0, 0x3c00000},
1928{0x3c00000, 0xff7ffff0, 0x7f7fffff, 0x75700000, 0x3c00000},
1929{0x3c00000, 0xff7ffff0, 0x7f800000, 0x7f800000, 0x3c00000},
1930{0x3c00000, 0xff7ffff0, 0x7f800001, 0x7fc00000, 0x3c00001},
1931{0x3c00000, 0xff7ffff0, 0x7f984a37, 0x7fc00000, 0x3c00001},
1932{0x3c00000, 0xff7ffff0, 0x7fbfffff, 0x7fc00000, 0x3c00001},
1933{0x3c00000, 0xff7ffff0, 0x7fc00000, 0x7fc00000, 0x3c00000},
1934{0x3c00000, 0xff7ffff0, 0x7fd9ba98, 0x7fc00000, 0x3c00000},
1935{0x3c00000, 0xff7ffff0, 0x7fffffff, 0x7fc00000, 0x3c00000},
1936{0x3c00000, 0xff7ffff0, 0x80000000, 0xff7ffff0, 0x3c00000},
1937{0x3c00000, 0xff7ffff0, 0x80000001, 0xff7ffff0, 0x3c00080},
1938{0x3c00000, 0xff7ffff0, 0x80000076, 0xff7ffff0, 0x3c00080},
1939{0x3c00000, 0xff7ffff0, 0x80002b94, 0xff7ffff0, 0x3c00080},
1940{0x3c00000, 0xff7ffff0, 0x80636d24, 0xff7ffff0, 0x3c00080},
1941{0x3c00000, 0xff7ffff0, 0x807fffff, 0xff7ffff0, 0x3c00080},
1942{0x3c00000, 0xff7ffff0, 0x80800000, 0xff7ffff0, 0x3c00010},
1943{0x3c00000, 0xff7ffff0, 0x80800002, 0xff7ffff0, 0x3c00010},
1944{0x3c00000, 0xff7ffff0, 0x81398437, 0xff7ffff0, 0x3c00010},
1945{0x3c00000, 0xff7ffff0, 0x8ba98d27, 0xff7ffff0, 0x3c00010},
1946{0x3c00000, 0xff7ffff0, 0x8ba98d7a, 0xff7ffff0, 0x3c00010},
1947{0x3c00000, 0xff7ffff0, 0xf51f853a, 0xff7ffff9, 0x3c00010},
1948{0x3c00000, 0xff7ffff0, 0xff7ffff0, 0xff7fffff, 0x3c00014},
1949{0x3c00000, 0xff7ffff0, 0xff7fffff, 0xff7fffff, 0x3c00014},
1950{0x3c00000, 0xff7ffff0, 0xff800000, 0xff800000, 0x3c00000},
1951{0x3c00000, 0xff7ffff0, 0xff800001, 0x7fc00000, 0x3c00001},
1952{0x3c00000, 0xff7ffff0, 0xff984a37, 0x7fc00000, 0x3c00001},
1953{0x3c00000, 0xff7ffff0, 0xffbfffff, 0x7fc00000, 0x3c00001},
1954{0x3c00000, 0xff7ffff0, 0xffc00000, 0x7fc00000, 0x3c00000},
1955{0x3c00000, 0xff7ffff0, 0xffd9ba98, 0x7fc00000, 0x3c00000},
1956{0x3c00000, 0xff7ffff0, 0xffffffff, 0x7fc00000, 0x3c00000},
1957{0x3c00000, 0xff7ffff0, 0x4f3495cb, 0xff7fffef, 0x3c00010},
1958{0x3c00000, 0xff7ffff0, 0xe73a5134, 0xff7ffff0, 0x3c00010},
1959{0x3c00000, 0xff7ffff0, 0x7c994e9e, 0xff7b357b, 0x3c00010},
1960{0x3c00000, 0xff7ffff0, 0x6164bd6c, 0xff7fffef, 0x3c00010},
1961{0x3c00000, 0xff7ffff0, 0x9503366, 0xff7fffef, 0x3c00010},
1962{0x3c00000, 0xff7ffff0, 0xbf5a97c9, 0xff7ffff0, 0x3c00010},
1963{0x3c00000, 0xff7ffff0, 0xe6ff1a14, 0xff7ffff0, 0x3c00010},
1964{0x3c00000, 0xff7ffff0, 0x77f31e2f, 0xff7ffe09, 0x3c00010},
1965{0x3c00000, 0xff7ffff0, 0xaab4d7d8, 0xff7ffff0, 0x3c00010},
1966{0x3c00000, 0xff7ffff0, 0x966320b, 0xff7fffef, 0x3c00010},
1967{0x3c00000, 0xff7ffff0, 0xb26bddee, 0xff7ffff0, 0x3c00010},
1968{0x3c00000, 0xff7ffff0, 0xb5c8e5d3, 0xff7ffff0, 0x3c00010},
1969{0x3c00000, 0xff7ffff0, 0x317285d3, 0xff7fffef, 0x3c00010},
1970{0x3c00000, 0xff7ffff0, 0x3c9623b1, 0xff7fffef, 0x3c00010},
1971{0x3c00000, 0xff7ffff0, 0x51fd2c7c, 0xff7fffef, 0x3c00010},
1972{0x3c00000, 0xff7ffff0, 0x7b906a6c, 0xff7edf1b, 0x3c00010},
1973{0x3c00000, 0xff7fffff, 0x0, 0xff7fffff, 0x3c00000},
1974{0x3c00000, 0xff7fffff, 0x1, 0xff7fffff, 0x3c00080},
1975{0x3c00000, 0xff7fffff, 0x76, 0xff7fffff, 0x3c00080},
1976{0x3c00000, 0xff7fffff, 0x2b94, 0xff7fffff, 0x3c00080},
1977{0x3c00000, 0xff7fffff, 0x636d24, 0xff7fffff, 0x3c00080},
1978{0x3c00000, 0xff7fffff, 0x7fffff, 0xff7fffff, 0x3c00080},
1979{0x3c00000, 0xff7fffff, 0x800000, 0xff7ffffe, 0x3c00010},
1980{0x3c00000, 0xff7fffff, 0x800002, 0xff7ffffe, 0x3c00010},
1981{0x3c00000, 0xff7fffff, 0x1398437, 0xff7ffffe, 0x3c00010},
1982{0x3c00000, 0xff7fffff, 0xba98d27, 0xff7ffffe, 0x3c00010},
1983{0x3c00000, 0xff7fffff, 0xba98d7a, 0xff7ffffe, 0x3c00010},
1984{0x3c00000, 0xff7fffff, 0x751f853a, 0xff7ffff5, 0x3c00010},
1985{0x3c00000, 0xff7fffff, 0x7f7ffff0, 0xf5700000, 0x3c00000},
1986{0x3c00000, 0xff7fffff, 0x7f7fffff, 0x0, 0x3c00000},
1987{0x3c00000, 0xff7fffff, 0x7f800000, 0x7f800000, 0x3c00000},
1988{0x3c00000, 0xff7fffff, 0x7f800001, 0x7fc00000, 0x3c00001},
1989{0x3c00000, 0xff7fffff, 0x7f984a37, 0x7fc00000, 0x3c00001},
1990{0x3c00000, 0xff7fffff, 0x7fbfffff, 0x7fc00000, 0x3c00001},
1991{0x3c00000, 0xff7fffff, 0x7fc00000, 0x7fc00000, 0x3c00000},
1992{0x3c00000, 0xff7fffff, 0x7fd9ba98, 0x7fc00000, 0x3c00000},
1993{0x3c00000, 0xff7fffff, 0x7fffffff, 0x7fc00000, 0x3c00000},
1994{0x3c00000, 0xff7fffff, 0x80000000, 0xff7fffff, 0x3c00000},
1995{0x3c00000, 0xff7fffff, 0x80000001, 0xff7fffff, 0x3c00080},
1996{0x3c00000, 0xff7fffff, 0x80000076, 0xff7fffff, 0x3c00080},
1997{0x3c00000, 0xff7fffff, 0x80002b94, 0xff7fffff, 0x3c00080},
1998{0x3c00000, 0xff7fffff, 0x80636d24, 0xff7fffff, 0x3c00080},
1999{0x3c00000, 0xff7fffff, 0x807fffff, 0xff7fffff, 0x3c00080},
2000{0x3c00000, 0xff7fffff, 0x80800000, 0xff7fffff, 0x3c00010},
2001{0x3c00000, 0xff7fffff, 0x80800002, 0xff7fffff, 0x3c00010},
2002{0x3c00000, 0xff7fffff, 0x81398437, 0xff7fffff, 0x3c00010},
2003{0x3c00000, 0xff7fffff, 0x8ba98d27, 0xff7fffff, 0x3c00010},
2004{0x3c00000, 0xff7fffff, 0x8ba98d7a, 0xff7fffff, 0x3c00010},
2005{0x3c00000, 0xff7fffff, 0xf51f853a, 0xff7fffff, 0x3c00014},
2006{0x3c00000, 0xff7fffff, 0xff7ffff0, 0xff7fffff, 0x3c00014},
2007{0x3c00000, 0xff7fffff, 0xff7fffff, 0xff7fffff, 0x3c00014},
2008{0x3c00000, 0xff7fffff, 0xff800000, 0xff800000, 0x3c00000},
2009{0x3c00000, 0xff7fffff, 0xff800001, 0x7fc00000, 0x3c00001},
2010{0x3c00000, 0xff7fffff, 0xff984a37, 0x7fc00000, 0x3c00001},
2011{0x3c00000, 0xff7fffff, 0xffbfffff, 0x7fc00000, 0x3c00001},
2012{0x3c00000, 0xff7fffff, 0xffc00000, 0x7fc00000, 0x3c00000},
2013{0x3c00000, 0xff7fffff, 0xffd9ba98, 0x7fc00000, 0x3c00000},
2014{0x3c00000, 0xff7fffff, 0xffffffff, 0x7fc00000, 0x3c00000},
2015{0x3c00000, 0xff7fffff, 0x4f3495cb, 0xff7ffffe, 0x3c00010},
2016{0x3c00000, 0xff7fffff, 0xe73a5134, 0xff7fffff, 0x3c00010},
2017{0x3c00000, 0xff7fffff, 0x7c994e9e, 0xff7b358a, 0x3c00010},
2018{0x3c00000, 0xff7fffff, 0x6164bd6c, 0xff7ffffe, 0x3c00010},
2019{0x3c00000, 0xff7fffff, 0x9503366, 0xff7ffffe, 0x3c00010},
2020{0x3c00000, 0xff7fffff, 0xbf5a97c9, 0xff7fffff, 0x3c00010},
2021{0x3c00000, 0xff7fffff, 0xe6ff1a14, 0xff7fffff, 0x3c00010},
2022{0x3c00000, 0xff7fffff, 0x77f31e2f, 0xff7ffe18, 0x3c00010},
2023{0x3c00000, 0xff7fffff, 0xaab4d7d8, 0xff7fffff, 0x3c00010},
2024{0x3c00000, 0xff7fffff, 0x966320b, 0xff7ffffe, 0x3c00010},
2025{0x3c00000, 0xff7fffff, 0xb26bddee, 0xff7fffff, 0x3c00010},
2026{0x3c00000, 0xff7fffff, 0xb5c8e5d3, 0xff7fffff, 0x3c00010},
2027{0x3c00000, 0xff7fffff, 0x317285d3, 0xff7ffffe, 0x3c00010},
2028{0x3c00000, 0xff7fffff, 0x3c9623b1, 0xff7ffffe, 0x3c00010},
2029{0x3c00000, 0xff7fffff, 0x51fd2c7c, 0xff7ffffe, 0x3c00010},
2030{0x3c00000, 0xff7fffff, 0x7b906a6c, 0xff7edf2a, 0x3c00010},
2031{0x3c00000, 0xff800000, 0x0, 0xff800000, 0x3c00000},
2032{0x3c00000, 0xff800000, 0x1, 0xff800000, 0x3c00080},
2033{0x3c00000, 0xff800000, 0x76, 0xff800000, 0x3c00080},
2034{0x3c00000, 0xff800000, 0x2b94, 0xff800000, 0x3c00080},
2035{0x3c00000, 0xff800000, 0x636d24, 0xff800000, 0x3c00080},
2036{0x3c00000, 0xff800000, 0x7fffff, 0xff800000, 0x3c00080},
2037{0x3c00000, 0xff800000, 0x800000, 0xff800000, 0x3c00000},
2038{0x3c00000, 0xff800000, 0x800002, 0xff800000, 0x3c00000},
2039{0x3c00000, 0xff800000, 0x1398437, 0xff800000, 0x3c00000},
2040{0x3c00000, 0xff800000, 0xba98d27, 0xff800000, 0x3c00000},
2041{0x3c00000, 0xff800000, 0xba98d7a, 0xff800000, 0x3c00000},
2042{0x3c00000, 0xff800000, 0x751f853a, 0xff800000, 0x3c00000},
2043{0x3c00000, 0xff800000, 0x7f7ffff0, 0xff800000, 0x3c00000},
2044{0x3c00000, 0xff800000, 0x7f7fffff, 0xff800000, 0x3c00000},
2045{0x3c00000, 0xff800000, 0x7f800000, 0x7fc00000, 0x3c00001},
2046{0x3c00000, 0xff800000, 0x7f800001, 0x7fc00000, 0x3c00001},
2047{0x3c00000, 0xff800000, 0x7f984a37, 0x7fc00000, 0x3c00001},
2048{0x3c00000, 0xff800000, 0x7fbfffff, 0x7fc00000, 0x3c00001},
2049{0x3c00000, 0xff800000, 0x7fc00000, 0x7fc00000, 0x3c00000},
2050{0x3c00000, 0xff800000, 0x7fd9ba98, 0x7fc00000, 0x3c00000},
2051{0x3c00000, 0xff800000, 0x7fffffff, 0x7fc00000, 0x3c00000},
2052{0x3c00000, 0xff800000, 0x80000000, 0xff800000, 0x3c00000},
2053{0x3c00000, 0xff800000, 0x80000001, 0xff800000, 0x3c00080},
2054{0x3c00000, 0xff800000, 0x80000076, 0xff800000, 0x3c00080},
2055{0x3c00000, 0xff800000, 0x80002b94, 0xff800000, 0x3c00080},
2056{0x3c00000, 0xff800000, 0x80636d24, 0xff800000, 0x3c00080},
2057{0x3c00000, 0xff800000, 0x807fffff, 0xff800000, 0x3c00080},
2058{0x3c00000, 0xff800000, 0x80800000, 0xff800000, 0x3c00000},
2059{0x3c00000, 0xff800000, 0x80800002, 0xff800000, 0x3c00000},
2060{0x3c00000, 0xff800000, 0x81398437, 0xff800000, 0x3c00000},
2061{0x3c00000, 0xff800000, 0x8ba98d27, 0xff800000, 0x3c00000},
2062{0x3c00000, 0xff800000, 0x8ba98d7a, 0xff800000, 0x3c00000},
2063{0x3c00000, 0xff800000, 0xf51f853a, 0xff800000, 0x3c00000},
2064{0x3c00000, 0xff800000, 0xff7ffff0, 0xff800000, 0x3c00000},
2065{0x3c00000, 0xff800000, 0xff7fffff, 0xff800000, 0x3c00000},
2066{0x3c00000, 0xff800000, 0xff800000, 0xff800000, 0x3c00000},
2067{0x3c00000, 0xff800000, 0xff800001, 0x7fc00000, 0x3c00001},
2068{0x3c00000, 0xff800000, 0xff984a37, 0x7fc00000, 0x3c00001},
2069{0x3c00000, 0xff800000, 0xffbfffff, 0x7fc00000, 0x3c00001},
2070{0x3c00000, 0xff800000, 0xffc00000, 0x7fc00000, 0x3c00000},
2071{0x3c00000, 0xff800000, 0xffd9ba98, 0x7fc00000, 0x3c00000},
2072{0x3c00000, 0xff800000, 0xffffffff, 0x7fc00000, 0x3c00000},
2073{0x3c00000, 0xff800000, 0x4f3495cb, 0xff800000, 0x3c00000},
2074{0x3c00000, 0xff800000, 0xe73a5134, 0xff800000, 0x3c00000},
2075{0x3c00000, 0xff800000, 0x7c994e9e, 0xff800000, 0x3c00000},
2076{0x3c00000, 0xff800000, 0x6164bd6c, 0xff800000, 0x3c00000},
2077{0x3c00000, 0xff800000, 0x9503366, 0xff800000, 0x3c00000},
2078{0x3c00000, 0xff800000, 0xbf5a97c9, 0xff800000, 0x3c00000},
2079{0x3c00000, 0xff800000, 0xe6ff1a14, 0xff800000, 0x3c00000},
2080{0x3c00000, 0xff800000, 0x77f31e2f, 0xff800000, 0x3c00000},
2081{0x3c00000, 0xff800000, 0xaab4d7d8, 0xff800000, 0x3c00000},
2082{0x3c00000, 0xff800000, 0x966320b, 0xff800000, 0x3c00000},
2083{0x3c00000, 0xff800000, 0xb26bddee, 0xff800000, 0x3c00000},
2084{0x3c00000, 0xff800000, 0xb5c8e5d3, 0xff800000, 0x3c00000},
2085{0x3c00000, 0xff800000, 0x317285d3, 0xff800000, 0x3c00000},
2086{0x3c00000, 0xff800000, 0x3c9623b1, 0xff800000, 0x3c00000},
2087{0x3c00000, 0xff800000, 0x51fd2c7c, 0xff800000, 0x3c00000},
2088{0x3c00000, 0xff800000, 0x7b906a6c, 0xff800000, 0x3c00000},
2089{0x3c00000, 0xff800001, 0x0, 0x7fc00000, 0x3c00001},
2090{0x3c00000, 0xff800001, 0x1, 0x7fc00000, 0x3c00081},
2091{0x3c00000, 0xff800001, 0x76, 0x7fc00000, 0x3c00081},
2092{0x3c00000, 0xff800001, 0x2b94, 0x7fc00000, 0x3c00081},
2093{0x3c00000, 0xff800001, 0x636d24, 0x7fc00000, 0x3c00081},
2094{0x3c00000, 0xff800001, 0x7fffff, 0x7fc00000, 0x3c00081},
2095{0x3c00000, 0xff800001, 0x800000, 0x7fc00000, 0x3c00001},
2096{0x3c00000, 0xff800001, 0x800002, 0x7fc00000, 0x3c00001},
2097{0x3c00000, 0xff800001, 0x1398437, 0x7fc00000, 0x3c00001},
2098{0x3c00000, 0xff800001, 0xba98d27, 0x7fc00000, 0x3c00001},
2099{0x3c00000, 0xff800001, 0xba98d7a, 0x7fc00000, 0x3c00001},
2100{0x3c00000, 0xff800001, 0x751f853a, 0x7fc00000, 0x3c00001},
2101{0x3c00000, 0xff800001, 0x7f7ffff0, 0x7fc00000, 0x3c00001},
2102{0x3c00000, 0xff800001, 0x7f7fffff, 0x7fc00000, 0x3c00001},
2103{0x3c00000, 0xff800001, 0x7f800000, 0x7fc00000, 0x3c00001},
2104{0x3c00000, 0xff800001, 0x7f800001, 0x7fc00000, 0x3c00001},
2105{0x3c00000, 0xff800001, 0x7f984a37, 0x7fc00000, 0x3c00001},
2106{0x3c00000, 0xff800001, 0x7fbfffff, 0x7fc00000, 0x3c00001},
2107{0x3c00000, 0xff800001, 0x7fc00000, 0x7fc00000, 0x3c00001},
2108{0x3c00000, 0xff800001, 0x7fd9ba98, 0x7fc00000, 0x3c00001},
2109{0x3c00000, 0xff800001, 0x7fffffff, 0x7fc00000, 0x3c00001},
2110{0x3c00000, 0xff800001, 0x80000000, 0x7fc00000, 0x3c00001},
2111{0x3c00000, 0xff800001, 0x80000001, 0x7fc00000, 0x3c00081},
2112{0x3c00000, 0xff800001, 0x80000076, 0x7fc00000, 0x3c00081},
2113{0x3c00000, 0xff800001, 0x80002b94, 0x7fc00000, 0x3c00081},
2114{0x3c00000, 0xff800001, 0x80636d24, 0x7fc00000, 0x3c00081},
2115{0x3c00000, 0xff800001, 0x807fffff, 0x7fc00000, 0x3c00081},
2116{0x3c00000, 0xff800001, 0x80800000, 0x7fc00000, 0x3c00001},
2117{0x3c00000, 0xff800001, 0x80800002, 0x7fc00000, 0x3c00001},
2118{0x3c00000, 0xff800001, 0x81398437, 0x7fc00000, 0x3c00001},
2119{0x3c00000, 0xff800001, 0x8ba98d27, 0x7fc00000, 0x3c00001},
2120{0x3c00000, 0xff800001, 0x8ba98d7a, 0x7fc00000, 0x3c00001},
2121{0x3c00000, 0xff800001, 0xf51f853a, 0x7fc00000, 0x3c00001},
2122{0x3c00000, 0xff800001, 0xff7ffff0, 0x7fc00000, 0x3c00001},
2123{0x3c00000, 0xff800001, 0xff7fffff, 0x7fc00000, 0x3c00001},
2124{0x3c00000, 0xff800001, 0xff800000, 0x7fc00000, 0x3c00001},
2125{0x3c00000, 0xff800001, 0xff800001, 0x7fc00000, 0x3c00001},
2126{0x3c00000, 0xff800001, 0xff984a37, 0x7fc00000, 0x3c00001},
2127{0x3c00000, 0xff800001, 0xffbfffff, 0x7fc00000, 0x3c00001},
2128{0x3c00000, 0xff800001, 0xffc00000, 0x7fc00000, 0x3c00001},
2129{0x3c00000, 0xff800001, 0xffd9ba98, 0x7fc00000, 0x3c00001},
2130{0x3c00000, 0xff800001, 0xffffffff, 0x7fc00000, 0x3c00001},
2131{0x3c00000, 0xff800001, 0x4f3495cb, 0x7fc00000, 0x3c00001},
2132{0x3c00000, 0xff800001, 0xe73a5134, 0x7fc00000, 0x3c00001},
2133{0x3c00000, 0xff800001, 0x7c994e9e, 0x7fc00000, 0x3c00001},
2134{0x3c00000, 0xff800001, 0x6164bd6c, 0x7fc00000, 0x3c00001},
2135{0x3c00000, 0xff800001, 0x9503366, 0x7fc00000, 0x3c00001},
2136{0x3c00000, 0xff800001, 0xbf5a97c9, 0x7fc00000, 0x3c00001},
2137{0x3c00000, 0xff800001, 0xe6ff1a14, 0x7fc00000, 0x3c00001},
2138{0x3c00000, 0xff800001, 0x77f31e2f, 0x7fc00000, 0x3c00001},
2139{0x3c00000, 0xff800001, 0xaab4d7d8, 0x7fc00000, 0x3c00001},
2140{0x3c00000, 0xff800001, 0x966320b, 0x7fc00000, 0x3c00001},
2141{0x3c00000, 0xff800001, 0xb26bddee, 0x7fc00000, 0x3c00001},
2142{0x3c00000, 0xff800001, 0xb5c8e5d3, 0x7fc00000, 0x3c00001},
2143{0x3c00000, 0xff800001, 0x317285d3, 0x7fc00000, 0x3c00001},
2144{0x3c00000, 0xff800001, 0x3c9623b1, 0x7fc00000, 0x3c00001},
2145{0x3c00000, 0xff800001, 0x51fd2c7c, 0x7fc00000, 0x3c00001},
2146{0x3c00000, 0xff800001, 0x7b906a6c, 0x7fc00000, 0x3c00001},
2147{0x3c00000, 0xff984a37, 0x0, 0x7fc00000, 0x3c00001},
2148{0x3c00000, 0xff984a37, 0x1, 0x7fc00000, 0x3c00081},
2149{0x3c00000, 0xff984a37, 0x76, 0x7fc00000, 0x3c00081},
2150{0x3c00000, 0xff984a37, 0x2b94, 0x7fc00000, 0x3c00081},
2151{0x3c00000, 0xff984a37, 0x636d24, 0x7fc00000, 0x3c00081},
2152{0x3c00000, 0xff984a37, 0x7fffff, 0x7fc00000, 0x3c00081},
2153{0x3c00000, 0xff984a37, 0x800000, 0x7fc00000, 0x3c00001},
2154{0x3c00000, 0xff984a37, 0x800002, 0x7fc00000, 0x3c00001},
2155{0x3c00000, 0xff984a37, 0x1398437, 0x7fc00000, 0x3c00001},
2156{0x3c00000, 0xff984a37, 0xba98d27, 0x7fc00000, 0x3c00001},
2157{0x3c00000, 0xff984a37, 0xba98d7a, 0x7fc00000, 0x3c00001},
2158{0x3c00000, 0xff984a37, 0x751f853a, 0x7fc00000, 0x3c00001},
2159{0x3c00000, 0xff984a37, 0x7f7ffff0, 0x7fc00000, 0x3c00001},
2160{0x3c00000, 0xff984a37, 0x7f7fffff, 0x7fc00000, 0x3c00001},
2161{0x3c00000, 0xff984a37, 0x7f800000, 0x7fc00000, 0x3c00001},
2162{0x3c00000, 0xff984a37, 0x7f800001, 0x7fc00000, 0x3c00001},
2163{0x3c00000, 0xff984a37, 0x7f984a37, 0x7fc00000, 0x3c00001},
2164{0x3c00000, 0xff984a37, 0x7fbfffff, 0x7fc00000, 0x3c00001},
2165{0x3c00000, 0xff984a37, 0x7fc00000, 0x7fc00000, 0x3c00001},
2166{0x3c00000, 0xff984a37, 0x7fd9ba98, 0x7fc00000, 0x3c00001},
2167{0x3c00000, 0xff984a37, 0x7fffffff, 0x7fc00000, 0x3c00001},
2168{0x3c00000, 0xff984a37, 0x80000000, 0x7fc00000, 0x3c00001},
2169{0x3c00000, 0xff984a37, 0x80000001, 0x7fc00000, 0x3c00081},
2170{0x3c00000, 0xff984a37, 0x80000076, 0x7fc00000, 0x3c00081},
2171{0x3c00000, 0xff984a37, 0x80002b94, 0x7fc00000, 0x3c00081},
2172{0x3c00000, 0xff984a37, 0x80636d24, 0x7fc00000, 0x3c00081},
2173{0x3c00000, 0xff984a37, 0x807fffff, 0x7fc00000, 0x3c00081},
2174{0x3c00000, 0xff984a37, 0x80800000, 0x7fc00000, 0x3c00001},
2175{0x3c00000, 0xff984a37, 0x80800002, 0x7fc00000, 0x3c00001},
2176{0x3c00000, 0xff984a37, 0x81398437, 0x7fc00000, 0x3c00001},
2177{0x3c00000, 0xff984a37, 0x8ba98d27, 0x7fc00000, 0x3c00001},
2178{0x3c00000, 0xff984a37, 0x8ba98d7a, 0x7fc00000, 0x3c00001},
2179{0x3c00000, 0xff984a37, 0xf51f853a, 0x7fc00000, 0x3c00001},
2180{0x3c00000, 0xff984a37, 0xff7ffff0, 0x7fc00000, 0x3c00001},
2181{0x3c00000, 0xff984a37, 0xff7fffff, 0x7fc00000, 0x3c00001},
2182{0x3c00000, 0xff984a37, 0xff800000, 0x7fc00000, 0x3c00001},
2183{0x3c00000, 0xff984a37, 0xff800001, 0x7fc00000, 0x3c00001},
2184{0x3c00000, 0xff984a37, 0xff984a37, 0x7fc00000, 0x3c00001},
2185{0x3c00000, 0xff984a37, 0xffbfffff, 0x7fc00000, 0x3c00001},
2186{0x3c00000, 0xff984a37, 0xffc00000, 0x7fc00000, 0x3c00001},
2187{0x3c00000, 0xff984a37, 0xffd9ba98, 0x7fc00000, 0x3c00001},
2188{0x3c00000, 0xff984a37, 0xffffffff, 0x7fc00000, 0x3c00001},
2189{0x3c00000, 0xff984a37, 0x4f3495cb, 0x7fc00000, 0x3c00001},
2190{0x3c00000, 0xff984a37, 0xe73a5134, 0x7fc00000, 0x3c00001},
2191{0x3c00000, 0xff984a37, 0x7c994e9e, 0x7fc00000, 0x3c00001},
2192{0x3c00000, 0xff984a37, 0x6164bd6c, 0x7fc00000, 0x3c00001},
2193{0x3c00000, 0xff984a37, 0x9503366, 0x7fc00000, 0x3c00001},
2194{0x3c00000, 0xff984a37, 0xbf5a97c9, 0x7fc00000, 0x3c00001},
2195{0x3c00000, 0xff984a37, 0xe6ff1a14, 0x7fc00000, 0x3c00001},
2196{0x3c00000, 0xff984a37, 0x77f31e2f, 0x7fc00000, 0x3c00001},
2197{0x3c00000, 0xff984a37, 0xaab4d7d8, 0x7fc00000, 0x3c00001},
2198{0x3c00000, 0xff984a37, 0x966320b, 0x7fc00000, 0x3c00001},
2199{0x3c00000, 0xff984a37, 0xb26bddee, 0x7fc00000, 0x3c00001},
2200{0x3c00000, 0xff984a37, 0xb5c8e5d3, 0x7fc00000, 0x3c00001},
2201{0x3c00000, 0xff984a37, 0x317285d3, 0x7fc00000, 0x3c00001},
2202{0x3c00000, 0xff984a37, 0x3c9623b1, 0x7fc00000, 0x3c00001},
2203{0x3c00000, 0xff984a37, 0x51fd2c7c, 0x7fc00000, 0x3c00001},
2204{0x3c00000, 0xff984a37, 0x7b906a6c, 0x7fc00000, 0x3c00001},
2205{0x3c00000, 0xffbfffff, 0x0, 0x7fc00000, 0x3c00001},
2206{0x3c00000, 0xffbfffff, 0x1, 0x7fc00000, 0x3c00081},
2207{0x3c00000, 0xffbfffff, 0x76, 0x7fc00000, 0x3c00081},
2208{0x3c00000, 0xffbfffff, 0x2b94, 0x7fc00000, 0x3c00081},
2209{0x3c00000, 0xffbfffff, 0x636d24, 0x7fc00000, 0x3c00081},
2210{0x3c00000, 0xffbfffff, 0x7fffff, 0x7fc00000, 0x3c00081},
2211{0x3c00000, 0xffbfffff, 0x800000, 0x7fc00000, 0x3c00001},
2212{0x3c00000, 0xffbfffff, 0x800002, 0x7fc00000, 0x3c00001},
2213{0x3c00000, 0xffbfffff, 0x1398437, 0x7fc00000, 0x3c00001},
2214{0x3c00000, 0xffbfffff, 0xba98d27, 0x7fc00000, 0x3c00001},
2215{0x3c00000, 0xffbfffff, 0xba98d7a, 0x7fc00000, 0x3c00001},
2216{0x3c00000, 0xffbfffff, 0x751f853a, 0x7fc00000, 0x3c00001},
2217{0x3c00000, 0xffbfffff, 0x7f7ffff0, 0x7fc00000, 0x3c00001},
2218{0x3c00000, 0xffbfffff, 0x7f7fffff, 0x7fc00000, 0x3c00001},
2219{0x3c00000, 0xffbfffff, 0x7f800000, 0x7fc00000, 0x3c00001},
2220{0x3c00000, 0xffbfffff, 0x7f800001, 0x7fc00000, 0x3c00001},
2221{0x3c00000, 0xffbfffff, 0x7f984a37, 0x7fc00000, 0x3c00001},
2222{0x3c00000, 0xffbfffff, 0x7fbfffff, 0x7fc00000, 0x3c00001},
2223{0x3c00000, 0xffbfffff, 0x7fc00000, 0x7fc00000, 0x3c00001},
2224{0x3c00000, 0xffbfffff, 0x7fd9ba98, 0x7fc00000, 0x3c00001},
2225{0x3c00000, 0xffbfffff, 0x7fffffff, 0x7fc00000, 0x3c00001},
2226{0x3c00000, 0xffbfffff, 0x80000000, 0x7fc00000, 0x3c00001},
2227{0x3c00000, 0xffbfffff, 0x80000001, 0x7fc00000, 0x3c00081},
2228{0x3c00000, 0xffbfffff, 0x80000076, 0x7fc00000, 0x3c00081},
2229{0x3c00000, 0xffbfffff, 0x80002b94, 0x7fc00000, 0x3c00081},
2230{0x3c00000, 0xffbfffff, 0x80636d24, 0x7fc00000, 0x3c00081},
2231{0x3c00000, 0xffbfffff, 0x807fffff, 0x7fc00000, 0x3c00081},
2232{0x3c00000, 0xffbfffff, 0x80800000, 0x7fc00000, 0x3c00001},
2233{0x3c00000, 0xffbfffff, 0x80800002, 0x7fc00000, 0x3c00001},
2234{0x3c00000, 0xffbfffff, 0x81398437, 0x7fc00000, 0x3c00001},
2235{0x3c00000, 0xffbfffff, 0x8ba98d27, 0x7fc00000, 0x3c00001},
2236{0x3c00000, 0xffbfffff, 0x8ba98d7a, 0x7fc00000, 0x3c00001},
2237{0x3c00000, 0xffbfffff, 0xf51f853a, 0x7fc00000, 0x3c00001},
2238{0x3c00000, 0xffbfffff, 0xff7ffff0, 0x7fc00000, 0x3c00001},
2239{0x3c00000, 0xffbfffff, 0xff7fffff, 0x7fc00000, 0x3c00001},
2240{0x3c00000, 0xffbfffff, 0xff800000, 0x7fc00000, 0x3c00001},
2241{0x3c00000, 0xffbfffff, 0xff800001, 0x7fc00000, 0x3c00001},
2242{0x3c00000, 0xffbfffff, 0xff984a37, 0x7fc00000, 0x3c00001},
2243{0x3c00000, 0xffbfffff, 0xffbfffff, 0x7fc00000, 0x3c00001},
2244{0x3c00000, 0xffbfffff, 0xffc00000, 0x7fc00000, 0x3c00001},
2245{0x3c00000, 0xffbfffff, 0xffd9ba98, 0x7fc00000, 0x3c00001},
2246{0x3c00000, 0xffbfffff, 0xffffffff, 0x7fc00000, 0x3c00001},
2247{0x3c00000, 0xffbfffff, 0x4f3495cb, 0x7fc00000, 0x3c00001},
2248{0x3c00000, 0xffbfffff, 0xe73a5134, 0x7fc00000, 0x3c00001},
2249{0x3c00000, 0xffbfffff, 0x7c994e9e, 0x7fc00000, 0x3c00001},
2250{0x3c00000, 0xffbfffff, 0x6164bd6c, 0x7fc00000, 0x3c00001},
2251{0x3c00000, 0xffbfffff, 0x9503366, 0x7fc00000, 0x3c00001},
2252{0x3c00000, 0xffbfffff, 0xbf5a97c9, 0x7fc00000, 0x3c00001},
2253{0x3c00000, 0xffbfffff, 0xe6ff1a14, 0x7fc00000, 0x3c00001},
2254{0x3c00000, 0xffbfffff, 0x77f31e2f, 0x7fc00000, 0x3c00001},
2255{0x3c00000, 0xffbfffff, 0xaab4d7d8, 0x7fc00000, 0x3c00001},
2256{0x3c00000, 0xffbfffff, 0x966320b, 0x7fc00000, 0x3c00001},
2257{0x3c00000, 0xffbfffff, 0xb26bddee, 0x7fc00000, 0x3c00001},
2258{0x3c00000, 0xffbfffff, 0xb5c8e5d3, 0x7fc00000, 0x3c00001},
2259{0x3c00000, 0xffbfffff, 0x317285d3, 0x7fc00000, 0x3c00001},
2260{0x3c00000, 0xffbfffff, 0x3c9623b1, 0x7fc00000, 0x3c00001},
2261{0x3c00000, 0xffbfffff, 0x51fd2c7c, 0x7fc00000, 0x3c00001},
2262{0x3c00000, 0xffbfffff, 0x7b906a6c, 0x7fc00000, 0x3c00001},
2263{0x3c00000, 0xffc00000, 0x0, 0x7fc00000, 0x3c00000},
2264{0x3c00000, 0xffc00000, 0x1, 0x7fc00000, 0x3c00080},
2265{0x3c00000, 0xffc00000, 0x76, 0x7fc00000, 0x3c00080},
2266{0x3c00000, 0xffc00000, 0x2b94, 0x7fc00000, 0x3c00080},
2267{0x3c00000, 0xffc00000, 0x636d24, 0x7fc00000, 0x3c00080},
2268{0x3c00000, 0xffc00000, 0x7fffff, 0x7fc00000, 0x3c00080},
2269{0x3c00000, 0xffc00000, 0x800000, 0x7fc00000, 0x3c00000},
2270{0x3c00000, 0xffc00000, 0x800002, 0x7fc00000, 0x3c00000},
2271{0x3c00000, 0xffc00000, 0x1398437, 0x7fc00000, 0x3c00000},
2272{0x3c00000, 0xffc00000, 0xba98d27, 0x7fc00000, 0x3c00000},
2273{0x3c00000, 0xffc00000, 0xba98d7a, 0x7fc00000, 0x3c00000},
2274{0x3c00000, 0xffc00000, 0x751f853a, 0x7fc00000, 0x3c00000},
2275{0x3c00000, 0xffc00000, 0x7f7ffff0, 0x7fc00000, 0x3c00000},
2276{0x3c00000, 0xffc00000, 0x7f7fffff, 0x7fc00000, 0x3c00000},
2277{0x3c00000, 0xffc00000, 0x7f800000, 0x7fc00000, 0x3c00000},
2278{0x3c00000, 0xffc00000, 0x7f800001, 0x7fc00000, 0x3c00001},
2279{0x3c00000, 0xffc00000, 0x7f984a37, 0x7fc00000, 0x3c00001},
2280{0x3c00000, 0xffc00000, 0x7fbfffff, 0x7fc00000, 0x3c00001},
2281{0x3c00000, 0xffc00000, 0x7fc00000, 0x7fc00000, 0x3c00000},
2282{0x3c00000, 0xffc00000, 0x7fd9ba98, 0x7fc00000, 0x3c00000},
2283{0x3c00000, 0xffc00000, 0x7fffffff, 0x7fc00000, 0x3c00000},
2284{0x3c00000, 0xffc00000, 0x80000000, 0x7fc00000, 0x3c00000},
2285{0x3c00000, 0xffc00000, 0x80000001, 0x7fc00000, 0x3c00080},
2286{0x3c00000, 0xffc00000, 0x80000076, 0x7fc00000, 0x3c00080},
2287{0x3c00000, 0xffc00000, 0x80002b94, 0x7fc00000, 0x3c00080},
2288{0x3c00000, 0xffc00000, 0x80636d24, 0x7fc00000, 0x3c00080},
2289{0x3c00000, 0xffc00000, 0x807fffff, 0x7fc00000, 0x3c00080},
2290{0x3c00000, 0xffc00000, 0x80800000, 0x7fc00000, 0x3c00000},
2291{0x3c00000, 0xffc00000, 0x80800002, 0x7fc00000, 0x3c00000},
2292{0x3c00000, 0xffc00000, 0x81398437, 0x7fc00000, 0x3c00000},
2293{0x3c00000, 0xffc00000, 0x8ba98d27, 0x7fc00000, 0x3c00000},
2294{0x3c00000, 0xffc00000, 0x8ba98d7a, 0x7fc00000, 0x3c00000},
2295{0x3c00000, 0xffc00000, 0xf51f853a, 0x7fc00000, 0x3c00000},
2296{0x3c00000, 0xffc00000, 0xff7ffff0, 0x7fc00000, 0x3c00000},
2297{0x3c00000, 0xffc00000, 0xff7fffff, 0x7fc00000, 0x3c00000},
2298{0x3c00000, 0xffc00000, 0xff800000, 0x7fc00000, 0x3c00000},
2299{0x3c00000, 0xffc00000, 0xff800001, 0x7fc00000, 0x3c00001},
2300{0x3c00000, 0xffc00000, 0xff984a37, 0x7fc00000, 0x3c00001},
2301{0x3c00000, 0xffc00000, 0xffbfffff, 0x7fc00000, 0x3c00001},
2302{0x3c00000, 0xffc00000, 0xffc00000, 0x7fc00000, 0x3c00000},
2303{0x3c00000, 0xffc00000, 0xffd9ba98, 0x7fc00000, 0x3c00000},
2304{0x3c00000, 0xffc00000, 0xffffffff, 0x7fc00000, 0x3c00000},
2305{0x3c00000, 0xffc00000, 0x4f3495cb, 0x7fc00000, 0x3c00000},
2306{0x3c00000, 0xffc00000, 0xe73a5134, 0x7fc00000, 0x3c00000},
2307{0x3c00000, 0xffc00000, 0x7c994e9e, 0x7fc00000, 0x3c00000},
2308{0x3c00000, 0xffc00000, 0x6164bd6c, 0x7fc00000, 0x3c00000},
2309{0x3c00000, 0xffc00000, 0x9503366, 0x7fc00000, 0x3c00000},
2310{0x3c00000, 0xffc00000, 0xbf5a97c9, 0x7fc00000, 0x3c00000},
2311{0x3c00000, 0xffc00000, 0xe6ff1a14, 0x7fc00000, 0x3c00000},
2312{0x3c00000, 0xffc00000, 0x77f31e2f, 0x7fc00000, 0x3c00000},
2313{0x3c00000, 0xffc00000, 0xaab4d7d8, 0x7fc00000, 0x3c00000},
2314{0x3c00000, 0xffc00000, 0x966320b, 0x7fc00000, 0x3c00000},
2315{0x3c00000, 0xffc00000, 0xb26bddee, 0x7fc00000, 0x3c00000},
2316{0x3c00000, 0xffc00000, 0xb5c8e5d3, 0x7fc00000, 0x3c00000},
2317{0x3c00000, 0xffc00000, 0x317285d3, 0x7fc00000, 0x3c00000},
2318{0x3c00000, 0xffc00000, 0x3c9623b1, 0x7fc00000, 0x3c00000},
2319{0x3c00000, 0xffc00000, 0x51fd2c7c, 0x7fc00000, 0x3c00000},
2320{0x3c00000, 0xffc00000, 0x7b906a6c, 0x7fc00000, 0x3c00000},
2321{0x3c00000, 0xffd9ba98, 0x0, 0x7fc00000, 0x3c00000},
2322{0x3c00000, 0xffd9ba98, 0x1, 0x7fc00000, 0x3c00080},
2323{0x3c00000, 0xffd9ba98, 0x76, 0x7fc00000, 0x3c00080},
2324{0x3c00000, 0xffd9ba98, 0x2b94, 0x7fc00000, 0x3c00080},
2325{0x3c00000, 0xffd9ba98, 0x636d24, 0x7fc00000, 0x3c00080},
2326{0x3c00000, 0xffd9ba98, 0x7fffff, 0x7fc00000, 0x3c00080},
2327{0x3c00000, 0xffd9ba98, 0x800000, 0x7fc00000, 0x3c00000},
2328{0x3c00000, 0xffd9ba98, 0x800002, 0x7fc00000, 0x3c00000},
2329{0x3c00000, 0xffd9ba98, 0x1398437, 0x7fc00000, 0x3c00000},
2330{0x3c00000, 0xffd9ba98, 0xba98d27, 0x7fc00000, 0x3c00000},
2331{0x3c00000, 0xffd9ba98, 0xba98d7a, 0x7fc00000, 0x3c00000},
2332{0x3c00000, 0xffd9ba98, 0x751f853a, 0x7fc00000, 0x3c00000},
2333{0x3c00000, 0xffd9ba98, 0x7f7ffff0, 0x7fc00000, 0x3c00000},
2334{0x3c00000, 0xffd9ba98, 0x7f7fffff, 0x7fc00000, 0x3c00000},
2335{0x3c00000, 0xffd9ba98, 0x7f800000, 0x7fc00000, 0x3c00000},
2336{0x3c00000, 0xffd9ba98, 0x7f800001, 0x7fc00000, 0x3c00001},
2337{0x3c00000, 0xffd9ba98, 0x7f984a37, 0x7fc00000, 0x3c00001},
2338{0x3c00000, 0xffd9ba98, 0x7fbfffff, 0x7fc00000, 0x3c00001},
2339{0x3c00000, 0xffd9ba98, 0x7fc00000, 0x7fc00000, 0x3c00000},
2340{0x3c00000, 0xffd9ba98, 0x7fd9ba98, 0x7fc00000, 0x3c00000},
2341{0x3c00000, 0xffd9ba98, 0x7fffffff, 0x7fc00000, 0x3c00000},
2342{0x3c00000, 0xffd9ba98, 0x80000000, 0x7fc00000, 0x3c00000},
2343{0x3c00000, 0xffd9ba98, 0x80000001, 0x7fc00000, 0x3c00080},
2344{0x3c00000, 0xffd9ba98, 0x80000076, 0x7fc00000, 0x3c00080},
2345{0x3c00000, 0xffd9ba98, 0x80002b94, 0x7fc00000, 0x3c00080},
2346{0x3c00000, 0xffd9ba98, 0x80636d24, 0x7fc00000, 0x3c00080},
2347{0x3c00000, 0xffd9ba98, 0x807fffff, 0x7fc00000, 0x3c00080},
2348{0x3c00000, 0xffd9ba98, 0x80800000, 0x7fc00000, 0x3c00000},
2349{0x3c00000, 0xffd9ba98, 0x80800002, 0x7fc00000, 0x3c00000},
2350{0x3c00000, 0xffd9ba98, 0x81398437, 0x7fc00000, 0x3c00000},
2351{0x3c00000, 0xffd9ba98, 0x8ba98d27, 0x7fc00000, 0x3c00000},
2352{0x3c00000, 0xffd9ba98, 0x8ba98d7a, 0x7fc00000, 0x3c00000},
2353{0x3c00000, 0xffd9ba98, 0xf51f853a, 0x7fc00000, 0x3c00000},
2354{0x3c00000, 0xffd9ba98, 0xff7ffff0, 0x7fc00000, 0x3c00000},
2355{0x3c00000, 0xffd9ba98, 0xff7fffff, 0x7fc00000, 0x3c00000},
2356{0x3c00000, 0xffd9ba98, 0xff800000, 0x7fc00000, 0x3c00000},
2357{0x3c00000, 0xffd9ba98, 0xff800001, 0x7fc00000, 0x3c00001},
2358{0x3c00000, 0xffd9ba98, 0xff984a37, 0x7fc00000, 0x3c00001},
2359{0x3c00000, 0xffd9ba98, 0xffbfffff, 0x7fc00000, 0x3c00001},
2360{0x3c00000, 0xffd9ba98, 0xffc00000, 0x7fc00000, 0x3c00000},
2361{0x3c00000, 0xffd9ba98, 0xffd9ba98, 0x7fc00000, 0x3c00000},
2362{0x3c00000, 0xffd9ba98, 0xffffffff, 0x7fc00000, 0x3c00000},
2363{0x3c00000, 0xffd9ba98, 0x4f3495cb, 0x7fc00000, 0x3c00000},
2364{0x3c00000, 0xffd9ba98, 0xe73a5134, 0x7fc00000, 0x3c00000},
2365{0x3c00000, 0xffd9ba98, 0x7c994e9e, 0x7fc00000, 0x3c00000},
2366{0x3c00000, 0xffd9ba98, 0x6164bd6c, 0x7fc00000, 0x3c00000},
2367{0x3c00000, 0xffd9ba98, 0x9503366, 0x7fc00000, 0x3c00000},
2368{0x3c00000, 0xffd9ba98, 0xbf5a97c9, 0x7fc00000, 0x3c00000},
2369{0x3c00000, 0xffd9ba98, 0xe6ff1a14, 0x7fc00000, 0x3c00000},
2370{0x3c00000, 0xffd9ba98, 0x77f31e2f, 0x7fc00000, 0x3c00000},
2371{0x3c00000, 0xffd9ba98, 0xaab4d7d8, 0x7fc00000, 0x3c00000},
2372{0x3c00000, 0xffd9ba98, 0x966320b, 0x7fc00000, 0x3c00000},
2373{0x3c00000, 0xffd9ba98, 0xb26bddee, 0x7fc00000, 0x3c00000},
2374{0x3c00000, 0xffd9ba98, 0xb5c8e5d3, 0x7fc00000, 0x3c00000},
2375{0x3c00000, 0xffd9ba98, 0x317285d3, 0x7fc00000, 0x3c00000},
2376{0x3c00000, 0xffd9ba98, 0x3c9623b1, 0x7fc00000, 0x3c00000},
2377{0x3c00000, 0xffd9ba98, 0x51fd2c7c, 0x7fc00000, 0x3c00000},
2378{0x3c00000, 0xffd9ba98, 0x7b906a6c, 0x7fc00000, 0x3c00000},
2379{0x3c00000, 0xffffffff, 0x0, 0x7fc00000, 0x3c00000},
2380{0x3c00000, 0xffffffff, 0x1, 0x7fc00000, 0x3c00080},
2381{0x3c00000, 0xffffffff, 0x76, 0x7fc00000, 0x3c00080},
2382{0x3c00000, 0xffffffff, 0x2b94, 0x7fc00000, 0x3c00080},
2383{0x3c00000, 0xffffffff, 0x636d24, 0x7fc00000, 0x3c00080},
2384{0x3c00000, 0xffffffff, 0x7fffff, 0x7fc00000, 0x3c00080},
2385{0x3c00000, 0xffffffff, 0x800000, 0x7fc00000, 0x3c00000},
2386{0x3c00000, 0xffffffff, 0x800002, 0x7fc00000, 0x3c00000},
2387{0x3c00000, 0xffffffff, 0x1398437, 0x7fc00000, 0x3c00000},
2388{0x3c00000, 0xffffffff, 0xba98d27, 0x7fc00000, 0x3c00000},
2389{0x3c00000, 0xffffffff, 0xba98d7a, 0x7fc00000, 0x3c00000},
2390{0x3c00000, 0xffffffff, 0x751f853a, 0x7fc00000, 0x3c00000},
2391{0x3c00000, 0xffffffff, 0x7f7ffff0, 0x7fc00000, 0x3c00000},
2392{0x3c00000, 0xffffffff, 0x7f7fffff, 0x7fc00000, 0x3c00000},
2393{0x3c00000, 0xffffffff, 0x7f800000, 0x7fc00000, 0x3c00000},
2394{0x3c00000, 0xffffffff, 0x7f800001, 0x7fc00000, 0x3c00001},
2395{0x3c00000, 0xffffffff, 0x7f984a37, 0x7fc00000, 0x3c00001},
2396{0x3c00000, 0xffffffff, 0x7fbfffff, 0x7fc00000, 0x3c00001},
2397{0x3c00000, 0xffffffff, 0x7fc00000, 0x7fc00000, 0x3c00000},
2398{0x3c00000, 0xffffffff, 0x7fd9ba98, 0x7fc00000, 0x3c00000},
2399{0x3c00000, 0xffffffff, 0x7fffffff, 0x7fc00000, 0x3c00000},
2400{0x3c00000, 0xffffffff, 0x80000000, 0x7fc00000, 0x3c00000},
2401{0x3c00000, 0xffffffff, 0x80000001, 0x7fc00000, 0x3c00080},
2402{0x3c00000, 0xffffffff, 0x80000076, 0x7fc00000, 0x3c00080},
2403{0x3c00000, 0xffffffff, 0x80002b94, 0x7fc00000, 0x3c00080},
2404{0x3c00000, 0xffffffff, 0x80636d24, 0x7fc00000, 0x3c00080},
2405{0x3c00000, 0xffffffff, 0x807fffff, 0x7fc00000, 0x3c00080},
2406{0x3c00000, 0xffffffff, 0x80800000, 0x7fc00000, 0x3c00000},
2407{0x3c00000, 0xffffffff, 0x80800002, 0x7fc00000, 0x3c00000},
2408{0x3c00000, 0xffffffff, 0x81398437, 0x7fc00000, 0x3c00000},
2409{0x3c00000, 0xffffffff, 0x8ba98d27, 0x7fc00000, 0x3c00000},
2410{0x3c00000, 0xffffffff, 0x8ba98d7a, 0x7fc00000, 0x3c00000},
2411{0x3c00000, 0xffffffff, 0xf51f853a, 0x7fc00000, 0x3c00000},
2412{0x3c00000, 0xffffffff, 0xff7ffff0, 0x7fc00000, 0x3c00000},
2413{0x3c00000, 0xffffffff, 0xff7fffff, 0x7fc00000, 0x3c00000},
2414{0x3c00000, 0xffffffff, 0xff800000, 0x7fc00000, 0x3c00000},
2415{0x3c00000, 0xffffffff, 0xff800001, 0x7fc00000, 0x3c00001},
2416{0x3c00000, 0xffffffff, 0xff984a37, 0x7fc00000, 0x3c00001},
2417{0x3c00000, 0xffffffff, 0xffbfffff, 0x7fc00000, 0x3c00001},
2418{0x3c00000, 0xffffffff, 0xffc00000, 0x7fc00000, 0x3c00000},
2419{0x3c00000, 0xffffffff, 0xffd9ba98, 0x7fc00000, 0x3c00000},
2420{0x3c00000, 0xffffffff, 0xffffffff, 0x7fc00000, 0x3c00000},
2421{0x3c00000, 0xffffffff, 0x4f3495cb, 0x7fc00000, 0x3c00000},
2422{0x3c00000, 0xffffffff, 0xe73a5134, 0x7fc00000, 0x3c00000},
2423{0x3c00000, 0xffffffff, 0x7c994e9e, 0x7fc00000, 0x3c00000},
2424{0x3c00000, 0xffffffff, 0x6164bd6c, 0x7fc00000, 0x3c00000},
2425{0x3c00000, 0xffffffff, 0x9503366, 0x7fc00000, 0x3c00000},
2426{0x3c00000, 0xffffffff, 0xbf5a97c9, 0x7fc00000, 0x3c00000},
2427{0x3c00000, 0xffffffff, 0xe6ff1a14, 0x7fc00000, 0x3c00000},
2428{0x3c00000, 0xffffffff, 0x77f31e2f, 0x7fc00000, 0x3c00000},
2429{0x3c00000, 0xffffffff, 0xaab4d7d8, 0x7fc00000, 0x3c00000},
2430{0x3c00000, 0xffffffff, 0x966320b, 0x7fc00000, 0x3c00000},
2431{0x3c00000, 0xffffffff, 0xb26bddee, 0x7fc00000, 0x3c00000},
2432{0x3c00000, 0xffffffff, 0xb5c8e5d3, 0x7fc00000, 0x3c00000},
2433{0x3c00000, 0xffffffff, 0x317285d3, 0x7fc00000, 0x3c00000},
2434{0x3c00000, 0xffffffff, 0x3c9623b1, 0x7fc00000, 0x3c00000},
2435{0x3c00000, 0xffffffff, 0x51fd2c7c, 0x7fc00000, 0x3c00000},
2436{0x3c00000, 0xffffffff, 0x7b906a6c, 0x7fc00000, 0x3c00000},
2437{0x3c00000, 0x4f3495cb, 0x0, 0x4f3495cb, 0x3c00000},
2438{0x3c00000, 0x4f3495cb, 0x1, 0x4f3495cb, 0x3c00080},
2439{0x3c00000, 0x4f3495cb, 0x76, 0x4f3495cb, 0x3c00080},
2440{0x3c00000, 0x4f3495cb, 0x2b94, 0x4f3495cb, 0x3c00080},
2441{0x3c00000, 0x4f3495cb, 0x636d24, 0x4f3495cb, 0x3c00080},
2442{0x3c00000, 0x4f3495cb, 0x7fffff, 0x4f3495cb, 0x3c00080},
2443{0x3c00000, 0x4f3495cb, 0x800000, 0x4f3495cb, 0x3c00010},
2444{0x3c00000, 0x4f3495cb, 0x800002, 0x4f3495cb, 0x3c00010},
2445{0x3c00000, 0x4f3495cb, 0x1398437, 0x4f3495cb, 0x3c00010},
2446{0x3c00000, 0x4f3495cb, 0xba98d27, 0x4f3495cb, 0x3c00010},
2447{0x3c00000, 0x4f3495cb, 0xba98d7a, 0x4f3495cb, 0x3c00010},
2448{0x3c00000, 0x4f3495cb, 0x751f853a, 0x751f853a, 0x3c00010},
2449{0x3c00000, 0x4f3495cb, 0x7f7ffff0, 0x7f7ffff0, 0x3c00010},
2450{0x3c00000, 0x4f3495cb, 0x7f7fffff, 0x7f7fffff, 0x3c00010},
2451{0x3c00000, 0x4f3495cb, 0x7f800000, 0x7f800000, 0x3c00000},
2452{0x3c00000, 0x4f3495cb, 0x7f800001, 0x7fc00000, 0x3c00001},
2453{0x3c00000, 0x4f3495cb, 0x7f984a37, 0x7fc00000, 0x3c00001},
2454{0x3c00000, 0x4f3495cb, 0x7fbfffff, 0x7fc00000, 0x3c00001},
2455{0x3c00000, 0x4f3495cb, 0x7fc00000, 0x7fc00000, 0x3c00000},
2456{0x3c00000, 0x4f3495cb, 0x7fd9ba98, 0x7fc00000, 0x3c00000},
2457{0x3c00000, 0x4f3495cb, 0x7fffffff, 0x7fc00000, 0x3c00000},
2458{0x3c00000, 0x4f3495cb, 0x80000000, 0x4f3495cb, 0x3c00000},
2459{0x3c00000, 0x4f3495cb, 0x80000001, 0x4f3495cb, 0x3c00080},
2460{0x3c00000, 0x4f3495cb, 0x80000076, 0x4f3495cb, 0x3c00080},
2461{0x3c00000, 0x4f3495cb, 0x80002b94, 0x4f3495cb, 0x3c00080},
2462{0x3c00000, 0x4f3495cb, 0x80636d24, 0x4f3495cb, 0x3c00080},
2463{0x3c00000, 0x4f3495cb, 0x807fffff, 0x4f3495cb, 0x3c00080},
2464{0x3c00000, 0x4f3495cb, 0x80800000, 0x4f3495ca, 0x3c00010},
2465{0x3c00000, 0x4f3495cb, 0x80800002, 0x4f3495ca, 0x3c00010},
2466{0x3c00000, 0x4f3495cb, 0x81398437, 0x4f3495ca, 0x3c00010},
2467{0x3c00000, 0x4f3495cb, 0x8ba98d27, 0x4f3495ca, 0x3c00010},
2468{0x3c00000, 0x4f3495cb, 0x8ba98d7a, 0x4f3495ca, 0x3c00010},
2469{0x3c00000, 0x4f3495cb, 0xf51f853a, 0xf51f8539, 0x3c00010},
2470{0x3c00000, 0x4f3495cb, 0xff7ffff0, 0xff7fffef, 0x3c00010},
2471{0x3c00000, 0x4f3495cb, 0xff7fffff, 0xff7ffffe, 0x3c00010},
2472{0x3c00000, 0x4f3495cb, 0xff800000, 0xff800000, 0x3c00000},
2473{0x3c00000, 0x4f3495cb, 0xff800001, 0x7fc00000, 0x3c00001},
2474{0x3c00000, 0x4f3495cb, 0xff984a37, 0x7fc00000, 0x3c00001},
2475{0x3c00000, 0x4f3495cb, 0xffbfffff, 0x7fc00000, 0x3c00001},
2476{0x3c00000, 0x4f3495cb, 0xffc00000, 0x7fc00000, 0x3c00000},
2477{0x3c00000, 0x4f3495cb, 0xffd9ba98, 0x7fc00000, 0x3c00000},
2478{0x3c00000, 0x4f3495cb, 0xffffffff, 0x7fc00000, 0x3c00000},
2479{0x3c00000, 0x4f3495cb, 0x4f3495cb, 0x4fb495cb, 0x3c00000},
2480{0x3c00000, 0x4f3495cb, 0xe73a5134, 0xe73a5133, 0x3c00010},
2481{0x3c00000, 0x4f3495cb, 0x7c994e9e, 0x7c994e9e, 0x3c00010},
2482{0x3c00000, 0x4f3495cb, 0x6164bd6c, 0x6164bd6c, 0x3c00010},
2483{0x3c00000, 0x4f3495cb, 0x9503366, 0x4f3495cb, 0x3c00010},
2484{0x3c00000, 0x4f3495cb, 0xbf5a97c9, 0x4f3495ca, 0x3c00010},
2485{0x3c00000, 0x4f3495cb, 0xe6ff1a14, 0xe6ff1a13, 0x3c00010},
2486{0x3c00000, 0x4f3495cb, 0x77f31e2f, 0x77f31e2f, 0x3c00010},
2487{0x3c00000, 0x4f3495cb, 0xaab4d7d8, 0x4f3495ca, 0x3c00010},
2488{0x3c00000, 0x4f3495cb, 0x966320b, 0x4f3495cb, 0x3c00010},
2489{0x3c00000, 0x4f3495cb, 0xb26bddee, 0x4f3495ca, 0x3c00010},
2490{0x3c00000, 0x4f3495cb, 0xb5c8e5d3, 0x4f3495ca, 0x3c00010},
2491{0x3c00000, 0x4f3495cb, 0x317285d3, 0x4f3495cb, 0x3c00010},
2492{0x3c00000, 0x4f3495cb, 0x3c9623b1, 0x4f3495cb, 0x3c00010},
2493{0x3c00000, 0x4f3495cb, 0x51fd2c7c, 0x52016895, 0x3c00010},
2494{0x3c00000, 0x4f3495cb, 0x7b906a6c, 0x7b906a6c, 0x3c00010},
2495{0x3c00000, 0xe73a5134, 0x0, 0xe73a5134, 0x3c00000},
2496{0x3c00000, 0xe73a5134, 0x1, 0xe73a5134, 0x3c00080},
2497{0x3c00000, 0xe73a5134, 0x76, 0xe73a5134, 0x3c00080},
2498{0x3c00000, 0xe73a5134, 0x2b94, 0xe73a5134, 0x3c00080},
2499{0x3c00000, 0xe73a5134, 0x636d24, 0xe73a5134, 0x3c00080},
2500{0x3c00000, 0xe73a5134, 0x7fffff, 0xe73a5134, 0x3c00080},
2501{0x3c00000, 0xe73a5134, 0x800000, 0xe73a5133, 0x3c00010},
2502{0x3c00000, 0xe73a5134, 0x800002, 0xe73a5133, 0x3c00010},
2503{0x3c00000, 0xe73a5134, 0x1398437, 0xe73a5133, 0x3c00010},
2504{0x3c00000, 0xe73a5134, 0xba98d27, 0xe73a5133, 0x3c00010},
2505{0x3c00000, 0xe73a5134, 0xba98d7a, 0xe73a5133, 0x3c00010},
2506{0x3c00000, 0xe73a5134, 0x751f853a, 0x751f8539, 0x3c00010},
2507{0x3c00000, 0xe73a5134, 0x7f7ffff0, 0x7f7fffef, 0x3c00010},
2508{0x3c00000, 0xe73a5134, 0x7f7fffff, 0x7f7ffffe, 0x3c00010},
2509{0x3c00000, 0xe73a5134, 0x7f800000, 0x7f800000, 0x3c00000},
2510{0x3c00000, 0xe73a5134, 0x7f800001, 0x7fc00000, 0x3c00001},
2511{0x3c00000, 0xe73a5134, 0x7f984a37, 0x7fc00000, 0x3c00001},
2512{0x3c00000, 0xe73a5134, 0x7fbfffff, 0x7fc00000, 0x3c00001},
2513{0x3c00000, 0xe73a5134, 0x7fc00000, 0x7fc00000, 0x3c00000},
2514{0x3c00000, 0xe73a5134, 0x7fd9ba98, 0x7fc00000, 0x3c00000},
2515{0x3c00000, 0xe73a5134, 0x7fffffff, 0x7fc00000, 0x3c00000},
2516{0x3c00000, 0xe73a5134, 0x80000000, 0xe73a5134, 0x3c00000},
2517{0x3c00000, 0xe73a5134, 0x80000001, 0xe73a5134, 0x3c00080},
2518{0x3c00000, 0xe73a5134, 0x80000076, 0xe73a5134, 0x3c00080},
2519{0x3c00000, 0xe73a5134, 0x80002b94, 0xe73a5134, 0x3c00080},
2520{0x3c00000, 0xe73a5134, 0x80636d24, 0xe73a5134, 0x3c00080},
2521{0x3c00000, 0xe73a5134, 0x807fffff, 0xe73a5134, 0x3c00080},
2522{0x3c00000, 0xe73a5134, 0x80800000, 0xe73a5134, 0x3c00010},
2523{0x3c00000, 0xe73a5134, 0x80800002, 0xe73a5134, 0x3c00010},
2524{0x3c00000, 0xe73a5134, 0x81398437, 0xe73a5134, 0x3c00010},
2525{0x3c00000, 0xe73a5134, 0x8ba98d27, 0xe73a5134, 0x3c00010},
2526{0x3c00000, 0xe73a5134, 0x8ba98d7a, 0xe73a5134, 0x3c00010},
2527{0x3c00000, 0xe73a5134, 0xf51f853a, 0xf51f853a, 0x3c00010},
2528{0x3c00000, 0xe73a5134, 0xff7ffff0, 0xff7ffff0, 0x3c00010},
2529{0x3c00000, 0xe73a5134, 0xff7fffff, 0xff7fffff, 0x3c00010},
2530{0x3c00000, 0xe73a5134, 0xff800000, 0xff800000, 0x3c00000},
2531{0x3c00000, 0xe73a5134, 0xff800001, 0x7fc00000, 0x3c00001},
2532{0x3c00000, 0xe73a5134, 0xff984a37, 0x7fc00000, 0x3c00001},
2533{0x3c00000, 0xe73a5134, 0xffbfffff, 0x7fc00000, 0x3c00001},
2534{0x3c00000, 0xe73a5134, 0xffc00000, 0x7fc00000, 0x3c00000},
2535{0x3c00000, 0xe73a5134, 0xffd9ba98, 0x7fc00000, 0x3c00000},
2536{0x3c00000, 0xe73a5134, 0xffffffff, 0x7fc00000, 0x3c00000},
2537{0x3c00000, 0xe73a5134, 0x4f3495cb, 0xe73a5133, 0x3c00010},
2538{0x3c00000, 0xe73a5134, 0xe73a5134, 0xe7ba5134, 0x3c00000},
2539{0x3c00000, 0xe73a5134, 0x7c994e9e, 0x7c994e9d, 0x3c00010},
2540{0x3c00000, 0xe73a5134, 0x6164bd6c, 0xe73a42e8, 0x3c00010},
2541{0x3c00000, 0xe73a5134, 0x9503366, 0xe73a5133, 0x3c00010},
2542{0x3c00000, 0xe73a5134, 0xbf5a97c9, 0xe73a5134, 0x3c00010},
2543{0x3c00000, 0xe73a5134, 0xe6ff1a14, 0xe79cef1f, 0x3c00000},
2544{0x3c00000, 0xe73a5134, 0x77f31e2f, 0x77f31e2e, 0x3c00010},
2545{0x3c00000, 0xe73a5134, 0xaab4d7d8, 0xe73a5134, 0x3c00010},
2546{0x3c00000, 0xe73a5134, 0x966320b, 0xe73a5133, 0x3c00010},
2547{0x3c00000, 0xe73a5134, 0xb26bddee, 0xe73a5134, 0x3c00010},
2548{0x3c00000, 0xe73a5134, 0xb5c8e5d3, 0xe73a5134, 0x3c00010},
2549{0x3c00000, 0xe73a5134, 0x317285d3, 0xe73a5133, 0x3c00010},
2550{0x3c00000, 0xe73a5134, 0x3c9623b1, 0xe73a5133, 0x3c00010},
2551{0x3c00000, 0xe73a5134, 0x51fd2c7c, 0xe73a5133, 0x3c00010},
2552{0x3c00000, 0xe73a5134, 0x7b906a6c, 0x7b906a6b, 0x3c00010},
2553{0x3c00000, 0x7c994e9e, 0x0, 0x7c994e9e, 0x3c00000},
2554{0x3c00000, 0x7c994e9e, 0x1, 0x7c994e9e, 0x3c00080},
2555{0x3c00000, 0x7c994e9e, 0x76, 0x7c994e9e, 0x3c00080},
2556{0x3c00000, 0x7c994e9e, 0x2b94, 0x7c994e9e, 0x3c00080},
2557{0x3c00000, 0x7c994e9e, 0x636d24, 0x7c994e9e, 0x3c00080},
2558{0x3c00000, 0x7c994e9e, 0x7fffff, 0x7c994e9e, 0x3c00080},
2559{0x3c00000, 0x7c994e9e, 0x800000, 0x7c994e9e, 0x3c00010},
2560{0x3c00000, 0x7c994e9e, 0x800002, 0x7c994e9e, 0x3c00010},
2561{0x3c00000, 0x7c994e9e, 0x1398437, 0x7c994e9e, 0x3c00010},
2562{0x3c00000, 0x7c994e9e, 0xba98d27, 0x7c994e9e, 0x3c00010},
2563{0x3c00000, 0x7c994e9e, 0xba98d7a, 0x7c994e9e, 0x3c00010},
2564{0x3c00000, 0x7c994e9e, 0x751f853a, 0x7c994fdd, 0x3c00010},
2565{0x3c00000, 0x7c994e9e, 0x7f7ffff0, 0x7f7fffff, 0x3c00014},
2566{0x3c00000, 0x7c994e9e, 0x7f7fffff, 0x7f7fffff, 0x3c00014},
2567{0x3c00000, 0x7c994e9e, 0x7f800000, 0x7f800000, 0x3c00000},
2568{0x3c00000, 0x7c994e9e, 0x7f800001, 0x7fc00000, 0x3c00001},
2569{0x3c00000, 0x7c994e9e, 0x7f984a37, 0x7fc00000, 0x3c00001},
2570{0x3c00000, 0x7c994e9e, 0x7fbfffff, 0x7fc00000, 0x3c00001},
2571{0x3c00000, 0x7c994e9e, 0x7fc00000, 0x7fc00000, 0x3c00000},
2572{0x3c00000, 0x7c994e9e, 0x7fd9ba98, 0x7fc00000, 0x3c00000},
2573{0x3c00000, 0x7c994e9e, 0x7fffffff, 0x7fc00000, 0x3c00000},
2574{0x3c00000, 0x7c994e9e, 0x80000000, 0x7c994e9e, 0x3c00000},
2575{0x3c00000, 0x7c994e9e, 0x80000001, 0x7c994e9e, 0x3c00080},
2576{0x3c00000, 0x7c994e9e, 0x80000076, 0x7c994e9e, 0x3c00080},
2577{0x3c00000, 0x7c994e9e, 0x80002b94, 0x7c994e9e, 0x3c00080},
2578{0x3c00000, 0x7c994e9e, 0x80636d24, 0x7c994e9e, 0x3c00080},
2579{0x3c00000, 0x7c994e9e, 0x807fffff, 0x7c994e9e, 0x3c00080},
2580{0x3c00000, 0x7c994e9e, 0x80800000, 0x7c994e9d, 0x3c00010},
2581{0x3c00000, 0x7c994e9e, 0x80800002, 0x7c994e9d, 0x3c00010},
2582{0x3c00000, 0x7c994e9e, 0x81398437, 0x7c994e9d, 0x3c00010},
2583{0x3c00000, 0x7c994e9e, 0x8ba98d27, 0x7c994e9d, 0x3c00010},
2584{0x3c00000, 0x7c994e9e, 0x8ba98d7a, 0x7c994e9d, 0x3c00010},
2585{0x3c00000, 0x7c994e9e, 0xf51f853a, 0x7c994d5e, 0x3c00010},
2586{0x3c00000, 0x7c994e9e, 0xff7ffff0, 0xff7b357b, 0x3c00010},
2587{0x3c00000, 0x7c994e9e, 0xff7fffff, 0xff7b358a, 0x3c00010},
2588{0x3c00000, 0x7c994e9e, 0xff800000, 0xff800000, 0x3c00000},
2589{0x3c00000, 0x7c994e9e, 0xff800001, 0x7fc00000, 0x3c00001},
2590{0x3c00000, 0x7c994e9e, 0xff984a37, 0x7fc00000, 0x3c00001},
2591{0x3c00000, 0x7c994e9e, 0xffbfffff, 0x7fc00000, 0x3c00001},
2592{0x3c00000, 0x7c994e9e, 0xffc00000, 0x7fc00000, 0x3c00000},
2593{0x3c00000, 0x7c994e9e, 0xffd9ba98, 0x7fc00000, 0x3c00000},
2594{0x3c00000, 0x7c994e9e, 0xffffffff, 0x7fc00000, 0x3c00000},
2595{0x3c00000, 0x7c994e9e, 0x4f3495cb, 0x7c994e9e, 0x3c00010},
2596{0x3c00000, 0x7c994e9e, 0xe73a5134, 0x7c994e9d, 0x3c00010},
2597{0x3c00000, 0x7c994e9e, 0x7c994e9e, 0x7d194e9e, 0x3c00000},
2598{0x3c00000, 0x7c994e9e, 0x6164bd6c, 0x7c994e9e, 0x3c00010},
2599{0x3c00000, 0x7c994e9e, 0x9503366, 0x7c994e9e, 0x3c00010},
2600{0x3c00000, 0x7c994e9e, 0xbf5a97c9, 0x7c994e9d, 0x3c00010},
2601{0x3c00000, 0x7c994e9e, 0xe6ff1a14, 0x7c994e9d, 0x3c00010},
2602{0x3c00000, 0x7c994e9e, 0x77f31e2f, 0x7c998b65, 0x3c00010},
2603{0x3c00000, 0x7c994e9e, 0xaab4d7d8, 0x7c994e9d, 0x3c00010},
2604{0x3c00000, 0x7c994e9e, 0x966320b, 0x7c994e9e, 0x3c00010},
2605{0x3c00000, 0x7c994e9e, 0xb26bddee, 0x7c994e9d, 0x3c00010},
2606{0x3c00000, 0x7c994e9e, 0xb5c8e5d3, 0x7c994e9d, 0x3c00010},
2607{0x3c00000, 0x7c994e9e, 0x317285d3, 0x7c994e9e, 0x3c00010},
2608{0x3c00000, 0x7c994e9e, 0x3c9623b1, 0x7c994e9e, 0x3c00010},
2609{0x3c00000, 0x7c994e9e, 0x51fd2c7c, 0x7c994e9e, 0x3c00010},
2610{0x3c00000, 0x7c994e9e, 0x7b906a6c, 0x7cbd6939, 0x3c00000},
2611{0x3c00000, 0x6164bd6c, 0x0, 0x6164bd6c, 0x3c00000},
2612{0x3c00000, 0x6164bd6c, 0x1, 0x6164bd6c, 0x3c00080},
2613{0x3c00000, 0x6164bd6c, 0x76, 0x6164bd6c, 0x3c00080},
2614{0x3c00000, 0x6164bd6c, 0x2b94, 0x6164bd6c, 0x3c00080},
2615{0x3c00000, 0x6164bd6c, 0x636d24, 0x6164bd6c, 0x3c00080},
2616{0x3c00000, 0x6164bd6c, 0x7fffff, 0x6164bd6c, 0x3c00080},
2617{0x3c00000, 0x6164bd6c, 0x800000, 0x6164bd6c, 0x3c00010},
2618{0x3c00000, 0x6164bd6c, 0x800002, 0x6164bd6c, 0x3c00010},
2619{0x3c00000, 0x6164bd6c, 0x1398437, 0x6164bd6c, 0x3c00010},
2620{0x3c00000, 0x6164bd6c, 0xba98d27, 0x6164bd6c, 0x3c00010},
2621{0x3c00000, 0x6164bd6c, 0xba98d7a, 0x6164bd6c, 0x3c00010},
2622{0x3c00000, 0x6164bd6c, 0x751f853a, 0x751f853a, 0x3c00010},
2623{0x3c00000, 0x6164bd6c, 0x7f7ffff0, 0x7f7ffff0, 0x3c00010},
2624{0x3c00000, 0x6164bd6c, 0x7f7fffff, 0x7f7fffff, 0x3c00010},
2625{0x3c00000, 0x6164bd6c, 0x7f800000, 0x7f800000, 0x3c00000},
2626{0x3c00000, 0x6164bd6c, 0x7f800001, 0x7fc00000, 0x3c00001},
2627{0x3c00000, 0x6164bd6c, 0x7f984a37, 0x7fc00000, 0x3c00001},
2628{0x3c00000, 0x6164bd6c, 0x7fbfffff, 0x7fc00000, 0x3c00001},
2629{0x3c00000, 0x6164bd6c, 0x7fc00000, 0x7fc00000, 0x3c00000},
2630{0x3c00000, 0x6164bd6c, 0x7fd9ba98, 0x7fc00000, 0x3c00000},
2631{0x3c00000, 0x6164bd6c, 0x7fffffff, 0x7fc00000, 0x3c00000},
2632{0x3c00000, 0x6164bd6c, 0x80000000, 0x6164bd6c, 0x3c00000},
2633{0x3c00000, 0x6164bd6c, 0x80000001, 0x6164bd6c, 0x3c00080},
2634{0x3c00000, 0x6164bd6c, 0x80000076, 0x6164bd6c, 0x3c00080},
2635{0x3c00000, 0x6164bd6c, 0x80002b94, 0x6164bd6c, 0x3c00080},
2636{0x3c00000, 0x6164bd6c, 0x80636d24, 0x6164bd6c, 0x3c00080},
2637{0x3c00000, 0x6164bd6c, 0x807fffff, 0x6164bd6c, 0x3c00080},
2638{0x3c00000, 0x6164bd6c, 0x80800000, 0x6164bd6b, 0x3c00010},
2639{0x3c00000, 0x6164bd6c, 0x80800002, 0x6164bd6b, 0x3c00010},
2640{0x3c00000, 0x6164bd6c, 0x81398437, 0x6164bd6b, 0x3c00010},
2641{0x3c00000, 0x6164bd6c, 0x8ba98d27, 0x6164bd6b, 0x3c00010},
2642{0x3c00000, 0x6164bd6c, 0x8ba98d7a, 0x6164bd6b, 0x3c00010},
2643{0x3c00000, 0x6164bd6c, 0xf51f853a, 0xf51f8539, 0x3c00010},
2644{0x3c00000, 0x6164bd6c, 0xff7ffff0, 0xff7fffef, 0x3c00010},
2645{0x3c00000, 0x6164bd6c, 0xff7fffff, 0xff7ffffe, 0x3c00010},
2646{0x3c00000, 0x6164bd6c, 0xff800000, 0xff800000, 0x3c00000},
2647{0x3c00000, 0x6164bd6c, 0xff800001, 0x7fc00000, 0x3c00001},
2648{0x3c00000, 0x6164bd6c, 0xff984a37, 0x7fc00000, 0x3c00001},
2649{0x3c00000, 0x6164bd6c, 0xffbfffff, 0x7fc00000, 0x3c00001},
2650{0x3c00000, 0x6164bd6c, 0xffc00000, 0x7fc00000, 0x3c00000},
2651{0x3c00000, 0x6164bd6c, 0xffd9ba98, 0x7fc00000, 0x3c00000},
2652{0x3c00000, 0x6164bd6c, 0xffffffff, 0x7fc00000, 0x3c00000},
2653{0x3c00000, 0x6164bd6c, 0x4f3495cb, 0x6164bd6c, 0x3c00010},
2654{0x3c00000, 0x6164bd6c, 0xe73a5134, 0xe73a42e8, 0x3c00010},
2655{0x3c00000, 0x6164bd6c, 0x7c994e9e, 0x7c994e9e, 0x3c00010},
2656{0x3c00000, 0x6164bd6c, 0x6164bd6c, 0x61e4bd6c, 0x3c00000},
2657{0x3c00000, 0x6164bd6c, 0x9503366, 0x6164bd6c, 0x3c00010},
2658{0x3c00000, 0x6164bd6c, 0xbf5a97c9, 0x6164bd6b, 0x3c00010},
2659{0x3c00000, 0x6164bd6c, 0xe6ff1a14, 0xe6fefd7c, 0x3c00010},
2660{0x3c00000, 0x6164bd6c, 0x77f31e2f, 0x77f31e2f, 0x3c00010},
2661{0x3c00000, 0x6164bd6c, 0xaab4d7d8, 0x6164bd6b, 0x3c00010},
2662{0x3c00000, 0x6164bd6c, 0x966320b, 0x6164bd6c, 0x3c00010},
2663{0x3c00000, 0x6164bd6c, 0xb26bddee, 0x6164bd6b, 0x3c00010},
2664{0x3c00000, 0x6164bd6c, 0xb5c8e5d3, 0x6164bd6b, 0x3c00010},
2665{0x3c00000, 0x6164bd6c, 0x317285d3, 0x6164bd6c, 0x3c00010},
2666{0x3c00000, 0x6164bd6c, 0x3c9623b1, 0x6164bd6c, 0x3c00010},
2667{0x3c00000, 0x6164bd6c, 0x51fd2c7c, 0x6164bd6c, 0x3c00010},
2668{0x3c00000, 0x6164bd6c, 0x7b906a6c, 0x7b906a6c, 0x3c00010},
2669{0x3c00000, 0x9503366, 0x0, 0x9503366, 0x3c00000},
2670{0x3c00000, 0x9503366, 0x1, 0x9503366, 0x3c00080},
2671{0x3c00000, 0x9503366, 0x76, 0x9503366, 0x3c00080},
2672{0x3c00000, 0x9503366, 0x2b94, 0x9503366, 0x3c00080},
2673{0x3c00000, 0x9503366, 0x636d24, 0x9503366, 0x3c00080},
2674{0x3c00000, 0x9503366, 0x7fffff, 0x9503366, 0x3c00080},
2675{0x3c00000, 0x9503366, 0x800000, 0x95033a6, 0x3c00000},
2676{0x3c00000, 0x9503366, 0x800002, 0x95033a6, 0x3c00010},
2677{0x3c00000, 0x9503366, 0x1398437, 0x950341f, 0x3c00010},
2678{0x3c00000, 0x9503366, 0xba98d27, 0xbb00ec2, 0x3c00010},
2679{0x3c00000, 0x9503366, 0xba98d7a, 0xbb00f15, 0x3c00010},
2680{0x3c00000, 0x9503366, 0x751f853a, 0x751f853a, 0x3c00010},
2681{0x3c00000, 0x9503366, 0x7f7ffff0, 0x7f7ffff0, 0x3c00010},
2682{0x3c00000, 0x9503366, 0x7f7fffff, 0x7f7fffff, 0x3c00010},
2683{0x3c00000, 0x9503366, 0x7f800000, 0x7f800000, 0x3c00000},
2684{0x3c00000, 0x9503366, 0x7f800001, 0x7fc00000, 0x3c00001},
2685{0x3c00000, 0x9503366, 0x7f984a37, 0x7fc00000, 0x3c00001},
2686{0x3c00000, 0x9503366, 0x7fbfffff, 0x7fc00000, 0x3c00001},
2687{0x3c00000, 0x9503366, 0x7fc00000, 0x7fc00000, 0x3c00000},
2688{0x3c00000, 0x9503366, 0x7fd9ba98, 0x7fc00000, 0x3c00000},
2689{0x3c00000, 0x9503366, 0x7fffffff, 0x7fc00000, 0x3c00000},
2690{0x3c00000, 0x9503366, 0x80000000, 0x9503366, 0x3c00000},
2691{0x3c00000, 0x9503366, 0x80000001, 0x9503366, 0x3c00080},
2692{0x3c00000, 0x9503366, 0x80000076, 0x9503366, 0x3c00080},
2693{0x3c00000, 0x9503366, 0x80002b94, 0x9503366, 0x3c00080},
2694{0x3c00000, 0x9503366, 0x80636d24, 0x9503366, 0x3c00080},
2695{0x3c00000, 0x9503366, 0x807fffff, 0x9503366, 0x3c00080},
2696{0x3c00000, 0x9503366, 0x80800000, 0x9503326, 0x3c00000},
2697{0x3c00000, 0x9503366, 0x80800002, 0x9503325, 0x3c00010},
2698{0x3c00000, 0x9503366, 0x81398437, 0x95032ac, 0x3c00010},
2699{0x3c00000, 0x9503366, 0x8ba98d27, 0x8ba30b8b, 0x3c00010},
2700{0x3c00000, 0x9503366, 0x8ba98d7a, 0x8ba30bde, 0x3c00010},
2701{0x3c00000, 0x9503366, 0xf51f853a, 0xf51f8539, 0x3c00010},
2702{0x3c00000, 0x9503366, 0xff7ffff0, 0xff7fffef, 0x3c00010},
2703{0x3c00000, 0x9503366, 0xff7fffff, 0xff7ffffe, 0x3c00010},
2704{0x3c00000, 0x9503366, 0xff800000, 0xff800000, 0x3c00000},
2705{0x3c00000, 0x9503366, 0xff800001, 0x7fc00000, 0x3c00001},
2706{0x3c00000, 0x9503366, 0xff984a37, 0x7fc00000, 0x3c00001},
2707{0x3c00000, 0x9503366, 0xffbfffff, 0x7fc00000, 0x3c00001},
2708{0x3c00000, 0x9503366, 0xffc00000, 0x7fc00000, 0x3c00000},
2709{0x3c00000, 0x9503366, 0xffd9ba98, 0x7fc00000, 0x3c00000},
2710{0x3c00000, 0x9503366, 0xffffffff, 0x7fc00000, 0x3c00000},
2711{0x3c00000, 0x9503366, 0x4f3495cb, 0x4f3495cb, 0x3c00010},
2712{0x3c00000, 0x9503366, 0xe73a5134, 0xe73a5133, 0x3c00010},
2713{0x3c00000, 0x9503366, 0x7c994e9e, 0x7c994e9e, 0x3c00010},
2714{0x3c00000, 0x9503366, 0x6164bd6c, 0x6164bd6c, 0x3c00010},
2715{0x3c00000, 0x9503366, 0x9503366, 0x9d03366, 0x3c00000},
2716{0x3c00000, 0x9503366, 0xbf5a97c9, 0xbf5a97c8, 0x3c00010},
2717{0x3c00000, 0x9503366, 0xe6ff1a14, 0xe6ff1a13, 0x3c00010},
2718{0x3c00000, 0x9503366, 0x77f31e2f, 0x77f31e2f, 0x3c00010},
2719{0x3c00000, 0x9503366, 0xaab4d7d8, 0xaab4d7d7, 0x3c00010},
2720{0x3c00000, 0x9503366, 0x966320b, 0x9db32b8, 0x3c00010},
2721{0x3c00000, 0x9503366, 0xb26bddee, 0xb26bdded, 0x3c00010},
2722{0x3c00000, 0x9503366, 0xb5c8e5d3, 0xb5c8e5d2, 0x3c00010},
2723{0x3c00000, 0x9503366, 0x317285d3, 0x317285d3, 0x3c00010},
2724{0x3c00000, 0x9503366, 0x3c9623b1, 0x3c9623b1, 0x3c00010},
2725{0x3c00000, 0x9503366, 0x51fd2c7c, 0x51fd2c7c, 0x3c00010},
2726{0x3c00000, 0x9503366, 0x7b906a6c, 0x7b906a6c, 0x3c00010},
2727{0x3c00000, 0xbf5a97c9, 0x0, 0xbf5a97c9, 0x3c00000},
2728{0x3c00000, 0xbf5a97c9, 0x1, 0xbf5a97c9, 0x3c00080},
2729{0x3c00000, 0xbf5a97c9, 0x76, 0xbf5a97c9, 0x3c00080},
2730{0x3c00000, 0xbf5a97c9, 0x2b94, 0xbf5a97c9, 0x3c00080},
2731{0x3c00000, 0xbf5a97c9, 0x636d24, 0xbf5a97c9, 0x3c00080},
2732{0x3c00000, 0xbf5a97c9, 0x7fffff, 0xbf5a97c9, 0x3c00080},
2733{0x3c00000, 0xbf5a97c9, 0x800000, 0xbf5a97c8, 0x3c00010},
2734{0x3c00000, 0xbf5a97c9, 0x800002, 0xbf5a97c8, 0x3c00010},
2735{0x3c00000, 0xbf5a97c9, 0x1398437, 0xbf5a97c8, 0x3c00010},
2736{0x3c00000, 0xbf5a97c9, 0xba98d27, 0xbf5a97c8, 0x3c00010},
2737{0x3c00000, 0xbf5a97c9, 0xba98d7a, 0xbf5a97c8, 0x3c00010},
2738{0x3c00000, 0xbf5a97c9, 0x751f853a, 0x751f8539, 0x3c00010},
2739{0x3c00000, 0xbf5a97c9, 0x7f7ffff0, 0x7f7fffef, 0x3c00010},
2740{0x3c00000, 0xbf5a97c9, 0x7f7fffff, 0x7f7ffffe, 0x3c00010},
2741{0x3c00000, 0xbf5a97c9, 0x7f800000, 0x7f800000, 0x3c00000},
2742{0x3c00000, 0xbf5a97c9, 0x7f800001, 0x7fc00000, 0x3c00001},
2743{0x3c00000, 0xbf5a97c9, 0x7f984a37, 0x7fc00000, 0x3c00001},
2744{0x3c00000, 0xbf5a97c9, 0x7fbfffff, 0x7fc00000, 0x3c00001},
2745{0x3c00000, 0xbf5a97c9, 0x7fc00000, 0x7fc00000, 0x3c00000},
2746{0x3c00000, 0xbf5a97c9, 0x7fd9ba98, 0x7fc00000, 0x3c00000},
2747{0x3c00000, 0xbf5a97c9, 0x7fffffff, 0x7fc00000, 0x3c00000},
2748{0x3c00000, 0xbf5a97c9, 0x80000000, 0xbf5a97c9, 0x3c00000},
2749{0x3c00000, 0xbf5a97c9, 0x80000001, 0xbf5a97c9, 0x3c00080},
2750{0x3c00000, 0xbf5a97c9, 0x80000076, 0xbf5a97c9, 0x3c00080},
2751{0x3c00000, 0xbf5a97c9, 0x80002b94, 0xbf5a97c9, 0x3c00080},
2752{0x3c00000, 0xbf5a97c9, 0x80636d24, 0xbf5a97c9, 0x3c00080},
2753{0x3c00000, 0xbf5a97c9, 0x807fffff, 0xbf5a97c9, 0x3c00080},
2754{0x3c00000, 0xbf5a97c9, 0x80800000, 0xbf5a97c9, 0x3c00010},
2755{0x3c00000, 0xbf5a97c9, 0x80800002, 0xbf5a97c9, 0x3c00010},
2756{0x3c00000, 0xbf5a97c9, 0x81398437, 0xbf5a97c9, 0x3c00010},
2757{0x3c00000, 0xbf5a97c9, 0x8ba98d27, 0xbf5a97c9, 0x3c00010},
2758{0x3c00000, 0xbf5a97c9, 0x8ba98d7a, 0xbf5a97c9, 0x3c00010},
2759{0x3c00000, 0xbf5a97c9, 0xf51f853a, 0xf51f853a, 0x3c00010},
2760{0x3c00000, 0xbf5a97c9, 0xff7ffff0, 0xff7ffff0, 0x3c00010},
2761{0x3c00000, 0xbf5a97c9, 0xff7fffff, 0xff7fffff, 0x3c00010},
2762{0x3c00000, 0xbf5a97c9, 0xff800000, 0xff800000, 0x3c00000},
2763{0x3c00000, 0xbf5a97c9, 0xff800001, 0x7fc00000, 0x3c00001},
2764{0x3c00000, 0xbf5a97c9, 0xff984a37, 0x7fc00000, 0x3c00001},
2765{0x3c00000, 0xbf5a97c9, 0xffbfffff, 0x7fc00000, 0x3c00001},
2766{0x3c00000, 0xbf5a97c9, 0xffc00000, 0x7fc00000, 0x3c00000},
2767{0x3c00000, 0xbf5a97c9, 0xffd9ba98, 0x7fc00000, 0x3c00000},
2768{0x3c00000, 0xbf5a97c9, 0xffffffff, 0x7fc00000, 0x3c00000},
2769{0x3c00000, 0xbf5a97c9, 0x4f3495cb, 0x4f3495ca, 0x3c00010},
2770{0x3c00000, 0xbf5a97c9, 0xe73a5134, 0xe73a5134, 0x3c00010},
2771{0x3c00000, 0xbf5a97c9, 0x7c994e9e, 0x7c994e9d, 0x3c00010},
2772{0x3c00000, 0xbf5a97c9, 0x6164bd6c, 0x6164bd6b, 0x3c00010},
2773{0x3c00000, 0xbf5a97c9, 0x9503366, 0xbf5a97c8, 0x3c00010},
2774{0x3c00000, 0xbf5a97c9, 0xbf5a97c9, 0xbfda97c9, 0x3c00000},
2775{0x3c00000, 0xbf5a97c9, 0xe6ff1a14, 0xe6ff1a14, 0x3c00010},
2776{0x3c00000, 0xbf5a97c9, 0x77f31e2f, 0x77f31e2e, 0x3c00010},
2777{0x3c00000, 0xbf5a97c9, 0xaab4d7d8, 0xbf5a97c9, 0x3c00010},
2778{0x3c00000, 0xbf5a97c9, 0x966320b, 0xbf5a97c8, 0x3c00010},
2779{0x3c00000, 0xbf5a97c9, 0xb26bddee, 0xbf5a97c9, 0x3c00010},
2780{0x3c00000, 0xbf5a97c9, 0xb5c8e5d3, 0xbf5a97e2, 0x3c00010},
2781{0x3c00000, 0xbf5a97c9, 0x317285d3, 0xbf5a97c8, 0x3c00010},
2782{0x3c00000, 0xbf5a97c9, 0x3c9623b1, 0xbf55e6ab, 0x3c00010},
2783{0x3c00000, 0xbf5a97c9, 0x51fd2c7c, 0x51fd2c7b, 0x3c00010},
2784{0x3c00000, 0xbf5a97c9, 0x7b906a6c, 0x7b906a6b, 0x3c00010},
2785{0x3c00000, 0xe6ff1a14, 0x0, 0xe6ff1a14, 0x3c00000},
2786{0x3c00000, 0xe6ff1a14, 0x1, 0xe6ff1a14, 0x3c00080},
2787{0x3c00000, 0xe6ff1a14, 0x76, 0xe6ff1a14, 0x3c00080},
2788{0x3c00000, 0xe6ff1a14, 0x2b94, 0xe6ff1a14, 0x3c00080},
2789{0x3c00000, 0xe6ff1a14, 0x636d24, 0xe6ff1a14, 0x3c00080},
2790{0x3c00000, 0xe6ff1a14, 0x7fffff, 0xe6ff1a14, 0x3c00080},
2791{0x3c00000, 0xe6ff1a14, 0x800000, 0xe6ff1a13, 0x3c00010},
2792{0x3c00000, 0xe6ff1a14, 0x800002, 0xe6ff1a13, 0x3c00010},
2793{0x3c00000, 0xe6ff1a14, 0x1398437, 0xe6ff1a13, 0x3c00010},
2794{0x3c00000, 0xe6ff1a14, 0xba98d27, 0xe6ff1a13, 0x3c00010},
2795{0x3c00000, 0xe6ff1a14, 0xba98d7a, 0xe6ff1a13, 0x3c00010},
2796{0x3c00000, 0xe6ff1a14, 0x751f853a, 0x751f8539, 0x3c00010},
2797{0x3c00000, 0xe6ff1a14, 0x7f7ffff0, 0x7f7fffef, 0x3c00010},
2798{0x3c00000, 0xe6ff1a14, 0x7f7fffff, 0x7f7ffffe, 0x3c00010},
2799{0x3c00000, 0xe6ff1a14, 0x7f800000, 0x7f800000, 0x3c00000},
2800{0x3c00000, 0xe6ff1a14, 0x7f800001, 0x7fc00000, 0x3c00001},
2801{0x3c00000, 0xe6ff1a14, 0x7f984a37, 0x7fc00000, 0x3c00001},
2802{0x3c00000, 0xe6ff1a14, 0x7fbfffff, 0x7fc00000, 0x3c00001},
2803{0x3c00000, 0xe6ff1a14, 0x7fc00000, 0x7fc00000, 0x3c00000},
2804{0x3c00000, 0xe6ff1a14, 0x7fd9ba98, 0x7fc00000, 0x3c00000},
2805{0x3c00000, 0xe6ff1a14, 0x7fffffff, 0x7fc00000, 0x3c00000},
2806{0x3c00000, 0xe6ff1a14, 0x80000000, 0xe6ff1a14, 0x3c00000},
2807{0x3c00000, 0xe6ff1a14, 0x80000001, 0xe6ff1a14, 0x3c00080},
2808{0x3c00000, 0xe6ff1a14, 0x80000076, 0xe6ff1a14, 0x3c00080},
2809{0x3c00000, 0xe6ff1a14, 0x80002b94, 0xe6ff1a14, 0x3c00080},
2810{0x3c00000, 0xe6ff1a14, 0x80636d24, 0xe6ff1a14, 0x3c00080},
2811{0x3c00000, 0xe6ff1a14, 0x807fffff, 0xe6ff1a14, 0x3c00080},
2812{0x3c00000, 0xe6ff1a14, 0x80800000, 0xe6ff1a14, 0x3c00010},
2813{0x3c00000, 0xe6ff1a14, 0x80800002, 0xe6ff1a14, 0x3c00010},
2814{0x3c00000, 0xe6ff1a14, 0x81398437, 0xe6ff1a14, 0x3c00010},
2815{0x3c00000, 0xe6ff1a14, 0x8ba98d27, 0xe6ff1a14, 0x3c00010},
2816{0x3c00000, 0xe6ff1a14, 0x8ba98d7a, 0xe6ff1a14, 0x3c00010},
2817{0x3c00000, 0xe6ff1a14, 0xf51f853a, 0xf51f853a, 0x3c00010},
2818{0x3c00000, 0xe6ff1a14, 0xff7ffff0, 0xff7ffff0, 0x3c00010},
2819{0x3c00000, 0xe6ff1a14, 0xff7fffff, 0xff7fffff, 0x3c00010},
2820{0x3c00000, 0xe6ff1a14, 0xff800000, 0xff800000, 0x3c00000},
2821{0x3c00000, 0xe6ff1a14, 0xff800001, 0x7fc00000, 0x3c00001},
2822{0x3c00000, 0xe6ff1a14, 0xff984a37, 0x7fc00000, 0x3c00001},
2823{0x3c00000, 0xe6ff1a14, 0xffbfffff, 0x7fc00000, 0x3c00001},
2824{0x3c00000, 0xe6ff1a14, 0xffc00000, 0x7fc00000, 0x3c00000},
2825{0x3c00000, 0xe6ff1a14, 0xffd9ba98, 0x7fc00000, 0x3c00000},
2826{0x3c00000, 0xe6ff1a14, 0xffffffff, 0x7fc00000, 0x3c00000},
2827{0x3c00000, 0xe6ff1a14, 0x4f3495cb, 0xe6ff1a13, 0x3c00010},
2828{0x3c00000, 0xe6ff1a14, 0xe73a5134, 0xe79cef1f, 0x3c00000},
2829{0x3c00000, 0xe6ff1a14, 0x7c994e9e, 0x7c994e9d, 0x3c00010},
2830{0x3c00000, 0xe6ff1a14, 0x6164bd6c, 0xe6fefd7c, 0x3c00010},
2831{0x3c00000, 0xe6ff1a14, 0x9503366, 0xe6ff1a13, 0x3c00010},
2832{0x3c00000, 0xe6ff1a14, 0xbf5a97c9, 0xe6ff1a14, 0x3c00010},
2833{0x3c00000, 0xe6ff1a14, 0xe6ff1a14, 0xe77f1a14, 0x3c00000},
2834{0x3c00000, 0xe6ff1a14, 0x77f31e2f, 0x77f31e2e, 0x3c00010},
2835{0x3c00000, 0xe6ff1a14, 0xaab4d7d8, 0xe6ff1a14, 0x3c00010},
2836{0x3c00000, 0xe6ff1a14, 0x966320b, 0xe6ff1a13, 0x3c00010},
2837{0x3c00000, 0xe6ff1a14, 0xb26bddee, 0xe6ff1a14, 0x3c00010},
2838{0x3c00000, 0xe6ff1a14, 0xb5c8e5d3, 0xe6ff1a14, 0x3c00010},
2839{0x3c00000, 0xe6ff1a14, 0x317285d3, 0xe6ff1a13, 0x3c00010},
2840{0x3c00000, 0xe6ff1a14, 0x3c9623b1, 0xe6ff1a13, 0x3c00010},
2841{0x3c00000, 0xe6ff1a14, 0x51fd2c7c, 0xe6ff1a13, 0x3c00010},
2842{0x3c00000, 0xe6ff1a14, 0x7b906a6c, 0x7b906a6b, 0x3c00010},
2843{0x3c00000, 0x77f31e2f, 0x0, 0x77f31e2f, 0x3c00000},
2844{0x3c00000, 0x77f31e2f, 0x1, 0x77f31e2f, 0x3c00080},
2845{0x3c00000, 0x77f31e2f, 0x76, 0x77f31e2f, 0x3c00080},
2846{0x3c00000, 0x77f31e2f, 0x2b94, 0x77f31e2f, 0x3c00080},
2847{0x3c00000, 0x77f31e2f, 0x636d24, 0x77f31e2f, 0x3c00080},
2848{0x3c00000, 0x77f31e2f, 0x7fffff, 0x77f31e2f, 0x3c00080},
2849{0x3c00000, 0x77f31e2f, 0x800000, 0x77f31e2f, 0x3c00010},
2850{0x3c00000, 0x77f31e2f, 0x800002, 0x77f31e2f, 0x3c00010},
2851{0x3c00000, 0x77f31e2f, 0x1398437, 0x77f31e2f, 0x3c00010},
2852{0x3c00000, 0x77f31e2f, 0xba98d27, 0x77f31e2f, 0x3c00010},
2853{0x3c00000, 0x77f31e2f, 0xba98d7a, 0x77f31e2f, 0x3c00010},
2854{0x3c00000, 0x77f31e2f, 0x751f853a, 0x77f81a58, 0x3c00010},
2855{0x3c00000, 0x77f31e2f, 0x7f7ffff0, 0x7f7fffff, 0x3c00014},
2856{0x3c00000, 0x77f31e2f, 0x7f7fffff, 0x7f7fffff, 0x3c00014},
2857{0x3c00000, 0x77f31e2f, 0x7f800000, 0x7f800000, 0x3c00000},
2858{0x3c00000, 0x77f31e2f, 0x7f800001, 0x7fc00000, 0x3c00001},
2859{0x3c00000, 0x77f31e2f, 0x7f984a37, 0x7fc00000, 0x3c00001},
2860{0x3c00000, 0x77f31e2f, 0x7fbfffff, 0x7fc00000, 0x3c00001},
2861{0x3c00000, 0x77f31e2f, 0x7fc00000, 0x7fc00000, 0x3c00000},
2862{0x3c00000, 0x77f31e2f, 0x7fd9ba98, 0x7fc00000, 0x3c00000},
2863{0x3c00000, 0x77f31e2f, 0x7fffffff, 0x7fc00000, 0x3c00000},
2864{0x3c00000, 0x77f31e2f, 0x80000000, 0x77f31e2f, 0x3c00000},
2865{0x3c00000, 0x77f31e2f, 0x80000001, 0x77f31e2f, 0x3c00080},
2866{0x3c00000, 0x77f31e2f, 0x80000076, 0x77f31e2f, 0x3c00080},
2867{0x3c00000, 0x77f31e2f, 0x80002b94, 0x77f31e2f, 0x3c00080},
2868{0x3c00000, 0x77f31e2f, 0x80636d24, 0x77f31e2f, 0x3c00080},
2869{0x3c00000, 0x77f31e2f, 0x807fffff, 0x77f31e2f, 0x3c00080},
2870{0x3c00000, 0x77f31e2f, 0x80800000, 0x77f31e2e, 0x3c00010},
2871{0x3c00000, 0x77f31e2f, 0x80800002, 0x77f31e2e, 0x3c00010},
2872{0x3c00000, 0x77f31e2f, 0x81398437, 0x77f31e2e, 0x3c00010},
2873{0x3c00000, 0x77f31e2f, 0x8ba98d27, 0x77f31e2e, 0x3c00010},
2874{0x3c00000, 0x77f31e2f, 0x8ba98d7a, 0x77f31e2e, 0x3c00010},
2875{0x3c00000, 0x77f31e2f, 0xf51f853a, 0x77ee2205, 0x3c00010},
2876{0x3c00000, 0x77f31e2f, 0xff7ffff0, 0xff7ffe09, 0x3c00010},
2877{0x3c00000, 0x77f31e2f, 0xff7fffff, 0xff7ffe18, 0x3c00010},
2878{0x3c00000, 0x77f31e2f, 0xff800000, 0xff800000, 0x3c00000},
2879{0x3c00000, 0x77f31e2f, 0xff800001, 0x7fc00000, 0x3c00001},
2880{0x3c00000, 0x77f31e2f, 0xff984a37, 0x7fc00000, 0x3c00001},
2881{0x3c00000, 0x77f31e2f, 0xffbfffff, 0x7fc00000, 0x3c00001},
2882{0x3c00000, 0x77f31e2f, 0xffc00000, 0x7fc00000, 0x3c00000},
2883{0x3c00000, 0x77f31e2f, 0xffd9ba98, 0x7fc00000, 0x3c00000},
2884{0x3c00000, 0x77f31e2f, 0xffffffff, 0x7fc00000, 0x3c00000},
2885{0x3c00000, 0x77f31e2f, 0x4f3495cb, 0x77f31e2f, 0x3c00010},
2886{0x3c00000, 0x77f31e2f, 0xe73a5134, 0x77f31e2e, 0x3c00010},
2887{0x3c00000, 0x77f31e2f, 0x7c994e9e, 0x7c998b65, 0x3c00010},
2888{0x3c00000, 0x77f31e2f, 0x6164bd6c, 0x77f31e2f, 0x3c00010},
2889{0x3c00000, 0x77f31e2f, 0x9503366, 0x77f31e2f, 0x3c00010},
2890{0x3c00000, 0x77f31e2f, 0xbf5a97c9, 0x77f31e2e, 0x3c00010},
2891{0x3c00000, 0x77f31e2f, 0xe6ff1a14, 0x77f31e2e, 0x3c00010},
2892{0x3c00000, 0x77f31e2f, 0x77f31e2f, 0x78731e2f, 0x3c00000},
2893{0x3c00000, 0x77f31e2f, 0xaab4d7d8, 0x77f31e2e, 0x3c00010},
2894{0x3c00000, 0x77f31e2f, 0x966320b, 0x77f31e2f, 0x3c00010},
2895{0x3c00000, 0x77f31e2f, 0xb26bddee, 0x77f31e2e, 0x3c00010},
2896{0x3c00000, 0x77f31e2f, 0xb5c8e5d3, 0x77f31e2e, 0x3c00010},
2897{0x3c00000, 0x77f31e2f, 0x317285d3, 0x77f31e2f, 0x3c00010},
2898{0x3c00000, 0x77f31e2f, 0x3c9623b1, 0x77f31e2f, 0x3c00010},
2899{0x3c00000, 0x77f31e2f, 0x51fd2c7c, 0x77f31e2f, 0x3c00010},
2900{0x3c00000, 0x77f31e2f, 0x7b906a6c, 0x7b915d8a, 0x3c00010},
2901{0x3c00000, 0xaab4d7d8, 0x0, 0xaab4d7d8, 0x3c00000},
2902{0x3c00000, 0xaab4d7d8, 0x1, 0xaab4d7d8, 0x3c00080},
2903{0x3c00000, 0xaab4d7d8, 0x76, 0xaab4d7d8, 0x3c00080},
2904{0x3c00000, 0xaab4d7d8, 0x2b94, 0xaab4d7d8, 0x3c00080},
2905{0x3c00000, 0xaab4d7d8, 0x636d24, 0xaab4d7d8, 0x3c00080},
2906{0x3c00000, 0xaab4d7d8, 0x7fffff, 0xaab4d7d8, 0x3c00080},
2907{0x3c00000, 0xaab4d7d8, 0x800000, 0xaab4d7d7, 0x3c00010},
2908{0x3c00000, 0xaab4d7d8, 0x800002, 0xaab4d7d7, 0x3c00010},
2909{0x3c00000, 0xaab4d7d8, 0x1398437, 0xaab4d7d7, 0x3c00010},
2910{0x3c00000, 0xaab4d7d8, 0xba98d27, 0xaab4d7d7, 0x3c00010},
2911{0x3c00000, 0xaab4d7d8, 0xba98d7a, 0xaab4d7d7, 0x3c00010},
2912{0x3c00000, 0xaab4d7d8, 0x751f853a, 0x751f8539, 0x3c00010},
2913{0x3c00000, 0xaab4d7d8, 0x7f7ffff0, 0x7f7fffef, 0x3c00010},
2914{0x3c00000, 0xaab4d7d8, 0x7f7fffff, 0x7f7ffffe, 0x3c00010},
2915{0x3c00000, 0xaab4d7d8, 0x7f800000, 0x7f800000, 0x3c00000},
2916{0x3c00000, 0xaab4d7d8, 0x7f800001, 0x7fc00000, 0x3c00001},
2917{0x3c00000, 0xaab4d7d8, 0x7f984a37, 0x7fc00000, 0x3c00001},
2918{0x3c00000, 0xaab4d7d8, 0x7fbfffff, 0x7fc00000, 0x3c00001},
2919{0x3c00000, 0xaab4d7d8, 0x7fc00000, 0x7fc00000, 0x3c00000},
2920{0x3c00000, 0xaab4d7d8, 0x7fd9ba98, 0x7fc00000, 0x3c00000},
2921{0x3c00000, 0xaab4d7d8, 0x7fffffff, 0x7fc00000, 0x3c00000},
2922{0x3c00000, 0xaab4d7d8, 0x80000000, 0xaab4d7d8, 0x3c00000},
2923{0x3c00000, 0xaab4d7d8, 0x80000001, 0xaab4d7d8, 0x3c00080},
2924{0x3c00000, 0xaab4d7d8, 0x80000076, 0xaab4d7d8, 0x3c00080},
2925{0x3c00000, 0xaab4d7d8, 0x80002b94, 0xaab4d7d8, 0x3c00080},
2926{0x3c00000, 0xaab4d7d8, 0x80636d24, 0xaab4d7d8, 0x3c00080},
2927{0x3c00000, 0xaab4d7d8, 0x807fffff, 0xaab4d7d8, 0x3c00080},
2928{0x3c00000, 0xaab4d7d8, 0x80800000, 0xaab4d7d8, 0x3c00010},
2929{0x3c00000, 0xaab4d7d8, 0x80800002, 0xaab4d7d8, 0x3c00010},
2930{0x3c00000, 0xaab4d7d8, 0x81398437, 0xaab4d7d8, 0x3c00010},
2931{0x3c00000, 0xaab4d7d8, 0x8ba98d27, 0xaab4d7d8, 0x3c00010},
2932{0x3c00000, 0xaab4d7d8, 0x8ba98d7a, 0xaab4d7d8, 0x3c00010},
2933{0x3c00000, 0xaab4d7d8, 0xf51f853a, 0xf51f853a, 0x3c00010},
2934{0x3c00000, 0xaab4d7d8, 0xff7ffff0, 0xff7ffff0, 0x3c00010},
2935{0x3c00000, 0xaab4d7d8, 0xff7fffff, 0xff7fffff, 0x3c00010},
2936{0x3c00000, 0xaab4d7d8, 0xff800000, 0xff800000, 0x3c00000},
2937{0x3c00000, 0xaab4d7d8, 0xff800001, 0x7fc00000, 0x3c00001},
2938{0x3c00000, 0xaab4d7d8, 0xff984a37, 0x7fc00000, 0x3c00001},
2939{0x3c00000, 0xaab4d7d8, 0xffbfffff, 0x7fc00000, 0x3c00001},
2940{0x3c00000, 0xaab4d7d8, 0xffc00000, 0x7fc00000, 0x3c00000},
2941{0x3c00000, 0xaab4d7d8, 0xffd9ba98, 0x7fc00000, 0x3c00000},
2942{0x3c00000, 0xaab4d7d8, 0xffffffff, 0x7fc00000, 0x3c00000},
2943{0x3c00000, 0xaab4d7d8, 0x4f3495cb, 0x4f3495ca, 0x3c00010},
2944{0x3c00000, 0xaab4d7d8, 0xe73a5134, 0xe73a5134, 0x3c00010},
2945{0x3c00000, 0xaab4d7d8, 0x7c994e9e, 0x7c994e9d, 0x3c00010},
2946{0x3c00000, 0xaab4d7d8, 0x6164bd6c, 0x6164bd6b, 0x3c00010},
2947{0x3c00000, 0xaab4d7d8, 0x9503366, 0xaab4d7d7, 0x3c00010},
2948{0x3c00000, 0xaab4d7d8, 0xbf5a97c9, 0xbf5a97c9, 0x3c00010},
2949{0x3c00000, 0xaab4d7d8, 0xe6ff1a14, 0xe6ff1a14, 0x3c00010},
2950{0x3c00000, 0xaab4d7d8, 0x77f31e2f, 0x77f31e2e, 0x3c00010},
2951{0x3c00000, 0xaab4d7d8, 0xaab4d7d8, 0xab34d7d8, 0x3c00000},
2952{0x3c00000, 0xaab4d7d8, 0x966320b, 0xaab4d7d7, 0x3c00010},
2953{0x3c00000, 0xaab4d7d8, 0xb26bddee, 0xb26bdf57, 0x3c00010},
2954{0x3c00000, 0xaab4d7d8, 0xb5c8e5d3, 0xb5c8e5d5, 0x3c00010},
2955{0x3c00000, 0xaab4d7d8, 0x317285d3, 0x3172802c, 0x3c00010},
2956{0x3c00000, 0xaab4d7d8, 0x3c9623b1, 0x3c9623b0, 0x3c00010},
2957{0x3c00000, 0xaab4d7d8, 0x51fd2c7c, 0x51fd2c7b, 0x3c00010},
2958{0x3c00000, 0xaab4d7d8, 0x7b906a6c, 0x7b906a6b, 0x3c00010},
2959{0x3c00000, 0x966320b, 0x0, 0x966320b, 0x3c00000},
2960{0x3c00000, 0x966320b, 0x1, 0x966320b, 0x3c00080},
2961{0x3c00000, 0x966320b, 0x76, 0x966320b, 0x3c00080},
2962{0x3c00000, 0x966320b, 0x2b94, 0x966320b, 0x3c00080},
2963{0x3c00000, 0x966320b, 0x636d24, 0x966320b, 0x3c00080},
2964{0x3c00000, 0x966320b, 0x7fffff, 0x966320b, 0x3c00080},
2965{0x3c00000, 0x966320b, 0x800000, 0x966324b, 0x3c00000},
2966{0x3c00000, 0x966320b, 0x800002, 0x966324b, 0x3c00010},
2967{0x3c00000, 0x966320b, 0x1398437, 0x96632c4, 0x3c00010},
2968{0x3c00000, 0x966320b, 0xba98d27, 0xbb0beb7, 0x3c00010},
2969{0x3c00000, 0x966320b, 0xba98d7a, 0xbb0bf0a, 0x3c00010},
2970{0x3c00000, 0x966320b, 0x751f853a, 0x751f853a, 0x3c00010},
2971{0x3c00000, 0x966320b, 0x7f7ffff0, 0x7f7ffff0, 0x3c00010},
2972{0x3c00000, 0x966320b, 0x7f7fffff, 0x7f7fffff, 0x3c00010},
2973{0x3c00000, 0x966320b, 0x7f800000, 0x7f800000, 0x3c00000},
2974{0x3c00000, 0x966320b, 0x7f800001, 0x7fc00000, 0x3c00001},
2975{0x3c00000, 0x966320b, 0x7f984a37, 0x7fc00000, 0x3c00001},
2976{0x3c00000, 0x966320b, 0x7fbfffff, 0x7fc00000, 0x3c00001},
2977{0x3c00000, 0x966320b, 0x7fc00000, 0x7fc00000, 0x3c00000},
2978{0x3c00000, 0x966320b, 0x7fd9ba98, 0x7fc00000, 0x3c00000},
2979{0x3c00000, 0x966320b, 0x7fffffff, 0x7fc00000, 0x3c00000},
2980{0x3c00000, 0x966320b, 0x80000000, 0x966320b, 0x3c00000},
2981{0x3c00000, 0x966320b, 0x80000001, 0x966320b, 0x3c00080},
2982{0x3c00000, 0x966320b, 0x80000076, 0x966320b, 0x3c00080},
2983{0x3c00000, 0x966320b, 0x80002b94, 0x966320b, 0x3c00080},
2984{0x3c00000, 0x966320b, 0x80636d24, 0x966320b, 0x3c00080},
2985{0x3c00000, 0x966320b, 0x807fffff, 0x966320b, 0x3c00080},
2986{0x3c00000, 0x966320b, 0x80800000, 0x96631cb, 0x3c00000},
2987{0x3c00000, 0x966320b, 0x80800002, 0x96631ca, 0x3c00010},
2988{0x3c00000, 0x966320b, 0x81398437, 0x9663151, 0x3c00010},
2989{0x3c00000, 0x966320b, 0x8ba98d27, 0x8ba25b96, 0x3c00010},
2990{0x3c00000, 0x966320b, 0x8ba98d7a, 0x8ba25be9, 0x3c00010},
2991{0x3c00000, 0x966320b, 0xf51f853a, 0xf51f8539, 0x3c00010},
2992{0x3c00000, 0x966320b, 0xff7ffff0, 0xff7fffef, 0x3c00010},
2993{0x3c00000, 0x966320b, 0xff7fffff, 0xff7ffffe, 0x3c00010},
2994{0x3c00000, 0x966320b, 0xff800000, 0xff800000, 0x3c00000},
2995{0x3c00000, 0x966320b, 0xff800001, 0x7fc00000, 0x3c00001},
2996{0x3c00000, 0x966320b, 0xff984a37, 0x7fc00000, 0x3c00001},
2997{0x3c00000, 0x966320b, 0xffbfffff, 0x7fc00000, 0x3c00001},
2998{0x3c00000, 0x966320b, 0xffc00000, 0x7fc00000, 0x3c00000},
2999{0x3c00000, 0x966320b, 0xffd9ba98, 0x7fc00000, 0x3c00000},
3000{0x3c00000, 0x966320b, 0xffffffff, 0x7fc00000, 0x3c00000},
3001{0x3c00000, 0x966320b, 0x4f3495cb, 0x4f3495cb, 0x3c00010},
3002{0x3c00000, 0x966320b, 0xe73a5134, 0xe73a5133, 0x3c00010},
3003{0x3c00000, 0x966320b, 0x7c994e9e, 0x7c994e9e, 0x3c00010},
3004{0x3c00000, 0x966320b, 0x6164bd6c, 0x6164bd6c, 0x3c00010},
3005{0x3c00000, 0x966320b, 0x9503366, 0x9db32b8, 0x3c00010},
3006{0x3c00000, 0x966320b, 0xbf5a97c9, 0xbf5a97c8, 0x3c00010},
3007{0x3c00000, 0x966320b, 0xe6ff1a14, 0xe6ff1a13, 0x3c00010},
3008{0x3c00000, 0x966320b, 0x77f31e2f, 0x77f31e2f, 0x3c00010},
3009{0x3c00000, 0x966320b, 0xaab4d7d8, 0xaab4d7d7, 0x3c00010},
3010{0x3c00000, 0x966320b, 0x966320b, 0x9e6320b, 0x3c00000},
3011{0x3c00000, 0x966320b, 0xb26bddee, 0xb26bdded, 0x3c00010},
3012{0x3c00000, 0x966320b, 0xb5c8e5d3, 0xb5c8e5d2, 0x3c00010},
3013{0x3c00000, 0x966320b, 0x317285d3, 0x317285d3, 0x3c00010},
3014{0x3c00000, 0x966320b, 0x3c9623b1, 0x3c9623b1, 0x3c00010},
3015{0x3c00000, 0x966320b, 0x51fd2c7c, 0x51fd2c7c, 0x3c00010},
3016{0x3c00000, 0x966320b, 0x7b906a6c, 0x7b906a6c, 0x3c00010},
3017{0x3c00000, 0xb26bddee, 0x0, 0xb26bddee, 0x3c00000},
3018{0x3c00000, 0xb26bddee, 0x1, 0xb26bddee, 0x3c00080},
3019{0x3c00000, 0xb26bddee, 0x76, 0xb26bddee, 0x3c00080},
3020{0x3c00000, 0xb26bddee, 0x2b94, 0xb26bddee, 0x3c00080},
3021{0x3c00000, 0xb26bddee, 0x636d24, 0xb26bddee, 0x3c00080},
3022{0x3c00000, 0xb26bddee, 0x7fffff, 0xb26bddee, 0x3c00080},
3023{0x3c00000, 0xb26bddee, 0x800000, 0xb26bdded, 0x3c00010},
3024{0x3c00000, 0xb26bddee, 0x800002, 0xb26bdded, 0x3c00010},
3025{0x3c00000, 0xb26bddee, 0x1398437, 0xb26bdded, 0x3c00010},
3026{0x3c00000, 0xb26bddee, 0xba98d27, 0xb26bdded, 0x3c00010},
3027{0x3c00000, 0xb26bddee, 0xba98d7a, 0xb26bdded, 0x3c00010},
3028{0x3c00000, 0xb26bddee, 0x751f853a, 0x751f8539, 0x3c00010},
3029{0x3c00000, 0xb26bddee, 0x7f7ffff0, 0x7f7fffef, 0x3c00010},
3030{0x3c00000, 0xb26bddee, 0x7f7fffff, 0x7f7ffffe, 0x3c00010},
3031{0x3c00000, 0xb26bddee, 0x7f800000, 0x7f800000, 0x3c00000},
3032{0x3c00000, 0xb26bddee, 0x7f800001, 0x7fc00000, 0x3c00001},
3033{0x3c00000, 0xb26bddee, 0x7f984a37, 0x7fc00000, 0x3c00001},
3034{0x3c00000, 0xb26bddee, 0x7fbfffff, 0x7fc00000, 0x3c00001},
3035{0x3c00000, 0xb26bddee, 0x7fc00000, 0x7fc00000, 0x3c00000},
3036{0x3c00000, 0xb26bddee, 0x7fd9ba98, 0x7fc00000, 0x3c00000},
3037{0x3c00000, 0xb26bddee, 0x7fffffff, 0x7fc00000, 0x3c00000},
3038{0x3c00000, 0xb26bddee, 0x80000000, 0xb26bddee, 0x3c00000},
3039{0x3c00000, 0xb26bddee, 0x80000001, 0xb26bddee, 0x3c00080},
3040{0x3c00000, 0xb26bddee, 0x80000076, 0xb26bddee, 0x3c00080},
3041{0x3c00000, 0xb26bddee, 0x80002b94, 0xb26bddee, 0x3c00080},
3042{0x3c00000, 0xb26bddee, 0x80636d24, 0xb26bddee, 0x3c00080},
3043{0x3c00000, 0xb26bddee, 0x807fffff, 0xb26bddee, 0x3c00080},
3044{0x3c00000, 0xb26bddee, 0x80800000, 0xb26bddee, 0x3c00010},
3045{0x3c00000, 0xb26bddee, 0x80800002, 0xb26bddee, 0x3c00010},
3046{0x3c00000, 0xb26bddee, 0x81398437, 0xb26bddee, 0x3c00010},
3047{0x3c00000, 0xb26bddee, 0x8ba98d27, 0xb26bddee, 0x3c00010},
3048{0x3c00000, 0xb26bddee, 0x8ba98d7a, 0xb26bddee, 0x3c00010},
3049{0x3c00000, 0xb26bddee, 0xf51f853a, 0xf51f853a, 0x3c00010},
3050{0x3c00000, 0xb26bddee, 0xff7ffff0, 0xff7ffff0, 0x3c00010},
3051{0x3c00000, 0xb26bddee, 0xff7fffff, 0xff7fffff, 0x3c00010},
3052{0x3c00000, 0xb26bddee, 0xff800000, 0xff800000, 0x3c00000},
3053{0x3c00000, 0xb26bddee, 0xff800001, 0x7fc00000, 0x3c00001},
3054{0x3c00000, 0xb26bddee, 0xff984a37, 0x7fc00000, 0x3c00001},
3055{0x3c00000, 0xb26bddee, 0xffbfffff, 0x7fc00000, 0x3c00001},
3056{0x3c00000, 0xb26bddee, 0xffc00000, 0x7fc00000, 0x3c00000},
3057{0x3c00000, 0xb26bddee, 0xffd9ba98, 0x7fc00000, 0x3c00000},
3058{0x3c00000, 0xb26bddee, 0xffffffff, 0x7fc00000, 0x3c00000},
3059{0x3c00000, 0xb26bddee, 0x4f3495cb, 0x4f3495ca, 0x3c00010},
3060{0x3c00000, 0xb26bddee, 0xe73a5134, 0xe73a5134, 0x3c00010},
3061{0x3c00000, 0xb26bddee, 0x7c994e9e, 0x7c994e9d, 0x3c00010},
3062{0x3c00000, 0xb26bddee, 0x6164bd6c, 0x6164bd6b, 0x3c00010},
3063{0x3c00000, 0xb26bddee, 0x9503366, 0xb26bdded, 0x3c00010},
3064{0x3c00000, 0xb26bddee, 0xbf5a97c9, 0xbf5a97c9, 0x3c00010},
3065{0x3c00000, 0xb26bddee, 0xe6ff1a14, 0xe6ff1a14, 0x3c00010},
3066{0x3c00000, 0xb26bddee, 0x77f31e2f, 0x77f31e2e, 0x3c00010},
3067{0x3c00000, 0xb26bddee, 0xaab4d7d8, 0xb26bdf57, 0x3c00010},
3068{0x3c00000, 0xb26bddee, 0x966320b, 0xb26bdded, 0x3c00010},
3069{0x3c00000, 0xb26bddee, 0xb26bddee, 0xb2ebddee, 0x3c00000},
3070{0x3c00000, 0xb26bddee, 0xb5c8e5d3, 0xb5cabd8e, 0x3c00010},
3071{0x3c00000, 0xb26bddee, 0x317285d3, 0xb22f3c79, 0x3c00010},
3072{0x3c00000, 0xb26bddee, 0x3c9623b1, 0x3c9623a9, 0x3c00010},
3073{0x3c00000, 0xb26bddee, 0x51fd2c7c, 0x51fd2c7b, 0x3c00010},
3074{0x3c00000, 0xb26bddee, 0x7b906a6c, 0x7b906a6b, 0x3c00010},
3075{0x3c00000, 0xb5c8e5d3, 0x0, 0xb5c8e5d3, 0x3c00000},
3076{0x3c00000, 0xb5c8e5d3, 0x1, 0xb5c8e5d3, 0x3c00080},
3077{0x3c00000, 0xb5c8e5d3, 0x76, 0xb5c8e5d3, 0x3c00080},
3078{0x3c00000, 0xb5c8e5d3, 0x2b94, 0xb5c8e5d3, 0x3c00080},
3079{0x3c00000, 0xb5c8e5d3, 0x636d24, 0xb5c8e5d3, 0x3c00080},
3080{0x3c00000, 0xb5c8e5d3, 0x7fffff, 0xb5c8e5d3, 0x3c00080},
3081{0x3c00000, 0xb5c8e5d3, 0x800000, 0xb5c8e5d2, 0x3c00010},
3082{0x3c00000, 0xb5c8e5d3, 0x800002, 0xb5c8e5d2, 0x3c00010},
3083{0x3c00000, 0xb5c8e5d3, 0x1398437, 0xb5c8e5d2, 0x3c00010},
3084{0x3c00000, 0xb5c8e5d3, 0xba98d27, 0xb5c8e5d2, 0x3c00010},
3085{0x3c00000, 0xb5c8e5d3, 0xba98d7a, 0xb5c8e5d2, 0x3c00010},
3086{0x3c00000, 0xb5c8e5d3, 0x751f853a, 0x751f8539, 0x3c00010},
3087{0x3c00000, 0xb5c8e5d3, 0x7f7ffff0, 0x7f7fffef, 0x3c00010},
3088{0x3c00000, 0xb5c8e5d3, 0x7f7fffff, 0x7f7ffffe, 0x3c00010},
3089{0x3c00000, 0xb5c8e5d3, 0x7f800000, 0x7f800000, 0x3c00000},
3090{0x3c00000, 0xb5c8e5d3, 0x7f800001, 0x7fc00000, 0x3c00001},
3091{0x3c00000, 0xb5c8e5d3, 0x7f984a37, 0x7fc00000, 0x3c00001},
3092{0x3c00000, 0xb5c8e5d3, 0x7fbfffff, 0x7fc00000, 0x3c00001},
3093{0x3c00000, 0xb5c8e5d3, 0x7fc00000, 0x7fc00000, 0x3c00000},
3094{0x3c00000, 0xb5c8e5d3, 0x7fd9ba98, 0x7fc00000, 0x3c00000},
3095{0x3c00000, 0xb5c8e5d3, 0x7fffffff, 0x7fc00000, 0x3c00000},
3096{0x3c00000, 0xb5c8e5d3, 0x80000000, 0xb5c8e5d3, 0x3c00000},
3097{0x3c00000, 0xb5c8e5d3, 0x80000001, 0xb5c8e5d3, 0x3c00080},
3098{0x3c00000, 0xb5c8e5d3, 0x80000076, 0xb5c8e5d3, 0x3c00080},
3099{0x3c00000, 0xb5c8e5d3, 0x80002b94, 0xb5c8e5d3, 0x3c00080},
3100{0x3c00000, 0xb5c8e5d3, 0x80636d24, 0xb5c8e5d3, 0x3c00080},
3101{0x3c00000, 0xb5c8e5d3, 0x807fffff, 0xb5c8e5d3, 0x3c00080},
3102{0x3c00000, 0xb5c8e5d3, 0x80800000, 0xb5c8e5d3, 0x3c00010},
3103{0x3c00000, 0xb5c8e5d3, 0x80800002, 0xb5c8e5d3, 0x3c00010},
3104{0x3c00000, 0xb5c8e5d3, 0x81398437, 0xb5c8e5d3, 0x3c00010},
3105{0x3c00000, 0xb5c8e5d3, 0x8ba98d27, 0xb5c8e5d3, 0x3c00010},
3106{0x3c00000, 0xb5c8e5d3, 0x8ba98d7a, 0xb5c8e5d3, 0x3c00010},
3107{0x3c00000, 0xb5c8e5d3, 0xf51f853a, 0xf51f853a, 0x3c00010},
3108{0x3c00000, 0xb5c8e5d3, 0xff7ffff0, 0xff7ffff0, 0x3c00010},
3109{0x3c00000, 0xb5c8e5d3, 0xff7fffff, 0xff7fffff, 0x3c00010},
3110{0x3c00000, 0xb5c8e5d3, 0xff800000, 0xff800000, 0x3c00000},
3111{0x3c00000, 0xb5c8e5d3, 0xff800001, 0x7fc00000, 0x3c00001},
3112{0x3c00000, 0xb5c8e5d3, 0xff984a37, 0x7fc00000, 0x3c00001},
3113{0x3c00000, 0xb5c8e5d3, 0xffbfffff, 0x7fc00000, 0x3c00001},
3114{0x3c00000, 0xb5c8e5d3, 0xffc00000, 0x7fc00000, 0x3c00000},
3115{0x3c00000, 0xb5c8e5d3, 0xffd9ba98, 0x7fc00000, 0x3c00000},
3116{0x3c00000, 0xb5c8e5d3, 0xffffffff, 0x7fc00000, 0x3c00000},
3117{0x3c00000, 0xb5c8e5d3, 0x4f3495cb, 0x4f3495ca, 0x3c00010},
3118{0x3c00000, 0xb5c8e5d3, 0xe73a5134, 0xe73a5134, 0x3c00010},
3119{0x3c00000, 0xb5c8e5d3, 0x7c994e9e, 0x7c994e9d, 0x3c00010},
3120{0x3c00000, 0xb5c8e5d3, 0x6164bd6c, 0x6164bd6b, 0x3c00010},
3121{0x3c00000, 0xb5c8e5d3, 0x9503366, 0xb5c8e5d2, 0x3c00010},
3122{0x3c00000, 0xb5c8e5d3, 0xbf5a97c9, 0xbf5a97e2, 0x3c00010},
3123{0x3c00000, 0xb5c8e5d3, 0xe6ff1a14, 0xe6ff1a14, 0x3c00010},
3124{0x3c00000, 0xb5c8e5d3, 0x77f31e2f, 0x77f31e2e, 0x3c00010},
3125{0x3c00000, 0xb5c8e5d3, 0xaab4d7d8, 0xb5c8e5d5, 0x3c00010},
3126{0x3c00000, 0xb5c8e5d3, 0x966320b, 0xb5c8e5d2, 0x3c00010},
3127{0x3c00000, 0xb5c8e5d3, 0xb26bddee, 0xb5cabd8e, 0x3c00010},
3128{0x3c00000, 0xb5c8e5d3, 0xb5c8e5d3, 0xb648e5d3, 0x3c00000},
3129{0x3c00000, 0xb5c8e5d3, 0x317285d3, 0xb5c86c90, 0x3c00010},
3130{0x3c00000, 0xb5c8e5d3, 0x3c9623b1, 0x3c96208d, 0x3c00010},
3131{0x3c00000, 0xb5c8e5d3, 0x51fd2c7c, 0x51fd2c7b, 0x3c00010},
3132{0x3c00000, 0xb5c8e5d3, 0x7b906a6c, 0x7b906a6b, 0x3c00010},
3133{0x3c00000, 0x317285d3, 0x0, 0x317285d3, 0x3c00000},
3134{0x3c00000, 0x317285d3, 0x1, 0x317285d3, 0x3c00080},
3135{0x3c00000, 0x317285d3, 0x76, 0x317285d3, 0x3c00080},
3136{0x3c00000, 0x317285d3, 0x2b94, 0x317285d3, 0x3c00080},
3137{0x3c00000, 0x317285d3, 0x636d24, 0x317285d3, 0x3c00080},
3138{0x3c00000, 0x317285d3, 0x7fffff, 0x317285d3, 0x3c00080},
3139{0x3c00000, 0x317285d3, 0x800000, 0x317285d3, 0x3c00010},
3140{0x3c00000, 0x317285d3, 0x800002, 0x317285d3, 0x3c00010},
3141{0x3c00000, 0x317285d3, 0x1398437, 0x317285d3, 0x3c00010},
3142{0x3c00000, 0x317285d3, 0xba98d27, 0x317285d3, 0x3c00010},
3143{0x3c00000, 0x317285d3, 0xba98d7a, 0x317285d3, 0x3c00010},
3144{0x3c00000, 0x317285d3, 0x751f853a, 0x751f853a, 0x3c00010},
3145{0x3c00000, 0x317285d3, 0x7f7ffff0, 0x7f7ffff0, 0x3c00010},
3146{0x3c00000, 0x317285d3, 0x7f7fffff, 0x7f7fffff, 0x3c00010},
3147{0x3c00000, 0x317285d3, 0x7f800000, 0x7f800000, 0x3c00000},
3148{0x3c00000, 0x317285d3, 0x7f800001, 0x7fc00000, 0x3c00001},
3149{0x3c00000, 0x317285d3, 0x7f984a37, 0x7fc00000, 0x3c00001},
3150{0x3c00000, 0x317285d3, 0x7fbfffff, 0x7fc00000, 0x3c00001},
3151{0x3c00000, 0x317285d3, 0x7fc00000, 0x7fc00000, 0x3c00000},
3152{0x3c00000, 0x317285d3, 0x7fd9ba98, 0x7fc00000, 0x3c00000},
3153{0x3c00000, 0x317285d3, 0x7fffffff, 0x7fc00000, 0x3c00000},
3154{0x3c00000, 0x317285d3, 0x80000000, 0x317285d3, 0x3c00000},
3155{0x3c00000, 0x317285d3, 0x80000001, 0x317285d3, 0x3c00080},
3156{0x3c00000, 0x317285d3, 0x80000076, 0x317285d3, 0x3c00080},
3157{0x3c00000, 0x317285d3, 0x80002b94, 0x317285d3, 0x3c00080},
3158{0x3c00000, 0x317285d3, 0x80636d24, 0x317285d3, 0x3c00080},
3159{0x3c00000, 0x317285d3, 0x807fffff, 0x317285d3, 0x3c00080},
3160{0x3c00000, 0x317285d3, 0x80800000, 0x317285d2, 0x3c00010},
3161{0x3c00000, 0x317285d3, 0x80800002, 0x317285d2, 0x3c00010},
3162{0x3c00000, 0x317285d3, 0x81398437, 0x317285d2, 0x3c00010},
3163{0x3c00000, 0x317285d3, 0x8ba98d27, 0x317285d2, 0x3c00010},
3164{0x3c00000, 0x317285d3, 0x8ba98d7a, 0x317285d2, 0x3c00010},
3165{0x3c00000, 0x317285d3, 0xf51f853a, 0xf51f8539, 0x3c00010},
3166{0x3c00000, 0x317285d3, 0xff7ffff0, 0xff7fffef, 0x3c00010},
3167{0x3c00000, 0x317285d3, 0xff7fffff, 0xff7ffffe, 0x3c00010},
3168{0x3c00000, 0x317285d3, 0xff800000, 0xff800000, 0x3c00000},
3169{0x3c00000, 0x317285d3, 0xff800001, 0x7fc00000, 0x3c00001},
3170{0x3c00000, 0x317285d3, 0xff984a37, 0x7fc00000, 0x3c00001},
3171{0x3c00000, 0x317285d3, 0xffbfffff, 0x7fc00000, 0x3c00001},
3172{0x3c00000, 0x317285d3, 0xffc00000, 0x7fc00000, 0x3c00000},
3173{0x3c00000, 0x317285d3, 0xffd9ba98, 0x7fc00000, 0x3c00000},
3174{0x3c00000, 0x317285d3, 0xffffffff, 0x7fc00000, 0x3c00000},
3175{0x3c00000, 0x317285d3, 0x4f3495cb, 0x4f3495cb, 0x3c00010},
3176{0x3c00000, 0x317285d3, 0xe73a5134, 0xe73a5133, 0x3c00010},
3177{0x3c00000, 0x317285d3, 0x7c994e9e, 0x7c994e9e, 0x3c00010},
3178{0x3c00000, 0x317285d3, 0x6164bd6c, 0x6164bd6c, 0x3c00010},
3179{0x3c00000, 0x317285d3, 0x9503366, 0x317285d3, 0x3c00010},
3180{0x3c00000, 0x317285d3, 0xbf5a97c9, 0xbf5a97c8, 0x3c00010},
3181{0x3c00000, 0x317285d3, 0xe6ff1a14, 0xe6ff1a13, 0x3c00010},
3182{0x3c00000, 0x317285d3, 0x77f31e2f, 0x77f31e2f, 0x3c00010},
3183{0x3c00000, 0x317285d3, 0xaab4d7d8, 0x3172802c, 0x3c00010},
3184{0x3c00000, 0x317285d3, 0x966320b, 0x317285d3, 0x3c00010},
3185{0x3c00000, 0x317285d3, 0xb26bddee, 0xb22f3c79, 0x3c00010},
3186{0x3c00000, 0x317285d3, 0xb5c8e5d3, 0xb5c86c90, 0x3c00010},
3187{0x3c00000, 0x317285d3, 0x317285d3, 0x31f285d3, 0x3c00000},
3188{0x3c00000, 0x317285d3, 0x3c9623b1, 0x3c9623b2, 0x3c00010},
3189{0x3c00000, 0x317285d3, 0x51fd2c7c, 0x51fd2c7c, 0x3c00010},
3190{0x3c00000, 0x317285d3, 0x7b906a6c, 0x7b906a6c, 0x3c00010},
3191{0x3c00000, 0x3c9623b1, 0x0, 0x3c9623b1, 0x3c00000},
3192{0x3c00000, 0x3c9623b1, 0x1, 0x3c9623b1, 0x3c00080},
3193{0x3c00000, 0x3c9623b1, 0x76, 0x3c9623b1, 0x3c00080},
3194{0x3c00000, 0x3c9623b1, 0x2b94, 0x3c9623b1, 0x3c00080},
3195{0x3c00000, 0x3c9623b1, 0x636d24, 0x3c9623b1, 0x3c00080},
3196{0x3c00000, 0x3c9623b1, 0x7fffff, 0x3c9623b1, 0x3c00080},
3197{0x3c00000, 0x3c9623b1, 0x800000, 0x3c9623b1, 0x3c00010},
3198{0x3c00000, 0x3c9623b1, 0x800002, 0x3c9623b1, 0x3c00010},
3199{0x3c00000, 0x3c9623b1, 0x1398437, 0x3c9623b1, 0x3c00010},
3200{0x3c00000, 0x3c9623b1, 0xba98d27, 0x3c9623b1, 0x3c00010},
3201{0x3c00000, 0x3c9623b1, 0xba98d7a, 0x3c9623b1, 0x3c00010},
3202{0x3c00000, 0x3c9623b1, 0x751f853a, 0x751f853a, 0x3c00010},
3203{0x3c00000, 0x3c9623b1, 0x7f7ffff0, 0x7f7ffff0, 0x3c00010},
3204{0x3c00000, 0x3c9623b1, 0x7f7fffff, 0x7f7fffff, 0x3c00010},
3205{0x3c00000, 0x3c9623b1, 0x7f800000, 0x7f800000, 0x3c00000},
3206{0x3c00000, 0x3c9623b1, 0x7f800001, 0x7fc00000, 0x3c00001},
3207{0x3c00000, 0x3c9623b1, 0x7f984a37, 0x7fc00000, 0x3c00001},
3208{0x3c00000, 0x3c9623b1, 0x7fbfffff, 0x7fc00000, 0x3c00001},
3209{0x3c00000, 0x3c9623b1, 0x7fc00000, 0x7fc00000, 0x3c00000},
3210{0x3c00000, 0x3c9623b1, 0x7fd9ba98, 0x7fc00000, 0x3c00000},
3211{0x3c00000, 0x3c9623b1, 0x7fffffff, 0x7fc00000, 0x3c00000},
3212{0x3c00000, 0x3c9623b1, 0x80000000, 0x3c9623b1, 0x3c00000},
3213{0x3c00000, 0x3c9623b1, 0x80000001, 0x3c9623b1, 0x3c00080},
3214{0x3c00000, 0x3c9623b1, 0x80000076, 0x3c9623b1, 0x3c00080},
3215{0x3c00000, 0x3c9623b1, 0x80002b94, 0x3c9623b1, 0x3c00080},
3216{0x3c00000, 0x3c9623b1, 0x80636d24, 0x3c9623b1, 0x3c00080},
3217{0x3c00000, 0x3c9623b1, 0x807fffff, 0x3c9623b1, 0x3c00080},
3218{0x3c00000, 0x3c9623b1, 0x80800000, 0x3c9623b0, 0x3c00010},
3219{0x3c00000, 0x3c9623b1, 0x80800002, 0x3c9623b0, 0x3c00010},
3220{0x3c00000, 0x3c9623b1, 0x81398437, 0x3c9623b0, 0x3c00010},
3221{0x3c00000, 0x3c9623b1, 0x8ba98d27, 0x3c9623b0, 0x3c00010},
3222{0x3c00000, 0x3c9623b1, 0x8ba98d7a, 0x3c9623b0, 0x3c00010},
3223{0x3c00000, 0x3c9623b1, 0xf51f853a, 0xf51f8539, 0x3c00010},
3224{0x3c00000, 0x3c9623b1, 0xff7ffff0, 0xff7fffef, 0x3c00010},
3225{0x3c00000, 0x3c9623b1, 0xff7fffff, 0xff7ffffe, 0x3c00010},
3226{0x3c00000, 0x3c9623b1, 0xff800000, 0xff800000, 0x3c00000},
3227{0x3c00000, 0x3c9623b1, 0xff800001, 0x7fc00000, 0x3c00001},
3228{0x3c00000, 0x3c9623b1, 0xff984a37, 0x7fc00000, 0x3c00001},
3229{0x3c00000, 0x3c9623b1, 0xffbfffff, 0x7fc00000, 0x3c00001},
3230{0x3c00000, 0x3c9623b1, 0xffc00000, 0x7fc00000, 0x3c00000},
3231{0x3c00000, 0x3c9623b1, 0xffd9ba98, 0x7fc00000, 0x3c00000},
3232{0x3c00000, 0x3c9623b1, 0xffffffff, 0x7fc00000, 0x3c00000},
3233{0x3c00000, 0x3c9623b1, 0x4f3495cb, 0x4f3495cb, 0x3c00010},
3234{0x3c00000, 0x3c9623b1, 0xe73a5134, 0xe73a5133, 0x3c00010},
3235{0x3c00000, 0x3c9623b1, 0x7c994e9e, 0x7c994e9e, 0x3c00010},
3236{0x3c00000, 0x3c9623b1, 0x6164bd6c, 0x6164bd6c, 0x3c00010},
3237{0x3c00000, 0x3c9623b1, 0x9503366, 0x3c9623b1, 0x3c00010},
3238{0x3c00000, 0x3c9623b1, 0xbf5a97c9, 0xbf55e6ab, 0x3c00010},
3239{0x3c00000, 0x3c9623b1, 0xe6ff1a14, 0xe6ff1a13, 0x3c00010},
3240{0x3c00000, 0x3c9623b1, 0x77f31e2f, 0x77f31e2f, 0x3c00010},
3241{0x3c00000, 0x3c9623b1, 0xaab4d7d8, 0x3c9623b0, 0x3c00010},
3242{0x3c00000, 0x3c9623b1, 0x966320b, 0x3c9623b1, 0x3c00010},
3243{0x3c00000, 0x3c9623b1, 0xb26bddee, 0x3c9623a9, 0x3c00010},
3244{0x3c00000, 0x3c9623b1, 0xb5c8e5d3, 0x3c96208d, 0x3c00010},
3245{0x3c00000, 0x3c9623b1, 0x317285d3, 0x3c9623b2, 0x3c00010},
3246{0x3c00000, 0x3c9623b1, 0x3c9623b1, 0x3d1623b1, 0x3c00000},
3247{0x3c00000, 0x3c9623b1, 0x51fd2c7c, 0x51fd2c7c, 0x3c00010},
3248{0x3c00000, 0x3c9623b1, 0x7b906a6c, 0x7b906a6c, 0x3c00010},
3249{0x3c00000, 0x51fd2c7c, 0x0, 0x51fd2c7c, 0x3c00000},
3250{0x3c00000, 0x51fd2c7c, 0x1, 0x51fd2c7c, 0x3c00080},
3251{0x3c00000, 0x51fd2c7c, 0x76, 0x51fd2c7c, 0x3c00080},
3252{0x3c00000, 0x51fd2c7c, 0x2b94, 0x51fd2c7c, 0x3c00080},
3253{0x3c00000, 0x51fd2c7c, 0x636d24, 0x51fd2c7c, 0x3c00080},
3254{0x3c00000, 0x51fd2c7c, 0x7fffff, 0x51fd2c7c, 0x3c00080},
3255{0x3c00000, 0x51fd2c7c, 0x800000, 0x51fd2c7c, 0x3c00010},
3256{0x3c00000, 0x51fd2c7c, 0x800002, 0x51fd2c7c, 0x3c00010},
3257{0x3c00000, 0x51fd2c7c, 0x1398437, 0x51fd2c7c, 0x3c00010},
3258{0x3c00000, 0x51fd2c7c, 0xba98d27, 0x51fd2c7c, 0x3c00010},
3259{0x3c00000, 0x51fd2c7c, 0xba98d7a, 0x51fd2c7c, 0x3c00010},
3260{0x3c00000, 0x51fd2c7c, 0x751f853a, 0x751f853a, 0x3c00010},
3261{0x3c00000, 0x51fd2c7c, 0x7f7ffff0, 0x7f7ffff0, 0x3c00010},
3262{0x3c00000, 0x51fd2c7c, 0x7f7fffff, 0x7f7fffff, 0x3c00010},
3263{0x3c00000, 0x51fd2c7c, 0x7f800000, 0x7f800000, 0x3c00000},
3264{0x3c00000, 0x51fd2c7c, 0x7f800001, 0x7fc00000, 0x3c00001},
3265{0x3c00000, 0x51fd2c7c, 0x7f984a37, 0x7fc00000, 0x3c00001},
3266{0x3c00000, 0x51fd2c7c, 0x7fbfffff, 0x7fc00000, 0x3c00001},
3267{0x3c00000, 0x51fd2c7c, 0x7fc00000, 0x7fc00000, 0x3c00000},
3268{0x3c00000, 0x51fd2c7c, 0x7fd9ba98, 0x7fc00000, 0x3c00000},
3269{0x3c00000, 0x51fd2c7c, 0x7fffffff, 0x7fc00000, 0x3c00000},
3270{0x3c00000, 0x51fd2c7c, 0x80000000, 0x51fd2c7c, 0x3c00000},
3271{0x3c00000, 0x51fd2c7c, 0x80000001, 0x51fd2c7c, 0x3c00080},
3272{0x3c00000, 0x51fd2c7c, 0x80000076, 0x51fd2c7c, 0x3c00080},
3273{0x3c00000, 0x51fd2c7c, 0x80002b94, 0x51fd2c7c, 0x3c00080},
3274{0x3c00000, 0x51fd2c7c, 0x80636d24, 0x51fd2c7c, 0x3c00080},
3275{0x3c00000, 0x51fd2c7c, 0x807fffff, 0x51fd2c7c, 0x3c00080},
3276{0x3c00000, 0x51fd2c7c, 0x80800000, 0x51fd2c7b, 0x3c00010},
3277{0x3c00000, 0x51fd2c7c, 0x80800002, 0x51fd2c7b, 0x3c00010},
3278{0x3c00000, 0x51fd2c7c, 0x81398437, 0x51fd2c7b, 0x3c00010},
3279{0x3c00000, 0x51fd2c7c, 0x8ba98d27, 0x51fd2c7b, 0x3c00010},
3280{0x3c00000, 0x51fd2c7c, 0x8ba98d7a, 0x51fd2c7b, 0x3c00010},
3281{0x3c00000, 0x51fd2c7c, 0xf51f853a, 0xf51f8539, 0x3c00010},
3282{0x3c00000, 0x51fd2c7c, 0xff7ffff0, 0xff7fffef, 0x3c00010},
3283{0x3c00000, 0x51fd2c7c, 0xff7fffff, 0xff7ffffe, 0x3c00010},
3284{0x3c00000, 0x51fd2c7c, 0xff800000, 0xff800000, 0x3c00000},
3285{0x3c00000, 0x51fd2c7c, 0xff800001, 0x7fc00000, 0x3c00001},
3286{0x3c00000, 0x51fd2c7c, 0xff984a37, 0x7fc00000, 0x3c00001},
3287{0x3c00000, 0x51fd2c7c, 0xffbfffff, 0x7fc00000, 0x3c00001},
3288{0x3c00000, 0x51fd2c7c, 0xffc00000, 0x7fc00000, 0x3c00000},
3289{0x3c00000, 0x51fd2c7c, 0xffd9ba98, 0x7fc00000, 0x3c00000},
3290{0x3c00000, 0x51fd2c7c, 0xffffffff, 0x7fc00000, 0x3c00000},
3291{0x3c00000, 0x51fd2c7c, 0x4f3495cb, 0x52016895, 0x3c00010},
3292{0x3c00000, 0x51fd2c7c, 0xe73a5134, 0xe73a5133, 0x3c00010},
3293{0x3c00000, 0x51fd2c7c, 0x7c994e9e, 0x7c994e9e, 0x3c00010},
3294{0x3c00000, 0x51fd2c7c, 0x6164bd6c, 0x6164bd6c, 0x3c00010},
3295{0x3c00000, 0x51fd2c7c, 0x9503366, 0x51fd2c7c, 0x3c00010},
3296{0x3c00000, 0x51fd2c7c, 0xbf5a97c9, 0x51fd2c7b, 0x3c00010},
3297{0x3c00000, 0x51fd2c7c, 0xe6ff1a14, 0xe6ff1a13, 0x3c00010},
3298{0x3c00000, 0x51fd2c7c, 0x77f31e2f, 0x77f31e2f, 0x3c00010},
3299{0x3c00000, 0x51fd2c7c, 0xaab4d7d8, 0x51fd2c7b, 0x3c00010},
3300{0x3c00000, 0x51fd2c7c, 0x966320b, 0x51fd2c7c, 0x3c00010},
3301{0x3c00000, 0x51fd2c7c, 0xb26bddee, 0x51fd2c7b, 0x3c00010},
3302{0x3c00000, 0x51fd2c7c, 0xb5c8e5d3, 0x51fd2c7b, 0x3c00010},
3303{0x3c00000, 0x51fd2c7c, 0x317285d3, 0x51fd2c7c, 0x3c00010},
3304{0x3c00000, 0x51fd2c7c, 0x3c9623b1, 0x51fd2c7c, 0x3c00010},
3305{0x3c00000, 0x51fd2c7c, 0x51fd2c7c, 0x527d2c7c, 0x3c00000},
3306{0x3c00000, 0x51fd2c7c, 0x7b906a6c, 0x7b906a6c, 0x3c00010},
3307{0x3c00000, 0x7b906a6c, 0x0, 0x7b906a6c, 0x3c00000},
3308{0x3c00000, 0x7b906a6c, 0x1, 0x7b906a6c, 0x3c00080},
3309{0x3c00000, 0x7b906a6c, 0x76, 0x7b906a6c, 0x3c00080},
3310{0x3c00000, 0x7b906a6c, 0x2b94, 0x7b906a6c, 0x3c00080},
3311{0x3c00000, 0x7b906a6c, 0x636d24, 0x7b906a6c, 0x3c00080},
3312{0x3c00000, 0x7b906a6c, 0x7fffff, 0x7b906a6c, 0x3c00080},
3313{0x3c00000, 0x7b906a6c, 0x800000, 0x7b906a6c, 0x3c00010},
3314{0x3c00000, 0x7b906a6c, 0x800002, 0x7b906a6c, 0x3c00010},
3315{0x3c00000, 0x7b906a6c, 0x1398437, 0x7b906a6c, 0x3c00010},
3316{0x3c00000, 0x7b906a6c, 0xba98d27, 0x7b906a6c, 0x3c00010},
3317{0x3c00000, 0x7b906a6c, 0xba98d7a, 0x7b906a6c, 0x3c00010},
3318{0x3c00000, 0x7b906a6c, 0x751f853a, 0x7b906f68, 0x3c00010},
3319{0x3c00000, 0x7b906a6c, 0x7f7ffff0, 0x7f7fffff, 0x3c00014},
3320{0x3c00000, 0x7b906a6c, 0x7f7fffff, 0x7f7fffff, 0x3c00014},
3321{0x3c00000, 0x7b906a6c, 0x7f800000, 0x7f800000, 0x3c00000},
3322{0x3c00000, 0x7b906a6c, 0x7f800001, 0x7fc00000, 0x3c00001},
3323{0x3c00000, 0x7b906a6c, 0x7f984a37, 0x7fc00000, 0x3c00001},
3324{0x3c00000, 0x7b906a6c, 0x7fbfffff, 0x7fc00000, 0x3c00001},
3325{0x3c00000, 0x7b906a6c, 0x7fc00000, 0x7fc00000, 0x3c00000},
3326{0x3c00000, 0x7b906a6c, 0x7fd9ba98, 0x7fc00000, 0x3c00000},
3327{0x3c00000, 0x7b906a6c, 0x7fffffff, 0x7fc00000, 0x3c00000},
3328{0x3c00000, 0x7b906a6c, 0x80000000, 0x7b906a6c, 0x3c00000},
3329{0x3c00000, 0x7b906a6c, 0x80000001, 0x7b906a6c, 0x3c00080},
3330{0x3c00000, 0x7b906a6c, 0x80000076, 0x7b906a6c, 0x3c00080},
3331{0x3c00000, 0x7b906a6c, 0x80002b94, 0x7b906a6c, 0x3c00080},
3332{0x3c00000, 0x7b906a6c, 0x80636d24, 0x7b906a6c, 0x3c00080},
3333{0x3c00000, 0x7b906a6c, 0x807fffff, 0x7b906a6c, 0x3c00080},
3334{0x3c00000, 0x7b906a6c, 0x80800000, 0x7b906a6b, 0x3c00010},
3335{0x3c00000, 0x7b906a6c, 0x80800002, 0x7b906a6b, 0x3c00010},
3336{0x3c00000, 0x7b906a6c, 0x81398437, 0x7b906a6b, 0x3c00010},
3337{0x3c00000, 0x7b906a6c, 0x8ba98d27, 0x7b906a6b, 0x3c00010},
3338{0x3c00000, 0x7b906a6c, 0x8ba98d7a, 0x7b906a6b, 0x3c00010},
3339{0x3c00000, 0x7b906a6c, 0xf51f853a, 0x7b90656f, 0x3c00010},
3340{0x3c00000, 0x7b906a6c, 0xff7ffff0, 0xff7edf1b, 0x3c00010},
3341{0x3c00000, 0x7b906a6c, 0xff7fffff, 0xff7edf2a, 0x3c00010},
3342{0x3c00000, 0x7b906a6c, 0xff800000, 0xff800000, 0x3c00000},
3343{0x3c00000, 0x7b906a6c, 0xff800001, 0x7fc00000, 0x3c00001},
3344{0x3c00000, 0x7b906a6c, 0xff984a37, 0x7fc00000, 0x3c00001},
3345{0x3c00000, 0x7b906a6c, 0xffbfffff, 0x7fc00000, 0x3c00001},
3346{0x3c00000, 0x7b906a6c, 0xffc00000, 0x7fc00000, 0x3c00000},
3347{0x3c00000, 0x7b906a6c, 0xffd9ba98, 0x7fc00000, 0x3c00000},
3348{0x3c00000, 0x7b906a6c, 0xffffffff, 0x7fc00000, 0x3c00000},
3349{0x3c00000, 0x7b906a6c, 0x4f3495cb, 0x7b906a6c, 0x3c00010},
3350{0x3c00000, 0x7b906a6c, 0xe73a5134, 0x7b906a6b, 0x3c00010},
3351{0x3c00000, 0x7b906a6c, 0x7c994e9e, 0x7cbd6939, 0x3c00000},
3352{0x3c00000, 0x7b906a6c, 0x6164bd6c, 0x7b906a6c, 0x3c00010},
3353{0x3c00000, 0x7b906a6c, 0x9503366, 0x7b906a6c, 0x3c00010},
3354{0x3c00000, 0x7b906a6c, 0xbf5a97c9, 0x7b906a6b, 0x3c00010},
3355{0x3c00000, 0x7b906a6c, 0xe6ff1a14, 0x7b906a6b, 0x3c00010},
3356{0x3c00000, 0x7b906a6c, 0x77f31e2f, 0x7b915d8a, 0x3c00010},
3357{0x3c00000, 0x7b906a6c, 0xaab4d7d8, 0x7b906a6b, 0x3c00010},
3358{0x3c00000, 0x7b906a6c, 0x966320b, 0x7b906a6c, 0x3c00010},
3359{0x3c00000, 0x7b906a6c, 0xb26bddee, 0x7b906a6b, 0x3c00010},
3360{0x3c00000, 0x7b906a6c, 0xb5c8e5d3, 0x7b906a6b, 0x3c00010},
3361{0x3c00000, 0x7b906a6c, 0x317285d3, 0x7b906a6c, 0x3c00010},
3362{0x3c00000, 0x7b906a6c, 0x3c9623b1, 0x7b906a6c, 0x3c00010},
3363{0x3c00000, 0x7b906a6c, 0x51fd2c7c, 0x7b906a6c, 0x3c00010},
3364{0x3c00000, 0x7b906a6c, 0x7b906a6c, 0x7c106a6c, 0x3c00000},
3365{0x3800000, 0x0, 0x0, 0x0, 0x3800000},
3366{0x3800000, 0x0, 0x1, 0x0, 0x3800080},
3367{0x3800000, 0x0, 0x76, 0x0, 0x3800080},
3368{0x3800000, 0x0, 0x2b94, 0x0, 0x3800080},
3369{0x3800000, 0x0, 0x636d24, 0x0, 0x3800080},
3370{0x3800000, 0x0, 0x7fffff, 0x0, 0x3800080},
3371{0x3800000, 0x0, 0x800000, 0x800000, 0x3800000},
3372{0x3800000, 0x0, 0x800002, 0x800002, 0x3800000},
3373{0x3800000, 0x0, 0x1398437, 0x1398437, 0x3800000},
3374{0x3800000, 0x0, 0xba98d27, 0xba98d27, 0x3800000},
3375{0x3800000, 0x0, 0xba98d7a, 0xba98d7a, 0x3800000},
3376{0x3800000, 0x0, 0x751f853a, 0x751f853a, 0x3800000},
3377{0x3800000, 0x0, 0x7f7ffff0, 0x7f7ffff0, 0x3800000},
3378{0x3800000, 0x0, 0x7f7fffff, 0x7f7fffff, 0x3800000},
3379{0x3800000, 0x0, 0x7f800000, 0x7f800000, 0x3800000},
3380{0x3800000, 0x0, 0x7f800001, 0x7fc00000, 0x3800001},
3381{0x3800000, 0x0, 0x7f984a37, 0x7fc00000, 0x3800001},
3382{0x3800000, 0x0, 0x7fbfffff, 0x7fc00000, 0x3800001},
3383{0x3800000, 0x0, 0x7fc00000, 0x7fc00000, 0x3800000},
3384{0x3800000, 0x0, 0x7fd9ba98, 0x7fc00000, 0x3800000},
3385{0x3800000, 0x0, 0x7fffffff, 0x7fc00000, 0x3800000},
3386{0x3800000, 0x0, 0x80000000, 0x80000000, 0x3800000},
3387{0x3800000, 0x0, 0x80000001, 0x0, 0x3800080},
3388{0x3800000, 0x0, 0x80000076, 0x0, 0x3800080},
3389{0x3800000, 0x0, 0x80002b94, 0x0, 0x3800080},
3390{0x3800000, 0x0, 0x80636d24, 0x0, 0x3800080},
3391{0x3800000, 0x0, 0x807fffff, 0x0, 0x3800080},
3392{0x3800000, 0x0, 0x80800000, 0x80800000, 0x3800000},
3393{0x3800000, 0x0, 0x80800002, 0x80800002, 0x3800000},
3394{0x3800000, 0x0, 0x81398437, 0x81398437, 0x3800000},
3395{0x3800000, 0x0, 0x8ba98d27, 0x8ba98d27, 0x3800000},
3396{0x3800000, 0x0, 0x8ba98d7a, 0x8ba98d7a, 0x3800000},
3397{0x3800000, 0x0, 0xf51f853a, 0xf51f853a, 0x3800000},
3398{0x3800000, 0x0, 0xff7ffff0, 0xff7ffff0, 0x3800000},
3399{0x3800000, 0x0, 0xff7fffff, 0xff7fffff, 0x3800000},
3400{0x3800000, 0x0, 0xff800000, 0xff800000, 0x3800000},
3401{0x3800000, 0x0, 0xff800001, 0x7fc00000, 0x3800001},
3402{0x3800000, 0x0, 0xff984a37, 0x7fc00000, 0x3800001},
3403{0x3800000, 0x0, 0xffbfffff, 0x7fc00000, 0x3800001},
3404{0x3800000, 0x0, 0xffc00000, 0x7fc00000, 0x3800000},
3405{0x3800000, 0x0, 0xffd9ba98, 0x7fc00000, 0x3800000},
3406{0x3800000, 0x0, 0xffffffff, 0x7fc00000, 0x3800000},
3407{0x3800000, 0x0, 0x4f3495cb, 0x4f3495cb, 0x3800000},
3408{0x3800000, 0x0, 0xe73a5134, 0xe73a5134, 0x3800000},
3409{0x3800000, 0x0, 0x7c994e9e, 0x7c994e9e, 0x3800000},
3410{0x3800000, 0x0, 0x6164bd6c, 0x6164bd6c, 0x3800000},
3411{0x3800000, 0x0, 0x9503366, 0x9503366, 0x3800000},
3412{0x3800000, 0x0, 0xbf5a97c9, 0xbf5a97c9, 0x3800000},
3413{0x3800000, 0x0, 0xe6ff1a14, 0xe6ff1a14, 0x3800000},
3414{0x3800000, 0x0, 0x77f31e2f, 0x77f31e2f, 0x3800000},
3415{0x3800000, 0x0, 0xaab4d7d8, 0xaab4d7d8, 0x3800000},
3416{0x3800000, 0x0, 0x966320b, 0x966320b, 0x3800000},
3417{0x3800000, 0x0, 0xb26bddee, 0xb26bddee, 0x3800000},
3418{0x3800000, 0x0, 0xb5c8e5d3, 0xb5c8e5d3, 0x3800000},
3419{0x3800000, 0x0, 0x317285d3, 0x317285d3, 0x3800000},
3420{0x3800000, 0x0, 0x3c9623b1, 0x3c9623b1, 0x3800000},
3421{0x3800000, 0x0, 0x51fd2c7c, 0x51fd2c7c, 0x3800000},
3422{0x3800000, 0x0, 0x7b906a6c, 0x7b906a6c, 0x3800000},
3423{0x3800000, 0x1, 0x0, 0x0, 0x3800080},
3424{0x3800000, 0x1, 0x1, 0x0, 0x3800080},
3425{0x3800000, 0x1, 0x76, 0x0, 0x3800080},
3426{0x3800000, 0x1, 0x2b94, 0x0, 0x3800080},
3427{0x3800000, 0x1, 0x636d24, 0x0, 0x3800080},
3428{0x3800000, 0x1, 0x7fffff, 0x0, 0x3800080},
3429{0x3800000, 0x1, 0x800000, 0x800000, 0x3800080},
3430{0x3800000, 0x1, 0x800002, 0x800002, 0x3800080},
3431{0x3800000, 0x1, 0x1398437, 0x1398437, 0x3800080},
3432{0x3800000, 0x1, 0xba98d27, 0xba98d27, 0x3800080},
3433{0x3800000, 0x1, 0xba98d7a, 0xba98d7a, 0x3800080},
3434{0x3800000, 0x1, 0x751f853a, 0x751f853a, 0x3800080},
3435{0x3800000, 0x1, 0x7f7ffff0, 0x7f7ffff0, 0x3800080},
3436{0x3800000, 0x1, 0x7f7fffff, 0x7f7fffff, 0x3800080},
3437{0x3800000, 0x1, 0x7f800000, 0x7f800000, 0x3800080},
3438{0x3800000, 0x1, 0x7f800001, 0x7fc00000, 0x3800081},
3439{0x3800000, 0x1, 0x7f984a37, 0x7fc00000, 0x3800081},
3440{0x3800000, 0x1, 0x7fbfffff, 0x7fc00000, 0x3800081},
3441{0x3800000, 0x1, 0x7fc00000, 0x7fc00000, 0x3800080},
3442{0x3800000, 0x1, 0x7fd9ba98, 0x7fc00000, 0x3800080},
3443{0x3800000, 0x1, 0x7fffffff, 0x7fc00000, 0x3800080},
3444{0x3800000, 0x1, 0x80000000, 0x80000000, 0x3800080},
3445{0x3800000, 0x1, 0x80000001, 0x0, 0x3800080},
3446{0x3800000, 0x1, 0x80000076, 0x0, 0x3800080},
3447{0x3800000, 0x1, 0x80002b94, 0x0, 0x3800080},
3448{0x3800000, 0x1, 0x80636d24, 0x0, 0x3800080},
3449{0x3800000, 0x1, 0x807fffff, 0x0, 0x3800080},
3450{0x3800000, 0x1, 0x80800000, 0x80800000, 0x3800080},
3451{0x3800000, 0x1, 0x80800002, 0x80800002, 0x3800080},
3452{0x3800000, 0x1, 0x81398437, 0x81398437, 0x3800080},
3453{0x3800000, 0x1, 0x8ba98d27, 0x8ba98d27, 0x3800080},
3454{0x3800000, 0x1, 0x8ba98d7a, 0x8ba98d7a, 0x3800080},
3455{0x3800000, 0x1, 0xf51f853a, 0xf51f853a, 0x3800080},
3456{0x3800000, 0x1, 0xff7ffff0, 0xff7ffff0, 0x3800080},
3457{0x3800000, 0x1, 0xff7fffff, 0xff7fffff, 0x3800080},
3458{0x3800000, 0x1, 0xff800000, 0xff800000, 0x3800080},
3459{0x3800000, 0x1, 0xff800001, 0x7fc00000, 0x3800081},
3460{0x3800000, 0x1, 0xff984a37, 0x7fc00000, 0x3800081},
3461{0x3800000, 0x1, 0xffbfffff, 0x7fc00000, 0x3800081},
3462{0x3800000, 0x1, 0xffc00000, 0x7fc00000, 0x3800080},
3463{0x3800000, 0x1, 0xffd9ba98, 0x7fc00000, 0x3800080},
3464{0x3800000, 0x1, 0xffffffff, 0x7fc00000, 0x3800080},
3465{0x3800000, 0x1, 0x4f3495cb, 0x4f3495cb, 0x3800080},
3466{0x3800000, 0x1, 0xe73a5134, 0xe73a5134, 0x3800080},
3467{0x3800000, 0x1, 0x7c994e9e, 0x7c994e9e, 0x3800080},
3468{0x3800000, 0x1, 0x6164bd6c, 0x6164bd6c, 0x3800080},
3469{0x3800000, 0x1, 0x9503366, 0x9503366, 0x3800080},
3470{0x3800000, 0x1, 0xbf5a97c9, 0xbf5a97c9, 0x3800080},
3471{0x3800000, 0x1, 0xe6ff1a14, 0xe6ff1a14, 0x3800080},
3472{0x3800000, 0x1, 0x77f31e2f, 0x77f31e2f, 0x3800080},
3473{0x3800000, 0x1, 0xaab4d7d8, 0xaab4d7d8, 0x3800080},
3474{0x3800000, 0x1, 0x966320b, 0x966320b, 0x3800080},
3475{0x3800000, 0x1, 0xb26bddee, 0xb26bddee, 0x3800080},
3476{0x3800000, 0x1, 0xb5c8e5d3, 0xb5c8e5d3, 0x3800080},
3477{0x3800000, 0x1, 0x317285d3, 0x317285d3, 0x3800080},
3478{0x3800000, 0x1, 0x3c9623b1, 0x3c9623b1, 0x3800080},
3479{0x3800000, 0x1, 0x51fd2c7c, 0x51fd2c7c, 0x3800080},
3480{0x3800000, 0x1, 0x7b906a6c, 0x7b906a6c, 0x3800080},
3481{0x3800000, 0x76, 0x0, 0x0, 0x3800080},
3482{0x3800000, 0x76, 0x1, 0x0, 0x3800080},
3483{0x3800000, 0x76, 0x76, 0x0, 0x3800080},
3484{0x3800000, 0x76, 0x2b94, 0x0, 0x3800080},
3485{0x3800000, 0x76, 0x636d24, 0x0, 0x3800080},
3486{0x3800000, 0x76, 0x7fffff, 0x0, 0x3800080},
3487{0x3800000, 0x76, 0x800000, 0x800000, 0x3800080},
3488{0x3800000, 0x76, 0x800002, 0x800002, 0x3800080},
3489{0x3800000, 0x76, 0x1398437, 0x1398437, 0x3800080},
3490{0x3800000, 0x76, 0xba98d27, 0xba98d27, 0x3800080},
3491{0x3800000, 0x76, 0xba98d7a, 0xba98d7a, 0x3800080},
3492{0x3800000, 0x76, 0x751f853a, 0x751f853a, 0x3800080},
3493{0x3800000, 0x76, 0x7f7ffff0, 0x7f7ffff0, 0x3800080},
3494{0x3800000, 0x76, 0x7f7fffff, 0x7f7fffff, 0x3800080},
3495{0x3800000, 0x76, 0x7f800000, 0x7f800000, 0x3800080},
3496{0x3800000, 0x76, 0x7f800001, 0x7fc00000, 0x3800081},
3497{0x3800000, 0x76, 0x7f984a37, 0x7fc00000, 0x3800081},
3498{0x3800000, 0x76, 0x7fbfffff, 0x7fc00000, 0x3800081},
3499{0x3800000, 0x76, 0x7fc00000, 0x7fc00000, 0x3800080},
3500{0x3800000, 0x76, 0x7fd9ba98, 0x7fc00000, 0x3800080},
3501{0x3800000, 0x76, 0x7fffffff, 0x7fc00000, 0x3800080},
3502{0x3800000, 0x76, 0x80000000, 0x80000000, 0x3800080},
3503{0x3800000, 0x76, 0x80000001, 0x0, 0x3800080},
3504{0x3800000, 0x76, 0x80000076, 0x0, 0x3800080},
3505{0x3800000, 0x76, 0x80002b94, 0x0, 0x3800080},
3506{0x3800000, 0x76, 0x80636d24, 0x0, 0x3800080},
3507{0x3800000, 0x76, 0x807fffff, 0x0, 0x3800080},
3508{0x3800000, 0x76, 0x80800000, 0x80800000, 0x3800080},
3509{0x3800000, 0x76, 0x80800002, 0x80800002, 0x3800080},
3510{0x3800000, 0x76, 0x81398437, 0x81398437, 0x3800080},
3511{0x3800000, 0x76, 0x8ba98d27, 0x8ba98d27, 0x3800080},
3512{0x3800000, 0x76, 0x8ba98d7a, 0x8ba98d7a, 0x3800080},
3513{0x3800000, 0x76, 0xf51f853a, 0xf51f853a, 0x3800080},
3514{0x3800000, 0x76, 0xff7ffff0, 0xff7ffff0, 0x3800080},
3515{0x3800000, 0x76, 0xff7fffff, 0xff7fffff, 0x3800080},
3516{0x3800000, 0x76, 0xff800000, 0xff800000, 0x3800080},
3517{0x3800000, 0x76, 0xff800001, 0x7fc00000, 0x3800081},
3518{0x3800000, 0x76, 0xff984a37, 0x7fc00000, 0x3800081},
3519{0x3800000, 0x76, 0xffbfffff, 0x7fc00000, 0x3800081},
3520{0x3800000, 0x76, 0xffc00000, 0x7fc00000, 0x3800080},
3521{0x3800000, 0x76, 0xffd9ba98, 0x7fc00000, 0x3800080},
3522{0x3800000, 0x76, 0xffffffff, 0x7fc00000, 0x3800080},
3523{0x3800000, 0x76, 0x4f3495cb, 0x4f3495cb, 0x3800080},
3524{0x3800000, 0x76, 0xe73a5134, 0xe73a5134, 0x3800080},
3525{0x3800000, 0x76, 0x7c994e9e, 0x7c994e9e, 0x3800080},
3526{0x3800000, 0x76, 0x6164bd6c, 0x6164bd6c, 0x3800080},
3527{0x3800000, 0x76, 0x9503366, 0x9503366, 0x3800080},
3528{0x3800000, 0x76, 0xbf5a97c9, 0xbf5a97c9, 0x3800080},
3529{0x3800000, 0x76, 0xe6ff1a14, 0xe6ff1a14, 0x3800080},
3530{0x3800000, 0x76, 0x77f31e2f, 0x77f31e2f, 0x3800080},
3531{0x3800000, 0x76, 0xaab4d7d8, 0xaab4d7d8, 0x3800080},
3532{0x3800000, 0x76, 0x966320b, 0x966320b, 0x3800080},
3533{0x3800000, 0x76, 0xb26bddee, 0xb26bddee, 0x3800080},
3534{0x3800000, 0x76, 0xb5c8e5d3, 0xb5c8e5d3, 0x3800080},
3535{0x3800000, 0x76, 0x317285d3, 0x317285d3, 0x3800080},
3536{0x3800000, 0x76, 0x3c9623b1, 0x3c9623b1, 0x3800080},
3537{0x3800000, 0x76, 0x51fd2c7c, 0x51fd2c7c, 0x3800080},
3538{0x3800000, 0x76, 0x7b906a6c, 0x7b906a6c, 0x3800080},
3539{0x3800000, 0x2b94, 0x0, 0x0, 0x3800080},
3540{0x3800000, 0x2b94, 0x1, 0x0, 0x3800080},
3541{0x3800000, 0x2b94, 0x76, 0x0, 0x3800080},
3542{0x3800000, 0x2b94, 0x2b94, 0x0, 0x3800080},
3543{0x3800000, 0x2b94, 0x636d24, 0x0, 0x3800080},
3544{0x3800000, 0x2b94, 0x7fffff, 0x0, 0x3800080},
3545{0x3800000, 0x2b94, 0x800000, 0x800000, 0x3800080},
3546{0x3800000, 0x2b94, 0x800002, 0x800002, 0x3800080},
3547{0x3800000, 0x2b94, 0x1398437, 0x1398437, 0x3800080},
3548{0x3800000, 0x2b94, 0xba98d27, 0xba98d27, 0x3800080},
3549{0x3800000, 0x2b94, 0xba98d7a, 0xba98d7a, 0x3800080},
3550{0x3800000, 0x2b94, 0x751f853a, 0x751f853a, 0x3800080},
3551{0x3800000, 0x2b94, 0x7f7ffff0, 0x7f7ffff0, 0x3800080},
3552{0x3800000, 0x2b94, 0x7f7fffff, 0x7f7fffff, 0x3800080},
3553{0x3800000, 0x2b94, 0x7f800000, 0x7f800000, 0x3800080},
3554{0x3800000, 0x2b94, 0x7f800001, 0x7fc00000, 0x3800081},
3555{0x3800000, 0x2b94, 0x7f984a37, 0x7fc00000, 0x3800081},
3556{0x3800000, 0x2b94, 0x7fbfffff, 0x7fc00000, 0x3800081},
3557{0x3800000, 0x2b94, 0x7fc00000, 0x7fc00000, 0x3800080},
3558{0x3800000, 0x2b94, 0x7fd9ba98, 0x7fc00000, 0x3800080},
3559{0x3800000, 0x2b94, 0x7fffffff, 0x7fc00000, 0x3800080},
3560{0x3800000, 0x2b94, 0x80000000, 0x80000000, 0x3800080},
3561{0x3800000, 0x2b94, 0x80000001, 0x0, 0x3800080},
3562{0x3800000, 0x2b94, 0x80000076, 0x0, 0x3800080},
3563{0x3800000, 0x2b94, 0x80002b94, 0x0, 0x3800080},
3564{0x3800000, 0x2b94, 0x80636d24, 0x0, 0x3800080},
3565{0x3800000, 0x2b94, 0x807fffff, 0x0, 0x3800080},
3566{0x3800000, 0x2b94, 0x80800000, 0x80800000, 0x3800080},
3567{0x3800000, 0x2b94, 0x80800002, 0x80800002, 0x3800080},
3568{0x3800000, 0x2b94, 0x81398437, 0x81398437, 0x3800080},
3569{0x3800000, 0x2b94, 0x8ba98d27, 0x8ba98d27, 0x3800080},
3570{0x3800000, 0x2b94, 0x8ba98d7a, 0x8ba98d7a, 0x3800080},
3571{0x3800000, 0x2b94, 0xf51f853a, 0xf51f853a, 0x3800080},
3572{0x3800000, 0x2b94, 0xff7ffff0, 0xff7ffff0, 0x3800080},
3573{0x3800000, 0x2b94, 0xff7fffff, 0xff7fffff, 0x3800080},
3574{0x3800000, 0x2b94, 0xff800000, 0xff800000, 0x3800080},
3575{0x3800000, 0x2b94, 0xff800001, 0x7fc00000, 0x3800081},
3576{0x3800000, 0x2b94, 0xff984a37, 0x7fc00000, 0x3800081},
3577{0x3800000, 0x2b94, 0xffbfffff, 0x7fc00000, 0x3800081},
3578{0x3800000, 0x2b94, 0xffc00000, 0x7fc00000, 0x3800080},
3579{0x3800000, 0x2b94, 0xffd9ba98, 0x7fc00000, 0x3800080},
3580{0x3800000, 0x2b94, 0xffffffff, 0x7fc00000, 0x3800080},
3581{0x3800000, 0x2b94, 0x4f3495cb, 0x4f3495cb, 0x3800080},
3582{0x3800000, 0x2b94, 0xe73a5134, 0xe73a5134, 0x3800080},
3583{0x3800000, 0x2b94, 0x7c994e9e, 0x7c994e9e, 0x3800080},
3584{0x3800000, 0x2b94, 0x6164bd6c, 0x6164bd6c, 0x3800080},
3585{0x3800000, 0x2b94, 0x9503366, 0x9503366, 0x3800080},
3586{0x3800000, 0x2b94, 0xbf5a97c9, 0xbf5a97c9, 0x3800080},
3587{0x3800000, 0x2b94, 0xe6ff1a14, 0xe6ff1a14, 0x3800080},
3588{0x3800000, 0x2b94, 0x77f31e2f, 0x77f31e2f, 0x3800080},
3589{0x3800000, 0x2b94, 0xaab4d7d8, 0xaab4d7d8, 0x3800080},
3590{0x3800000, 0x2b94, 0x966320b, 0x966320b, 0x3800080},
3591{0x3800000, 0x2b94, 0xb26bddee, 0xb26bddee, 0x3800080},
3592{0x3800000, 0x2b94, 0xb5c8e5d3, 0xb5c8e5d3, 0x3800080},
3593{0x3800000, 0x2b94, 0x317285d3, 0x317285d3, 0x3800080},
3594{0x3800000, 0x2b94, 0x3c9623b1, 0x3c9623b1, 0x3800080},
3595{0x3800000, 0x2b94, 0x51fd2c7c, 0x51fd2c7c, 0x3800080},
3596{0x3800000, 0x2b94, 0x7b906a6c, 0x7b906a6c, 0x3800080},
3597{0x3800000, 0x636d24, 0x0, 0x0, 0x3800080},
3598{0x3800000, 0x636d24, 0x1, 0x0, 0x3800080},
3599{0x3800000, 0x636d24, 0x76, 0x0, 0x3800080},
3600{0x3800000, 0x636d24, 0x2b94, 0x0, 0x3800080},
3601{0x3800000, 0x636d24, 0x636d24, 0x0, 0x3800080},
3602{0x3800000, 0x636d24, 0x7fffff, 0x0, 0x3800080},
3603{0x3800000, 0x636d24, 0x800000, 0x800000, 0x3800080},
3604{0x3800000, 0x636d24, 0x800002, 0x800002, 0x3800080},
3605{0x3800000, 0x636d24, 0x1398437, 0x1398437, 0x3800080},
3606{0x3800000, 0x636d24, 0xba98d27, 0xba98d27, 0x3800080},
3607{0x3800000, 0x636d24, 0xba98d7a, 0xba98d7a, 0x3800080},
3608{0x3800000, 0x636d24, 0x751f853a, 0x751f853a, 0x3800080},
3609{0x3800000, 0x636d24, 0x7f7ffff0, 0x7f7ffff0, 0x3800080},
3610{0x3800000, 0x636d24, 0x7f7fffff, 0x7f7fffff, 0x3800080},
3611{0x3800000, 0x636d24, 0x7f800000, 0x7f800000, 0x3800080},
3612{0x3800000, 0x636d24, 0x7f800001, 0x7fc00000, 0x3800081},
3613{0x3800000, 0x636d24, 0x7f984a37, 0x7fc00000, 0x3800081},
3614{0x3800000, 0x636d24, 0x7fbfffff, 0x7fc00000, 0x3800081},
3615{0x3800000, 0x636d24, 0x7fc00000, 0x7fc00000, 0x3800080},
3616{0x3800000, 0x636d24, 0x7fd9ba98, 0x7fc00000, 0x3800080},
3617{0x3800000, 0x636d24, 0x7fffffff, 0x7fc00000, 0x3800080},
3618{0x3800000, 0x636d24, 0x80000000, 0x80000000, 0x3800080},
3619{0x3800000, 0x636d24, 0x80000001, 0x0, 0x3800080},
3620{0x3800000, 0x636d24, 0x80000076, 0x0, 0x3800080},
3621{0x3800000, 0x636d24, 0x80002b94, 0x0, 0x3800080},
3622{0x3800000, 0x636d24, 0x80636d24, 0x0, 0x3800080},
3623{0x3800000, 0x636d24, 0x807fffff, 0x0, 0x3800080},
3624{0x3800000, 0x636d24, 0x80800000, 0x80800000, 0x3800080},
3625{0x3800000, 0x636d24, 0x80800002, 0x80800002, 0x3800080},
3626{0x3800000, 0x636d24, 0x81398437, 0x81398437, 0x3800080},
3627{0x3800000, 0x636d24, 0x8ba98d27, 0x8ba98d27, 0x3800080},
3628{0x3800000, 0x636d24, 0x8ba98d7a, 0x8ba98d7a, 0x3800080},
3629{0x3800000, 0x636d24, 0xf51f853a, 0xf51f853a, 0x3800080},
3630{0x3800000, 0x636d24, 0xff7ffff0, 0xff7ffff0, 0x3800080},
3631{0x3800000, 0x636d24, 0xff7fffff, 0xff7fffff, 0x3800080},
3632{0x3800000, 0x636d24, 0xff800000, 0xff800000, 0x3800080},
3633{0x3800000, 0x636d24, 0xff800001, 0x7fc00000, 0x3800081},
3634{0x3800000, 0x636d24, 0xff984a37, 0x7fc00000, 0x3800081},
3635{0x3800000, 0x636d24, 0xffbfffff, 0x7fc00000, 0x3800081},
3636{0x3800000, 0x636d24, 0xffc00000, 0x7fc00000, 0x3800080},
3637{0x3800000, 0x636d24, 0xffd9ba98, 0x7fc00000, 0x3800080},
3638{0x3800000, 0x636d24, 0xffffffff, 0x7fc00000, 0x3800080},
3639{0x3800000, 0x636d24, 0x4f3495cb, 0x4f3495cb, 0x3800080},
3640{0x3800000, 0x636d24, 0xe73a5134, 0xe73a5134, 0x3800080},
3641{0x3800000, 0x636d24, 0x7c994e9e, 0x7c994e9e, 0x3800080},
3642{0x3800000, 0x636d24, 0x6164bd6c, 0x6164bd6c, 0x3800080},
3643{0x3800000, 0x636d24, 0x9503366, 0x9503366, 0x3800080},
3644{0x3800000, 0x636d24, 0xbf5a97c9, 0xbf5a97c9, 0x3800080},
3645{0x3800000, 0x636d24, 0xe6ff1a14, 0xe6ff1a14, 0x3800080},
3646{0x3800000, 0x636d24, 0x77f31e2f, 0x77f31e2f, 0x3800080},
3647{0x3800000, 0x636d24, 0xaab4d7d8, 0xaab4d7d8, 0x3800080},
3648{0x3800000, 0x636d24, 0x966320b, 0x966320b, 0x3800080},
3649{0x3800000, 0x636d24, 0xb26bddee, 0xb26bddee, 0x3800080},
3650{0x3800000, 0x636d24, 0xb5c8e5d3, 0xb5c8e5d3, 0x3800080},
3651{0x3800000, 0x636d24, 0x317285d3, 0x317285d3, 0x3800080},
3652{0x3800000, 0x636d24, 0x3c9623b1, 0x3c9623b1, 0x3800080},
3653{0x3800000, 0x636d24, 0x51fd2c7c, 0x51fd2c7c, 0x3800080},
3654{0x3800000, 0x636d24, 0x7b906a6c, 0x7b906a6c, 0x3800080},
3655{0x3800000, 0x7fffff, 0x0, 0x0, 0x3800080},
3656{0x3800000, 0x7fffff, 0x1, 0x0, 0x3800080},
3657{0x3800000, 0x7fffff, 0x76, 0x0, 0x3800080},
3658{0x3800000, 0x7fffff, 0x2b94, 0x0, 0x3800080},
3659{0x3800000, 0x7fffff, 0x636d24, 0x0, 0x3800080},
3660{0x3800000, 0x7fffff, 0x7fffff, 0x0, 0x3800080},
3661{0x3800000, 0x7fffff, 0x800000, 0x800000, 0x3800080},
3662{0x3800000, 0x7fffff, 0x800002, 0x800002, 0x3800080},
3663{0x3800000, 0x7fffff, 0x1398437, 0x1398437, 0x3800080},
3664{0x3800000, 0x7fffff, 0xba98d27, 0xba98d27, 0x3800080},
3665{0x3800000, 0x7fffff, 0xba98d7a, 0xba98d7a, 0x3800080},
3666{0x3800000, 0x7fffff, 0x751f853a, 0x751f853a, 0x3800080},
3667{0x3800000, 0x7fffff, 0x7f7ffff0, 0x7f7ffff0, 0x3800080},
3668{0x3800000, 0x7fffff, 0x7f7fffff, 0x7f7fffff, 0x3800080},
3669{0x3800000, 0x7fffff, 0x7f800000, 0x7f800000, 0x3800080},
3670{0x3800000, 0x7fffff, 0x7f800001, 0x7fc00000, 0x3800081},
3671{0x3800000, 0x7fffff, 0x7f984a37, 0x7fc00000, 0x3800081},
3672{0x3800000, 0x7fffff, 0x7fbfffff, 0x7fc00000, 0x3800081},
3673{0x3800000, 0x7fffff, 0x7fc00000, 0x7fc00000, 0x3800080},
3674{0x3800000, 0x7fffff, 0x7fd9ba98, 0x7fc00000, 0x3800080},
3675{0x3800000, 0x7fffff, 0x7fffffff, 0x7fc00000, 0x3800080},
3676{0x3800000, 0x7fffff, 0x80000000, 0x80000000, 0x3800080},
3677{0x3800000, 0x7fffff, 0x80000001, 0x0, 0x3800080},
3678{0x3800000, 0x7fffff, 0x80000076, 0x0, 0x3800080},
3679{0x3800000, 0x7fffff, 0x80002b94, 0x0, 0x3800080},
3680{0x3800000, 0x7fffff, 0x80636d24, 0x0, 0x3800080},
3681{0x3800000, 0x7fffff, 0x807fffff, 0x0, 0x3800080},
3682{0x3800000, 0x7fffff, 0x80800000, 0x80800000, 0x3800080},
3683{0x3800000, 0x7fffff, 0x80800002, 0x80800002, 0x3800080},
3684{0x3800000, 0x7fffff, 0x81398437, 0x81398437, 0x3800080},
3685{0x3800000, 0x7fffff, 0x8ba98d27, 0x8ba98d27, 0x3800080},
3686{0x3800000, 0x7fffff, 0x8ba98d7a, 0x8ba98d7a, 0x3800080},
3687{0x3800000, 0x7fffff, 0xf51f853a, 0xf51f853a, 0x3800080},
3688{0x3800000, 0x7fffff, 0xff7ffff0, 0xff7ffff0, 0x3800080},
3689{0x3800000, 0x7fffff, 0xff7fffff, 0xff7fffff, 0x3800080},
3690{0x3800000, 0x7fffff, 0xff800000, 0xff800000, 0x3800080},
3691{0x3800000, 0x7fffff, 0xff800001, 0x7fc00000, 0x3800081},
3692{0x3800000, 0x7fffff, 0xff984a37, 0x7fc00000, 0x3800081},
3693{0x3800000, 0x7fffff, 0xffbfffff, 0x7fc00000, 0x3800081},
3694{0x3800000, 0x7fffff, 0xffc00000, 0x7fc00000, 0x3800080},
3695{0x3800000, 0x7fffff, 0xffd9ba98, 0x7fc00000, 0x3800080},
3696{0x3800000, 0x7fffff, 0xffffffff, 0x7fc00000, 0x3800080},
3697{0x3800000, 0x7fffff, 0x4f3495cb, 0x4f3495cb, 0x3800080},
3698{0x3800000, 0x7fffff, 0xe73a5134, 0xe73a5134, 0x3800080},
3699{0x3800000, 0x7fffff, 0x7c994e9e, 0x7c994e9e, 0x3800080},
3700{0x3800000, 0x7fffff, 0x6164bd6c, 0x6164bd6c, 0x3800080},
3701{0x3800000, 0x7fffff, 0x9503366, 0x9503366, 0x3800080},
3702{0x3800000, 0x7fffff, 0xbf5a97c9, 0xbf5a97c9, 0x3800080},
3703{0x3800000, 0x7fffff, 0xe6ff1a14, 0xe6ff1a14, 0x3800080},
3704{0x3800000, 0x7fffff, 0x77f31e2f, 0x77f31e2f, 0x3800080},
3705{0x3800000, 0x7fffff, 0xaab4d7d8, 0xaab4d7d8, 0x3800080},
3706{0x3800000, 0x7fffff, 0x966320b, 0x966320b, 0x3800080},
3707{0x3800000, 0x7fffff, 0xb26bddee, 0xb26bddee, 0x3800080},
3708{0x3800000, 0x7fffff, 0xb5c8e5d3, 0xb5c8e5d3, 0x3800080},
3709{0x3800000, 0x7fffff, 0x317285d3, 0x317285d3, 0x3800080},
3710{0x3800000, 0x7fffff, 0x3c9623b1, 0x3c9623b1, 0x3800080},
3711{0x3800000, 0x7fffff, 0x51fd2c7c, 0x51fd2c7c, 0x3800080},
3712{0x3800000, 0x7fffff, 0x7b906a6c, 0x7b906a6c, 0x3800080},
3713{0x3800000, 0x800000, 0x0, 0x800000, 0x3800000},
3714{0x3800000, 0x800000, 0x1, 0x800000, 0x3800080},
3715{0x3800000, 0x800000, 0x76, 0x800000, 0x3800080},
3716{0x3800000, 0x800000, 0x2b94, 0x800000, 0x3800080},
3717{0x3800000, 0x800000, 0x636d24, 0x800000, 0x3800080},
3718{0x3800000, 0x800000, 0x7fffff, 0x800000, 0x3800080},
3719{0x3800000, 0x800000, 0x800000, 0x1000000, 0x3800000},
3720{0x3800000, 0x800000, 0x800002, 0x1000001, 0x3800000},
3721{0x3800000, 0x800000, 0x1398437, 0x1798437, 0x3800000},
3722{0x3800000, 0x800000, 0xba98d27, 0xba98d29, 0x3800000},
3723{0x3800000, 0x800000, 0xba98d7a, 0xba98d7c, 0x3800000},
3724{0x3800000, 0x800000, 0x751f853a, 0x751f853a, 0x3800010},
3725{0x3800000, 0x800000, 0x7f7ffff0, 0x7f7ffff0, 0x3800010},
3726{0x3800000, 0x800000, 0x7f7fffff, 0x7f7fffff, 0x3800010},
3727{0x3800000, 0x800000, 0x7f800000, 0x7f800000, 0x3800000},
3728{0x3800000, 0x800000, 0x7f800001, 0x7fc00000, 0x3800001},
3729{0x3800000, 0x800000, 0x7f984a37, 0x7fc00000, 0x3800001},
3730{0x3800000, 0x800000, 0x7fbfffff, 0x7fc00000, 0x3800001},
3731{0x3800000, 0x800000, 0x7fc00000, 0x7fc00000, 0x3800000},
3732{0x3800000, 0x800000, 0x7fd9ba98, 0x7fc00000, 0x3800000},
3733{0x3800000, 0x800000, 0x7fffffff, 0x7fc00000, 0x3800000},
3734{0x3800000, 0x800000, 0x80000000, 0x800000, 0x3800000},
3735{0x3800000, 0x800000, 0x80000001, 0x800000, 0x3800080},
3736{0x3800000, 0x800000, 0x80000076, 0x800000, 0x3800080},
3737{0x3800000, 0x800000, 0x80002b94, 0x800000, 0x3800080},
3738{0x3800000, 0x800000, 0x80636d24, 0x800000, 0x3800080},
3739{0x3800000, 0x800000, 0x807fffff, 0x800000, 0x3800080},
3740{0x3800000, 0x800000, 0x80800000, 0x80000000, 0x3800000},
3741{0x3800000, 0x800000, 0x80800002, 0x0, 0x3800008},
3742{0x3800000, 0x800000, 0x81398437, 0x80f3086e, 0x3800000},
3743{0x3800000, 0x800000, 0x8ba98d27, 0x8ba98d25, 0x3800000},
3744{0x3800000, 0x800000, 0x8ba98d7a, 0x8ba98d78, 0x3800000},
3745{0x3800000, 0x800000, 0xf51f853a, 0xf51f853a, 0x3800010},
3746{0x3800000, 0x800000, 0xff7ffff0, 0xff7ffff0, 0x3800010},
3747{0x3800000, 0x800000, 0xff7fffff, 0xff7fffff, 0x3800010},
3748{0x3800000, 0x800000, 0xff800000, 0xff800000, 0x3800000},
3749{0x3800000, 0x800000, 0xff800001, 0x7fc00000, 0x3800001},
3750{0x3800000, 0x800000, 0xff984a37, 0x7fc00000, 0x3800001},
3751{0x3800000, 0x800000, 0xffbfffff, 0x7fc00000, 0x3800001},
3752{0x3800000, 0x800000, 0xffc00000, 0x7fc00000, 0x3800000},
3753{0x3800000, 0x800000, 0xffd9ba98, 0x7fc00000, 0x3800000},
3754{0x3800000, 0x800000, 0xffffffff, 0x7fc00000, 0x3800000},
3755{0x3800000, 0x800000, 0x4f3495cb, 0x4f3495cb, 0x3800010},
3756{0x3800000, 0x800000, 0xe73a5134, 0xe73a5134, 0x3800010},
3757{0x3800000, 0x800000, 0x7c994e9e, 0x7c994e9e, 0x3800010},
3758{0x3800000, 0x800000, 0x6164bd6c, 0x6164bd6c, 0x3800010},
3759{0x3800000, 0x800000, 0x9503366, 0x95033a6, 0x3800000},
3760{0x3800000, 0x800000, 0xbf5a97c9, 0xbf5a97c9, 0x3800010},
3761{0x3800000, 0x800000, 0xe6ff1a14, 0xe6ff1a14, 0x3800010},
3762{0x3800000, 0x800000, 0x77f31e2f, 0x77f31e2f, 0x3800010},
3763{0x3800000, 0x800000, 0xaab4d7d8, 0xaab4d7d8, 0x3800010},
3764{0x3800000, 0x800000, 0x966320b, 0x966324b, 0x3800000},
3765{0x3800000, 0x800000, 0xb26bddee, 0xb26bddee, 0x3800010},
3766{0x3800000, 0x800000, 0xb5c8e5d3, 0xb5c8e5d3, 0x3800010},
3767{0x3800000, 0x800000, 0x317285d3, 0x317285d3, 0x3800010},
3768{0x3800000, 0x800000, 0x3c9623b1, 0x3c9623b1, 0x3800010},
3769{0x3800000, 0x800000, 0x51fd2c7c, 0x51fd2c7c, 0x3800010},
3770{0x3800000, 0x800000, 0x7b906a6c, 0x7b906a6c, 0x3800010},
3771{0x3800000, 0x800002, 0x0, 0x800002, 0x3800000},
3772{0x3800000, 0x800002, 0x1, 0x800002, 0x3800080},
3773{0x3800000, 0x800002, 0x76, 0x800002, 0x3800080},
3774{0x3800000, 0x800002, 0x2b94, 0x800002, 0x3800080},
3775{0x3800000, 0x800002, 0x636d24, 0x800002, 0x3800080},
3776{0x3800000, 0x800002, 0x7fffff, 0x800002, 0x3800080},
3777{0x3800000, 0x800002, 0x800000, 0x1000001, 0x3800000},
3778{0x3800000, 0x800002, 0x800002, 0x1000002, 0x3800000},
3779{0x3800000, 0x800002, 0x1398437, 0x1798438, 0x3800000},
3780{0x3800000, 0x800002, 0xba98d27, 0xba98d29, 0x3800010},
3781{0x3800000, 0x800002, 0xba98d7a, 0xba98d7c, 0x3800010},
3782{0x3800000, 0x800002, 0x751f853a, 0x751f853a, 0x3800010},
3783{0x3800000, 0x800002, 0x7f7ffff0, 0x7f7ffff0, 0x3800010},
3784{0x3800000, 0x800002, 0x7f7fffff, 0x7f7fffff, 0x3800010},
3785{0x3800000, 0x800002, 0x7f800000, 0x7f800000, 0x3800000},
3786{0x3800000, 0x800002, 0x7f800001, 0x7fc00000, 0x3800001},
3787{0x3800000, 0x800002, 0x7f984a37, 0x7fc00000, 0x3800001},
3788{0x3800000, 0x800002, 0x7fbfffff, 0x7fc00000, 0x3800001},
3789{0x3800000, 0x800002, 0x7fc00000, 0x7fc00000, 0x3800000},
3790{0x3800000, 0x800002, 0x7fd9ba98, 0x7fc00000, 0x3800000},
3791{0x3800000, 0x800002, 0x7fffffff, 0x7fc00000, 0x3800000},
3792{0x3800000, 0x800002, 0x80000000, 0x800002, 0x3800000},
3793{0x3800000, 0x800002, 0x80000001, 0x800002, 0x3800080},
3794{0x3800000, 0x800002, 0x80000076, 0x800002, 0x3800080},
3795{0x3800000, 0x800002, 0x80002b94, 0x800002, 0x3800080},
3796{0x3800000, 0x800002, 0x80636d24, 0x800002, 0x3800080},
3797{0x3800000, 0x800002, 0x807fffff, 0x800002, 0x3800080},
3798{0x3800000, 0x800002, 0x80800000, 0x0, 0x3800008},
3799{0x3800000, 0x800002, 0x80800002, 0x80000000, 0x3800000},
3800{0x3800000, 0x800002, 0x81398437, 0x80f3086c, 0x3800000},
3801{0x3800000, 0x800002, 0x8ba98d27, 0x8ba98d25, 0x3800010},
3802{0x3800000, 0x800002, 0x8ba98d7a, 0x8ba98d78, 0x3800010},
3803{0x3800000, 0x800002, 0xf51f853a, 0xf51f853a, 0x3800010},
3804{0x3800000, 0x800002, 0xff7ffff0, 0xff7ffff0, 0x3800010},
3805{0x3800000, 0x800002, 0xff7fffff, 0xff7fffff, 0x3800010},
3806{0x3800000, 0x800002, 0xff800000, 0xff800000, 0x3800000},
3807{0x3800000, 0x800002, 0xff800001, 0x7fc00000, 0x3800001},
3808{0x3800000, 0x800002, 0xff984a37, 0x7fc00000, 0x3800001},
3809{0x3800000, 0x800002, 0xffbfffff, 0x7fc00000, 0x3800001},
3810{0x3800000, 0x800002, 0xffc00000, 0x7fc00000, 0x3800000},
3811{0x3800000, 0x800002, 0xffd9ba98, 0x7fc00000, 0x3800000},
3812{0x3800000, 0x800002, 0xffffffff, 0x7fc00000, 0x3800000},
3813{0x3800000, 0x800002, 0x4f3495cb, 0x4f3495cb, 0x3800010},
3814{0x3800000, 0x800002, 0xe73a5134, 0xe73a5134, 0x3800010},
3815{0x3800000, 0x800002, 0x7c994e9e, 0x7c994e9e, 0x3800010},
3816{0x3800000, 0x800002, 0x6164bd6c, 0x6164bd6c, 0x3800010},
3817{0x3800000, 0x800002, 0x9503366, 0x95033a6, 0x3800010},
3818{0x3800000, 0x800002, 0xbf5a97c9, 0xbf5a97c9, 0x3800010},
3819{0x3800000, 0x800002, 0xe6ff1a14, 0xe6ff1a14, 0x3800010},
3820{0x3800000, 0x800002, 0x77f31e2f, 0x77f31e2f, 0x3800010},
3821{0x3800000, 0x800002, 0xaab4d7d8, 0xaab4d7d8, 0x3800010},
3822{0x3800000, 0x800002, 0x966320b, 0x966324b, 0x3800010},
3823{0x3800000, 0x800002, 0xb26bddee, 0xb26bddee, 0x3800010},
3824{0x3800000, 0x800002, 0xb5c8e5d3, 0xb5c8e5d3, 0x3800010},
3825{0x3800000, 0x800002, 0x317285d3, 0x317285d3, 0x3800010},
3826{0x3800000, 0x800002, 0x3c9623b1, 0x3c9623b1, 0x3800010},
3827{0x3800000, 0x800002, 0x51fd2c7c, 0x51fd2c7c, 0x3800010},
3828{0x3800000, 0x800002, 0x7b906a6c, 0x7b906a6c, 0x3800010},
3829{0x3800000, 0x1398437, 0x0, 0x1398437, 0x3800000},
3830{0x3800000, 0x1398437, 0x1, 0x1398437, 0x3800080},
3831{0x3800000, 0x1398437, 0x76, 0x1398437, 0x3800080},
3832{0x3800000, 0x1398437, 0x2b94, 0x1398437, 0x3800080},
3833{0x3800000, 0x1398437, 0x636d24, 0x1398437, 0x3800080},
3834{0x3800000, 0x1398437, 0x7fffff, 0x1398437, 0x3800080},
3835{0x3800000, 0x1398437, 0x800000, 0x1798437, 0x3800000},
3836{0x3800000, 0x1398437, 0x800002, 0x1798438, 0x3800000},
3837{0x3800000, 0x1398437, 0x1398437, 0x1b98437, 0x3800000},
3838{0x3800000, 0x1398437, 0xba98d27, 0xba98d2c, 0x3800010},
3839{0x3800000, 0x1398437, 0xba98d7a, 0xba98d7f, 0x3800010},
3840{0x3800000, 0x1398437, 0x751f853a, 0x751f853a, 0x3800010},
3841{0x3800000, 0x1398437, 0x7f7ffff0, 0x7f7ffff0, 0x3800010},
3842{0x3800000, 0x1398437, 0x7f7fffff, 0x7f7fffff, 0x3800010},
3843{0x3800000, 0x1398437, 0x7f800000, 0x7f800000, 0x3800000},
3844{0x3800000, 0x1398437, 0x7f800001, 0x7fc00000, 0x3800001},
3845{0x3800000, 0x1398437, 0x7f984a37, 0x7fc00000, 0x3800001},
3846{0x3800000, 0x1398437, 0x7fbfffff, 0x7fc00000, 0x3800001},
3847{0x3800000, 0x1398437, 0x7fc00000, 0x7fc00000, 0x3800000},
3848{0x3800000, 0x1398437, 0x7fd9ba98, 0x7fc00000, 0x3800000},
3849{0x3800000, 0x1398437, 0x7fffffff, 0x7fc00000, 0x3800000},
3850{0x3800000, 0x1398437, 0x80000000, 0x1398437, 0x3800000},
3851{0x3800000, 0x1398437, 0x80000001, 0x1398437, 0x3800080},
3852{0x3800000, 0x1398437, 0x80000076, 0x1398437, 0x3800080},
3853{0x3800000, 0x1398437, 0x80002b94, 0x1398437, 0x3800080},
3854{0x3800000, 0x1398437, 0x80636d24, 0x1398437, 0x3800080},
3855{0x3800000, 0x1398437, 0x807fffff, 0x1398437, 0x3800080},
3856{0x3800000, 0x1398437, 0x80800000, 0xf3086e, 0x3800000},
3857{0x3800000, 0x1398437, 0x80800002, 0xf3086c, 0x3800000},
3858{0x3800000, 0x1398437, 0x81398437, 0x80000000, 0x3800000},
3859{0x3800000, 0x1398437, 0x8ba98d27, 0x8ba98d22, 0x3800010},
3860{0x3800000, 0x1398437, 0x8ba98d7a, 0x8ba98d75, 0x3800010},
3861{0x3800000, 0x1398437, 0xf51f853a, 0xf51f853a, 0x3800010},
3862{0x3800000, 0x1398437, 0xff7ffff0, 0xff7ffff0, 0x3800010},
3863{0x3800000, 0x1398437, 0xff7fffff, 0xff7fffff, 0x3800010},
3864{0x3800000, 0x1398437, 0xff800000, 0xff800000, 0x3800000},
3865{0x3800000, 0x1398437, 0xff800001, 0x7fc00000, 0x3800001},
3866{0x3800000, 0x1398437, 0xff984a37, 0x7fc00000, 0x3800001},
3867{0x3800000, 0x1398437, 0xffbfffff, 0x7fc00000, 0x3800001},
3868{0x3800000, 0x1398437, 0xffc00000, 0x7fc00000, 0x3800000},
3869{0x3800000, 0x1398437, 0xffd9ba98, 0x7fc00000, 0x3800000},
3870{0x3800000, 0x1398437, 0xffffffff, 0x7fc00000, 0x3800000},
3871{0x3800000, 0x1398437, 0x4f3495cb, 0x4f3495cb, 0x3800010},
3872{0x3800000, 0x1398437, 0xe73a5134, 0xe73a5134, 0x3800010},
3873{0x3800000, 0x1398437, 0x7c994e9e, 0x7c994e9e, 0x3800010},
3874{0x3800000, 0x1398437, 0x6164bd6c, 0x6164bd6c, 0x3800010},
3875{0x3800000, 0x1398437, 0x9503366, 0x950341f, 0x3800010},
3876{0x3800000, 0x1398437, 0xbf5a97c9, 0xbf5a97c9, 0x3800010},
3877{0x3800000, 0x1398437, 0xe6ff1a14, 0xe6ff1a14, 0x3800010},
3878{0x3800000, 0x1398437, 0x77f31e2f, 0x77f31e2f, 0x3800010},
3879{0x3800000, 0x1398437, 0xaab4d7d8, 0xaab4d7d8, 0x3800010},
3880{0x3800000, 0x1398437, 0x966320b, 0x96632c4, 0x3800010},
3881{0x3800000, 0x1398437, 0xb26bddee, 0xb26bddee, 0x3800010},
3882{0x3800000, 0x1398437, 0xb5c8e5d3, 0xb5c8e5d3, 0x3800010},
3883{0x3800000, 0x1398437, 0x317285d3, 0x317285d3, 0x3800010},
3884{0x3800000, 0x1398437, 0x3c9623b1, 0x3c9623b1, 0x3800010},
3885{0x3800000, 0x1398437, 0x51fd2c7c, 0x51fd2c7c, 0x3800010},
3886{0x3800000, 0x1398437, 0x7b906a6c, 0x7b906a6c, 0x3800010},
3887{0x3800000, 0xba98d27, 0x0, 0xba98d27, 0x3800000},
3888{0x3800000, 0xba98d27, 0x1, 0xba98d27, 0x3800080},
3889{0x3800000, 0xba98d27, 0x76, 0xba98d27, 0x3800080},
3890{0x3800000, 0xba98d27, 0x2b94, 0xba98d27, 0x3800080},
3891{0x3800000, 0xba98d27, 0x636d24, 0xba98d27, 0x3800080},
3892{0x3800000, 0xba98d27, 0x7fffff, 0xba98d27, 0x3800080},
3893{0x3800000, 0xba98d27, 0x800000, 0xba98d29, 0x3800000},
3894{0x3800000, 0xba98d27, 0x800002, 0xba98d29, 0x3800010},
3895{0x3800000, 0xba98d27, 0x1398437, 0xba98d2c, 0x3800010},
3896{0x3800000, 0xba98d27, 0xba98d27, 0xc298d27, 0x3800000},
3897{0x3800000, 0xba98d27, 0xba98d7a, 0xc298d50, 0x3800010},
3898{0x3800000, 0xba98d27, 0x751f853a, 0x751f853a, 0x3800010},
3899{0x3800000, 0xba98d27, 0x7f7ffff0, 0x7f7ffff0, 0x3800010},
3900{0x3800000, 0xba98d27, 0x7f7fffff, 0x7f7fffff, 0x3800010},
3901{0x3800000, 0xba98d27, 0x7f800000, 0x7f800000, 0x3800000},
3902{0x3800000, 0xba98d27, 0x7f800001, 0x7fc00000, 0x3800001},
3903{0x3800000, 0xba98d27, 0x7f984a37, 0x7fc00000, 0x3800001},
3904{0x3800000, 0xba98d27, 0x7fbfffff, 0x7fc00000, 0x3800001},
3905{0x3800000, 0xba98d27, 0x7fc00000, 0x7fc00000, 0x3800000},
3906{0x3800000, 0xba98d27, 0x7fd9ba98, 0x7fc00000, 0x3800000},
3907{0x3800000, 0xba98d27, 0x7fffffff, 0x7fc00000, 0x3800000},
3908{0x3800000, 0xba98d27, 0x80000000, 0xba98d27, 0x3800000},
3909{0x3800000, 0xba98d27, 0x80000001, 0xba98d27, 0x3800080},
3910{0x3800000, 0xba98d27, 0x80000076, 0xba98d27, 0x3800080},
3911{0x3800000, 0xba98d27, 0x80002b94, 0xba98d27, 0x3800080},
3912{0x3800000, 0xba98d27, 0x80636d24, 0xba98d27, 0x3800080},
3913{0x3800000, 0xba98d27, 0x807fffff, 0xba98d27, 0x3800080},
3914{0x3800000, 0xba98d27, 0x80800000, 0xba98d25, 0x3800000},
3915{0x3800000, 0xba98d27, 0x80800002, 0xba98d24, 0x3800010},
3916{0x3800000, 0xba98d27, 0x81398437, 0xba98d21, 0x3800010},
3917{0x3800000, 0xba98d27, 0x8ba98d27, 0x80000000, 0x3800000},
3918{0x3800000, 0xba98d27, 0x8ba98d7a, 0x83260000, 0x3800000},
3919{0x3800000, 0xba98d27, 0xf51f853a, 0xf51f853a, 0x3800010},
3920{0x3800000, 0xba98d27, 0xff7ffff0, 0xff7ffff0, 0x3800010},
3921{0x3800000, 0xba98d27, 0xff7fffff, 0xff7fffff, 0x3800010},
3922{0x3800000, 0xba98d27, 0xff800000, 0xff800000, 0x3800000},
3923{0x3800000, 0xba98d27, 0xff800001, 0x7fc00000, 0x3800001},
3924{0x3800000, 0xba98d27, 0xff984a37, 0x7fc00000, 0x3800001},
3925{0x3800000, 0xba98d27, 0xffbfffff, 0x7fc00000, 0x3800001},
3926{0x3800000, 0xba98d27, 0xffc00000, 0x7fc00000, 0x3800000},
3927{0x3800000, 0xba98d27, 0xffd9ba98, 0x7fc00000, 0x3800000},
3928{0x3800000, 0xba98d27, 0xffffffff, 0x7fc00000, 0x3800000},
3929{0x3800000, 0xba98d27, 0x4f3495cb, 0x4f3495cb, 0x3800010},
3930{0x3800000, 0xba98d27, 0xe73a5134, 0xe73a5134, 0x3800010},
3931{0x3800000, 0xba98d27, 0x7c994e9e, 0x7c994e9e, 0x3800010},
3932{0x3800000, 0xba98d27, 0x6164bd6c, 0x6164bd6c, 0x3800010},
3933{0x3800000, 0xba98d27, 0x9503366, 0xbb00ec2, 0x3800010},
3934{0x3800000, 0xba98d27, 0xbf5a97c9, 0xbf5a97c9, 0x3800010},
3935{0x3800000, 0xba98d27, 0xe6ff1a14, 0xe6ff1a14, 0x3800010},
3936{0x3800000, 0xba98d27, 0x77f31e2f, 0x77f31e2f, 0x3800010},
3937{0x3800000, 0xba98d27, 0xaab4d7d8, 0xaab4d7d8, 0x3800010},
3938{0x3800000, 0xba98d27, 0x966320b, 0xbb0beb7, 0x3800010},
3939{0x3800000, 0xba98d27, 0xb26bddee, 0xb26bddee, 0x3800010},
3940{0x3800000, 0xba98d27, 0xb5c8e5d3, 0xb5c8e5d3, 0x3800010},
3941{0x3800000, 0xba98d27, 0x317285d3, 0x317285d3, 0x3800010},
3942{0x3800000, 0xba98d27, 0x3c9623b1, 0x3c9623b1, 0x3800010},
3943{0x3800000, 0xba98d27, 0x51fd2c7c, 0x51fd2c7c, 0x3800010},
3944{0x3800000, 0xba98d27, 0x7b906a6c, 0x7b906a6c, 0x3800010},
3945{0x3800000, 0xba98d7a, 0x0, 0xba98d7a, 0x3800000},
3946{0x3800000, 0xba98d7a, 0x1, 0xba98d7a, 0x3800080},
3947{0x3800000, 0xba98d7a, 0x76, 0xba98d7a, 0x3800080},
3948{0x3800000, 0xba98d7a, 0x2b94, 0xba98d7a, 0x3800080},
3949{0x3800000, 0xba98d7a, 0x636d24, 0xba98d7a, 0x3800080},
3950{0x3800000, 0xba98d7a, 0x7fffff, 0xba98d7a, 0x3800080},
3951{0x3800000, 0xba98d7a, 0x800000, 0xba98d7c, 0x3800000},
3952{0x3800000, 0xba98d7a, 0x800002, 0xba98d7c, 0x3800010},
3953{0x3800000, 0xba98d7a, 0x1398437, 0xba98d7f, 0x3800010},
3954{0x3800000, 0xba98d7a, 0xba98d27, 0xc298d50, 0x3800010},
3955{0x3800000, 0xba98d7a, 0xba98d7a, 0xc298d7a, 0x3800000},
3956{0x3800000, 0xba98d7a, 0x751f853a, 0x751f853a, 0x3800010},
3957{0x3800000, 0xba98d7a, 0x7f7ffff0, 0x7f7ffff0, 0x3800010},
3958{0x3800000, 0xba98d7a, 0x7f7fffff, 0x7f7fffff, 0x3800010},
3959{0x3800000, 0xba98d7a, 0x7f800000, 0x7f800000, 0x3800000},
3960{0x3800000, 0xba98d7a, 0x7f800001, 0x7fc00000, 0x3800001},
3961{0x3800000, 0xba98d7a, 0x7f984a37, 0x7fc00000, 0x3800001},
3962{0x3800000, 0xba98d7a, 0x7fbfffff, 0x7fc00000, 0x3800001},
3963{0x3800000, 0xba98d7a, 0x7fc00000, 0x7fc00000, 0x3800000},
3964{0x3800000, 0xba98d7a, 0x7fd9ba98, 0x7fc00000, 0x3800000},
3965{0x3800000, 0xba98d7a, 0x7fffffff, 0x7fc00000, 0x3800000},
3966{0x3800000, 0xba98d7a, 0x80000000, 0xba98d7a, 0x3800000},
3967{0x3800000, 0xba98d7a, 0x80000001, 0xba98d7a, 0x3800080},
3968{0x3800000, 0xba98d7a, 0x80000076, 0xba98d7a, 0x3800080},
3969{0x3800000, 0xba98d7a, 0x80002b94, 0xba98d7a, 0x3800080},
3970{0x3800000, 0xba98d7a, 0x80636d24, 0xba98d7a, 0x3800080},
3971{0x3800000, 0xba98d7a, 0x807fffff, 0xba98d7a, 0x3800080},
3972{0x3800000, 0xba98d7a, 0x80800000, 0xba98d78, 0x3800000},
3973{0x3800000, 0xba98d7a, 0x80800002, 0xba98d77, 0x3800010},
3974{0x3800000, 0xba98d7a, 0x81398437, 0xba98d74, 0x3800010},
3975{0x3800000, 0xba98d7a, 0x8ba98d27, 0x3260000, 0x3800000},
3976{0x3800000, 0xba98d7a, 0x8ba98d7a, 0x80000000, 0x3800000},
3977{0x3800000, 0xba98d7a, 0xf51f853a, 0xf51f853a, 0x3800010},
3978{0x3800000, 0xba98d7a, 0xff7ffff0, 0xff7ffff0, 0x3800010},
3979{0x3800000, 0xba98d7a, 0xff7fffff, 0xff7fffff, 0x3800010},
3980{0x3800000, 0xba98d7a, 0xff800000, 0xff800000, 0x3800000},
3981{0x3800000, 0xba98d7a, 0xff800001, 0x7fc00000, 0x3800001},
3982{0x3800000, 0xba98d7a, 0xff984a37, 0x7fc00000, 0x3800001},
3983{0x3800000, 0xba98d7a, 0xffbfffff, 0x7fc00000, 0x3800001},
3984{0x3800000, 0xba98d7a, 0xffc00000, 0x7fc00000, 0x3800000},
3985{0x3800000, 0xba98d7a, 0xffd9ba98, 0x7fc00000, 0x3800000},
3986{0x3800000, 0xba98d7a, 0xffffffff, 0x7fc00000, 0x3800000},
3987{0x3800000, 0xba98d7a, 0x4f3495cb, 0x4f3495cb, 0x3800010},
3988{0x3800000, 0xba98d7a, 0xe73a5134, 0xe73a5134, 0x3800010},
3989{0x3800000, 0xba98d7a, 0x7c994e9e, 0x7c994e9e, 0x3800010},
3990{0x3800000, 0xba98d7a, 0x6164bd6c, 0x6164bd6c, 0x3800010},
3991{0x3800000, 0xba98d7a, 0x9503366, 0xbb00f15, 0x3800010},
3992{0x3800000, 0xba98d7a, 0xbf5a97c9, 0xbf5a97c9, 0x3800010},
3993{0x3800000, 0xba98d7a, 0xe6ff1a14, 0xe6ff1a14, 0x3800010},
3994{0x3800000, 0xba98d7a, 0x77f31e2f, 0x77f31e2f, 0x3800010},
3995{0x3800000, 0xba98d7a, 0xaab4d7d8, 0xaab4d7d8, 0x3800010},
3996{0x3800000, 0xba98d7a, 0x966320b, 0xbb0bf0a, 0x3800010},
3997{0x3800000, 0xba98d7a, 0xb26bddee, 0xb26bddee, 0x3800010},
3998{0x3800000, 0xba98d7a, 0xb5c8e5d3, 0xb5c8e5d3, 0x3800010},
3999{0x3800000, 0xba98d7a, 0x317285d3, 0x317285d3, 0x3800010},
4000{0x3800000, 0xba98d7a, 0x3c9623b1, 0x3c9623b1, 0x3800010},
4001{0x3800000, 0xba98d7a, 0x51fd2c7c, 0x51fd2c7c, 0x3800010},
4002{0x3800000, 0xba98d7a, 0x7b906a6c, 0x7b906a6c, 0x3800010},
4003{0x3800000, 0x751f853a, 0x0, 0x751f853a, 0x3800000},
4004{0x3800000, 0x751f853a, 0x1, 0x751f853a, 0x3800080},
4005{0x3800000, 0x751f853a, 0x76, 0x751f853a, 0x3800080},
4006{0x3800000, 0x751f853a, 0x2b94, 0x751f853a, 0x3800080},
4007{0x3800000, 0x751f853a, 0x636d24, 0x751f853a, 0x3800080},
4008{0x3800000, 0x751f853a, 0x7fffff, 0x751f853a, 0x3800080},
4009{0x3800000, 0x751f853a, 0x800000, 0x751f853a, 0x3800010},
4010{0x3800000, 0x751f853a, 0x800002, 0x751f853a, 0x3800010},
4011{0x3800000, 0x751f853a, 0x1398437, 0x751f853a, 0x3800010},
4012{0x3800000, 0x751f853a, 0xba98d27, 0x751f853a, 0x3800010},
4013{0x3800000, 0x751f853a, 0xba98d7a, 0x751f853a, 0x3800010},
4014{0x3800000, 0x751f853a, 0x751f853a, 0x759f853a, 0x3800000},
4015{0x3800000, 0x751f853a, 0x7f7ffff0, 0x7f7ffff9, 0x3800010},
4016{0x3800000, 0x751f853a, 0x7f7fffff, 0x7f7fffff, 0x3800014},
4017{0x3800000, 0x751f853a, 0x7f800000, 0x7f800000, 0x3800000},
4018{0x3800000, 0x751f853a, 0x7f800001, 0x7fc00000, 0x3800001},
4019{0x3800000, 0x751f853a, 0x7f984a37, 0x7fc00000, 0x3800001},
4020{0x3800000, 0x751f853a, 0x7fbfffff, 0x7fc00000, 0x3800001},
4021{0x3800000, 0x751f853a, 0x7fc00000, 0x7fc00000, 0x3800000},
4022{0x3800000, 0x751f853a, 0x7fd9ba98, 0x7fc00000, 0x3800000},
4023{0x3800000, 0x751f853a, 0x7fffffff, 0x7fc00000, 0x3800000},
4024{0x3800000, 0x751f853a, 0x80000000, 0x751f853a, 0x3800000},
4025{0x3800000, 0x751f853a, 0x80000001, 0x751f853a, 0x3800080},
4026{0x3800000, 0x751f853a, 0x80000076, 0x751f853a, 0x3800080},
4027{0x3800000, 0x751f853a, 0x80002b94, 0x751f853a, 0x3800080},
4028{0x3800000, 0x751f853a, 0x80636d24, 0x751f853a, 0x3800080},
4029{0x3800000, 0x751f853a, 0x807fffff, 0x751f853a, 0x3800080},
4030{0x3800000, 0x751f853a, 0x80800000, 0x751f8539, 0x3800010},
4031{0x3800000, 0x751f853a, 0x80800002, 0x751f8539, 0x3800010},
4032{0x3800000, 0x751f853a, 0x81398437, 0x751f8539, 0x3800010},
4033{0x3800000, 0x751f853a, 0x8ba98d27, 0x751f8539, 0x3800010},
4034{0x3800000, 0x751f853a, 0x8ba98d7a, 0x751f8539, 0x3800010},
4035{0x3800000, 0x751f853a, 0xf51f853a, 0x80000000, 0x3800000},
4036{0x3800000, 0x751f853a, 0xff7ffff0, 0xff7fffe7, 0x3800010},
4037{0x3800000, 0x751f853a, 0xff7fffff, 0xff7ffff6, 0x3800010},
4038{0x3800000, 0x751f853a, 0xff800000, 0xff800000, 0x3800000},
4039{0x3800000, 0x751f853a, 0xff800001, 0x7fc00000, 0x3800001},
4040{0x3800000, 0x751f853a, 0xff984a37, 0x7fc00000, 0x3800001},
4041{0x3800000, 0x751f853a, 0xffbfffff, 0x7fc00000, 0x3800001},
4042{0x3800000, 0x751f853a, 0xffc00000, 0x7fc00000, 0x3800000},
4043{0x3800000, 0x751f853a, 0xffd9ba98, 0x7fc00000, 0x3800000},
4044{0x3800000, 0x751f853a, 0xffffffff, 0x7fc00000, 0x3800000},
4045{0x3800000, 0x751f853a, 0x4f3495cb, 0x751f853a, 0x3800010},
4046{0x3800000, 0x751f853a, 0xe73a5134, 0x751f8539, 0x3800010},
4047{0x3800000, 0x751f853a, 0x7c994e9e, 0x7c994fdd, 0x3800010},
4048{0x3800000, 0x751f853a, 0x6164bd6c, 0x751f853a, 0x3800010},
4049{0x3800000, 0x751f853a, 0x9503366, 0x751f853a, 0x3800010},
4050{0x3800000, 0x751f853a, 0xbf5a97c9, 0x751f8539, 0x3800010},
4051{0x3800000, 0x751f853a, 0xe6ff1a14, 0x751f8539, 0x3800010},
4052{0x3800000, 0x751f853a, 0x77f31e2f, 0x77f81a58, 0x3800010},
4053{0x3800000, 0x751f853a, 0xaab4d7d8, 0x751f8539, 0x3800010},
4054{0x3800000, 0x751f853a, 0x966320b, 0x751f853a, 0x3800010},
4055{0x3800000, 0x751f853a, 0xb26bddee, 0x751f8539, 0x3800010},
4056{0x3800000, 0x751f853a, 0xb5c8e5d3, 0x751f8539, 0x3800010},
4057{0x3800000, 0x751f853a, 0x317285d3, 0x751f853a, 0x3800010},
4058{0x3800000, 0x751f853a, 0x3c9623b1, 0x751f853a, 0x3800010},
4059{0x3800000, 0x751f853a, 0x51fd2c7c, 0x751f853a, 0x3800010},
4060{0x3800000, 0x751f853a, 0x7b906a6c, 0x7b906f68, 0x3800010},
4061{0x3800000, 0x7f7ffff0, 0x0, 0x7f7ffff0, 0x3800000},
4062{0x3800000, 0x7f7ffff0, 0x1, 0x7f7ffff0, 0x3800080},
4063{0x3800000, 0x7f7ffff0, 0x76, 0x7f7ffff0, 0x3800080},
4064{0x3800000, 0x7f7ffff0, 0x2b94, 0x7f7ffff0, 0x3800080},
4065{0x3800000, 0x7f7ffff0, 0x636d24, 0x7f7ffff0, 0x3800080},
4066{0x3800000, 0x7f7ffff0, 0x7fffff, 0x7f7ffff0, 0x3800080},
4067{0x3800000, 0x7f7ffff0, 0x800000, 0x7f7ffff0, 0x3800010},
4068{0x3800000, 0x7f7ffff0, 0x800002, 0x7f7ffff0, 0x3800010},
4069{0x3800000, 0x7f7ffff0, 0x1398437, 0x7f7ffff0, 0x3800010},
4070{0x3800000, 0x7f7ffff0, 0xba98d27, 0x7f7ffff0, 0x3800010},
4071{0x3800000, 0x7f7ffff0, 0xba98d7a, 0x7f7ffff0, 0x3800010},
4072{0x3800000, 0x7f7ffff0, 0x751f853a, 0x7f7ffff9, 0x3800010},
4073{0x3800000, 0x7f7ffff0, 0x7f7ffff0, 0x7f7fffff, 0x3800014},
4074{0x3800000, 0x7f7ffff0, 0x7f7fffff, 0x7f7fffff, 0x3800014},
4075{0x3800000, 0x7f7ffff0, 0x7f800000, 0x7f800000, 0x3800000},
4076{0x3800000, 0x7f7ffff0, 0x7f800001, 0x7fc00000, 0x3800001},
4077{0x3800000, 0x7f7ffff0, 0x7f984a37, 0x7fc00000, 0x3800001},
4078{0x3800000, 0x7f7ffff0, 0x7fbfffff, 0x7fc00000, 0x3800001},
4079{0x3800000, 0x7f7ffff0, 0x7fc00000, 0x7fc00000, 0x3800000},
4080{0x3800000, 0x7f7ffff0, 0x7fd9ba98, 0x7fc00000, 0x3800000},
4081{0x3800000, 0x7f7ffff0, 0x7fffffff, 0x7fc00000, 0x3800000},
4082{0x3800000, 0x7f7ffff0, 0x80000000, 0x7f7ffff0, 0x3800000},
4083{0x3800000, 0x7f7ffff0, 0x80000001, 0x7f7ffff0, 0x3800080},
4084{0x3800000, 0x7f7ffff0, 0x80000076, 0x7f7ffff0, 0x3800080},
4085{0x3800000, 0x7f7ffff0, 0x80002b94, 0x7f7ffff0, 0x3800080},
4086{0x3800000, 0x7f7ffff0, 0x80636d24, 0x7f7ffff0, 0x3800080},
4087{0x3800000, 0x7f7ffff0, 0x807fffff, 0x7f7ffff0, 0x3800080},
4088{0x3800000, 0x7f7ffff0, 0x80800000, 0x7f7fffef, 0x3800010},
4089{0x3800000, 0x7f7ffff0, 0x80800002, 0x7f7fffef, 0x3800010},
4090{0x3800000, 0x7f7ffff0, 0x81398437, 0x7f7fffef, 0x3800010},
4091{0x3800000, 0x7f7ffff0, 0x8ba98d27, 0x7f7fffef, 0x3800010},
4092{0x3800000, 0x7f7ffff0, 0x8ba98d7a, 0x7f7fffef, 0x3800010},
4093{0x3800000, 0x7f7ffff0, 0xf51f853a, 0x7f7fffe6, 0x3800010},
4094{0x3800000, 0x7f7ffff0, 0xff7ffff0, 0x80000000, 0x3800000},
4095{0x3800000, 0x7f7ffff0, 0xff7fffff, 0xf5700000, 0x3800000},
4096{0x3800000, 0x7f7ffff0, 0xff800000, 0xff800000, 0x3800000},
4097{0x3800000, 0x7f7ffff0, 0xff800001, 0x7fc00000, 0x3800001},
4098{0x3800000, 0x7f7ffff0, 0xff984a37, 0x7fc00000, 0x3800001},
4099{0x3800000, 0x7f7ffff0, 0xffbfffff, 0x7fc00000, 0x3800001},
4100{0x3800000, 0x7f7ffff0, 0xffc00000, 0x7fc00000, 0x3800000},
4101{0x3800000, 0x7f7ffff0, 0xffd9ba98, 0x7fc00000, 0x3800000},
4102{0x3800000, 0x7f7ffff0, 0xffffffff, 0x7fc00000, 0x3800000},
4103{0x3800000, 0x7f7ffff0, 0x4f3495cb, 0x7f7ffff0, 0x3800010},
4104{0x3800000, 0x7f7ffff0, 0xe73a5134, 0x7f7fffef, 0x3800010},
4105{0x3800000, 0x7f7ffff0, 0x7c994e9e, 0x7f7fffff, 0x3800014},
4106{0x3800000, 0x7f7ffff0, 0x6164bd6c, 0x7f7ffff0, 0x3800010},
4107{0x3800000, 0x7f7ffff0, 0x9503366, 0x7f7ffff0, 0x3800010},
4108{0x3800000, 0x7f7ffff0, 0xbf5a97c9, 0x7f7fffef, 0x3800010},
4109{0x3800000, 0x7f7ffff0, 0xe6ff1a14, 0x7f7fffef, 0x3800010},
4110{0x3800000, 0x7f7ffff0, 0x77f31e2f, 0x7f7fffff, 0x3800014},
4111{0x3800000, 0x7f7ffff0, 0xaab4d7d8, 0x7f7fffef, 0x3800010},
4112{0x3800000, 0x7f7ffff0, 0x966320b, 0x7f7ffff0, 0x3800010},
4113{0x3800000, 0x7f7ffff0, 0xb26bddee, 0x7f7fffef, 0x3800010},
4114{0x3800000, 0x7f7ffff0, 0xb5c8e5d3, 0x7f7fffef, 0x3800010},
4115{0x3800000, 0x7f7ffff0, 0x317285d3, 0x7f7ffff0, 0x3800010},
4116{0x3800000, 0x7f7ffff0, 0x3c9623b1, 0x7f7ffff0, 0x3800010},
4117{0x3800000, 0x7f7ffff0, 0x51fd2c7c, 0x7f7ffff0, 0x3800010},
4118{0x3800000, 0x7f7ffff0, 0x7b906a6c, 0x7f7fffff, 0x3800014},
4119{0x3800000, 0x7f7fffff, 0x0, 0x7f7fffff, 0x3800000},
4120{0x3800000, 0x7f7fffff, 0x1, 0x7f7fffff, 0x3800080},
4121{0x3800000, 0x7f7fffff, 0x76, 0x7f7fffff, 0x3800080},
4122{0x3800000, 0x7f7fffff, 0x2b94, 0x7f7fffff, 0x3800080},
4123{0x3800000, 0x7f7fffff, 0x636d24, 0x7f7fffff, 0x3800080},
4124{0x3800000, 0x7f7fffff, 0x7fffff, 0x7f7fffff, 0x3800080},
4125{0x3800000, 0x7f7fffff, 0x800000, 0x7f7fffff, 0x3800010},
4126{0x3800000, 0x7f7fffff, 0x800002, 0x7f7fffff, 0x3800010},
4127{0x3800000, 0x7f7fffff, 0x1398437, 0x7f7fffff, 0x3800010},
4128{0x3800000, 0x7f7fffff, 0xba98d27, 0x7f7fffff, 0x3800010},
4129{0x3800000, 0x7f7fffff, 0xba98d7a, 0x7f7fffff, 0x3800010},
4130{0x3800000, 0x7f7fffff, 0x751f853a, 0x7f7fffff, 0x3800014},
4131{0x3800000, 0x7f7fffff, 0x7f7ffff0, 0x7f7fffff, 0x3800014},
4132{0x3800000, 0x7f7fffff, 0x7f7fffff, 0x7f7fffff, 0x3800014},
4133{0x3800000, 0x7f7fffff, 0x7f800000, 0x7f800000, 0x3800000},
4134{0x3800000, 0x7f7fffff, 0x7f800001, 0x7fc00000, 0x3800001},
4135{0x3800000, 0x7f7fffff, 0x7f984a37, 0x7fc00000, 0x3800001},
4136{0x3800000, 0x7f7fffff, 0x7fbfffff, 0x7fc00000, 0x3800001},
4137{0x3800000, 0x7f7fffff, 0x7fc00000, 0x7fc00000, 0x3800000},
4138{0x3800000, 0x7f7fffff, 0x7fd9ba98, 0x7fc00000, 0x3800000},
4139{0x3800000, 0x7f7fffff, 0x7fffffff, 0x7fc00000, 0x3800000},
4140{0x3800000, 0x7f7fffff, 0x80000000, 0x7f7fffff, 0x3800000},
4141{0x3800000, 0x7f7fffff, 0x80000001, 0x7f7fffff, 0x3800080},
4142{0x3800000, 0x7f7fffff, 0x80000076, 0x7f7fffff, 0x3800080},
4143{0x3800000, 0x7f7fffff, 0x80002b94, 0x7f7fffff, 0x3800080},
4144{0x3800000, 0x7f7fffff, 0x80636d24, 0x7f7fffff, 0x3800080},
4145{0x3800000, 0x7f7fffff, 0x807fffff, 0x7f7fffff, 0x3800080},
4146{0x3800000, 0x7f7fffff, 0x80800000, 0x7f7ffffe, 0x3800010},
4147{0x3800000, 0x7f7fffff, 0x80800002, 0x7f7ffffe, 0x3800010},
4148{0x3800000, 0x7f7fffff, 0x81398437, 0x7f7ffffe, 0x3800010},
4149{0x3800000, 0x7f7fffff, 0x8ba98d27, 0x7f7ffffe, 0x3800010},
4150{0x3800000, 0x7f7fffff, 0x8ba98d7a, 0x7f7ffffe, 0x3800010},
4151{0x3800000, 0x7f7fffff, 0xf51f853a, 0x7f7ffff5, 0x3800010},
4152{0x3800000, 0x7f7fffff, 0xff7ffff0, 0x75700000, 0x3800000},
4153{0x3800000, 0x7f7fffff, 0xff7fffff, 0x80000000, 0x3800000},
4154{0x3800000, 0x7f7fffff, 0xff800000, 0xff800000, 0x3800000},
4155{0x3800000, 0x7f7fffff, 0xff800001, 0x7fc00000, 0x3800001},
4156{0x3800000, 0x7f7fffff, 0xff984a37, 0x7fc00000, 0x3800001},
4157{0x3800000, 0x7f7fffff, 0xffbfffff, 0x7fc00000, 0x3800001},
4158{0x3800000, 0x7f7fffff, 0xffc00000, 0x7fc00000, 0x3800000},
4159{0x3800000, 0x7f7fffff, 0xffd9ba98, 0x7fc00000, 0x3800000},
4160{0x3800000, 0x7f7fffff, 0xffffffff, 0x7fc00000, 0x3800000},
4161{0x3800000, 0x7f7fffff, 0x4f3495cb, 0x7f7fffff, 0x3800010},
4162{0x3800000, 0x7f7fffff, 0xe73a5134, 0x7f7ffffe, 0x3800010},
4163{0x3800000, 0x7f7fffff, 0x7c994e9e, 0x7f7fffff, 0x3800014},
4164{0x3800000, 0x7f7fffff, 0x6164bd6c, 0x7f7fffff, 0x3800010},
4165{0x3800000, 0x7f7fffff, 0x9503366, 0x7f7fffff, 0x3800010},
4166{0x3800000, 0x7f7fffff, 0xbf5a97c9, 0x7f7ffffe, 0x3800010},
4167{0x3800000, 0x7f7fffff, 0xe6ff1a14, 0x7f7ffffe, 0x3800010},
4168{0x3800000, 0x7f7fffff, 0x77f31e2f, 0x7f7fffff, 0x3800014},
4169{0x3800000, 0x7f7fffff, 0xaab4d7d8, 0x7f7ffffe, 0x3800010},
4170{0x3800000, 0x7f7fffff, 0x966320b, 0x7f7fffff, 0x3800010},
4171{0x3800000, 0x7f7fffff, 0xb26bddee, 0x7f7ffffe, 0x3800010},
4172{0x3800000, 0x7f7fffff, 0xb5c8e5d3, 0x7f7ffffe, 0x3800010},
4173{0x3800000, 0x7f7fffff, 0x317285d3, 0x7f7fffff, 0x3800010},
4174{0x3800000, 0x7f7fffff, 0x3c9623b1, 0x7f7fffff, 0x3800010},
4175{0x3800000, 0x7f7fffff, 0x51fd2c7c, 0x7f7fffff, 0x3800010},
4176{0x3800000, 0x7f7fffff, 0x7b906a6c, 0x7f7fffff, 0x3800014},
4177{0x3800000, 0x7f800000, 0x0, 0x7f800000, 0x3800000},
4178{0x3800000, 0x7f800000, 0x1, 0x7f800000, 0x3800080},
4179{0x3800000, 0x7f800000, 0x76, 0x7f800000, 0x3800080},
4180{0x3800000, 0x7f800000, 0x2b94, 0x7f800000, 0x3800080},
4181{0x3800000, 0x7f800000, 0x636d24, 0x7f800000, 0x3800080},
4182{0x3800000, 0x7f800000, 0x7fffff, 0x7f800000, 0x3800080},
4183{0x3800000, 0x7f800000, 0x800000, 0x7f800000, 0x3800000},
4184{0x3800000, 0x7f800000, 0x800002, 0x7f800000, 0x3800000},
4185{0x3800000, 0x7f800000, 0x1398437, 0x7f800000, 0x3800000},
4186{0x3800000, 0x7f800000, 0xba98d27, 0x7f800000, 0x3800000},
4187{0x3800000, 0x7f800000, 0xba98d7a, 0x7f800000, 0x3800000},
4188{0x3800000, 0x7f800000, 0x751f853a, 0x7f800000, 0x3800000},
4189{0x3800000, 0x7f800000, 0x7f7ffff0, 0x7f800000, 0x3800000},
4190{0x3800000, 0x7f800000, 0x7f7fffff, 0x7f800000, 0x3800000},
4191{0x3800000, 0x7f800000, 0x7f800000, 0x7f800000, 0x3800000},
4192{0x3800000, 0x7f800000, 0x7f800001, 0x7fc00000, 0x3800001},
4193{0x3800000, 0x7f800000, 0x7f984a37, 0x7fc00000, 0x3800001},
4194{0x3800000, 0x7f800000, 0x7fbfffff, 0x7fc00000, 0x3800001},
4195{0x3800000, 0x7f800000, 0x7fc00000, 0x7fc00000, 0x3800000},
4196{0x3800000, 0x7f800000, 0x7fd9ba98, 0x7fc00000, 0x3800000},
4197{0x3800000, 0x7f800000, 0x7fffffff, 0x7fc00000, 0x3800000},
4198{0x3800000, 0x7f800000, 0x80000000, 0x7f800000, 0x3800000},
4199{0x3800000, 0x7f800000, 0x80000001, 0x7f800000, 0x3800080},
4200{0x3800000, 0x7f800000, 0x80000076, 0x7f800000, 0x3800080},
4201{0x3800000, 0x7f800000, 0x80002b94, 0x7f800000, 0x3800080},
4202{0x3800000, 0x7f800000, 0x80636d24, 0x7f800000, 0x3800080},
4203{0x3800000, 0x7f800000, 0x807fffff, 0x7f800000, 0x3800080},
4204{0x3800000, 0x7f800000, 0x80800000, 0x7f800000, 0x3800000},
4205{0x3800000, 0x7f800000, 0x80800002, 0x7f800000, 0x3800000},
4206{0x3800000, 0x7f800000, 0x81398437, 0x7f800000, 0x3800000},
4207{0x3800000, 0x7f800000, 0x8ba98d27, 0x7f800000, 0x3800000},
4208{0x3800000, 0x7f800000, 0x8ba98d7a, 0x7f800000, 0x3800000},
4209{0x3800000, 0x7f800000, 0xf51f853a, 0x7f800000, 0x3800000},
4210{0x3800000, 0x7f800000, 0xff7ffff0, 0x7f800000, 0x3800000},
4211{0x3800000, 0x7f800000, 0xff7fffff, 0x7f800000, 0x3800000},
4212{0x3800000, 0x7f800000, 0xff800000, 0x7fc00000, 0x3800001},
4213{0x3800000, 0x7f800000, 0xff800001, 0x7fc00000, 0x3800001},
4214{0x3800000, 0x7f800000, 0xff984a37, 0x7fc00000, 0x3800001},
4215{0x3800000, 0x7f800000, 0xffbfffff, 0x7fc00000, 0x3800001},
4216{0x3800000, 0x7f800000, 0xffc00000, 0x7fc00000, 0x3800000},
4217{0x3800000, 0x7f800000, 0xffd9ba98, 0x7fc00000, 0x3800000},
4218{0x3800000, 0x7f800000, 0xffffffff, 0x7fc00000, 0x3800000},
4219{0x3800000, 0x7f800000, 0x4f3495cb, 0x7f800000, 0x3800000},
4220{0x3800000, 0x7f800000, 0xe73a5134, 0x7f800000, 0x3800000},
4221{0x3800000, 0x7f800000, 0x7c994e9e, 0x7f800000, 0x3800000},
4222{0x3800000, 0x7f800000, 0x6164bd6c, 0x7f800000, 0x3800000},
4223{0x3800000, 0x7f800000, 0x9503366, 0x7f800000, 0x3800000},
4224{0x3800000, 0x7f800000, 0xbf5a97c9, 0x7f800000, 0x3800000},
4225{0x3800000, 0x7f800000, 0xe6ff1a14, 0x7f800000, 0x3800000},
4226{0x3800000, 0x7f800000, 0x77f31e2f, 0x7f800000, 0x3800000},
4227{0x3800000, 0x7f800000, 0xaab4d7d8, 0x7f800000, 0x3800000},
4228{0x3800000, 0x7f800000, 0x966320b, 0x7f800000, 0x3800000},
4229{0x3800000, 0x7f800000, 0xb26bddee, 0x7f800000, 0x3800000},
4230{0x3800000, 0x7f800000, 0xb5c8e5d3, 0x7f800000, 0x3800000},
4231{0x3800000, 0x7f800000, 0x317285d3, 0x7f800000, 0x3800000},
4232{0x3800000, 0x7f800000, 0x3c9623b1, 0x7f800000, 0x3800000},
4233{0x3800000, 0x7f800000, 0x51fd2c7c, 0x7f800000, 0x3800000},
4234{0x3800000, 0x7f800000, 0x7b906a6c, 0x7f800000, 0x3800000},
4235{0x3800000, 0x7f800001, 0x0, 0x7fc00000, 0x3800001},
4236{0x3800000, 0x7f800001, 0x1, 0x7fc00000, 0x3800081},
4237{0x3800000, 0x7f800001, 0x76, 0x7fc00000, 0x3800081},
4238{0x3800000, 0x7f800001, 0x2b94, 0x7fc00000, 0x3800081},
4239{0x3800000, 0x7f800001, 0x636d24, 0x7fc00000, 0x3800081},
4240{0x3800000, 0x7f800001, 0x7fffff, 0x7fc00000, 0x3800081},
4241{0x3800000, 0x7f800001, 0x800000, 0x7fc00000, 0x3800001},
4242{0x3800000, 0x7f800001, 0x800002, 0x7fc00000, 0x3800001},
4243{0x3800000, 0x7f800001, 0x1398437, 0x7fc00000, 0x3800001},
4244{0x3800000, 0x7f800001, 0xba98d27, 0x7fc00000, 0x3800001},
4245{0x3800000, 0x7f800001, 0xba98d7a, 0x7fc00000, 0x3800001},
4246{0x3800000, 0x7f800001, 0x751f853a, 0x7fc00000, 0x3800001},
4247{0x3800000, 0x7f800001, 0x7f7ffff0, 0x7fc00000, 0x3800001},
4248{0x3800000, 0x7f800001, 0x7f7fffff, 0x7fc00000, 0x3800001},
4249{0x3800000, 0x7f800001, 0x7f800000, 0x7fc00000, 0x3800001},
4250{0x3800000, 0x7f800001, 0x7f800001, 0x7fc00000, 0x3800001},
4251{0x3800000, 0x7f800001, 0x7f984a37, 0x7fc00000, 0x3800001},
4252{0x3800000, 0x7f800001, 0x7fbfffff, 0x7fc00000, 0x3800001},
4253{0x3800000, 0x7f800001, 0x7fc00000, 0x7fc00000, 0x3800001},
4254{0x3800000, 0x7f800001, 0x7fd9ba98, 0x7fc00000, 0x3800001},
4255{0x3800000, 0x7f800001, 0x7fffffff, 0x7fc00000, 0x3800001},
4256{0x3800000, 0x7f800001, 0x80000000, 0x7fc00000, 0x3800001},
4257{0x3800000, 0x7f800001, 0x80000001, 0x7fc00000, 0x3800081},
4258{0x3800000, 0x7f800001, 0x80000076, 0x7fc00000, 0x3800081},
4259{0x3800000, 0x7f800001, 0x80002b94, 0x7fc00000, 0x3800081},
4260{0x3800000, 0x7f800001, 0x80636d24, 0x7fc00000, 0x3800081},
4261{0x3800000, 0x7f800001, 0x807fffff, 0x7fc00000, 0x3800081},
4262{0x3800000, 0x7f800001, 0x80800000, 0x7fc00000, 0x3800001},
4263{0x3800000, 0x7f800001, 0x80800002, 0x7fc00000, 0x3800001},
4264{0x3800000, 0x7f800001, 0x81398437, 0x7fc00000, 0x3800001},
4265{0x3800000, 0x7f800001, 0x8ba98d27, 0x7fc00000, 0x3800001},
4266{0x3800000, 0x7f800001, 0x8ba98d7a, 0x7fc00000, 0x3800001},
4267{0x3800000, 0x7f800001, 0xf51f853a, 0x7fc00000, 0x3800001},
4268{0x3800000, 0x7f800001, 0xff7ffff0, 0x7fc00000, 0x3800001},
4269{0x3800000, 0x7f800001, 0xff7fffff, 0x7fc00000, 0x3800001},
4270{0x3800000, 0x7f800001, 0xff800000, 0x7fc00000, 0x3800001},
4271{0x3800000, 0x7f800001, 0xff800001, 0x7fc00000, 0x3800001},
4272{0x3800000, 0x7f800001, 0xff984a37, 0x7fc00000, 0x3800001},
4273{0x3800000, 0x7f800001, 0xffbfffff, 0x7fc00000, 0x3800001},
4274{0x3800000, 0x7f800001, 0xffc00000, 0x7fc00000, 0x3800001},
4275{0x3800000, 0x7f800001, 0xffd9ba98, 0x7fc00000, 0x3800001},
4276{0x3800000, 0x7f800001, 0xffffffff, 0x7fc00000, 0x3800001},
4277{0x3800000, 0x7f800001, 0x4f3495cb, 0x7fc00000, 0x3800001},
4278{0x3800000, 0x7f800001, 0xe73a5134, 0x7fc00000, 0x3800001},
4279{0x3800000, 0x7f800001, 0x7c994e9e, 0x7fc00000, 0x3800001},
4280{0x3800000, 0x7f800001, 0x6164bd6c, 0x7fc00000, 0x3800001},
4281{0x3800000, 0x7f800001, 0x9503366, 0x7fc00000, 0x3800001},
4282{0x3800000, 0x7f800001, 0xbf5a97c9, 0x7fc00000, 0x3800001},
4283{0x3800000, 0x7f800001, 0xe6ff1a14, 0x7fc00000, 0x3800001},
4284{0x3800000, 0x7f800001, 0x77f31e2f, 0x7fc00000, 0x3800001},
4285{0x3800000, 0x7f800001, 0xaab4d7d8, 0x7fc00000, 0x3800001},
4286{0x3800000, 0x7f800001, 0x966320b, 0x7fc00000, 0x3800001},
4287{0x3800000, 0x7f800001, 0xb26bddee, 0x7fc00000, 0x3800001},
4288{0x3800000, 0x7f800001, 0xb5c8e5d3, 0x7fc00000, 0x3800001},
4289{0x3800000, 0x7f800001, 0x317285d3, 0x7fc00000, 0x3800001},
4290{0x3800000, 0x7f800001, 0x3c9623b1, 0x7fc00000, 0x3800001},
4291{0x3800000, 0x7f800001, 0x51fd2c7c, 0x7fc00000, 0x3800001},
4292{0x3800000, 0x7f800001, 0x7b906a6c, 0x7fc00000, 0x3800001},
4293{0x3800000, 0x7f984a37, 0x0, 0x7fc00000, 0x3800001},
4294{0x3800000, 0x7f984a37, 0x1, 0x7fc00000, 0x3800081},
4295{0x3800000, 0x7f984a37, 0x76, 0x7fc00000, 0x3800081},
4296{0x3800000, 0x7f984a37, 0x2b94, 0x7fc00000, 0x3800081},
4297{0x3800000, 0x7f984a37, 0x636d24, 0x7fc00000, 0x3800081},
4298{0x3800000, 0x7f984a37, 0x7fffff, 0x7fc00000, 0x3800081},
4299{0x3800000, 0x7f984a37, 0x800000, 0x7fc00000, 0x3800001},
4300{0x3800000, 0x7f984a37, 0x800002, 0x7fc00000, 0x3800001},
4301{0x3800000, 0x7f984a37, 0x1398437, 0x7fc00000, 0x3800001},
4302{0x3800000, 0x7f984a37, 0xba98d27, 0x7fc00000, 0x3800001},
4303{0x3800000, 0x7f984a37, 0xba98d7a, 0x7fc00000, 0x3800001},
4304{0x3800000, 0x7f984a37, 0x751f853a, 0x7fc00000, 0x3800001},
4305{0x3800000, 0x7f984a37, 0x7f7ffff0, 0x7fc00000, 0x3800001},
4306{0x3800000, 0x7f984a37, 0x7f7fffff, 0x7fc00000, 0x3800001},
4307{0x3800000, 0x7f984a37, 0x7f800000, 0x7fc00000, 0x3800001},
4308{0x3800000, 0x7f984a37, 0x7f800001, 0x7fc00000, 0x3800001},
4309{0x3800000, 0x7f984a37, 0x7f984a37, 0x7fc00000, 0x3800001},
4310{0x3800000, 0x7f984a37, 0x7fbfffff, 0x7fc00000, 0x3800001},
4311{0x3800000, 0x7f984a37, 0x7fc00000, 0x7fc00000, 0x3800001},
4312{0x3800000, 0x7f984a37, 0x7fd9ba98, 0x7fc00000, 0x3800001},
4313{0x3800000, 0x7f984a37, 0x7fffffff, 0x7fc00000, 0x3800001},
4314{0x3800000, 0x7f984a37, 0x80000000, 0x7fc00000, 0x3800001},
4315{0x3800000, 0x7f984a37, 0x80000001, 0x7fc00000, 0x3800081},
4316{0x3800000, 0x7f984a37, 0x80000076, 0x7fc00000, 0x3800081},
4317{0x3800000, 0x7f984a37, 0x80002b94, 0x7fc00000, 0x3800081},
4318{0x3800000, 0x7f984a37, 0x80636d24, 0x7fc00000, 0x3800081},
4319{0x3800000, 0x7f984a37, 0x807fffff, 0x7fc00000, 0x3800081},
4320{0x3800000, 0x7f984a37, 0x80800000, 0x7fc00000, 0x3800001},
4321{0x3800000, 0x7f984a37, 0x80800002, 0x7fc00000, 0x3800001},
4322{0x3800000, 0x7f984a37, 0x81398437, 0x7fc00000, 0x3800001},
4323{0x3800000, 0x7f984a37, 0x8ba98d27, 0x7fc00000, 0x3800001},
4324{0x3800000, 0x7f984a37, 0x8ba98d7a, 0x7fc00000, 0x3800001},
4325{0x3800000, 0x7f984a37, 0xf51f853a, 0x7fc00000, 0x3800001},
4326{0x3800000, 0x7f984a37, 0xff7ffff0, 0x7fc00000, 0x3800001},
4327{0x3800000, 0x7f984a37, 0xff7fffff, 0x7fc00000, 0x3800001},
4328{0x3800000, 0x7f984a37, 0xff800000, 0x7fc00000, 0x3800001},
4329{0x3800000, 0x7f984a37, 0xff800001, 0x7fc00000, 0x3800001},
4330{0x3800000, 0x7f984a37, 0xff984a37, 0x7fc00000, 0x3800001},
4331{0x3800000, 0x7f984a37, 0xffbfffff, 0x7fc00000, 0x3800001},
4332{0x3800000, 0x7f984a37, 0xffc00000, 0x7fc00000, 0x3800001},
4333{0x3800000, 0x7f984a37, 0xffd9ba98, 0x7fc00000, 0x3800001},
4334{0x3800000, 0x7f984a37, 0xffffffff, 0x7fc00000, 0x3800001},
4335{0x3800000, 0x7f984a37, 0x4f3495cb, 0x7fc00000, 0x3800001},
4336{0x3800000, 0x7f984a37, 0xe73a5134, 0x7fc00000, 0x3800001},
4337{0x3800000, 0x7f984a37, 0x7c994e9e, 0x7fc00000, 0x3800001},
4338{0x3800000, 0x7f984a37, 0x6164bd6c, 0x7fc00000, 0x3800001},
4339{0x3800000, 0x7f984a37, 0x9503366, 0x7fc00000, 0x3800001},
4340{0x3800000, 0x7f984a37, 0xbf5a97c9, 0x7fc00000, 0x3800001},
4341{0x3800000, 0x7f984a37, 0xe6ff1a14, 0x7fc00000, 0x3800001},
4342{0x3800000, 0x7f984a37, 0x77f31e2f, 0x7fc00000, 0x3800001},
4343{0x3800000, 0x7f984a37, 0xaab4d7d8, 0x7fc00000, 0x3800001},
4344{0x3800000, 0x7f984a37, 0x966320b, 0x7fc00000, 0x3800001},
4345{0x3800000, 0x7f984a37, 0xb26bddee, 0x7fc00000, 0x3800001},
4346{0x3800000, 0x7f984a37, 0xb5c8e5d3, 0x7fc00000, 0x3800001},
4347{0x3800000, 0x7f984a37, 0x317285d3, 0x7fc00000, 0x3800001},
4348{0x3800000, 0x7f984a37, 0x3c9623b1, 0x7fc00000, 0x3800001},
4349{0x3800000, 0x7f984a37, 0x51fd2c7c, 0x7fc00000, 0x3800001},
4350{0x3800000, 0x7f984a37, 0x7b906a6c, 0x7fc00000, 0x3800001},
4351{0x3800000, 0x7fbfffff, 0x0, 0x7fc00000, 0x3800001},
4352{0x3800000, 0x7fbfffff, 0x1, 0x7fc00000, 0x3800081},
4353{0x3800000, 0x7fbfffff, 0x76, 0x7fc00000, 0x3800081},
4354{0x3800000, 0x7fbfffff, 0x2b94, 0x7fc00000, 0x3800081},
4355{0x3800000, 0x7fbfffff, 0x636d24, 0x7fc00000, 0x3800081},
4356{0x3800000, 0x7fbfffff, 0x7fffff, 0x7fc00000, 0x3800081},
4357{0x3800000, 0x7fbfffff, 0x800000, 0x7fc00000, 0x3800001},
4358{0x3800000, 0x7fbfffff, 0x800002, 0x7fc00000, 0x3800001},
4359{0x3800000, 0x7fbfffff, 0x1398437, 0x7fc00000, 0x3800001},
4360{0x3800000, 0x7fbfffff, 0xba98d27, 0x7fc00000, 0x3800001},
4361{0x3800000, 0x7fbfffff, 0xba98d7a, 0x7fc00000, 0x3800001},
4362{0x3800000, 0x7fbfffff, 0x751f853a, 0x7fc00000, 0x3800001},
4363{0x3800000, 0x7fbfffff, 0x7f7ffff0, 0x7fc00000, 0x3800001},
4364{0x3800000, 0x7fbfffff, 0x7f7fffff, 0x7fc00000, 0x3800001},
4365{0x3800000, 0x7fbfffff, 0x7f800000, 0x7fc00000, 0x3800001},
4366{0x3800000, 0x7fbfffff, 0x7f800001, 0x7fc00000, 0x3800001},
4367{0x3800000, 0x7fbfffff, 0x7f984a37, 0x7fc00000, 0x3800001},
4368{0x3800000, 0x7fbfffff, 0x7fbfffff, 0x7fc00000, 0x3800001},
4369{0x3800000, 0x7fbfffff, 0x7fc00000, 0x7fc00000, 0x3800001},
4370{0x3800000, 0x7fbfffff, 0x7fd9ba98, 0x7fc00000, 0x3800001},
4371{0x3800000, 0x7fbfffff, 0x7fffffff, 0x7fc00000, 0x3800001},
4372{0x3800000, 0x7fbfffff, 0x80000000, 0x7fc00000, 0x3800001},
4373{0x3800000, 0x7fbfffff, 0x80000001, 0x7fc00000, 0x3800081},
4374{0x3800000, 0x7fbfffff, 0x80000076, 0x7fc00000, 0x3800081},
4375{0x3800000, 0x7fbfffff, 0x80002b94, 0x7fc00000, 0x3800081},
4376{0x3800000, 0x7fbfffff, 0x80636d24, 0x7fc00000, 0x3800081},
4377{0x3800000, 0x7fbfffff, 0x807fffff, 0x7fc00000, 0x3800081},
4378{0x3800000, 0x7fbfffff, 0x80800000, 0x7fc00000, 0x3800001},
4379{0x3800000, 0x7fbfffff, 0x80800002, 0x7fc00000, 0x3800001},
4380{0x3800000, 0x7fbfffff, 0x81398437, 0x7fc00000, 0x3800001},
4381{0x3800000, 0x7fbfffff, 0x8ba98d27, 0x7fc00000, 0x3800001},
4382{0x3800000, 0x7fbfffff, 0x8ba98d7a, 0x7fc00000, 0x3800001},
4383{0x3800000, 0x7fbfffff, 0xf51f853a, 0x7fc00000, 0x3800001},
4384{0x3800000, 0x7fbfffff, 0xff7ffff0, 0x7fc00000, 0x3800001},
4385{0x3800000, 0x7fbfffff, 0xff7fffff, 0x7fc00000, 0x3800001},
4386{0x3800000, 0x7fbfffff, 0xff800000, 0x7fc00000, 0x3800001},
4387{0x3800000, 0x7fbfffff, 0xff800001, 0x7fc00000, 0x3800001},
4388{0x3800000, 0x7fbfffff, 0xff984a37, 0x7fc00000, 0x3800001},
4389{0x3800000, 0x7fbfffff, 0xffbfffff, 0x7fc00000, 0x3800001},
4390{0x3800000, 0x7fbfffff, 0xffc00000, 0x7fc00000, 0x3800001},
4391{0x3800000, 0x7fbfffff, 0xffd9ba98, 0x7fc00000, 0x3800001},
4392{0x3800000, 0x7fbfffff, 0xffffffff, 0x7fc00000, 0x3800001},
4393{0x3800000, 0x7fbfffff, 0x4f3495cb, 0x7fc00000, 0x3800001},
4394{0x3800000, 0x7fbfffff, 0xe73a5134, 0x7fc00000, 0x3800001},
4395{0x3800000, 0x7fbfffff, 0x7c994e9e, 0x7fc00000, 0x3800001},
4396{0x3800000, 0x7fbfffff, 0x6164bd6c, 0x7fc00000, 0x3800001},
4397{0x3800000, 0x7fbfffff, 0x9503366, 0x7fc00000, 0x3800001},
4398{0x3800000, 0x7fbfffff, 0xbf5a97c9, 0x7fc00000, 0x3800001},
4399{0x3800000, 0x7fbfffff, 0xe6ff1a14, 0x7fc00000, 0x3800001},
4400{0x3800000, 0x7fbfffff, 0x77f31e2f, 0x7fc00000, 0x3800001},
4401{0x3800000, 0x7fbfffff, 0xaab4d7d8, 0x7fc00000, 0x3800001},
4402{0x3800000, 0x7fbfffff, 0x966320b, 0x7fc00000, 0x3800001},
4403{0x3800000, 0x7fbfffff, 0xb26bddee, 0x7fc00000, 0x3800001},
4404{0x3800000, 0x7fbfffff, 0xb5c8e5d3, 0x7fc00000, 0x3800001},
4405{0x3800000, 0x7fbfffff, 0x317285d3, 0x7fc00000, 0x3800001},
4406{0x3800000, 0x7fbfffff, 0x3c9623b1, 0x7fc00000, 0x3800001},
4407{0x3800000, 0x7fbfffff, 0x51fd2c7c, 0x7fc00000, 0x3800001},
4408{0x3800000, 0x7fbfffff, 0x7b906a6c, 0x7fc00000, 0x3800001},
4409{0x3800000, 0x7fc00000, 0x0, 0x7fc00000, 0x3800000},
4410{0x3800000, 0x7fc00000, 0x1, 0x7fc00000, 0x3800080},
4411{0x3800000, 0x7fc00000, 0x76, 0x7fc00000, 0x3800080},
4412{0x3800000, 0x7fc00000, 0x2b94, 0x7fc00000, 0x3800080},
4413{0x3800000, 0x7fc00000, 0x636d24, 0x7fc00000, 0x3800080},
4414{0x3800000, 0x7fc00000, 0x7fffff, 0x7fc00000, 0x3800080},
4415{0x3800000, 0x7fc00000, 0x800000, 0x7fc00000, 0x3800000},
4416{0x3800000, 0x7fc00000, 0x800002, 0x7fc00000, 0x3800000},
4417{0x3800000, 0x7fc00000, 0x1398437, 0x7fc00000, 0x3800000},
4418{0x3800000, 0x7fc00000, 0xba98d27, 0x7fc00000, 0x3800000},
4419{0x3800000, 0x7fc00000, 0xba98d7a, 0x7fc00000, 0x3800000},
4420{0x3800000, 0x7fc00000, 0x751f853a, 0x7fc00000, 0x3800000},
4421{0x3800000, 0x7fc00000, 0x7f7ffff0, 0x7fc00000, 0x3800000},
4422{0x3800000, 0x7fc00000, 0x7f7fffff, 0x7fc00000, 0x3800000},
4423{0x3800000, 0x7fc00000, 0x7f800000, 0x7fc00000, 0x3800000},
4424{0x3800000, 0x7fc00000, 0x7f800001, 0x7fc00000, 0x3800001},
4425{0x3800000, 0x7fc00000, 0x7f984a37, 0x7fc00000, 0x3800001},
4426{0x3800000, 0x7fc00000, 0x7fbfffff, 0x7fc00000, 0x3800001},
4427{0x3800000, 0x7fc00000, 0x7fc00000, 0x7fc00000, 0x3800000},
4428{0x3800000, 0x7fc00000, 0x7fd9ba98, 0x7fc00000, 0x3800000},
4429{0x3800000, 0x7fc00000, 0x7fffffff, 0x7fc00000, 0x3800000},
4430{0x3800000, 0x7fc00000, 0x80000000, 0x7fc00000, 0x3800000},
4431{0x3800000, 0x7fc00000, 0x80000001, 0x7fc00000, 0x3800080},
4432{0x3800000, 0x7fc00000, 0x80000076, 0x7fc00000, 0x3800080},
4433{0x3800000, 0x7fc00000, 0x80002b94, 0x7fc00000, 0x3800080},
4434{0x3800000, 0x7fc00000, 0x80636d24, 0x7fc00000, 0x3800080},
4435{0x3800000, 0x7fc00000, 0x807fffff, 0x7fc00000, 0x3800080},
4436{0x3800000, 0x7fc00000, 0x80800000, 0x7fc00000, 0x3800000},
4437{0x3800000, 0x7fc00000, 0x80800002, 0x7fc00000, 0x3800000},
4438{0x3800000, 0x7fc00000, 0x81398437, 0x7fc00000, 0x3800000},
4439{0x3800000, 0x7fc00000, 0x8ba98d27, 0x7fc00000, 0x3800000},
4440{0x3800000, 0x7fc00000, 0x8ba98d7a, 0x7fc00000, 0x3800000},
4441{0x3800000, 0x7fc00000, 0xf51f853a, 0x7fc00000, 0x3800000},
4442{0x3800000, 0x7fc00000, 0xff7ffff0, 0x7fc00000, 0x3800000},
4443{0x3800000, 0x7fc00000, 0xff7fffff, 0x7fc00000, 0x3800000},
4444{0x3800000, 0x7fc00000, 0xff800000, 0x7fc00000, 0x3800000},
4445{0x3800000, 0x7fc00000, 0xff800001, 0x7fc00000, 0x3800001},
4446{0x3800000, 0x7fc00000, 0xff984a37, 0x7fc00000, 0x3800001},
4447{0x3800000, 0x7fc00000, 0xffbfffff, 0x7fc00000, 0x3800001},
4448{0x3800000, 0x7fc00000, 0xffc00000, 0x7fc00000, 0x3800000},
4449{0x3800000, 0x7fc00000, 0xffd9ba98, 0x7fc00000, 0x3800000},
4450{0x3800000, 0x7fc00000, 0xffffffff, 0x7fc00000, 0x3800000},
4451{0x3800000, 0x7fc00000, 0x4f3495cb, 0x7fc00000, 0x3800000},
4452{0x3800000, 0x7fc00000, 0xe73a5134, 0x7fc00000, 0x3800000},
4453{0x3800000, 0x7fc00000, 0x7c994e9e, 0x7fc00000, 0x3800000},
4454{0x3800000, 0x7fc00000, 0x6164bd6c, 0x7fc00000, 0x3800000},
4455{0x3800000, 0x7fc00000, 0x9503366, 0x7fc00000, 0x3800000},
4456{0x3800000, 0x7fc00000, 0xbf5a97c9, 0x7fc00000, 0x3800000},
4457{0x3800000, 0x7fc00000, 0xe6ff1a14, 0x7fc00000, 0x3800000},
4458{0x3800000, 0x7fc00000, 0x77f31e2f, 0x7fc00000, 0x3800000},
4459{0x3800000, 0x7fc00000, 0xaab4d7d8, 0x7fc00000, 0x3800000},
4460{0x3800000, 0x7fc00000, 0x966320b, 0x7fc00000, 0x3800000},
4461{0x3800000, 0x7fc00000, 0xb26bddee, 0x7fc00000, 0x3800000},
4462{0x3800000, 0x7fc00000, 0xb5c8e5d3, 0x7fc00000, 0x3800000},
4463{0x3800000, 0x7fc00000, 0x317285d3, 0x7fc00000, 0x3800000},
4464{0x3800000, 0x7fc00000, 0x3c9623b1, 0x7fc00000, 0x3800000},
4465{0x3800000, 0x7fc00000, 0x51fd2c7c, 0x7fc00000, 0x3800000},
4466{0x3800000, 0x7fc00000, 0x7b906a6c, 0x7fc00000, 0x3800000},
4467{0x3800000, 0x7fd9ba98, 0x0, 0x7fc00000, 0x3800000},
4468{0x3800000, 0x7fd9ba98, 0x1, 0x7fc00000, 0x3800080},
4469{0x3800000, 0x7fd9ba98, 0x76, 0x7fc00000, 0x3800080},
4470{0x3800000, 0x7fd9ba98, 0x2b94, 0x7fc00000, 0x3800080},
4471{0x3800000, 0x7fd9ba98, 0x636d24, 0x7fc00000, 0x3800080},
4472{0x3800000, 0x7fd9ba98, 0x7fffff, 0x7fc00000, 0x3800080},
4473{0x3800000, 0x7fd9ba98, 0x800000, 0x7fc00000, 0x3800000},
4474{0x3800000, 0x7fd9ba98, 0x800002, 0x7fc00000, 0x3800000},
4475{0x3800000, 0x7fd9ba98, 0x1398437, 0x7fc00000, 0x3800000},
4476{0x3800000, 0x7fd9ba98, 0xba98d27, 0x7fc00000, 0x3800000},
4477{0x3800000, 0x7fd9ba98, 0xba98d7a, 0x7fc00000, 0x3800000},
4478{0x3800000, 0x7fd9ba98, 0x751f853a, 0x7fc00000, 0x3800000},
4479{0x3800000, 0x7fd9ba98, 0x7f7ffff0, 0x7fc00000, 0x3800000},
4480{0x3800000, 0x7fd9ba98, 0x7f7fffff, 0x7fc00000, 0x3800000},
4481{0x3800000, 0x7fd9ba98, 0x7f800000, 0x7fc00000, 0x3800000},
4482{0x3800000, 0x7fd9ba98, 0x7f800001, 0x7fc00000, 0x3800001},
4483{0x3800000, 0x7fd9ba98, 0x7f984a37, 0x7fc00000, 0x3800001},
4484{0x3800000, 0x7fd9ba98, 0x7fbfffff, 0x7fc00000, 0x3800001},
4485{0x3800000, 0x7fd9ba98, 0x7fc00000, 0x7fc00000, 0x3800000},
4486{0x3800000, 0x7fd9ba98, 0x7fd9ba98, 0x7fc00000, 0x3800000},
4487{0x3800000, 0x7fd9ba98, 0x7fffffff, 0x7fc00000, 0x3800000},
4488{0x3800000, 0x7fd9ba98, 0x80000000, 0x7fc00000, 0x3800000},
4489{0x3800000, 0x7fd9ba98, 0x80000001, 0x7fc00000, 0x3800080},
4490{0x3800000, 0x7fd9ba98, 0x80000076, 0x7fc00000, 0x3800080},
4491{0x3800000, 0x7fd9ba98, 0x80002b94, 0x7fc00000, 0x3800080},
4492{0x3800000, 0x7fd9ba98, 0x80636d24, 0x7fc00000, 0x3800080},
4493{0x3800000, 0x7fd9ba98, 0x807fffff, 0x7fc00000, 0x3800080},
4494{0x3800000, 0x7fd9ba98, 0x80800000, 0x7fc00000, 0x3800000},
4495{0x3800000, 0x7fd9ba98, 0x80800002, 0x7fc00000, 0x3800000},
4496{0x3800000, 0x7fd9ba98, 0x81398437, 0x7fc00000, 0x3800000},
4497{0x3800000, 0x7fd9ba98, 0x8ba98d27, 0x7fc00000, 0x3800000},
4498{0x3800000, 0x7fd9ba98, 0x8ba98d7a, 0x7fc00000, 0x3800000},
4499{0x3800000, 0x7fd9ba98, 0xf51f853a, 0x7fc00000, 0x3800000},
4500{0x3800000, 0x7fd9ba98, 0xff7ffff0, 0x7fc00000, 0x3800000},
4501{0x3800000, 0x7fd9ba98, 0xff7fffff, 0x7fc00000, 0x3800000},
4502{0x3800000, 0x7fd9ba98, 0xff800000, 0x7fc00000, 0x3800000},
4503{0x3800000, 0x7fd9ba98, 0xff800001, 0x7fc00000, 0x3800001},
4504{0x3800000, 0x7fd9ba98, 0xff984a37, 0x7fc00000, 0x3800001},
4505{0x3800000, 0x7fd9ba98, 0xffbfffff, 0x7fc00000, 0x3800001},
4506{0x3800000, 0x7fd9ba98, 0xffc00000, 0x7fc00000, 0x3800000},
4507{0x3800000, 0x7fd9ba98, 0xffd9ba98, 0x7fc00000, 0x3800000},
4508{0x3800000, 0x7fd9ba98, 0xffffffff, 0x7fc00000, 0x3800000},
4509{0x3800000, 0x7fd9ba98, 0x4f3495cb, 0x7fc00000, 0x3800000},
4510{0x3800000, 0x7fd9ba98, 0xe73a5134, 0x7fc00000, 0x3800000},
4511{0x3800000, 0x7fd9ba98, 0x7c994e9e, 0x7fc00000, 0x3800000},
4512{0x3800000, 0x7fd9ba98, 0x6164bd6c, 0x7fc00000, 0x3800000},
4513{0x3800000, 0x7fd9ba98, 0x9503366, 0x7fc00000, 0x3800000},
4514{0x3800000, 0x7fd9ba98, 0xbf5a97c9, 0x7fc00000, 0x3800000},
4515{0x3800000, 0x7fd9ba98, 0xe6ff1a14, 0x7fc00000, 0x3800000},
4516{0x3800000, 0x7fd9ba98, 0x77f31e2f, 0x7fc00000, 0x3800000},
4517{0x3800000, 0x7fd9ba98, 0xaab4d7d8, 0x7fc00000, 0x3800000},
4518{0x3800000, 0x7fd9ba98, 0x966320b, 0x7fc00000, 0x3800000},
4519{0x3800000, 0x7fd9ba98, 0xb26bddee, 0x7fc00000, 0x3800000},
4520{0x3800000, 0x7fd9ba98, 0xb5c8e5d3, 0x7fc00000, 0x3800000},
4521{0x3800000, 0x7fd9ba98, 0x317285d3, 0x7fc00000, 0x3800000},
4522{0x3800000, 0x7fd9ba98, 0x3c9623b1, 0x7fc00000, 0x3800000},
4523{0x3800000, 0x7fd9ba98, 0x51fd2c7c, 0x7fc00000, 0x3800000},
4524{0x3800000, 0x7fd9ba98, 0x7b906a6c, 0x7fc00000, 0x3800000},
4525{0x3800000, 0x7fffffff, 0x0, 0x7fc00000, 0x3800000},
4526{0x3800000, 0x7fffffff, 0x1, 0x7fc00000, 0x3800080},
4527{0x3800000, 0x7fffffff, 0x76, 0x7fc00000, 0x3800080},
4528{0x3800000, 0x7fffffff, 0x2b94, 0x7fc00000, 0x3800080},
4529{0x3800000, 0x7fffffff, 0x636d24, 0x7fc00000, 0x3800080},
4530{0x3800000, 0x7fffffff, 0x7fffff, 0x7fc00000, 0x3800080},
4531{0x3800000, 0x7fffffff, 0x800000, 0x7fc00000, 0x3800000},
4532{0x3800000, 0x7fffffff, 0x800002, 0x7fc00000, 0x3800000},
4533{0x3800000, 0x7fffffff, 0x1398437, 0x7fc00000, 0x3800000},
4534{0x3800000, 0x7fffffff, 0xba98d27, 0x7fc00000, 0x3800000},
4535{0x3800000, 0x7fffffff, 0xba98d7a, 0x7fc00000, 0x3800000},
4536{0x3800000, 0x7fffffff, 0x751f853a, 0x7fc00000, 0x3800000},
4537{0x3800000, 0x7fffffff, 0x7f7ffff0, 0x7fc00000, 0x3800000},
4538{0x3800000, 0x7fffffff, 0x7f7fffff, 0x7fc00000, 0x3800000},
4539{0x3800000, 0x7fffffff, 0x7f800000, 0x7fc00000, 0x3800000},
4540{0x3800000, 0x7fffffff, 0x7f800001, 0x7fc00000, 0x3800001},
4541{0x3800000, 0x7fffffff, 0x7f984a37, 0x7fc00000, 0x3800001},
4542{0x3800000, 0x7fffffff, 0x7fbfffff, 0x7fc00000, 0x3800001},
4543{0x3800000, 0x7fffffff, 0x7fc00000, 0x7fc00000, 0x3800000},
4544{0x3800000, 0x7fffffff, 0x7fd9ba98, 0x7fc00000, 0x3800000},
4545{0x3800000, 0x7fffffff, 0x7fffffff, 0x7fc00000, 0x3800000},
4546{0x3800000, 0x7fffffff, 0x80000000, 0x7fc00000, 0x3800000},
4547{0x3800000, 0x7fffffff, 0x80000001, 0x7fc00000, 0x3800080},
4548{0x3800000, 0x7fffffff, 0x80000076, 0x7fc00000, 0x3800080},
4549{0x3800000, 0x7fffffff, 0x80002b94, 0x7fc00000, 0x3800080},
4550{0x3800000, 0x7fffffff, 0x80636d24, 0x7fc00000, 0x3800080},
4551{0x3800000, 0x7fffffff, 0x807fffff, 0x7fc00000, 0x3800080},
4552{0x3800000, 0x7fffffff, 0x80800000, 0x7fc00000, 0x3800000},
4553{0x3800000, 0x7fffffff, 0x80800002, 0x7fc00000, 0x3800000},
4554{0x3800000, 0x7fffffff, 0x81398437, 0x7fc00000, 0x3800000},
4555{0x3800000, 0x7fffffff, 0x8ba98d27, 0x7fc00000, 0x3800000},
4556{0x3800000, 0x7fffffff, 0x8ba98d7a, 0x7fc00000, 0x3800000},
4557{0x3800000, 0x7fffffff, 0xf51f853a, 0x7fc00000, 0x3800000},
4558{0x3800000, 0x7fffffff, 0xff7ffff0, 0x7fc00000, 0x3800000},
4559{0x3800000, 0x7fffffff, 0xff7fffff, 0x7fc00000, 0x3800000},
4560{0x3800000, 0x7fffffff, 0xff800000, 0x7fc00000, 0x3800000},
4561{0x3800000, 0x7fffffff, 0xff800001, 0x7fc00000, 0x3800001},
4562{0x3800000, 0x7fffffff, 0xff984a37, 0x7fc00000, 0x3800001},
4563{0x3800000, 0x7fffffff, 0xffbfffff, 0x7fc00000, 0x3800001},
4564{0x3800000, 0x7fffffff, 0xffc00000, 0x7fc00000, 0x3800000},
4565{0x3800000, 0x7fffffff, 0xffd9ba98, 0x7fc00000, 0x3800000},
4566{0x3800000, 0x7fffffff, 0xffffffff, 0x7fc00000, 0x3800000},
4567{0x3800000, 0x7fffffff, 0x4f3495cb, 0x7fc00000, 0x3800000},
4568{0x3800000, 0x7fffffff, 0xe73a5134, 0x7fc00000, 0x3800000},
4569{0x3800000, 0x7fffffff, 0x7c994e9e, 0x7fc00000, 0x3800000},
4570{0x3800000, 0x7fffffff, 0x6164bd6c, 0x7fc00000, 0x3800000},
4571{0x3800000, 0x7fffffff, 0x9503366, 0x7fc00000, 0x3800000},
4572{0x3800000, 0x7fffffff, 0xbf5a97c9, 0x7fc00000, 0x3800000},
4573{0x3800000, 0x7fffffff, 0xe6ff1a14, 0x7fc00000, 0x3800000},
4574{0x3800000, 0x7fffffff, 0x77f31e2f, 0x7fc00000, 0x3800000},
4575{0x3800000, 0x7fffffff, 0xaab4d7d8, 0x7fc00000, 0x3800000},
4576{0x3800000, 0x7fffffff, 0x966320b, 0x7fc00000, 0x3800000},
4577{0x3800000, 0x7fffffff, 0xb26bddee, 0x7fc00000, 0x3800000},
4578{0x3800000, 0x7fffffff, 0xb5c8e5d3, 0x7fc00000, 0x3800000},
4579{0x3800000, 0x7fffffff, 0x317285d3, 0x7fc00000, 0x3800000},
4580{0x3800000, 0x7fffffff, 0x3c9623b1, 0x7fc00000, 0x3800000},
4581{0x3800000, 0x7fffffff, 0x51fd2c7c, 0x7fc00000, 0x3800000},
4582{0x3800000, 0x7fffffff, 0x7b906a6c, 0x7fc00000, 0x3800000},
4583{0x3800000, 0x80000000, 0x0, 0x80000000, 0x3800000},
4584{0x3800000, 0x80000000, 0x1, 0x80000000, 0x3800080},
4585{0x3800000, 0x80000000, 0x76, 0x80000000, 0x3800080},
4586{0x3800000, 0x80000000, 0x2b94, 0x80000000, 0x3800080},
4587{0x3800000, 0x80000000, 0x636d24, 0x80000000, 0x3800080},
4588{0x3800000, 0x80000000, 0x7fffff, 0x80000000, 0x3800080},
4589{0x3800000, 0x80000000, 0x800000, 0x800000, 0x3800000},
4590{0x3800000, 0x80000000, 0x800002, 0x800002, 0x3800000},
4591{0x3800000, 0x80000000, 0x1398437, 0x1398437, 0x3800000},
4592{0x3800000, 0x80000000, 0xba98d27, 0xba98d27, 0x3800000},
4593{0x3800000, 0x80000000, 0xba98d7a, 0xba98d7a, 0x3800000},
4594{0x3800000, 0x80000000, 0x751f853a, 0x751f853a, 0x3800000},
4595{0x3800000, 0x80000000, 0x7f7ffff0, 0x7f7ffff0, 0x3800000},
4596{0x3800000, 0x80000000, 0x7f7fffff, 0x7f7fffff, 0x3800000},
4597{0x3800000, 0x80000000, 0x7f800000, 0x7f800000, 0x3800000},
4598{0x3800000, 0x80000000, 0x7f800001, 0x7fc00000, 0x3800001},
4599{0x3800000, 0x80000000, 0x7f984a37, 0x7fc00000, 0x3800001},
4600{0x3800000, 0x80000000, 0x7fbfffff, 0x7fc00000, 0x3800001},
4601{0x3800000, 0x80000000, 0x7fc00000, 0x7fc00000, 0x3800000},
4602{0x3800000, 0x80000000, 0x7fd9ba98, 0x7fc00000, 0x3800000},
4603{0x3800000, 0x80000000, 0x7fffffff, 0x7fc00000, 0x3800000},
4604{0x3800000, 0x80000000, 0x80000000, 0x80000000, 0x3800000},
4605{0x3800000, 0x80000000, 0x80000001, 0x80000000, 0x3800080},
4606{0x3800000, 0x80000000, 0x80000076, 0x80000000, 0x3800080},
4607{0x3800000, 0x80000000, 0x80002b94, 0x80000000, 0x3800080},
4608{0x3800000, 0x80000000, 0x80636d24, 0x80000000, 0x3800080},
4609{0x3800000, 0x80000000, 0x807fffff, 0x80000000, 0x3800080},
4610{0x3800000, 0x80000000, 0x80800000, 0x80800000, 0x3800000},
4611{0x3800000, 0x80000000, 0x80800002, 0x80800002, 0x3800000},
4612{0x3800000, 0x80000000, 0x81398437, 0x81398437, 0x3800000},
4613{0x3800000, 0x80000000, 0x8ba98d27, 0x8ba98d27, 0x3800000},
4614{0x3800000, 0x80000000, 0x8ba98d7a, 0x8ba98d7a, 0x3800000},
4615{0x3800000, 0x80000000, 0xf51f853a, 0xf51f853a, 0x3800000},
4616{0x3800000, 0x80000000, 0xff7ffff0, 0xff7ffff0, 0x3800000},
4617{0x3800000, 0x80000000, 0xff7fffff, 0xff7fffff, 0x3800000},
4618{0x3800000, 0x80000000, 0xff800000, 0xff800000, 0x3800000},
4619{0x3800000, 0x80000000, 0xff800001, 0x7fc00000, 0x3800001},
4620{0x3800000, 0x80000000, 0xff984a37, 0x7fc00000, 0x3800001},
4621{0x3800000, 0x80000000, 0xffbfffff, 0x7fc00000, 0x3800001},
4622{0x3800000, 0x80000000, 0xffc00000, 0x7fc00000, 0x3800000},
4623{0x3800000, 0x80000000, 0xffd9ba98, 0x7fc00000, 0x3800000},
4624{0x3800000, 0x80000000, 0xffffffff, 0x7fc00000, 0x3800000},
4625{0x3800000, 0x80000000, 0x4f3495cb, 0x4f3495cb, 0x3800000},
4626{0x3800000, 0x80000000, 0xe73a5134, 0xe73a5134, 0x3800000},
4627{0x3800000, 0x80000000, 0x7c994e9e, 0x7c994e9e, 0x3800000},
4628{0x3800000, 0x80000000, 0x6164bd6c, 0x6164bd6c, 0x3800000},
4629{0x3800000, 0x80000000, 0x9503366, 0x9503366, 0x3800000},
4630{0x3800000, 0x80000000, 0xbf5a97c9, 0xbf5a97c9, 0x3800000},
4631{0x3800000, 0x80000000, 0xe6ff1a14, 0xe6ff1a14, 0x3800000},
4632{0x3800000, 0x80000000, 0x77f31e2f, 0x77f31e2f, 0x3800000},
4633{0x3800000, 0x80000000, 0xaab4d7d8, 0xaab4d7d8, 0x3800000},
4634{0x3800000, 0x80000000, 0x966320b, 0x966320b, 0x3800000},
4635{0x3800000, 0x80000000, 0xb26bddee, 0xb26bddee, 0x3800000},
4636{0x3800000, 0x80000000, 0xb5c8e5d3, 0xb5c8e5d3, 0x3800000},
4637{0x3800000, 0x80000000, 0x317285d3, 0x317285d3, 0x3800000},
4638{0x3800000, 0x80000000, 0x3c9623b1, 0x3c9623b1, 0x3800000},
4639{0x3800000, 0x80000000, 0x51fd2c7c, 0x51fd2c7c, 0x3800000},
4640{0x3800000, 0x80000000, 0x7b906a6c, 0x7b906a6c, 0x3800000},
4641{0x3800000, 0x80000001, 0x0, 0x0, 0x3800080},
4642{0x3800000, 0x80000001, 0x1, 0x0, 0x3800080},
4643{0x3800000, 0x80000001, 0x76, 0x0, 0x3800080},
4644{0x3800000, 0x80000001, 0x2b94, 0x0, 0x3800080},
4645{0x3800000, 0x80000001, 0x636d24, 0x0, 0x3800080},
4646{0x3800000, 0x80000001, 0x7fffff, 0x0, 0x3800080},
4647{0x3800000, 0x80000001, 0x800000, 0x800000, 0x3800080},
4648{0x3800000, 0x80000001, 0x800002, 0x800002, 0x3800080},
4649{0x3800000, 0x80000001, 0x1398437, 0x1398437, 0x3800080},
4650{0x3800000, 0x80000001, 0xba98d27, 0xba98d27, 0x3800080},
4651{0x3800000, 0x80000001, 0xba98d7a, 0xba98d7a, 0x3800080},
4652{0x3800000, 0x80000001, 0x751f853a, 0x751f853a, 0x3800080},
4653{0x3800000, 0x80000001, 0x7f7ffff0, 0x7f7ffff0, 0x3800080},
4654{0x3800000, 0x80000001, 0x7f7fffff, 0x7f7fffff, 0x3800080},
4655{0x3800000, 0x80000001, 0x7f800000, 0x7f800000, 0x3800080},
4656{0x3800000, 0x80000001, 0x7f800001, 0x7fc00000, 0x3800081},
4657{0x3800000, 0x80000001, 0x7f984a37, 0x7fc00000, 0x3800081},
4658{0x3800000, 0x80000001, 0x7fbfffff, 0x7fc00000, 0x3800081},
4659{0x3800000, 0x80000001, 0x7fc00000, 0x7fc00000, 0x3800080},
4660{0x3800000, 0x80000001, 0x7fd9ba98, 0x7fc00000, 0x3800080},
4661{0x3800000, 0x80000001, 0x7fffffff, 0x7fc00000, 0x3800080},
4662{0x3800000, 0x80000001, 0x80000000, 0x80000000, 0x3800080},
4663{0x3800000, 0x80000001, 0x80000001, 0x0, 0x3800080},
4664{0x3800000, 0x80000001, 0x80000076, 0x0, 0x3800080},
4665{0x3800000, 0x80000001, 0x80002b94, 0x0, 0x3800080},
4666{0x3800000, 0x80000001, 0x80636d24, 0x0, 0x3800080},
4667{0x3800000, 0x80000001, 0x807fffff, 0x0, 0x3800080},
4668{0x3800000, 0x80000001, 0x80800000, 0x80800000, 0x3800080},
4669{0x3800000, 0x80000001, 0x80800002, 0x80800002, 0x3800080},
4670{0x3800000, 0x80000001, 0x81398437, 0x81398437, 0x3800080},
4671{0x3800000, 0x80000001, 0x8ba98d27, 0x8ba98d27, 0x3800080},
4672{0x3800000, 0x80000001, 0x8ba98d7a, 0x8ba98d7a, 0x3800080},
4673{0x3800000, 0x80000001, 0xf51f853a, 0xf51f853a, 0x3800080},
4674{0x3800000, 0x80000001, 0xff7ffff0, 0xff7ffff0, 0x3800080},
4675{0x3800000, 0x80000001, 0xff7fffff, 0xff7fffff, 0x3800080},
4676{0x3800000, 0x80000001, 0xff800000, 0xff800000, 0x3800080},
4677{0x3800000, 0x80000001, 0xff800001, 0x7fc00000, 0x3800081},
4678{0x3800000, 0x80000001, 0xff984a37, 0x7fc00000, 0x3800081},
4679{0x3800000, 0x80000001, 0xffbfffff, 0x7fc00000, 0x3800081},
4680{0x3800000, 0x80000001, 0xffc00000, 0x7fc00000, 0x3800080},
4681{0x3800000, 0x80000001, 0xffd9ba98, 0x7fc00000, 0x3800080},
4682{0x3800000, 0x80000001, 0xffffffff, 0x7fc00000, 0x3800080},
4683{0x3800000, 0x80000001, 0x4f3495cb, 0x4f3495cb, 0x3800080},
4684{0x3800000, 0x80000001, 0xe73a5134, 0xe73a5134, 0x3800080},
4685{0x3800000, 0x80000001, 0x7c994e9e, 0x7c994e9e, 0x3800080},
4686{0x3800000, 0x80000001, 0x6164bd6c, 0x6164bd6c, 0x3800080},
4687{0x3800000, 0x80000001, 0x9503366, 0x9503366, 0x3800080},
4688{0x3800000, 0x80000001, 0xbf5a97c9, 0xbf5a97c9, 0x3800080},
4689{0x3800000, 0x80000001, 0xe6ff1a14, 0xe6ff1a14, 0x3800080},
4690{0x3800000, 0x80000001, 0x77f31e2f, 0x77f31e2f, 0x3800080},
4691{0x3800000, 0x80000001, 0xaab4d7d8, 0xaab4d7d8, 0x3800080},
4692{0x3800000, 0x80000001, 0x966320b, 0x966320b, 0x3800080},
4693{0x3800000, 0x80000001, 0xb26bddee, 0xb26bddee, 0x3800080},
4694{0x3800000, 0x80000001, 0xb5c8e5d3, 0xb5c8e5d3, 0x3800080},
4695{0x3800000, 0x80000001, 0x317285d3, 0x317285d3, 0x3800080},
4696{0x3800000, 0x80000001, 0x3c9623b1, 0x3c9623b1, 0x3800080},
4697{0x3800000, 0x80000001, 0x51fd2c7c, 0x51fd2c7c, 0x3800080},
4698{0x3800000, 0x80000001, 0x7b906a6c, 0x7b906a6c, 0x3800080},
4699{0x3800000, 0x80000076, 0x0, 0x0, 0x3800080},
4700{0x3800000, 0x80000076, 0x1, 0x0, 0x3800080},
4701{0x3800000, 0x80000076, 0x76, 0x0, 0x3800080},
4702{0x3800000, 0x80000076, 0x2b94, 0x0, 0x3800080},
4703{0x3800000, 0x80000076, 0x636d24, 0x0, 0x3800080},
4704{0x3800000, 0x80000076, 0x7fffff, 0x0, 0x3800080},
4705{0x3800000, 0x80000076, 0x800000, 0x800000, 0x3800080},
4706{0x3800000, 0x80000076, 0x800002, 0x800002, 0x3800080},
4707{0x3800000, 0x80000076, 0x1398437, 0x1398437, 0x3800080},
4708{0x3800000, 0x80000076, 0xba98d27, 0xba98d27, 0x3800080},
4709{0x3800000, 0x80000076, 0xba98d7a, 0xba98d7a, 0x3800080},
4710{0x3800000, 0x80000076, 0x751f853a, 0x751f853a, 0x3800080},
4711{0x3800000, 0x80000076, 0x7f7ffff0, 0x7f7ffff0, 0x3800080},
4712{0x3800000, 0x80000076, 0x7f7fffff, 0x7f7fffff, 0x3800080},
4713{0x3800000, 0x80000076, 0x7f800000, 0x7f800000, 0x3800080},
4714{0x3800000, 0x80000076, 0x7f800001, 0x7fc00000, 0x3800081},
4715{0x3800000, 0x80000076, 0x7f984a37, 0x7fc00000, 0x3800081},
4716{0x3800000, 0x80000076, 0x7fbfffff, 0x7fc00000, 0x3800081},
4717{0x3800000, 0x80000076, 0x7fc00000, 0x7fc00000, 0x3800080},
4718{0x3800000, 0x80000076, 0x7fd9ba98, 0x7fc00000, 0x3800080},
4719{0x3800000, 0x80000076, 0x7fffffff, 0x7fc00000, 0x3800080},
4720{0x3800000, 0x80000076, 0x80000000, 0x80000000, 0x3800080},
4721{0x3800000, 0x80000076, 0x80000001, 0x0, 0x3800080},
4722{0x3800000, 0x80000076, 0x80000076, 0x0, 0x3800080},
4723{0x3800000, 0x80000076, 0x80002b94, 0x0, 0x3800080},
4724{0x3800000, 0x80000076, 0x80636d24, 0x0, 0x3800080},
4725{0x3800000, 0x80000076, 0x807fffff, 0x0, 0x3800080},
4726{0x3800000, 0x80000076, 0x80800000, 0x80800000, 0x3800080},
4727{0x3800000, 0x80000076, 0x80800002, 0x80800002, 0x3800080},
4728{0x3800000, 0x80000076, 0x81398437, 0x81398437, 0x3800080},
4729{0x3800000, 0x80000076, 0x8ba98d27, 0x8ba98d27, 0x3800080},
4730{0x3800000, 0x80000076, 0x8ba98d7a, 0x8ba98d7a, 0x3800080},
4731{0x3800000, 0x80000076, 0xf51f853a, 0xf51f853a, 0x3800080},
4732{0x3800000, 0x80000076, 0xff7ffff0, 0xff7ffff0, 0x3800080},
4733{0x3800000, 0x80000076, 0xff7fffff, 0xff7fffff, 0x3800080},
4734{0x3800000, 0x80000076, 0xff800000, 0xff800000, 0x3800080},
4735{0x3800000, 0x80000076, 0xff800001, 0x7fc00000, 0x3800081},
4736{0x3800000, 0x80000076, 0xff984a37, 0x7fc00000, 0x3800081},
4737{0x3800000, 0x80000076, 0xffbfffff, 0x7fc00000, 0x3800081},
4738{0x3800000, 0x80000076, 0xffc00000, 0x7fc00000, 0x3800080},
4739{0x3800000, 0x80000076, 0xffd9ba98, 0x7fc00000, 0x3800080},
4740{0x3800000, 0x80000076, 0xffffffff, 0x7fc00000, 0x3800080},
4741{0x3800000, 0x80000076, 0x4f3495cb, 0x4f3495cb, 0x3800080},
4742{0x3800000, 0x80000076, 0xe73a5134, 0xe73a5134, 0x3800080},
4743{0x3800000, 0x80000076, 0x7c994e9e, 0x7c994e9e, 0x3800080},
4744{0x3800000, 0x80000076, 0x6164bd6c, 0x6164bd6c, 0x3800080},
4745{0x3800000, 0x80000076, 0x9503366, 0x9503366, 0x3800080},
4746{0x3800000, 0x80000076, 0xbf5a97c9, 0xbf5a97c9, 0x3800080},
4747{0x3800000, 0x80000076, 0xe6ff1a14, 0xe6ff1a14, 0x3800080},
4748{0x3800000, 0x80000076, 0x77f31e2f, 0x77f31e2f, 0x3800080},
4749{0x3800000, 0x80000076, 0xaab4d7d8, 0xaab4d7d8, 0x3800080},
4750{0x3800000, 0x80000076, 0x966320b, 0x966320b, 0x3800080},
4751{0x3800000, 0x80000076, 0xb26bddee, 0xb26bddee, 0x3800080},
4752{0x3800000, 0x80000076, 0xb5c8e5d3, 0xb5c8e5d3, 0x3800080},
4753{0x3800000, 0x80000076, 0x317285d3, 0x317285d3, 0x3800080},
4754{0x3800000, 0x80000076, 0x3c9623b1, 0x3c9623b1, 0x3800080},
4755{0x3800000, 0x80000076, 0x51fd2c7c, 0x51fd2c7c, 0x3800080},
4756{0x3800000, 0x80000076, 0x7b906a6c, 0x7b906a6c, 0x3800080},
4757{0x3800000, 0x80002b94, 0x0, 0x0, 0x3800080},
4758{0x3800000, 0x80002b94, 0x1, 0x0, 0x3800080},
4759{0x3800000, 0x80002b94, 0x76, 0x0, 0x3800080},
4760{0x3800000, 0x80002b94, 0x2b94, 0x0, 0x3800080},
4761{0x3800000, 0x80002b94, 0x636d24, 0x0, 0x3800080},
4762{0x3800000, 0x80002b94, 0x7fffff, 0x0, 0x3800080},
4763{0x3800000, 0x80002b94, 0x800000, 0x800000, 0x3800080},
4764{0x3800000, 0x80002b94, 0x800002, 0x800002, 0x3800080},
4765{0x3800000, 0x80002b94, 0x1398437, 0x1398437, 0x3800080},
4766{0x3800000, 0x80002b94, 0xba98d27, 0xba98d27, 0x3800080},
4767{0x3800000, 0x80002b94, 0xba98d7a, 0xba98d7a, 0x3800080},
4768{0x3800000, 0x80002b94, 0x751f853a, 0x751f853a, 0x3800080},
4769{0x3800000, 0x80002b94, 0x7f7ffff0, 0x7f7ffff0, 0x3800080},
4770{0x3800000, 0x80002b94, 0x7f7fffff, 0x7f7fffff, 0x3800080},
4771{0x3800000, 0x80002b94, 0x7f800000, 0x7f800000, 0x3800080},
4772{0x3800000, 0x80002b94, 0x7f800001, 0x7fc00000, 0x3800081},
4773{0x3800000, 0x80002b94, 0x7f984a37, 0x7fc00000, 0x3800081},
4774{0x3800000, 0x80002b94, 0x7fbfffff, 0x7fc00000, 0x3800081},
4775{0x3800000, 0x80002b94, 0x7fc00000, 0x7fc00000, 0x3800080},
4776{0x3800000, 0x80002b94, 0x7fd9ba98, 0x7fc00000, 0x3800080},
4777{0x3800000, 0x80002b94, 0x7fffffff, 0x7fc00000, 0x3800080},
4778{0x3800000, 0x80002b94, 0x80000000, 0x80000000, 0x3800080},
4779{0x3800000, 0x80002b94, 0x80000001, 0x0, 0x3800080},
4780{0x3800000, 0x80002b94, 0x80000076, 0x0, 0x3800080},
4781{0x3800000, 0x80002b94, 0x80002b94, 0x0, 0x3800080},
4782{0x3800000, 0x80002b94, 0x80636d24, 0x0, 0x3800080},
4783{0x3800000, 0x80002b94, 0x807fffff, 0x0, 0x3800080},
4784{0x3800000, 0x80002b94, 0x80800000, 0x80800000, 0x3800080},
4785{0x3800000, 0x80002b94, 0x80800002, 0x80800002, 0x3800080},
4786{0x3800000, 0x80002b94, 0x81398437, 0x81398437, 0x3800080},
4787{0x3800000, 0x80002b94, 0x8ba98d27, 0x8ba98d27, 0x3800080},
4788{0x3800000, 0x80002b94, 0x8ba98d7a, 0x8ba98d7a, 0x3800080},
4789{0x3800000, 0x80002b94, 0xf51f853a, 0xf51f853a, 0x3800080},
4790{0x3800000, 0x80002b94, 0xff7ffff0, 0xff7ffff0, 0x3800080},
4791{0x3800000, 0x80002b94, 0xff7fffff, 0xff7fffff, 0x3800080},
4792{0x3800000, 0x80002b94, 0xff800000, 0xff800000, 0x3800080},
4793{0x3800000, 0x80002b94, 0xff800001, 0x7fc00000, 0x3800081},
4794{0x3800000, 0x80002b94, 0xff984a37, 0x7fc00000, 0x3800081},
4795{0x3800000, 0x80002b94, 0xffbfffff, 0x7fc00000, 0x3800081},
4796{0x3800000, 0x80002b94, 0xffc00000, 0x7fc00000, 0x3800080},
4797{0x3800000, 0x80002b94, 0xffd9ba98, 0x7fc00000, 0x3800080},
4798{0x3800000, 0x80002b94, 0xffffffff, 0x7fc00000, 0x3800080},
4799{0x3800000, 0x80002b94, 0x4f3495cb, 0x4f3495cb, 0x3800080},
4800{0x3800000, 0x80002b94, 0xe73a5134, 0xe73a5134, 0x3800080},
4801{0x3800000, 0x80002b94, 0x7c994e9e, 0x7c994e9e, 0x3800080},
4802{0x3800000, 0x80002b94, 0x6164bd6c, 0x6164bd6c, 0x3800080},
4803{0x3800000, 0x80002b94, 0x9503366, 0x9503366, 0x3800080},
4804{0x3800000, 0x80002b94, 0xbf5a97c9, 0xbf5a97c9, 0x3800080},
4805{0x3800000, 0x80002b94, 0xe6ff1a14, 0xe6ff1a14, 0x3800080},
4806{0x3800000, 0x80002b94, 0x77f31e2f, 0x77f31e2f, 0x3800080},
4807{0x3800000, 0x80002b94, 0xaab4d7d8, 0xaab4d7d8, 0x3800080},
4808{0x3800000, 0x80002b94, 0x966320b, 0x966320b, 0x3800080},
4809{0x3800000, 0x80002b94, 0xb26bddee, 0xb26bddee, 0x3800080},
4810{0x3800000, 0x80002b94, 0xb5c8e5d3, 0xb5c8e5d3, 0x3800080},
4811{0x3800000, 0x80002b94, 0x317285d3, 0x317285d3, 0x3800080},
4812{0x3800000, 0x80002b94, 0x3c9623b1, 0x3c9623b1, 0x3800080},
4813{0x3800000, 0x80002b94, 0x51fd2c7c, 0x51fd2c7c, 0x3800080},
4814{0x3800000, 0x80002b94, 0x7b906a6c, 0x7b906a6c, 0x3800080},
4815{0x3800000, 0x80636d24, 0x0, 0x0, 0x3800080},
4816{0x3800000, 0x80636d24, 0x1, 0x0, 0x3800080},
4817{0x3800000, 0x80636d24, 0x76, 0x0, 0x3800080},
4818{0x3800000, 0x80636d24, 0x2b94, 0x0, 0x3800080},
4819{0x3800000, 0x80636d24, 0x636d24, 0x0, 0x3800080},
4820{0x3800000, 0x80636d24, 0x7fffff, 0x0, 0x3800080},
4821{0x3800000, 0x80636d24, 0x800000, 0x800000, 0x3800080},
4822{0x3800000, 0x80636d24, 0x800002, 0x800002, 0x3800080},
4823{0x3800000, 0x80636d24, 0x1398437, 0x1398437, 0x3800080},
4824{0x3800000, 0x80636d24, 0xba98d27, 0xba98d27, 0x3800080},
4825{0x3800000, 0x80636d24, 0xba98d7a, 0xba98d7a, 0x3800080},
4826{0x3800000, 0x80636d24, 0x751f853a, 0x751f853a, 0x3800080},
4827{0x3800000, 0x80636d24, 0x7f7ffff0, 0x7f7ffff0, 0x3800080},
4828{0x3800000, 0x80636d24, 0x7f7fffff, 0x7f7fffff, 0x3800080},
4829{0x3800000, 0x80636d24, 0x7f800000, 0x7f800000, 0x3800080},
4830{0x3800000, 0x80636d24, 0x7f800001, 0x7fc00000, 0x3800081},
4831{0x3800000, 0x80636d24, 0x7f984a37, 0x7fc00000, 0x3800081},
4832{0x3800000, 0x80636d24, 0x7fbfffff, 0x7fc00000, 0x3800081},
4833{0x3800000, 0x80636d24, 0x7fc00000, 0x7fc00000, 0x3800080},
4834{0x3800000, 0x80636d24, 0x7fd9ba98, 0x7fc00000, 0x3800080},
4835{0x3800000, 0x80636d24, 0x7fffffff, 0x7fc00000, 0x3800080},
4836{0x3800000, 0x80636d24, 0x80000000, 0x80000000, 0x3800080},
4837{0x3800000, 0x80636d24, 0x80000001, 0x0, 0x3800080},
4838{0x3800000, 0x80636d24, 0x80000076, 0x0, 0x3800080},
4839{0x3800000, 0x80636d24, 0x80002b94, 0x0, 0x3800080},
4840{0x3800000, 0x80636d24, 0x80636d24, 0x0, 0x3800080},
4841{0x3800000, 0x80636d24, 0x807fffff, 0x0, 0x3800080},
4842{0x3800000, 0x80636d24, 0x80800000, 0x80800000, 0x3800080},
4843{0x3800000, 0x80636d24, 0x80800002, 0x80800002, 0x3800080},
4844{0x3800000, 0x80636d24, 0x81398437, 0x81398437, 0x3800080},
4845{0x3800000, 0x80636d24, 0x8ba98d27, 0x8ba98d27, 0x3800080},
4846{0x3800000, 0x80636d24, 0x8ba98d7a, 0x8ba98d7a, 0x3800080},
4847{0x3800000, 0x80636d24, 0xf51f853a, 0xf51f853a, 0x3800080},
4848{0x3800000, 0x80636d24, 0xff7ffff0, 0xff7ffff0, 0x3800080},
4849{0x3800000, 0x80636d24, 0xff7fffff, 0xff7fffff, 0x3800080},
4850{0x3800000, 0x80636d24, 0xff800000, 0xff800000, 0x3800080},
4851{0x3800000, 0x80636d24, 0xff800001, 0x7fc00000, 0x3800081},
4852{0x3800000, 0x80636d24, 0xff984a37, 0x7fc00000, 0x3800081},
4853{0x3800000, 0x80636d24, 0xffbfffff, 0x7fc00000, 0x3800081},
4854{0x3800000, 0x80636d24, 0xffc00000, 0x7fc00000, 0x3800080},
4855{0x3800000, 0x80636d24, 0xffd9ba98, 0x7fc00000, 0x3800080},
4856{0x3800000, 0x80636d24, 0xffffffff, 0x7fc00000, 0x3800080},
4857{0x3800000, 0x80636d24, 0x4f3495cb, 0x4f3495cb, 0x3800080},
4858{0x3800000, 0x80636d24, 0xe73a5134, 0xe73a5134, 0x3800080},
4859{0x3800000, 0x80636d24, 0x7c994e9e, 0x7c994e9e, 0x3800080},
4860{0x3800000, 0x80636d24, 0x6164bd6c, 0x6164bd6c, 0x3800080},
4861{0x3800000, 0x80636d24, 0x9503366, 0x9503366, 0x3800080},
4862{0x3800000, 0x80636d24, 0xbf5a97c9, 0xbf5a97c9, 0x3800080},
4863{0x3800000, 0x80636d24, 0xe6ff1a14, 0xe6ff1a14, 0x3800080},
4864{0x3800000, 0x80636d24, 0x77f31e2f, 0x77f31e2f, 0x3800080},
4865{0x3800000, 0x80636d24, 0xaab4d7d8, 0xaab4d7d8, 0x3800080},
4866{0x3800000, 0x80636d24, 0x966320b, 0x966320b, 0x3800080},
4867{0x3800000, 0x80636d24, 0xb26bddee, 0xb26bddee, 0x3800080},
4868{0x3800000, 0x80636d24, 0xb5c8e5d3, 0xb5c8e5d3, 0x3800080},
4869{0x3800000, 0x80636d24, 0x317285d3, 0x317285d3, 0x3800080},
4870{0x3800000, 0x80636d24, 0x3c9623b1, 0x3c9623b1, 0x3800080},
4871{0x3800000, 0x80636d24, 0x51fd2c7c, 0x51fd2c7c, 0x3800080},
4872{0x3800000, 0x80636d24, 0x7b906a6c, 0x7b906a6c, 0x3800080},
4873{0x3800000, 0x807fffff, 0x0, 0x0, 0x3800080},
4874{0x3800000, 0x807fffff, 0x1, 0x0, 0x3800080},
4875{0x3800000, 0x807fffff, 0x76, 0x0, 0x3800080},
4876{0x3800000, 0x807fffff, 0x2b94, 0x0, 0x3800080},
4877{0x3800000, 0x807fffff, 0x636d24, 0x0, 0x3800080},
4878{0x3800000, 0x807fffff, 0x7fffff, 0x0, 0x3800080},
4879{0x3800000, 0x807fffff, 0x800000, 0x800000, 0x3800080},
4880{0x3800000, 0x807fffff, 0x800002, 0x800002, 0x3800080},
4881{0x3800000, 0x807fffff, 0x1398437, 0x1398437, 0x3800080},
4882{0x3800000, 0x807fffff, 0xba98d27, 0xba98d27, 0x3800080},
4883{0x3800000, 0x807fffff, 0xba98d7a, 0xba98d7a, 0x3800080},
4884{0x3800000, 0x807fffff, 0x751f853a, 0x751f853a, 0x3800080},
4885{0x3800000, 0x807fffff, 0x7f7ffff0, 0x7f7ffff0, 0x3800080},
4886{0x3800000, 0x807fffff, 0x7f7fffff, 0x7f7fffff, 0x3800080},
4887{0x3800000, 0x807fffff, 0x7f800000, 0x7f800000, 0x3800080},
4888{0x3800000, 0x807fffff, 0x7f800001, 0x7fc00000, 0x3800081},
4889{0x3800000, 0x807fffff, 0x7f984a37, 0x7fc00000, 0x3800081},
4890{0x3800000, 0x807fffff, 0x7fbfffff, 0x7fc00000, 0x3800081},
4891{0x3800000, 0x807fffff, 0x7fc00000, 0x7fc00000, 0x3800080},
4892{0x3800000, 0x807fffff, 0x7fd9ba98, 0x7fc00000, 0x3800080},
4893{0x3800000, 0x807fffff, 0x7fffffff, 0x7fc00000, 0x3800080},
4894{0x3800000, 0x807fffff, 0x80000000, 0x80000000, 0x3800080},
4895{0x3800000, 0x807fffff, 0x80000001, 0x0, 0x3800080},
4896{0x3800000, 0x807fffff, 0x80000076, 0x0, 0x3800080},
4897{0x3800000, 0x807fffff, 0x80002b94, 0x0, 0x3800080},
4898{0x3800000, 0x807fffff, 0x80636d24, 0x0, 0x3800080},
4899{0x3800000, 0x807fffff, 0x807fffff, 0x0, 0x3800080},
4900{0x3800000, 0x807fffff, 0x80800000, 0x80800000, 0x3800080},
4901{0x3800000, 0x807fffff, 0x80800002, 0x80800002, 0x3800080},
4902{0x3800000, 0x807fffff, 0x81398437, 0x81398437, 0x3800080},
4903{0x3800000, 0x807fffff, 0x8ba98d27, 0x8ba98d27, 0x3800080},
4904{0x3800000, 0x807fffff, 0x8ba98d7a, 0x8ba98d7a, 0x3800080},
4905{0x3800000, 0x807fffff, 0xf51f853a, 0xf51f853a, 0x3800080},
4906{0x3800000, 0x807fffff, 0xff7ffff0, 0xff7ffff0, 0x3800080},
4907{0x3800000, 0x807fffff, 0xff7fffff, 0xff7fffff, 0x3800080},
4908{0x3800000, 0x807fffff, 0xff800000, 0xff800000, 0x3800080},
4909{0x3800000, 0x807fffff, 0xff800001, 0x7fc00000, 0x3800081},
4910{0x3800000, 0x807fffff, 0xff984a37, 0x7fc00000, 0x3800081},
4911{0x3800000, 0x807fffff, 0xffbfffff, 0x7fc00000, 0x3800081},
4912{0x3800000, 0x807fffff, 0xffc00000, 0x7fc00000, 0x3800080},
4913{0x3800000, 0x807fffff, 0xffd9ba98, 0x7fc00000, 0x3800080},
4914{0x3800000, 0x807fffff, 0xffffffff, 0x7fc00000, 0x3800080},
4915{0x3800000, 0x807fffff, 0x4f3495cb, 0x4f3495cb, 0x3800080},
4916{0x3800000, 0x807fffff, 0xe73a5134, 0xe73a5134, 0x3800080},
4917{0x3800000, 0x807fffff, 0x7c994e9e, 0x7c994e9e, 0x3800080},
4918{0x3800000, 0x807fffff, 0x6164bd6c, 0x6164bd6c, 0x3800080},
4919{0x3800000, 0x807fffff, 0x9503366, 0x9503366, 0x3800080},
4920{0x3800000, 0x807fffff, 0xbf5a97c9, 0xbf5a97c9, 0x3800080},
4921{0x3800000, 0x807fffff, 0xe6ff1a14, 0xe6ff1a14, 0x3800080},
4922{0x3800000, 0x807fffff, 0x77f31e2f, 0x77f31e2f, 0x3800080},
4923{0x3800000, 0x807fffff, 0xaab4d7d8, 0xaab4d7d8, 0x3800080},
4924{0x3800000, 0x807fffff, 0x966320b, 0x966320b, 0x3800080},
4925{0x3800000, 0x807fffff, 0xb26bddee, 0xb26bddee, 0x3800080},
4926{0x3800000, 0x807fffff, 0xb5c8e5d3, 0xb5c8e5d3, 0x3800080},
4927{0x3800000, 0x807fffff, 0x317285d3, 0x317285d3, 0x3800080},
4928{0x3800000, 0x807fffff, 0x3c9623b1, 0x3c9623b1, 0x3800080},
4929{0x3800000, 0x807fffff, 0x51fd2c7c, 0x51fd2c7c, 0x3800080},
4930{0x3800000, 0x807fffff, 0x7b906a6c, 0x7b906a6c, 0x3800080},
4931{0x3800000, 0x80800000, 0x0, 0x80800000, 0x3800000},
4932{0x3800000, 0x80800000, 0x1, 0x80800000, 0x3800080},
4933{0x3800000, 0x80800000, 0x76, 0x80800000, 0x3800080},
4934{0x3800000, 0x80800000, 0x2b94, 0x80800000, 0x3800080},
4935{0x3800000, 0x80800000, 0x636d24, 0x80800000, 0x3800080},
4936{0x3800000, 0x80800000, 0x7fffff, 0x80800000, 0x3800080},
4937{0x3800000, 0x80800000, 0x800000, 0x80000000, 0x3800000},
4938{0x3800000, 0x80800000, 0x800002, 0x0, 0x3800008},
4939{0x3800000, 0x80800000, 0x1398437, 0xf3086e, 0x3800000},
4940{0x3800000, 0x80800000, 0xba98d27, 0xba98d25, 0x3800000},
4941{0x3800000, 0x80800000, 0xba98d7a, 0xba98d78, 0x3800000},
4942{0x3800000, 0x80800000, 0x751f853a, 0x751f8539, 0x3800010},
4943{0x3800000, 0x80800000, 0x7f7ffff0, 0x7f7fffef, 0x3800010},
4944{0x3800000, 0x80800000, 0x7f7fffff, 0x7f7ffffe, 0x3800010},
4945{0x3800000, 0x80800000, 0x7f800000, 0x7f800000, 0x3800000},
4946{0x3800000, 0x80800000, 0x7f800001, 0x7fc00000, 0x3800001},
4947{0x3800000, 0x80800000, 0x7f984a37, 0x7fc00000, 0x3800001},
4948{0x3800000, 0x80800000, 0x7fbfffff, 0x7fc00000, 0x3800001},
4949{0x3800000, 0x80800000, 0x7fc00000, 0x7fc00000, 0x3800000},
4950{0x3800000, 0x80800000, 0x7fd9ba98, 0x7fc00000, 0x3800000},
4951{0x3800000, 0x80800000, 0x7fffffff, 0x7fc00000, 0x3800000},
4952{0x3800000, 0x80800000, 0x80000000, 0x80800000, 0x3800000},
4953{0x3800000, 0x80800000, 0x80000001, 0x80800000, 0x3800080},
4954{0x3800000, 0x80800000, 0x80000076, 0x80800000, 0x3800080},
4955{0x3800000, 0x80800000, 0x80002b94, 0x80800000, 0x3800080},
4956{0x3800000, 0x80800000, 0x80636d24, 0x80800000, 0x3800080},
4957{0x3800000, 0x80800000, 0x807fffff, 0x80800000, 0x3800080},
4958{0x3800000, 0x80800000, 0x80800000, 0x81000000, 0x3800000},
4959{0x3800000, 0x80800000, 0x80800002, 0x81000001, 0x3800000},
4960{0x3800000, 0x80800000, 0x81398437, 0x81798437, 0x3800000},
4961{0x3800000, 0x80800000, 0x8ba98d27, 0x8ba98d29, 0x3800000},
4962{0x3800000, 0x80800000, 0x8ba98d7a, 0x8ba98d7c, 0x3800000},
4963{0x3800000, 0x80800000, 0xf51f853a, 0xf51f853b, 0x3800010},
4964{0x3800000, 0x80800000, 0xff7ffff0, 0xff7ffff1, 0x3800010},
4965{0x3800000, 0x80800000, 0xff7fffff, 0xff800000, 0x3800014},
4966{0x3800000, 0x80800000, 0xff800000, 0xff800000, 0x3800000},
4967{0x3800000, 0x80800000, 0xff800001, 0x7fc00000, 0x3800001},
4968{0x3800000, 0x80800000, 0xff984a37, 0x7fc00000, 0x3800001},
4969{0x3800000, 0x80800000, 0xffbfffff, 0x7fc00000, 0x3800001},
4970{0x3800000, 0x80800000, 0xffc00000, 0x7fc00000, 0x3800000},
4971{0x3800000, 0x80800000, 0xffd9ba98, 0x7fc00000, 0x3800000},
4972{0x3800000, 0x80800000, 0xffffffff, 0x7fc00000, 0x3800000},
4973{0x3800000, 0x80800000, 0x4f3495cb, 0x4f3495ca, 0x3800010},
4974{0x3800000, 0x80800000, 0xe73a5134, 0xe73a5135, 0x3800010},
4975{0x3800000, 0x80800000, 0x7c994e9e, 0x7c994e9d, 0x3800010},
4976{0x3800000, 0x80800000, 0x6164bd6c, 0x6164bd6b, 0x3800010},
4977{0x3800000, 0x80800000, 0x9503366, 0x9503326, 0x3800000},
4978{0x3800000, 0x80800000, 0xbf5a97c9, 0xbf5a97ca, 0x3800010},
4979{0x3800000, 0x80800000, 0xe6ff1a14, 0xe6ff1a15, 0x3800010},
4980{0x3800000, 0x80800000, 0x77f31e2f, 0x77f31e2e, 0x3800010},
4981{0x3800000, 0x80800000, 0xaab4d7d8, 0xaab4d7d9, 0x3800010},
4982{0x3800000, 0x80800000, 0x966320b, 0x96631cb, 0x3800000},
4983{0x3800000, 0x80800000, 0xb26bddee, 0xb26bddef, 0x3800010},
4984{0x3800000, 0x80800000, 0xb5c8e5d3, 0xb5c8e5d4, 0x3800010},
4985{0x3800000, 0x80800000, 0x317285d3, 0x317285d2, 0x3800010},
4986{0x3800000, 0x80800000, 0x3c9623b1, 0x3c9623b0, 0x3800010},
4987{0x3800000, 0x80800000, 0x51fd2c7c, 0x51fd2c7b, 0x3800010},
4988{0x3800000, 0x80800000, 0x7b906a6c, 0x7b906a6b, 0x3800010},
4989{0x3800000, 0x80800002, 0x0, 0x80800002, 0x3800000},
4990{0x3800000, 0x80800002, 0x1, 0x80800002, 0x3800080},
4991{0x3800000, 0x80800002, 0x76, 0x80800002, 0x3800080},
4992{0x3800000, 0x80800002, 0x2b94, 0x80800002, 0x3800080},
4993{0x3800000, 0x80800002, 0x636d24, 0x80800002, 0x3800080},
4994{0x3800000, 0x80800002, 0x7fffff, 0x80800002, 0x3800080},
4995{0x3800000, 0x80800002, 0x800000, 0x0, 0x3800008},
4996{0x3800000, 0x80800002, 0x800002, 0x80000000, 0x3800000},
4997{0x3800000, 0x80800002, 0x1398437, 0xf3086c, 0x3800000},
4998{0x3800000, 0x80800002, 0xba98d27, 0xba98d24, 0x3800010},
4999{0x3800000, 0x80800002, 0xba98d7a, 0xba98d77, 0x3800010},
5000{0x3800000, 0x80800002, 0x751f853a, 0x751f8539, 0x3800010},
5001{0x3800000, 0x80800002, 0x7f7ffff0, 0x7f7fffef, 0x3800010},
5002{0x3800000, 0x80800002, 0x7f7fffff, 0x7f7ffffe, 0x3800010},
5003{0x3800000, 0x80800002, 0x7f800000, 0x7f800000, 0x3800000},
5004{0x3800000, 0x80800002, 0x7f800001, 0x7fc00000, 0x3800001},
5005{0x3800000, 0x80800002, 0x7f984a37, 0x7fc00000, 0x3800001},
5006{0x3800000, 0x80800002, 0x7fbfffff, 0x7fc00000, 0x3800001},
5007{0x3800000, 0x80800002, 0x7fc00000, 0x7fc00000, 0x3800000},
5008{0x3800000, 0x80800002, 0x7fd9ba98, 0x7fc00000, 0x3800000},
5009{0x3800000, 0x80800002, 0x7fffffff, 0x7fc00000, 0x3800000},
5010{0x3800000, 0x80800002, 0x80000000, 0x80800002, 0x3800000},
5011{0x3800000, 0x80800002, 0x80000001, 0x80800002, 0x3800080},
5012{0x3800000, 0x80800002, 0x80000076, 0x80800002, 0x3800080},
5013{0x3800000, 0x80800002, 0x80002b94, 0x80800002, 0x3800080},
5014{0x3800000, 0x80800002, 0x80636d24, 0x80800002, 0x3800080},
5015{0x3800000, 0x80800002, 0x807fffff, 0x80800002, 0x3800080},
5016{0x3800000, 0x80800002, 0x80800000, 0x81000001, 0x3800000},
5017{0x3800000, 0x80800002, 0x80800002, 0x81000002, 0x3800000},
5018{0x3800000, 0x80800002, 0x81398437, 0x81798438, 0x3800000},
5019{0x3800000, 0x80800002, 0x8ba98d27, 0x8ba98d2a, 0x3800010},
5020{0x3800000, 0x80800002, 0x8ba98d7a, 0x8ba98d7d, 0x3800010},
5021{0x3800000, 0x80800002, 0xf51f853a, 0xf51f853b, 0x3800010},
5022{0x3800000, 0x80800002, 0xff7ffff0, 0xff7ffff1, 0x3800010},
5023{0x3800000, 0x80800002, 0xff7fffff, 0xff800000, 0x3800014},
5024{0x3800000, 0x80800002, 0xff800000, 0xff800000, 0x3800000},
5025{0x3800000, 0x80800002, 0xff800001, 0x7fc00000, 0x3800001},
5026{0x3800000, 0x80800002, 0xff984a37, 0x7fc00000, 0x3800001},
5027{0x3800000, 0x80800002, 0xffbfffff, 0x7fc00000, 0x3800001},
5028{0x3800000, 0x80800002, 0xffc00000, 0x7fc00000, 0x3800000},
5029{0x3800000, 0x80800002, 0xffd9ba98, 0x7fc00000, 0x3800000},
5030{0x3800000, 0x80800002, 0xffffffff, 0x7fc00000, 0x3800000},
5031{0x3800000, 0x80800002, 0x4f3495cb, 0x4f3495ca, 0x3800010},
5032{0x3800000, 0x80800002, 0xe73a5134, 0xe73a5135, 0x3800010},
5033{0x3800000, 0x80800002, 0x7c994e9e, 0x7c994e9d, 0x3800010},
5034{0x3800000, 0x80800002, 0x6164bd6c, 0x6164bd6b, 0x3800010},
5035{0x3800000, 0x80800002, 0x9503366, 0x9503325, 0x3800010},
5036{0x3800000, 0x80800002, 0xbf5a97c9, 0xbf5a97ca, 0x3800010},
5037{0x3800000, 0x80800002, 0xe6ff1a14, 0xe6ff1a15, 0x3800010},
5038{0x3800000, 0x80800002, 0x77f31e2f, 0x77f31e2e, 0x3800010},
5039{0x3800000, 0x80800002, 0xaab4d7d8, 0xaab4d7d9, 0x3800010},
5040{0x3800000, 0x80800002, 0x966320b, 0x96631ca, 0x3800010},
5041{0x3800000, 0x80800002, 0xb26bddee, 0xb26bddef, 0x3800010},
5042{0x3800000, 0x80800002, 0xb5c8e5d3, 0xb5c8e5d4, 0x3800010},
5043{0x3800000, 0x80800002, 0x317285d3, 0x317285d2, 0x3800010},
5044{0x3800000, 0x80800002, 0x3c9623b1, 0x3c9623b0, 0x3800010},
5045{0x3800000, 0x80800002, 0x51fd2c7c, 0x51fd2c7b, 0x3800010},
5046{0x3800000, 0x80800002, 0x7b906a6c, 0x7b906a6b, 0x3800010},
5047{0x3800000, 0x81398437, 0x0, 0x81398437, 0x3800000},
5048{0x3800000, 0x81398437, 0x1, 0x81398437, 0x3800080},
5049{0x3800000, 0x81398437, 0x76, 0x81398437, 0x3800080},
5050{0x3800000, 0x81398437, 0x2b94, 0x81398437, 0x3800080},
5051{0x3800000, 0x81398437, 0x636d24, 0x81398437, 0x3800080},
5052{0x3800000, 0x81398437, 0x7fffff, 0x81398437, 0x3800080},
5053{0x3800000, 0x81398437, 0x800000, 0x80f3086e, 0x3800000},
5054{0x3800000, 0x81398437, 0x800002, 0x80f3086c, 0x3800000},
5055{0x3800000, 0x81398437, 0x1398437, 0x80000000, 0x3800000},
5056{0x3800000, 0x81398437, 0xba98d27, 0xba98d21, 0x3800010},
5057{0x3800000, 0x81398437, 0xba98d7a, 0xba98d74, 0x3800010},
5058{0x3800000, 0x81398437, 0x751f853a, 0x751f8539, 0x3800010},
5059{0x3800000, 0x81398437, 0x7f7ffff0, 0x7f7fffef, 0x3800010},
5060{0x3800000, 0x81398437, 0x7f7fffff, 0x7f7ffffe, 0x3800010},
5061{0x3800000, 0x81398437, 0x7f800000, 0x7f800000, 0x3800000},
5062{0x3800000, 0x81398437, 0x7f800001, 0x7fc00000, 0x3800001},
5063{0x3800000, 0x81398437, 0x7f984a37, 0x7fc00000, 0x3800001},
5064{0x3800000, 0x81398437, 0x7fbfffff, 0x7fc00000, 0x3800001},
5065{0x3800000, 0x81398437, 0x7fc00000, 0x7fc00000, 0x3800000},
5066{0x3800000, 0x81398437, 0x7fd9ba98, 0x7fc00000, 0x3800000},
5067{0x3800000, 0x81398437, 0x7fffffff, 0x7fc00000, 0x3800000},
5068{0x3800000, 0x81398437, 0x80000000, 0x81398437, 0x3800000},
5069{0x3800000, 0x81398437, 0x80000001, 0x81398437, 0x3800080},
5070{0x3800000, 0x81398437, 0x80000076, 0x81398437, 0x3800080},
5071{0x3800000, 0x81398437, 0x80002b94, 0x81398437, 0x3800080},
5072{0x3800000, 0x81398437, 0x80636d24, 0x81398437, 0x3800080},
5073{0x3800000, 0x81398437, 0x807fffff, 0x81398437, 0x3800080},
5074{0x3800000, 0x81398437, 0x80800000, 0x81798437, 0x3800000},
5075{0x3800000, 0x81398437, 0x80800002, 0x81798438, 0x3800000},
5076{0x3800000, 0x81398437, 0x81398437, 0x81b98437, 0x3800000},
5077{0x3800000, 0x81398437, 0x8ba98d27, 0x8ba98d2d, 0x3800010},
5078{0x3800000, 0x81398437, 0x8ba98d7a, 0x8ba98d80, 0x3800010},
5079{0x3800000, 0x81398437, 0xf51f853a, 0xf51f853b, 0x3800010},
5080{0x3800000, 0x81398437, 0xff7ffff0, 0xff7ffff1, 0x3800010},
5081{0x3800000, 0x81398437, 0xff7fffff, 0xff800000, 0x3800014},
5082{0x3800000, 0x81398437, 0xff800000, 0xff800000, 0x3800000},
5083{0x3800000, 0x81398437, 0xff800001, 0x7fc00000, 0x3800001},
5084{0x3800000, 0x81398437, 0xff984a37, 0x7fc00000, 0x3800001},
5085{0x3800000, 0x81398437, 0xffbfffff, 0x7fc00000, 0x3800001},
5086{0x3800000, 0x81398437, 0xffc00000, 0x7fc00000, 0x3800000},
5087{0x3800000, 0x81398437, 0xffd9ba98, 0x7fc00000, 0x3800000},
5088{0x3800000, 0x81398437, 0xffffffff, 0x7fc00000, 0x3800000},
5089{0x3800000, 0x81398437, 0x4f3495cb, 0x4f3495ca, 0x3800010},
5090{0x3800000, 0x81398437, 0xe73a5134, 0xe73a5135, 0x3800010},
5091{0x3800000, 0x81398437, 0x7c994e9e, 0x7c994e9d, 0x3800010},
5092{0x3800000, 0x81398437, 0x6164bd6c, 0x6164bd6b, 0x3800010},
5093{0x3800000, 0x81398437, 0x9503366, 0x95032ac, 0x3800010},
5094{0x3800000, 0x81398437, 0xbf5a97c9, 0xbf5a97ca, 0x3800010},
5095{0x3800000, 0x81398437, 0xe6ff1a14, 0xe6ff1a15, 0x3800010},
5096{0x3800000, 0x81398437, 0x77f31e2f, 0x77f31e2e, 0x3800010},
5097{0x3800000, 0x81398437, 0xaab4d7d8, 0xaab4d7d9, 0x3800010},
5098{0x3800000, 0x81398437, 0x966320b, 0x9663151, 0x3800010},
5099{0x3800000, 0x81398437, 0xb26bddee, 0xb26bddef, 0x3800010},
5100{0x3800000, 0x81398437, 0xb5c8e5d3, 0xb5c8e5d4, 0x3800010},
5101{0x3800000, 0x81398437, 0x317285d3, 0x317285d2, 0x3800010},
5102{0x3800000, 0x81398437, 0x3c9623b1, 0x3c9623b0, 0x3800010},
5103{0x3800000, 0x81398437, 0x51fd2c7c, 0x51fd2c7b, 0x3800010},
5104{0x3800000, 0x81398437, 0x7b906a6c, 0x7b906a6b, 0x3800010},
5105{0x3800000, 0x8ba98d27, 0x0, 0x8ba98d27, 0x3800000},
5106{0x3800000, 0x8ba98d27, 0x1, 0x8ba98d27, 0x3800080},
5107{0x3800000, 0x8ba98d27, 0x76, 0x8ba98d27, 0x3800080},
5108{0x3800000, 0x8ba98d27, 0x2b94, 0x8ba98d27, 0x3800080},
5109{0x3800000, 0x8ba98d27, 0x636d24, 0x8ba98d27, 0x3800080},
5110{0x3800000, 0x8ba98d27, 0x7fffff, 0x8ba98d27, 0x3800080},
5111{0x3800000, 0x8ba98d27, 0x800000, 0x8ba98d25, 0x3800000},
5112{0x3800000, 0x8ba98d27, 0x800002, 0x8ba98d25, 0x3800010},
5113{0x3800000, 0x8ba98d27, 0x1398437, 0x8ba98d22, 0x3800010},
5114{0x3800000, 0x8ba98d27, 0xba98d27, 0x80000000, 0x3800000},
5115{0x3800000, 0x8ba98d27, 0xba98d7a, 0x3260000, 0x3800000},
5116{0x3800000, 0x8ba98d27, 0x751f853a, 0x751f8539, 0x3800010},
5117{0x3800000, 0x8ba98d27, 0x7f7ffff0, 0x7f7fffef, 0x3800010},
5118{0x3800000, 0x8ba98d27, 0x7f7fffff, 0x7f7ffffe, 0x3800010},
5119{0x3800000, 0x8ba98d27, 0x7f800000, 0x7f800000, 0x3800000},
5120{0x3800000, 0x8ba98d27, 0x7f800001, 0x7fc00000, 0x3800001},
5121{0x3800000, 0x8ba98d27, 0x7f984a37, 0x7fc00000, 0x3800001},
5122{0x3800000, 0x8ba98d27, 0x7fbfffff, 0x7fc00000, 0x3800001},
5123{0x3800000, 0x8ba98d27, 0x7fc00000, 0x7fc00000, 0x3800000},
5124{0x3800000, 0x8ba98d27, 0x7fd9ba98, 0x7fc00000, 0x3800000},
5125{0x3800000, 0x8ba98d27, 0x7fffffff, 0x7fc00000, 0x3800000},
5126{0x3800000, 0x8ba98d27, 0x80000000, 0x8ba98d27, 0x3800000},
5127{0x3800000, 0x8ba98d27, 0x80000001, 0x8ba98d27, 0x3800080},
5128{0x3800000, 0x8ba98d27, 0x80000076, 0x8ba98d27, 0x3800080},
5129{0x3800000, 0x8ba98d27, 0x80002b94, 0x8ba98d27, 0x3800080},
5130{0x3800000, 0x8ba98d27, 0x80636d24, 0x8ba98d27, 0x3800080},
5131{0x3800000, 0x8ba98d27, 0x807fffff, 0x8ba98d27, 0x3800080},
5132{0x3800000, 0x8ba98d27, 0x80800000, 0x8ba98d29, 0x3800000},
5133{0x3800000, 0x8ba98d27, 0x80800002, 0x8ba98d2a, 0x3800010},
5134{0x3800000, 0x8ba98d27, 0x81398437, 0x8ba98d2d, 0x3800010},
5135{0x3800000, 0x8ba98d27, 0x8ba98d27, 0x8c298d27, 0x3800000},
5136{0x3800000, 0x8ba98d27, 0x8ba98d7a, 0x8c298d51, 0x3800010},
5137{0x3800000, 0x8ba98d27, 0xf51f853a, 0xf51f853b, 0x3800010},
5138{0x3800000, 0x8ba98d27, 0xff7ffff0, 0xff7ffff1, 0x3800010},
5139{0x3800000, 0x8ba98d27, 0xff7fffff, 0xff800000, 0x3800014},
5140{0x3800000, 0x8ba98d27, 0xff800000, 0xff800000, 0x3800000},
5141{0x3800000, 0x8ba98d27, 0xff800001, 0x7fc00000, 0x3800001},
5142{0x3800000, 0x8ba98d27, 0xff984a37, 0x7fc00000, 0x3800001},
5143{0x3800000, 0x8ba98d27, 0xffbfffff, 0x7fc00000, 0x3800001},
5144{0x3800000, 0x8ba98d27, 0xffc00000, 0x7fc00000, 0x3800000},
5145{0x3800000, 0x8ba98d27, 0xffd9ba98, 0x7fc00000, 0x3800000},
5146{0x3800000, 0x8ba98d27, 0xffffffff, 0x7fc00000, 0x3800000},
5147{0x3800000, 0x8ba98d27, 0x4f3495cb, 0x4f3495ca, 0x3800010},
5148{0x3800000, 0x8ba98d27, 0xe73a5134, 0xe73a5135, 0x3800010},
5149{0x3800000, 0x8ba98d27, 0x7c994e9e, 0x7c994e9d, 0x3800010},
5150{0x3800000, 0x8ba98d27, 0x6164bd6c, 0x6164bd6b, 0x3800010},
5151{0x3800000, 0x8ba98d27, 0x9503366, 0x8ba30b8c, 0x3800010},
5152{0x3800000, 0x8ba98d27, 0xbf5a97c9, 0xbf5a97ca, 0x3800010},
5153{0x3800000, 0x8ba98d27, 0xe6ff1a14, 0xe6ff1a15, 0x3800010},
5154{0x3800000, 0x8ba98d27, 0x77f31e2f, 0x77f31e2e, 0x3800010},
5155{0x3800000, 0x8ba98d27, 0xaab4d7d8, 0xaab4d7d9, 0x3800010},
5156{0x3800000, 0x8ba98d27, 0x966320b, 0x8ba25b97, 0x3800010},
5157{0x3800000, 0x8ba98d27, 0xb26bddee, 0xb26bddef, 0x3800010},
5158{0x3800000, 0x8ba98d27, 0xb5c8e5d3, 0xb5c8e5d4, 0x3800010},
5159{0x3800000, 0x8ba98d27, 0x317285d3, 0x317285d2, 0x3800010},
5160{0x3800000, 0x8ba98d27, 0x3c9623b1, 0x3c9623b0, 0x3800010},
5161{0x3800000, 0x8ba98d27, 0x51fd2c7c, 0x51fd2c7b, 0x3800010},
5162{0x3800000, 0x8ba98d27, 0x7b906a6c, 0x7b906a6b, 0x3800010},
5163{0x3800000, 0x8ba98d7a, 0x0, 0x8ba98d7a, 0x3800000},
5164{0x3800000, 0x8ba98d7a, 0x1, 0x8ba98d7a, 0x3800080},
5165{0x3800000, 0x8ba98d7a, 0x76, 0x8ba98d7a, 0x3800080},
5166{0x3800000, 0x8ba98d7a, 0x2b94, 0x8ba98d7a, 0x3800080},
5167{0x3800000, 0x8ba98d7a, 0x636d24, 0x8ba98d7a, 0x3800080},
5168{0x3800000, 0x8ba98d7a, 0x7fffff, 0x8ba98d7a, 0x3800080},
5169{0x3800000, 0x8ba98d7a, 0x800000, 0x8ba98d78, 0x3800000},
5170{0x3800000, 0x8ba98d7a, 0x800002, 0x8ba98d78, 0x3800010},
5171{0x3800000, 0x8ba98d7a, 0x1398437, 0x8ba98d75, 0x3800010},
5172{0x3800000, 0x8ba98d7a, 0xba98d27, 0x83260000, 0x3800000},
5173{0x3800000, 0x8ba98d7a, 0xba98d7a, 0x80000000, 0x3800000},
5174{0x3800000, 0x8ba98d7a, 0x751f853a, 0x751f8539, 0x3800010},
5175{0x3800000, 0x8ba98d7a, 0x7f7ffff0, 0x7f7fffef, 0x3800010},
5176{0x3800000, 0x8ba98d7a, 0x7f7fffff, 0x7f7ffffe, 0x3800010},
5177{0x3800000, 0x8ba98d7a, 0x7f800000, 0x7f800000, 0x3800000},
5178{0x3800000, 0x8ba98d7a, 0x7f800001, 0x7fc00000, 0x3800001},
5179{0x3800000, 0x8ba98d7a, 0x7f984a37, 0x7fc00000, 0x3800001},
5180{0x3800000, 0x8ba98d7a, 0x7fbfffff, 0x7fc00000, 0x3800001},
5181{0x3800000, 0x8ba98d7a, 0x7fc00000, 0x7fc00000, 0x3800000},
5182{0x3800000, 0x8ba98d7a, 0x7fd9ba98, 0x7fc00000, 0x3800000},
5183{0x3800000, 0x8ba98d7a, 0x7fffffff, 0x7fc00000, 0x3800000},
5184{0x3800000, 0x8ba98d7a, 0x80000000, 0x8ba98d7a, 0x3800000},
5185{0x3800000, 0x8ba98d7a, 0x80000001, 0x8ba98d7a, 0x3800080},
5186{0x3800000, 0x8ba98d7a, 0x80000076, 0x8ba98d7a, 0x3800080},
5187{0x3800000, 0x8ba98d7a, 0x80002b94, 0x8ba98d7a, 0x3800080},
5188{0x3800000, 0x8ba98d7a, 0x80636d24, 0x8ba98d7a, 0x3800080},
5189{0x3800000, 0x8ba98d7a, 0x807fffff, 0x8ba98d7a, 0x3800080},
5190{0x3800000, 0x8ba98d7a, 0x80800000, 0x8ba98d7c, 0x3800000},
5191{0x3800000, 0x8ba98d7a, 0x80800002, 0x8ba98d7d, 0x3800010},
5192{0x3800000, 0x8ba98d7a, 0x81398437, 0x8ba98d80, 0x3800010},
5193{0x3800000, 0x8ba98d7a, 0x8ba98d27, 0x8c298d51, 0x3800010},
5194{0x3800000, 0x8ba98d7a, 0x8ba98d7a, 0x8c298d7a, 0x3800000},
5195{0x3800000, 0x8ba98d7a, 0xf51f853a, 0xf51f853b, 0x3800010},
5196{0x3800000, 0x8ba98d7a, 0xff7ffff0, 0xff7ffff1, 0x3800010},
5197{0x3800000, 0x8ba98d7a, 0xff7fffff, 0xff800000, 0x3800014},
5198{0x3800000, 0x8ba98d7a, 0xff800000, 0xff800000, 0x3800000},
5199{0x3800000, 0x8ba98d7a, 0xff800001, 0x7fc00000, 0x3800001},
5200{0x3800000, 0x8ba98d7a, 0xff984a37, 0x7fc00000, 0x3800001},
5201{0x3800000, 0x8ba98d7a, 0xffbfffff, 0x7fc00000, 0x3800001},
5202{0x3800000, 0x8ba98d7a, 0xffc00000, 0x7fc00000, 0x3800000},
5203{0x3800000, 0x8ba98d7a, 0xffd9ba98, 0x7fc00000, 0x3800000},
5204{0x3800000, 0x8ba98d7a, 0xffffffff, 0x7fc00000, 0x3800000},
5205{0x3800000, 0x8ba98d7a, 0x4f3495cb, 0x4f3495ca, 0x3800010},
5206{0x3800000, 0x8ba98d7a, 0xe73a5134, 0xe73a5135, 0x3800010},
5207{0x3800000, 0x8ba98d7a, 0x7c994e9e, 0x7c994e9d, 0x3800010},
5208{0x3800000, 0x8ba98d7a, 0x6164bd6c, 0x6164bd6b, 0x3800010},
5209{0x3800000, 0x8ba98d7a, 0x9503366, 0x8ba30bdf, 0x3800010},
5210{0x3800000, 0x8ba98d7a, 0xbf5a97c9, 0xbf5a97ca, 0x3800010},
5211{0x3800000, 0x8ba98d7a, 0xe6ff1a14, 0xe6ff1a15, 0x3800010},
5212{0x3800000, 0x8ba98d7a, 0x77f31e2f, 0x77f31e2e, 0x3800010},
5213{0x3800000, 0x8ba98d7a, 0xaab4d7d8, 0xaab4d7d9, 0x3800010},
5214{0x3800000, 0x8ba98d7a, 0x966320b, 0x8ba25bea, 0x3800010},
5215{0x3800000, 0x8ba98d7a, 0xb26bddee, 0xb26bddef, 0x3800010},
5216{0x3800000, 0x8ba98d7a, 0xb5c8e5d3, 0xb5c8e5d4, 0x3800010},
5217{0x3800000, 0x8ba98d7a, 0x317285d3, 0x317285d2, 0x3800010},
5218{0x3800000, 0x8ba98d7a, 0x3c9623b1, 0x3c9623b0, 0x3800010},
5219{0x3800000, 0x8ba98d7a, 0x51fd2c7c, 0x51fd2c7b, 0x3800010},
5220{0x3800000, 0x8ba98d7a, 0x7b906a6c, 0x7b906a6b, 0x3800010},
5221{0x3800000, 0xf51f853a, 0x0, 0xf51f853a, 0x3800000},
5222{0x3800000, 0xf51f853a, 0x1, 0xf51f853a, 0x3800080},
5223{0x3800000, 0xf51f853a, 0x76, 0xf51f853a, 0x3800080},
5224{0x3800000, 0xf51f853a, 0x2b94, 0xf51f853a, 0x3800080},
5225{0x3800000, 0xf51f853a, 0x636d24, 0xf51f853a, 0x3800080},
5226{0x3800000, 0xf51f853a, 0x7fffff, 0xf51f853a, 0x3800080},
5227{0x3800000, 0xf51f853a, 0x800000, 0xf51f853a, 0x3800010},
5228{0x3800000, 0xf51f853a, 0x800002, 0xf51f853a, 0x3800010},
5229{0x3800000, 0xf51f853a, 0x1398437, 0xf51f853a, 0x3800010},
5230{0x3800000, 0xf51f853a, 0xba98d27, 0xf51f853a, 0x3800010},
5231{0x3800000, 0xf51f853a, 0xba98d7a, 0xf51f853a, 0x3800010},
5232{0x3800000, 0xf51f853a, 0x751f853a, 0x80000000, 0x3800000},
5233{0x3800000, 0xf51f853a, 0x7f7ffff0, 0x7f7fffe6, 0x3800010},
5234{0x3800000, 0xf51f853a, 0x7f7fffff, 0x7f7ffff5, 0x3800010},
5235{0x3800000, 0xf51f853a, 0x7f800000, 0x7f800000, 0x3800000},
5236{0x3800000, 0xf51f853a, 0x7f800001, 0x7fc00000, 0x3800001},
5237{0x3800000, 0xf51f853a, 0x7f984a37, 0x7fc00000, 0x3800001},
5238{0x3800000, 0xf51f853a, 0x7fbfffff, 0x7fc00000, 0x3800001},
5239{0x3800000, 0xf51f853a, 0x7fc00000, 0x7fc00000, 0x3800000},
5240{0x3800000, 0xf51f853a, 0x7fd9ba98, 0x7fc00000, 0x3800000},
5241{0x3800000, 0xf51f853a, 0x7fffffff, 0x7fc00000, 0x3800000},
5242{0x3800000, 0xf51f853a, 0x80000000, 0xf51f853a, 0x3800000},
5243{0x3800000, 0xf51f853a, 0x80000001, 0xf51f853a, 0x3800080},
5244{0x3800000, 0xf51f853a, 0x80000076, 0xf51f853a, 0x3800080},
5245{0x3800000, 0xf51f853a, 0x80002b94, 0xf51f853a, 0x3800080},
5246{0x3800000, 0xf51f853a, 0x80636d24, 0xf51f853a, 0x3800080},
5247{0x3800000, 0xf51f853a, 0x807fffff, 0xf51f853a, 0x3800080},
5248{0x3800000, 0xf51f853a, 0x80800000, 0xf51f853b, 0x3800010},
5249{0x3800000, 0xf51f853a, 0x80800002, 0xf51f853b, 0x3800010},
5250{0x3800000, 0xf51f853a, 0x81398437, 0xf51f853b, 0x3800010},
5251{0x3800000, 0xf51f853a, 0x8ba98d27, 0xf51f853b, 0x3800010},
5252{0x3800000, 0xf51f853a, 0x8ba98d7a, 0xf51f853b, 0x3800010},
5253{0x3800000, 0xf51f853a, 0xf51f853a, 0xf59f853a, 0x3800000},
5254{0x3800000, 0xf51f853a, 0xff7ffff0, 0xff7ffffa, 0x3800010},
5255{0x3800000, 0xf51f853a, 0xff7fffff, 0xff800000, 0x3800014},
5256{0x3800000, 0xf51f853a, 0xff800000, 0xff800000, 0x3800000},
5257{0x3800000, 0xf51f853a, 0xff800001, 0x7fc00000, 0x3800001},
5258{0x3800000, 0xf51f853a, 0xff984a37, 0x7fc00000, 0x3800001},
5259{0x3800000, 0xf51f853a, 0xffbfffff, 0x7fc00000, 0x3800001},
5260{0x3800000, 0xf51f853a, 0xffc00000, 0x7fc00000, 0x3800000},
5261{0x3800000, 0xf51f853a, 0xffd9ba98, 0x7fc00000, 0x3800000},
5262{0x3800000, 0xf51f853a, 0xffffffff, 0x7fc00000, 0x3800000},
5263{0x3800000, 0xf51f853a, 0x4f3495cb, 0xf51f853a, 0x3800010},
5264{0x3800000, 0xf51f853a, 0xe73a5134, 0xf51f853b, 0x3800010},
5265{0x3800000, 0xf51f853a, 0x7c994e9e, 0x7c994d5e, 0x3800010},
5266{0x3800000, 0xf51f853a, 0x6164bd6c, 0xf51f853a, 0x3800010},
5267{0x3800000, 0xf51f853a, 0x9503366, 0xf51f853a, 0x3800010},
5268{0x3800000, 0xf51f853a, 0xbf5a97c9, 0xf51f853b, 0x3800010},
5269{0x3800000, 0xf51f853a, 0xe6ff1a14, 0xf51f853b, 0x3800010},
5270{0x3800000, 0xf51f853a, 0x77f31e2f, 0x77ee2205, 0x3800010},
5271{0x3800000, 0xf51f853a, 0xaab4d7d8, 0xf51f853b, 0x3800010},
5272{0x3800000, 0xf51f853a, 0x966320b, 0xf51f853a, 0x3800010},
5273{0x3800000, 0xf51f853a, 0xb26bddee, 0xf51f853b, 0x3800010},
5274{0x3800000, 0xf51f853a, 0xb5c8e5d3, 0xf51f853b, 0x3800010},
5275{0x3800000, 0xf51f853a, 0x317285d3, 0xf51f853a, 0x3800010},
5276{0x3800000, 0xf51f853a, 0x3c9623b1, 0xf51f853a, 0x3800010},
5277{0x3800000, 0xf51f853a, 0x51fd2c7c, 0xf51f853a, 0x3800010},
5278{0x3800000, 0xf51f853a, 0x7b906a6c, 0x7b90656f, 0x3800010},
5279{0x3800000, 0xff7ffff0, 0x0, 0xff7ffff0, 0x3800000},
5280{0x3800000, 0xff7ffff0, 0x1, 0xff7ffff0, 0x3800080},
5281{0x3800000, 0xff7ffff0, 0x76, 0xff7ffff0, 0x3800080},
5282{0x3800000, 0xff7ffff0, 0x2b94, 0xff7ffff0, 0x3800080},
5283{0x3800000, 0xff7ffff0, 0x636d24, 0xff7ffff0, 0x3800080},
5284{0x3800000, 0xff7ffff0, 0x7fffff, 0xff7ffff0, 0x3800080},
5285{0x3800000, 0xff7ffff0, 0x800000, 0xff7ffff0, 0x3800010},
5286{0x3800000, 0xff7ffff0, 0x800002, 0xff7ffff0, 0x3800010},
5287{0x3800000, 0xff7ffff0, 0x1398437, 0xff7ffff0, 0x3800010},
5288{0x3800000, 0xff7ffff0, 0xba98d27, 0xff7ffff0, 0x3800010},
5289{0x3800000, 0xff7ffff0, 0xba98d7a, 0xff7ffff0, 0x3800010},
5290{0x3800000, 0xff7ffff0, 0x751f853a, 0xff7fffe7, 0x3800010},
5291{0x3800000, 0xff7ffff0, 0x7f7ffff0, 0x80000000, 0x3800000},
5292{0x3800000, 0xff7ffff0, 0x7f7fffff, 0x75700000, 0x3800000},
5293{0x3800000, 0xff7ffff0, 0x7f800000, 0x7f800000, 0x3800000},
5294{0x3800000, 0xff7ffff0, 0x7f800001, 0x7fc00000, 0x3800001},
5295{0x3800000, 0xff7ffff0, 0x7f984a37, 0x7fc00000, 0x3800001},
5296{0x3800000, 0xff7ffff0, 0x7fbfffff, 0x7fc00000, 0x3800001},
5297{0x3800000, 0xff7ffff0, 0x7fc00000, 0x7fc00000, 0x3800000},
5298{0x3800000, 0xff7ffff0, 0x7fd9ba98, 0x7fc00000, 0x3800000},
5299{0x3800000, 0xff7ffff0, 0x7fffffff, 0x7fc00000, 0x3800000},
5300{0x3800000, 0xff7ffff0, 0x80000000, 0xff7ffff0, 0x3800000},
5301{0x3800000, 0xff7ffff0, 0x80000001, 0xff7ffff0, 0x3800080},
5302{0x3800000, 0xff7ffff0, 0x80000076, 0xff7ffff0, 0x3800080},
5303{0x3800000, 0xff7ffff0, 0x80002b94, 0xff7ffff0, 0x3800080},
5304{0x3800000, 0xff7ffff0, 0x80636d24, 0xff7ffff0, 0x3800080},
5305{0x3800000, 0xff7ffff0, 0x807fffff, 0xff7ffff0, 0x3800080},
5306{0x3800000, 0xff7ffff0, 0x80800000, 0xff7ffff1, 0x3800010},
5307{0x3800000, 0xff7ffff0, 0x80800002, 0xff7ffff1, 0x3800010},
5308{0x3800000, 0xff7ffff0, 0x81398437, 0xff7ffff1, 0x3800010},
5309{0x3800000, 0xff7ffff0, 0x8ba98d27, 0xff7ffff1, 0x3800010},
5310{0x3800000, 0xff7ffff0, 0x8ba98d7a, 0xff7ffff1, 0x3800010},
5311{0x3800000, 0xff7ffff0, 0xf51f853a, 0xff7ffffa, 0x3800010},
5312{0x3800000, 0xff7ffff0, 0xff7ffff0, 0xff800000, 0x3800014},
5313{0x3800000, 0xff7ffff0, 0xff7fffff, 0xff800000, 0x3800014},
5314{0x3800000, 0xff7ffff0, 0xff800000, 0xff800000, 0x3800000},
5315{0x3800000, 0xff7ffff0, 0xff800001, 0x7fc00000, 0x3800001},
5316{0x3800000, 0xff7ffff0, 0xff984a37, 0x7fc00000, 0x3800001},
5317{0x3800000, 0xff7ffff0, 0xffbfffff, 0x7fc00000, 0x3800001},
5318{0x3800000, 0xff7ffff0, 0xffc00000, 0x7fc00000, 0x3800000},
5319{0x3800000, 0xff7ffff0, 0xffd9ba98, 0x7fc00000, 0x3800000},
5320{0x3800000, 0xff7ffff0, 0xffffffff, 0x7fc00000, 0x3800000},
5321{0x3800000, 0xff7ffff0, 0x4f3495cb, 0xff7ffff0, 0x3800010},
5322{0x3800000, 0xff7ffff0, 0xe73a5134, 0xff7ffff1, 0x3800010},
5323{0x3800000, 0xff7ffff0, 0x7c994e9e, 0xff7b357c, 0x3800010},
5324{0x3800000, 0xff7ffff0, 0x6164bd6c, 0xff7ffff0, 0x3800010},
5325{0x3800000, 0xff7ffff0, 0x9503366, 0xff7ffff0, 0x3800010},
5326{0x3800000, 0xff7ffff0, 0xbf5a97c9, 0xff7ffff1, 0x3800010},
5327{0x3800000, 0xff7ffff0, 0xe6ff1a14, 0xff7ffff1, 0x3800010},
5328{0x3800000, 0xff7ffff0, 0x77f31e2f, 0xff7ffe0a, 0x3800010},
5329{0x3800000, 0xff7ffff0, 0xaab4d7d8, 0xff7ffff1, 0x3800010},
5330{0x3800000, 0xff7ffff0, 0x966320b, 0xff7ffff0, 0x3800010},
5331{0x3800000, 0xff7ffff0, 0xb26bddee, 0xff7ffff1, 0x3800010},
5332{0x3800000, 0xff7ffff0, 0xb5c8e5d3, 0xff7ffff1, 0x3800010},
5333{0x3800000, 0xff7ffff0, 0x317285d3, 0xff7ffff0, 0x3800010},
5334{0x3800000, 0xff7ffff0, 0x3c9623b1, 0xff7ffff0, 0x3800010},
5335{0x3800000, 0xff7ffff0, 0x51fd2c7c, 0xff7ffff0, 0x3800010},
5336{0x3800000, 0xff7ffff0, 0x7b906a6c, 0xff7edf1c, 0x3800010},
5337{0x3800000, 0xff7fffff, 0x0, 0xff7fffff, 0x3800000},
5338{0x3800000, 0xff7fffff, 0x1, 0xff7fffff, 0x3800080},
5339{0x3800000, 0xff7fffff, 0x76, 0xff7fffff, 0x3800080},
5340{0x3800000, 0xff7fffff, 0x2b94, 0xff7fffff, 0x3800080},
5341{0x3800000, 0xff7fffff, 0x636d24, 0xff7fffff, 0x3800080},
5342{0x3800000, 0xff7fffff, 0x7fffff, 0xff7fffff, 0x3800080},
5343{0x3800000, 0xff7fffff, 0x800000, 0xff7fffff, 0x3800010},
5344{0x3800000, 0xff7fffff, 0x800002, 0xff7fffff, 0x3800010},
5345{0x3800000, 0xff7fffff, 0x1398437, 0xff7fffff, 0x3800010},
5346{0x3800000, 0xff7fffff, 0xba98d27, 0xff7fffff, 0x3800010},
5347{0x3800000, 0xff7fffff, 0xba98d7a, 0xff7fffff, 0x3800010},
5348{0x3800000, 0xff7fffff, 0x751f853a, 0xff7ffff6, 0x3800010},
5349{0x3800000, 0xff7fffff, 0x7f7ffff0, 0xf5700000, 0x3800000},
5350{0x3800000, 0xff7fffff, 0x7f7fffff, 0x80000000, 0x3800000},
5351{0x3800000, 0xff7fffff, 0x7f800000, 0x7f800000, 0x3800000},
5352{0x3800000, 0xff7fffff, 0x7f800001, 0x7fc00000, 0x3800001},
5353{0x3800000, 0xff7fffff, 0x7f984a37, 0x7fc00000, 0x3800001},
5354{0x3800000, 0xff7fffff, 0x7fbfffff, 0x7fc00000, 0x3800001},
5355{0x3800000, 0xff7fffff, 0x7fc00000, 0x7fc00000, 0x3800000},
5356{0x3800000, 0xff7fffff, 0x7fd9ba98, 0x7fc00000, 0x3800000},
5357{0x3800000, 0xff7fffff, 0x7fffffff, 0x7fc00000, 0x3800000},
5358{0x3800000, 0xff7fffff, 0x80000000, 0xff7fffff, 0x3800000},
5359{0x3800000, 0xff7fffff, 0x80000001, 0xff7fffff, 0x3800080},
5360{0x3800000, 0xff7fffff, 0x80000076, 0xff7fffff, 0x3800080},
5361{0x3800000, 0xff7fffff, 0x80002b94, 0xff7fffff, 0x3800080},
5362{0x3800000, 0xff7fffff, 0x80636d24, 0xff7fffff, 0x3800080},
5363{0x3800000, 0xff7fffff, 0x807fffff, 0xff7fffff, 0x3800080},
5364{0x3800000, 0xff7fffff, 0x80800000, 0xff800000, 0x3800014},
5365{0x3800000, 0xff7fffff, 0x80800002, 0xff800000, 0x3800014},
5366{0x3800000, 0xff7fffff, 0x81398437, 0xff800000, 0x3800014},
5367{0x3800000, 0xff7fffff, 0x8ba98d27, 0xff800000, 0x3800014},
5368{0x3800000, 0xff7fffff, 0x8ba98d7a, 0xff800000, 0x3800014},
5369{0x3800000, 0xff7fffff, 0xf51f853a, 0xff800000, 0x3800014},
5370{0x3800000, 0xff7fffff, 0xff7ffff0, 0xff800000, 0x3800014},
5371{0x3800000, 0xff7fffff, 0xff7fffff, 0xff800000, 0x3800014},
5372{0x3800000, 0xff7fffff, 0xff800000, 0xff800000, 0x3800000},
5373{0x3800000, 0xff7fffff, 0xff800001, 0x7fc00000, 0x3800001},
5374{0x3800000, 0xff7fffff, 0xff984a37, 0x7fc00000, 0x3800001},
5375{0x3800000, 0xff7fffff, 0xffbfffff, 0x7fc00000, 0x3800001},
5376{0x3800000, 0xff7fffff, 0xffc00000, 0x7fc00000, 0x3800000},
5377{0x3800000, 0xff7fffff, 0xffd9ba98, 0x7fc00000, 0x3800000},
5378{0x3800000, 0xff7fffff, 0xffffffff, 0x7fc00000, 0x3800000},
5379{0x3800000, 0xff7fffff, 0x4f3495cb, 0xff7fffff, 0x3800010},
5380{0x3800000, 0xff7fffff, 0xe73a5134, 0xff800000, 0x3800014},
5381{0x3800000, 0xff7fffff, 0x7c994e9e, 0xff7b358b, 0x3800010},
5382{0x3800000, 0xff7fffff, 0x6164bd6c, 0xff7fffff, 0x3800010},
5383{0x3800000, 0xff7fffff, 0x9503366, 0xff7fffff, 0x3800010},
5384{0x3800000, 0xff7fffff, 0xbf5a97c9, 0xff800000, 0x3800014},
5385{0x3800000, 0xff7fffff, 0xe6ff1a14, 0xff800000, 0x3800014},
5386{0x3800000, 0xff7fffff, 0x77f31e2f, 0xff7ffe19, 0x3800010},
5387{0x3800000, 0xff7fffff, 0xaab4d7d8, 0xff800000, 0x3800014},
5388{0x3800000, 0xff7fffff, 0x966320b, 0xff7fffff, 0x3800010},
5389{0x3800000, 0xff7fffff, 0xb26bddee, 0xff800000, 0x3800014},
5390{0x3800000, 0xff7fffff, 0xb5c8e5d3, 0xff800000, 0x3800014},
5391{0x3800000, 0xff7fffff, 0x317285d3, 0xff7fffff, 0x3800010},
5392{0x3800000, 0xff7fffff, 0x3c9623b1, 0xff7fffff, 0x3800010},
5393{0x3800000, 0xff7fffff, 0x51fd2c7c, 0xff7fffff, 0x3800010},
5394{0x3800000, 0xff7fffff, 0x7b906a6c, 0xff7edf2b, 0x3800010},
5395{0x3800000, 0xff800000, 0x0, 0xff800000, 0x3800000},
5396{0x3800000, 0xff800000, 0x1, 0xff800000, 0x3800080},
5397{0x3800000, 0xff800000, 0x76, 0xff800000, 0x3800080},
5398{0x3800000, 0xff800000, 0x2b94, 0xff800000, 0x3800080},
5399{0x3800000, 0xff800000, 0x636d24, 0xff800000, 0x3800080},
5400{0x3800000, 0xff800000, 0x7fffff, 0xff800000, 0x3800080},
5401{0x3800000, 0xff800000, 0x800000, 0xff800000, 0x3800000},
5402{0x3800000, 0xff800000, 0x800002, 0xff800000, 0x3800000},
5403{0x3800000, 0xff800000, 0x1398437, 0xff800000, 0x3800000},
5404{0x3800000, 0xff800000, 0xba98d27, 0xff800000, 0x3800000},
5405{0x3800000, 0xff800000, 0xba98d7a, 0xff800000, 0x3800000},
5406{0x3800000, 0xff800000, 0x751f853a, 0xff800000, 0x3800000},
5407{0x3800000, 0xff800000, 0x7f7ffff0, 0xff800000, 0x3800000},
5408{0x3800000, 0xff800000, 0x7f7fffff, 0xff800000, 0x3800000},
5409{0x3800000, 0xff800000, 0x7f800000, 0x7fc00000, 0x3800001},
5410{0x3800000, 0xff800000, 0x7f800001, 0x7fc00000, 0x3800001},
5411{0x3800000, 0xff800000, 0x7f984a37, 0x7fc00000, 0x3800001},
5412{0x3800000, 0xff800000, 0x7fbfffff, 0x7fc00000, 0x3800001},
5413{0x3800000, 0xff800000, 0x7fc00000, 0x7fc00000, 0x3800000},
5414{0x3800000, 0xff800000, 0x7fd9ba98, 0x7fc00000, 0x3800000},
5415{0x3800000, 0xff800000, 0x7fffffff, 0x7fc00000, 0x3800000},
5416{0x3800000, 0xff800000, 0x80000000, 0xff800000, 0x3800000},
5417{0x3800000, 0xff800000, 0x80000001, 0xff800000, 0x3800080},
5418{0x3800000, 0xff800000, 0x80000076, 0xff800000, 0x3800080},
5419{0x3800000, 0xff800000, 0x80002b94, 0xff800000, 0x3800080},
5420{0x3800000, 0xff800000, 0x80636d24, 0xff800000, 0x3800080},
5421{0x3800000, 0xff800000, 0x807fffff, 0xff800000, 0x3800080},
5422{0x3800000, 0xff800000, 0x80800000, 0xff800000, 0x3800000},
5423{0x3800000, 0xff800000, 0x80800002, 0xff800000, 0x3800000},
5424{0x3800000, 0xff800000, 0x81398437, 0xff800000, 0x3800000},
5425{0x3800000, 0xff800000, 0x8ba98d27, 0xff800000, 0x3800000},
5426{0x3800000, 0xff800000, 0x8ba98d7a, 0xff800000, 0x3800000},
5427{0x3800000, 0xff800000, 0xf51f853a, 0xff800000, 0x3800000},
5428{0x3800000, 0xff800000, 0xff7ffff0, 0xff800000, 0x3800000},
5429{0x3800000, 0xff800000, 0xff7fffff, 0xff800000, 0x3800000},
5430{0x3800000, 0xff800000, 0xff800000, 0xff800000, 0x3800000},
5431{0x3800000, 0xff800000, 0xff800001, 0x7fc00000, 0x3800001},
5432{0x3800000, 0xff800000, 0xff984a37, 0x7fc00000, 0x3800001},
5433{0x3800000, 0xff800000, 0xffbfffff, 0x7fc00000, 0x3800001},
5434{0x3800000, 0xff800000, 0xffc00000, 0x7fc00000, 0x3800000},
5435{0x3800000, 0xff800000, 0xffd9ba98, 0x7fc00000, 0x3800000},
5436{0x3800000, 0xff800000, 0xffffffff, 0x7fc00000, 0x3800000},
5437{0x3800000, 0xff800000, 0x4f3495cb, 0xff800000, 0x3800000},
5438{0x3800000, 0xff800000, 0xe73a5134, 0xff800000, 0x3800000},
5439{0x3800000, 0xff800000, 0x7c994e9e, 0xff800000, 0x3800000},
5440{0x3800000, 0xff800000, 0x6164bd6c, 0xff800000, 0x3800000},
5441{0x3800000, 0xff800000, 0x9503366, 0xff800000, 0x3800000},
5442{0x3800000, 0xff800000, 0xbf5a97c9, 0xff800000, 0x3800000},
5443{0x3800000, 0xff800000, 0xe6ff1a14, 0xff800000, 0x3800000},
5444{0x3800000, 0xff800000, 0x77f31e2f, 0xff800000, 0x3800000},
5445{0x3800000, 0xff800000, 0xaab4d7d8, 0xff800000, 0x3800000},
5446{0x3800000, 0xff800000, 0x966320b, 0xff800000, 0x3800000},
5447{0x3800000, 0xff800000, 0xb26bddee, 0xff800000, 0x3800000},
5448{0x3800000, 0xff800000, 0xb5c8e5d3, 0xff800000, 0x3800000},
5449{0x3800000, 0xff800000, 0x317285d3, 0xff800000, 0x3800000},
5450{0x3800000, 0xff800000, 0x3c9623b1, 0xff800000, 0x3800000},
5451{0x3800000, 0xff800000, 0x51fd2c7c, 0xff800000, 0x3800000},
5452{0x3800000, 0xff800000, 0x7b906a6c, 0xff800000, 0x3800000},
5453{0x3800000, 0xff800001, 0x0, 0x7fc00000, 0x3800001},
5454{0x3800000, 0xff800001, 0x1, 0x7fc00000, 0x3800081},
5455{0x3800000, 0xff800001, 0x76, 0x7fc00000, 0x3800081},
5456{0x3800000, 0xff800001, 0x2b94, 0x7fc00000, 0x3800081},
5457{0x3800000, 0xff800001, 0x636d24, 0x7fc00000, 0x3800081},
5458{0x3800000, 0xff800001, 0x7fffff, 0x7fc00000, 0x3800081},
5459{0x3800000, 0xff800001, 0x800000, 0x7fc00000, 0x3800001},
5460{0x3800000, 0xff800001, 0x800002, 0x7fc00000, 0x3800001},
5461{0x3800000, 0xff800001, 0x1398437, 0x7fc00000, 0x3800001},
5462{0x3800000, 0xff800001, 0xba98d27, 0x7fc00000, 0x3800001},
5463{0x3800000, 0xff800001, 0xba98d7a, 0x7fc00000, 0x3800001},
5464{0x3800000, 0xff800001, 0x751f853a, 0x7fc00000, 0x3800001},
5465{0x3800000, 0xff800001, 0x7f7ffff0, 0x7fc00000, 0x3800001},
5466{0x3800000, 0xff800001, 0x7f7fffff, 0x7fc00000, 0x3800001},
5467{0x3800000, 0xff800001, 0x7f800000, 0x7fc00000, 0x3800001},
5468{0x3800000, 0xff800001, 0x7f800001, 0x7fc00000, 0x3800001},
5469{0x3800000, 0xff800001, 0x7f984a37, 0x7fc00000, 0x3800001},
5470{0x3800000, 0xff800001, 0x7fbfffff, 0x7fc00000, 0x3800001},
5471{0x3800000, 0xff800001, 0x7fc00000, 0x7fc00000, 0x3800001},
5472{0x3800000, 0xff800001, 0x7fd9ba98, 0x7fc00000, 0x3800001},
5473{0x3800000, 0xff800001, 0x7fffffff, 0x7fc00000, 0x3800001},
5474{0x3800000, 0xff800001, 0x80000000, 0x7fc00000, 0x3800001},
5475{0x3800000, 0xff800001, 0x80000001, 0x7fc00000, 0x3800081},
5476{0x3800000, 0xff800001, 0x80000076, 0x7fc00000, 0x3800081},
5477{0x3800000, 0xff800001, 0x80002b94, 0x7fc00000, 0x3800081},
5478{0x3800000, 0xff800001, 0x80636d24, 0x7fc00000, 0x3800081},
5479{0x3800000, 0xff800001, 0x807fffff, 0x7fc00000, 0x3800081},
5480{0x3800000, 0xff800001, 0x80800000, 0x7fc00000, 0x3800001},
5481{0x3800000, 0xff800001, 0x80800002, 0x7fc00000, 0x3800001},
5482{0x3800000, 0xff800001, 0x81398437, 0x7fc00000, 0x3800001},
5483{0x3800000, 0xff800001, 0x8ba98d27, 0x7fc00000, 0x3800001},
5484{0x3800000, 0xff800001, 0x8ba98d7a, 0x7fc00000, 0x3800001},
5485{0x3800000, 0xff800001, 0xf51f853a, 0x7fc00000, 0x3800001},
5486{0x3800000, 0xff800001, 0xff7ffff0, 0x7fc00000, 0x3800001},
5487{0x3800000, 0xff800001, 0xff7fffff, 0x7fc00000, 0x3800001},
5488{0x3800000, 0xff800001, 0xff800000, 0x7fc00000, 0x3800001},
5489{0x3800000, 0xff800001, 0xff800001, 0x7fc00000, 0x3800001},
5490{0x3800000, 0xff800001, 0xff984a37, 0x7fc00000, 0x3800001},
5491{0x3800000, 0xff800001, 0xffbfffff, 0x7fc00000, 0x3800001},
5492{0x3800000, 0xff800001, 0xffc00000, 0x7fc00000, 0x3800001},
5493{0x3800000, 0xff800001, 0xffd9ba98, 0x7fc00000, 0x3800001},
5494{0x3800000, 0xff800001, 0xffffffff, 0x7fc00000, 0x3800001},
5495{0x3800000, 0xff800001, 0x4f3495cb, 0x7fc00000, 0x3800001},
5496{0x3800000, 0xff800001, 0xe73a5134, 0x7fc00000, 0x3800001},
5497{0x3800000, 0xff800001, 0x7c994e9e, 0x7fc00000, 0x3800001},
5498{0x3800000, 0xff800001, 0x6164bd6c, 0x7fc00000, 0x3800001},
5499{0x3800000, 0xff800001, 0x9503366, 0x7fc00000, 0x3800001},
5500{0x3800000, 0xff800001, 0xbf5a97c9, 0x7fc00000, 0x3800001},
5501{0x3800000, 0xff800001, 0xe6ff1a14, 0x7fc00000, 0x3800001},
5502{0x3800000, 0xff800001, 0x77f31e2f, 0x7fc00000, 0x3800001},
5503{0x3800000, 0xff800001, 0xaab4d7d8, 0x7fc00000, 0x3800001},
5504{0x3800000, 0xff800001, 0x966320b, 0x7fc00000, 0x3800001},
5505{0x3800000, 0xff800001, 0xb26bddee, 0x7fc00000, 0x3800001},
5506{0x3800000, 0xff800001, 0xb5c8e5d3, 0x7fc00000, 0x3800001},
5507{0x3800000, 0xff800001, 0x317285d3, 0x7fc00000, 0x3800001},
5508{0x3800000, 0xff800001, 0x3c9623b1, 0x7fc00000, 0x3800001},
5509{0x3800000, 0xff800001, 0x51fd2c7c, 0x7fc00000, 0x3800001},
5510{0x3800000, 0xff800001, 0x7b906a6c, 0x7fc00000, 0x3800001},
5511{0x3800000, 0xff984a37, 0x0, 0x7fc00000, 0x3800001},
5512{0x3800000, 0xff984a37, 0x1, 0x7fc00000, 0x3800081},
5513{0x3800000, 0xff984a37, 0x76, 0x7fc00000, 0x3800081},
5514{0x3800000, 0xff984a37, 0x2b94, 0x7fc00000, 0x3800081},
5515{0x3800000, 0xff984a37, 0x636d24, 0x7fc00000, 0x3800081},
5516{0x3800000, 0xff984a37, 0x7fffff, 0x7fc00000, 0x3800081},
5517{0x3800000, 0xff984a37, 0x800000, 0x7fc00000, 0x3800001},
5518{0x3800000, 0xff984a37, 0x800002, 0x7fc00000, 0x3800001},
5519{0x3800000, 0xff984a37, 0x1398437, 0x7fc00000, 0x3800001},
5520{0x3800000, 0xff984a37, 0xba98d27, 0x7fc00000, 0x3800001},
5521{0x3800000, 0xff984a37, 0xba98d7a, 0x7fc00000, 0x3800001},
5522{0x3800000, 0xff984a37, 0x751f853a, 0x7fc00000, 0x3800001},
5523{0x3800000, 0xff984a37, 0x7f7ffff0, 0x7fc00000, 0x3800001},
5524{0x3800000, 0xff984a37, 0x7f7fffff, 0x7fc00000, 0x3800001},
5525{0x3800000, 0xff984a37, 0x7f800000, 0x7fc00000, 0x3800001},
5526{0x3800000, 0xff984a37, 0x7f800001, 0x7fc00000, 0x3800001},
5527{0x3800000, 0xff984a37, 0x7f984a37, 0x7fc00000, 0x3800001},
5528{0x3800000, 0xff984a37, 0x7fbfffff, 0x7fc00000, 0x3800001},
5529{0x3800000, 0xff984a37, 0x7fc00000, 0x7fc00000, 0x3800001},
5530{0x3800000, 0xff984a37, 0x7fd9ba98, 0x7fc00000, 0x3800001},
5531{0x3800000, 0xff984a37, 0x7fffffff, 0x7fc00000, 0x3800001},
5532{0x3800000, 0xff984a37, 0x80000000, 0x7fc00000, 0x3800001},
5533{0x3800000, 0xff984a37, 0x80000001, 0x7fc00000, 0x3800081},
5534{0x3800000, 0xff984a37, 0x80000076, 0x7fc00000, 0x3800081},
5535{0x3800000, 0xff984a37, 0x80002b94, 0x7fc00000, 0x3800081},
5536{0x3800000, 0xff984a37, 0x80636d24, 0x7fc00000, 0x3800081},
5537{0x3800000, 0xff984a37, 0x807fffff, 0x7fc00000, 0x3800081},
5538{0x3800000, 0xff984a37, 0x80800000, 0x7fc00000, 0x3800001},
5539{0x3800000, 0xff984a37, 0x80800002, 0x7fc00000, 0x3800001},
5540{0x3800000, 0xff984a37, 0x81398437, 0x7fc00000, 0x3800001},
5541{0x3800000, 0xff984a37, 0x8ba98d27, 0x7fc00000, 0x3800001},
5542{0x3800000, 0xff984a37, 0x8ba98d7a, 0x7fc00000, 0x3800001},
5543{0x3800000, 0xff984a37, 0xf51f853a, 0x7fc00000, 0x3800001},
5544{0x3800000, 0xff984a37, 0xff7ffff0, 0x7fc00000, 0x3800001},
5545{0x3800000, 0xff984a37, 0xff7fffff, 0x7fc00000, 0x3800001},
5546{0x3800000, 0xff984a37, 0xff800000, 0x7fc00000, 0x3800001},
5547{0x3800000, 0xff984a37, 0xff800001, 0x7fc00000, 0x3800001},
5548{0x3800000, 0xff984a37, 0xff984a37, 0x7fc00000, 0x3800001},
5549{0x3800000, 0xff984a37, 0xffbfffff, 0x7fc00000, 0x3800001},
5550{0x3800000, 0xff984a37, 0xffc00000, 0x7fc00000, 0x3800001},
5551{0x3800000, 0xff984a37, 0xffd9ba98, 0x7fc00000, 0x3800001},
5552{0x3800000, 0xff984a37, 0xffffffff, 0x7fc00000, 0x3800001},
5553{0x3800000, 0xff984a37, 0x4f3495cb, 0x7fc00000, 0x3800001},
5554{0x3800000, 0xff984a37, 0xe73a5134, 0x7fc00000, 0x3800001},
5555{0x3800000, 0xff984a37, 0x7c994e9e, 0x7fc00000, 0x3800001},
5556{0x3800000, 0xff984a37, 0x6164bd6c, 0x7fc00000, 0x3800001},
5557{0x3800000, 0xff984a37, 0x9503366, 0x7fc00000, 0x3800001},
5558{0x3800000, 0xff984a37, 0xbf5a97c9, 0x7fc00000, 0x3800001},
5559{0x3800000, 0xff984a37, 0xe6ff1a14, 0x7fc00000, 0x3800001},
5560{0x3800000, 0xff984a37, 0x77f31e2f, 0x7fc00000, 0x3800001},
5561{0x3800000, 0xff984a37, 0xaab4d7d8, 0x7fc00000, 0x3800001},
5562{0x3800000, 0xff984a37, 0x966320b, 0x7fc00000, 0x3800001},
5563{0x3800000, 0xff984a37, 0xb26bddee, 0x7fc00000, 0x3800001},
5564{0x3800000, 0xff984a37, 0xb5c8e5d3, 0x7fc00000, 0x3800001},
5565{0x3800000, 0xff984a37, 0x317285d3, 0x7fc00000, 0x3800001},
5566{0x3800000, 0xff984a37, 0x3c9623b1, 0x7fc00000, 0x3800001},
5567{0x3800000, 0xff984a37, 0x51fd2c7c, 0x7fc00000, 0x3800001},
5568{0x3800000, 0xff984a37, 0x7b906a6c, 0x7fc00000, 0x3800001},
5569{0x3800000, 0xffbfffff, 0x0, 0x7fc00000, 0x3800001},
5570{0x3800000, 0xffbfffff, 0x1, 0x7fc00000, 0x3800081},
5571{0x3800000, 0xffbfffff, 0x76, 0x7fc00000, 0x3800081},
5572{0x3800000, 0xffbfffff, 0x2b94, 0x7fc00000, 0x3800081},
5573{0x3800000, 0xffbfffff, 0x636d24, 0x7fc00000, 0x3800081},
5574{0x3800000, 0xffbfffff, 0x7fffff, 0x7fc00000, 0x3800081},
5575{0x3800000, 0xffbfffff, 0x800000, 0x7fc00000, 0x3800001},
5576{0x3800000, 0xffbfffff, 0x800002, 0x7fc00000, 0x3800001},
5577{0x3800000, 0xffbfffff, 0x1398437, 0x7fc00000, 0x3800001},
5578{0x3800000, 0xffbfffff, 0xba98d27, 0x7fc00000, 0x3800001},
5579{0x3800000, 0xffbfffff, 0xba98d7a, 0x7fc00000, 0x3800001},
5580{0x3800000, 0xffbfffff, 0x751f853a, 0x7fc00000, 0x3800001},
5581{0x3800000, 0xffbfffff, 0x7f7ffff0, 0x7fc00000, 0x3800001},
5582{0x3800000, 0xffbfffff, 0x7f7fffff, 0x7fc00000, 0x3800001},
5583{0x3800000, 0xffbfffff, 0x7f800000, 0x7fc00000, 0x3800001},
5584{0x3800000, 0xffbfffff, 0x7f800001, 0x7fc00000, 0x3800001},
5585{0x3800000, 0xffbfffff, 0x7f984a37, 0x7fc00000, 0x3800001},
5586{0x3800000, 0xffbfffff, 0x7fbfffff, 0x7fc00000, 0x3800001},
5587{0x3800000, 0xffbfffff, 0x7fc00000, 0x7fc00000, 0x3800001},
5588{0x3800000, 0xffbfffff, 0x7fd9ba98, 0x7fc00000, 0x3800001},
5589{0x3800000, 0xffbfffff, 0x7fffffff, 0x7fc00000, 0x3800001},
5590{0x3800000, 0xffbfffff, 0x80000000, 0x7fc00000, 0x3800001},
5591{0x3800000, 0xffbfffff, 0x80000001, 0x7fc00000, 0x3800081},
5592{0x3800000, 0xffbfffff, 0x80000076, 0x7fc00000, 0x3800081},
5593{0x3800000, 0xffbfffff, 0x80002b94, 0x7fc00000, 0x3800081},
5594{0x3800000, 0xffbfffff, 0x80636d24, 0x7fc00000, 0x3800081},
5595{0x3800000, 0xffbfffff, 0x807fffff, 0x7fc00000, 0x3800081},
5596{0x3800000, 0xffbfffff, 0x80800000, 0x7fc00000, 0x3800001},
5597{0x3800000, 0xffbfffff, 0x80800002, 0x7fc00000, 0x3800001},
5598{0x3800000, 0xffbfffff, 0x81398437, 0x7fc00000, 0x3800001},
5599{0x3800000, 0xffbfffff, 0x8ba98d27, 0x7fc00000, 0x3800001},
5600{0x3800000, 0xffbfffff, 0x8ba98d7a, 0x7fc00000, 0x3800001},
5601{0x3800000, 0xffbfffff, 0xf51f853a, 0x7fc00000, 0x3800001},
5602{0x3800000, 0xffbfffff, 0xff7ffff0, 0x7fc00000, 0x3800001},
5603{0x3800000, 0xffbfffff, 0xff7fffff, 0x7fc00000, 0x3800001},
5604{0x3800000, 0xffbfffff, 0xff800000, 0x7fc00000, 0x3800001},
5605{0x3800000, 0xffbfffff, 0xff800001, 0x7fc00000, 0x3800001},
5606{0x3800000, 0xffbfffff, 0xff984a37, 0x7fc00000, 0x3800001},
5607{0x3800000, 0xffbfffff, 0xffbfffff, 0x7fc00000, 0x3800001},
5608{0x3800000, 0xffbfffff, 0xffc00000, 0x7fc00000, 0x3800001},
5609{0x3800000, 0xffbfffff, 0xffd9ba98, 0x7fc00000, 0x3800001},
5610{0x3800000, 0xffbfffff, 0xffffffff, 0x7fc00000, 0x3800001},
5611{0x3800000, 0xffbfffff, 0x4f3495cb, 0x7fc00000, 0x3800001},
5612{0x3800000, 0xffbfffff, 0xe73a5134, 0x7fc00000, 0x3800001},
5613{0x3800000, 0xffbfffff, 0x7c994e9e, 0x7fc00000, 0x3800001},
5614{0x3800000, 0xffbfffff, 0x6164bd6c, 0x7fc00000, 0x3800001},
5615{0x3800000, 0xffbfffff, 0x9503366, 0x7fc00000, 0x3800001},
5616{0x3800000, 0xffbfffff, 0xbf5a97c9, 0x7fc00000, 0x3800001},
5617{0x3800000, 0xffbfffff, 0xe6ff1a14, 0x7fc00000, 0x3800001},
5618{0x3800000, 0xffbfffff, 0x77f31e2f, 0x7fc00000, 0x3800001},
5619{0x3800000, 0xffbfffff, 0xaab4d7d8, 0x7fc00000, 0x3800001},
5620{0x3800000, 0xffbfffff, 0x966320b, 0x7fc00000, 0x3800001},
5621{0x3800000, 0xffbfffff, 0xb26bddee, 0x7fc00000, 0x3800001},
5622{0x3800000, 0xffbfffff, 0xb5c8e5d3, 0x7fc00000, 0x3800001},
5623{0x3800000, 0xffbfffff, 0x317285d3, 0x7fc00000, 0x3800001},
5624{0x3800000, 0xffbfffff, 0x3c9623b1, 0x7fc00000, 0x3800001},
5625{0x3800000, 0xffbfffff, 0x51fd2c7c, 0x7fc00000, 0x3800001},
5626{0x3800000, 0xffbfffff, 0x7b906a6c, 0x7fc00000, 0x3800001},
5627{0x3800000, 0xffc00000, 0x0, 0x7fc00000, 0x3800000},
5628{0x3800000, 0xffc00000, 0x1, 0x7fc00000, 0x3800080},
5629{0x3800000, 0xffc00000, 0x76, 0x7fc00000, 0x3800080},
5630{0x3800000, 0xffc00000, 0x2b94, 0x7fc00000, 0x3800080},
5631{0x3800000, 0xffc00000, 0x636d24, 0x7fc00000, 0x3800080},
5632{0x3800000, 0xffc00000, 0x7fffff, 0x7fc00000, 0x3800080},
5633{0x3800000, 0xffc00000, 0x800000, 0x7fc00000, 0x3800000},
5634{0x3800000, 0xffc00000, 0x800002, 0x7fc00000, 0x3800000},
5635{0x3800000, 0xffc00000, 0x1398437, 0x7fc00000, 0x3800000},
5636{0x3800000, 0xffc00000, 0xba98d27, 0x7fc00000, 0x3800000},
5637{0x3800000, 0xffc00000, 0xba98d7a, 0x7fc00000, 0x3800000},
5638{0x3800000, 0xffc00000, 0x751f853a, 0x7fc00000, 0x3800000},
5639{0x3800000, 0xffc00000, 0x7f7ffff0, 0x7fc00000, 0x3800000},
5640{0x3800000, 0xffc00000, 0x7f7fffff, 0x7fc00000, 0x3800000},
5641{0x3800000, 0xffc00000, 0x7f800000, 0x7fc00000, 0x3800000},
5642{0x3800000, 0xffc00000, 0x7f800001, 0x7fc00000, 0x3800001},
5643{0x3800000, 0xffc00000, 0x7f984a37, 0x7fc00000, 0x3800001},
5644{0x3800000, 0xffc00000, 0x7fbfffff, 0x7fc00000, 0x3800001},
5645{0x3800000, 0xffc00000, 0x7fc00000, 0x7fc00000, 0x3800000},
5646{0x3800000, 0xffc00000, 0x7fd9ba98, 0x7fc00000, 0x3800000},
5647{0x3800000, 0xffc00000, 0x7fffffff, 0x7fc00000, 0x3800000},
5648{0x3800000, 0xffc00000, 0x80000000, 0x7fc00000, 0x3800000},
5649{0x3800000, 0xffc00000, 0x80000001, 0x7fc00000, 0x3800080},
5650{0x3800000, 0xffc00000, 0x80000076, 0x7fc00000, 0x3800080},
5651{0x3800000, 0xffc00000, 0x80002b94, 0x7fc00000, 0x3800080},
5652{0x3800000, 0xffc00000, 0x80636d24, 0x7fc00000, 0x3800080},
5653{0x3800000, 0xffc00000, 0x807fffff, 0x7fc00000, 0x3800080},
5654{0x3800000, 0xffc00000, 0x80800000, 0x7fc00000, 0x3800000},
5655{0x3800000, 0xffc00000, 0x80800002, 0x7fc00000, 0x3800000},
5656{0x3800000, 0xffc00000, 0x81398437, 0x7fc00000, 0x3800000},
5657{0x3800000, 0xffc00000, 0x8ba98d27, 0x7fc00000, 0x3800000},
5658{0x3800000, 0xffc00000, 0x8ba98d7a, 0x7fc00000, 0x3800000},
5659{0x3800000, 0xffc00000, 0xf51f853a, 0x7fc00000, 0x3800000},
5660{0x3800000, 0xffc00000, 0xff7ffff0, 0x7fc00000, 0x3800000},
5661{0x3800000, 0xffc00000, 0xff7fffff, 0x7fc00000, 0x3800000},
5662{0x3800000, 0xffc00000, 0xff800000, 0x7fc00000, 0x3800000},
5663{0x3800000, 0xffc00000, 0xff800001, 0x7fc00000, 0x3800001},
5664{0x3800000, 0xffc00000, 0xff984a37, 0x7fc00000, 0x3800001},
5665{0x3800000, 0xffc00000, 0xffbfffff, 0x7fc00000, 0x3800001},
5666{0x3800000, 0xffc00000, 0xffc00000, 0x7fc00000, 0x3800000},
5667{0x3800000, 0xffc00000, 0xffd9ba98, 0x7fc00000, 0x3800000},
5668{0x3800000, 0xffc00000, 0xffffffff, 0x7fc00000, 0x3800000},
5669{0x3800000, 0xffc00000, 0x4f3495cb, 0x7fc00000, 0x3800000},
5670{0x3800000, 0xffc00000, 0xe73a5134, 0x7fc00000, 0x3800000},
5671{0x3800000, 0xffc00000, 0x7c994e9e, 0x7fc00000, 0x3800000},
5672{0x3800000, 0xffc00000, 0x6164bd6c, 0x7fc00000, 0x3800000},
5673{0x3800000, 0xffc00000, 0x9503366, 0x7fc00000, 0x3800000},
5674{0x3800000, 0xffc00000, 0xbf5a97c9, 0x7fc00000, 0x3800000},
5675{0x3800000, 0xffc00000, 0xe6ff1a14, 0x7fc00000, 0x3800000},
5676{0x3800000, 0xffc00000, 0x77f31e2f, 0x7fc00000, 0x3800000},
5677{0x3800000, 0xffc00000, 0xaab4d7d8, 0x7fc00000, 0x3800000},
5678{0x3800000, 0xffc00000, 0x966320b, 0x7fc00000, 0x3800000},
5679{0x3800000, 0xffc00000, 0xb26bddee, 0x7fc00000, 0x3800000},
5680{0x3800000, 0xffc00000, 0xb5c8e5d3, 0x7fc00000, 0x3800000},
5681{0x3800000, 0xffc00000, 0x317285d3, 0x7fc00000, 0x3800000},
5682{0x3800000, 0xffc00000, 0x3c9623b1, 0x7fc00000, 0x3800000},
5683{0x3800000, 0xffc00000, 0x51fd2c7c, 0x7fc00000, 0x3800000},
5684{0x3800000, 0xffc00000, 0x7b906a6c, 0x7fc00000, 0x3800000},
5685{0x3800000, 0xffd9ba98, 0x0, 0x7fc00000, 0x3800000},
5686{0x3800000, 0xffd9ba98, 0x1, 0x7fc00000, 0x3800080},
5687{0x3800000, 0xffd9ba98, 0x76, 0x7fc00000, 0x3800080},
5688{0x3800000, 0xffd9ba98, 0x2b94, 0x7fc00000, 0x3800080},
5689{0x3800000, 0xffd9ba98, 0x636d24, 0x7fc00000, 0x3800080},
5690{0x3800000, 0xffd9ba98, 0x7fffff, 0x7fc00000, 0x3800080},
5691{0x3800000, 0xffd9ba98, 0x800000, 0x7fc00000, 0x3800000},
5692{0x3800000, 0xffd9ba98, 0x800002, 0x7fc00000, 0x3800000},
5693{0x3800000, 0xffd9ba98, 0x1398437, 0x7fc00000, 0x3800000},
5694{0x3800000, 0xffd9ba98, 0xba98d27, 0x7fc00000, 0x3800000},
5695{0x3800000, 0xffd9ba98, 0xba98d7a, 0x7fc00000, 0x3800000},
5696{0x3800000, 0xffd9ba98, 0x751f853a, 0x7fc00000, 0x3800000},
5697{0x3800000, 0xffd9ba98, 0x7f7ffff0, 0x7fc00000, 0x3800000},
5698{0x3800000, 0xffd9ba98, 0x7f7fffff, 0x7fc00000, 0x3800000},
5699{0x3800000, 0xffd9ba98, 0x7f800000, 0x7fc00000, 0x3800000},
5700{0x3800000, 0xffd9ba98, 0x7f800001, 0x7fc00000, 0x3800001},
5701{0x3800000, 0xffd9ba98, 0x7f984a37, 0x7fc00000, 0x3800001},
5702{0x3800000, 0xffd9ba98, 0x7fbfffff, 0x7fc00000, 0x3800001},
5703{0x3800000, 0xffd9ba98, 0x7fc00000, 0x7fc00000, 0x3800000},
5704{0x3800000, 0xffd9ba98, 0x7fd9ba98, 0x7fc00000, 0x3800000},
5705{0x3800000, 0xffd9ba98, 0x7fffffff, 0x7fc00000, 0x3800000},
5706{0x3800000, 0xffd9ba98, 0x80000000, 0x7fc00000, 0x3800000},
5707{0x3800000, 0xffd9ba98, 0x80000001, 0x7fc00000, 0x3800080},
5708{0x3800000, 0xffd9ba98, 0x80000076, 0x7fc00000, 0x3800080},
5709{0x3800000, 0xffd9ba98, 0x80002b94, 0x7fc00000, 0x3800080},
5710{0x3800000, 0xffd9ba98, 0x80636d24, 0x7fc00000, 0x3800080},
5711{0x3800000, 0xffd9ba98, 0x807fffff, 0x7fc00000, 0x3800080},
5712{0x3800000, 0xffd9ba98, 0x80800000, 0x7fc00000, 0x3800000},
5713{0x3800000, 0xffd9ba98, 0x80800002, 0x7fc00000, 0x3800000},
5714{0x3800000, 0xffd9ba98, 0x81398437, 0x7fc00000, 0x3800000},
5715{0x3800000, 0xffd9ba98, 0x8ba98d27, 0x7fc00000, 0x3800000},
5716{0x3800000, 0xffd9ba98, 0x8ba98d7a, 0x7fc00000, 0x3800000},
5717{0x3800000, 0xffd9ba98, 0xf51f853a, 0x7fc00000, 0x3800000},
5718{0x3800000, 0xffd9ba98, 0xff7ffff0, 0x7fc00000, 0x3800000},
5719{0x3800000, 0xffd9ba98, 0xff7fffff, 0x7fc00000, 0x3800000},
5720{0x3800000, 0xffd9ba98, 0xff800000, 0x7fc00000, 0x3800000},
5721{0x3800000, 0xffd9ba98, 0xff800001, 0x7fc00000, 0x3800001},
5722{0x3800000, 0xffd9ba98, 0xff984a37, 0x7fc00000, 0x3800001},
5723{0x3800000, 0xffd9ba98, 0xffbfffff, 0x7fc00000, 0x3800001},
5724{0x3800000, 0xffd9ba98, 0xffc00000, 0x7fc00000, 0x3800000},
5725{0x3800000, 0xffd9ba98, 0xffd9ba98, 0x7fc00000, 0x3800000},
5726{0x3800000, 0xffd9ba98, 0xffffffff, 0x7fc00000, 0x3800000},
5727{0x3800000, 0xffd9ba98, 0x4f3495cb, 0x7fc00000, 0x3800000},
5728{0x3800000, 0xffd9ba98, 0xe73a5134, 0x7fc00000, 0x3800000},
5729{0x3800000, 0xffd9ba98, 0x7c994e9e, 0x7fc00000, 0x3800000},
5730{0x3800000, 0xffd9ba98, 0x6164bd6c, 0x7fc00000, 0x3800000},
5731{0x3800000, 0xffd9ba98, 0x9503366, 0x7fc00000, 0x3800000},
5732{0x3800000, 0xffd9ba98, 0xbf5a97c9, 0x7fc00000, 0x3800000},
5733{0x3800000, 0xffd9ba98, 0xe6ff1a14, 0x7fc00000, 0x3800000},
5734{0x3800000, 0xffd9ba98, 0x77f31e2f, 0x7fc00000, 0x3800000},
5735{0x3800000, 0xffd9ba98, 0xaab4d7d8, 0x7fc00000, 0x3800000},
5736{0x3800000, 0xffd9ba98, 0x966320b, 0x7fc00000, 0x3800000},
5737{0x3800000, 0xffd9ba98, 0xb26bddee, 0x7fc00000, 0x3800000},
5738{0x3800000, 0xffd9ba98, 0xb5c8e5d3, 0x7fc00000, 0x3800000},
5739{0x3800000, 0xffd9ba98, 0x317285d3, 0x7fc00000, 0x3800000},
5740{0x3800000, 0xffd9ba98, 0x3c9623b1, 0x7fc00000, 0x3800000},
5741{0x3800000, 0xffd9ba98, 0x51fd2c7c, 0x7fc00000, 0x3800000},
5742{0x3800000, 0xffd9ba98, 0x7b906a6c, 0x7fc00000, 0x3800000},
5743{0x3800000, 0xffffffff, 0x0, 0x7fc00000, 0x3800000},
5744{0x3800000, 0xffffffff, 0x1, 0x7fc00000, 0x3800080},
5745{0x3800000, 0xffffffff, 0x76, 0x7fc00000, 0x3800080},
5746{0x3800000, 0xffffffff, 0x2b94, 0x7fc00000, 0x3800080},
5747{0x3800000, 0xffffffff, 0x636d24, 0x7fc00000, 0x3800080},
5748{0x3800000, 0xffffffff, 0x7fffff, 0x7fc00000, 0x3800080},
5749{0x3800000, 0xffffffff, 0x800000, 0x7fc00000, 0x3800000},
5750{0x3800000, 0xffffffff, 0x800002, 0x7fc00000, 0x3800000},
5751{0x3800000, 0xffffffff, 0x1398437, 0x7fc00000, 0x3800000},
5752{0x3800000, 0xffffffff, 0xba98d27, 0x7fc00000, 0x3800000},
5753{0x3800000, 0xffffffff, 0xba98d7a, 0x7fc00000, 0x3800000},
5754{0x3800000, 0xffffffff, 0x751f853a, 0x7fc00000, 0x3800000},
5755{0x3800000, 0xffffffff, 0x7f7ffff0, 0x7fc00000, 0x3800000},
5756{0x3800000, 0xffffffff, 0x7f7fffff, 0x7fc00000, 0x3800000},
5757{0x3800000, 0xffffffff, 0x7f800000, 0x7fc00000, 0x3800000},
5758{0x3800000, 0xffffffff, 0x7f800001, 0x7fc00000, 0x3800001},
5759{0x3800000, 0xffffffff, 0x7f984a37, 0x7fc00000, 0x3800001},
5760{0x3800000, 0xffffffff, 0x7fbfffff, 0x7fc00000, 0x3800001},
5761{0x3800000, 0xffffffff, 0x7fc00000, 0x7fc00000, 0x3800000},
5762{0x3800000, 0xffffffff, 0x7fd9ba98, 0x7fc00000, 0x3800000},
5763{0x3800000, 0xffffffff, 0x7fffffff, 0x7fc00000, 0x3800000},
5764{0x3800000, 0xffffffff, 0x80000000, 0x7fc00000, 0x3800000},
5765{0x3800000, 0xffffffff, 0x80000001, 0x7fc00000, 0x3800080},
5766{0x3800000, 0xffffffff, 0x80000076, 0x7fc00000, 0x3800080},
5767{0x3800000, 0xffffffff, 0x80002b94, 0x7fc00000, 0x3800080},
5768{0x3800000, 0xffffffff, 0x80636d24, 0x7fc00000, 0x3800080},
5769{0x3800000, 0xffffffff, 0x807fffff, 0x7fc00000, 0x3800080},
5770{0x3800000, 0xffffffff, 0x80800000, 0x7fc00000, 0x3800000},
5771{0x3800000, 0xffffffff, 0x80800002, 0x7fc00000, 0x3800000},
5772{0x3800000, 0xffffffff, 0x81398437, 0x7fc00000, 0x3800000},
5773{0x3800000, 0xffffffff, 0x8ba98d27, 0x7fc00000, 0x3800000},
5774{0x3800000, 0xffffffff, 0x8ba98d7a, 0x7fc00000, 0x3800000},
5775{0x3800000, 0xffffffff, 0xf51f853a, 0x7fc00000, 0x3800000},
5776{0x3800000, 0xffffffff, 0xff7ffff0, 0x7fc00000, 0x3800000},
5777{0x3800000, 0xffffffff, 0xff7fffff, 0x7fc00000, 0x3800000},
5778{0x3800000, 0xffffffff, 0xff800000, 0x7fc00000, 0x3800000},
5779{0x3800000, 0xffffffff, 0xff800001, 0x7fc00000, 0x3800001},
5780{0x3800000, 0xffffffff, 0xff984a37, 0x7fc00000, 0x3800001},
5781{0x3800000, 0xffffffff, 0xffbfffff, 0x7fc00000, 0x3800001},
5782{0x3800000, 0xffffffff, 0xffc00000, 0x7fc00000, 0x3800000},
5783{0x3800000, 0xffffffff, 0xffd9ba98, 0x7fc00000, 0x3800000},
5784{0x3800000, 0xffffffff, 0xffffffff, 0x7fc00000, 0x3800000},
5785{0x3800000, 0xffffffff, 0x4f3495cb, 0x7fc00000, 0x3800000},
5786{0x3800000, 0xffffffff, 0xe73a5134, 0x7fc00000, 0x3800000},
5787{0x3800000, 0xffffffff, 0x7c994e9e, 0x7fc00000, 0x3800000},
5788{0x3800000, 0xffffffff, 0x6164bd6c, 0x7fc00000, 0x3800000},
5789{0x3800000, 0xffffffff, 0x9503366, 0x7fc00000, 0x3800000},
5790{0x3800000, 0xffffffff, 0xbf5a97c9, 0x7fc00000, 0x3800000},
5791{0x3800000, 0xffffffff, 0xe6ff1a14, 0x7fc00000, 0x3800000},
5792{0x3800000, 0xffffffff, 0x77f31e2f, 0x7fc00000, 0x3800000},
5793{0x3800000, 0xffffffff, 0xaab4d7d8, 0x7fc00000, 0x3800000},
5794{0x3800000, 0xffffffff, 0x966320b, 0x7fc00000, 0x3800000},
5795{0x3800000, 0xffffffff, 0xb26bddee, 0x7fc00000, 0x3800000},
5796{0x3800000, 0xffffffff, 0xb5c8e5d3, 0x7fc00000, 0x3800000},
5797{0x3800000, 0xffffffff, 0x317285d3, 0x7fc00000, 0x3800000},
5798{0x3800000, 0xffffffff, 0x3c9623b1, 0x7fc00000, 0x3800000},
5799{0x3800000, 0xffffffff, 0x51fd2c7c, 0x7fc00000, 0x3800000},
5800{0x3800000, 0xffffffff, 0x7b906a6c, 0x7fc00000, 0x3800000},
5801{0x3800000, 0x4f3495cb, 0x0, 0x4f3495cb, 0x3800000},
5802{0x3800000, 0x4f3495cb, 0x1, 0x4f3495cb, 0x3800080},
5803{0x3800000, 0x4f3495cb, 0x76, 0x4f3495cb, 0x3800080},
5804{0x3800000, 0x4f3495cb, 0x2b94, 0x4f3495cb, 0x3800080},
5805{0x3800000, 0x4f3495cb, 0x636d24, 0x4f3495cb, 0x3800080},
5806{0x3800000, 0x4f3495cb, 0x7fffff, 0x4f3495cb, 0x3800080},
5807{0x3800000, 0x4f3495cb, 0x800000, 0x4f3495cb, 0x3800010},
5808{0x3800000, 0x4f3495cb, 0x800002, 0x4f3495cb, 0x3800010},
5809{0x3800000, 0x4f3495cb, 0x1398437, 0x4f3495cb, 0x3800010},
5810{0x3800000, 0x4f3495cb, 0xba98d27, 0x4f3495cb, 0x3800010},
5811{0x3800000, 0x4f3495cb, 0xba98d7a, 0x4f3495cb, 0x3800010},
5812{0x3800000, 0x4f3495cb, 0x751f853a, 0x751f853a, 0x3800010},
5813{0x3800000, 0x4f3495cb, 0x7f7ffff0, 0x7f7ffff0, 0x3800010},
5814{0x3800000, 0x4f3495cb, 0x7f7fffff, 0x7f7fffff, 0x3800010},
5815{0x3800000, 0x4f3495cb, 0x7f800000, 0x7f800000, 0x3800000},
5816{0x3800000, 0x4f3495cb, 0x7f800001, 0x7fc00000, 0x3800001},
5817{0x3800000, 0x4f3495cb, 0x7f984a37, 0x7fc00000, 0x3800001},
5818{0x3800000, 0x4f3495cb, 0x7fbfffff, 0x7fc00000, 0x3800001},
5819{0x3800000, 0x4f3495cb, 0x7fc00000, 0x7fc00000, 0x3800000},
5820{0x3800000, 0x4f3495cb, 0x7fd9ba98, 0x7fc00000, 0x3800000},
5821{0x3800000, 0x4f3495cb, 0x7fffffff, 0x7fc00000, 0x3800000},
5822{0x3800000, 0x4f3495cb, 0x80000000, 0x4f3495cb, 0x3800000},
5823{0x3800000, 0x4f3495cb, 0x80000001, 0x4f3495cb, 0x3800080},
5824{0x3800000, 0x4f3495cb, 0x80000076, 0x4f3495cb, 0x3800080},
5825{0x3800000, 0x4f3495cb, 0x80002b94, 0x4f3495cb, 0x3800080},
5826{0x3800000, 0x4f3495cb, 0x80636d24, 0x4f3495cb, 0x3800080},
5827{0x3800000, 0x4f3495cb, 0x807fffff, 0x4f3495cb, 0x3800080},
5828{0x3800000, 0x4f3495cb, 0x80800000, 0x4f3495ca, 0x3800010},
5829{0x3800000, 0x4f3495cb, 0x80800002, 0x4f3495ca, 0x3800010},
5830{0x3800000, 0x4f3495cb, 0x81398437, 0x4f3495ca, 0x3800010},
5831{0x3800000, 0x4f3495cb, 0x8ba98d27, 0x4f3495ca, 0x3800010},
5832{0x3800000, 0x4f3495cb, 0x8ba98d7a, 0x4f3495ca, 0x3800010},
5833{0x3800000, 0x4f3495cb, 0xf51f853a, 0xf51f853a, 0x3800010},
5834{0x3800000, 0x4f3495cb, 0xff7ffff0, 0xff7ffff0, 0x3800010},
5835{0x3800000, 0x4f3495cb, 0xff7fffff, 0xff7fffff, 0x3800010},
5836{0x3800000, 0x4f3495cb, 0xff800000, 0xff800000, 0x3800000},
5837{0x3800000, 0x4f3495cb, 0xff800001, 0x7fc00000, 0x3800001},
5838{0x3800000, 0x4f3495cb, 0xff984a37, 0x7fc00000, 0x3800001},
5839{0x3800000, 0x4f3495cb, 0xffbfffff, 0x7fc00000, 0x3800001},
5840{0x3800000, 0x4f3495cb, 0xffc00000, 0x7fc00000, 0x3800000},
5841{0x3800000, 0x4f3495cb, 0xffd9ba98, 0x7fc00000, 0x3800000},
5842{0x3800000, 0x4f3495cb, 0xffffffff, 0x7fc00000, 0x3800000},
5843{0x3800000, 0x4f3495cb, 0x4f3495cb, 0x4fb495cb, 0x3800000},
5844{0x3800000, 0x4f3495cb, 0xe73a5134, 0xe73a5134, 0x3800010},
5845{0x3800000, 0x4f3495cb, 0x7c994e9e, 0x7c994e9e, 0x3800010},
5846{0x3800000, 0x4f3495cb, 0x6164bd6c, 0x6164bd6c, 0x3800010},
5847{0x3800000, 0x4f3495cb, 0x9503366, 0x4f3495cb, 0x3800010},
5848{0x3800000, 0x4f3495cb, 0xbf5a97c9, 0x4f3495ca, 0x3800010},
5849{0x3800000, 0x4f3495cb, 0xe6ff1a14, 0xe6ff1a14, 0x3800010},
5850{0x3800000, 0x4f3495cb, 0x77f31e2f, 0x77f31e2f, 0x3800010},
5851{0x3800000, 0x4f3495cb, 0xaab4d7d8, 0x4f3495ca, 0x3800010},
5852{0x3800000, 0x4f3495cb, 0x966320b, 0x4f3495cb, 0x3800010},
5853{0x3800000, 0x4f3495cb, 0xb26bddee, 0x4f3495ca, 0x3800010},
5854{0x3800000, 0x4f3495cb, 0xb5c8e5d3, 0x4f3495ca, 0x3800010},
5855{0x3800000, 0x4f3495cb, 0x317285d3, 0x4f3495cb, 0x3800010},
5856{0x3800000, 0x4f3495cb, 0x3c9623b1, 0x4f3495cb, 0x3800010},
5857{0x3800000, 0x4f3495cb, 0x51fd2c7c, 0x52016895, 0x3800010},
5858{0x3800000, 0x4f3495cb, 0x7b906a6c, 0x7b906a6c, 0x3800010},
5859{0x3800000, 0xe73a5134, 0x0, 0xe73a5134, 0x3800000},
5860{0x3800000, 0xe73a5134, 0x1, 0xe73a5134, 0x3800080},
5861{0x3800000, 0xe73a5134, 0x76, 0xe73a5134, 0x3800080},
5862{0x3800000, 0xe73a5134, 0x2b94, 0xe73a5134, 0x3800080},
5863{0x3800000, 0xe73a5134, 0x636d24, 0xe73a5134, 0x3800080},
5864{0x3800000, 0xe73a5134, 0x7fffff, 0xe73a5134, 0x3800080},
5865{0x3800000, 0xe73a5134, 0x800000, 0xe73a5134, 0x3800010},
5866{0x3800000, 0xe73a5134, 0x800002, 0xe73a5134, 0x3800010},
5867{0x3800000, 0xe73a5134, 0x1398437, 0xe73a5134, 0x3800010},
5868{0x3800000, 0xe73a5134, 0xba98d27, 0xe73a5134, 0x3800010},
5869{0x3800000, 0xe73a5134, 0xba98d7a, 0xe73a5134, 0x3800010},
5870{0x3800000, 0xe73a5134, 0x751f853a, 0x751f8539, 0x3800010},
5871{0x3800000, 0xe73a5134, 0x7f7ffff0, 0x7f7fffef, 0x3800010},
5872{0x3800000, 0xe73a5134, 0x7f7fffff, 0x7f7ffffe, 0x3800010},
5873{0x3800000, 0xe73a5134, 0x7f800000, 0x7f800000, 0x3800000},
5874{0x3800000, 0xe73a5134, 0x7f800001, 0x7fc00000, 0x3800001},
5875{0x3800000, 0xe73a5134, 0x7f984a37, 0x7fc00000, 0x3800001},
5876{0x3800000, 0xe73a5134, 0x7fbfffff, 0x7fc00000, 0x3800001},
5877{0x3800000, 0xe73a5134, 0x7fc00000, 0x7fc00000, 0x3800000},
5878{0x3800000, 0xe73a5134, 0x7fd9ba98, 0x7fc00000, 0x3800000},
5879{0x3800000, 0xe73a5134, 0x7fffffff, 0x7fc00000, 0x3800000},
5880{0x3800000, 0xe73a5134, 0x80000000, 0xe73a5134, 0x3800000},
5881{0x3800000, 0xe73a5134, 0x80000001, 0xe73a5134, 0x3800080},
5882{0x3800000, 0xe73a5134, 0x80000076, 0xe73a5134, 0x3800080},
5883{0x3800000, 0xe73a5134, 0x80002b94, 0xe73a5134, 0x3800080},
5884{0x3800000, 0xe73a5134, 0x80636d24, 0xe73a5134, 0x3800080},
5885{0x3800000, 0xe73a5134, 0x807fffff, 0xe73a5134, 0x3800080},
5886{0x3800000, 0xe73a5134, 0x80800000, 0xe73a5135, 0x3800010},
5887{0x3800000, 0xe73a5134, 0x80800002, 0xe73a5135, 0x3800010},
5888{0x3800000, 0xe73a5134, 0x81398437, 0xe73a5135, 0x3800010},
5889{0x3800000, 0xe73a5134, 0x8ba98d27, 0xe73a5135, 0x3800010},
5890{0x3800000, 0xe73a5134, 0x8ba98d7a, 0xe73a5135, 0x3800010},
5891{0x3800000, 0xe73a5134, 0xf51f853a, 0xf51f853b, 0x3800010},
5892{0x3800000, 0xe73a5134, 0xff7ffff0, 0xff7ffff1, 0x3800010},
5893{0x3800000, 0xe73a5134, 0xff7fffff, 0xff800000, 0x3800014},
5894{0x3800000, 0xe73a5134, 0xff800000, 0xff800000, 0x3800000},
5895{0x3800000, 0xe73a5134, 0xff800001, 0x7fc00000, 0x3800001},
5896{0x3800000, 0xe73a5134, 0xff984a37, 0x7fc00000, 0x3800001},
5897{0x3800000, 0xe73a5134, 0xffbfffff, 0x7fc00000, 0x3800001},
5898{0x3800000, 0xe73a5134, 0xffc00000, 0x7fc00000, 0x3800000},
5899{0x3800000, 0xe73a5134, 0xffd9ba98, 0x7fc00000, 0x3800000},
5900{0x3800000, 0xe73a5134, 0xffffffff, 0x7fc00000, 0x3800000},
5901{0x3800000, 0xe73a5134, 0x4f3495cb, 0xe73a5134, 0x3800010},
5902{0x3800000, 0xe73a5134, 0xe73a5134, 0xe7ba5134, 0x3800000},
5903{0x3800000, 0xe73a5134, 0x7c994e9e, 0x7c994e9d, 0x3800010},
5904{0x3800000, 0xe73a5134, 0x6164bd6c, 0xe73a42e9, 0x3800010},
5905{0x3800000, 0xe73a5134, 0x9503366, 0xe73a5134, 0x3800010},
5906{0x3800000, 0xe73a5134, 0xbf5a97c9, 0xe73a5135, 0x3800010},
5907{0x3800000, 0xe73a5134, 0xe6ff1a14, 0xe79cef1f, 0x3800000},
5908{0x3800000, 0xe73a5134, 0x77f31e2f, 0x77f31e2e, 0x3800010},
5909{0x3800000, 0xe73a5134, 0xaab4d7d8, 0xe73a5135, 0x3800010},
5910{0x3800000, 0xe73a5134, 0x966320b, 0xe73a5134, 0x3800010},
5911{0x3800000, 0xe73a5134, 0xb26bddee, 0xe73a5135, 0x3800010},
5912{0x3800000, 0xe73a5134, 0xb5c8e5d3, 0xe73a5135, 0x3800010},
5913{0x3800000, 0xe73a5134, 0x317285d3, 0xe73a5134, 0x3800010},
5914{0x3800000, 0xe73a5134, 0x3c9623b1, 0xe73a5134, 0x3800010},
5915{0x3800000, 0xe73a5134, 0x51fd2c7c, 0xe73a5134, 0x3800010},
5916{0x3800000, 0xe73a5134, 0x7b906a6c, 0x7b906a6b, 0x3800010},
5917{0x3800000, 0x7c994e9e, 0x0, 0x7c994e9e, 0x3800000},
5918{0x3800000, 0x7c994e9e, 0x1, 0x7c994e9e, 0x3800080},
5919{0x3800000, 0x7c994e9e, 0x76, 0x7c994e9e, 0x3800080},
5920{0x3800000, 0x7c994e9e, 0x2b94, 0x7c994e9e, 0x3800080},
5921{0x3800000, 0x7c994e9e, 0x636d24, 0x7c994e9e, 0x3800080},
5922{0x3800000, 0x7c994e9e, 0x7fffff, 0x7c994e9e, 0x3800080},
5923{0x3800000, 0x7c994e9e, 0x800000, 0x7c994e9e, 0x3800010},
5924{0x3800000, 0x7c994e9e, 0x800002, 0x7c994e9e, 0x3800010},
5925{0x3800000, 0x7c994e9e, 0x1398437, 0x7c994e9e, 0x3800010},
5926{0x3800000, 0x7c994e9e, 0xba98d27, 0x7c994e9e, 0x3800010},
5927{0x3800000, 0x7c994e9e, 0xba98d7a, 0x7c994e9e, 0x3800010},
5928{0x3800000, 0x7c994e9e, 0x751f853a, 0x7c994fdd, 0x3800010},
5929{0x3800000, 0x7c994e9e, 0x7f7ffff0, 0x7f7fffff, 0x3800014},
5930{0x3800000, 0x7c994e9e, 0x7f7fffff, 0x7f7fffff, 0x3800014},
5931{0x3800000, 0x7c994e9e, 0x7f800000, 0x7f800000, 0x3800000},
5932{0x3800000, 0x7c994e9e, 0x7f800001, 0x7fc00000, 0x3800001},
5933{0x3800000, 0x7c994e9e, 0x7f984a37, 0x7fc00000, 0x3800001},
5934{0x3800000, 0x7c994e9e, 0x7fbfffff, 0x7fc00000, 0x3800001},
5935{0x3800000, 0x7c994e9e, 0x7fc00000, 0x7fc00000, 0x3800000},
5936{0x3800000, 0x7c994e9e, 0x7fd9ba98, 0x7fc00000, 0x3800000},
5937{0x3800000, 0x7c994e9e, 0x7fffffff, 0x7fc00000, 0x3800000},
5938{0x3800000, 0x7c994e9e, 0x80000000, 0x7c994e9e, 0x3800000},
5939{0x3800000, 0x7c994e9e, 0x80000001, 0x7c994e9e, 0x3800080},
5940{0x3800000, 0x7c994e9e, 0x80000076, 0x7c994e9e, 0x3800080},
5941{0x3800000, 0x7c994e9e, 0x80002b94, 0x7c994e9e, 0x3800080},
5942{0x3800000, 0x7c994e9e, 0x80636d24, 0x7c994e9e, 0x3800080},
5943{0x3800000, 0x7c994e9e, 0x807fffff, 0x7c994e9e, 0x3800080},
5944{0x3800000, 0x7c994e9e, 0x80800000, 0x7c994e9d, 0x3800010},
5945{0x3800000, 0x7c994e9e, 0x80800002, 0x7c994e9d, 0x3800010},
5946{0x3800000, 0x7c994e9e, 0x81398437, 0x7c994e9d, 0x3800010},
5947{0x3800000, 0x7c994e9e, 0x8ba98d27, 0x7c994e9d, 0x3800010},
5948{0x3800000, 0x7c994e9e, 0x8ba98d7a, 0x7c994e9d, 0x3800010},
5949{0x3800000, 0x7c994e9e, 0xf51f853a, 0x7c994d5e, 0x3800010},
5950{0x3800000, 0x7c994e9e, 0xff7ffff0, 0xff7b357c, 0x3800010},
5951{0x3800000, 0x7c994e9e, 0xff7fffff, 0xff7b358b, 0x3800010},
5952{0x3800000, 0x7c994e9e, 0xff800000, 0xff800000, 0x3800000},
5953{0x3800000, 0x7c994e9e, 0xff800001, 0x7fc00000, 0x3800001},
5954{0x3800000, 0x7c994e9e, 0xff984a37, 0x7fc00000, 0x3800001},
5955{0x3800000, 0x7c994e9e, 0xffbfffff, 0x7fc00000, 0x3800001},
5956{0x3800000, 0x7c994e9e, 0xffc00000, 0x7fc00000, 0x3800000},
5957{0x3800000, 0x7c994e9e, 0xffd9ba98, 0x7fc00000, 0x3800000},
5958{0x3800000, 0x7c994e9e, 0xffffffff, 0x7fc00000, 0x3800000},
5959{0x3800000, 0x7c994e9e, 0x4f3495cb, 0x7c994e9e, 0x3800010},
5960{0x3800000, 0x7c994e9e, 0xe73a5134, 0x7c994e9d, 0x3800010},
5961{0x3800000, 0x7c994e9e, 0x7c994e9e, 0x7d194e9e, 0x3800000},
5962{0x3800000, 0x7c994e9e, 0x6164bd6c, 0x7c994e9e, 0x3800010},
5963{0x3800000, 0x7c994e9e, 0x9503366, 0x7c994e9e, 0x3800010},
5964{0x3800000, 0x7c994e9e, 0xbf5a97c9, 0x7c994e9d, 0x3800010},
5965{0x3800000, 0x7c994e9e, 0xe6ff1a14, 0x7c994e9d, 0x3800010},
5966{0x3800000, 0x7c994e9e, 0x77f31e2f, 0x7c998b65, 0x3800010},
5967{0x3800000, 0x7c994e9e, 0xaab4d7d8, 0x7c994e9d, 0x3800010},
5968{0x3800000, 0x7c994e9e, 0x966320b, 0x7c994e9e, 0x3800010},
5969{0x3800000, 0x7c994e9e, 0xb26bddee, 0x7c994e9d, 0x3800010},
5970{0x3800000, 0x7c994e9e, 0xb5c8e5d3, 0x7c994e9d, 0x3800010},
5971{0x3800000, 0x7c994e9e, 0x317285d3, 0x7c994e9e, 0x3800010},
5972{0x3800000, 0x7c994e9e, 0x3c9623b1, 0x7c994e9e, 0x3800010},
5973{0x3800000, 0x7c994e9e, 0x51fd2c7c, 0x7c994e9e, 0x3800010},
5974{0x3800000, 0x7c994e9e, 0x7b906a6c, 0x7cbd6939, 0x3800000},
5975{0x3800000, 0x6164bd6c, 0x0, 0x6164bd6c, 0x3800000},
5976{0x3800000, 0x6164bd6c, 0x1, 0x6164bd6c, 0x3800080},
5977{0x3800000, 0x6164bd6c, 0x76, 0x6164bd6c, 0x3800080},
5978{0x3800000, 0x6164bd6c, 0x2b94, 0x6164bd6c, 0x3800080},
5979{0x3800000, 0x6164bd6c, 0x636d24, 0x6164bd6c, 0x3800080},
5980{0x3800000, 0x6164bd6c, 0x7fffff, 0x6164bd6c, 0x3800080},
5981{0x3800000, 0x6164bd6c, 0x800000, 0x6164bd6c, 0x3800010},
5982{0x3800000, 0x6164bd6c, 0x800002, 0x6164bd6c, 0x3800010},
5983{0x3800000, 0x6164bd6c, 0x1398437, 0x6164bd6c, 0x3800010},
5984{0x3800000, 0x6164bd6c, 0xba98d27, 0x6164bd6c, 0x3800010},
5985{0x3800000, 0x6164bd6c, 0xba98d7a, 0x6164bd6c, 0x3800010},
5986{0x3800000, 0x6164bd6c, 0x751f853a, 0x751f853a, 0x3800010},
5987{0x3800000, 0x6164bd6c, 0x7f7ffff0, 0x7f7ffff0, 0x3800010},
5988{0x3800000, 0x6164bd6c, 0x7f7fffff, 0x7f7fffff, 0x3800010},
5989{0x3800000, 0x6164bd6c, 0x7f800000, 0x7f800000, 0x3800000},
5990{0x3800000, 0x6164bd6c, 0x7f800001, 0x7fc00000, 0x3800001},
5991{0x3800000, 0x6164bd6c, 0x7f984a37, 0x7fc00000, 0x3800001},
5992{0x3800000, 0x6164bd6c, 0x7fbfffff, 0x7fc00000, 0x3800001},
5993{0x3800000, 0x6164bd6c, 0x7fc00000, 0x7fc00000, 0x3800000},
5994{0x3800000, 0x6164bd6c, 0x7fd9ba98, 0x7fc00000, 0x3800000},
5995{0x3800000, 0x6164bd6c, 0x7fffffff, 0x7fc00000, 0x3800000},
5996{0x3800000, 0x6164bd6c, 0x80000000, 0x6164bd6c, 0x3800000},
5997{0x3800000, 0x6164bd6c, 0x80000001, 0x6164bd6c, 0x3800080},
5998{0x3800000, 0x6164bd6c, 0x80000076, 0x6164bd6c, 0x3800080},
5999{0x3800000, 0x6164bd6c, 0x80002b94, 0x6164bd6c, 0x3800080},
6000{0x3800000, 0x6164bd6c, 0x80636d24, 0x6164bd6c, 0x3800080},
6001{0x3800000, 0x6164bd6c, 0x807fffff, 0x6164bd6c, 0x3800080},
6002{0x3800000, 0x6164bd6c, 0x80800000, 0x6164bd6b, 0x3800010},
6003{0x3800000, 0x6164bd6c, 0x80800002, 0x6164bd6b, 0x3800010},
6004{0x3800000, 0x6164bd6c, 0x81398437, 0x6164bd6b, 0x3800010},
6005{0x3800000, 0x6164bd6c, 0x8ba98d27, 0x6164bd6b, 0x3800010},
6006{0x3800000, 0x6164bd6c, 0x8ba98d7a, 0x6164bd6b, 0x3800010},
6007{0x3800000, 0x6164bd6c, 0xf51f853a, 0xf51f853a, 0x3800010},
6008{0x3800000, 0x6164bd6c, 0xff7ffff0, 0xff7ffff0, 0x3800010},
6009{0x3800000, 0x6164bd6c, 0xff7fffff, 0xff7fffff, 0x3800010},
6010{0x3800000, 0x6164bd6c, 0xff800000, 0xff800000, 0x3800000},
6011{0x3800000, 0x6164bd6c, 0xff800001, 0x7fc00000, 0x3800001},
6012{0x3800000, 0x6164bd6c, 0xff984a37, 0x7fc00000, 0x3800001},
6013{0x3800000, 0x6164bd6c, 0xffbfffff, 0x7fc00000, 0x3800001},
6014{0x3800000, 0x6164bd6c, 0xffc00000, 0x7fc00000, 0x3800000},
6015{0x3800000, 0x6164bd6c, 0xffd9ba98, 0x7fc00000, 0x3800000},
6016{0x3800000, 0x6164bd6c, 0xffffffff, 0x7fc00000, 0x3800000},
6017{0x3800000, 0x6164bd6c, 0x4f3495cb, 0x6164bd6c, 0x3800010},
6018{0x3800000, 0x6164bd6c, 0xe73a5134, 0xe73a42e9, 0x3800010},
6019{0x3800000, 0x6164bd6c, 0x7c994e9e, 0x7c994e9e, 0x3800010},
6020{0x3800000, 0x6164bd6c, 0x6164bd6c, 0x61e4bd6c, 0x3800000},
6021{0x3800000, 0x6164bd6c, 0x9503366, 0x6164bd6c, 0x3800010},
6022{0x3800000, 0x6164bd6c, 0xbf5a97c9, 0x6164bd6b, 0x3800010},
6023{0x3800000, 0x6164bd6c, 0xe6ff1a14, 0xe6fefd7d, 0x3800010},
6024{0x3800000, 0x6164bd6c, 0x77f31e2f, 0x77f31e2f, 0x3800010},
6025{0x3800000, 0x6164bd6c, 0xaab4d7d8, 0x6164bd6b, 0x3800010},
6026{0x3800000, 0x6164bd6c, 0x966320b, 0x6164bd6c, 0x3800010},
6027{0x3800000, 0x6164bd6c, 0xb26bddee, 0x6164bd6b, 0x3800010},
6028{0x3800000, 0x6164bd6c, 0xb5c8e5d3, 0x6164bd6b, 0x3800010},
6029{0x3800000, 0x6164bd6c, 0x317285d3, 0x6164bd6c, 0x3800010},
6030{0x3800000, 0x6164bd6c, 0x3c9623b1, 0x6164bd6c, 0x3800010},
6031{0x3800000, 0x6164bd6c, 0x51fd2c7c, 0x6164bd6c, 0x3800010},
6032{0x3800000, 0x6164bd6c, 0x7b906a6c, 0x7b906a6c, 0x3800010},
6033{0x3800000, 0x9503366, 0x0, 0x9503366, 0x3800000},
6034{0x3800000, 0x9503366, 0x1, 0x9503366, 0x3800080},
6035{0x3800000, 0x9503366, 0x76, 0x9503366, 0x3800080},
6036{0x3800000, 0x9503366, 0x2b94, 0x9503366, 0x3800080},
6037{0x3800000, 0x9503366, 0x636d24, 0x9503366, 0x3800080},
6038{0x3800000, 0x9503366, 0x7fffff, 0x9503366, 0x3800080},
6039{0x3800000, 0x9503366, 0x800000, 0x95033a6, 0x3800000},
6040{0x3800000, 0x9503366, 0x800002, 0x95033a6, 0x3800010},
6041{0x3800000, 0x9503366, 0x1398437, 0x950341f, 0x3800010},
6042{0x3800000, 0x9503366, 0xba98d27, 0xbb00ec2, 0x3800010},
6043{0x3800000, 0x9503366, 0xba98d7a, 0xbb00f15, 0x3800010},
6044{0x3800000, 0x9503366, 0x751f853a, 0x751f853a, 0x3800010},
6045{0x3800000, 0x9503366, 0x7f7ffff0, 0x7f7ffff0, 0x3800010},
6046{0x3800000, 0x9503366, 0x7f7fffff, 0x7f7fffff, 0x3800010},
6047{0x3800000, 0x9503366, 0x7f800000, 0x7f800000, 0x3800000},
6048{0x3800000, 0x9503366, 0x7f800001, 0x7fc00000, 0x3800001},
6049{0x3800000, 0x9503366, 0x7f984a37, 0x7fc00000, 0x3800001},
6050{0x3800000, 0x9503366, 0x7fbfffff, 0x7fc00000, 0x3800001},
6051{0x3800000, 0x9503366, 0x7fc00000, 0x7fc00000, 0x3800000},
6052{0x3800000, 0x9503366, 0x7fd9ba98, 0x7fc00000, 0x3800000},
6053{0x3800000, 0x9503366, 0x7fffffff, 0x7fc00000, 0x3800000},
6054{0x3800000, 0x9503366, 0x80000000, 0x9503366, 0x3800000},
6055{0x3800000, 0x9503366, 0x80000001, 0x9503366, 0x3800080},
6056{0x3800000, 0x9503366, 0x80000076, 0x9503366, 0x3800080},
6057{0x3800000, 0x9503366, 0x80002b94, 0x9503366, 0x3800080},
6058{0x3800000, 0x9503366, 0x80636d24, 0x9503366, 0x3800080},
6059{0x3800000, 0x9503366, 0x807fffff, 0x9503366, 0x3800080},
6060{0x3800000, 0x9503366, 0x80800000, 0x9503326, 0x3800000},
6061{0x3800000, 0x9503366, 0x80800002, 0x9503325, 0x3800010},
6062{0x3800000, 0x9503366, 0x81398437, 0x95032ac, 0x3800010},
6063{0x3800000, 0x9503366, 0x8ba98d27, 0x8ba30b8c, 0x3800010},
6064{0x3800000, 0x9503366, 0x8ba98d7a, 0x8ba30bdf, 0x3800010},
6065{0x3800000, 0x9503366, 0xf51f853a, 0xf51f853a, 0x3800010},
6066{0x3800000, 0x9503366, 0xff7ffff0, 0xff7ffff0, 0x3800010},
6067{0x3800000, 0x9503366, 0xff7fffff, 0xff7fffff, 0x3800010},
6068{0x3800000, 0x9503366, 0xff800000, 0xff800000, 0x3800000},
6069{0x3800000, 0x9503366, 0xff800001, 0x7fc00000, 0x3800001},
6070{0x3800000, 0x9503366, 0xff984a37, 0x7fc00000, 0x3800001},
6071{0x3800000, 0x9503366, 0xffbfffff, 0x7fc00000, 0x3800001},
6072{0x3800000, 0x9503366, 0xffc00000, 0x7fc00000, 0x3800000},
6073{0x3800000, 0x9503366, 0xffd9ba98, 0x7fc00000, 0x3800000},
6074{0x3800000, 0x9503366, 0xffffffff, 0x7fc00000, 0x3800000},
6075{0x3800000, 0x9503366, 0x4f3495cb, 0x4f3495cb, 0x3800010},
6076{0x3800000, 0x9503366, 0xe73a5134, 0xe73a5134, 0x3800010},
6077{0x3800000, 0x9503366, 0x7c994e9e, 0x7c994e9e, 0x3800010},
6078{0x3800000, 0x9503366, 0x6164bd6c, 0x6164bd6c, 0x3800010},
6079{0x3800000, 0x9503366, 0x9503366, 0x9d03366, 0x3800000},
6080{0x3800000, 0x9503366, 0xbf5a97c9, 0xbf5a97c9, 0x3800010},
6081{0x3800000, 0x9503366, 0xe6ff1a14, 0xe6ff1a14, 0x3800010},
6082{0x3800000, 0x9503366, 0x77f31e2f, 0x77f31e2f, 0x3800010},
6083{0x3800000, 0x9503366, 0xaab4d7d8, 0xaab4d7d8, 0x3800010},
6084{0x3800000, 0x9503366, 0x966320b, 0x9db32b8, 0x3800010},
6085{0x3800000, 0x9503366, 0xb26bddee, 0xb26bddee, 0x3800010},
6086{0x3800000, 0x9503366, 0xb5c8e5d3, 0xb5c8e5d3, 0x3800010},
6087{0x3800000, 0x9503366, 0x317285d3, 0x317285d3, 0x3800010},
6088{0x3800000, 0x9503366, 0x3c9623b1, 0x3c9623b1, 0x3800010},
6089{0x3800000, 0x9503366, 0x51fd2c7c, 0x51fd2c7c, 0x3800010},
6090{0x3800000, 0x9503366, 0x7b906a6c, 0x7b906a6c, 0x3800010},
6091{0x3800000, 0xbf5a97c9, 0x0, 0xbf5a97c9, 0x3800000},
6092{0x3800000, 0xbf5a97c9, 0x1, 0xbf5a97c9, 0x3800080},
6093{0x3800000, 0xbf5a97c9, 0x76, 0xbf5a97c9, 0x3800080},
6094{0x3800000, 0xbf5a97c9, 0x2b94, 0xbf5a97c9, 0x3800080},
6095{0x3800000, 0xbf5a97c9, 0x636d24, 0xbf5a97c9, 0x3800080},
6096{0x3800000, 0xbf5a97c9, 0x7fffff, 0xbf5a97c9, 0x3800080},
6097{0x3800000, 0xbf5a97c9, 0x800000, 0xbf5a97c9, 0x3800010},
6098{0x3800000, 0xbf5a97c9, 0x800002, 0xbf5a97c9, 0x3800010},
6099{0x3800000, 0xbf5a97c9, 0x1398437, 0xbf5a97c9, 0x3800010},
6100{0x3800000, 0xbf5a97c9, 0xba98d27, 0xbf5a97c9, 0x3800010},
6101{0x3800000, 0xbf5a97c9, 0xba98d7a, 0xbf5a97c9, 0x3800010},
6102{0x3800000, 0xbf5a97c9, 0x751f853a, 0x751f8539, 0x3800010},
6103{0x3800000, 0xbf5a97c9, 0x7f7ffff0, 0x7f7fffef, 0x3800010},
6104{0x3800000, 0xbf5a97c9, 0x7f7fffff, 0x7f7ffffe, 0x3800010},
6105{0x3800000, 0xbf5a97c9, 0x7f800000, 0x7f800000, 0x3800000},
6106{0x3800000, 0xbf5a97c9, 0x7f800001, 0x7fc00000, 0x3800001},
6107{0x3800000, 0xbf5a97c9, 0x7f984a37, 0x7fc00000, 0x3800001},
6108{0x3800000, 0xbf5a97c9, 0x7fbfffff, 0x7fc00000, 0x3800001},
6109{0x3800000, 0xbf5a97c9, 0x7fc00000, 0x7fc00000, 0x3800000},
6110{0x3800000, 0xbf5a97c9, 0x7fd9ba98, 0x7fc00000, 0x3800000},
6111{0x3800000, 0xbf5a97c9, 0x7fffffff, 0x7fc00000, 0x3800000},
6112{0x3800000, 0xbf5a97c9, 0x80000000, 0xbf5a97c9, 0x3800000},
6113{0x3800000, 0xbf5a97c9, 0x80000001, 0xbf5a97c9, 0x3800080},
6114{0x3800000, 0xbf5a97c9, 0x80000076, 0xbf5a97c9, 0x3800080},
6115{0x3800000, 0xbf5a97c9, 0x80002b94, 0xbf5a97c9, 0x3800080},
6116{0x3800000, 0xbf5a97c9, 0x80636d24, 0xbf5a97c9, 0x3800080},
6117{0x3800000, 0xbf5a97c9, 0x807fffff, 0xbf5a97c9, 0x3800080},
6118{0x3800000, 0xbf5a97c9, 0x80800000, 0xbf5a97ca, 0x3800010},
6119{0x3800000, 0xbf5a97c9, 0x80800002, 0xbf5a97ca, 0x3800010},
6120{0x3800000, 0xbf5a97c9, 0x81398437, 0xbf5a97ca, 0x3800010},
6121{0x3800000, 0xbf5a97c9, 0x8ba98d27, 0xbf5a97ca, 0x3800010},
6122{0x3800000, 0xbf5a97c9, 0x8ba98d7a, 0xbf5a97ca, 0x3800010},
6123{0x3800000, 0xbf5a97c9, 0xf51f853a, 0xf51f853b, 0x3800010},
6124{0x3800000, 0xbf5a97c9, 0xff7ffff0, 0xff7ffff1, 0x3800010},
6125{0x3800000, 0xbf5a97c9, 0xff7fffff, 0xff800000, 0x3800014},
6126{0x3800000, 0xbf5a97c9, 0xff800000, 0xff800000, 0x3800000},
6127{0x3800000, 0xbf5a97c9, 0xff800001, 0x7fc00000, 0x3800001},
6128{0x3800000, 0xbf5a97c9, 0xff984a37, 0x7fc00000, 0x3800001},
6129{0x3800000, 0xbf5a97c9, 0xffbfffff, 0x7fc00000, 0x3800001},
6130{0x3800000, 0xbf5a97c9, 0xffc00000, 0x7fc00000, 0x3800000},
6131{0x3800000, 0xbf5a97c9, 0xffd9ba98, 0x7fc00000, 0x3800000},
6132{0x3800000, 0xbf5a97c9, 0xffffffff, 0x7fc00000, 0x3800000},
6133{0x3800000, 0xbf5a97c9, 0x4f3495cb, 0x4f3495ca, 0x3800010},
6134{0x3800000, 0xbf5a97c9, 0xe73a5134, 0xe73a5135, 0x3800010},
6135{0x3800000, 0xbf5a97c9, 0x7c994e9e, 0x7c994e9d, 0x3800010},
6136{0x3800000, 0xbf5a97c9, 0x6164bd6c, 0x6164bd6b, 0x3800010},
6137{0x3800000, 0xbf5a97c9, 0x9503366, 0xbf5a97c9, 0x3800010},
6138{0x3800000, 0xbf5a97c9, 0xbf5a97c9, 0xbfda97c9, 0x3800000},
6139{0x3800000, 0xbf5a97c9, 0xe6ff1a14, 0xe6ff1a15, 0x3800010},
6140{0x3800000, 0xbf5a97c9, 0x77f31e2f, 0x77f31e2e, 0x3800010},
6141{0x3800000, 0xbf5a97c9, 0xaab4d7d8, 0xbf5a97ca, 0x3800010},
6142{0x3800000, 0xbf5a97c9, 0x966320b, 0xbf5a97c9, 0x3800010},
6143{0x3800000, 0xbf5a97c9, 0xb26bddee, 0xbf5a97ca, 0x3800010},
6144{0x3800000, 0xbf5a97c9, 0xb5c8e5d3, 0xbf5a97e3, 0x3800010},
6145{0x3800000, 0xbf5a97c9, 0x317285d3, 0xbf5a97c9, 0x3800010},
6146{0x3800000, 0xbf5a97c9, 0x3c9623b1, 0xbf55e6ac, 0x3800010},
6147{0x3800000, 0xbf5a97c9, 0x51fd2c7c, 0x51fd2c7b, 0x3800010},
6148{0x3800000, 0xbf5a97c9, 0x7b906a6c, 0x7b906a6b, 0x3800010},
6149{0x3800000, 0xe6ff1a14, 0x0, 0xe6ff1a14, 0x3800000},
6150{0x3800000, 0xe6ff1a14, 0x1, 0xe6ff1a14, 0x3800080},
6151{0x3800000, 0xe6ff1a14, 0x76, 0xe6ff1a14, 0x3800080},
6152{0x3800000, 0xe6ff1a14, 0x2b94, 0xe6ff1a14, 0x3800080},
6153{0x3800000, 0xe6ff1a14, 0x636d24, 0xe6ff1a14, 0x3800080},
6154{0x3800000, 0xe6ff1a14, 0x7fffff, 0xe6ff1a14, 0x3800080},
6155{0x3800000, 0xe6ff1a14, 0x800000, 0xe6ff1a14, 0x3800010},
6156{0x3800000, 0xe6ff1a14, 0x800002, 0xe6ff1a14, 0x3800010},
6157{0x3800000, 0xe6ff1a14, 0x1398437, 0xe6ff1a14, 0x3800010},
6158{0x3800000, 0xe6ff1a14, 0xba98d27, 0xe6ff1a14, 0x3800010},
6159{0x3800000, 0xe6ff1a14, 0xba98d7a, 0xe6ff1a14, 0x3800010},
6160{0x3800000, 0xe6ff1a14, 0x751f853a, 0x751f8539, 0x3800010},
6161{0x3800000, 0xe6ff1a14, 0x7f7ffff0, 0x7f7fffef, 0x3800010},
6162{0x3800000, 0xe6ff1a14, 0x7f7fffff, 0x7f7ffffe, 0x3800010},
6163{0x3800000, 0xe6ff1a14, 0x7f800000, 0x7f800000, 0x3800000},
6164{0x3800000, 0xe6ff1a14, 0x7f800001, 0x7fc00000, 0x3800001},
6165{0x3800000, 0xe6ff1a14, 0x7f984a37, 0x7fc00000, 0x3800001},
6166{0x3800000, 0xe6ff1a14, 0x7fbfffff, 0x7fc00000, 0x3800001},
6167{0x3800000, 0xe6ff1a14, 0x7fc00000, 0x7fc00000, 0x3800000},
6168{0x3800000, 0xe6ff1a14, 0x7fd9ba98, 0x7fc00000, 0x3800000},
6169{0x3800000, 0xe6ff1a14, 0x7fffffff, 0x7fc00000, 0x3800000},
6170{0x3800000, 0xe6ff1a14, 0x80000000, 0xe6ff1a14, 0x3800000},
6171{0x3800000, 0xe6ff1a14, 0x80000001, 0xe6ff1a14, 0x3800080},
6172{0x3800000, 0xe6ff1a14, 0x80000076, 0xe6ff1a14, 0x3800080},
6173{0x3800000, 0xe6ff1a14, 0x80002b94, 0xe6ff1a14, 0x3800080},
6174{0x3800000, 0xe6ff1a14, 0x80636d24, 0xe6ff1a14, 0x3800080},
6175{0x3800000, 0xe6ff1a14, 0x807fffff, 0xe6ff1a14, 0x3800080},
6176{0x3800000, 0xe6ff1a14, 0x80800000, 0xe6ff1a15, 0x3800010},
6177{0x3800000, 0xe6ff1a14, 0x80800002, 0xe6ff1a15, 0x3800010},
6178{0x3800000, 0xe6ff1a14, 0x81398437, 0xe6ff1a15, 0x3800010},
6179{0x3800000, 0xe6ff1a14, 0x8ba98d27, 0xe6ff1a15, 0x3800010},
6180{0x3800000, 0xe6ff1a14, 0x8ba98d7a, 0xe6ff1a15, 0x3800010},
6181{0x3800000, 0xe6ff1a14, 0xf51f853a, 0xf51f853b, 0x3800010},
6182{0x3800000, 0xe6ff1a14, 0xff7ffff0, 0xff7ffff1, 0x3800010},
6183{0x3800000, 0xe6ff1a14, 0xff7fffff, 0xff800000, 0x3800014},
6184{0x3800000, 0xe6ff1a14, 0xff800000, 0xff800000, 0x3800000},
6185{0x3800000, 0xe6ff1a14, 0xff800001, 0x7fc00000, 0x3800001},
6186{0x3800000, 0xe6ff1a14, 0xff984a37, 0x7fc00000, 0x3800001},
6187{0x3800000, 0xe6ff1a14, 0xffbfffff, 0x7fc00000, 0x3800001},
6188{0x3800000, 0xe6ff1a14, 0xffc00000, 0x7fc00000, 0x3800000},
6189{0x3800000, 0xe6ff1a14, 0xffd9ba98, 0x7fc00000, 0x3800000},
6190{0x3800000, 0xe6ff1a14, 0xffffffff, 0x7fc00000, 0x3800000},
6191{0x3800000, 0xe6ff1a14, 0x4f3495cb, 0xe6ff1a14, 0x3800010},
6192{0x3800000, 0xe6ff1a14, 0xe73a5134, 0xe79cef1f, 0x3800000},
6193{0x3800000, 0xe6ff1a14, 0x7c994e9e, 0x7c994e9d, 0x3800010},
6194{0x3800000, 0xe6ff1a14, 0x6164bd6c, 0xe6fefd7d, 0x3800010},
6195{0x3800000, 0xe6ff1a14, 0x9503366, 0xe6ff1a14, 0x3800010},
6196{0x3800000, 0xe6ff1a14, 0xbf5a97c9, 0xe6ff1a15, 0x3800010},
6197{0x3800000, 0xe6ff1a14, 0xe6ff1a14, 0xe77f1a14, 0x3800000},
6198{0x3800000, 0xe6ff1a14, 0x77f31e2f, 0x77f31e2e, 0x3800010},
6199{0x3800000, 0xe6ff1a14, 0xaab4d7d8, 0xe6ff1a15, 0x3800010},
6200{0x3800000, 0xe6ff1a14, 0x966320b, 0xe6ff1a14, 0x3800010},
6201{0x3800000, 0xe6ff1a14, 0xb26bddee, 0xe6ff1a15, 0x3800010},
6202{0x3800000, 0xe6ff1a14, 0xb5c8e5d3, 0xe6ff1a15, 0x3800010},
6203{0x3800000, 0xe6ff1a14, 0x317285d3, 0xe6ff1a14, 0x3800010},
6204{0x3800000, 0xe6ff1a14, 0x3c9623b1, 0xe6ff1a14, 0x3800010},
6205{0x3800000, 0xe6ff1a14, 0x51fd2c7c, 0xe6ff1a14, 0x3800010},
6206{0x3800000, 0xe6ff1a14, 0x7b906a6c, 0x7b906a6b, 0x3800010},
6207{0x3800000, 0x77f31e2f, 0x0, 0x77f31e2f, 0x3800000},
6208{0x3800000, 0x77f31e2f, 0x1, 0x77f31e2f, 0x3800080},
6209{0x3800000, 0x77f31e2f, 0x76, 0x77f31e2f, 0x3800080},
6210{0x3800000, 0x77f31e2f, 0x2b94, 0x77f31e2f, 0x3800080},
6211{0x3800000, 0x77f31e2f, 0x636d24, 0x77f31e2f, 0x3800080},
6212{0x3800000, 0x77f31e2f, 0x7fffff, 0x77f31e2f, 0x3800080},
6213{0x3800000, 0x77f31e2f, 0x800000, 0x77f31e2f, 0x3800010},
6214{0x3800000, 0x77f31e2f, 0x800002, 0x77f31e2f, 0x3800010},
6215{0x3800000, 0x77f31e2f, 0x1398437, 0x77f31e2f, 0x3800010},
6216{0x3800000, 0x77f31e2f, 0xba98d27, 0x77f31e2f, 0x3800010},
6217{0x3800000, 0x77f31e2f, 0xba98d7a, 0x77f31e2f, 0x3800010},
6218{0x3800000, 0x77f31e2f, 0x751f853a, 0x77f81a58, 0x3800010},
6219{0x3800000, 0x77f31e2f, 0x7f7ffff0, 0x7f7fffff, 0x3800014},
6220{0x3800000, 0x77f31e2f, 0x7f7fffff, 0x7f7fffff, 0x3800014},
6221{0x3800000, 0x77f31e2f, 0x7f800000, 0x7f800000, 0x3800000},
6222{0x3800000, 0x77f31e2f, 0x7f800001, 0x7fc00000, 0x3800001},
6223{0x3800000, 0x77f31e2f, 0x7f984a37, 0x7fc00000, 0x3800001},
6224{0x3800000, 0x77f31e2f, 0x7fbfffff, 0x7fc00000, 0x3800001},
6225{0x3800000, 0x77f31e2f, 0x7fc00000, 0x7fc00000, 0x3800000},
6226{0x3800000, 0x77f31e2f, 0x7fd9ba98, 0x7fc00000, 0x3800000},
6227{0x3800000, 0x77f31e2f, 0x7fffffff, 0x7fc00000, 0x3800000},
6228{0x3800000, 0x77f31e2f, 0x80000000, 0x77f31e2f, 0x3800000},
6229{0x3800000, 0x77f31e2f, 0x80000001, 0x77f31e2f, 0x3800080},
6230{0x3800000, 0x77f31e2f, 0x80000076, 0x77f31e2f, 0x3800080},
6231{0x3800000, 0x77f31e2f, 0x80002b94, 0x77f31e2f, 0x3800080},
6232{0x3800000, 0x77f31e2f, 0x80636d24, 0x77f31e2f, 0x3800080},
6233{0x3800000, 0x77f31e2f, 0x807fffff, 0x77f31e2f, 0x3800080},
6234{0x3800000, 0x77f31e2f, 0x80800000, 0x77f31e2e, 0x3800010},
6235{0x3800000, 0x77f31e2f, 0x80800002, 0x77f31e2e, 0x3800010},
6236{0x3800000, 0x77f31e2f, 0x81398437, 0x77f31e2e, 0x3800010},
6237{0x3800000, 0x77f31e2f, 0x8ba98d27, 0x77f31e2e, 0x3800010},
6238{0x3800000, 0x77f31e2f, 0x8ba98d7a, 0x77f31e2e, 0x3800010},
6239{0x3800000, 0x77f31e2f, 0xf51f853a, 0x77ee2205, 0x3800010},
6240{0x3800000, 0x77f31e2f, 0xff7ffff0, 0xff7ffe0a, 0x3800010},
6241{0x3800000, 0x77f31e2f, 0xff7fffff, 0xff7ffe19, 0x3800010},
6242{0x3800000, 0x77f31e2f, 0xff800000, 0xff800000, 0x3800000},
6243{0x3800000, 0x77f31e2f, 0xff800001, 0x7fc00000, 0x3800001},
6244{0x3800000, 0x77f31e2f, 0xff984a37, 0x7fc00000, 0x3800001},
6245{0x3800000, 0x77f31e2f, 0xffbfffff, 0x7fc00000, 0x3800001},
6246{0x3800000, 0x77f31e2f, 0xffc00000, 0x7fc00000, 0x3800000},
6247{0x3800000, 0x77f31e2f, 0xffd9ba98, 0x7fc00000, 0x3800000},
6248{0x3800000, 0x77f31e2f, 0xffffffff, 0x7fc00000, 0x3800000},
6249{0x3800000, 0x77f31e2f, 0x4f3495cb, 0x77f31e2f, 0x3800010},
6250{0x3800000, 0x77f31e2f, 0xe73a5134, 0x77f31e2e, 0x3800010},
6251{0x3800000, 0x77f31e2f, 0x7c994e9e, 0x7c998b65, 0x3800010},
6252{0x3800000, 0x77f31e2f, 0x6164bd6c, 0x77f31e2f, 0x3800010},
6253{0x3800000, 0x77f31e2f, 0x9503366, 0x77f31e2f, 0x3800010},
6254{0x3800000, 0x77f31e2f, 0xbf5a97c9, 0x77f31e2e, 0x3800010},
6255{0x3800000, 0x77f31e2f, 0xe6ff1a14, 0x77f31e2e, 0x3800010},
6256{0x3800000, 0x77f31e2f, 0x77f31e2f, 0x78731e2f, 0x3800000},
6257{0x3800000, 0x77f31e2f, 0xaab4d7d8, 0x77f31e2e, 0x3800010},
6258{0x3800000, 0x77f31e2f, 0x966320b, 0x77f31e2f, 0x3800010},
6259{0x3800000, 0x77f31e2f, 0xb26bddee, 0x77f31e2e, 0x3800010},
6260{0x3800000, 0x77f31e2f, 0xb5c8e5d3, 0x77f31e2e, 0x3800010},
6261{0x3800000, 0x77f31e2f, 0x317285d3, 0x77f31e2f, 0x3800010},
6262{0x3800000, 0x77f31e2f, 0x3c9623b1, 0x77f31e2f, 0x3800010},
6263{0x3800000, 0x77f31e2f, 0x51fd2c7c, 0x77f31e2f, 0x3800010},
6264{0x3800000, 0x77f31e2f, 0x7b906a6c, 0x7b915d8a, 0x3800010},
6265{0x3800000, 0xaab4d7d8, 0x0, 0xaab4d7d8, 0x3800000},
6266{0x3800000, 0xaab4d7d8, 0x1, 0xaab4d7d8, 0x3800080},
6267{0x3800000, 0xaab4d7d8, 0x76, 0xaab4d7d8, 0x3800080},
6268{0x3800000, 0xaab4d7d8, 0x2b94, 0xaab4d7d8, 0x3800080},
6269{0x3800000, 0xaab4d7d8, 0x636d24, 0xaab4d7d8, 0x3800080},
6270{0x3800000, 0xaab4d7d8, 0x7fffff, 0xaab4d7d8, 0x3800080},
6271{0x3800000, 0xaab4d7d8, 0x800000, 0xaab4d7d8, 0x3800010},
6272{0x3800000, 0xaab4d7d8, 0x800002, 0xaab4d7d8, 0x3800010},
6273{0x3800000, 0xaab4d7d8, 0x1398437, 0xaab4d7d8, 0x3800010},
6274{0x3800000, 0xaab4d7d8, 0xba98d27, 0xaab4d7d8, 0x3800010},
6275{0x3800000, 0xaab4d7d8, 0xba98d7a, 0xaab4d7d8, 0x3800010},
6276{0x3800000, 0xaab4d7d8, 0x751f853a, 0x751f8539, 0x3800010},
6277{0x3800000, 0xaab4d7d8, 0x7f7ffff0, 0x7f7fffef, 0x3800010},
6278{0x3800000, 0xaab4d7d8, 0x7f7fffff, 0x7f7ffffe, 0x3800010},
6279{0x3800000, 0xaab4d7d8, 0x7f800000, 0x7f800000, 0x3800000},
6280{0x3800000, 0xaab4d7d8, 0x7f800001, 0x7fc00000, 0x3800001},
6281{0x3800000, 0xaab4d7d8, 0x7f984a37, 0x7fc00000, 0x3800001},
6282{0x3800000, 0xaab4d7d8, 0x7fbfffff, 0x7fc00000, 0x3800001},
6283{0x3800000, 0xaab4d7d8, 0x7fc00000, 0x7fc00000, 0x3800000},
6284{0x3800000, 0xaab4d7d8, 0x7fd9ba98, 0x7fc00000, 0x3800000},
6285{0x3800000, 0xaab4d7d8, 0x7fffffff, 0x7fc00000, 0x3800000},
6286{0x3800000, 0xaab4d7d8, 0x80000000, 0xaab4d7d8, 0x3800000},
6287{0x3800000, 0xaab4d7d8, 0x80000001, 0xaab4d7d8, 0x3800080},
6288{0x3800000, 0xaab4d7d8, 0x80000076, 0xaab4d7d8, 0x3800080},
6289{0x3800000, 0xaab4d7d8, 0x80002b94, 0xaab4d7d8, 0x3800080},
6290{0x3800000, 0xaab4d7d8, 0x80636d24, 0xaab4d7d8, 0x3800080},
6291{0x3800000, 0xaab4d7d8, 0x807fffff, 0xaab4d7d8, 0x3800080},
6292{0x3800000, 0xaab4d7d8, 0x80800000, 0xaab4d7d9, 0x3800010},
6293{0x3800000, 0xaab4d7d8, 0x80800002, 0xaab4d7d9, 0x3800010},
6294{0x3800000, 0xaab4d7d8, 0x81398437, 0xaab4d7d9, 0x3800010},
6295{0x3800000, 0xaab4d7d8, 0x8ba98d27, 0xaab4d7d9, 0x3800010},
6296{0x3800000, 0xaab4d7d8, 0x8ba98d7a, 0xaab4d7d9, 0x3800010},
6297{0x3800000, 0xaab4d7d8, 0xf51f853a, 0xf51f853b, 0x3800010},
6298{0x3800000, 0xaab4d7d8, 0xff7ffff0, 0xff7ffff1, 0x3800010},
6299{0x3800000, 0xaab4d7d8, 0xff7fffff, 0xff800000, 0x3800014},
6300{0x3800000, 0xaab4d7d8, 0xff800000, 0xff800000, 0x3800000},
6301{0x3800000, 0xaab4d7d8, 0xff800001, 0x7fc00000, 0x3800001},
6302{0x3800000, 0xaab4d7d8, 0xff984a37, 0x7fc00000, 0x3800001},
6303{0x3800000, 0xaab4d7d8, 0xffbfffff, 0x7fc00000, 0x3800001},
6304{0x3800000, 0xaab4d7d8, 0xffc00000, 0x7fc00000, 0x3800000},
6305{0x3800000, 0xaab4d7d8, 0xffd9ba98, 0x7fc00000, 0x3800000},
6306{0x3800000, 0xaab4d7d8, 0xffffffff, 0x7fc00000, 0x3800000},
6307{0x3800000, 0xaab4d7d8, 0x4f3495cb, 0x4f3495ca, 0x3800010},
6308{0x3800000, 0xaab4d7d8, 0xe73a5134, 0xe73a5135, 0x3800010},
6309{0x3800000, 0xaab4d7d8, 0x7c994e9e, 0x7c994e9d, 0x3800010},
6310{0x3800000, 0xaab4d7d8, 0x6164bd6c, 0x6164bd6b, 0x3800010},
6311{0x3800000, 0xaab4d7d8, 0x9503366, 0xaab4d7d8, 0x3800010},
6312{0x3800000, 0xaab4d7d8, 0xbf5a97c9, 0xbf5a97ca, 0x3800010},
6313{0x3800000, 0xaab4d7d8, 0xe6ff1a14, 0xe6ff1a15, 0x3800010},
6314{0x3800000, 0xaab4d7d8, 0x77f31e2f, 0x77f31e2e, 0x3800010},
6315{0x3800000, 0xaab4d7d8, 0xaab4d7d8, 0xab34d7d8, 0x3800000},
6316{0x3800000, 0xaab4d7d8, 0x966320b, 0xaab4d7d8, 0x3800010},
6317{0x3800000, 0xaab4d7d8, 0xb26bddee, 0xb26bdf58, 0x3800010},
6318{0x3800000, 0xaab4d7d8, 0xb5c8e5d3, 0xb5c8e5d6, 0x3800010},
6319{0x3800000, 0xaab4d7d8, 0x317285d3, 0x3172802c, 0x3800010},
6320{0x3800000, 0xaab4d7d8, 0x3c9623b1, 0x3c9623b0, 0x3800010},
6321{0x3800000, 0xaab4d7d8, 0x51fd2c7c, 0x51fd2c7b, 0x3800010},
6322{0x3800000, 0xaab4d7d8, 0x7b906a6c, 0x7b906a6b, 0x3800010},
6323{0x3800000, 0x966320b, 0x0, 0x966320b, 0x3800000},
6324{0x3800000, 0x966320b, 0x1, 0x966320b, 0x3800080},
6325{0x3800000, 0x966320b, 0x76, 0x966320b, 0x3800080},
6326{0x3800000, 0x966320b, 0x2b94, 0x966320b, 0x3800080},
6327{0x3800000, 0x966320b, 0x636d24, 0x966320b, 0x3800080},
6328{0x3800000, 0x966320b, 0x7fffff, 0x966320b, 0x3800080},
6329{0x3800000, 0x966320b, 0x800000, 0x966324b, 0x3800000},
6330{0x3800000, 0x966320b, 0x800002, 0x966324b, 0x3800010},
6331{0x3800000, 0x966320b, 0x1398437, 0x96632c4, 0x3800010},
6332{0x3800000, 0x966320b, 0xba98d27, 0xbb0beb7, 0x3800010},
6333{0x3800000, 0x966320b, 0xba98d7a, 0xbb0bf0a, 0x3800010},
6334{0x3800000, 0x966320b, 0x751f853a, 0x751f853a, 0x3800010},
6335{0x3800000, 0x966320b, 0x7f7ffff0, 0x7f7ffff0, 0x3800010},
6336{0x3800000, 0x966320b, 0x7f7fffff, 0x7f7fffff, 0x3800010},
6337{0x3800000, 0x966320b, 0x7f800000, 0x7f800000, 0x3800000},
6338{0x3800000, 0x966320b, 0x7f800001, 0x7fc00000, 0x3800001},
6339{0x3800000, 0x966320b, 0x7f984a37, 0x7fc00000, 0x3800001},
6340{0x3800000, 0x966320b, 0x7fbfffff, 0x7fc00000, 0x3800001},
6341{0x3800000, 0x966320b, 0x7fc00000, 0x7fc00000, 0x3800000},
6342{0x3800000, 0x966320b, 0x7fd9ba98, 0x7fc00000, 0x3800000},
6343{0x3800000, 0x966320b, 0x7fffffff, 0x7fc00000, 0x3800000},
6344{0x3800000, 0x966320b, 0x80000000, 0x966320b, 0x3800000},
6345{0x3800000, 0x966320b, 0x80000001, 0x966320b, 0x3800080},
6346{0x3800000, 0x966320b, 0x80000076, 0x966320b, 0x3800080},
6347{0x3800000, 0x966320b, 0x80002b94, 0x966320b, 0x3800080},
6348{0x3800000, 0x966320b, 0x80636d24, 0x966320b, 0x3800080},
6349{0x3800000, 0x966320b, 0x807fffff, 0x966320b, 0x3800080},
6350{0x3800000, 0x966320b, 0x80800000, 0x96631cb, 0x3800000},
6351{0x3800000, 0x966320b, 0x80800002, 0x96631ca, 0x3800010},
6352{0x3800000, 0x966320b, 0x81398437, 0x9663151, 0x3800010},
6353{0x3800000, 0x966320b, 0x8ba98d27, 0x8ba25b97, 0x3800010},
6354{0x3800000, 0x966320b, 0x8ba98d7a, 0x8ba25bea, 0x3800010},
6355{0x3800000, 0x966320b, 0xf51f853a, 0xf51f853a, 0x3800010},
6356{0x3800000, 0x966320b, 0xff7ffff0, 0xff7ffff0, 0x3800010},
6357{0x3800000, 0x966320b, 0xff7fffff, 0xff7fffff, 0x3800010},
6358{0x3800000, 0x966320b, 0xff800000, 0xff800000, 0x3800000},
6359{0x3800000, 0x966320b, 0xff800001, 0x7fc00000, 0x3800001},
6360{0x3800000, 0x966320b, 0xff984a37, 0x7fc00000, 0x3800001},
6361{0x3800000, 0x966320b, 0xffbfffff, 0x7fc00000, 0x3800001},
6362{0x3800000, 0x966320b, 0xffc00000, 0x7fc00000, 0x3800000},
6363{0x3800000, 0x966320b, 0xffd9ba98, 0x7fc00000, 0x3800000},
6364{0x3800000, 0x966320b, 0xffffffff, 0x7fc00000, 0x3800000},
6365{0x3800000, 0x966320b, 0x4f3495cb, 0x4f3495cb, 0x3800010},
6366{0x3800000, 0x966320b, 0xe73a5134, 0xe73a5134, 0x3800010},
6367{0x3800000, 0x966320b, 0x7c994e9e, 0x7c994e9e, 0x3800010},
6368{0x3800000, 0x966320b, 0x6164bd6c, 0x6164bd6c, 0x3800010},
6369{0x3800000, 0x966320b, 0x9503366, 0x9db32b8, 0x3800010},
6370{0x3800000, 0x966320b, 0xbf5a97c9, 0xbf5a97c9, 0x3800010},
6371{0x3800000, 0x966320b, 0xe6ff1a14, 0xe6ff1a14, 0x3800010},
6372{0x3800000, 0x966320b, 0x77f31e2f, 0x77f31e2f, 0x3800010},
6373{0x3800000, 0x966320b, 0xaab4d7d8, 0xaab4d7d8, 0x3800010},
6374{0x3800000, 0x966320b, 0x966320b, 0x9e6320b, 0x3800000},
6375{0x3800000, 0x966320b, 0xb26bddee, 0xb26bddee, 0x3800010},
6376{0x3800000, 0x966320b, 0xb5c8e5d3, 0xb5c8e5d3, 0x3800010},
6377{0x3800000, 0x966320b, 0x317285d3, 0x317285d3, 0x3800010},
6378{0x3800000, 0x966320b, 0x3c9623b1, 0x3c9623b1, 0x3800010},
6379{0x3800000, 0x966320b, 0x51fd2c7c, 0x51fd2c7c, 0x3800010},
6380{0x3800000, 0x966320b, 0x7b906a6c, 0x7b906a6c, 0x3800010},
6381{0x3800000, 0xb26bddee, 0x0, 0xb26bddee, 0x3800000},
6382{0x3800000, 0xb26bddee, 0x1, 0xb26bddee, 0x3800080},
6383{0x3800000, 0xb26bddee, 0x76, 0xb26bddee, 0x3800080},
6384{0x3800000, 0xb26bddee, 0x2b94, 0xb26bddee, 0x3800080},
6385{0x3800000, 0xb26bddee, 0x636d24, 0xb26bddee, 0x3800080},
6386{0x3800000, 0xb26bddee, 0x7fffff, 0xb26bddee, 0x3800080},
6387{0x3800000, 0xb26bddee, 0x800000, 0xb26bddee, 0x3800010},
6388{0x3800000, 0xb26bddee, 0x800002, 0xb26bddee, 0x3800010},
6389{0x3800000, 0xb26bddee, 0x1398437, 0xb26bddee, 0x3800010},
6390{0x3800000, 0xb26bddee, 0xba98d27, 0xb26bddee, 0x3800010},
6391{0x3800000, 0xb26bddee, 0xba98d7a, 0xb26bddee, 0x3800010},
6392{0x3800000, 0xb26bddee, 0x751f853a, 0x751f8539, 0x3800010},
6393{0x3800000, 0xb26bddee, 0x7f7ffff0, 0x7f7fffef, 0x3800010},
6394{0x3800000, 0xb26bddee, 0x7f7fffff, 0x7f7ffffe, 0x3800010},
6395{0x3800000, 0xb26bddee, 0x7f800000, 0x7f800000, 0x3800000},
6396{0x3800000, 0xb26bddee, 0x7f800001, 0x7fc00000, 0x3800001},
6397{0x3800000, 0xb26bddee, 0x7f984a37, 0x7fc00000, 0x3800001},
6398{0x3800000, 0xb26bddee, 0x7fbfffff, 0x7fc00000, 0x3800001},
6399{0x3800000, 0xb26bddee, 0x7fc00000, 0x7fc00000, 0x3800000},
6400{0x3800000, 0xb26bddee, 0x7fd9ba98, 0x7fc00000, 0x3800000},
6401{0x3800000, 0xb26bddee, 0x7fffffff, 0x7fc00000, 0x3800000},
6402{0x3800000, 0xb26bddee, 0x80000000, 0xb26bddee, 0x3800000},
6403{0x3800000, 0xb26bddee, 0x80000001, 0xb26bddee, 0x3800080},
6404{0x3800000, 0xb26bddee, 0x80000076, 0xb26bddee, 0x3800080},
6405{0x3800000, 0xb26bddee, 0x80002b94, 0xb26bddee, 0x3800080},
6406{0x3800000, 0xb26bddee, 0x80636d24, 0xb26bddee, 0x3800080},
6407{0x3800000, 0xb26bddee, 0x807fffff, 0xb26bddee, 0x3800080},
6408{0x3800000, 0xb26bddee, 0x80800000, 0xb26bddef, 0x3800010},
6409{0x3800000, 0xb26bddee, 0x80800002, 0xb26bddef, 0x3800010},
6410{0x3800000, 0xb26bddee, 0x81398437, 0xb26bddef, 0x3800010},
6411{0x3800000, 0xb26bddee, 0x8ba98d27, 0xb26bddef, 0x3800010},
6412{0x3800000, 0xb26bddee, 0x8ba98d7a, 0xb26bddef, 0x3800010},
6413{0x3800000, 0xb26bddee, 0xf51f853a, 0xf51f853b, 0x3800010},
6414{0x3800000, 0xb26bddee, 0xff7ffff0, 0xff7ffff1, 0x3800010},
6415{0x3800000, 0xb26bddee, 0xff7fffff, 0xff800000, 0x3800014},
6416{0x3800000, 0xb26bddee, 0xff800000, 0xff800000, 0x3800000},
6417{0x3800000, 0xb26bddee, 0xff800001, 0x7fc00000, 0x3800001},
6418{0x3800000, 0xb26bddee, 0xff984a37, 0x7fc00000, 0x3800001},
6419{0x3800000, 0xb26bddee, 0xffbfffff, 0x7fc00000, 0x3800001},
6420{0x3800000, 0xb26bddee, 0xffc00000, 0x7fc00000, 0x3800000},
6421{0x3800000, 0xb26bddee, 0xffd9ba98, 0x7fc00000, 0x3800000},
6422{0x3800000, 0xb26bddee, 0xffffffff, 0x7fc00000, 0x3800000},
6423{0x3800000, 0xb26bddee, 0x4f3495cb, 0x4f3495ca, 0x3800010},
6424{0x3800000, 0xb26bddee, 0xe73a5134, 0xe73a5135, 0x3800010},
6425{0x3800000, 0xb26bddee, 0x7c994e9e, 0x7c994e9d, 0x3800010},
6426{0x3800000, 0xb26bddee, 0x6164bd6c, 0x6164bd6b, 0x3800010},
6427{0x3800000, 0xb26bddee, 0x9503366, 0xb26bddee, 0x3800010},
6428{0x3800000, 0xb26bddee, 0xbf5a97c9, 0xbf5a97ca, 0x3800010},
6429{0x3800000, 0xb26bddee, 0xe6ff1a14, 0xe6ff1a15, 0x3800010},
6430{0x3800000, 0xb26bddee, 0x77f31e2f, 0x77f31e2e, 0x3800010},
6431{0x3800000, 0xb26bddee, 0xaab4d7d8, 0xb26bdf58, 0x3800010},
6432{0x3800000, 0xb26bddee, 0x966320b, 0xb26bddee, 0x3800010},
6433{0x3800000, 0xb26bddee, 0xb26bddee, 0xb2ebddee, 0x3800000},
6434{0x3800000, 0xb26bddee, 0xb5c8e5d3, 0xb5cabd8f, 0x3800010},
6435{0x3800000, 0xb26bddee, 0x317285d3, 0xb22f3c7a, 0x3800010},
6436{0x3800000, 0xb26bddee, 0x3c9623b1, 0x3c9623a9, 0x3800010},
6437{0x3800000, 0xb26bddee, 0x51fd2c7c, 0x51fd2c7b, 0x3800010},
6438{0x3800000, 0xb26bddee, 0x7b906a6c, 0x7b906a6b, 0x3800010},
6439{0x3800000, 0xb5c8e5d3, 0x0, 0xb5c8e5d3, 0x3800000},
6440{0x3800000, 0xb5c8e5d3, 0x1, 0xb5c8e5d3, 0x3800080},
6441{0x3800000, 0xb5c8e5d3, 0x76, 0xb5c8e5d3, 0x3800080},
6442{0x3800000, 0xb5c8e5d3, 0x2b94, 0xb5c8e5d3, 0x3800080},
6443{0x3800000, 0xb5c8e5d3, 0x636d24, 0xb5c8e5d3, 0x3800080},
6444{0x3800000, 0xb5c8e5d3, 0x7fffff, 0xb5c8e5d3, 0x3800080},
6445{0x3800000, 0xb5c8e5d3, 0x800000, 0xb5c8e5d3, 0x3800010},
6446{0x3800000, 0xb5c8e5d3, 0x800002, 0xb5c8e5d3, 0x3800010},
6447{0x3800000, 0xb5c8e5d3, 0x1398437, 0xb5c8e5d3, 0x3800010},
6448{0x3800000, 0xb5c8e5d3, 0xba98d27, 0xb5c8e5d3, 0x3800010},
6449{0x3800000, 0xb5c8e5d3, 0xba98d7a, 0xb5c8e5d3, 0x3800010},
6450{0x3800000, 0xb5c8e5d3, 0x751f853a, 0x751f8539, 0x3800010},
6451{0x3800000, 0xb5c8e5d3, 0x7f7ffff0, 0x7f7fffef, 0x3800010},
6452{0x3800000, 0xb5c8e5d3, 0x7f7fffff, 0x7f7ffffe, 0x3800010},
6453{0x3800000, 0xb5c8e5d3, 0x7f800000, 0x7f800000, 0x3800000},
6454{0x3800000, 0xb5c8e5d3, 0x7f800001, 0x7fc00000, 0x3800001},
6455{0x3800000, 0xb5c8e5d3, 0x7f984a37, 0x7fc00000, 0x3800001},
6456{0x3800000, 0xb5c8e5d3, 0x7fbfffff, 0x7fc00000, 0x3800001},
6457{0x3800000, 0xb5c8e5d3, 0x7fc00000, 0x7fc00000, 0x3800000},
6458{0x3800000, 0xb5c8e5d3, 0x7fd9ba98, 0x7fc00000, 0x3800000},
6459{0x3800000, 0xb5c8e5d3, 0x7fffffff, 0x7fc00000, 0x3800000},
6460{0x3800000, 0xb5c8e5d3, 0x80000000, 0xb5c8e5d3, 0x3800000},
6461{0x3800000, 0xb5c8e5d3, 0x80000001, 0xb5c8e5d3, 0x3800080},
6462{0x3800000, 0xb5c8e5d3, 0x80000076, 0xb5c8e5d3, 0x3800080},
6463{0x3800000, 0xb5c8e5d3, 0x80002b94, 0xb5c8e5d3, 0x3800080},
6464{0x3800000, 0xb5c8e5d3, 0x80636d24, 0xb5c8e5d3, 0x3800080},
6465{0x3800000, 0xb5c8e5d3, 0x807fffff, 0xb5c8e5d3, 0x3800080},
6466{0x3800000, 0xb5c8e5d3, 0x80800000, 0xb5c8e5d4, 0x3800010},
6467{0x3800000, 0xb5c8e5d3, 0x80800002, 0xb5c8e5d4, 0x3800010},
6468{0x3800000, 0xb5c8e5d3, 0x81398437, 0xb5c8e5d4, 0x3800010},
6469{0x3800000, 0xb5c8e5d3, 0x8ba98d27, 0xb5c8e5d4, 0x3800010},
6470{0x3800000, 0xb5c8e5d3, 0x8ba98d7a, 0xb5c8e5d4, 0x3800010},
6471{0x3800000, 0xb5c8e5d3, 0xf51f853a, 0xf51f853b, 0x3800010},
6472{0x3800000, 0xb5c8e5d3, 0xff7ffff0, 0xff7ffff1, 0x3800010},
6473{0x3800000, 0xb5c8e5d3, 0xff7fffff, 0xff800000, 0x3800014},
6474{0x3800000, 0xb5c8e5d3, 0xff800000, 0xff800000, 0x3800000},
6475{0x3800000, 0xb5c8e5d3, 0xff800001, 0x7fc00000, 0x3800001},
6476{0x3800000, 0xb5c8e5d3, 0xff984a37, 0x7fc00000, 0x3800001},
6477{0x3800000, 0xb5c8e5d3, 0xffbfffff, 0x7fc00000, 0x3800001},
6478{0x3800000, 0xb5c8e5d3, 0xffc00000, 0x7fc00000, 0x3800000},
6479{0x3800000, 0xb5c8e5d3, 0xffd9ba98, 0x7fc00000, 0x3800000},
6480{0x3800000, 0xb5c8e5d3, 0xffffffff, 0x7fc00000, 0x3800000},
6481{0x3800000, 0xb5c8e5d3, 0x4f3495cb, 0x4f3495ca, 0x3800010},
6482{0x3800000, 0xb5c8e5d3, 0xe73a5134, 0xe73a5135, 0x3800010},
6483{0x3800000, 0xb5c8e5d3, 0x7c994e9e, 0x7c994e9d, 0x3800010},
6484{0x3800000, 0xb5c8e5d3, 0x6164bd6c, 0x6164bd6b, 0x3800010},
6485{0x3800000, 0xb5c8e5d3, 0x9503366, 0xb5c8e5d3, 0x3800010},
6486{0x3800000, 0xb5c8e5d3, 0xbf5a97c9, 0xbf5a97e3, 0x3800010},
6487{0x3800000, 0xb5c8e5d3, 0xe6ff1a14, 0xe6ff1a15, 0x3800010},
6488{0x3800000, 0xb5c8e5d3, 0x77f31e2f, 0x77f31e2e, 0x3800010},
6489{0x3800000, 0xb5c8e5d3, 0xaab4d7d8, 0xb5c8e5d6, 0x3800010},
6490{0x3800000, 0xb5c8e5d3, 0x966320b, 0xb5c8e5d3, 0x3800010},
6491{0x3800000, 0xb5c8e5d3, 0xb26bddee, 0xb5cabd8f, 0x3800010},
6492{0x3800000, 0xb5c8e5d3, 0xb5c8e5d3, 0xb648e5d3, 0x3800000},
6493{0x3800000, 0xb5c8e5d3, 0x317285d3, 0xb5c86c91, 0x3800010},
6494{0x3800000, 0xb5c8e5d3, 0x3c9623b1, 0x3c96208d, 0x3800010},
6495{0x3800000, 0xb5c8e5d3, 0x51fd2c7c, 0x51fd2c7b, 0x3800010},
6496{0x3800000, 0xb5c8e5d3, 0x7b906a6c, 0x7b906a6b, 0x3800010},
6497{0x3800000, 0x317285d3, 0x0, 0x317285d3, 0x3800000},
6498{0x3800000, 0x317285d3, 0x1, 0x317285d3, 0x3800080},
6499{0x3800000, 0x317285d3, 0x76, 0x317285d3, 0x3800080},
6500{0x3800000, 0x317285d3, 0x2b94, 0x317285d3, 0x3800080},
6501{0x3800000, 0x317285d3, 0x636d24, 0x317285d3, 0x3800080},
6502{0x3800000, 0x317285d3, 0x7fffff, 0x317285d3, 0x3800080},
6503{0x3800000, 0x317285d3, 0x800000, 0x317285d3, 0x3800010},
6504{0x3800000, 0x317285d3, 0x800002, 0x317285d3, 0x3800010},
6505{0x3800000, 0x317285d3, 0x1398437, 0x317285d3, 0x3800010},
6506{0x3800000, 0x317285d3, 0xba98d27, 0x317285d3, 0x3800010},
6507{0x3800000, 0x317285d3, 0xba98d7a, 0x317285d3, 0x3800010},
6508{0x3800000, 0x317285d3, 0x751f853a, 0x751f853a, 0x3800010},
6509{0x3800000, 0x317285d3, 0x7f7ffff0, 0x7f7ffff0, 0x3800010},
6510{0x3800000, 0x317285d3, 0x7f7fffff, 0x7f7fffff, 0x3800010},
6511{0x3800000, 0x317285d3, 0x7f800000, 0x7f800000, 0x3800000},
6512{0x3800000, 0x317285d3, 0x7f800001, 0x7fc00000, 0x3800001},
6513{0x3800000, 0x317285d3, 0x7f984a37, 0x7fc00000, 0x3800001},
6514{0x3800000, 0x317285d3, 0x7fbfffff, 0x7fc00000, 0x3800001},
6515{0x3800000, 0x317285d3, 0x7fc00000, 0x7fc00000, 0x3800000},
6516{0x3800000, 0x317285d3, 0x7fd9ba98, 0x7fc00000, 0x3800000},
6517{0x3800000, 0x317285d3, 0x7fffffff, 0x7fc00000, 0x3800000},
6518{0x3800000, 0x317285d3, 0x80000000, 0x317285d3, 0x3800000},
6519{0x3800000, 0x317285d3, 0x80000001, 0x317285d3, 0x3800080},
6520{0x3800000, 0x317285d3, 0x80000076, 0x317285d3, 0x3800080},
6521{0x3800000, 0x317285d3, 0x80002b94, 0x317285d3, 0x3800080},
6522{0x3800000, 0x317285d3, 0x80636d24, 0x317285d3, 0x3800080},
6523{0x3800000, 0x317285d3, 0x807fffff, 0x317285d3, 0x3800080},
6524{0x3800000, 0x317285d3, 0x80800000, 0x317285d2, 0x3800010},
6525{0x3800000, 0x317285d3, 0x80800002, 0x317285d2, 0x3800010},
6526{0x3800000, 0x317285d3, 0x81398437, 0x317285d2, 0x3800010},
6527{0x3800000, 0x317285d3, 0x8ba98d27, 0x317285d2, 0x3800010},
6528{0x3800000, 0x317285d3, 0x8ba98d7a, 0x317285d2, 0x3800010},
6529{0x3800000, 0x317285d3, 0xf51f853a, 0xf51f853a, 0x3800010},
6530{0x3800000, 0x317285d3, 0xff7ffff0, 0xff7ffff0, 0x3800010},
6531{0x3800000, 0x317285d3, 0xff7fffff, 0xff7fffff, 0x3800010},
6532{0x3800000, 0x317285d3, 0xff800000, 0xff800000, 0x3800000},
6533{0x3800000, 0x317285d3, 0xff800001, 0x7fc00000, 0x3800001},
6534{0x3800000, 0x317285d3, 0xff984a37, 0x7fc00000, 0x3800001},
6535{0x3800000, 0x317285d3, 0xffbfffff, 0x7fc00000, 0x3800001},
6536{0x3800000, 0x317285d3, 0xffc00000, 0x7fc00000, 0x3800000},
6537{0x3800000, 0x317285d3, 0xffd9ba98, 0x7fc00000, 0x3800000},
6538{0x3800000, 0x317285d3, 0xffffffff, 0x7fc00000, 0x3800000},
6539{0x3800000, 0x317285d3, 0x4f3495cb, 0x4f3495cb, 0x3800010},
6540{0x3800000, 0x317285d3, 0xe73a5134, 0xe73a5134, 0x3800010},
6541{0x3800000, 0x317285d3, 0x7c994e9e, 0x7c994e9e, 0x3800010},
6542{0x3800000, 0x317285d3, 0x6164bd6c, 0x6164bd6c, 0x3800010},
6543{0x3800000, 0x317285d3, 0x9503366, 0x317285d3, 0x3800010},
6544{0x3800000, 0x317285d3, 0xbf5a97c9, 0xbf5a97c9, 0x3800010},
6545{0x3800000, 0x317285d3, 0xe6ff1a14, 0xe6ff1a14, 0x3800010},
6546{0x3800000, 0x317285d3, 0x77f31e2f, 0x77f31e2f, 0x3800010},
6547{0x3800000, 0x317285d3, 0xaab4d7d8, 0x3172802c, 0x3800010},
6548{0x3800000, 0x317285d3, 0x966320b, 0x317285d3, 0x3800010},
6549{0x3800000, 0x317285d3, 0xb26bddee, 0xb22f3c7a, 0x3800010},
6550{0x3800000, 0x317285d3, 0xb5c8e5d3, 0xb5c86c91, 0x3800010},
6551{0x3800000, 0x317285d3, 0x317285d3, 0x31f285d3, 0x3800000},
6552{0x3800000, 0x317285d3, 0x3c9623b1, 0x3c9623b2, 0x3800010},
6553{0x3800000, 0x317285d3, 0x51fd2c7c, 0x51fd2c7c, 0x3800010},
6554{0x3800000, 0x317285d3, 0x7b906a6c, 0x7b906a6c, 0x3800010},
6555{0x3800000, 0x3c9623b1, 0x0, 0x3c9623b1, 0x3800000},
6556{0x3800000, 0x3c9623b1, 0x1, 0x3c9623b1, 0x3800080},
6557{0x3800000, 0x3c9623b1, 0x76, 0x3c9623b1, 0x3800080},
6558{0x3800000, 0x3c9623b1, 0x2b94, 0x3c9623b1, 0x3800080},
6559{0x3800000, 0x3c9623b1, 0x636d24, 0x3c9623b1, 0x3800080},
6560{0x3800000, 0x3c9623b1, 0x7fffff, 0x3c9623b1, 0x3800080},
6561{0x3800000, 0x3c9623b1, 0x800000, 0x3c9623b1, 0x3800010},
6562{0x3800000, 0x3c9623b1, 0x800002, 0x3c9623b1, 0x3800010},
6563{0x3800000, 0x3c9623b1, 0x1398437, 0x3c9623b1, 0x3800010},
6564{0x3800000, 0x3c9623b1, 0xba98d27, 0x3c9623b1, 0x3800010},
6565{0x3800000, 0x3c9623b1, 0xba98d7a, 0x3c9623b1, 0x3800010},
6566{0x3800000, 0x3c9623b1, 0x751f853a, 0x751f853a, 0x3800010},
6567{0x3800000, 0x3c9623b1, 0x7f7ffff0, 0x7f7ffff0, 0x3800010},
6568{0x3800000, 0x3c9623b1, 0x7f7fffff, 0x7f7fffff, 0x3800010},
6569{0x3800000, 0x3c9623b1, 0x7f800000, 0x7f800000, 0x3800000},
6570{0x3800000, 0x3c9623b1, 0x7f800001, 0x7fc00000, 0x3800001},
6571{0x3800000, 0x3c9623b1, 0x7f984a37, 0x7fc00000, 0x3800001},
6572{0x3800000, 0x3c9623b1, 0x7fbfffff, 0x7fc00000, 0x3800001},
6573{0x3800000, 0x3c9623b1, 0x7fc00000, 0x7fc00000, 0x3800000},
6574{0x3800000, 0x3c9623b1, 0x7fd9ba98, 0x7fc00000, 0x3800000},
6575{0x3800000, 0x3c9623b1, 0x7fffffff, 0x7fc00000, 0x3800000},
6576{0x3800000, 0x3c9623b1, 0x80000000, 0x3c9623b1, 0x3800000},
6577{0x3800000, 0x3c9623b1, 0x80000001, 0x3c9623b1, 0x3800080},
6578{0x3800000, 0x3c9623b1, 0x80000076, 0x3c9623b1, 0x3800080},
6579{0x3800000, 0x3c9623b1, 0x80002b94, 0x3c9623b1, 0x3800080},
6580{0x3800000, 0x3c9623b1, 0x80636d24, 0x3c9623b1, 0x3800080},
6581{0x3800000, 0x3c9623b1, 0x807fffff, 0x3c9623b1, 0x3800080},
6582{0x3800000, 0x3c9623b1, 0x80800000, 0x3c9623b0, 0x3800010},
6583{0x3800000, 0x3c9623b1, 0x80800002, 0x3c9623b0, 0x3800010},
6584{0x3800000, 0x3c9623b1, 0x81398437, 0x3c9623b0, 0x3800010},
6585{0x3800000, 0x3c9623b1, 0x8ba98d27, 0x3c9623b0, 0x3800010},
6586{0x3800000, 0x3c9623b1, 0x8ba98d7a, 0x3c9623b0, 0x3800010},
6587{0x3800000, 0x3c9623b1, 0xf51f853a, 0xf51f853a, 0x3800010},
6588{0x3800000, 0x3c9623b1, 0xff7ffff0, 0xff7ffff0, 0x3800010},
6589{0x3800000, 0x3c9623b1, 0xff7fffff, 0xff7fffff, 0x3800010},
6590{0x3800000, 0x3c9623b1, 0xff800000, 0xff800000, 0x3800000},
6591{0x3800000, 0x3c9623b1, 0xff800001, 0x7fc00000, 0x3800001},
6592{0x3800000, 0x3c9623b1, 0xff984a37, 0x7fc00000, 0x3800001},
6593{0x3800000, 0x3c9623b1, 0xffbfffff, 0x7fc00000, 0x3800001},
6594{0x3800000, 0x3c9623b1, 0xffc00000, 0x7fc00000, 0x3800000},
6595{0x3800000, 0x3c9623b1, 0xffd9ba98, 0x7fc00000, 0x3800000},
6596{0x3800000, 0x3c9623b1, 0xffffffff, 0x7fc00000, 0x3800000},
6597{0x3800000, 0x3c9623b1, 0x4f3495cb, 0x4f3495cb, 0x3800010},
6598{0x3800000, 0x3c9623b1, 0xe73a5134, 0xe73a5134, 0x3800010},
6599{0x3800000, 0x3c9623b1, 0x7c994e9e, 0x7c994e9e, 0x3800010},
6600{0x3800000, 0x3c9623b1, 0x6164bd6c, 0x6164bd6c, 0x3800010},
6601{0x3800000, 0x3c9623b1, 0x9503366, 0x3c9623b1, 0x3800010},
6602{0x3800000, 0x3c9623b1, 0xbf5a97c9, 0xbf55e6ac, 0x3800010},
6603{0x3800000, 0x3c9623b1, 0xe6ff1a14, 0xe6ff1a14, 0x3800010},
6604{0x3800000, 0x3c9623b1, 0x77f31e2f, 0x77f31e2f, 0x3800010},
6605{0x3800000, 0x3c9623b1, 0xaab4d7d8, 0x3c9623b0, 0x3800010},
6606{0x3800000, 0x3c9623b1, 0x966320b, 0x3c9623b1, 0x3800010},
6607{0x3800000, 0x3c9623b1, 0xb26bddee, 0x3c9623a9, 0x3800010},
6608{0x3800000, 0x3c9623b1, 0xb5c8e5d3, 0x3c96208d, 0x3800010},
6609{0x3800000, 0x3c9623b1, 0x317285d3, 0x3c9623b2, 0x3800010},
6610{0x3800000, 0x3c9623b1, 0x3c9623b1, 0x3d1623b1, 0x3800000},
6611{0x3800000, 0x3c9623b1, 0x51fd2c7c, 0x51fd2c7c, 0x3800010},
6612{0x3800000, 0x3c9623b1, 0x7b906a6c, 0x7b906a6c, 0x3800010},
6613{0x3800000, 0x51fd2c7c, 0x0, 0x51fd2c7c, 0x3800000},
6614{0x3800000, 0x51fd2c7c, 0x1, 0x51fd2c7c, 0x3800080},
6615{0x3800000, 0x51fd2c7c, 0x76, 0x51fd2c7c, 0x3800080},
6616{0x3800000, 0x51fd2c7c, 0x2b94, 0x51fd2c7c, 0x3800080},
6617{0x3800000, 0x51fd2c7c, 0x636d24, 0x51fd2c7c, 0x3800080},
6618{0x3800000, 0x51fd2c7c, 0x7fffff, 0x51fd2c7c, 0x3800080},
6619{0x3800000, 0x51fd2c7c, 0x800000, 0x51fd2c7c, 0x3800010},
6620{0x3800000, 0x51fd2c7c, 0x800002, 0x51fd2c7c, 0x3800010},
6621{0x3800000, 0x51fd2c7c, 0x1398437, 0x51fd2c7c, 0x3800010},
6622{0x3800000, 0x51fd2c7c, 0xba98d27, 0x51fd2c7c, 0x3800010},
6623{0x3800000, 0x51fd2c7c, 0xba98d7a, 0x51fd2c7c, 0x3800010},
6624{0x3800000, 0x51fd2c7c, 0x751f853a, 0x751f853a, 0x3800010},
6625{0x3800000, 0x51fd2c7c, 0x7f7ffff0, 0x7f7ffff0, 0x3800010},
6626{0x3800000, 0x51fd2c7c, 0x7f7fffff, 0x7f7fffff, 0x3800010},
6627{0x3800000, 0x51fd2c7c, 0x7f800000, 0x7f800000, 0x3800000},
6628{0x3800000, 0x51fd2c7c, 0x7f800001, 0x7fc00000, 0x3800001},
6629{0x3800000, 0x51fd2c7c, 0x7f984a37, 0x7fc00000, 0x3800001},
6630{0x3800000, 0x51fd2c7c, 0x7fbfffff, 0x7fc00000, 0x3800001},
6631{0x3800000, 0x51fd2c7c, 0x7fc00000, 0x7fc00000, 0x3800000},
6632{0x3800000, 0x51fd2c7c, 0x7fd9ba98, 0x7fc00000, 0x3800000},
6633{0x3800000, 0x51fd2c7c, 0x7fffffff, 0x7fc00000, 0x3800000},
6634{0x3800000, 0x51fd2c7c, 0x80000000, 0x51fd2c7c, 0x3800000},
6635{0x3800000, 0x51fd2c7c, 0x80000001, 0x51fd2c7c, 0x3800080},
6636{0x3800000, 0x51fd2c7c, 0x80000076, 0x51fd2c7c, 0x3800080},
6637{0x3800000, 0x51fd2c7c, 0x80002b94, 0x51fd2c7c, 0x3800080},
6638{0x3800000, 0x51fd2c7c, 0x80636d24, 0x51fd2c7c, 0x3800080},
6639{0x3800000, 0x51fd2c7c, 0x807fffff, 0x51fd2c7c, 0x3800080},
6640{0x3800000, 0x51fd2c7c, 0x80800000, 0x51fd2c7b, 0x3800010},
6641{0x3800000, 0x51fd2c7c, 0x80800002, 0x51fd2c7b, 0x3800010},
6642{0x3800000, 0x51fd2c7c, 0x81398437, 0x51fd2c7b, 0x3800010},
6643{0x3800000, 0x51fd2c7c, 0x8ba98d27, 0x51fd2c7b, 0x3800010},
6644{0x3800000, 0x51fd2c7c, 0x8ba98d7a, 0x51fd2c7b, 0x3800010},
6645{0x3800000, 0x51fd2c7c, 0xf51f853a, 0xf51f853a, 0x3800010},
6646{0x3800000, 0x51fd2c7c, 0xff7ffff0, 0xff7ffff0, 0x3800010},
6647{0x3800000, 0x51fd2c7c, 0xff7fffff, 0xff7fffff, 0x3800010},
6648{0x3800000, 0x51fd2c7c, 0xff800000, 0xff800000, 0x3800000},
6649{0x3800000, 0x51fd2c7c, 0xff800001, 0x7fc00000, 0x3800001},
6650{0x3800000, 0x51fd2c7c, 0xff984a37, 0x7fc00000, 0x3800001},
6651{0x3800000, 0x51fd2c7c, 0xffbfffff, 0x7fc00000, 0x3800001},
6652{0x3800000, 0x51fd2c7c, 0xffc00000, 0x7fc00000, 0x3800000},
6653{0x3800000, 0x51fd2c7c, 0xffd9ba98, 0x7fc00000, 0x3800000},
6654{0x3800000, 0x51fd2c7c, 0xffffffff, 0x7fc00000, 0x3800000},
6655{0x3800000, 0x51fd2c7c, 0x4f3495cb, 0x52016895, 0x3800010},
6656{0x3800000, 0x51fd2c7c, 0xe73a5134, 0xe73a5134, 0x3800010},
6657{0x3800000, 0x51fd2c7c, 0x7c994e9e, 0x7c994e9e, 0x3800010},
6658{0x3800000, 0x51fd2c7c, 0x6164bd6c, 0x6164bd6c, 0x3800010},
6659{0x3800000, 0x51fd2c7c, 0x9503366, 0x51fd2c7c, 0x3800010},
6660{0x3800000, 0x51fd2c7c, 0xbf5a97c9, 0x51fd2c7b, 0x3800010},
6661{0x3800000, 0x51fd2c7c, 0xe6ff1a14, 0xe6ff1a14, 0x3800010},
6662{0x3800000, 0x51fd2c7c, 0x77f31e2f, 0x77f31e2f, 0x3800010},
6663{0x3800000, 0x51fd2c7c, 0xaab4d7d8, 0x51fd2c7b, 0x3800010},
6664{0x3800000, 0x51fd2c7c, 0x966320b, 0x51fd2c7c, 0x3800010},
6665{0x3800000, 0x51fd2c7c, 0xb26bddee, 0x51fd2c7b, 0x3800010},
6666{0x3800000, 0x51fd2c7c, 0xb5c8e5d3, 0x51fd2c7b, 0x3800010},
6667{0x3800000, 0x51fd2c7c, 0x317285d3, 0x51fd2c7c, 0x3800010},
6668{0x3800000, 0x51fd2c7c, 0x3c9623b1, 0x51fd2c7c, 0x3800010},
6669{0x3800000, 0x51fd2c7c, 0x51fd2c7c, 0x527d2c7c, 0x3800000},
6670{0x3800000, 0x51fd2c7c, 0x7b906a6c, 0x7b906a6c, 0x3800010},
6671{0x3800000, 0x7b906a6c, 0x0, 0x7b906a6c, 0x3800000},
6672{0x3800000, 0x7b906a6c, 0x1, 0x7b906a6c, 0x3800080},
6673{0x3800000, 0x7b906a6c, 0x76, 0x7b906a6c, 0x3800080},
6674{0x3800000, 0x7b906a6c, 0x2b94, 0x7b906a6c, 0x3800080},
6675{0x3800000, 0x7b906a6c, 0x636d24, 0x7b906a6c, 0x3800080},
6676{0x3800000, 0x7b906a6c, 0x7fffff, 0x7b906a6c, 0x3800080},
6677{0x3800000, 0x7b906a6c, 0x800000, 0x7b906a6c, 0x3800010},
6678{0x3800000, 0x7b906a6c, 0x800002, 0x7b906a6c, 0x3800010},
6679{0x3800000, 0x7b906a6c, 0x1398437, 0x7b906a6c, 0x3800010},
6680{0x3800000, 0x7b906a6c, 0xba98d27, 0x7b906a6c, 0x3800010},
6681{0x3800000, 0x7b906a6c, 0xba98d7a, 0x7b906a6c, 0x3800010},
6682{0x3800000, 0x7b906a6c, 0x751f853a, 0x7b906f68, 0x3800010},
6683{0x3800000, 0x7b906a6c, 0x7f7ffff0, 0x7f7fffff, 0x3800014},
6684{0x3800000, 0x7b906a6c, 0x7f7fffff, 0x7f7fffff, 0x3800014},
6685{0x3800000, 0x7b906a6c, 0x7f800000, 0x7f800000, 0x3800000},
6686{0x3800000, 0x7b906a6c, 0x7f800001, 0x7fc00000, 0x3800001},
6687{0x3800000, 0x7b906a6c, 0x7f984a37, 0x7fc00000, 0x3800001},
6688{0x3800000, 0x7b906a6c, 0x7fbfffff, 0x7fc00000, 0x3800001},
6689{0x3800000, 0x7b906a6c, 0x7fc00000, 0x7fc00000, 0x3800000},
6690{0x3800000, 0x7b906a6c, 0x7fd9ba98, 0x7fc00000, 0x3800000},
6691{0x3800000, 0x7b906a6c, 0x7fffffff, 0x7fc00000, 0x3800000},
6692{0x3800000, 0x7b906a6c, 0x80000000, 0x7b906a6c, 0x3800000},
6693{0x3800000, 0x7b906a6c, 0x80000001, 0x7b906a6c, 0x3800080},
6694{0x3800000, 0x7b906a6c, 0x80000076, 0x7b906a6c, 0x3800080},
6695{0x3800000, 0x7b906a6c, 0x80002b94, 0x7b906a6c, 0x3800080},
6696{0x3800000, 0x7b906a6c, 0x80636d24, 0x7b906a6c, 0x3800080},
6697{0x3800000, 0x7b906a6c, 0x807fffff, 0x7b906a6c, 0x3800080},
6698{0x3800000, 0x7b906a6c, 0x80800000, 0x7b906a6b, 0x3800010},
6699{0x3800000, 0x7b906a6c, 0x80800002, 0x7b906a6b, 0x3800010},
6700{0x3800000, 0x7b906a6c, 0x81398437, 0x7b906a6b, 0x3800010},
6701{0x3800000, 0x7b906a6c, 0x8ba98d27, 0x7b906a6b, 0x3800010},
6702{0x3800000, 0x7b906a6c, 0x8ba98d7a, 0x7b906a6b, 0x3800010},
6703{0x3800000, 0x7b906a6c, 0xf51f853a, 0x7b90656f, 0x3800010},
6704{0x3800000, 0x7b906a6c, 0xff7ffff0, 0xff7edf1c, 0x3800010},
6705{0x3800000, 0x7b906a6c, 0xff7fffff, 0xff7edf2b, 0x3800010},
6706{0x3800000, 0x7b906a6c, 0xff800000, 0xff800000, 0x3800000},
6707{0x3800000, 0x7b906a6c, 0xff800001, 0x7fc00000, 0x3800001},
6708{0x3800000, 0x7b906a6c, 0xff984a37, 0x7fc00000, 0x3800001},
6709{0x3800000, 0x7b906a6c, 0xffbfffff, 0x7fc00000, 0x3800001},
6710{0x3800000, 0x7b906a6c, 0xffc00000, 0x7fc00000, 0x3800000},
6711{0x3800000, 0x7b906a6c, 0xffd9ba98, 0x7fc00000, 0x3800000},
6712{0x3800000, 0x7b906a6c, 0xffffffff, 0x7fc00000, 0x3800000},
6713{0x3800000, 0x7b906a6c, 0x4f3495cb, 0x7b906a6c, 0x3800010},
6714{0x3800000, 0x7b906a6c, 0xe73a5134, 0x7b906a6b, 0x3800010},
6715{0x3800000, 0x7b906a6c, 0x7c994e9e, 0x7cbd6939, 0x3800000},
6716{0x3800000, 0x7b906a6c, 0x6164bd6c, 0x7b906a6c, 0x3800010},
6717{0x3800000, 0x7b906a6c, 0x9503366, 0x7b906a6c, 0x3800010},
6718{0x3800000, 0x7b906a6c, 0xbf5a97c9, 0x7b906a6b, 0x3800010},
6719{0x3800000, 0x7b906a6c, 0xe6ff1a14, 0x7b906a6b, 0x3800010},
6720{0x3800000, 0x7b906a6c, 0x77f31e2f, 0x7b915d8a, 0x3800010},
6721{0x3800000, 0x7b906a6c, 0xaab4d7d8, 0x7b906a6b, 0x3800010},
6722{0x3800000, 0x7b906a6c, 0x966320b, 0x7b906a6c, 0x3800010},
6723{0x3800000, 0x7b906a6c, 0xb26bddee, 0x7b906a6b, 0x3800010},
6724{0x3800000, 0x7b906a6c, 0xb5c8e5d3, 0x7b906a6b, 0x3800010},
6725{0x3800000, 0x7b906a6c, 0x317285d3, 0x7b906a6c, 0x3800010},
6726{0x3800000, 0x7b906a6c, 0x3c9623b1, 0x7b906a6c, 0x3800010},
6727{0x3800000, 0x7b906a6c, 0x51fd2c7c, 0x7b906a6c, 0x3800010},
6728{0x3800000, 0x7b906a6c, 0x7b906a6c, 0x7c106a6c, 0x3800000},
6729{0x3400000, 0x0, 0x0, 0x0, 0x3400000},
6730{0x3400000, 0x0, 0x1, 0x0, 0x3400080},
6731{0x3400000, 0x0, 0x76, 0x0, 0x3400080},
6732{0x3400000, 0x0, 0x2b94, 0x0, 0x3400080},
6733{0x3400000, 0x0, 0x636d24, 0x0, 0x3400080},
6734{0x3400000, 0x0, 0x7fffff, 0x0, 0x3400080},
6735{0x3400000, 0x0, 0x800000, 0x800000, 0x3400000},
6736{0x3400000, 0x0, 0x800002, 0x800002, 0x3400000},
6737{0x3400000, 0x0, 0x1398437, 0x1398437, 0x3400000},
6738{0x3400000, 0x0, 0xba98d27, 0xba98d27, 0x3400000},
6739{0x3400000, 0x0, 0xba98d7a, 0xba98d7a, 0x3400000},
6740{0x3400000, 0x0, 0x751f853a, 0x751f853a, 0x3400000},
6741{0x3400000, 0x0, 0x7f7ffff0, 0x7f7ffff0, 0x3400000},
6742{0x3400000, 0x0, 0x7f7fffff, 0x7f7fffff, 0x3400000},
6743{0x3400000, 0x0, 0x7f800000, 0x7f800000, 0x3400000},
6744{0x3400000, 0x0, 0x7f800001, 0x7fc00000, 0x3400001},
6745{0x3400000, 0x0, 0x7f984a37, 0x7fc00000, 0x3400001},
6746{0x3400000, 0x0, 0x7fbfffff, 0x7fc00000, 0x3400001},
6747{0x3400000, 0x0, 0x7fc00000, 0x7fc00000, 0x3400000},
6748{0x3400000, 0x0, 0x7fd9ba98, 0x7fc00000, 0x3400000},
6749{0x3400000, 0x0, 0x7fffffff, 0x7fc00000, 0x3400000},
6750{0x3400000, 0x0, 0x80000000, 0x0, 0x3400000},
6751{0x3400000, 0x0, 0x80000001, 0x0, 0x3400080},
6752{0x3400000, 0x0, 0x80000076, 0x0, 0x3400080},
6753{0x3400000, 0x0, 0x80002b94, 0x0, 0x3400080},
6754{0x3400000, 0x0, 0x80636d24, 0x0, 0x3400080},
6755{0x3400000, 0x0, 0x807fffff, 0x0, 0x3400080},
6756{0x3400000, 0x0, 0x80800000, 0x80800000, 0x3400000},
6757{0x3400000, 0x0, 0x80800002, 0x80800002, 0x3400000},
6758{0x3400000, 0x0, 0x81398437, 0x81398437, 0x3400000},
6759{0x3400000, 0x0, 0x8ba98d27, 0x8ba98d27, 0x3400000},
6760{0x3400000, 0x0, 0x8ba98d7a, 0x8ba98d7a, 0x3400000},
6761{0x3400000, 0x0, 0xf51f853a, 0xf51f853a, 0x3400000},
6762{0x3400000, 0x0, 0xff7ffff0, 0xff7ffff0, 0x3400000},
6763{0x3400000, 0x0, 0xff7fffff, 0xff7fffff, 0x3400000},
6764{0x3400000, 0x0, 0xff800000, 0xff800000, 0x3400000},
6765{0x3400000, 0x0, 0xff800001, 0x7fc00000, 0x3400001},
6766{0x3400000, 0x0, 0xff984a37, 0x7fc00000, 0x3400001},
6767{0x3400000, 0x0, 0xffbfffff, 0x7fc00000, 0x3400001},
6768{0x3400000, 0x0, 0xffc00000, 0x7fc00000, 0x3400000},
6769{0x3400000, 0x0, 0xffd9ba98, 0x7fc00000, 0x3400000},
6770{0x3400000, 0x0, 0xffffffff, 0x7fc00000, 0x3400000},
6771{0x3400000, 0x0, 0x4f3495cb, 0x4f3495cb, 0x3400000},
6772{0x3400000, 0x0, 0xe73a5134, 0xe73a5134, 0x3400000},
6773{0x3400000, 0x0, 0x7c994e9e, 0x7c994e9e, 0x3400000},
6774{0x3400000, 0x0, 0x6164bd6c, 0x6164bd6c, 0x3400000},
6775{0x3400000, 0x0, 0x9503366, 0x9503366, 0x3400000},
6776{0x3400000, 0x0, 0xbf5a97c9, 0xbf5a97c9, 0x3400000},
6777{0x3400000, 0x0, 0xe6ff1a14, 0xe6ff1a14, 0x3400000},
6778{0x3400000, 0x0, 0x77f31e2f, 0x77f31e2f, 0x3400000},
6779{0x3400000, 0x0, 0xaab4d7d8, 0xaab4d7d8, 0x3400000},
6780{0x3400000, 0x0, 0x966320b, 0x966320b, 0x3400000},
6781{0x3400000, 0x0, 0xb26bddee, 0xb26bddee, 0x3400000},
6782{0x3400000, 0x0, 0xb5c8e5d3, 0xb5c8e5d3, 0x3400000},
6783{0x3400000, 0x0, 0x317285d3, 0x317285d3, 0x3400000},
6784{0x3400000, 0x0, 0x3c9623b1, 0x3c9623b1, 0x3400000},
6785{0x3400000, 0x0, 0x51fd2c7c, 0x51fd2c7c, 0x3400000},
6786{0x3400000, 0x0, 0x7b906a6c, 0x7b906a6c, 0x3400000},
6787{0x3400000, 0x1, 0x0, 0x0, 0x3400080},
6788{0x3400000, 0x1, 0x1, 0x0, 0x3400080},
6789{0x3400000, 0x1, 0x76, 0x0, 0x3400080},
6790{0x3400000, 0x1, 0x2b94, 0x0, 0x3400080},
6791{0x3400000, 0x1, 0x636d24, 0x0, 0x3400080},
6792{0x3400000, 0x1, 0x7fffff, 0x0, 0x3400080},
6793{0x3400000, 0x1, 0x800000, 0x800000, 0x3400080},
6794{0x3400000, 0x1, 0x800002, 0x800002, 0x3400080},
6795{0x3400000, 0x1, 0x1398437, 0x1398437, 0x3400080},
6796{0x3400000, 0x1, 0xba98d27, 0xba98d27, 0x3400080},
6797{0x3400000, 0x1, 0xba98d7a, 0xba98d7a, 0x3400080},
6798{0x3400000, 0x1, 0x751f853a, 0x751f853a, 0x3400080},
6799{0x3400000, 0x1, 0x7f7ffff0, 0x7f7ffff0, 0x3400080},
6800{0x3400000, 0x1, 0x7f7fffff, 0x7f7fffff, 0x3400080},
6801{0x3400000, 0x1, 0x7f800000, 0x7f800000, 0x3400080},
6802{0x3400000, 0x1, 0x7f800001, 0x7fc00000, 0x3400081},
6803{0x3400000, 0x1, 0x7f984a37, 0x7fc00000, 0x3400081},
6804{0x3400000, 0x1, 0x7fbfffff, 0x7fc00000, 0x3400081},
6805{0x3400000, 0x1, 0x7fc00000, 0x7fc00000, 0x3400080},
6806{0x3400000, 0x1, 0x7fd9ba98, 0x7fc00000, 0x3400080},
6807{0x3400000, 0x1, 0x7fffffff, 0x7fc00000, 0x3400080},
6808{0x3400000, 0x1, 0x80000000, 0x0, 0x3400080},
6809{0x3400000, 0x1, 0x80000001, 0x0, 0x3400080},
6810{0x3400000, 0x1, 0x80000076, 0x0, 0x3400080},
6811{0x3400000, 0x1, 0x80002b94, 0x0, 0x3400080},
6812{0x3400000, 0x1, 0x80636d24, 0x0, 0x3400080},
6813{0x3400000, 0x1, 0x807fffff, 0x0, 0x3400080},
6814{0x3400000, 0x1, 0x80800000, 0x80800000, 0x3400080},
6815{0x3400000, 0x1, 0x80800002, 0x80800002, 0x3400080},
6816{0x3400000, 0x1, 0x81398437, 0x81398437, 0x3400080},
6817{0x3400000, 0x1, 0x8ba98d27, 0x8ba98d27, 0x3400080},
6818{0x3400000, 0x1, 0x8ba98d7a, 0x8ba98d7a, 0x3400080},
6819{0x3400000, 0x1, 0xf51f853a, 0xf51f853a, 0x3400080},
6820{0x3400000, 0x1, 0xff7ffff0, 0xff7ffff0, 0x3400080},
6821{0x3400000, 0x1, 0xff7fffff, 0xff7fffff, 0x3400080},
6822{0x3400000, 0x1, 0xff800000, 0xff800000, 0x3400080},
6823{0x3400000, 0x1, 0xff800001, 0x7fc00000, 0x3400081},
6824{0x3400000, 0x1, 0xff984a37, 0x7fc00000, 0x3400081},
6825{0x3400000, 0x1, 0xffbfffff, 0x7fc00000, 0x3400081},
6826{0x3400000, 0x1, 0xffc00000, 0x7fc00000, 0x3400080},
6827{0x3400000, 0x1, 0xffd9ba98, 0x7fc00000, 0x3400080},
6828{0x3400000, 0x1, 0xffffffff, 0x7fc00000, 0x3400080},
6829{0x3400000, 0x1, 0x4f3495cb, 0x4f3495cb, 0x3400080},
6830{0x3400000, 0x1, 0xe73a5134, 0xe73a5134, 0x3400080},
6831{0x3400000, 0x1, 0x7c994e9e, 0x7c994e9e, 0x3400080},
6832{0x3400000, 0x1, 0x6164bd6c, 0x6164bd6c, 0x3400080},
6833{0x3400000, 0x1, 0x9503366, 0x9503366, 0x3400080},
6834{0x3400000, 0x1, 0xbf5a97c9, 0xbf5a97c9, 0x3400080},
6835{0x3400000, 0x1, 0xe6ff1a14, 0xe6ff1a14, 0x3400080},
6836{0x3400000, 0x1, 0x77f31e2f, 0x77f31e2f, 0x3400080},
6837{0x3400000, 0x1, 0xaab4d7d8, 0xaab4d7d8, 0x3400080},
6838{0x3400000, 0x1, 0x966320b, 0x966320b, 0x3400080},
6839{0x3400000, 0x1, 0xb26bddee, 0xb26bddee, 0x3400080},
6840{0x3400000, 0x1, 0xb5c8e5d3, 0xb5c8e5d3, 0x3400080},
6841{0x3400000, 0x1, 0x317285d3, 0x317285d3, 0x3400080},
6842{0x3400000, 0x1, 0x3c9623b1, 0x3c9623b1, 0x3400080},
6843{0x3400000, 0x1, 0x51fd2c7c, 0x51fd2c7c, 0x3400080},
6844{0x3400000, 0x1, 0x7b906a6c, 0x7b906a6c, 0x3400080},
6845{0x3400000, 0x76, 0x0, 0x0, 0x3400080},
6846{0x3400000, 0x76, 0x1, 0x0, 0x3400080},
6847{0x3400000, 0x76, 0x76, 0x0, 0x3400080},
6848{0x3400000, 0x76, 0x2b94, 0x0, 0x3400080},
6849{0x3400000, 0x76, 0x636d24, 0x0, 0x3400080},
6850{0x3400000, 0x76, 0x7fffff, 0x0, 0x3400080},
6851{0x3400000, 0x76, 0x800000, 0x800000, 0x3400080},
6852{0x3400000, 0x76, 0x800002, 0x800002, 0x3400080},
6853{0x3400000, 0x76, 0x1398437, 0x1398437, 0x3400080},
6854{0x3400000, 0x76, 0xba98d27, 0xba98d27, 0x3400080},
6855{0x3400000, 0x76, 0xba98d7a, 0xba98d7a, 0x3400080},
6856{0x3400000, 0x76, 0x751f853a, 0x751f853a, 0x3400080},
6857{0x3400000, 0x76, 0x7f7ffff0, 0x7f7ffff0, 0x3400080},
6858{0x3400000, 0x76, 0x7f7fffff, 0x7f7fffff, 0x3400080},
6859{0x3400000, 0x76, 0x7f800000, 0x7f800000, 0x3400080},
6860{0x3400000, 0x76, 0x7f800001, 0x7fc00000, 0x3400081},
6861{0x3400000, 0x76, 0x7f984a37, 0x7fc00000, 0x3400081},
6862{0x3400000, 0x76, 0x7fbfffff, 0x7fc00000, 0x3400081},
6863{0x3400000, 0x76, 0x7fc00000, 0x7fc00000, 0x3400080},
6864{0x3400000, 0x76, 0x7fd9ba98, 0x7fc00000, 0x3400080},
6865{0x3400000, 0x76, 0x7fffffff, 0x7fc00000, 0x3400080},
6866{0x3400000, 0x76, 0x80000000, 0x0, 0x3400080},
6867{0x3400000, 0x76, 0x80000001, 0x0, 0x3400080},
6868{0x3400000, 0x76, 0x80000076, 0x0, 0x3400080},
6869{0x3400000, 0x76, 0x80002b94, 0x0, 0x3400080},
6870{0x3400000, 0x76, 0x80636d24, 0x0, 0x3400080},
6871{0x3400000, 0x76, 0x807fffff, 0x0, 0x3400080},
6872{0x3400000, 0x76, 0x80800000, 0x80800000, 0x3400080},
6873{0x3400000, 0x76, 0x80800002, 0x80800002, 0x3400080},
6874{0x3400000, 0x76, 0x81398437, 0x81398437, 0x3400080},
6875{0x3400000, 0x76, 0x8ba98d27, 0x8ba98d27, 0x3400080},
6876{0x3400000, 0x76, 0x8ba98d7a, 0x8ba98d7a, 0x3400080},
6877{0x3400000, 0x76, 0xf51f853a, 0xf51f853a, 0x3400080},
6878{0x3400000, 0x76, 0xff7ffff0, 0xff7ffff0, 0x3400080},
6879{0x3400000, 0x76, 0xff7fffff, 0xff7fffff, 0x3400080},
6880{0x3400000, 0x76, 0xff800000, 0xff800000, 0x3400080},
6881{0x3400000, 0x76, 0xff800001, 0x7fc00000, 0x3400081},
6882{0x3400000, 0x76, 0xff984a37, 0x7fc00000, 0x3400081},
6883{0x3400000, 0x76, 0xffbfffff, 0x7fc00000, 0x3400081},
6884{0x3400000, 0x76, 0xffc00000, 0x7fc00000, 0x3400080},
6885{0x3400000, 0x76, 0xffd9ba98, 0x7fc00000, 0x3400080},
6886{0x3400000, 0x76, 0xffffffff, 0x7fc00000, 0x3400080},
6887{0x3400000, 0x76, 0x4f3495cb, 0x4f3495cb, 0x3400080},
6888{0x3400000, 0x76, 0xe73a5134, 0xe73a5134, 0x3400080},
6889{0x3400000, 0x76, 0x7c994e9e, 0x7c994e9e, 0x3400080},
6890{0x3400000, 0x76, 0x6164bd6c, 0x6164bd6c, 0x3400080},
6891{0x3400000, 0x76, 0x9503366, 0x9503366, 0x3400080},
6892{0x3400000, 0x76, 0xbf5a97c9, 0xbf5a97c9, 0x3400080},
6893{0x3400000, 0x76, 0xe6ff1a14, 0xe6ff1a14, 0x3400080},
6894{0x3400000, 0x76, 0x77f31e2f, 0x77f31e2f, 0x3400080},
6895{0x3400000, 0x76, 0xaab4d7d8, 0xaab4d7d8, 0x3400080},
6896{0x3400000, 0x76, 0x966320b, 0x966320b, 0x3400080},
6897{0x3400000, 0x76, 0xb26bddee, 0xb26bddee, 0x3400080},
6898{0x3400000, 0x76, 0xb5c8e5d3, 0xb5c8e5d3, 0x3400080},
6899{0x3400000, 0x76, 0x317285d3, 0x317285d3, 0x3400080},
6900{0x3400000, 0x76, 0x3c9623b1, 0x3c9623b1, 0x3400080},
6901{0x3400000, 0x76, 0x51fd2c7c, 0x51fd2c7c, 0x3400080},
6902{0x3400000, 0x76, 0x7b906a6c, 0x7b906a6c, 0x3400080},
6903{0x3400000, 0x2b94, 0x0, 0x0, 0x3400080},
6904{0x3400000, 0x2b94, 0x1, 0x0, 0x3400080},
6905{0x3400000, 0x2b94, 0x76, 0x0, 0x3400080},
6906{0x3400000, 0x2b94, 0x2b94, 0x0, 0x3400080},
6907{0x3400000, 0x2b94, 0x636d24, 0x0, 0x3400080},
6908{0x3400000, 0x2b94, 0x7fffff, 0x0, 0x3400080},
6909{0x3400000, 0x2b94, 0x800000, 0x800000, 0x3400080},
6910{0x3400000, 0x2b94, 0x800002, 0x800002, 0x3400080},
6911{0x3400000, 0x2b94, 0x1398437, 0x1398437, 0x3400080},
6912{0x3400000, 0x2b94, 0xba98d27, 0xba98d27, 0x3400080},
6913{0x3400000, 0x2b94, 0xba98d7a, 0xba98d7a, 0x3400080},
6914{0x3400000, 0x2b94, 0x751f853a, 0x751f853a, 0x3400080},
6915{0x3400000, 0x2b94, 0x7f7ffff0, 0x7f7ffff0, 0x3400080},
6916{0x3400000, 0x2b94, 0x7f7fffff, 0x7f7fffff, 0x3400080},
6917{0x3400000, 0x2b94, 0x7f800000, 0x7f800000, 0x3400080},
6918{0x3400000, 0x2b94, 0x7f800001, 0x7fc00000, 0x3400081},
6919{0x3400000, 0x2b94, 0x7f984a37, 0x7fc00000, 0x3400081},
6920{0x3400000, 0x2b94, 0x7fbfffff, 0x7fc00000, 0x3400081},
6921{0x3400000, 0x2b94, 0x7fc00000, 0x7fc00000, 0x3400080},
6922{0x3400000, 0x2b94, 0x7fd9ba98, 0x7fc00000, 0x3400080},
6923{0x3400000, 0x2b94, 0x7fffffff, 0x7fc00000, 0x3400080},
6924{0x3400000, 0x2b94, 0x80000000, 0x0, 0x3400080},
6925{0x3400000, 0x2b94, 0x80000001, 0x0, 0x3400080},
6926{0x3400000, 0x2b94, 0x80000076, 0x0, 0x3400080},
6927{0x3400000, 0x2b94, 0x80002b94, 0x0, 0x3400080},
6928{0x3400000, 0x2b94, 0x80636d24, 0x0, 0x3400080},
6929{0x3400000, 0x2b94, 0x807fffff, 0x0, 0x3400080},
6930{0x3400000, 0x2b94, 0x80800000, 0x80800000, 0x3400080},
6931{0x3400000, 0x2b94, 0x80800002, 0x80800002, 0x3400080},
6932{0x3400000, 0x2b94, 0x81398437, 0x81398437, 0x3400080},
6933{0x3400000, 0x2b94, 0x8ba98d27, 0x8ba98d27, 0x3400080},
6934{0x3400000, 0x2b94, 0x8ba98d7a, 0x8ba98d7a, 0x3400080},
6935{0x3400000, 0x2b94, 0xf51f853a, 0xf51f853a, 0x3400080},
6936{0x3400000, 0x2b94, 0xff7ffff0, 0xff7ffff0, 0x3400080},
6937{0x3400000, 0x2b94, 0xff7fffff, 0xff7fffff, 0x3400080},
6938{0x3400000, 0x2b94, 0xff800000, 0xff800000, 0x3400080},
6939{0x3400000, 0x2b94, 0xff800001, 0x7fc00000, 0x3400081},
6940{0x3400000, 0x2b94, 0xff984a37, 0x7fc00000, 0x3400081},
6941{0x3400000, 0x2b94, 0xffbfffff, 0x7fc00000, 0x3400081},
6942{0x3400000, 0x2b94, 0xffc00000, 0x7fc00000, 0x3400080},
6943{0x3400000, 0x2b94, 0xffd9ba98, 0x7fc00000, 0x3400080},
6944{0x3400000, 0x2b94, 0xffffffff, 0x7fc00000, 0x3400080},
6945{0x3400000, 0x2b94, 0x4f3495cb, 0x4f3495cb, 0x3400080},
6946{0x3400000, 0x2b94, 0xe73a5134, 0xe73a5134, 0x3400080},
6947{0x3400000, 0x2b94, 0x7c994e9e, 0x7c994e9e, 0x3400080},
6948{0x3400000, 0x2b94, 0x6164bd6c, 0x6164bd6c, 0x3400080},
6949{0x3400000, 0x2b94, 0x9503366, 0x9503366, 0x3400080},
6950{0x3400000, 0x2b94, 0xbf5a97c9, 0xbf5a97c9, 0x3400080},
6951{0x3400000, 0x2b94, 0xe6ff1a14, 0xe6ff1a14, 0x3400080},
6952{0x3400000, 0x2b94, 0x77f31e2f, 0x77f31e2f, 0x3400080},
6953{0x3400000, 0x2b94, 0xaab4d7d8, 0xaab4d7d8, 0x3400080},
6954{0x3400000, 0x2b94, 0x966320b, 0x966320b, 0x3400080},
6955{0x3400000, 0x2b94, 0xb26bddee, 0xb26bddee, 0x3400080},
6956{0x3400000, 0x2b94, 0xb5c8e5d3, 0xb5c8e5d3, 0x3400080},
6957{0x3400000, 0x2b94, 0x317285d3, 0x317285d3, 0x3400080},
6958{0x3400000, 0x2b94, 0x3c9623b1, 0x3c9623b1, 0x3400080},
6959{0x3400000, 0x2b94, 0x51fd2c7c, 0x51fd2c7c, 0x3400080},
6960{0x3400000, 0x2b94, 0x7b906a6c, 0x7b906a6c, 0x3400080},
6961{0x3400000, 0x636d24, 0x0, 0x0, 0x3400080},
6962{0x3400000, 0x636d24, 0x1, 0x0, 0x3400080},
6963{0x3400000, 0x636d24, 0x76, 0x0, 0x3400080},
6964{0x3400000, 0x636d24, 0x2b94, 0x0, 0x3400080},
6965{0x3400000, 0x636d24, 0x636d24, 0x0, 0x3400080},
6966{0x3400000, 0x636d24, 0x7fffff, 0x0, 0x3400080},
6967{0x3400000, 0x636d24, 0x800000, 0x800000, 0x3400080},
6968{0x3400000, 0x636d24, 0x800002, 0x800002, 0x3400080},
6969{0x3400000, 0x636d24, 0x1398437, 0x1398437, 0x3400080},
6970{0x3400000, 0x636d24, 0xba98d27, 0xba98d27, 0x3400080},
6971{0x3400000, 0x636d24, 0xba98d7a, 0xba98d7a, 0x3400080},
6972{0x3400000, 0x636d24, 0x751f853a, 0x751f853a, 0x3400080},
6973{0x3400000, 0x636d24, 0x7f7ffff0, 0x7f7ffff0, 0x3400080},
6974{0x3400000, 0x636d24, 0x7f7fffff, 0x7f7fffff, 0x3400080},
6975{0x3400000, 0x636d24, 0x7f800000, 0x7f800000, 0x3400080},
6976{0x3400000, 0x636d24, 0x7f800001, 0x7fc00000, 0x3400081},
6977{0x3400000, 0x636d24, 0x7f984a37, 0x7fc00000, 0x3400081},
6978{0x3400000, 0x636d24, 0x7fbfffff, 0x7fc00000, 0x3400081},
6979{0x3400000, 0x636d24, 0x7fc00000, 0x7fc00000, 0x3400080},
6980{0x3400000, 0x636d24, 0x7fd9ba98, 0x7fc00000, 0x3400080},
6981{0x3400000, 0x636d24, 0x7fffffff, 0x7fc00000, 0x3400080},
6982{0x3400000, 0x636d24, 0x80000000, 0x0, 0x3400080},
6983{0x3400000, 0x636d24, 0x80000001, 0x0, 0x3400080},
6984{0x3400000, 0x636d24, 0x80000076, 0x0, 0x3400080},
6985{0x3400000, 0x636d24, 0x80002b94, 0x0, 0x3400080},
6986{0x3400000, 0x636d24, 0x80636d24, 0x0, 0x3400080},
6987{0x3400000, 0x636d24, 0x807fffff, 0x0, 0x3400080},
6988{0x3400000, 0x636d24, 0x80800000, 0x80800000, 0x3400080},
6989{0x3400000, 0x636d24, 0x80800002, 0x80800002, 0x3400080},
6990{0x3400000, 0x636d24, 0x81398437, 0x81398437, 0x3400080},
6991{0x3400000, 0x636d24, 0x8ba98d27, 0x8ba98d27, 0x3400080},
6992{0x3400000, 0x636d24, 0x8ba98d7a, 0x8ba98d7a, 0x3400080},
6993{0x3400000, 0x636d24, 0xf51f853a, 0xf51f853a, 0x3400080},
6994{0x3400000, 0x636d24, 0xff7ffff0, 0xff7ffff0, 0x3400080},
6995{0x3400000, 0x636d24, 0xff7fffff, 0xff7fffff, 0x3400080},
6996{0x3400000, 0x636d24, 0xff800000, 0xff800000, 0x3400080},
6997{0x3400000, 0x636d24, 0xff800001, 0x7fc00000, 0x3400081},
6998{0x3400000, 0x636d24, 0xff984a37, 0x7fc00000, 0x3400081},
6999{0x3400000, 0x636d24, 0xffbfffff, 0x7fc00000, 0x3400081},
7000{0x3400000, 0x636d24, 0xffc00000, 0x7fc00000, 0x3400080},
7001{0x3400000, 0x636d24, 0xffd9ba98, 0x7fc00000, 0x3400080},
7002{0x3400000, 0x636d24, 0xffffffff, 0x7fc00000, 0x3400080},
7003{0x3400000, 0x636d24, 0x4f3495cb, 0x4f3495cb, 0x3400080},
7004{0x3400000, 0x636d24, 0xe73a5134, 0xe73a5134, 0x3400080},
7005{0x3400000, 0x636d24, 0x7c994e9e, 0x7c994e9e, 0x3400080},
7006{0x3400000, 0x636d24, 0x6164bd6c, 0x6164bd6c, 0x3400080},
7007{0x3400000, 0x636d24, 0x9503366, 0x9503366, 0x3400080},
7008{0x3400000, 0x636d24, 0xbf5a97c9, 0xbf5a97c9, 0x3400080},
7009{0x3400000, 0x636d24, 0xe6ff1a14, 0xe6ff1a14, 0x3400080},
7010{0x3400000, 0x636d24, 0x77f31e2f, 0x77f31e2f, 0x3400080},
7011{0x3400000, 0x636d24, 0xaab4d7d8, 0xaab4d7d8, 0x3400080},
7012{0x3400000, 0x636d24, 0x966320b, 0x966320b, 0x3400080},
7013{0x3400000, 0x636d24, 0xb26bddee, 0xb26bddee, 0x3400080},
7014{0x3400000, 0x636d24, 0xb5c8e5d3, 0xb5c8e5d3, 0x3400080},
7015{0x3400000, 0x636d24, 0x317285d3, 0x317285d3, 0x3400080},
7016{0x3400000, 0x636d24, 0x3c9623b1, 0x3c9623b1, 0x3400080},
7017{0x3400000, 0x636d24, 0x51fd2c7c, 0x51fd2c7c, 0x3400080},
7018{0x3400000, 0x636d24, 0x7b906a6c, 0x7b906a6c, 0x3400080},
7019{0x3400000, 0x7fffff, 0x0, 0x0, 0x3400080},
7020{0x3400000, 0x7fffff, 0x1, 0x0, 0x3400080},
7021{0x3400000, 0x7fffff, 0x76, 0x0, 0x3400080},
7022{0x3400000, 0x7fffff, 0x2b94, 0x0, 0x3400080},
7023{0x3400000, 0x7fffff, 0x636d24, 0x0, 0x3400080},
7024{0x3400000, 0x7fffff, 0x7fffff, 0x0, 0x3400080},
7025{0x3400000, 0x7fffff, 0x800000, 0x800000, 0x3400080},
7026{0x3400000, 0x7fffff, 0x800002, 0x800002, 0x3400080},
7027{0x3400000, 0x7fffff, 0x1398437, 0x1398437, 0x3400080},
7028{0x3400000, 0x7fffff, 0xba98d27, 0xba98d27, 0x3400080},
7029{0x3400000, 0x7fffff, 0xba98d7a, 0xba98d7a, 0x3400080},
7030{0x3400000, 0x7fffff, 0x751f853a, 0x751f853a, 0x3400080},
7031{0x3400000, 0x7fffff, 0x7f7ffff0, 0x7f7ffff0, 0x3400080},
7032{0x3400000, 0x7fffff, 0x7f7fffff, 0x7f7fffff, 0x3400080},
7033{0x3400000, 0x7fffff, 0x7f800000, 0x7f800000, 0x3400080},
7034{0x3400000, 0x7fffff, 0x7f800001, 0x7fc00000, 0x3400081},
7035{0x3400000, 0x7fffff, 0x7f984a37, 0x7fc00000, 0x3400081},
7036{0x3400000, 0x7fffff, 0x7fbfffff, 0x7fc00000, 0x3400081},
7037{0x3400000, 0x7fffff, 0x7fc00000, 0x7fc00000, 0x3400080},
7038{0x3400000, 0x7fffff, 0x7fd9ba98, 0x7fc00000, 0x3400080},
7039{0x3400000, 0x7fffff, 0x7fffffff, 0x7fc00000, 0x3400080},
7040{0x3400000, 0x7fffff, 0x80000000, 0x0, 0x3400080},
7041{0x3400000, 0x7fffff, 0x80000001, 0x0, 0x3400080},
7042{0x3400000, 0x7fffff, 0x80000076, 0x0, 0x3400080},
7043{0x3400000, 0x7fffff, 0x80002b94, 0x0, 0x3400080},
7044{0x3400000, 0x7fffff, 0x80636d24, 0x0, 0x3400080},
7045{0x3400000, 0x7fffff, 0x807fffff, 0x0, 0x3400080},
7046{0x3400000, 0x7fffff, 0x80800000, 0x80800000, 0x3400080},
7047{0x3400000, 0x7fffff, 0x80800002, 0x80800002, 0x3400080},
7048{0x3400000, 0x7fffff, 0x81398437, 0x81398437, 0x3400080},
7049{0x3400000, 0x7fffff, 0x8ba98d27, 0x8ba98d27, 0x3400080},
7050{0x3400000, 0x7fffff, 0x8ba98d7a, 0x8ba98d7a, 0x3400080},
7051{0x3400000, 0x7fffff, 0xf51f853a, 0xf51f853a, 0x3400080},
7052{0x3400000, 0x7fffff, 0xff7ffff0, 0xff7ffff0, 0x3400080},
7053{0x3400000, 0x7fffff, 0xff7fffff, 0xff7fffff, 0x3400080},
7054{0x3400000, 0x7fffff, 0xff800000, 0xff800000, 0x3400080},
7055{0x3400000, 0x7fffff, 0xff800001, 0x7fc00000, 0x3400081},
7056{0x3400000, 0x7fffff, 0xff984a37, 0x7fc00000, 0x3400081},
7057{0x3400000, 0x7fffff, 0xffbfffff, 0x7fc00000, 0x3400081},
7058{0x3400000, 0x7fffff, 0xffc00000, 0x7fc00000, 0x3400080},
7059{0x3400000, 0x7fffff, 0xffd9ba98, 0x7fc00000, 0x3400080},
7060{0x3400000, 0x7fffff, 0xffffffff, 0x7fc00000, 0x3400080},
7061{0x3400000, 0x7fffff, 0x4f3495cb, 0x4f3495cb, 0x3400080},
7062{0x3400000, 0x7fffff, 0xe73a5134, 0xe73a5134, 0x3400080},
7063{0x3400000, 0x7fffff, 0x7c994e9e, 0x7c994e9e, 0x3400080},
7064{0x3400000, 0x7fffff, 0x6164bd6c, 0x6164bd6c, 0x3400080},
7065{0x3400000, 0x7fffff, 0x9503366, 0x9503366, 0x3400080},
7066{0x3400000, 0x7fffff, 0xbf5a97c9, 0xbf5a97c9, 0x3400080},
7067{0x3400000, 0x7fffff, 0xe6ff1a14, 0xe6ff1a14, 0x3400080},
7068{0x3400000, 0x7fffff, 0x77f31e2f, 0x77f31e2f, 0x3400080},
7069{0x3400000, 0x7fffff, 0xaab4d7d8, 0xaab4d7d8, 0x3400080},
7070{0x3400000, 0x7fffff, 0x966320b, 0x966320b, 0x3400080},
7071{0x3400000, 0x7fffff, 0xb26bddee, 0xb26bddee, 0x3400080},
7072{0x3400000, 0x7fffff, 0xb5c8e5d3, 0xb5c8e5d3, 0x3400080},
7073{0x3400000, 0x7fffff, 0x317285d3, 0x317285d3, 0x3400080},
7074{0x3400000, 0x7fffff, 0x3c9623b1, 0x3c9623b1, 0x3400080},
7075{0x3400000, 0x7fffff, 0x51fd2c7c, 0x51fd2c7c, 0x3400080},
7076{0x3400000, 0x7fffff, 0x7b906a6c, 0x7b906a6c, 0x3400080},
7077{0x3400000, 0x800000, 0x0, 0x800000, 0x3400000},
7078{0x3400000, 0x800000, 0x1, 0x800000, 0x3400080},
7079{0x3400000, 0x800000, 0x76, 0x800000, 0x3400080},
7080{0x3400000, 0x800000, 0x2b94, 0x800000, 0x3400080},
7081{0x3400000, 0x800000, 0x636d24, 0x800000, 0x3400080},
7082{0x3400000, 0x800000, 0x7fffff, 0x800000, 0x3400080},
7083{0x3400000, 0x800000, 0x800000, 0x1000000, 0x3400000},
7084{0x3400000, 0x800000, 0x800002, 0x1000001, 0x3400000},
7085{0x3400000, 0x800000, 0x1398437, 0x1798437, 0x3400000},
7086{0x3400000, 0x800000, 0xba98d27, 0xba98d29, 0x3400000},
7087{0x3400000, 0x800000, 0xba98d7a, 0xba98d7c, 0x3400000},
7088{0x3400000, 0x800000, 0x751f853a, 0x751f853b, 0x3400010},
7089{0x3400000, 0x800000, 0x7f7ffff0, 0x7f7ffff1, 0x3400010},
7090{0x3400000, 0x800000, 0x7f7fffff, 0x7f800000, 0x3400014},
7091{0x3400000, 0x800000, 0x7f800000, 0x7f800000, 0x3400000},
7092{0x3400000, 0x800000, 0x7f800001, 0x7fc00000, 0x3400001},
7093{0x3400000, 0x800000, 0x7f984a37, 0x7fc00000, 0x3400001},
7094{0x3400000, 0x800000, 0x7fbfffff, 0x7fc00000, 0x3400001},
7095{0x3400000, 0x800000, 0x7fc00000, 0x7fc00000, 0x3400000},
7096{0x3400000, 0x800000, 0x7fd9ba98, 0x7fc00000, 0x3400000},
7097{0x3400000, 0x800000, 0x7fffffff, 0x7fc00000, 0x3400000},
7098{0x3400000, 0x800000, 0x80000000, 0x800000, 0x3400000},
7099{0x3400000, 0x800000, 0x80000001, 0x800000, 0x3400080},
7100{0x3400000, 0x800000, 0x80000076, 0x800000, 0x3400080},
7101{0x3400000, 0x800000, 0x80002b94, 0x800000, 0x3400080},
7102{0x3400000, 0x800000, 0x80636d24, 0x800000, 0x3400080},
7103{0x3400000, 0x800000, 0x807fffff, 0x800000, 0x3400080},
7104{0x3400000, 0x800000, 0x80800000, 0x0, 0x3400000},
7105{0x3400000, 0x800000, 0x80800002, 0x0, 0x3400008},
7106{0x3400000, 0x800000, 0x81398437, 0x80f3086e, 0x3400000},
7107{0x3400000, 0x800000, 0x8ba98d27, 0x8ba98d25, 0x3400000},
7108{0x3400000, 0x800000, 0x8ba98d7a, 0x8ba98d78, 0x3400000},
7109{0x3400000, 0x800000, 0xf51f853a, 0xf51f8539, 0x3400010},
7110{0x3400000, 0x800000, 0xff7ffff0, 0xff7fffef, 0x3400010},
7111{0x3400000, 0x800000, 0xff7fffff, 0xff7ffffe, 0x3400010},
7112{0x3400000, 0x800000, 0xff800000, 0xff800000, 0x3400000},
7113{0x3400000, 0x800000, 0xff800001, 0x7fc00000, 0x3400001},
7114{0x3400000, 0x800000, 0xff984a37, 0x7fc00000, 0x3400001},
7115{0x3400000, 0x800000, 0xffbfffff, 0x7fc00000, 0x3400001},
7116{0x3400000, 0x800000, 0xffc00000, 0x7fc00000, 0x3400000},
7117{0x3400000, 0x800000, 0xffd9ba98, 0x7fc00000, 0x3400000},
7118{0x3400000, 0x800000, 0xffffffff, 0x7fc00000, 0x3400000},
7119{0x3400000, 0x800000, 0x4f3495cb, 0x4f3495cc, 0x3400010},
7120{0x3400000, 0x800000, 0xe73a5134, 0xe73a5133, 0x3400010},
7121{0x3400000, 0x800000, 0x7c994e9e, 0x7c994e9f, 0x3400010},
7122{0x3400000, 0x800000, 0x6164bd6c, 0x6164bd6d, 0x3400010},
7123{0x3400000, 0x800000, 0x9503366, 0x95033a6, 0x3400000},
7124{0x3400000, 0x800000, 0xbf5a97c9, 0xbf5a97c8, 0x3400010},
7125{0x3400000, 0x800000, 0xe6ff1a14, 0xe6ff1a13, 0x3400010},
7126{0x3400000, 0x800000, 0x77f31e2f, 0x77f31e30, 0x3400010},
7127{0x3400000, 0x800000, 0xaab4d7d8, 0xaab4d7d7, 0x3400010},
7128{0x3400000, 0x800000, 0x966320b, 0x966324b, 0x3400000},
7129{0x3400000, 0x800000, 0xb26bddee, 0xb26bdded, 0x3400010},
7130{0x3400000, 0x800000, 0xb5c8e5d3, 0xb5c8e5d2, 0x3400010},
7131{0x3400000, 0x800000, 0x317285d3, 0x317285d4, 0x3400010},
7132{0x3400000, 0x800000, 0x3c9623b1, 0x3c9623b2, 0x3400010},
7133{0x3400000, 0x800000, 0x51fd2c7c, 0x51fd2c7d, 0x3400010},
7134{0x3400000, 0x800000, 0x7b906a6c, 0x7b906a6d, 0x3400010},
7135{0x3400000, 0x800002, 0x0, 0x800002, 0x3400000},
7136{0x3400000, 0x800002, 0x1, 0x800002, 0x3400080},
7137{0x3400000, 0x800002, 0x76, 0x800002, 0x3400080},
7138{0x3400000, 0x800002, 0x2b94, 0x800002, 0x3400080},
7139{0x3400000, 0x800002, 0x636d24, 0x800002, 0x3400080},
7140{0x3400000, 0x800002, 0x7fffff, 0x800002, 0x3400080},
7141{0x3400000, 0x800002, 0x800000, 0x1000001, 0x3400000},
7142{0x3400000, 0x800002, 0x800002, 0x1000002, 0x3400000},
7143{0x3400000, 0x800002, 0x1398437, 0x1798438, 0x3400000},
7144{0x3400000, 0x800002, 0xba98d27, 0xba98d2a, 0x3400010},
7145{0x3400000, 0x800002, 0xba98d7a, 0xba98d7d, 0x3400010},
7146{0x3400000, 0x800002, 0x751f853a, 0x751f853b, 0x3400010},
7147{0x3400000, 0x800002, 0x7f7ffff0, 0x7f7ffff1, 0x3400010},
7148{0x3400000, 0x800002, 0x7f7fffff, 0x7f800000, 0x3400014},
7149{0x3400000, 0x800002, 0x7f800000, 0x7f800000, 0x3400000},
7150{0x3400000, 0x800002, 0x7f800001, 0x7fc00000, 0x3400001},
7151{0x3400000, 0x800002, 0x7f984a37, 0x7fc00000, 0x3400001},
7152{0x3400000, 0x800002, 0x7fbfffff, 0x7fc00000, 0x3400001},
7153{0x3400000, 0x800002, 0x7fc00000, 0x7fc00000, 0x3400000},
7154{0x3400000, 0x800002, 0x7fd9ba98, 0x7fc00000, 0x3400000},
7155{0x3400000, 0x800002, 0x7fffffff, 0x7fc00000, 0x3400000},
7156{0x3400000, 0x800002, 0x80000000, 0x800002, 0x3400000},
7157{0x3400000, 0x800002, 0x80000001, 0x800002, 0x3400080},
7158{0x3400000, 0x800002, 0x80000076, 0x800002, 0x3400080},
7159{0x3400000, 0x800002, 0x80002b94, 0x800002, 0x3400080},
7160{0x3400000, 0x800002, 0x80636d24, 0x800002, 0x3400080},
7161{0x3400000, 0x800002, 0x807fffff, 0x800002, 0x3400080},
7162{0x3400000, 0x800002, 0x80800000, 0x0, 0x3400008},
7163{0x3400000, 0x800002, 0x80800002, 0x0, 0x3400000},
7164{0x3400000, 0x800002, 0x81398437, 0x80f3086c, 0x3400000},
7165{0x3400000, 0x800002, 0x8ba98d27, 0x8ba98d24, 0x3400010},
7166{0x3400000, 0x800002, 0x8ba98d7a, 0x8ba98d77, 0x3400010},
7167{0x3400000, 0x800002, 0xf51f853a, 0xf51f8539, 0x3400010},
7168{0x3400000, 0x800002, 0xff7ffff0, 0xff7fffef, 0x3400010},
7169{0x3400000, 0x800002, 0xff7fffff, 0xff7ffffe, 0x3400010},
7170{0x3400000, 0x800002, 0xff800000, 0xff800000, 0x3400000},
7171{0x3400000, 0x800002, 0xff800001, 0x7fc00000, 0x3400001},
7172{0x3400000, 0x800002, 0xff984a37, 0x7fc00000, 0x3400001},
7173{0x3400000, 0x800002, 0xffbfffff, 0x7fc00000, 0x3400001},
7174{0x3400000, 0x800002, 0xffc00000, 0x7fc00000, 0x3400000},
7175{0x3400000, 0x800002, 0xffd9ba98, 0x7fc00000, 0x3400000},
7176{0x3400000, 0x800002, 0xffffffff, 0x7fc00000, 0x3400000},
7177{0x3400000, 0x800002, 0x4f3495cb, 0x4f3495cc, 0x3400010},
7178{0x3400000, 0x800002, 0xe73a5134, 0xe73a5133, 0x3400010},
7179{0x3400000, 0x800002, 0x7c994e9e, 0x7c994e9f, 0x3400010},
7180{0x3400000, 0x800002, 0x6164bd6c, 0x6164bd6d, 0x3400010},
7181{0x3400000, 0x800002, 0x9503366, 0x95033a7, 0x3400010},
7182{0x3400000, 0x800002, 0xbf5a97c9, 0xbf5a97c8, 0x3400010},
7183{0x3400000, 0x800002, 0xe6ff1a14, 0xe6ff1a13, 0x3400010},
7184{0x3400000, 0x800002, 0x77f31e2f, 0x77f31e30, 0x3400010},
7185{0x3400000, 0x800002, 0xaab4d7d8, 0xaab4d7d7, 0x3400010},
7186{0x3400000, 0x800002, 0x966320b, 0x966324c, 0x3400010},
7187{0x3400000, 0x800002, 0xb26bddee, 0xb26bdded, 0x3400010},
7188{0x3400000, 0x800002, 0xb5c8e5d3, 0xb5c8e5d2, 0x3400010},
7189{0x3400000, 0x800002, 0x317285d3, 0x317285d4, 0x3400010},
7190{0x3400000, 0x800002, 0x3c9623b1, 0x3c9623b2, 0x3400010},
7191{0x3400000, 0x800002, 0x51fd2c7c, 0x51fd2c7d, 0x3400010},
7192{0x3400000, 0x800002, 0x7b906a6c, 0x7b906a6d, 0x3400010},
7193{0x3400000, 0x1398437, 0x0, 0x1398437, 0x3400000},
7194{0x3400000, 0x1398437, 0x1, 0x1398437, 0x3400080},
7195{0x3400000, 0x1398437, 0x76, 0x1398437, 0x3400080},
7196{0x3400000, 0x1398437, 0x2b94, 0x1398437, 0x3400080},
7197{0x3400000, 0x1398437, 0x636d24, 0x1398437, 0x3400080},
7198{0x3400000, 0x1398437, 0x7fffff, 0x1398437, 0x3400080},
7199{0x3400000, 0x1398437, 0x800000, 0x1798437, 0x3400000},
7200{0x3400000, 0x1398437, 0x800002, 0x1798438, 0x3400000},
7201{0x3400000, 0x1398437, 0x1398437, 0x1b98437, 0x3400000},
7202{0x3400000, 0x1398437, 0xba98d27, 0xba98d2d, 0x3400010},
7203{0x3400000, 0x1398437, 0xba98d7a, 0xba98d80, 0x3400010},
7204{0x3400000, 0x1398437, 0x751f853a, 0x751f853b, 0x3400010},
7205{0x3400000, 0x1398437, 0x7f7ffff0, 0x7f7ffff1, 0x3400010},
7206{0x3400000, 0x1398437, 0x7f7fffff, 0x7f800000, 0x3400014},
7207{0x3400000, 0x1398437, 0x7f800000, 0x7f800000, 0x3400000},
7208{0x3400000, 0x1398437, 0x7f800001, 0x7fc00000, 0x3400001},
7209{0x3400000, 0x1398437, 0x7f984a37, 0x7fc00000, 0x3400001},
7210{0x3400000, 0x1398437, 0x7fbfffff, 0x7fc00000, 0x3400001},
7211{0x3400000, 0x1398437, 0x7fc00000, 0x7fc00000, 0x3400000},
7212{0x3400000, 0x1398437, 0x7fd9ba98, 0x7fc00000, 0x3400000},
7213{0x3400000, 0x1398437, 0x7fffffff, 0x7fc00000, 0x3400000},
7214{0x3400000, 0x1398437, 0x80000000, 0x1398437, 0x3400000},
7215{0x3400000, 0x1398437, 0x80000001, 0x1398437, 0x3400080},
7216{0x3400000, 0x1398437, 0x80000076, 0x1398437, 0x3400080},
7217{0x3400000, 0x1398437, 0x80002b94, 0x1398437, 0x3400080},
7218{0x3400000, 0x1398437, 0x80636d24, 0x1398437, 0x3400080},
7219{0x3400000, 0x1398437, 0x807fffff, 0x1398437, 0x3400080},
7220{0x3400000, 0x1398437, 0x80800000, 0xf3086e, 0x3400000},
7221{0x3400000, 0x1398437, 0x80800002, 0xf3086c, 0x3400000},
7222{0x3400000, 0x1398437, 0x81398437, 0x0, 0x3400000},
7223{0x3400000, 0x1398437, 0x8ba98d27, 0x8ba98d21, 0x3400010},
7224{0x3400000, 0x1398437, 0x8ba98d7a, 0x8ba98d74, 0x3400010},
7225{0x3400000, 0x1398437, 0xf51f853a, 0xf51f8539, 0x3400010},
7226{0x3400000, 0x1398437, 0xff7ffff0, 0xff7fffef, 0x3400010},
7227{0x3400000, 0x1398437, 0xff7fffff, 0xff7ffffe, 0x3400010},
7228{0x3400000, 0x1398437, 0xff800000, 0xff800000, 0x3400000},
7229{0x3400000, 0x1398437, 0xff800001, 0x7fc00000, 0x3400001},
7230{0x3400000, 0x1398437, 0xff984a37, 0x7fc00000, 0x3400001},
7231{0x3400000, 0x1398437, 0xffbfffff, 0x7fc00000, 0x3400001},
7232{0x3400000, 0x1398437, 0xffc00000, 0x7fc00000, 0x3400000},
7233{0x3400000, 0x1398437, 0xffd9ba98, 0x7fc00000, 0x3400000},
7234{0x3400000, 0x1398437, 0xffffffff, 0x7fc00000, 0x3400000},
7235{0x3400000, 0x1398437, 0x4f3495cb, 0x4f3495cc, 0x3400010},
7236{0x3400000, 0x1398437, 0xe73a5134, 0xe73a5133, 0x3400010},
7237{0x3400000, 0x1398437, 0x7c994e9e, 0x7c994e9f, 0x3400010},
7238{0x3400000, 0x1398437, 0x6164bd6c, 0x6164bd6d, 0x3400010},
7239{0x3400000, 0x1398437, 0x9503366, 0x9503420, 0x3400010},
7240{0x3400000, 0x1398437, 0xbf5a97c9, 0xbf5a97c8, 0x3400010},
7241{0x3400000, 0x1398437, 0xe6ff1a14, 0xe6ff1a13, 0x3400010},
7242{0x3400000, 0x1398437, 0x77f31e2f, 0x77f31e30, 0x3400010},
7243{0x3400000, 0x1398437, 0xaab4d7d8, 0xaab4d7d7, 0x3400010},
7244{0x3400000, 0x1398437, 0x966320b, 0x96632c5, 0x3400010},
7245{0x3400000, 0x1398437, 0xb26bddee, 0xb26bdded, 0x3400010},
7246{0x3400000, 0x1398437, 0xb5c8e5d3, 0xb5c8e5d2, 0x3400010},
7247{0x3400000, 0x1398437, 0x317285d3, 0x317285d4, 0x3400010},
7248{0x3400000, 0x1398437, 0x3c9623b1, 0x3c9623b2, 0x3400010},
7249{0x3400000, 0x1398437, 0x51fd2c7c, 0x51fd2c7d, 0x3400010},
7250{0x3400000, 0x1398437, 0x7b906a6c, 0x7b906a6d, 0x3400010},
7251{0x3400000, 0xba98d27, 0x0, 0xba98d27, 0x3400000},
7252{0x3400000, 0xba98d27, 0x1, 0xba98d27, 0x3400080},
7253{0x3400000, 0xba98d27, 0x76, 0xba98d27, 0x3400080},
7254{0x3400000, 0xba98d27, 0x2b94, 0xba98d27, 0x3400080},
7255{0x3400000, 0xba98d27, 0x636d24, 0xba98d27, 0x3400080},
7256{0x3400000, 0xba98d27, 0x7fffff, 0xba98d27, 0x3400080},
7257{0x3400000, 0xba98d27, 0x800000, 0xba98d29, 0x3400000},
7258{0x3400000, 0xba98d27, 0x800002, 0xba98d2a, 0x3400010},
7259{0x3400000, 0xba98d27, 0x1398437, 0xba98d2d, 0x3400010},
7260{0x3400000, 0xba98d27, 0xba98d27, 0xc298d27, 0x3400000},
7261{0x3400000, 0xba98d27, 0xba98d7a, 0xc298d51, 0x3400010},
7262{0x3400000, 0xba98d27, 0x751f853a, 0x751f853b, 0x3400010},
7263{0x3400000, 0xba98d27, 0x7f7ffff0, 0x7f7ffff1, 0x3400010},
7264{0x3400000, 0xba98d27, 0x7f7fffff, 0x7f800000, 0x3400014},
7265{0x3400000, 0xba98d27, 0x7f800000, 0x7f800000, 0x3400000},
7266{0x3400000, 0xba98d27, 0x7f800001, 0x7fc00000, 0x3400001},
7267{0x3400000, 0xba98d27, 0x7f984a37, 0x7fc00000, 0x3400001},
7268{0x3400000, 0xba98d27, 0x7fbfffff, 0x7fc00000, 0x3400001},
7269{0x3400000, 0xba98d27, 0x7fc00000, 0x7fc00000, 0x3400000},
7270{0x3400000, 0xba98d27, 0x7fd9ba98, 0x7fc00000, 0x3400000},
7271{0x3400000, 0xba98d27, 0x7fffffff, 0x7fc00000, 0x3400000},
7272{0x3400000, 0xba98d27, 0x80000000, 0xba98d27, 0x3400000},
7273{0x3400000, 0xba98d27, 0x80000001, 0xba98d27, 0x3400080},
7274{0x3400000, 0xba98d27, 0x80000076, 0xba98d27, 0x3400080},
7275{0x3400000, 0xba98d27, 0x80002b94, 0xba98d27, 0x3400080},
7276{0x3400000, 0xba98d27, 0x80636d24, 0xba98d27, 0x3400080},
7277{0x3400000, 0xba98d27, 0x807fffff, 0xba98d27, 0x3400080},
7278{0x3400000, 0xba98d27, 0x80800000, 0xba98d25, 0x3400000},
7279{0x3400000, 0xba98d27, 0x80800002, 0xba98d25, 0x3400010},
7280{0x3400000, 0xba98d27, 0x81398437, 0xba98d22, 0x3400010},
7281{0x3400000, 0xba98d27, 0x8ba98d27, 0x0, 0x3400000},
7282{0x3400000, 0xba98d27, 0x8ba98d7a, 0x83260000, 0x3400000},
7283{0x3400000, 0xba98d27, 0xf51f853a, 0xf51f8539, 0x3400010},
7284{0x3400000, 0xba98d27, 0xff7ffff0, 0xff7fffef, 0x3400010},
7285{0x3400000, 0xba98d27, 0xff7fffff, 0xff7ffffe, 0x3400010},
7286{0x3400000, 0xba98d27, 0xff800000, 0xff800000, 0x3400000},
7287{0x3400000, 0xba98d27, 0xff800001, 0x7fc00000, 0x3400001},
7288{0x3400000, 0xba98d27, 0xff984a37, 0x7fc00000, 0x3400001},
7289{0x3400000, 0xba98d27, 0xffbfffff, 0x7fc00000, 0x3400001},
7290{0x3400000, 0xba98d27, 0xffc00000, 0x7fc00000, 0x3400000},
7291{0x3400000, 0xba98d27, 0xffd9ba98, 0x7fc00000, 0x3400000},
7292{0x3400000, 0xba98d27, 0xffffffff, 0x7fc00000, 0x3400000},
7293{0x3400000, 0xba98d27, 0x4f3495cb, 0x4f3495cc, 0x3400010},
7294{0x3400000, 0xba98d27, 0xe73a5134, 0xe73a5133, 0x3400010},
7295{0x3400000, 0xba98d27, 0x7c994e9e, 0x7c994e9f, 0x3400010},
7296{0x3400000, 0xba98d27, 0x6164bd6c, 0x6164bd6d, 0x3400010},
7297{0x3400000, 0xba98d27, 0x9503366, 0xbb00ec3, 0x3400010},
7298{0x3400000, 0xba98d27, 0xbf5a97c9, 0xbf5a97c8, 0x3400010},
7299{0x3400000, 0xba98d27, 0xe6ff1a14, 0xe6ff1a13, 0x3400010},
7300{0x3400000, 0xba98d27, 0x77f31e2f, 0x77f31e30, 0x3400010},
7301{0x3400000, 0xba98d27, 0xaab4d7d8, 0xaab4d7d7, 0x3400010},
7302{0x3400000, 0xba98d27, 0x966320b, 0xbb0beb8, 0x3400010},
7303{0x3400000, 0xba98d27, 0xb26bddee, 0xb26bdded, 0x3400010},
7304{0x3400000, 0xba98d27, 0xb5c8e5d3, 0xb5c8e5d2, 0x3400010},
7305{0x3400000, 0xba98d27, 0x317285d3, 0x317285d4, 0x3400010},
7306{0x3400000, 0xba98d27, 0x3c9623b1, 0x3c9623b2, 0x3400010},
7307{0x3400000, 0xba98d27, 0x51fd2c7c, 0x51fd2c7d, 0x3400010},
7308{0x3400000, 0xba98d27, 0x7b906a6c, 0x7b906a6d, 0x3400010},
7309{0x3400000, 0xba98d7a, 0x0, 0xba98d7a, 0x3400000},
7310{0x3400000, 0xba98d7a, 0x1, 0xba98d7a, 0x3400080},
7311{0x3400000, 0xba98d7a, 0x76, 0xba98d7a, 0x3400080},
7312{0x3400000, 0xba98d7a, 0x2b94, 0xba98d7a, 0x3400080},
7313{0x3400000, 0xba98d7a, 0x636d24, 0xba98d7a, 0x3400080},
7314{0x3400000, 0xba98d7a, 0x7fffff, 0xba98d7a, 0x3400080},
7315{0x3400000, 0xba98d7a, 0x800000, 0xba98d7c, 0x3400000},
7316{0x3400000, 0xba98d7a, 0x800002, 0xba98d7d, 0x3400010},
7317{0x3400000, 0xba98d7a, 0x1398437, 0xba98d80, 0x3400010},
7318{0x3400000, 0xba98d7a, 0xba98d27, 0xc298d51, 0x3400010},
7319{0x3400000, 0xba98d7a, 0xba98d7a, 0xc298d7a, 0x3400000},
7320{0x3400000, 0xba98d7a, 0x751f853a, 0x751f853b, 0x3400010},
7321{0x3400000, 0xba98d7a, 0x7f7ffff0, 0x7f7ffff1, 0x3400010},
7322{0x3400000, 0xba98d7a, 0x7f7fffff, 0x7f800000, 0x3400014},
7323{0x3400000, 0xba98d7a, 0x7f800000, 0x7f800000, 0x3400000},
7324{0x3400000, 0xba98d7a, 0x7f800001, 0x7fc00000, 0x3400001},
7325{0x3400000, 0xba98d7a, 0x7f984a37, 0x7fc00000, 0x3400001},
7326{0x3400000, 0xba98d7a, 0x7fbfffff, 0x7fc00000, 0x3400001},
7327{0x3400000, 0xba98d7a, 0x7fc00000, 0x7fc00000, 0x3400000},
7328{0x3400000, 0xba98d7a, 0x7fd9ba98, 0x7fc00000, 0x3400000},
7329{0x3400000, 0xba98d7a, 0x7fffffff, 0x7fc00000, 0x3400000},
7330{0x3400000, 0xba98d7a, 0x80000000, 0xba98d7a, 0x3400000},
7331{0x3400000, 0xba98d7a, 0x80000001, 0xba98d7a, 0x3400080},
7332{0x3400000, 0xba98d7a, 0x80000076, 0xba98d7a, 0x3400080},
7333{0x3400000, 0xba98d7a, 0x80002b94, 0xba98d7a, 0x3400080},
7334{0x3400000, 0xba98d7a, 0x80636d24, 0xba98d7a, 0x3400080},
7335{0x3400000, 0xba98d7a, 0x807fffff, 0xba98d7a, 0x3400080},
7336{0x3400000, 0xba98d7a, 0x80800000, 0xba98d78, 0x3400000},
7337{0x3400000, 0xba98d7a, 0x80800002, 0xba98d78, 0x3400010},
7338{0x3400000, 0xba98d7a, 0x81398437, 0xba98d75, 0x3400010},
7339{0x3400000, 0xba98d7a, 0x8ba98d27, 0x3260000, 0x3400000},
7340{0x3400000, 0xba98d7a, 0x8ba98d7a, 0x0, 0x3400000},
7341{0x3400000, 0xba98d7a, 0xf51f853a, 0xf51f8539, 0x3400010},
7342{0x3400000, 0xba98d7a, 0xff7ffff0, 0xff7fffef, 0x3400010},
7343{0x3400000, 0xba98d7a, 0xff7fffff, 0xff7ffffe, 0x3400010},
7344{0x3400000, 0xba98d7a, 0xff800000, 0xff800000, 0x3400000},
7345{0x3400000, 0xba98d7a, 0xff800001, 0x7fc00000, 0x3400001},
7346{0x3400000, 0xba98d7a, 0xff984a37, 0x7fc00000, 0x3400001},
7347{0x3400000, 0xba98d7a, 0xffbfffff, 0x7fc00000, 0x3400001},
7348{0x3400000, 0xba98d7a, 0xffc00000, 0x7fc00000, 0x3400000},
7349{0x3400000, 0xba98d7a, 0xffd9ba98, 0x7fc00000, 0x3400000},
7350{0x3400000, 0xba98d7a, 0xffffffff, 0x7fc00000, 0x3400000},
7351{0x3400000, 0xba98d7a, 0x4f3495cb, 0x4f3495cc, 0x3400010},
7352{0x3400000, 0xba98d7a, 0xe73a5134, 0xe73a5133, 0x3400010},
7353{0x3400000, 0xba98d7a, 0x7c994e9e, 0x7c994e9f, 0x3400010},
7354{0x3400000, 0xba98d7a, 0x6164bd6c, 0x6164bd6d, 0x3400010},
7355{0x3400000, 0xba98d7a, 0x9503366, 0xbb00f16, 0x3400010},
7356{0x3400000, 0xba98d7a, 0xbf5a97c9, 0xbf5a97c8, 0x3400010},
7357{0x3400000, 0xba98d7a, 0xe6ff1a14, 0xe6ff1a13, 0x3400010},
7358{0x3400000, 0xba98d7a, 0x77f31e2f, 0x77f31e30, 0x3400010},
7359{0x3400000, 0xba98d7a, 0xaab4d7d8, 0xaab4d7d7, 0x3400010},
7360{0x3400000, 0xba98d7a, 0x966320b, 0xbb0bf0b, 0x3400010},
7361{0x3400000, 0xba98d7a, 0xb26bddee, 0xb26bdded, 0x3400010},
7362{0x3400000, 0xba98d7a, 0xb5c8e5d3, 0xb5c8e5d2, 0x3400010},
7363{0x3400000, 0xba98d7a, 0x317285d3, 0x317285d4, 0x3400010},
7364{0x3400000, 0xba98d7a, 0x3c9623b1, 0x3c9623b2, 0x3400010},
7365{0x3400000, 0xba98d7a, 0x51fd2c7c, 0x51fd2c7d, 0x3400010},
7366{0x3400000, 0xba98d7a, 0x7b906a6c, 0x7b906a6d, 0x3400010},
7367{0x3400000, 0x751f853a, 0x0, 0x751f853a, 0x3400000},
7368{0x3400000, 0x751f853a, 0x1, 0x751f853a, 0x3400080},
7369{0x3400000, 0x751f853a, 0x76, 0x751f853a, 0x3400080},
7370{0x3400000, 0x751f853a, 0x2b94, 0x751f853a, 0x3400080},
7371{0x3400000, 0x751f853a, 0x636d24, 0x751f853a, 0x3400080},
7372{0x3400000, 0x751f853a, 0x7fffff, 0x751f853a, 0x3400080},
7373{0x3400000, 0x751f853a, 0x800000, 0x751f853b, 0x3400010},
7374{0x3400000, 0x751f853a, 0x800002, 0x751f853b, 0x3400010},
7375{0x3400000, 0x751f853a, 0x1398437, 0x751f853b, 0x3400010},
7376{0x3400000, 0x751f853a, 0xba98d27, 0x751f853b, 0x3400010},
7377{0x3400000, 0x751f853a, 0xba98d7a, 0x751f853b, 0x3400010},
7378{0x3400000, 0x751f853a, 0x751f853a, 0x759f853a, 0x3400000},
7379{0x3400000, 0x751f853a, 0x7f7ffff0, 0x7f7ffffa, 0x3400010},
7380{0x3400000, 0x751f853a, 0x7f7fffff, 0x7f800000, 0x3400014},
7381{0x3400000, 0x751f853a, 0x7f800000, 0x7f800000, 0x3400000},
7382{0x3400000, 0x751f853a, 0x7f800001, 0x7fc00000, 0x3400001},
7383{0x3400000, 0x751f853a, 0x7f984a37, 0x7fc00000, 0x3400001},
7384{0x3400000, 0x751f853a, 0x7fbfffff, 0x7fc00000, 0x3400001},
7385{0x3400000, 0x751f853a, 0x7fc00000, 0x7fc00000, 0x3400000},
7386{0x3400000, 0x751f853a, 0x7fd9ba98, 0x7fc00000, 0x3400000},
7387{0x3400000, 0x751f853a, 0x7fffffff, 0x7fc00000, 0x3400000},
7388{0x3400000, 0x751f853a, 0x80000000, 0x751f853a, 0x3400000},
7389{0x3400000, 0x751f853a, 0x80000001, 0x751f853a, 0x3400080},
7390{0x3400000, 0x751f853a, 0x80000076, 0x751f853a, 0x3400080},
7391{0x3400000, 0x751f853a, 0x80002b94, 0x751f853a, 0x3400080},
7392{0x3400000, 0x751f853a, 0x80636d24, 0x751f853a, 0x3400080},
7393{0x3400000, 0x751f853a, 0x807fffff, 0x751f853a, 0x3400080},
7394{0x3400000, 0x751f853a, 0x80800000, 0x751f853a, 0x3400010},
7395{0x3400000, 0x751f853a, 0x80800002, 0x751f853a, 0x3400010},
7396{0x3400000, 0x751f853a, 0x81398437, 0x751f853a, 0x3400010},
7397{0x3400000, 0x751f853a, 0x8ba98d27, 0x751f853a, 0x3400010},
7398{0x3400000, 0x751f853a, 0x8ba98d7a, 0x751f853a, 0x3400010},
7399{0x3400000, 0x751f853a, 0xf51f853a, 0x0, 0x3400000},
7400{0x3400000, 0x751f853a, 0xff7ffff0, 0xff7fffe6, 0x3400010},
7401{0x3400000, 0x751f853a, 0xff7fffff, 0xff7ffff5, 0x3400010},
7402{0x3400000, 0x751f853a, 0xff800000, 0xff800000, 0x3400000},
7403{0x3400000, 0x751f853a, 0xff800001, 0x7fc00000, 0x3400001},
7404{0x3400000, 0x751f853a, 0xff984a37, 0x7fc00000, 0x3400001},
7405{0x3400000, 0x751f853a, 0xffbfffff, 0x7fc00000, 0x3400001},
7406{0x3400000, 0x751f853a, 0xffc00000, 0x7fc00000, 0x3400000},
7407{0x3400000, 0x751f853a, 0xffd9ba98, 0x7fc00000, 0x3400000},
7408{0x3400000, 0x751f853a, 0xffffffff, 0x7fc00000, 0x3400000},
7409{0x3400000, 0x751f853a, 0x4f3495cb, 0x751f853b, 0x3400010},
7410{0x3400000, 0x751f853a, 0xe73a5134, 0x751f853a, 0x3400010},
7411{0x3400000, 0x751f853a, 0x7c994e9e, 0x7c994fde, 0x3400010},
7412{0x3400000, 0x751f853a, 0x6164bd6c, 0x751f853b, 0x3400010},
7413{0x3400000, 0x751f853a, 0x9503366, 0x751f853b, 0x3400010},
7414{0x3400000, 0x751f853a, 0xbf5a97c9, 0x751f853a, 0x3400010},
7415{0x3400000, 0x751f853a, 0xe6ff1a14, 0x751f853a, 0x3400010},
7416{0x3400000, 0x751f853a, 0x77f31e2f, 0x77f81a59, 0x3400010},
7417{0x3400000, 0x751f853a, 0xaab4d7d8, 0x751f853a, 0x3400010},
7418{0x3400000, 0x751f853a, 0x966320b, 0x751f853b, 0x3400010},
7419{0x3400000, 0x751f853a, 0xb26bddee, 0x751f853a, 0x3400010},
7420{0x3400000, 0x751f853a, 0xb5c8e5d3, 0x751f853a, 0x3400010},
7421{0x3400000, 0x751f853a, 0x317285d3, 0x751f853b, 0x3400010},
7422{0x3400000, 0x751f853a, 0x3c9623b1, 0x751f853b, 0x3400010},
7423{0x3400000, 0x751f853a, 0x51fd2c7c, 0x751f853b, 0x3400010},
7424{0x3400000, 0x751f853a, 0x7b906a6c, 0x7b906f69, 0x3400010},
7425{0x3400000, 0x7f7ffff0, 0x0, 0x7f7ffff0, 0x3400000},
7426{0x3400000, 0x7f7ffff0, 0x1, 0x7f7ffff0, 0x3400080},
7427{0x3400000, 0x7f7ffff0, 0x76, 0x7f7ffff0, 0x3400080},
7428{0x3400000, 0x7f7ffff0, 0x2b94, 0x7f7ffff0, 0x3400080},
7429{0x3400000, 0x7f7ffff0, 0x636d24, 0x7f7ffff0, 0x3400080},
7430{0x3400000, 0x7f7ffff0, 0x7fffff, 0x7f7ffff0, 0x3400080},
7431{0x3400000, 0x7f7ffff0, 0x800000, 0x7f7ffff1, 0x3400010},
7432{0x3400000, 0x7f7ffff0, 0x800002, 0x7f7ffff1, 0x3400010},
7433{0x3400000, 0x7f7ffff0, 0x1398437, 0x7f7ffff1, 0x3400010},
7434{0x3400000, 0x7f7ffff0, 0xba98d27, 0x7f7ffff1, 0x3400010},
7435{0x3400000, 0x7f7ffff0, 0xba98d7a, 0x7f7ffff1, 0x3400010},
7436{0x3400000, 0x7f7ffff0, 0x751f853a, 0x7f7ffffa, 0x3400010},
7437{0x3400000, 0x7f7ffff0, 0x7f7ffff0, 0x7f800000, 0x3400014},
7438{0x3400000, 0x7f7ffff0, 0x7f7fffff, 0x7f800000, 0x3400014},
7439{0x3400000, 0x7f7ffff0, 0x7f800000, 0x7f800000, 0x3400000},
7440{0x3400000, 0x7f7ffff0, 0x7f800001, 0x7fc00000, 0x3400001},
7441{0x3400000, 0x7f7ffff0, 0x7f984a37, 0x7fc00000, 0x3400001},
7442{0x3400000, 0x7f7ffff0, 0x7fbfffff, 0x7fc00000, 0x3400001},
7443{0x3400000, 0x7f7ffff0, 0x7fc00000, 0x7fc00000, 0x3400000},
7444{0x3400000, 0x7f7ffff0, 0x7fd9ba98, 0x7fc00000, 0x3400000},
7445{0x3400000, 0x7f7ffff0, 0x7fffffff, 0x7fc00000, 0x3400000},
7446{0x3400000, 0x7f7ffff0, 0x80000000, 0x7f7ffff0, 0x3400000},
7447{0x3400000, 0x7f7ffff0, 0x80000001, 0x7f7ffff0, 0x3400080},
7448{0x3400000, 0x7f7ffff0, 0x80000076, 0x7f7ffff0, 0x3400080},
7449{0x3400000, 0x7f7ffff0, 0x80002b94, 0x7f7ffff0, 0x3400080},
7450{0x3400000, 0x7f7ffff0, 0x80636d24, 0x7f7ffff0, 0x3400080},
7451{0x3400000, 0x7f7ffff0, 0x807fffff, 0x7f7ffff0, 0x3400080},
7452{0x3400000, 0x7f7ffff0, 0x80800000, 0x7f7ffff0, 0x3400010},
7453{0x3400000, 0x7f7ffff0, 0x80800002, 0x7f7ffff0, 0x3400010},
7454{0x3400000, 0x7f7ffff0, 0x81398437, 0x7f7ffff0, 0x3400010},
7455{0x3400000, 0x7f7ffff0, 0x8ba98d27, 0x7f7ffff0, 0x3400010},
7456{0x3400000, 0x7f7ffff0, 0x8ba98d7a, 0x7f7ffff0, 0x3400010},
7457{0x3400000, 0x7f7ffff0, 0xf51f853a, 0x7f7fffe7, 0x3400010},
7458{0x3400000, 0x7f7ffff0, 0xff7ffff0, 0x0, 0x3400000},
7459{0x3400000, 0x7f7ffff0, 0xff7fffff, 0xf5700000, 0x3400000},
7460{0x3400000, 0x7f7ffff0, 0xff800000, 0xff800000, 0x3400000},
7461{0x3400000, 0x7f7ffff0, 0xff800001, 0x7fc00000, 0x3400001},
7462{0x3400000, 0x7f7ffff0, 0xff984a37, 0x7fc00000, 0x3400001},
7463{0x3400000, 0x7f7ffff0, 0xffbfffff, 0x7fc00000, 0x3400001},
7464{0x3400000, 0x7f7ffff0, 0xffc00000, 0x7fc00000, 0x3400000},
7465{0x3400000, 0x7f7ffff0, 0xffd9ba98, 0x7fc00000, 0x3400000},
7466{0x3400000, 0x7f7ffff0, 0xffffffff, 0x7fc00000, 0x3400000},
7467{0x3400000, 0x7f7ffff0, 0x4f3495cb, 0x7f7ffff1, 0x3400010},
7468{0x3400000, 0x7f7ffff0, 0xe73a5134, 0x7f7ffff0, 0x3400010},
7469{0x3400000, 0x7f7ffff0, 0x7c994e9e, 0x7f800000, 0x3400014},
7470{0x3400000, 0x7f7ffff0, 0x6164bd6c, 0x7f7ffff1, 0x3400010},
7471{0x3400000, 0x7f7ffff0, 0x9503366, 0x7f7ffff1, 0x3400010},
7472{0x3400000, 0x7f7ffff0, 0xbf5a97c9, 0x7f7ffff0, 0x3400010},
7473{0x3400000, 0x7f7ffff0, 0xe6ff1a14, 0x7f7ffff0, 0x3400010},
7474{0x3400000, 0x7f7ffff0, 0x77f31e2f, 0x7f800000, 0x3400014},
7475{0x3400000, 0x7f7ffff0, 0xaab4d7d8, 0x7f7ffff0, 0x3400010},
7476{0x3400000, 0x7f7ffff0, 0x966320b, 0x7f7ffff1, 0x3400010},
7477{0x3400000, 0x7f7ffff0, 0xb26bddee, 0x7f7ffff0, 0x3400010},
7478{0x3400000, 0x7f7ffff0, 0xb5c8e5d3, 0x7f7ffff0, 0x3400010},
7479{0x3400000, 0x7f7ffff0, 0x317285d3, 0x7f7ffff1, 0x3400010},
7480{0x3400000, 0x7f7ffff0, 0x3c9623b1, 0x7f7ffff1, 0x3400010},
7481{0x3400000, 0x7f7ffff0, 0x51fd2c7c, 0x7f7ffff1, 0x3400010},
7482{0x3400000, 0x7f7ffff0, 0x7b906a6c, 0x7f800000, 0x3400014},
7483{0x3400000, 0x7f7fffff, 0x0, 0x7f7fffff, 0x3400000},
7484{0x3400000, 0x7f7fffff, 0x1, 0x7f7fffff, 0x3400080},
7485{0x3400000, 0x7f7fffff, 0x76, 0x7f7fffff, 0x3400080},
7486{0x3400000, 0x7f7fffff, 0x2b94, 0x7f7fffff, 0x3400080},
7487{0x3400000, 0x7f7fffff, 0x636d24, 0x7f7fffff, 0x3400080},
7488{0x3400000, 0x7f7fffff, 0x7fffff, 0x7f7fffff, 0x3400080},
7489{0x3400000, 0x7f7fffff, 0x800000, 0x7f800000, 0x3400014},
7490{0x3400000, 0x7f7fffff, 0x800002, 0x7f800000, 0x3400014},
7491{0x3400000, 0x7f7fffff, 0x1398437, 0x7f800000, 0x3400014},
7492{0x3400000, 0x7f7fffff, 0xba98d27, 0x7f800000, 0x3400014},
7493{0x3400000, 0x7f7fffff, 0xba98d7a, 0x7f800000, 0x3400014},
7494{0x3400000, 0x7f7fffff, 0x751f853a, 0x7f800000, 0x3400014},
7495{0x3400000, 0x7f7fffff, 0x7f7ffff0, 0x7f800000, 0x3400014},
7496{0x3400000, 0x7f7fffff, 0x7f7fffff, 0x7f800000, 0x3400014},
7497{0x3400000, 0x7f7fffff, 0x7f800000, 0x7f800000, 0x3400000},
7498{0x3400000, 0x7f7fffff, 0x7f800001, 0x7fc00000, 0x3400001},
7499{0x3400000, 0x7f7fffff, 0x7f984a37, 0x7fc00000, 0x3400001},
7500{0x3400000, 0x7f7fffff, 0x7fbfffff, 0x7fc00000, 0x3400001},
7501{0x3400000, 0x7f7fffff, 0x7fc00000, 0x7fc00000, 0x3400000},
7502{0x3400000, 0x7f7fffff, 0x7fd9ba98, 0x7fc00000, 0x3400000},
7503{0x3400000, 0x7f7fffff, 0x7fffffff, 0x7fc00000, 0x3400000},
7504{0x3400000, 0x7f7fffff, 0x80000000, 0x7f7fffff, 0x3400000},
7505{0x3400000, 0x7f7fffff, 0x80000001, 0x7f7fffff, 0x3400080},
7506{0x3400000, 0x7f7fffff, 0x80000076, 0x7f7fffff, 0x3400080},
7507{0x3400000, 0x7f7fffff, 0x80002b94, 0x7f7fffff, 0x3400080},
7508{0x3400000, 0x7f7fffff, 0x80636d24, 0x7f7fffff, 0x3400080},
7509{0x3400000, 0x7f7fffff, 0x807fffff, 0x7f7fffff, 0x3400080},
7510{0x3400000, 0x7f7fffff, 0x80800000, 0x7f7fffff, 0x3400010},
7511{0x3400000, 0x7f7fffff, 0x80800002, 0x7f7fffff, 0x3400010},
7512{0x3400000, 0x7f7fffff, 0x81398437, 0x7f7fffff, 0x3400010},
7513{0x3400000, 0x7f7fffff, 0x8ba98d27, 0x7f7fffff, 0x3400010},
7514{0x3400000, 0x7f7fffff, 0x8ba98d7a, 0x7f7fffff, 0x3400010},
7515{0x3400000, 0x7f7fffff, 0xf51f853a, 0x7f7ffff6, 0x3400010},
7516{0x3400000, 0x7f7fffff, 0xff7ffff0, 0x75700000, 0x3400000},
7517{0x3400000, 0x7f7fffff, 0xff7fffff, 0x0, 0x3400000},
7518{0x3400000, 0x7f7fffff, 0xff800000, 0xff800000, 0x3400000},
7519{0x3400000, 0x7f7fffff, 0xff800001, 0x7fc00000, 0x3400001},
7520{0x3400000, 0x7f7fffff, 0xff984a37, 0x7fc00000, 0x3400001},
7521{0x3400000, 0x7f7fffff, 0xffbfffff, 0x7fc00000, 0x3400001},
7522{0x3400000, 0x7f7fffff, 0xffc00000, 0x7fc00000, 0x3400000},
7523{0x3400000, 0x7f7fffff, 0xffd9ba98, 0x7fc00000, 0x3400000},
7524{0x3400000, 0x7f7fffff, 0xffffffff, 0x7fc00000, 0x3400000},
7525{0x3400000, 0x7f7fffff, 0x4f3495cb, 0x7f800000, 0x3400014},
7526{0x3400000, 0x7f7fffff, 0xe73a5134, 0x7f7fffff, 0x3400010},
7527{0x3400000, 0x7f7fffff, 0x7c994e9e, 0x7f800000, 0x3400014},
7528{0x3400000, 0x7f7fffff, 0x6164bd6c, 0x7f800000, 0x3400014},
7529{0x3400000, 0x7f7fffff, 0x9503366, 0x7f800000, 0x3400014},
7530{0x3400000, 0x7f7fffff, 0xbf5a97c9, 0x7f7fffff, 0x3400010},
7531{0x3400000, 0x7f7fffff, 0xe6ff1a14, 0x7f7fffff, 0x3400010},
7532{0x3400000, 0x7f7fffff, 0x77f31e2f, 0x7f800000, 0x3400014},
7533{0x3400000, 0x7f7fffff, 0xaab4d7d8, 0x7f7fffff, 0x3400010},
7534{0x3400000, 0x7f7fffff, 0x966320b, 0x7f800000, 0x3400014},
7535{0x3400000, 0x7f7fffff, 0xb26bddee, 0x7f7fffff, 0x3400010},
7536{0x3400000, 0x7f7fffff, 0xb5c8e5d3, 0x7f7fffff, 0x3400010},
7537{0x3400000, 0x7f7fffff, 0x317285d3, 0x7f800000, 0x3400014},
7538{0x3400000, 0x7f7fffff, 0x3c9623b1, 0x7f800000, 0x3400014},
7539{0x3400000, 0x7f7fffff, 0x51fd2c7c, 0x7f800000, 0x3400014},
7540{0x3400000, 0x7f7fffff, 0x7b906a6c, 0x7f800000, 0x3400014},
7541{0x3400000, 0x7f800000, 0x0, 0x7f800000, 0x3400000},
7542{0x3400000, 0x7f800000, 0x1, 0x7f800000, 0x3400080},
7543{0x3400000, 0x7f800000, 0x76, 0x7f800000, 0x3400080},
7544{0x3400000, 0x7f800000, 0x2b94, 0x7f800000, 0x3400080},
7545{0x3400000, 0x7f800000, 0x636d24, 0x7f800000, 0x3400080},
7546{0x3400000, 0x7f800000, 0x7fffff, 0x7f800000, 0x3400080},
7547{0x3400000, 0x7f800000, 0x800000, 0x7f800000, 0x3400000},
7548{0x3400000, 0x7f800000, 0x800002, 0x7f800000, 0x3400000},
7549{0x3400000, 0x7f800000, 0x1398437, 0x7f800000, 0x3400000},
7550{0x3400000, 0x7f800000, 0xba98d27, 0x7f800000, 0x3400000},
7551{0x3400000, 0x7f800000, 0xba98d7a, 0x7f800000, 0x3400000},
7552{0x3400000, 0x7f800000, 0x751f853a, 0x7f800000, 0x3400000},
7553{0x3400000, 0x7f800000, 0x7f7ffff0, 0x7f800000, 0x3400000},
7554{0x3400000, 0x7f800000, 0x7f7fffff, 0x7f800000, 0x3400000},
7555{0x3400000, 0x7f800000, 0x7f800000, 0x7f800000, 0x3400000},
7556{0x3400000, 0x7f800000, 0x7f800001, 0x7fc00000, 0x3400001},
7557{0x3400000, 0x7f800000, 0x7f984a37, 0x7fc00000, 0x3400001},
7558{0x3400000, 0x7f800000, 0x7fbfffff, 0x7fc00000, 0x3400001},
7559{0x3400000, 0x7f800000, 0x7fc00000, 0x7fc00000, 0x3400000},
7560{0x3400000, 0x7f800000, 0x7fd9ba98, 0x7fc00000, 0x3400000},
7561{0x3400000, 0x7f800000, 0x7fffffff, 0x7fc00000, 0x3400000},
7562{0x3400000, 0x7f800000, 0x80000000, 0x7f800000, 0x3400000},
7563{0x3400000, 0x7f800000, 0x80000001, 0x7f800000, 0x3400080},
7564{0x3400000, 0x7f800000, 0x80000076, 0x7f800000, 0x3400080},
7565{0x3400000, 0x7f800000, 0x80002b94, 0x7f800000, 0x3400080},
7566{0x3400000, 0x7f800000, 0x80636d24, 0x7f800000, 0x3400080},
7567{0x3400000, 0x7f800000, 0x807fffff, 0x7f800000, 0x3400080},
7568{0x3400000, 0x7f800000, 0x80800000, 0x7f800000, 0x3400000},
7569{0x3400000, 0x7f800000, 0x80800002, 0x7f800000, 0x3400000},
7570{0x3400000, 0x7f800000, 0x81398437, 0x7f800000, 0x3400000},
7571{0x3400000, 0x7f800000, 0x8ba98d27, 0x7f800000, 0x3400000},
7572{0x3400000, 0x7f800000, 0x8ba98d7a, 0x7f800000, 0x3400000},
7573{0x3400000, 0x7f800000, 0xf51f853a, 0x7f800000, 0x3400000},
7574{0x3400000, 0x7f800000, 0xff7ffff0, 0x7f800000, 0x3400000},
7575{0x3400000, 0x7f800000, 0xff7fffff, 0x7f800000, 0x3400000},
7576{0x3400000, 0x7f800000, 0xff800000, 0x7fc00000, 0x3400001},
7577{0x3400000, 0x7f800000, 0xff800001, 0x7fc00000, 0x3400001},
7578{0x3400000, 0x7f800000, 0xff984a37, 0x7fc00000, 0x3400001},
7579{0x3400000, 0x7f800000, 0xffbfffff, 0x7fc00000, 0x3400001},
7580{0x3400000, 0x7f800000, 0xffc00000, 0x7fc00000, 0x3400000},
7581{0x3400000, 0x7f800000, 0xffd9ba98, 0x7fc00000, 0x3400000},
7582{0x3400000, 0x7f800000, 0xffffffff, 0x7fc00000, 0x3400000},
7583{0x3400000, 0x7f800000, 0x4f3495cb, 0x7f800000, 0x3400000},
7584{0x3400000, 0x7f800000, 0xe73a5134, 0x7f800000, 0x3400000},
7585{0x3400000, 0x7f800000, 0x7c994e9e, 0x7f800000, 0x3400000},
7586{0x3400000, 0x7f800000, 0x6164bd6c, 0x7f800000, 0x3400000},
7587{0x3400000, 0x7f800000, 0x9503366, 0x7f800000, 0x3400000},
7588{0x3400000, 0x7f800000, 0xbf5a97c9, 0x7f800000, 0x3400000},
7589{0x3400000, 0x7f800000, 0xe6ff1a14, 0x7f800000, 0x3400000},
7590{0x3400000, 0x7f800000, 0x77f31e2f, 0x7f800000, 0x3400000},
7591{0x3400000, 0x7f800000, 0xaab4d7d8, 0x7f800000, 0x3400000},
7592{0x3400000, 0x7f800000, 0x966320b, 0x7f800000, 0x3400000},
7593{0x3400000, 0x7f800000, 0xb26bddee, 0x7f800000, 0x3400000},
7594{0x3400000, 0x7f800000, 0xb5c8e5d3, 0x7f800000, 0x3400000},
7595{0x3400000, 0x7f800000, 0x317285d3, 0x7f800000, 0x3400000},
7596{0x3400000, 0x7f800000, 0x3c9623b1, 0x7f800000, 0x3400000},
7597{0x3400000, 0x7f800000, 0x51fd2c7c, 0x7f800000, 0x3400000},
7598{0x3400000, 0x7f800000, 0x7b906a6c, 0x7f800000, 0x3400000},
7599{0x3400000, 0x7f800001, 0x0, 0x7fc00000, 0x3400001},
7600{0x3400000, 0x7f800001, 0x1, 0x7fc00000, 0x3400081},
7601{0x3400000, 0x7f800001, 0x76, 0x7fc00000, 0x3400081},
7602{0x3400000, 0x7f800001, 0x2b94, 0x7fc00000, 0x3400081},
7603{0x3400000, 0x7f800001, 0x636d24, 0x7fc00000, 0x3400081},
7604{0x3400000, 0x7f800001, 0x7fffff, 0x7fc00000, 0x3400081},
7605{0x3400000, 0x7f800001, 0x800000, 0x7fc00000, 0x3400001},
7606{0x3400000, 0x7f800001, 0x800002, 0x7fc00000, 0x3400001},
7607{0x3400000, 0x7f800001, 0x1398437, 0x7fc00000, 0x3400001},
7608{0x3400000, 0x7f800001, 0xba98d27, 0x7fc00000, 0x3400001},
7609{0x3400000, 0x7f800001, 0xba98d7a, 0x7fc00000, 0x3400001},
7610{0x3400000, 0x7f800001, 0x751f853a, 0x7fc00000, 0x3400001},
7611{0x3400000, 0x7f800001, 0x7f7ffff0, 0x7fc00000, 0x3400001},
7612{0x3400000, 0x7f800001, 0x7f7fffff, 0x7fc00000, 0x3400001},
7613{0x3400000, 0x7f800001, 0x7f800000, 0x7fc00000, 0x3400001},
7614{0x3400000, 0x7f800001, 0x7f800001, 0x7fc00000, 0x3400001},
7615{0x3400000, 0x7f800001, 0x7f984a37, 0x7fc00000, 0x3400001},
7616{0x3400000, 0x7f800001, 0x7fbfffff, 0x7fc00000, 0x3400001},
7617{0x3400000, 0x7f800001, 0x7fc00000, 0x7fc00000, 0x3400001},
7618{0x3400000, 0x7f800001, 0x7fd9ba98, 0x7fc00000, 0x3400001},
7619{0x3400000, 0x7f800001, 0x7fffffff, 0x7fc00000, 0x3400001},
7620{0x3400000, 0x7f800001, 0x80000000, 0x7fc00000, 0x3400001},
7621{0x3400000, 0x7f800001, 0x80000001, 0x7fc00000, 0x3400081},
7622{0x3400000, 0x7f800001, 0x80000076, 0x7fc00000, 0x3400081},
7623{0x3400000, 0x7f800001, 0x80002b94, 0x7fc00000, 0x3400081},
7624{0x3400000, 0x7f800001, 0x80636d24, 0x7fc00000, 0x3400081},
7625{0x3400000, 0x7f800001, 0x807fffff, 0x7fc00000, 0x3400081},
7626{0x3400000, 0x7f800001, 0x80800000, 0x7fc00000, 0x3400001},
7627{0x3400000, 0x7f800001, 0x80800002, 0x7fc00000, 0x3400001},
7628{0x3400000, 0x7f800001, 0x81398437, 0x7fc00000, 0x3400001},
7629{0x3400000, 0x7f800001, 0x8ba98d27, 0x7fc00000, 0x3400001},
7630{0x3400000, 0x7f800001, 0x8ba98d7a, 0x7fc00000, 0x3400001},
7631{0x3400000, 0x7f800001, 0xf51f853a, 0x7fc00000, 0x3400001},
7632{0x3400000, 0x7f800001, 0xff7ffff0, 0x7fc00000, 0x3400001},
7633{0x3400000, 0x7f800001, 0xff7fffff, 0x7fc00000, 0x3400001},
7634{0x3400000, 0x7f800001, 0xff800000, 0x7fc00000, 0x3400001},
7635{0x3400000, 0x7f800001, 0xff800001, 0x7fc00000, 0x3400001},
7636{0x3400000, 0x7f800001, 0xff984a37, 0x7fc00000, 0x3400001},
7637{0x3400000, 0x7f800001, 0xffbfffff, 0x7fc00000, 0x3400001},
7638{0x3400000, 0x7f800001, 0xffc00000, 0x7fc00000, 0x3400001},
7639{0x3400000, 0x7f800001, 0xffd9ba98, 0x7fc00000, 0x3400001},
7640{0x3400000, 0x7f800001, 0xffffffff, 0x7fc00000, 0x3400001},
7641{0x3400000, 0x7f800001, 0x4f3495cb, 0x7fc00000, 0x3400001},
7642{0x3400000, 0x7f800001, 0xe73a5134, 0x7fc00000, 0x3400001},
7643{0x3400000, 0x7f800001, 0x7c994e9e, 0x7fc00000, 0x3400001},
7644{0x3400000, 0x7f800001, 0x6164bd6c, 0x7fc00000, 0x3400001},
7645{0x3400000, 0x7f800001, 0x9503366, 0x7fc00000, 0x3400001},
7646{0x3400000, 0x7f800001, 0xbf5a97c9, 0x7fc00000, 0x3400001},
7647{0x3400000, 0x7f800001, 0xe6ff1a14, 0x7fc00000, 0x3400001},
7648{0x3400000, 0x7f800001, 0x77f31e2f, 0x7fc00000, 0x3400001},
7649{0x3400000, 0x7f800001, 0xaab4d7d8, 0x7fc00000, 0x3400001},
7650{0x3400000, 0x7f800001, 0x966320b, 0x7fc00000, 0x3400001},
7651{0x3400000, 0x7f800001, 0xb26bddee, 0x7fc00000, 0x3400001},
7652{0x3400000, 0x7f800001, 0xb5c8e5d3, 0x7fc00000, 0x3400001},
7653{0x3400000, 0x7f800001, 0x317285d3, 0x7fc00000, 0x3400001},
7654{0x3400000, 0x7f800001, 0x3c9623b1, 0x7fc00000, 0x3400001},
7655{0x3400000, 0x7f800001, 0x51fd2c7c, 0x7fc00000, 0x3400001},
7656{0x3400000, 0x7f800001, 0x7b906a6c, 0x7fc00000, 0x3400001},
7657{0x3400000, 0x7f984a37, 0x0, 0x7fc00000, 0x3400001},
7658{0x3400000, 0x7f984a37, 0x1, 0x7fc00000, 0x3400081},
7659{0x3400000, 0x7f984a37, 0x76, 0x7fc00000, 0x3400081},
7660{0x3400000, 0x7f984a37, 0x2b94, 0x7fc00000, 0x3400081},
7661{0x3400000, 0x7f984a37, 0x636d24, 0x7fc00000, 0x3400081},
7662{0x3400000, 0x7f984a37, 0x7fffff, 0x7fc00000, 0x3400081},
7663{0x3400000, 0x7f984a37, 0x800000, 0x7fc00000, 0x3400001},
7664{0x3400000, 0x7f984a37, 0x800002, 0x7fc00000, 0x3400001},
7665{0x3400000, 0x7f984a37, 0x1398437, 0x7fc00000, 0x3400001},
7666{0x3400000, 0x7f984a37, 0xba98d27, 0x7fc00000, 0x3400001},
7667{0x3400000, 0x7f984a37, 0xba98d7a, 0x7fc00000, 0x3400001},
7668{0x3400000, 0x7f984a37, 0x751f853a, 0x7fc00000, 0x3400001},
7669{0x3400000, 0x7f984a37, 0x7f7ffff0, 0x7fc00000, 0x3400001},
7670{0x3400000, 0x7f984a37, 0x7f7fffff, 0x7fc00000, 0x3400001},
7671{0x3400000, 0x7f984a37, 0x7f800000, 0x7fc00000, 0x3400001},
7672{0x3400000, 0x7f984a37, 0x7f800001, 0x7fc00000, 0x3400001},
7673{0x3400000, 0x7f984a37, 0x7f984a37, 0x7fc00000, 0x3400001},
7674{0x3400000, 0x7f984a37, 0x7fbfffff, 0x7fc00000, 0x3400001},
7675{0x3400000, 0x7f984a37, 0x7fc00000, 0x7fc00000, 0x3400001},
7676{0x3400000, 0x7f984a37, 0x7fd9ba98, 0x7fc00000, 0x3400001},
7677{0x3400000, 0x7f984a37, 0x7fffffff, 0x7fc00000, 0x3400001},
7678{0x3400000, 0x7f984a37, 0x80000000, 0x7fc00000, 0x3400001},
7679{0x3400000, 0x7f984a37, 0x80000001, 0x7fc00000, 0x3400081},
7680{0x3400000, 0x7f984a37, 0x80000076, 0x7fc00000, 0x3400081},
7681{0x3400000, 0x7f984a37, 0x80002b94, 0x7fc00000, 0x3400081},
7682{0x3400000, 0x7f984a37, 0x80636d24, 0x7fc00000, 0x3400081},
7683{0x3400000, 0x7f984a37, 0x807fffff, 0x7fc00000, 0x3400081},
7684{0x3400000, 0x7f984a37, 0x80800000, 0x7fc00000, 0x3400001},
7685{0x3400000, 0x7f984a37, 0x80800002, 0x7fc00000, 0x3400001},
7686{0x3400000, 0x7f984a37, 0x81398437, 0x7fc00000, 0x3400001},
7687{0x3400000, 0x7f984a37, 0x8ba98d27, 0x7fc00000, 0x3400001},
7688{0x3400000, 0x7f984a37, 0x8ba98d7a, 0x7fc00000, 0x3400001},
7689{0x3400000, 0x7f984a37, 0xf51f853a, 0x7fc00000, 0x3400001},
7690{0x3400000, 0x7f984a37, 0xff7ffff0, 0x7fc00000, 0x3400001},
7691{0x3400000, 0x7f984a37, 0xff7fffff, 0x7fc00000, 0x3400001},
7692{0x3400000, 0x7f984a37, 0xff800000, 0x7fc00000, 0x3400001},
7693{0x3400000, 0x7f984a37, 0xff800001, 0x7fc00000, 0x3400001},
7694{0x3400000, 0x7f984a37, 0xff984a37, 0x7fc00000, 0x3400001},
7695{0x3400000, 0x7f984a37, 0xffbfffff, 0x7fc00000, 0x3400001},
7696{0x3400000, 0x7f984a37, 0xffc00000, 0x7fc00000, 0x3400001},
7697{0x3400000, 0x7f984a37, 0xffd9ba98, 0x7fc00000, 0x3400001},
7698{0x3400000, 0x7f984a37, 0xffffffff, 0x7fc00000, 0x3400001},
7699{0x3400000, 0x7f984a37, 0x4f3495cb, 0x7fc00000, 0x3400001},
7700{0x3400000, 0x7f984a37, 0xe73a5134, 0x7fc00000, 0x3400001},
7701{0x3400000, 0x7f984a37, 0x7c994e9e, 0x7fc00000, 0x3400001},
7702{0x3400000, 0x7f984a37, 0x6164bd6c, 0x7fc00000, 0x3400001},
7703{0x3400000, 0x7f984a37, 0x9503366, 0x7fc00000, 0x3400001},
7704{0x3400000, 0x7f984a37, 0xbf5a97c9, 0x7fc00000, 0x3400001},
7705{0x3400000, 0x7f984a37, 0xe6ff1a14, 0x7fc00000, 0x3400001},
7706{0x3400000, 0x7f984a37, 0x77f31e2f, 0x7fc00000, 0x3400001},
7707{0x3400000, 0x7f984a37, 0xaab4d7d8, 0x7fc00000, 0x3400001},
7708{0x3400000, 0x7f984a37, 0x966320b, 0x7fc00000, 0x3400001},
7709{0x3400000, 0x7f984a37, 0xb26bddee, 0x7fc00000, 0x3400001},
7710{0x3400000, 0x7f984a37, 0xb5c8e5d3, 0x7fc00000, 0x3400001},
7711{0x3400000, 0x7f984a37, 0x317285d3, 0x7fc00000, 0x3400001},
7712{0x3400000, 0x7f984a37, 0x3c9623b1, 0x7fc00000, 0x3400001},
7713{0x3400000, 0x7f984a37, 0x51fd2c7c, 0x7fc00000, 0x3400001},
7714{0x3400000, 0x7f984a37, 0x7b906a6c, 0x7fc00000, 0x3400001},
7715{0x3400000, 0x7fbfffff, 0x0, 0x7fc00000, 0x3400001},
7716{0x3400000, 0x7fbfffff, 0x1, 0x7fc00000, 0x3400081},
7717{0x3400000, 0x7fbfffff, 0x76, 0x7fc00000, 0x3400081},
7718{0x3400000, 0x7fbfffff, 0x2b94, 0x7fc00000, 0x3400081},
7719{0x3400000, 0x7fbfffff, 0x636d24, 0x7fc00000, 0x3400081},
7720{0x3400000, 0x7fbfffff, 0x7fffff, 0x7fc00000, 0x3400081},
7721{0x3400000, 0x7fbfffff, 0x800000, 0x7fc00000, 0x3400001},
7722{0x3400000, 0x7fbfffff, 0x800002, 0x7fc00000, 0x3400001},
7723{0x3400000, 0x7fbfffff, 0x1398437, 0x7fc00000, 0x3400001},
7724{0x3400000, 0x7fbfffff, 0xba98d27, 0x7fc00000, 0x3400001},
7725{0x3400000, 0x7fbfffff, 0xba98d7a, 0x7fc00000, 0x3400001},
7726{0x3400000, 0x7fbfffff, 0x751f853a, 0x7fc00000, 0x3400001},
7727{0x3400000, 0x7fbfffff, 0x7f7ffff0, 0x7fc00000, 0x3400001},
7728{0x3400000, 0x7fbfffff, 0x7f7fffff, 0x7fc00000, 0x3400001},
7729{0x3400000, 0x7fbfffff, 0x7f800000, 0x7fc00000, 0x3400001},
7730{0x3400000, 0x7fbfffff, 0x7f800001, 0x7fc00000, 0x3400001},
7731{0x3400000, 0x7fbfffff, 0x7f984a37, 0x7fc00000, 0x3400001},
7732{0x3400000, 0x7fbfffff, 0x7fbfffff, 0x7fc00000, 0x3400001},
7733{0x3400000, 0x7fbfffff, 0x7fc00000, 0x7fc00000, 0x3400001},
7734{0x3400000, 0x7fbfffff, 0x7fd9ba98, 0x7fc00000, 0x3400001},
7735{0x3400000, 0x7fbfffff, 0x7fffffff, 0x7fc00000, 0x3400001},
7736{0x3400000, 0x7fbfffff, 0x80000000, 0x7fc00000, 0x3400001},
7737{0x3400000, 0x7fbfffff, 0x80000001, 0x7fc00000, 0x3400081},
7738{0x3400000, 0x7fbfffff, 0x80000076, 0x7fc00000, 0x3400081},
7739{0x3400000, 0x7fbfffff, 0x80002b94, 0x7fc00000, 0x3400081},
7740{0x3400000, 0x7fbfffff, 0x80636d24, 0x7fc00000, 0x3400081},
7741{0x3400000, 0x7fbfffff, 0x807fffff, 0x7fc00000, 0x3400081},
7742{0x3400000, 0x7fbfffff, 0x80800000, 0x7fc00000, 0x3400001},
7743{0x3400000, 0x7fbfffff, 0x80800002, 0x7fc00000, 0x3400001},
7744{0x3400000, 0x7fbfffff, 0x81398437, 0x7fc00000, 0x3400001},
7745{0x3400000, 0x7fbfffff, 0x8ba98d27, 0x7fc00000, 0x3400001},
7746{0x3400000, 0x7fbfffff, 0x8ba98d7a, 0x7fc00000, 0x3400001},
7747{0x3400000, 0x7fbfffff, 0xf51f853a, 0x7fc00000, 0x3400001},
7748{0x3400000, 0x7fbfffff, 0xff7ffff0, 0x7fc00000, 0x3400001},
7749{0x3400000, 0x7fbfffff, 0xff7fffff, 0x7fc00000, 0x3400001},
7750{0x3400000, 0x7fbfffff, 0xff800000, 0x7fc00000, 0x3400001},
7751{0x3400000, 0x7fbfffff, 0xff800001, 0x7fc00000, 0x3400001},
7752{0x3400000, 0x7fbfffff, 0xff984a37, 0x7fc00000, 0x3400001},
7753{0x3400000, 0x7fbfffff, 0xffbfffff, 0x7fc00000, 0x3400001},
7754{0x3400000, 0x7fbfffff, 0xffc00000, 0x7fc00000, 0x3400001},
7755{0x3400000, 0x7fbfffff, 0xffd9ba98, 0x7fc00000, 0x3400001},
7756{0x3400000, 0x7fbfffff, 0xffffffff, 0x7fc00000, 0x3400001},
7757{0x3400000, 0x7fbfffff, 0x4f3495cb, 0x7fc00000, 0x3400001},
7758{0x3400000, 0x7fbfffff, 0xe73a5134, 0x7fc00000, 0x3400001},
7759{0x3400000, 0x7fbfffff, 0x7c994e9e, 0x7fc00000, 0x3400001},
7760{0x3400000, 0x7fbfffff, 0x6164bd6c, 0x7fc00000, 0x3400001},
7761{0x3400000, 0x7fbfffff, 0x9503366, 0x7fc00000, 0x3400001},
7762{0x3400000, 0x7fbfffff, 0xbf5a97c9, 0x7fc00000, 0x3400001},
7763{0x3400000, 0x7fbfffff, 0xe6ff1a14, 0x7fc00000, 0x3400001},
7764{0x3400000, 0x7fbfffff, 0x77f31e2f, 0x7fc00000, 0x3400001},
7765{0x3400000, 0x7fbfffff, 0xaab4d7d8, 0x7fc00000, 0x3400001},
7766{0x3400000, 0x7fbfffff, 0x966320b, 0x7fc00000, 0x3400001},
7767{0x3400000, 0x7fbfffff, 0xb26bddee, 0x7fc00000, 0x3400001},
7768{0x3400000, 0x7fbfffff, 0xb5c8e5d3, 0x7fc00000, 0x3400001},
7769{0x3400000, 0x7fbfffff, 0x317285d3, 0x7fc00000, 0x3400001},
7770{0x3400000, 0x7fbfffff, 0x3c9623b1, 0x7fc00000, 0x3400001},
7771{0x3400000, 0x7fbfffff, 0x51fd2c7c, 0x7fc00000, 0x3400001},
7772{0x3400000, 0x7fbfffff, 0x7b906a6c, 0x7fc00000, 0x3400001},
7773{0x3400000, 0x7fc00000, 0x0, 0x7fc00000, 0x3400000},
7774{0x3400000, 0x7fc00000, 0x1, 0x7fc00000, 0x3400080},
7775{0x3400000, 0x7fc00000, 0x76, 0x7fc00000, 0x3400080},
7776{0x3400000, 0x7fc00000, 0x2b94, 0x7fc00000, 0x3400080},
7777{0x3400000, 0x7fc00000, 0x636d24, 0x7fc00000, 0x3400080},
7778{0x3400000, 0x7fc00000, 0x7fffff, 0x7fc00000, 0x3400080},
7779{0x3400000, 0x7fc00000, 0x800000, 0x7fc00000, 0x3400000},
7780{0x3400000, 0x7fc00000, 0x800002, 0x7fc00000, 0x3400000},
7781{0x3400000, 0x7fc00000, 0x1398437, 0x7fc00000, 0x3400000},
7782{0x3400000, 0x7fc00000, 0xba98d27, 0x7fc00000, 0x3400000},
7783{0x3400000, 0x7fc00000, 0xba98d7a, 0x7fc00000, 0x3400000},
7784{0x3400000, 0x7fc00000, 0x751f853a, 0x7fc00000, 0x3400000},
7785{0x3400000, 0x7fc00000, 0x7f7ffff0, 0x7fc00000, 0x3400000},
7786{0x3400000, 0x7fc00000, 0x7f7fffff, 0x7fc00000, 0x3400000},
7787{0x3400000, 0x7fc00000, 0x7f800000, 0x7fc00000, 0x3400000},
7788{0x3400000, 0x7fc00000, 0x7f800001, 0x7fc00000, 0x3400001},
7789{0x3400000, 0x7fc00000, 0x7f984a37, 0x7fc00000, 0x3400001},
7790{0x3400000, 0x7fc00000, 0x7fbfffff, 0x7fc00000, 0x3400001},
7791{0x3400000, 0x7fc00000, 0x7fc00000, 0x7fc00000, 0x3400000},
7792{0x3400000, 0x7fc00000, 0x7fd9ba98, 0x7fc00000, 0x3400000},
7793{0x3400000, 0x7fc00000, 0x7fffffff, 0x7fc00000, 0x3400000},
7794{0x3400000, 0x7fc00000, 0x80000000, 0x7fc00000, 0x3400000},
7795{0x3400000, 0x7fc00000, 0x80000001, 0x7fc00000, 0x3400080},
7796{0x3400000, 0x7fc00000, 0x80000076, 0x7fc00000, 0x3400080},
7797{0x3400000, 0x7fc00000, 0x80002b94, 0x7fc00000, 0x3400080},
7798{0x3400000, 0x7fc00000, 0x80636d24, 0x7fc00000, 0x3400080},
7799{0x3400000, 0x7fc00000, 0x807fffff, 0x7fc00000, 0x3400080},
7800{0x3400000, 0x7fc00000, 0x80800000, 0x7fc00000, 0x3400000},
7801{0x3400000, 0x7fc00000, 0x80800002, 0x7fc00000, 0x3400000},
7802{0x3400000, 0x7fc00000, 0x81398437, 0x7fc00000, 0x3400000},
7803{0x3400000, 0x7fc00000, 0x8ba98d27, 0x7fc00000, 0x3400000},
7804{0x3400000, 0x7fc00000, 0x8ba98d7a, 0x7fc00000, 0x3400000},
7805{0x3400000, 0x7fc00000, 0xf51f853a, 0x7fc00000, 0x3400000},
7806{0x3400000, 0x7fc00000, 0xff7ffff0, 0x7fc00000, 0x3400000},
7807{0x3400000, 0x7fc00000, 0xff7fffff, 0x7fc00000, 0x3400000},
7808{0x3400000, 0x7fc00000, 0xff800000, 0x7fc00000, 0x3400000},
7809{0x3400000, 0x7fc00000, 0xff800001, 0x7fc00000, 0x3400001},
7810{0x3400000, 0x7fc00000, 0xff984a37, 0x7fc00000, 0x3400001},
7811{0x3400000, 0x7fc00000, 0xffbfffff, 0x7fc00000, 0x3400001},
7812{0x3400000, 0x7fc00000, 0xffc00000, 0x7fc00000, 0x3400000},
7813{0x3400000, 0x7fc00000, 0xffd9ba98, 0x7fc00000, 0x3400000},
7814{0x3400000, 0x7fc00000, 0xffffffff, 0x7fc00000, 0x3400000},
7815{0x3400000, 0x7fc00000, 0x4f3495cb, 0x7fc00000, 0x3400000},
7816{0x3400000, 0x7fc00000, 0xe73a5134, 0x7fc00000, 0x3400000},
7817{0x3400000, 0x7fc00000, 0x7c994e9e, 0x7fc00000, 0x3400000},
7818{0x3400000, 0x7fc00000, 0x6164bd6c, 0x7fc00000, 0x3400000},
7819{0x3400000, 0x7fc00000, 0x9503366, 0x7fc00000, 0x3400000},
7820{0x3400000, 0x7fc00000, 0xbf5a97c9, 0x7fc00000, 0x3400000},
7821{0x3400000, 0x7fc00000, 0xe6ff1a14, 0x7fc00000, 0x3400000},
7822{0x3400000, 0x7fc00000, 0x77f31e2f, 0x7fc00000, 0x3400000},
7823{0x3400000, 0x7fc00000, 0xaab4d7d8, 0x7fc00000, 0x3400000},
7824{0x3400000, 0x7fc00000, 0x966320b, 0x7fc00000, 0x3400000},
7825{0x3400000, 0x7fc00000, 0xb26bddee, 0x7fc00000, 0x3400000},
7826{0x3400000, 0x7fc00000, 0xb5c8e5d3, 0x7fc00000, 0x3400000},
7827{0x3400000, 0x7fc00000, 0x317285d3, 0x7fc00000, 0x3400000},
7828{0x3400000, 0x7fc00000, 0x3c9623b1, 0x7fc00000, 0x3400000},
7829{0x3400000, 0x7fc00000, 0x51fd2c7c, 0x7fc00000, 0x3400000},
7830{0x3400000, 0x7fc00000, 0x7b906a6c, 0x7fc00000, 0x3400000},
7831{0x3400000, 0x7fd9ba98, 0x0, 0x7fc00000, 0x3400000},
7832{0x3400000, 0x7fd9ba98, 0x1, 0x7fc00000, 0x3400080},
7833{0x3400000, 0x7fd9ba98, 0x76, 0x7fc00000, 0x3400080},
7834{0x3400000, 0x7fd9ba98, 0x2b94, 0x7fc00000, 0x3400080},
7835{0x3400000, 0x7fd9ba98, 0x636d24, 0x7fc00000, 0x3400080},
7836{0x3400000, 0x7fd9ba98, 0x7fffff, 0x7fc00000, 0x3400080},
7837{0x3400000, 0x7fd9ba98, 0x800000, 0x7fc00000, 0x3400000},
7838{0x3400000, 0x7fd9ba98, 0x800002, 0x7fc00000, 0x3400000},
7839{0x3400000, 0x7fd9ba98, 0x1398437, 0x7fc00000, 0x3400000},
7840{0x3400000, 0x7fd9ba98, 0xba98d27, 0x7fc00000, 0x3400000},
7841{0x3400000, 0x7fd9ba98, 0xba98d7a, 0x7fc00000, 0x3400000},
7842{0x3400000, 0x7fd9ba98, 0x751f853a, 0x7fc00000, 0x3400000},
7843{0x3400000, 0x7fd9ba98, 0x7f7ffff0, 0x7fc00000, 0x3400000},
7844{0x3400000, 0x7fd9ba98, 0x7f7fffff, 0x7fc00000, 0x3400000},
7845{0x3400000, 0x7fd9ba98, 0x7f800000, 0x7fc00000, 0x3400000},
7846{0x3400000, 0x7fd9ba98, 0x7f800001, 0x7fc00000, 0x3400001},
7847{0x3400000, 0x7fd9ba98, 0x7f984a37, 0x7fc00000, 0x3400001},
7848{0x3400000, 0x7fd9ba98, 0x7fbfffff, 0x7fc00000, 0x3400001},
7849{0x3400000, 0x7fd9ba98, 0x7fc00000, 0x7fc00000, 0x3400000},
7850{0x3400000, 0x7fd9ba98, 0x7fd9ba98, 0x7fc00000, 0x3400000},
7851{0x3400000, 0x7fd9ba98, 0x7fffffff, 0x7fc00000, 0x3400000},
7852{0x3400000, 0x7fd9ba98, 0x80000000, 0x7fc00000, 0x3400000},
7853{0x3400000, 0x7fd9ba98, 0x80000001, 0x7fc00000, 0x3400080},
7854{0x3400000, 0x7fd9ba98, 0x80000076, 0x7fc00000, 0x3400080},
7855{0x3400000, 0x7fd9ba98, 0x80002b94, 0x7fc00000, 0x3400080},
7856{0x3400000, 0x7fd9ba98, 0x80636d24, 0x7fc00000, 0x3400080},
7857{0x3400000, 0x7fd9ba98, 0x807fffff, 0x7fc00000, 0x3400080},
7858{0x3400000, 0x7fd9ba98, 0x80800000, 0x7fc00000, 0x3400000},
7859{0x3400000, 0x7fd9ba98, 0x80800002, 0x7fc00000, 0x3400000},
7860{0x3400000, 0x7fd9ba98, 0x81398437, 0x7fc00000, 0x3400000},
7861{0x3400000, 0x7fd9ba98, 0x8ba98d27, 0x7fc00000, 0x3400000},
7862{0x3400000, 0x7fd9ba98, 0x8ba98d7a, 0x7fc00000, 0x3400000},
7863{0x3400000, 0x7fd9ba98, 0xf51f853a, 0x7fc00000, 0x3400000},
7864{0x3400000, 0x7fd9ba98, 0xff7ffff0, 0x7fc00000, 0x3400000},
7865{0x3400000, 0x7fd9ba98, 0xff7fffff, 0x7fc00000, 0x3400000},
7866{0x3400000, 0x7fd9ba98, 0xff800000, 0x7fc00000, 0x3400000},
7867{0x3400000, 0x7fd9ba98, 0xff800001, 0x7fc00000, 0x3400001},
7868{0x3400000, 0x7fd9ba98, 0xff984a37, 0x7fc00000, 0x3400001},
7869{0x3400000, 0x7fd9ba98, 0xffbfffff, 0x7fc00000, 0x3400001},
7870{0x3400000, 0x7fd9ba98, 0xffc00000, 0x7fc00000, 0x3400000},
7871{0x3400000, 0x7fd9ba98, 0xffd9ba98, 0x7fc00000, 0x3400000},
7872{0x3400000, 0x7fd9ba98, 0xffffffff, 0x7fc00000, 0x3400000},
7873{0x3400000, 0x7fd9ba98, 0x4f3495cb, 0x7fc00000, 0x3400000},
7874{0x3400000, 0x7fd9ba98, 0xe73a5134, 0x7fc00000, 0x3400000},
7875{0x3400000, 0x7fd9ba98, 0x7c994e9e, 0x7fc00000, 0x3400000},
7876{0x3400000, 0x7fd9ba98, 0x6164bd6c, 0x7fc00000, 0x3400000},
7877{0x3400000, 0x7fd9ba98, 0x9503366, 0x7fc00000, 0x3400000},
7878{0x3400000, 0x7fd9ba98, 0xbf5a97c9, 0x7fc00000, 0x3400000},
7879{0x3400000, 0x7fd9ba98, 0xe6ff1a14, 0x7fc00000, 0x3400000},
7880{0x3400000, 0x7fd9ba98, 0x77f31e2f, 0x7fc00000, 0x3400000},
7881{0x3400000, 0x7fd9ba98, 0xaab4d7d8, 0x7fc00000, 0x3400000},
7882{0x3400000, 0x7fd9ba98, 0x966320b, 0x7fc00000, 0x3400000},
7883{0x3400000, 0x7fd9ba98, 0xb26bddee, 0x7fc00000, 0x3400000},
7884{0x3400000, 0x7fd9ba98, 0xb5c8e5d3, 0x7fc00000, 0x3400000},
7885{0x3400000, 0x7fd9ba98, 0x317285d3, 0x7fc00000, 0x3400000},
7886{0x3400000, 0x7fd9ba98, 0x3c9623b1, 0x7fc00000, 0x3400000},
7887{0x3400000, 0x7fd9ba98, 0x51fd2c7c, 0x7fc00000, 0x3400000},
7888{0x3400000, 0x7fd9ba98, 0x7b906a6c, 0x7fc00000, 0x3400000},
7889{0x3400000, 0x7fffffff, 0x0, 0x7fc00000, 0x3400000},
7890{0x3400000, 0x7fffffff, 0x1, 0x7fc00000, 0x3400080},
7891{0x3400000, 0x7fffffff, 0x76, 0x7fc00000, 0x3400080},
7892{0x3400000, 0x7fffffff, 0x2b94, 0x7fc00000, 0x3400080},
7893{0x3400000, 0x7fffffff, 0x636d24, 0x7fc00000, 0x3400080},
7894{0x3400000, 0x7fffffff, 0x7fffff, 0x7fc00000, 0x3400080},
7895{0x3400000, 0x7fffffff, 0x800000, 0x7fc00000, 0x3400000},
7896{0x3400000, 0x7fffffff, 0x800002, 0x7fc00000, 0x3400000},
7897{0x3400000, 0x7fffffff, 0x1398437, 0x7fc00000, 0x3400000},
7898{0x3400000, 0x7fffffff, 0xba98d27, 0x7fc00000, 0x3400000},
7899{0x3400000, 0x7fffffff, 0xba98d7a, 0x7fc00000, 0x3400000},
7900{0x3400000, 0x7fffffff, 0x751f853a, 0x7fc00000, 0x3400000},
7901{0x3400000, 0x7fffffff, 0x7f7ffff0, 0x7fc00000, 0x3400000},
7902{0x3400000, 0x7fffffff, 0x7f7fffff, 0x7fc00000, 0x3400000},
7903{0x3400000, 0x7fffffff, 0x7f800000, 0x7fc00000, 0x3400000},
7904{0x3400000, 0x7fffffff, 0x7f800001, 0x7fc00000, 0x3400001},
7905{0x3400000, 0x7fffffff, 0x7f984a37, 0x7fc00000, 0x3400001},
7906{0x3400000, 0x7fffffff, 0x7fbfffff, 0x7fc00000, 0x3400001},
7907{0x3400000, 0x7fffffff, 0x7fc00000, 0x7fc00000, 0x3400000},
7908{0x3400000, 0x7fffffff, 0x7fd9ba98, 0x7fc00000, 0x3400000},
7909{0x3400000, 0x7fffffff, 0x7fffffff, 0x7fc00000, 0x3400000},
7910{0x3400000, 0x7fffffff, 0x80000000, 0x7fc00000, 0x3400000},
7911{0x3400000, 0x7fffffff, 0x80000001, 0x7fc00000, 0x3400080},
7912{0x3400000, 0x7fffffff, 0x80000076, 0x7fc00000, 0x3400080},
7913{0x3400000, 0x7fffffff, 0x80002b94, 0x7fc00000, 0x3400080},
7914{0x3400000, 0x7fffffff, 0x80636d24, 0x7fc00000, 0x3400080},
7915{0x3400000, 0x7fffffff, 0x807fffff, 0x7fc00000, 0x3400080},
7916{0x3400000, 0x7fffffff, 0x80800000, 0x7fc00000, 0x3400000},
7917{0x3400000, 0x7fffffff, 0x80800002, 0x7fc00000, 0x3400000},
7918{0x3400000, 0x7fffffff, 0x81398437, 0x7fc00000, 0x3400000},
7919{0x3400000, 0x7fffffff, 0x8ba98d27, 0x7fc00000, 0x3400000},
7920{0x3400000, 0x7fffffff, 0x8ba98d7a, 0x7fc00000, 0x3400000},
7921{0x3400000, 0x7fffffff, 0xf51f853a, 0x7fc00000, 0x3400000},
7922{0x3400000, 0x7fffffff, 0xff7ffff0, 0x7fc00000, 0x3400000},
7923{0x3400000, 0x7fffffff, 0xff7fffff, 0x7fc00000, 0x3400000},
7924{0x3400000, 0x7fffffff, 0xff800000, 0x7fc00000, 0x3400000},
7925{0x3400000, 0x7fffffff, 0xff800001, 0x7fc00000, 0x3400001},
7926{0x3400000, 0x7fffffff, 0xff984a37, 0x7fc00000, 0x3400001},
7927{0x3400000, 0x7fffffff, 0xffbfffff, 0x7fc00000, 0x3400001},
7928{0x3400000, 0x7fffffff, 0xffc00000, 0x7fc00000, 0x3400000},
7929{0x3400000, 0x7fffffff, 0xffd9ba98, 0x7fc00000, 0x3400000},
7930{0x3400000, 0x7fffffff, 0xffffffff, 0x7fc00000, 0x3400000},
7931{0x3400000, 0x7fffffff, 0x4f3495cb, 0x7fc00000, 0x3400000},
7932{0x3400000, 0x7fffffff, 0xe73a5134, 0x7fc00000, 0x3400000},
7933{0x3400000, 0x7fffffff, 0x7c994e9e, 0x7fc00000, 0x3400000},
7934{0x3400000, 0x7fffffff, 0x6164bd6c, 0x7fc00000, 0x3400000},
7935{0x3400000, 0x7fffffff, 0x9503366, 0x7fc00000, 0x3400000},
7936{0x3400000, 0x7fffffff, 0xbf5a97c9, 0x7fc00000, 0x3400000},
7937{0x3400000, 0x7fffffff, 0xe6ff1a14, 0x7fc00000, 0x3400000},
7938{0x3400000, 0x7fffffff, 0x77f31e2f, 0x7fc00000, 0x3400000},
7939{0x3400000, 0x7fffffff, 0xaab4d7d8, 0x7fc00000, 0x3400000},
7940{0x3400000, 0x7fffffff, 0x966320b, 0x7fc00000, 0x3400000},
7941{0x3400000, 0x7fffffff, 0xb26bddee, 0x7fc00000, 0x3400000},
7942{0x3400000, 0x7fffffff, 0xb5c8e5d3, 0x7fc00000, 0x3400000},
7943{0x3400000, 0x7fffffff, 0x317285d3, 0x7fc00000, 0x3400000},
7944{0x3400000, 0x7fffffff, 0x3c9623b1, 0x7fc00000, 0x3400000},
7945{0x3400000, 0x7fffffff, 0x51fd2c7c, 0x7fc00000, 0x3400000},
7946{0x3400000, 0x7fffffff, 0x7b906a6c, 0x7fc00000, 0x3400000},
7947{0x3400000, 0x80000000, 0x0, 0x0, 0x3400000},
7948{0x3400000, 0x80000000, 0x1, 0x0, 0x3400080},
7949{0x3400000, 0x80000000, 0x76, 0x0, 0x3400080},
7950{0x3400000, 0x80000000, 0x2b94, 0x0, 0x3400080},
7951{0x3400000, 0x80000000, 0x636d24, 0x0, 0x3400080},
7952{0x3400000, 0x80000000, 0x7fffff, 0x0, 0x3400080},
7953{0x3400000, 0x80000000, 0x800000, 0x800000, 0x3400000},
7954{0x3400000, 0x80000000, 0x800002, 0x800002, 0x3400000},
7955{0x3400000, 0x80000000, 0x1398437, 0x1398437, 0x3400000},
7956{0x3400000, 0x80000000, 0xba98d27, 0xba98d27, 0x3400000},
7957{0x3400000, 0x80000000, 0xba98d7a, 0xba98d7a, 0x3400000},
7958{0x3400000, 0x80000000, 0x751f853a, 0x751f853a, 0x3400000},
7959{0x3400000, 0x80000000, 0x7f7ffff0, 0x7f7ffff0, 0x3400000},
7960{0x3400000, 0x80000000, 0x7f7fffff, 0x7f7fffff, 0x3400000},
7961{0x3400000, 0x80000000, 0x7f800000, 0x7f800000, 0x3400000},
7962{0x3400000, 0x80000000, 0x7f800001, 0x7fc00000, 0x3400001},
7963{0x3400000, 0x80000000, 0x7f984a37, 0x7fc00000, 0x3400001},
7964{0x3400000, 0x80000000, 0x7fbfffff, 0x7fc00000, 0x3400001},
7965{0x3400000, 0x80000000, 0x7fc00000, 0x7fc00000, 0x3400000},
7966{0x3400000, 0x80000000, 0x7fd9ba98, 0x7fc00000, 0x3400000},
7967{0x3400000, 0x80000000, 0x7fffffff, 0x7fc00000, 0x3400000},
7968{0x3400000, 0x80000000, 0x80000000, 0x80000000, 0x3400000},
7969{0x3400000, 0x80000000, 0x80000001, 0x0, 0x3400080},
7970{0x3400000, 0x80000000, 0x80000076, 0x0, 0x3400080},
7971{0x3400000, 0x80000000, 0x80002b94, 0x0, 0x3400080},
7972{0x3400000, 0x80000000, 0x80636d24, 0x0, 0x3400080},
7973{0x3400000, 0x80000000, 0x807fffff, 0x0, 0x3400080},
7974{0x3400000, 0x80000000, 0x80800000, 0x80800000, 0x3400000},
7975{0x3400000, 0x80000000, 0x80800002, 0x80800002, 0x3400000},
7976{0x3400000, 0x80000000, 0x81398437, 0x81398437, 0x3400000},
7977{0x3400000, 0x80000000, 0x8ba98d27, 0x8ba98d27, 0x3400000},
7978{0x3400000, 0x80000000, 0x8ba98d7a, 0x8ba98d7a, 0x3400000},
7979{0x3400000, 0x80000000, 0xf51f853a, 0xf51f853a, 0x3400000},
7980{0x3400000, 0x80000000, 0xff7ffff0, 0xff7ffff0, 0x3400000},
7981{0x3400000, 0x80000000, 0xff7fffff, 0xff7fffff, 0x3400000},
7982{0x3400000, 0x80000000, 0xff800000, 0xff800000, 0x3400000},
7983{0x3400000, 0x80000000, 0xff800001, 0x7fc00000, 0x3400001},
7984{0x3400000, 0x80000000, 0xff984a37, 0x7fc00000, 0x3400001},
7985{0x3400000, 0x80000000, 0xffbfffff, 0x7fc00000, 0x3400001},
7986{0x3400000, 0x80000000, 0xffc00000, 0x7fc00000, 0x3400000},
7987{0x3400000, 0x80000000, 0xffd9ba98, 0x7fc00000, 0x3400000},
7988{0x3400000, 0x80000000, 0xffffffff, 0x7fc00000, 0x3400000},
7989{0x3400000, 0x80000000, 0x4f3495cb, 0x4f3495cb, 0x3400000},
7990{0x3400000, 0x80000000, 0xe73a5134, 0xe73a5134, 0x3400000},
7991{0x3400000, 0x80000000, 0x7c994e9e, 0x7c994e9e, 0x3400000},
7992{0x3400000, 0x80000000, 0x6164bd6c, 0x6164bd6c, 0x3400000},
7993{0x3400000, 0x80000000, 0x9503366, 0x9503366, 0x3400000},
7994{0x3400000, 0x80000000, 0xbf5a97c9, 0xbf5a97c9, 0x3400000},
7995{0x3400000, 0x80000000, 0xe6ff1a14, 0xe6ff1a14, 0x3400000},
7996{0x3400000, 0x80000000, 0x77f31e2f, 0x77f31e2f, 0x3400000},
7997{0x3400000, 0x80000000, 0xaab4d7d8, 0xaab4d7d8, 0x3400000},
7998{0x3400000, 0x80000000, 0x966320b, 0x966320b, 0x3400000},
7999{0x3400000, 0x80000000, 0xb26bddee, 0xb26bddee, 0x3400000},
8000{0x3400000, 0x80000000, 0xb5c8e5d3, 0xb5c8e5d3, 0x3400000},
8001{0x3400000, 0x80000000, 0x317285d3, 0x317285d3, 0x3400000},
8002{0x3400000, 0x80000000, 0x3c9623b1, 0x3c9623b1, 0x3400000},
8003{0x3400000, 0x80000000, 0x51fd2c7c, 0x51fd2c7c, 0x3400000},
8004{0x3400000, 0x80000000, 0x7b906a6c, 0x7b906a6c, 0x3400000},
8005{0x3400000, 0x80000001, 0x0, 0x0, 0x3400080},
8006{0x3400000, 0x80000001, 0x1, 0x0, 0x3400080},
8007{0x3400000, 0x80000001, 0x76, 0x0, 0x3400080},
8008{0x3400000, 0x80000001, 0x2b94, 0x0, 0x3400080},
8009{0x3400000, 0x80000001, 0x636d24, 0x0, 0x3400080},
8010{0x3400000, 0x80000001, 0x7fffff, 0x0, 0x3400080},
8011{0x3400000, 0x80000001, 0x800000, 0x800000, 0x3400080},
8012{0x3400000, 0x80000001, 0x800002, 0x800002, 0x3400080},
8013{0x3400000, 0x80000001, 0x1398437, 0x1398437, 0x3400080},
8014{0x3400000, 0x80000001, 0xba98d27, 0xba98d27, 0x3400080},
8015{0x3400000, 0x80000001, 0xba98d7a, 0xba98d7a, 0x3400080},
8016{0x3400000, 0x80000001, 0x751f853a, 0x751f853a, 0x3400080},
8017{0x3400000, 0x80000001, 0x7f7ffff0, 0x7f7ffff0, 0x3400080},
8018{0x3400000, 0x80000001, 0x7f7fffff, 0x7f7fffff, 0x3400080},
8019{0x3400000, 0x80000001, 0x7f800000, 0x7f800000, 0x3400080},
8020{0x3400000, 0x80000001, 0x7f800001, 0x7fc00000, 0x3400081},
8021{0x3400000, 0x80000001, 0x7f984a37, 0x7fc00000, 0x3400081},
8022{0x3400000, 0x80000001, 0x7fbfffff, 0x7fc00000, 0x3400081},
8023{0x3400000, 0x80000001, 0x7fc00000, 0x7fc00000, 0x3400080},
8024{0x3400000, 0x80000001, 0x7fd9ba98, 0x7fc00000, 0x3400080},
8025{0x3400000, 0x80000001, 0x7fffffff, 0x7fc00000, 0x3400080},
8026{0x3400000, 0x80000001, 0x80000000, 0x0, 0x3400080},
8027{0x3400000, 0x80000001, 0x80000001, 0x0, 0x3400080},
8028{0x3400000, 0x80000001, 0x80000076, 0x0, 0x3400080},
8029{0x3400000, 0x80000001, 0x80002b94, 0x0, 0x3400080},
8030{0x3400000, 0x80000001, 0x80636d24, 0x0, 0x3400080},
8031{0x3400000, 0x80000001, 0x807fffff, 0x0, 0x3400080},
8032{0x3400000, 0x80000001, 0x80800000, 0x80800000, 0x3400080},
8033{0x3400000, 0x80000001, 0x80800002, 0x80800002, 0x3400080},
8034{0x3400000, 0x80000001, 0x81398437, 0x81398437, 0x3400080},
8035{0x3400000, 0x80000001, 0x8ba98d27, 0x8ba98d27, 0x3400080},
8036{0x3400000, 0x80000001, 0x8ba98d7a, 0x8ba98d7a, 0x3400080},
8037{0x3400000, 0x80000001, 0xf51f853a, 0xf51f853a, 0x3400080},
8038{0x3400000, 0x80000001, 0xff7ffff0, 0xff7ffff0, 0x3400080},
8039{0x3400000, 0x80000001, 0xff7fffff, 0xff7fffff, 0x3400080},
8040{0x3400000, 0x80000001, 0xff800000, 0xff800000, 0x3400080},
8041{0x3400000, 0x80000001, 0xff800001, 0x7fc00000, 0x3400081},
8042{0x3400000, 0x80000001, 0xff984a37, 0x7fc00000, 0x3400081},
8043{0x3400000, 0x80000001, 0xffbfffff, 0x7fc00000, 0x3400081},
8044{0x3400000, 0x80000001, 0xffc00000, 0x7fc00000, 0x3400080},
8045{0x3400000, 0x80000001, 0xffd9ba98, 0x7fc00000, 0x3400080},
8046{0x3400000, 0x80000001, 0xffffffff, 0x7fc00000, 0x3400080},
8047{0x3400000, 0x80000001, 0x4f3495cb, 0x4f3495cb, 0x3400080},
8048{0x3400000, 0x80000001, 0xe73a5134, 0xe73a5134, 0x3400080},
8049{0x3400000, 0x80000001, 0x7c994e9e, 0x7c994e9e, 0x3400080},
8050{0x3400000, 0x80000001, 0x6164bd6c, 0x6164bd6c, 0x3400080},
8051{0x3400000, 0x80000001, 0x9503366, 0x9503366, 0x3400080},
8052{0x3400000, 0x80000001, 0xbf5a97c9, 0xbf5a97c9, 0x3400080},
8053{0x3400000, 0x80000001, 0xe6ff1a14, 0xe6ff1a14, 0x3400080},
8054{0x3400000, 0x80000001, 0x77f31e2f, 0x77f31e2f, 0x3400080},
8055{0x3400000, 0x80000001, 0xaab4d7d8, 0xaab4d7d8, 0x3400080},
8056{0x3400000, 0x80000001, 0x966320b, 0x966320b, 0x3400080},
8057{0x3400000, 0x80000001, 0xb26bddee, 0xb26bddee, 0x3400080},
8058{0x3400000, 0x80000001, 0xb5c8e5d3, 0xb5c8e5d3, 0x3400080},
8059{0x3400000, 0x80000001, 0x317285d3, 0x317285d3, 0x3400080},
8060{0x3400000, 0x80000001, 0x3c9623b1, 0x3c9623b1, 0x3400080},
8061{0x3400000, 0x80000001, 0x51fd2c7c, 0x51fd2c7c, 0x3400080},
8062{0x3400000, 0x80000001, 0x7b906a6c, 0x7b906a6c, 0x3400080},
8063{0x3400000, 0x80000076, 0x0, 0x0, 0x3400080},
8064{0x3400000, 0x80000076, 0x1, 0x0, 0x3400080},
8065{0x3400000, 0x80000076, 0x76, 0x0, 0x3400080},
8066{0x3400000, 0x80000076, 0x2b94, 0x0, 0x3400080},
8067{0x3400000, 0x80000076, 0x636d24, 0x0, 0x3400080},
8068{0x3400000, 0x80000076, 0x7fffff, 0x0, 0x3400080},
8069{0x3400000, 0x80000076, 0x800000, 0x800000, 0x3400080},
8070{0x3400000, 0x80000076, 0x800002, 0x800002, 0x3400080},
8071{0x3400000, 0x80000076, 0x1398437, 0x1398437, 0x3400080},
8072{0x3400000, 0x80000076, 0xba98d27, 0xba98d27, 0x3400080},
8073{0x3400000, 0x80000076, 0xba98d7a, 0xba98d7a, 0x3400080},
8074{0x3400000, 0x80000076, 0x751f853a, 0x751f853a, 0x3400080},
8075{0x3400000, 0x80000076, 0x7f7ffff0, 0x7f7ffff0, 0x3400080},
8076{0x3400000, 0x80000076, 0x7f7fffff, 0x7f7fffff, 0x3400080},
8077{0x3400000, 0x80000076, 0x7f800000, 0x7f800000, 0x3400080},
8078{0x3400000, 0x80000076, 0x7f800001, 0x7fc00000, 0x3400081},
8079{0x3400000, 0x80000076, 0x7f984a37, 0x7fc00000, 0x3400081},
8080{0x3400000, 0x80000076, 0x7fbfffff, 0x7fc00000, 0x3400081},
8081{0x3400000, 0x80000076, 0x7fc00000, 0x7fc00000, 0x3400080},
8082{0x3400000, 0x80000076, 0x7fd9ba98, 0x7fc00000, 0x3400080},
8083{0x3400000, 0x80000076, 0x7fffffff, 0x7fc00000, 0x3400080},
8084{0x3400000, 0x80000076, 0x80000000, 0x0, 0x3400080},
8085{0x3400000, 0x80000076, 0x80000001, 0x0, 0x3400080},
8086{0x3400000, 0x80000076, 0x80000076, 0x0, 0x3400080},
8087{0x3400000, 0x80000076, 0x80002b94, 0x0, 0x3400080},
8088{0x3400000, 0x80000076, 0x80636d24, 0x0, 0x3400080},
8089{0x3400000, 0x80000076, 0x807fffff, 0x0, 0x3400080},
8090{0x3400000, 0x80000076, 0x80800000, 0x80800000, 0x3400080},
8091{0x3400000, 0x80000076, 0x80800002, 0x80800002, 0x3400080},
8092{0x3400000, 0x80000076, 0x81398437, 0x81398437, 0x3400080},
8093{0x3400000, 0x80000076, 0x8ba98d27, 0x8ba98d27, 0x3400080},
8094{0x3400000, 0x80000076, 0x8ba98d7a, 0x8ba98d7a, 0x3400080},
8095{0x3400000, 0x80000076, 0xf51f853a, 0xf51f853a, 0x3400080},
8096{0x3400000, 0x80000076, 0xff7ffff0, 0xff7ffff0, 0x3400080},
8097{0x3400000, 0x80000076, 0xff7fffff, 0xff7fffff, 0x3400080},
8098{0x3400000, 0x80000076, 0xff800000, 0xff800000, 0x3400080},
8099{0x3400000, 0x80000076, 0xff800001, 0x7fc00000, 0x3400081},
8100{0x3400000, 0x80000076, 0xff984a37, 0x7fc00000, 0x3400081},
8101{0x3400000, 0x80000076, 0xffbfffff, 0x7fc00000, 0x3400081},
8102{0x3400000, 0x80000076, 0xffc00000, 0x7fc00000, 0x3400080},
8103{0x3400000, 0x80000076, 0xffd9ba98, 0x7fc00000, 0x3400080},
8104{0x3400000, 0x80000076, 0xffffffff, 0x7fc00000, 0x3400080},
8105{0x3400000, 0x80000076, 0x4f3495cb, 0x4f3495cb, 0x3400080},
8106{0x3400000, 0x80000076, 0xe73a5134, 0xe73a5134, 0x3400080},
8107{0x3400000, 0x80000076, 0x7c994e9e, 0x7c994e9e, 0x3400080},
8108{0x3400000, 0x80000076, 0x6164bd6c, 0x6164bd6c, 0x3400080},
8109{0x3400000, 0x80000076, 0x9503366, 0x9503366, 0x3400080},
8110{0x3400000, 0x80000076, 0xbf5a97c9, 0xbf5a97c9, 0x3400080},
8111{0x3400000, 0x80000076, 0xe6ff1a14, 0xe6ff1a14, 0x3400080},
8112{0x3400000, 0x80000076, 0x77f31e2f, 0x77f31e2f, 0x3400080},
8113{0x3400000, 0x80000076, 0xaab4d7d8, 0xaab4d7d8, 0x3400080},
8114{0x3400000, 0x80000076, 0x966320b, 0x966320b, 0x3400080},
8115{0x3400000, 0x80000076, 0xb26bddee, 0xb26bddee, 0x3400080},
8116{0x3400000, 0x80000076, 0xb5c8e5d3, 0xb5c8e5d3, 0x3400080},
8117{0x3400000, 0x80000076, 0x317285d3, 0x317285d3, 0x3400080},
8118{0x3400000, 0x80000076, 0x3c9623b1, 0x3c9623b1, 0x3400080},
8119{0x3400000, 0x80000076, 0x51fd2c7c, 0x51fd2c7c, 0x3400080},
8120{0x3400000, 0x80000076, 0x7b906a6c, 0x7b906a6c, 0x3400080},
8121{0x3400000, 0x80002b94, 0x0, 0x0, 0x3400080},
8122{0x3400000, 0x80002b94, 0x1, 0x0, 0x3400080},
8123{0x3400000, 0x80002b94, 0x76, 0x0, 0x3400080},
8124{0x3400000, 0x80002b94, 0x2b94, 0x0, 0x3400080},
8125{0x3400000, 0x80002b94, 0x636d24, 0x0, 0x3400080},
8126{0x3400000, 0x80002b94, 0x7fffff, 0x0, 0x3400080},
8127{0x3400000, 0x80002b94, 0x800000, 0x800000, 0x3400080},
8128{0x3400000, 0x80002b94, 0x800002, 0x800002, 0x3400080},
8129{0x3400000, 0x80002b94, 0x1398437, 0x1398437, 0x3400080},
8130{0x3400000, 0x80002b94, 0xba98d27, 0xba98d27, 0x3400080},
8131{0x3400000, 0x80002b94, 0xba98d7a, 0xba98d7a, 0x3400080},
8132{0x3400000, 0x80002b94, 0x751f853a, 0x751f853a, 0x3400080},
8133{0x3400000, 0x80002b94, 0x7f7ffff0, 0x7f7ffff0, 0x3400080},
8134{0x3400000, 0x80002b94, 0x7f7fffff, 0x7f7fffff, 0x3400080},
8135{0x3400000, 0x80002b94, 0x7f800000, 0x7f800000, 0x3400080},
8136{0x3400000, 0x80002b94, 0x7f800001, 0x7fc00000, 0x3400081},
8137{0x3400000, 0x80002b94, 0x7f984a37, 0x7fc00000, 0x3400081},
8138{0x3400000, 0x80002b94, 0x7fbfffff, 0x7fc00000, 0x3400081},
8139{0x3400000, 0x80002b94, 0x7fc00000, 0x7fc00000, 0x3400080},
8140{0x3400000, 0x80002b94, 0x7fd9ba98, 0x7fc00000, 0x3400080},
8141{0x3400000, 0x80002b94, 0x7fffffff, 0x7fc00000, 0x3400080},
8142{0x3400000, 0x80002b94, 0x80000000, 0x0, 0x3400080},
8143{0x3400000, 0x80002b94, 0x80000001, 0x0, 0x3400080},
8144{0x3400000, 0x80002b94, 0x80000076, 0x0, 0x3400080},
8145{0x3400000, 0x80002b94, 0x80002b94, 0x0, 0x3400080},
8146{0x3400000, 0x80002b94, 0x80636d24, 0x0, 0x3400080},
8147{0x3400000, 0x80002b94, 0x807fffff, 0x0, 0x3400080},
8148{0x3400000, 0x80002b94, 0x80800000, 0x80800000, 0x3400080},
8149{0x3400000, 0x80002b94, 0x80800002, 0x80800002, 0x3400080},
8150{0x3400000, 0x80002b94, 0x81398437, 0x81398437, 0x3400080},
8151{0x3400000, 0x80002b94, 0x8ba98d27, 0x8ba98d27, 0x3400080},
8152{0x3400000, 0x80002b94, 0x8ba98d7a, 0x8ba98d7a, 0x3400080},
8153{0x3400000, 0x80002b94, 0xf51f853a, 0xf51f853a, 0x3400080},
8154{0x3400000, 0x80002b94, 0xff7ffff0, 0xff7ffff0, 0x3400080},
8155{0x3400000, 0x80002b94, 0xff7fffff, 0xff7fffff, 0x3400080},
8156{0x3400000, 0x80002b94, 0xff800000, 0xff800000, 0x3400080},
8157{0x3400000, 0x80002b94, 0xff800001, 0x7fc00000, 0x3400081},
8158{0x3400000, 0x80002b94, 0xff984a37, 0x7fc00000, 0x3400081},
8159{0x3400000, 0x80002b94, 0xffbfffff, 0x7fc00000, 0x3400081},
8160{0x3400000, 0x80002b94, 0xffc00000, 0x7fc00000, 0x3400080},
8161{0x3400000, 0x80002b94, 0xffd9ba98, 0x7fc00000, 0x3400080},
8162{0x3400000, 0x80002b94, 0xffffffff, 0x7fc00000, 0x3400080},
8163{0x3400000, 0x80002b94, 0x4f3495cb, 0x4f3495cb, 0x3400080},
8164{0x3400000, 0x80002b94, 0xe73a5134, 0xe73a5134, 0x3400080},
8165{0x3400000, 0x80002b94, 0x7c994e9e, 0x7c994e9e, 0x3400080},
8166{0x3400000, 0x80002b94, 0x6164bd6c, 0x6164bd6c, 0x3400080},
8167{0x3400000, 0x80002b94, 0x9503366, 0x9503366, 0x3400080},
8168{0x3400000, 0x80002b94, 0xbf5a97c9, 0xbf5a97c9, 0x3400080},
8169{0x3400000, 0x80002b94, 0xe6ff1a14, 0xe6ff1a14, 0x3400080},
8170{0x3400000, 0x80002b94, 0x77f31e2f, 0x77f31e2f, 0x3400080},
8171{0x3400000, 0x80002b94, 0xaab4d7d8, 0xaab4d7d8, 0x3400080},
8172{0x3400000, 0x80002b94, 0x966320b, 0x966320b, 0x3400080},
8173{0x3400000, 0x80002b94, 0xb26bddee, 0xb26bddee, 0x3400080},
8174{0x3400000, 0x80002b94, 0xb5c8e5d3, 0xb5c8e5d3, 0x3400080},
8175{0x3400000, 0x80002b94, 0x317285d3, 0x317285d3, 0x3400080},
8176{0x3400000, 0x80002b94, 0x3c9623b1, 0x3c9623b1, 0x3400080},
8177{0x3400000, 0x80002b94, 0x51fd2c7c, 0x51fd2c7c, 0x3400080},
8178{0x3400000, 0x80002b94, 0x7b906a6c, 0x7b906a6c, 0x3400080},
8179{0x3400000, 0x80636d24, 0x0, 0x0, 0x3400080},
8180{0x3400000, 0x80636d24, 0x1, 0x0, 0x3400080},
8181{0x3400000, 0x80636d24, 0x76, 0x0, 0x3400080},
8182{0x3400000, 0x80636d24, 0x2b94, 0x0, 0x3400080},
8183{0x3400000, 0x80636d24, 0x636d24, 0x0, 0x3400080},
8184{0x3400000, 0x80636d24, 0x7fffff, 0x0, 0x3400080},
8185{0x3400000, 0x80636d24, 0x800000, 0x800000, 0x3400080},
8186{0x3400000, 0x80636d24, 0x800002, 0x800002, 0x3400080},
8187{0x3400000, 0x80636d24, 0x1398437, 0x1398437, 0x3400080},
8188{0x3400000, 0x80636d24, 0xba98d27, 0xba98d27, 0x3400080},
8189{0x3400000, 0x80636d24, 0xba98d7a, 0xba98d7a, 0x3400080},
8190{0x3400000, 0x80636d24, 0x751f853a, 0x751f853a, 0x3400080},
8191{0x3400000, 0x80636d24, 0x7f7ffff0, 0x7f7ffff0, 0x3400080},
8192{0x3400000, 0x80636d24, 0x7f7fffff, 0x7f7fffff, 0x3400080},
8193{0x3400000, 0x80636d24, 0x7f800000, 0x7f800000, 0x3400080},
8194{0x3400000, 0x80636d24, 0x7f800001, 0x7fc00000, 0x3400081},
8195{0x3400000, 0x80636d24, 0x7f984a37, 0x7fc00000, 0x3400081},
8196{0x3400000, 0x80636d24, 0x7fbfffff, 0x7fc00000, 0x3400081},
8197{0x3400000, 0x80636d24, 0x7fc00000, 0x7fc00000, 0x3400080},
8198{0x3400000, 0x80636d24, 0x7fd9ba98, 0x7fc00000, 0x3400080},
8199{0x3400000, 0x80636d24, 0x7fffffff, 0x7fc00000, 0x3400080},
8200{0x3400000, 0x80636d24, 0x80000000, 0x0, 0x3400080},
8201{0x3400000, 0x80636d24, 0x80000001, 0x0, 0x3400080},
8202{0x3400000, 0x80636d24, 0x80000076, 0x0, 0x3400080},
8203{0x3400000, 0x80636d24, 0x80002b94, 0x0, 0x3400080},
8204{0x3400000, 0x80636d24, 0x80636d24, 0x0, 0x3400080},
8205{0x3400000, 0x80636d24, 0x807fffff, 0x0, 0x3400080},
8206{0x3400000, 0x80636d24, 0x80800000, 0x80800000, 0x3400080},
8207{0x3400000, 0x80636d24, 0x80800002, 0x80800002, 0x3400080},
8208{0x3400000, 0x80636d24, 0x81398437, 0x81398437, 0x3400080},
8209{0x3400000, 0x80636d24, 0x8ba98d27, 0x8ba98d27, 0x3400080},
8210{0x3400000, 0x80636d24, 0x8ba98d7a, 0x8ba98d7a, 0x3400080},
8211{0x3400000, 0x80636d24, 0xf51f853a, 0xf51f853a, 0x3400080},
8212{0x3400000, 0x80636d24, 0xff7ffff0, 0xff7ffff0, 0x3400080},
8213{0x3400000, 0x80636d24, 0xff7fffff, 0xff7fffff, 0x3400080},
8214{0x3400000, 0x80636d24, 0xff800000, 0xff800000, 0x3400080},
8215{0x3400000, 0x80636d24, 0xff800001, 0x7fc00000, 0x3400081},
8216{0x3400000, 0x80636d24, 0xff984a37, 0x7fc00000, 0x3400081},
8217{0x3400000, 0x80636d24, 0xffbfffff, 0x7fc00000, 0x3400081},
8218{0x3400000, 0x80636d24, 0xffc00000, 0x7fc00000, 0x3400080},
8219{0x3400000, 0x80636d24, 0xffd9ba98, 0x7fc00000, 0x3400080},
8220{0x3400000, 0x80636d24, 0xffffffff, 0x7fc00000, 0x3400080},
8221{0x3400000, 0x80636d24, 0x4f3495cb, 0x4f3495cb, 0x3400080},
8222{0x3400000, 0x80636d24, 0xe73a5134, 0xe73a5134, 0x3400080},
8223{0x3400000, 0x80636d24, 0x7c994e9e, 0x7c994e9e, 0x3400080},
8224{0x3400000, 0x80636d24, 0x6164bd6c, 0x6164bd6c, 0x3400080},
8225{0x3400000, 0x80636d24, 0x9503366, 0x9503366, 0x3400080},
8226{0x3400000, 0x80636d24, 0xbf5a97c9, 0xbf5a97c9, 0x3400080},
8227{0x3400000, 0x80636d24, 0xe6ff1a14, 0xe6ff1a14, 0x3400080},
8228{0x3400000, 0x80636d24, 0x77f31e2f, 0x77f31e2f, 0x3400080},
8229{0x3400000, 0x80636d24, 0xaab4d7d8, 0xaab4d7d8, 0x3400080},
8230{0x3400000, 0x80636d24, 0x966320b, 0x966320b, 0x3400080},
8231{0x3400000, 0x80636d24, 0xb26bddee, 0xb26bddee, 0x3400080},
8232{0x3400000, 0x80636d24, 0xb5c8e5d3, 0xb5c8e5d3, 0x3400080},
8233{0x3400000, 0x80636d24, 0x317285d3, 0x317285d3, 0x3400080},
8234{0x3400000, 0x80636d24, 0x3c9623b1, 0x3c9623b1, 0x3400080},
8235{0x3400000, 0x80636d24, 0x51fd2c7c, 0x51fd2c7c, 0x3400080},
8236{0x3400000, 0x80636d24, 0x7b906a6c, 0x7b906a6c, 0x3400080},
8237{0x3400000, 0x807fffff, 0x0, 0x0, 0x3400080},
8238{0x3400000, 0x807fffff, 0x1, 0x0, 0x3400080},
8239{0x3400000, 0x807fffff, 0x76, 0x0, 0x3400080},
8240{0x3400000, 0x807fffff, 0x2b94, 0x0, 0x3400080},
8241{0x3400000, 0x807fffff, 0x636d24, 0x0, 0x3400080},
8242{0x3400000, 0x807fffff, 0x7fffff, 0x0, 0x3400080},
8243{0x3400000, 0x807fffff, 0x800000, 0x800000, 0x3400080},
8244{0x3400000, 0x807fffff, 0x800002, 0x800002, 0x3400080},
8245{0x3400000, 0x807fffff, 0x1398437, 0x1398437, 0x3400080},
8246{0x3400000, 0x807fffff, 0xba98d27, 0xba98d27, 0x3400080},
8247{0x3400000, 0x807fffff, 0xba98d7a, 0xba98d7a, 0x3400080},
8248{0x3400000, 0x807fffff, 0x751f853a, 0x751f853a, 0x3400080},
8249{0x3400000, 0x807fffff, 0x7f7ffff0, 0x7f7ffff0, 0x3400080},
8250{0x3400000, 0x807fffff, 0x7f7fffff, 0x7f7fffff, 0x3400080},
8251{0x3400000, 0x807fffff, 0x7f800000, 0x7f800000, 0x3400080},
8252{0x3400000, 0x807fffff, 0x7f800001, 0x7fc00000, 0x3400081},
8253{0x3400000, 0x807fffff, 0x7f984a37, 0x7fc00000, 0x3400081},
8254{0x3400000, 0x807fffff, 0x7fbfffff, 0x7fc00000, 0x3400081},
8255{0x3400000, 0x807fffff, 0x7fc00000, 0x7fc00000, 0x3400080},
8256{0x3400000, 0x807fffff, 0x7fd9ba98, 0x7fc00000, 0x3400080},
8257{0x3400000, 0x807fffff, 0x7fffffff, 0x7fc00000, 0x3400080},
8258{0x3400000, 0x807fffff, 0x80000000, 0x0, 0x3400080},
8259{0x3400000, 0x807fffff, 0x80000001, 0x0, 0x3400080},
8260{0x3400000, 0x807fffff, 0x80000076, 0x0, 0x3400080},
8261{0x3400000, 0x807fffff, 0x80002b94, 0x0, 0x3400080},
8262{0x3400000, 0x807fffff, 0x80636d24, 0x0, 0x3400080},
8263{0x3400000, 0x807fffff, 0x807fffff, 0x0, 0x3400080},
8264{0x3400000, 0x807fffff, 0x80800000, 0x80800000, 0x3400080},
8265{0x3400000, 0x807fffff, 0x80800002, 0x80800002, 0x3400080},
8266{0x3400000, 0x807fffff, 0x81398437, 0x81398437, 0x3400080},
8267{0x3400000, 0x807fffff, 0x8ba98d27, 0x8ba98d27, 0x3400080},
8268{0x3400000, 0x807fffff, 0x8ba98d7a, 0x8ba98d7a, 0x3400080},
8269{0x3400000, 0x807fffff, 0xf51f853a, 0xf51f853a, 0x3400080},
8270{0x3400000, 0x807fffff, 0xff7ffff0, 0xff7ffff0, 0x3400080},
8271{0x3400000, 0x807fffff, 0xff7fffff, 0xff7fffff, 0x3400080},
8272{0x3400000, 0x807fffff, 0xff800000, 0xff800000, 0x3400080},
8273{0x3400000, 0x807fffff, 0xff800001, 0x7fc00000, 0x3400081},
8274{0x3400000, 0x807fffff, 0xff984a37, 0x7fc00000, 0x3400081},
8275{0x3400000, 0x807fffff, 0xffbfffff, 0x7fc00000, 0x3400081},
8276{0x3400000, 0x807fffff, 0xffc00000, 0x7fc00000, 0x3400080},
8277{0x3400000, 0x807fffff, 0xffd9ba98, 0x7fc00000, 0x3400080},
8278{0x3400000, 0x807fffff, 0xffffffff, 0x7fc00000, 0x3400080},
8279{0x3400000, 0x807fffff, 0x4f3495cb, 0x4f3495cb, 0x3400080},
8280{0x3400000, 0x807fffff, 0xe73a5134, 0xe73a5134, 0x3400080},
8281{0x3400000, 0x807fffff, 0x7c994e9e, 0x7c994e9e, 0x3400080},
8282{0x3400000, 0x807fffff, 0x6164bd6c, 0x6164bd6c, 0x3400080},
8283{0x3400000, 0x807fffff, 0x9503366, 0x9503366, 0x3400080},
8284{0x3400000, 0x807fffff, 0xbf5a97c9, 0xbf5a97c9, 0x3400080},
8285{0x3400000, 0x807fffff, 0xe6ff1a14, 0xe6ff1a14, 0x3400080},
8286{0x3400000, 0x807fffff, 0x77f31e2f, 0x77f31e2f, 0x3400080},
8287{0x3400000, 0x807fffff, 0xaab4d7d8, 0xaab4d7d8, 0x3400080},
8288{0x3400000, 0x807fffff, 0x966320b, 0x966320b, 0x3400080},
8289{0x3400000, 0x807fffff, 0xb26bddee, 0xb26bddee, 0x3400080},
8290{0x3400000, 0x807fffff, 0xb5c8e5d3, 0xb5c8e5d3, 0x3400080},
8291{0x3400000, 0x807fffff, 0x317285d3, 0x317285d3, 0x3400080},
8292{0x3400000, 0x807fffff, 0x3c9623b1, 0x3c9623b1, 0x3400080},
8293{0x3400000, 0x807fffff, 0x51fd2c7c, 0x51fd2c7c, 0x3400080},
8294{0x3400000, 0x807fffff, 0x7b906a6c, 0x7b906a6c, 0x3400080},
8295{0x3400000, 0x80800000, 0x0, 0x80800000, 0x3400000},
8296{0x3400000, 0x80800000, 0x1, 0x80800000, 0x3400080},
8297{0x3400000, 0x80800000, 0x76, 0x80800000, 0x3400080},
8298{0x3400000, 0x80800000, 0x2b94, 0x80800000, 0x3400080},
8299{0x3400000, 0x80800000, 0x636d24, 0x80800000, 0x3400080},
8300{0x3400000, 0x80800000, 0x7fffff, 0x80800000, 0x3400080},
8301{0x3400000, 0x80800000, 0x800000, 0x0, 0x3400000},
8302{0x3400000, 0x80800000, 0x800002, 0x0, 0x3400008},
8303{0x3400000, 0x80800000, 0x1398437, 0xf3086e, 0x3400000},
8304{0x3400000, 0x80800000, 0xba98d27, 0xba98d25, 0x3400000},
8305{0x3400000, 0x80800000, 0xba98d7a, 0xba98d78, 0x3400000},
8306{0x3400000, 0x80800000, 0x751f853a, 0x751f853a, 0x3400010},
8307{0x3400000, 0x80800000, 0x7f7ffff0, 0x7f7ffff0, 0x3400010},
8308{0x3400000, 0x80800000, 0x7f7fffff, 0x7f7fffff, 0x3400010},
8309{0x3400000, 0x80800000, 0x7f800000, 0x7f800000, 0x3400000},
8310{0x3400000, 0x80800000, 0x7f800001, 0x7fc00000, 0x3400001},
8311{0x3400000, 0x80800000, 0x7f984a37, 0x7fc00000, 0x3400001},
8312{0x3400000, 0x80800000, 0x7fbfffff, 0x7fc00000, 0x3400001},
8313{0x3400000, 0x80800000, 0x7fc00000, 0x7fc00000, 0x3400000},
8314{0x3400000, 0x80800000, 0x7fd9ba98, 0x7fc00000, 0x3400000},
8315{0x3400000, 0x80800000, 0x7fffffff, 0x7fc00000, 0x3400000},
8316{0x3400000, 0x80800000, 0x80000000, 0x80800000, 0x3400000},
8317{0x3400000, 0x80800000, 0x80000001, 0x80800000, 0x3400080},
8318{0x3400000, 0x80800000, 0x80000076, 0x80800000, 0x3400080},
8319{0x3400000, 0x80800000, 0x80002b94, 0x80800000, 0x3400080},
8320{0x3400000, 0x80800000, 0x80636d24, 0x80800000, 0x3400080},
8321{0x3400000, 0x80800000, 0x807fffff, 0x80800000, 0x3400080},
8322{0x3400000, 0x80800000, 0x80800000, 0x81000000, 0x3400000},
8323{0x3400000, 0x80800000, 0x80800002, 0x81000001, 0x3400000},
8324{0x3400000, 0x80800000, 0x81398437, 0x81798437, 0x3400000},
8325{0x3400000, 0x80800000, 0x8ba98d27, 0x8ba98d29, 0x3400000},
8326{0x3400000, 0x80800000, 0x8ba98d7a, 0x8ba98d7c, 0x3400000},
8327{0x3400000, 0x80800000, 0xf51f853a, 0xf51f853a, 0x3400010},
8328{0x3400000, 0x80800000, 0xff7ffff0, 0xff7ffff0, 0x3400010},
8329{0x3400000, 0x80800000, 0xff7fffff, 0xff7fffff, 0x3400010},
8330{0x3400000, 0x80800000, 0xff800000, 0xff800000, 0x3400000},
8331{0x3400000, 0x80800000, 0xff800001, 0x7fc00000, 0x3400001},
8332{0x3400000, 0x80800000, 0xff984a37, 0x7fc00000, 0x3400001},
8333{0x3400000, 0x80800000, 0xffbfffff, 0x7fc00000, 0x3400001},
8334{0x3400000, 0x80800000, 0xffc00000, 0x7fc00000, 0x3400000},
8335{0x3400000, 0x80800000, 0xffd9ba98, 0x7fc00000, 0x3400000},
8336{0x3400000, 0x80800000, 0xffffffff, 0x7fc00000, 0x3400000},
8337{0x3400000, 0x80800000, 0x4f3495cb, 0x4f3495cb, 0x3400010},
8338{0x3400000, 0x80800000, 0xe73a5134, 0xe73a5134, 0x3400010},
8339{0x3400000, 0x80800000, 0x7c994e9e, 0x7c994e9e, 0x3400010},
8340{0x3400000, 0x80800000, 0x6164bd6c, 0x6164bd6c, 0x3400010},
8341{0x3400000, 0x80800000, 0x9503366, 0x9503326, 0x3400000},
8342{0x3400000, 0x80800000, 0xbf5a97c9, 0xbf5a97c9, 0x3400010},
8343{0x3400000, 0x80800000, 0xe6ff1a14, 0xe6ff1a14, 0x3400010},
8344{0x3400000, 0x80800000, 0x77f31e2f, 0x77f31e2f, 0x3400010},
8345{0x3400000, 0x80800000, 0xaab4d7d8, 0xaab4d7d8, 0x3400010},
8346{0x3400000, 0x80800000, 0x966320b, 0x96631cb, 0x3400000},
8347{0x3400000, 0x80800000, 0xb26bddee, 0xb26bddee, 0x3400010},
8348{0x3400000, 0x80800000, 0xb5c8e5d3, 0xb5c8e5d3, 0x3400010},
8349{0x3400000, 0x80800000, 0x317285d3, 0x317285d3, 0x3400010},
8350{0x3400000, 0x80800000, 0x3c9623b1, 0x3c9623b1, 0x3400010},
8351{0x3400000, 0x80800000, 0x51fd2c7c, 0x51fd2c7c, 0x3400010},
8352{0x3400000, 0x80800000, 0x7b906a6c, 0x7b906a6c, 0x3400010},
8353{0x3400000, 0x80800002, 0x0, 0x80800002, 0x3400000},
8354{0x3400000, 0x80800002, 0x1, 0x80800002, 0x3400080},
8355{0x3400000, 0x80800002, 0x76, 0x80800002, 0x3400080},
8356{0x3400000, 0x80800002, 0x2b94, 0x80800002, 0x3400080},
8357{0x3400000, 0x80800002, 0x636d24, 0x80800002, 0x3400080},
8358{0x3400000, 0x80800002, 0x7fffff, 0x80800002, 0x3400080},
8359{0x3400000, 0x80800002, 0x800000, 0x0, 0x3400008},
8360{0x3400000, 0x80800002, 0x800002, 0x0, 0x3400000},
8361{0x3400000, 0x80800002, 0x1398437, 0xf3086c, 0x3400000},
8362{0x3400000, 0x80800002, 0xba98d27, 0xba98d25, 0x3400010},
8363{0x3400000, 0x80800002, 0xba98d7a, 0xba98d78, 0x3400010},
8364{0x3400000, 0x80800002, 0x751f853a, 0x751f853a, 0x3400010},
8365{0x3400000, 0x80800002, 0x7f7ffff0, 0x7f7ffff0, 0x3400010},
8366{0x3400000, 0x80800002, 0x7f7fffff, 0x7f7fffff, 0x3400010},
8367{0x3400000, 0x80800002, 0x7f800000, 0x7f800000, 0x3400000},
8368{0x3400000, 0x80800002, 0x7f800001, 0x7fc00000, 0x3400001},
8369{0x3400000, 0x80800002, 0x7f984a37, 0x7fc00000, 0x3400001},
8370{0x3400000, 0x80800002, 0x7fbfffff, 0x7fc00000, 0x3400001},
8371{0x3400000, 0x80800002, 0x7fc00000, 0x7fc00000, 0x3400000},
8372{0x3400000, 0x80800002, 0x7fd9ba98, 0x7fc00000, 0x3400000},
8373{0x3400000, 0x80800002, 0x7fffffff, 0x7fc00000, 0x3400000},
8374{0x3400000, 0x80800002, 0x80000000, 0x80800002, 0x3400000},
8375{0x3400000, 0x80800002, 0x80000001, 0x80800002, 0x3400080},
8376{0x3400000, 0x80800002, 0x80000076, 0x80800002, 0x3400080},
8377{0x3400000, 0x80800002, 0x80002b94, 0x80800002, 0x3400080},
8378{0x3400000, 0x80800002, 0x80636d24, 0x80800002, 0x3400080},
8379{0x3400000, 0x80800002, 0x807fffff, 0x80800002, 0x3400080},
8380{0x3400000, 0x80800002, 0x80800000, 0x81000001, 0x3400000},
8381{0x3400000, 0x80800002, 0x80800002, 0x81000002, 0x3400000},
8382{0x3400000, 0x80800002, 0x81398437, 0x81798438, 0x3400000},
8383{0x3400000, 0x80800002, 0x8ba98d27, 0x8ba98d29, 0x3400010},
8384{0x3400000, 0x80800002, 0x8ba98d7a, 0x8ba98d7c, 0x3400010},
8385{0x3400000, 0x80800002, 0xf51f853a, 0xf51f853a, 0x3400010},
8386{0x3400000, 0x80800002, 0xff7ffff0, 0xff7ffff0, 0x3400010},
8387{0x3400000, 0x80800002, 0xff7fffff, 0xff7fffff, 0x3400010},
8388{0x3400000, 0x80800002, 0xff800000, 0xff800000, 0x3400000},
8389{0x3400000, 0x80800002, 0xff800001, 0x7fc00000, 0x3400001},
8390{0x3400000, 0x80800002, 0xff984a37, 0x7fc00000, 0x3400001},
8391{0x3400000, 0x80800002, 0xffbfffff, 0x7fc00000, 0x3400001},
8392{0x3400000, 0x80800002, 0xffc00000, 0x7fc00000, 0x3400000},
8393{0x3400000, 0x80800002, 0xffd9ba98, 0x7fc00000, 0x3400000},
8394{0x3400000, 0x80800002, 0xffffffff, 0x7fc00000, 0x3400000},
8395{0x3400000, 0x80800002, 0x4f3495cb, 0x4f3495cb, 0x3400010},
8396{0x3400000, 0x80800002, 0xe73a5134, 0xe73a5134, 0x3400010},
8397{0x3400000, 0x80800002, 0x7c994e9e, 0x7c994e9e, 0x3400010},
8398{0x3400000, 0x80800002, 0x6164bd6c, 0x6164bd6c, 0x3400010},
8399{0x3400000, 0x80800002, 0x9503366, 0x9503326, 0x3400010},
8400{0x3400000, 0x80800002, 0xbf5a97c9, 0xbf5a97c9, 0x3400010},
8401{0x3400000, 0x80800002, 0xe6ff1a14, 0xe6ff1a14, 0x3400010},
8402{0x3400000, 0x80800002, 0x77f31e2f, 0x77f31e2f, 0x3400010},
8403{0x3400000, 0x80800002, 0xaab4d7d8, 0xaab4d7d8, 0x3400010},
8404{0x3400000, 0x80800002, 0x966320b, 0x96631cb, 0x3400010},
8405{0x3400000, 0x80800002, 0xb26bddee, 0xb26bddee, 0x3400010},
8406{0x3400000, 0x80800002, 0xb5c8e5d3, 0xb5c8e5d3, 0x3400010},
8407{0x3400000, 0x80800002, 0x317285d3, 0x317285d3, 0x3400010},
8408{0x3400000, 0x80800002, 0x3c9623b1, 0x3c9623b1, 0x3400010},
8409{0x3400000, 0x80800002, 0x51fd2c7c, 0x51fd2c7c, 0x3400010},
8410{0x3400000, 0x80800002, 0x7b906a6c, 0x7b906a6c, 0x3400010},
8411{0x3400000, 0x81398437, 0x0, 0x81398437, 0x3400000},
8412{0x3400000, 0x81398437, 0x1, 0x81398437, 0x3400080},
8413{0x3400000, 0x81398437, 0x76, 0x81398437, 0x3400080},
8414{0x3400000, 0x81398437, 0x2b94, 0x81398437, 0x3400080},
8415{0x3400000, 0x81398437, 0x636d24, 0x81398437, 0x3400080},
8416{0x3400000, 0x81398437, 0x7fffff, 0x81398437, 0x3400080},
8417{0x3400000, 0x81398437, 0x800000, 0x80f3086e, 0x3400000},
8418{0x3400000, 0x81398437, 0x800002, 0x80f3086c, 0x3400000},
8419{0x3400000, 0x81398437, 0x1398437, 0x0, 0x3400000},
8420{0x3400000, 0x81398437, 0xba98d27, 0xba98d22, 0x3400010},
8421{0x3400000, 0x81398437, 0xba98d7a, 0xba98d75, 0x3400010},
8422{0x3400000, 0x81398437, 0x751f853a, 0x751f853a, 0x3400010},
8423{0x3400000, 0x81398437, 0x7f7ffff0, 0x7f7ffff0, 0x3400010},
8424{0x3400000, 0x81398437, 0x7f7fffff, 0x7f7fffff, 0x3400010},
8425{0x3400000, 0x81398437, 0x7f800000, 0x7f800000, 0x3400000},
8426{0x3400000, 0x81398437, 0x7f800001, 0x7fc00000, 0x3400001},
8427{0x3400000, 0x81398437, 0x7f984a37, 0x7fc00000, 0x3400001},
8428{0x3400000, 0x81398437, 0x7fbfffff, 0x7fc00000, 0x3400001},
8429{0x3400000, 0x81398437, 0x7fc00000, 0x7fc00000, 0x3400000},
8430{0x3400000, 0x81398437, 0x7fd9ba98, 0x7fc00000, 0x3400000},
8431{0x3400000, 0x81398437, 0x7fffffff, 0x7fc00000, 0x3400000},
8432{0x3400000, 0x81398437, 0x80000000, 0x81398437, 0x3400000},
8433{0x3400000, 0x81398437, 0x80000001, 0x81398437, 0x3400080},
8434{0x3400000, 0x81398437, 0x80000076, 0x81398437, 0x3400080},
8435{0x3400000, 0x81398437, 0x80002b94, 0x81398437, 0x3400080},
8436{0x3400000, 0x81398437, 0x80636d24, 0x81398437, 0x3400080},
8437{0x3400000, 0x81398437, 0x807fffff, 0x81398437, 0x3400080},
8438{0x3400000, 0x81398437, 0x80800000, 0x81798437, 0x3400000},
8439{0x3400000, 0x81398437, 0x80800002, 0x81798438, 0x3400000},
8440{0x3400000, 0x81398437, 0x81398437, 0x81b98437, 0x3400000},
8441{0x3400000, 0x81398437, 0x8ba98d27, 0x8ba98d2c, 0x3400010},
8442{0x3400000, 0x81398437, 0x8ba98d7a, 0x8ba98d7f, 0x3400010},
8443{0x3400000, 0x81398437, 0xf51f853a, 0xf51f853a, 0x3400010},
8444{0x3400000, 0x81398437, 0xff7ffff0, 0xff7ffff0, 0x3400010},
8445{0x3400000, 0x81398437, 0xff7fffff, 0xff7fffff, 0x3400010},
8446{0x3400000, 0x81398437, 0xff800000, 0xff800000, 0x3400000},
8447{0x3400000, 0x81398437, 0xff800001, 0x7fc00000, 0x3400001},
8448{0x3400000, 0x81398437, 0xff984a37, 0x7fc00000, 0x3400001},
8449{0x3400000, 0x81398437, 0xffbfffff, 0x7fc00000, 0x3400001},
8450{0x3400000, 0x81398437, 0xffc00000, 0x7fc00000, 0x3400000},
8451{0x3400000, 0x81398437, 0xffd9ba98, 0x7fc00000, 0x3400000},
8452{0x3400000, 0x81398437, 0xffffffff, 0x7fc00000, 0x3400000},
8453{0x3400000, 0x81398437, 0x4f3495cb, 0x4f3495cb, 0x3400010},
8454{0x3400000, 0x81398437, 0xe73a5134, 0xe73a5134, 0x3400010},
8455{0x3400000, 0x81398437, 0x7c994e9e, 0x7c994e9e, 0x3400010},
8456{0x3400000, 0x81398437, 0x6164bd6c, 0x6164bd6c, 0x3400010},
8457{0x3400000, 0x81398437, 0x9503366, 0x95032ad, 0x3400010},
8458{0x3400000, 0x81398437, 0xbf5a97c9, 0xbf5a97c9, 0x3400010},
8459{0x3400000, 0x81398437, 0xe6ff1a14, 0xe6ff1a14, 0x3400010},
8460{0x3400000, 0x81398437, 0x77f31e2f, 0x77f31e2f, 0x3400010},
8461{0x3400000, 0x81398437, 0xaab4d7d8, 0xaab4d7d8, 0x3400010},
8462{0x3400000, 0x81398437, 0x966320b, 0x9663152, 0x3400010},
8463{0x3400000, 0x81398437, 0xb26bddee, 0xb26bddee, 0x3400010},
8464{0x3400000, 0x81398437, 0xb5c8e5d3, 0xb5c8e5d3, 0x3400010},
8465{0x3400000, 0x81398437, 0x317285d3, 0x317285d3, 0x3400010},
8466{0x3400000, 0x81398437, 0x3c9623b1, 0x3c9623b1, 0x3400010},
8467{0x3400000, 0x81398437, 0x51fd2c7c, 0x51fd2c7c, 0x3400010},
8468{0x3400000, 0x81398437, 0x7b906a6c, 0x7b906a6c, 0x3400010},
8469{0x3400000, 0x8ba98d27, 0x0, 0x8ba98d27, 0x3400000},
8470{0x3400000, 0x8ba98d27, 0x1, 0x8ba98d27, 0x3400080},
8471{0x3400000, 0x8ba98d27, 0x76, 0x8ba98d27, 0x3400080},
8472{0x3400000, 0x8ba98d27, 0x2b94, 0x8ba98d27, 0x3400080},
8473{0x3400000, 0x8ba98d27, 0x636d24, 0x8ba98d27, 0x3400080},
8474{0x3400000, 0x8ba98d27, 0x7fffff, 0x8ba98d27, 0x3400080},
8475{0x3400000, 0x8ba98d27, 0x800000, 0x8ba98d25, 0x3400000},
8476{0x3400000, 0x8ba98d27, 0x800002, 0x8ba98d24, 0x3400010},
8477{0x3400000, 0x8ba98d27, 0x1398437, 0x8ba98d21, 0x3400010},
8478{0x3400000, 0x8ba98d27, 0xba98d27, 0x0, 0x3400000},
8479{0x3400000, 0x8ba98d27, 0xba98d7a, 0x3260000, 0x3400000},
8480{0x3400000, 0x8ba98d27, 0x751f853a, 0x751f853a, 0x3400010},
8481{0x3400000, 0x8ba98d27, 0x7f7ffff0, 0x7f7ffff0, 0x3400010},
8482{0x3400000, 0x8ba98d27, 0x7f7fffff, 0x7f7fffff, 0x3400010},
8483{0x3400000, 0x8ba98d27, 0x7f800000, 0x7f800000, 0x3400000},
8484{0x3400000, 0x8ba98d27, 0x7f800001, 0x7fc00000, 0x3400001},
8485{0x3400000, 0x8ba98d27, 0x7f984a37, 0x7fc00000, 0x3400001},
8486{0x3400000, 0x8ba98d27, 0x7fbfffff, 0x7fc00000, 0x3400001},
8487{0x3400000, 0x8ba98d27, 0x7fc00000, 0x7fc00000, 0x3400000},
8488{0x3400000, 0x8ba98d27, 0x7fd9ba98, 0x7fc00000, 0x3400000},
8489{0x3400000, 0x8ba98d27, 0x7fffffff, 0x7fc00000, 0x3400000},
8490{0x3400000, 0x8ba98d27, 0x80000000, 0x8ba98d27, 0x3400000},
8491{0x3400000, 0x8ba98d27, 0x80000001, 0x8ba98d27, 0x3400080},
8492{0x3400000, 0x8ba98d27, 0x80000076, 0x8ba98d27, 0x3400080},
8493{0x3400000, 0x8ba98d27, 0x80002b94, 0x8ba98d27, 0x3400080},
8494{0x3400000, 0x8ba98d27, 0x80636d24, 0x8ba98d27, 0x3400080},
8495{0x3400000, 0x8ba98d27, 0x807fffff, 0x8ba98d27, 0x3400080},
8496{0x3400000, 0x8ba98d27, 0x80800000, 0x8ba98d29, 0x3400000},
8497{0x3400000, 0x8ba98d27, 0x80800002, 0x8ba98d29, 0x3400010},
8498{0x3400000, 0x8ba98d27, 0x81398437, 0x8ba98d2c, 0x3400010},
8499{0x3400000, 0x8ba98d27, 0x8ba98d27, 0x8c298d27, 0x3400000},
8500{0x3400000, 0x8ba98d27, 0x8ba98d7a, 0x8c298d50, 0x3400010},
8501{0x3400000, 0x8ba98d27, 0xf51f853a, 0xf51f853a, 0x3400010},
8502{0x3400000, 0x8ba98d27, 0xff7ffff0, 0xff7ffff0, 0x3400010},
8503{0x3400000, 0x8ba98d27, 0xff7fffff, 0xff7fffff, 0x3400010},
8504{0x3400000, 0x8ba98d27, 0xff800000, 0xff800000, 0x3400000},
8505{0x3400000, 0x8ba98d27, 0xff800001, 0x7fc00000, 0x3400001},
8506{0x3400000, 0x8ba98d27, 0xff984a37, 0x7fc00000, 0x3400001},
8507{0x3400000, 0x8ba98d27, 0xffbfffff, 0x7fc00000, 0x3400001},
8508{0x3400000, 0x8ba98d27, 0xffc00000, 0x7fc00000, 0x3400000},
8509{0x3400000, 0x8ba98d27, 0xffd9ba98, 0x7fc00000, 0x3400000},
8510{0x3400000, 0x8ba98d27, 0xffffffff, 0x7fc00000, 0x3400000},
8511{0x3400000, 0x8ba98d27, 0x4f3495cb, 0x4f3495cb, 0x3400010},
8512{0x3400000, 0x8ba98d27, 0xe73a5134, 0xe73a5134, 0x3400010},
8513{0x3400000, 0x8ba98d27, 0x7c994e9e, 0x7c994e9e, 0x3400010},
8514{0x3400000, 0x8ba98d27, 0x6164bd6c, 0x6164bd6c, 0x3400010},
8515{0x3400000, 0x8ba98d27, 0x9503366, 0x8ba30b8b, 0x3400010},
8516{0x3400000, 0x8ba98d27, 0xbf5a97c9, 0xbf5a97c9, 0x3400010},
8517{0x3400000, 0x8ba98d27, 0xe6ff1a14, 0xe6ff1a14, 0x3400010},
8518{0x3400000, 0x8ba98d27, 0x77f31e2f, 0x77f31e2f, 0x3400010},
8519{0x3400000, 0x8ba98d27, 0xaab4d7d8, 0xaab4d7d8, 0x3400010},
8520{0x3400000, 0x8ba98d27, 0x966320b, 0x8ba25b96, 0x3400010},
8521{0x3400000, 0x8ba98d27, 0xb26bddee, 0xb26bddee, 0x3400010},
8522{0x3400000, 0x8ba98d27, 0xb5c8e5d3, 0xb5c8e5d3, 0x3400010},
8523{0x3400000, 0x8ba98d27, 0x317285d3, 0x317285d3, 0x3400010},
8524{0x3400000, 0x8ba98d27, 0x3c9623b1, 0x3c9623b1, 0x3400010},
8525{0x3400000, 0x8ba98d27, 0x51fd2c7c, 0x51fd2c7c, 0x3400010},
8526{0x3400000, 0x8ba98d27, 0x7b906a6c, 0x7b906a6c, 0x3400010},
8527{0x3400000, 0x8ba98d7a, 0x0, 0x8ba98d7a, 0x3400000},
8528{0x3400000, 0x8ba98d7a, 0x1, 0x8ba98d7a, 0x3400080},
8529{0x3400000, 0x8ba98d7a, 0x76, 0x8ba98d7a, 0x3400080},
8530{0x3400000, 0x8ba98d7a, 0x2b94, 0x8ba98d7a, 0x3400080},
8531{0x3400000, 0x8ba98d7a, 0x636d24, 0x8ba98d7a, 0x3400080},
8532{0x3400000, 0x8ba98d7a, 0x7fffff, 0x8ba98d7a, 0x3400080},
8533{0x3400000, 0x8ba98d7a, 0x800000, 0x8ba98d78, 0x3400000},
8534{0x3400000, 0x8ba98d7a, 0x800002, 0x8ba98d77, 0x3400010},
8535{0x3400000, 0x8ba98d7a, 0x1398437, 0x8ba98d74, 0x3400010},
8536{0x3400000, 0x8ba98d7a, 0xba98d27, 0x83260000, 0x3400000},
8537{0x3400000, 0x8ba98d7a, 0xba98d7a, 0x0, 0x3400000},
8538{0x3400000, 0x8ba98d7a, 0x751f853a, 0x751f853a, 0x3400010},
8539{0x3400000, 0x8ba98d7a, 0x7f7ffff0, 0x7f7ffff0, 0x3400010},
8540{0x3400000, 0x8ba98d7a, 0x7f7fffff, 0x7f7fffff, 0x3400010},
8541{0x3400000, 0x8ba98d7a, 0x7f800000, 0x7f800000, 0x3400000},
8542{0x3400000, 0x8ba98d7a, 0x7f800001, 0x7fc00000, 0x3400001},
8543{0x3400000, 0x8ba98d7a, 0x7f984a37, 0x7fc00000, 0x3400001},
8544{0x3400000, 0x8ba98d7a, 0x7fbfffff, 0x7fc00000, 0x3400001},
8545{0x3400000, 0x8ba98d7a, 0x7fc00000, 0x7fc00000, 0x3400000},
8546{0x3400000, 0x8ba98d7a, 0x7fd9ba98, 0x7fc00000, 0x3400000},
8547{0x3400000, 0x8ba98d7a, 0x7fffffff, 0x7fc00000, 0x3400000},
8548{0x3400000, 0x8ba98d7a, 0x80000000, 0x8ba98d7a, 0x3400000},
8549{0x3400000, 0x8ba98d7a, 0x80000001, 0x8ba98d7a, 0x3400080},
8550{0x3400000, 0x8ba98d7a, 0x80000076, 0x8ba98d7a, 0x3400080},
8551{0x3400000, 0x8ba98d7a, 0x80002b94, 0x8ba98d7a, 0x3400080},
8552{0x3400000, 0x8ba98d7a, 0x80636d24, 0x8ba98d7a, 0x3400080},
8553{0x3400000, 0x8ba98d7a, 0x807fffff, 0x8ba98d7a, 0x3400080},
8554{0x3400000, 0x8ba98d7a, 0x80800000, 0x8ba98d7c, 0x3400000},
8555{0x3400000, 0x8ba98d7a, 0x80800002, 0x8ba98d7c, 0x3400010},
8556{0x3400000, 0x8ba98d7a, 0x81398437, 0x8ba98d7f, 0x3400010},
8557{0x3400000, 0x8ba98d7a, 0x8ba98d27, 0x8c298d50, 0x3400010},
8558{0x3400000, 0x8ba98d7a, 0x8ba98d7a, 0x8c298d7a, 0x3400000},
8559{0x3400000, 0x8ba98d7a, 0xf51f853a, 0xf51f853a, 0x3400010},
8560{0x3400000, 0x8ba98d7a, 0xff7ffff0, 0xff7ffff0, 0x3400010},
8561{0x3400000, 0x8ba98d7a, 0xff7fffff, 0xff7fffff, 0x3400010},
8562{0x3400000, 0x8ba98d7a, 0xff800000, 0xff800000, 0x3400000},
8563{0x3400000, 0x8ba98d7a, 0xff800001, 0x7fc00000, 0x3400001},
8564{0x3400000, 0x8ba98d7a, 0xff984a37, 0x7fc00000, 0x3400001},
8565{0x3400000, 0x8ba98d7a, 0xffbfffff, 0x7fc00000, 0x3400001},
8566{0x3400000, 0x8ba98d7a, 0xffc00000, 0x7fc00000, 0x3400000},
8567{0x3400000, 0x8ba98d7a, 0xffd9ba98, 0x7fc00000, 0x3400000},
8568{0x3400000, 0x8ba98d7a, 0xffffffff, 0x7fc00000, 0x3400000},
8569{0x3400000, 0x8ba98d7a, 0x4f3495cb, 0x4f3495cb, 0x3400010},
8570{0x3400000, 0x8ba98d7a, 0xe73a5134, 0xe73a5134, 0x3400010},
8571{0x3400000, 0x8ba98d7a, 0x7c994e9e, 0x7c994e9e, 0x3400010},
8572{0x3400000, 0x8ba98d7a, 0x6164bd6c, 0x6164bd6c, 0x3400010},
8573{0x3400000, 0x8ba98d7a, 0x9503366, 0x8ba30bde, 0x3400010},
8574{0x3400000, 0x8ba98d7a, 0xbf5a97c9, 0xbf5a97c9, 0x3400010},
8575{0x3400000, 0x8ba98d7a, 0xe6ff1a14, 0xe6ff1a14, 0x3400010},
8576{0x3400000, 0x8ba98d7a, 0x77f31e2f, 0x77f31e2f, 0x3400010},
8577{0x3400000, 0x8ba98d7a, 0xaab4d7d8, 0xaab4d7d8, 0x3400010},
8578{0x3400000, 0x8ba98d7a, 0x966320b, 0x8ba25be9, 0x3400010},
8579{0x3400000, 0x8ba98d7a, 0xb26bddee, 0xb26bddee, 0x3400010},
8580{0x3400000, 0x8ba98d7a, 0xb5c8e5d3, 0xb5c8e5d3, 0x3400010},
8581{0x3400000, 0x8ba98d7a, 0x317285d3, 0x317285d3, 0x3400010},
8582{0x3400000, 0x8ba98d7a, 0x3c9623b1, 0x3c9623b1, 0x3400010},
8583{0x3400000, 0x8ba98d7a, 0x51fd2c7c, 0x51fd2c7c, 0x3400010},
8584{0x3400000, 0x8ba98d7a, 0x7b906a6c, 0x7b906a6c, 0x3400010},
8585{0x3400000, 0xf51f853a, 0x0, 0xf51f853a, 0x3400000},
8586{0x3400000, 0xf51f853a, 0x1, 0xf51f853a, 0x3400080},
8587{0x3400000, 0xf51f853a, 0x76, 0xf51f853a, 0x3400080},
8588{0x3400000, 0xf51f853a, 0x2b94, 0xf51f853a, 0x3400080},
8589{0x3400000, 0xf51f853a, 0x636d24, 0xf51f853a, 0x3400080},
8590{0x3400000, 0xf51f853a, 0x7fffff, 0xf51f853a, 0x3400080},
8591{0x3400000, 0xf51f853a, 0x800000, 0xf51f8539, 0x3400010},
8592{0x3400000, 0xf51f853a, 0x800002, 0xf51f8539, 0x3400010},
8593{0x3400000, 0xf51f853a, 0x1398437, 0xf51f8539, 0x3400010},
8594{0x3400000, 0xf51f853a, 0xba98d27, 0xf51f8539, 0x3400010},
8595{0x3400000, 0xf51f853a, 0xba98d7a, 0xf51f8539, 0x3400010},
8596{0x3400000, 0xf51f853a, 0x751f853a, 0x0, 0x3400000},
8597{0x3400000, 0xf51f853a, 0x7f7ffff0, 0x7f7fffe7, 0x3400010},
8598{0x3400000, 0xf51f853a, 0x7f7fffff, 0x7f7ffff6, 0x3400010},
8599{0x3400000, 0xf51f853a, 0x7f800000, 0x7f800000, 0x3400000},
8600{0x3400000, 0xf51f853a, 0x7f800001, 0x7fc00000, 0x3400001},
8601{0x3400000, 0xf51f853a, 0x7f984a37, 0x7fc00000, 0x3400001},
8602{0x3400000, 0xf51f853a, 0x7fbfffff, 0x7fc00000, 0x3400001},
8603{0x3400000, 0xf51f853a, 0x7fc00000, 0x7fc00000, 0x3400000},
8604{0x3400000, 0xf51f853a, 0x7fd9ba98, 0x7fc00000, 0x3400000},
8605{0x3400000, 0xf51f853a, 0x7fffffff, 0x7fc00000, 0x3400000},
8606{0x3400000, 0xf51f853a, 0x80000000, 0xf51f853a, 0x3400000},
8607{0x3400000, 0xf51f853a, 0x80000001, 0xf51f853a, 0x3400080},
8608{0x3400000, 0xf51f853a, 0x80000076, 0xf51f853a, 0x3400080},
8609{0x3400000, 0xf51f853a, 0x80002b94, 0xf51f853a, 0x3400080},
8610{0x3400000, 0xf51f853a, 0x80636d24, 0xf51f853a, 0x3400080},
8611{0x3400000, 0xf51f853a, 0x807fffff, 0xf51f853a, 0x3400080},
8612{0x3400000, 0xf51f853a, 0x80800000, 0xf51f853a, 0x3400010},
8613{0x3400000, 0xf51f853a, 0x80800002, 0xf51f853a, 0x3400010},
8614{0x3400000, 0xf51f853a, 0x81398437, 0xf51f853a, 0x3400010},
8615{0x3400000, 0xf51f853a, 0x8ba98d27, 0xf51f853a, 0x3400010},
8616{0x3400000, 0xf51f853a, 0x8ba98d7a, 0xf51f853a, 0x3400010},
8617{0x3400000, 0xf51f853a, 0xf51f853a, 0xf59f853a, 0x3400000},
8618{0x3400000, 0xf51f853a, 0xff7ffff0, 0xff7ffff9, 0x3400010},
8619{0x3400000, 0xf51f853a, 0xff7fffff, 0xff7fffff, 0x3400014},
8620{0x3400000, 0xf51f853a, 0xff800000, 0xff800000, 0x3400000},
8621{0x3400000, 0xf51f853a, 0xff800001, 0x7fc00000, 0x3400001},
8622{0x3400000, 0xf51f853a, 0xff984a37, 0x7fc00000, 0x3400001},
8623{0x3400000, 0xf51f853a, 0xffbfffff, 0x7fc00000, 0x3400001},
8624{0x3400000, 0xf51f853a, 0xffc00000, 0x7fc00000, 0x3400000},
8625{0x3400000, 0xf51f853a, 0xffd9ba98, 0x7fc00000, 0x3400000},
8626{0x3400000, 0xf51f853a, 0xffffffff, 0x7fc00000, 0x3400000},
8627{0x3400000, 0xf51f853a, 0x4f3495cb, 0xf51f8539, 0x3400010},
8628{0x3400000, 0xf51f853a, 0xe73a5134, 0xf51f853a, 0x3400010},
8629{0x3400000, 0xf51f853a, 0x7c994e9e, 0x7c994d5f, 0x3400010},
8630{0x3400000, 0xf51f853a, 0x6164bd6c, 0xf51f8539, 0x3400010},
8631{0x3400000, 0xf51f853a, 0x9503366, 0xf51f8539, 0x3400010},
8632{0x3400000, 0xf51f853a, 0xbf5a97c9, 0xf51f853a, 0x3400010},
8633{0x3400000, 0xf51f853a, 0xe6ff1a14, 0xf51f853a, 0x3400010},
8634{0x3400000, 0xf51f853a, 0x77f31e2f, 0x77ee2206, 0x3400010},
8635{0x3400000, 0xf51f853a, 0xaab4d7d8, 0xf51f853a, 0x3400010},
8636{0x3400000, 0xf51f853a, 0x966320b, 0xf51f8539, 0x3400010},
8637{0x3400000, 0xf51f853a, 0xb26bddee, 0xf51f853a, 0x3400010},
8638{0x3400000, 0xf51f853a, 0xb5c8e5d3, 0xf51f853a, 0x3400010},
8639{0x3400000, 0xf51f853a, 0x317285d3, 0xf51f8539, 0x3400010},
8640{0x3400000, 0xf51f853a, 0x3c9623b1, 0xf51f8539, 0x3400010},
8641{0x3400000, 0xf51f853a, 0x51fd2c7c, 0xf51f8539, 0x3400010},
8642{0x3400000, 0xf51f853a, 0x7b906a6c, 0x7b906570, 0x3400010},
8643{0x3400000, 0xff7ffff0, 0x0, 0xff7ffff0, 0x3400000},
8644{0x3400000, 0xff7ffff0, 0x1, 0xff7ffff0, 0x3400080},
8645{0x3400000, 0xff7ffff0, 0x76, 0xff7ffff0, 0x3400080},
8646{0x3400000, 0xff7ffff0, 0x2b94, 0xff7ffff0, 0x3400080},
8647{0x3400000, 0xff7ffff0, 0x636d24, 0xff7ffff0, 0x3400080},
8648{0x3400000, 0xff7ffff0, 0x7fffff, 0xff7ffff0, 0x3400080},
8649{0x3400000, 0xff7ffff0, 0x800000, 0xff7fffef, 0x3400010},
8650{0x3400000, 0xff7ffff0, 0x800002, 0xff7fffef, 0x3400010},
8651{0x3400000, 0xff7ffff0, 0x1398437, 0xff7fffef, 0x3400010},
8652{0x3400000, 0xff7ffff0, 0xba98d27, 0xff7fffef, 0x3400010},
8653{0x3400000, 0xff7ffff0, 0xba98d7a, 0xff7fffef, 0x3400010},
8654{0x3400000, 0xff7ffff0, 0x751f853a, 0xff7fffe6, 0x3400010},
8655{0x3400000, 0xff7ffff0, 0x7f7ffff0, 0x0, 0x3400000},
8656{0x3400000, 0xff7ffff0, 0x7f7fffff, 0x75700000, 0x3400000},
8657{0x3400000, 0xff7ffff0, 0x7f800000, 0x7f800000, 0x3400000},
8658{0x3400000, 0xff7ffff0, 0x7f800001, 0x7fc00000, 0x3400001},
8659{0x3400000, 0xff7ffff0, 0x7f984a37, 0x7fc00000, 0x3400001},
8660{0x3400000, 0xff7ffff0, 0x7fbfffff, 0x7fc00000, 0x3400001},
8661{0x3400000, 0xff7ffff0, 0x7fc00000, 0x7fc00000, 0x3400000},
8662{0x3400000, 0xff7ffff0, 0x7fd9ba98, 0x7fc00000, 0x3400000},
8663{0x3400000, 0xff7ffff0, 0x7fffffff, 0x7fc00000, 0x3400000},
8664{0x3400000, 0xff7ffff0, 0x80000000, 0xff7ffff0, 0x3400000},
8665{0x3400000, 0xff7ffff0, 0x80000001, 0xff7ffff0, 0x3400080},
8666{0x3400000, 0xff7ffff0, 0x80000076, 0xff7ffff0, 0x3400080},
8667{0x3400000, 0xff7ffff0, 0x80002b94, 0xff7ffff0, 0x3400080},
8668{0x3400000, 0xff7ffff0, 0x80636d24, 0xff7ffff0, 0x3400080},
8669{0x3400000, 0xff7ffff0, 0x807fffff, 0xff7ffff0, 0x3400080},
8670{0x3400000, 0xff7ffff0, 0x80800000, 0xff7ffff0, 0x3400010},
8671{0x3400000, 0xff7ffff0, 0x80800002, 0xff7ffff0, 0x3400010},
8672{0x3400000, 0xff7ffff0, 0x81398437, 0xff7ffff0, 0x3400010},
8673{0x3400000, 0xff7ffff0, 0x8ba98d27, 0xff7ffff0, 0x3400010},
8674{0x3400000, 0xff7ffff0, 0x8ba98d7a, 0xff7ffff0, 0x3400010},
8675{0x3400000, 0xff7ffff0, 0xf51f853a, 0xff7ffff9, 0x3400010},
8676{0x3400000, 0xff7ffff0, 0xff7ffff0, 0xff7fffff, 0x3400014},
8677{0x3400000, 0xff7ffff0, 0xff7fffff, 0xff7fffff, 0x3400014},
8678{0x3400000, 0xff7ffff0, 0xff800000, 0xff800000, 0x3400000},
8679{0x3400000, 0xff7ffff0, 0xff800001, 0x7fc00000, 0x3400001},
8680{0x3400000, 0xff7ffff0, 0xff984a37, 0x7fc00000, 0x3400001},
8681{0x3400000, 0xff7ffff0, 0xffbfffff, 0x7fc00000, 0x3400001},
8682{0x3400000, 0xff7ffff0, 0xffc00000, 0x7fc00000, 0x3400000},
8683{0x3400000, 0xff7ffff0, 0xffd9ba98, 0x7fc00000, 0x3400000},
8684{0x3400000, 0xff7ffff0, 0xffffffff, 0x7fc00000, 0x3400000},
8685{0x3400000, 0xff7ffff0, 0x4f3495cb, 0xff7fffef, 0x3400010},
8686{0x3400000, 0xff7ffff0, 0xe73a5134, 0xff7ffff0, 0x3400010},
8687{0x3400000, 0xff7ffff0, 0x7c994e9e, 0xff7b357b, 0x3400010},
8688{0x3400000, 0xff7ffff0, 0x6164bd6c, 0xff7fffef, 0x3400010},
8689{0x3400000, 0xff7ffff0, 0x9503366, 0xff7fffef, 0x3400010},
8690{0x3400000, 0xff7ffff0, 0xbf5a97c9, 0xff7ffff0, 0x3400010},
8691{0x3400000, 0xff7ffff0, 0xe6ff1a14, 0xff7ffff0, 0x3400010},
8692{0x3400000, 0xff7ffff0, 0x77f31e2f, 0xff7ffe09, 0x3400010},
8693{0x3400000, 0xff7ffff0, 0xaab4d7d8, 0xff7ffff0, 0x3400010},
8694{0x3400000, 0xff7ffff0, 0x966320b, 0xff7fffef, 0x3400010},
8695{0x3400000, 0xff7ffff0, 0xb26bddee, 0xff7ffff0, 0x3400010},
8696{0x3400000, 0xff7ffff0, 0xb5c8e5d3, 0xff7ffff0, 0x3400010},
8697{0x3400000, 0xff7ffff0, 0x317285d3, 0xff7fffef, 0x3400010},
8698{0x3400000, 0xff7ffff0, 0x3c9623b1, 0xff7fffef, 0x3400010},
8699{0x3400000, 0xff7ffff0, 0x51fd2c7c, 0xff7fffef, 0x3400010},
8700{0x3400000, 0xff7ffff0, 0x7b906a6c, 0xff7edf1b, 0x3400010},
8701{0x3400000, 0xff7fffff, 0x0, 0xff7fffff, 0x3400000},
8702{0x3400000, 0xff7fffff, 0x1, 0xff7fffff, 0x3400080},
8703{0x3400000, 0xff7fffff, 0x76, 0xff7fffff, 0x3400080},
8704{0x3400000, 0xff7fffff, 0x2b94, 0xff7fffff, 0x3400080},
8705{0x3400000, 0xff7fffff, 0x636d24, 0xff7fffff, 0x3400080},
8706{0x3400000, 0xff7fffff, 0x7fffff, 0xff7fffff, 0x3400080},
8707{0x3400000, 0xff7fffff, 0x800000, 0xff7ffffe, 0x3400010},
8708{0x3400000, 0xff7fffff, 0x800002, 0xff7ffffe, 0x3400010},
8709{0x3400000, 0xff7fffff, 0x1398437, 0xff7ffffe, 0x3400010},
8710{0x3400000, 0xff7fffff, 0xba98d27, 0xff7ffffe, 0x3400010},
8711{0x3400000, 0xff7fffff, 0xba98d7a, 0xff7ffffe, 0x3400010},
8712{0x3400000, 0xff7fffff, 0x751f853a, 0xff7ffff5, 0x3400010},
8713{0x3400000, 0xff7fffff, 0x7f7ffff0, 0xf5700000, 0x3400000},
8714{0x3400000, 0xff7fffff, 0x7f7fffff, 0x0, 0x3400000},
8715{0x3400000, 0xff7fffff, 0x7f800000, 0x7f800000, 0x3400000},
8716{0x3400000, 0xff7fffff, 0x7f800001, 0x7fc00000, 0x3400001},
8717{0x3400000, 0xff7fffff, 0x7f984a37, 0x7fc00000, 0x3400001},
8718{0x3400000, 0xff7fffff, 0x7fbfffff, 0x7fc00000, 0x3400001},
8719{0x3400000, 0xff7fffff, 0x7fc00000, 0x7fc00000, 0x3400000},
8720{0x3400000, 0xff7fffff, 0x7fd9ba98, 0x7fc00000, 0x3400000},
8721{0x3400000, 0xff7fffff, 0x7fffffff, 0x7fc00000, 0x3400000},
8722{0x3400000, 0xff7fffff, 0x80000000, 0xff7fffff, 0x3400000},
8723{0x3400000, 0xff7fffff, 0x80000001, 0xff7fffff, 0x3400080},
8724{0x3400000, 0xff7fffff, 0x80000076, 0xff7fffff, 0x3400080},
8725{0x3400000, 0xff7fffff, 0x80002b94, 0xff7fffff, 0x3400080},
8726{0x3400000, 0xff7fffff, 0x80636d24, 0xff7fffff, 0x3400080},
8727{0x3400000, 0xff7fffff, 0x807fffff, 0xff7fffff, 0x3400080},
8728{0x3400000, 0xff7fffff, 0x80800000, 0xff7fffff, 0x3400010},
8729{0x3400000, 0xff7fffff, 0x80800002, 0xff7fffff, 0x3400010},
8730{0x3400000, 0xff7fffff, 0x81398437, 0xff7fffff, 0x3400010},
8731{0x3400000, 0xff7fffff, 0x8ba98d27, 0xff7fffff, 0x3400010},
8732{0x3400000, 0xff7fffff, 0x8ba98d7a, 0xff7fffff, 0x3400010},
8733{0x3400000, 0xff7fffff, 0xf51f853a, 0xff7fffff, 0x3400014},
8734{0x3400000, 0xff7fffff, 0xff7ffff0, 0xff7fffff, 0x3400014},
8735{0x3400000, 0xff7fffff, 0xff7fffff, 0xff7fffff, 0x3400014},
8736{0x3400000, 0xff7fffff, 0xff800000, 0xff800000, 0x3400000},
8737{0x3400000, 0xff7fffff, 0xff800001, 0x7fc00000, 0x3400001},
8738{0x3400000, 0xff7fffff, 0xff984a37, 0x7fc00000, 0x3400001},
8739{0x3400000, 0xff7fffff, 0xffbfffff, 0x7fc00000, 0x3400001},
8740{0x3400000, 0xff7fffff, 0xffc00000, 0x7fc00000, 0x3400000},
8741{0x3400000, 0xff7fffff, 0xffd9ba98, 0x7fc00000, 0x3400000},
8742{0x3400000, 0xff7fffff, 0xffffffff, 0x7fc00000, 0x3400000},
8743{0x3400000, 0xff7fffff, 0x4f3495cb, 0xff7ffffe, 0x3400010},
8744{0x3400000, 0xff7fffff, 0xe73a5134, 0xff7fffff, 0x3400010},
8745{0x3400000, 0xff7fffff, 0x7c994e9e, 0xff7b358a, 0x3400010},
8746{0x3400000, 0xff7fffff, 0x6164bd6c, 0xff7ffffe, 0x3400010},
8747{0x3400000, 0xff7fffff, 0x9503366, 0xff7ffffe, 0x3400010},
8748{0x3400000, 0xff7fffff, 0xbf5a97c9, 0xff7fffff, 0x3400010},
8749{0x3400000, 0xff7fffff, 0xe6ff1a14, 0xff7fffff, 0x3400010},
8750{0x3400000, 0xff7fffff, 0x77f31e2f, 0xff7ffe18, 0x3400010},
8751{0x3400000, 0xff7fffff, 0xaab4d7d8, 0xff7fffff, 0x3400010},
8752{0x3400000, 0xff7fffff, 0x966320b, 0xff7ffffe, 0x3400010},
8753{0x3400000, 0xff7fffff, 0xb26bddee, 0xff7fffff, 0x3400010},
8754{0x3400000, 0xff7fffff, 0xb5c8e5d3, 0xff7fffff, 0x3400010},
8755{0x3400000, 0xff7fffff, 0x317285d3, 0xff7ffffe, 0x3400010},
8756{0x3400000, 0xff7fffff, 0x3c9623b1, 0xff7ffffe, 0x3400010},
8757{0x3400000, 0xff7fffff, 0x51fd2c7c, 0xff7ffffe, 0x3400010},
8758{0x3400000, 0xff7fffff, 0x7b906a6c, 0xff7edf2a, 0x3400010},
8759{0x3400000, 0xff800000, 0x0, 0xff800000, 0x3400000},
8760{0x3400000, 0xff800000, 0x1, 0xff800000, 0x3400080},
8761{0x3400000, 0xff800000, 0x76, 0xff800000, 0x3400080},
8762{0x3400000, 0xff800000, 0x2b94, 0xff800000, 0x3400080},
8763{0x3400000, 0xff800000, 0x636d24, 0xff800000, 0x3400080},
8764{0x3400000, 0xff800000, 0x7fffff, 0xff800000, 0x3400080},
8765{0x3400000, 0xff800000, 0x800000, 0xff800000, 0x3400000},
8766{0x3400000, 0xff800000, 0x800002, 0xff800000, 0x3400000},
8767{0x3400000, 0xff800000, 0x1398437, 0xff800000, 0x3400000},
8768{0x3400000, 0xff800000, 0xba98d27, 0xff800000, 0x3400000},
8769{0x3400000, 0xff800000, 0xba98d7a, 0xff800000, 0x3400000},
8770{0x3400000, 0xff800000, 0x751f853a, 0xff800000, 0x3400000},
8771{0x3400000, 0xff800000, 0x7f7ffff0, 0xff800000, 0x3400000},
8772{0x3400000, 0xff800000, 0x7f7fffff, 0xff800000, 0x3400000},
8773{0x3400000, 0xff800000, 0x7f800000, 0x7fc00000, 0x3400001},
8774{0x3400000, 0xff800000, 0x7f800001, 0x7fc00000, 0x3400001},
8775{0x3400000, 0xff800000, 0x7f984a37, 0x7fc00000, 0x3400001},
8776{0x3400000, 0xff800000, 0x7fbfffff, 0x7fc00000, 0x3400001},
8777{0x3400000, 0xff800000, 0x7fc00000, 0x7fc00000, 0x3400000},
8778{0x3400000, 0xff800000, 0x7fd9ba98, 0x7fc00000, 0x3400000},
8779{0x3400000, 0xff800000, 0x7fffffff, 0x7fc00000, 0x3400000},
8780{0x3400000, 0xff800000, 0x80000000, 0xff800000, 0x3400000},
8781{0x3400000, 0xff800000, 0x80000001, 0xff800000, 0x3400080},
8782{0x3400000, 0xff800000, 0x80000076, 0xff800000, 0x3400080},
8783{0x3400000, 0xff800000, 0x80002b94, 0xff800000, 0x3400080},
8784{0x3400000, 0xff800000, 0x80636d24, 0xff800000, 0x3400080},
8785{0x3400000, 0xff800000, 0x807fffff, 0xff800000, 0x3400080},
8786{0x3400000, 0xff800000, 0x80800000, 0xff800000, 0x3400000},
8787{0x3400000, 0xff800000, 0x80800002, 0xff800000, 0x3400000},
8788{0x3400000, 0xff800000, 0x81398437, 0xff800000, 0x3400000},
8789{0x3400000, 0xff800000, 0x8ba98d27, 0xff800000, 0x3400000},
8790{0x3400000, 0xff800000, 0x8ba98d7a, 0xff800000, 0x3400000},
8791{0x3400000, 0xff800000, 0xf51f853a, 0xff800000, 0x3400000},
8792{0x3400000, 0xff800000, 0xff7ffff0, 0xff800000, 0x3400000},
8793{0x3400000, 0xff800000, 0xff7fffff, 0xff800000, 0x3400000},
8794{0x3400000, 0xff800000, 0xff800000, 0xff800000, 0x3400000},
8795{0x3400000, 0xff800000, 0xff800001, 0x7fc00000, 0x3400001},
8796{0x3400000, 0xff800000, 0xff984a37, 0x7fc00000, 0x3400001},
8797{0x3400000, 0xff800000, 0xffbfffff, 0x7fc00000, 0x3400001},
8798{0x3400000, 0xff800000, 0xffc00000, 0x7fc00000, 0x3400000},
8799{0x3400000, 0xff800000, 0xffd9ba98, 0x7fc00000, 0x3400000},
8800{0x3400000, 0xff800000, 0xffffffff, 0x7fc00000, 0x3400000},
8801{0x3400000, 0xff800000, 0x4f3495cb, 0xff800000, 0x3400000},
8802{0x3400000, 0xff800000, 0xe73a5134, 0xff800000, 0x3400000},
8803{0x3400000, 0xff800000, 0x7c994e9e, 0xff800000, 0x3400000},
8804{0x3400000, 0xff800000, 0x6164bd6c, 0xff800000, 0x3400000},
8805{0x3400000, 0xff800000, 0x9503366, 0xff800000, 0x3400000},
8806{0x3400000, 0xff800000, 0xbf5a97c9, 0xff800000, 0x3400000},
8807{0x3400000, 0xff800000, 0xe6ff1a14, 0xff800000, 0x3400000},
8808{0x3400000, 0xff800000, 0x77f31e2f, 0xff800000, 0x3400000},
8809{0x3400000, 0xff800000, 0xaab4d7d8, 0xff800000, 0x3400000},
8810{0x3400000, 0xff800000, 0x966320b, 0xff800000, 0x3400000},
8811{0x3400000, 0xff800000, 0xb26bddee, 0xff800000, 0x3400000},
8812{0x3400000, 0xff800000, 0xb5c8e5d3, 0xff800000, 0x3400000},
8813{0x3400000, 0xff800000, 0x317285d3, 0xff800000, 0x3400000},
8814{0x3400000, 0xff800000, 0x3c9623b1, 0xff800000, 0x3400000},
8815{0x3400000, 0xff800000, 0x51fd2c7c, 0xff800000, 0x3400000},
8816{0x3400000, 0xff800000, 0x7b906a6c, 0xff800000, 0x3400000},
8817{0x3400000, 0xff800001, 0x0, 0x7fc00000, 0x3400001},
8818{0x3400000, 0xff800001, 0x1, 0x7fc00000, 0x3400081},
8819{0x3400000, 0xff800001, 0x76, 0x7fc00000, 0x3400081},
8820{0x3400000, 0xff800001, 0x2b94, 0x7fc00000, 0x3400081},
8821{0x3400000, 0xff800001, 0x636d24, 0x7fc00000, 0x3400081},
8822{0x3400000, 0xff800001, 0x7fffff, 0x7fc00000, 0x3400081},
8823{0x3400000, 0xff800001, 0x800000, 0x7fc00000, 0x3400001},
8824{0x3400000, 0xff800001, 0x800002, 0x7fc00000, 0x3400001},
8825{0x3400000, 0xff800001, 0x1398437, 0x7fc00000, 0x3400001},
8826{0x3400000, 0xff800001, 0xba98d27, 0x7fc00000, 0x3400001},
8827{0x3400000, 0xff800001, 0xba98d7a, 0x7fc00000, 0x3400001},
8828{0x3400000, 0xff800001, 0x751f853a, 0x7fc00000, 0x3400001},
8829{0x3400000, 0xff800001, 0x7f7ffff0, 0x7fc00000, 0x3400001},
8830{0x3400000, 0xff800001, 0x7f7fffff, 0x7fc00000, 0x3400001},
8831{0x3400000, 0xff800001, 0x7f800000, 0x7fc00000, 0x3400001},
8832{0x3400000, 0xff800001, 0x7f800001, 0x7fc00000, 0x3400001},
8833{0x3400000, 0xff800001, 0x7f984a37, 0x7fc00000, 0x3400001},
8834{0x3400000, 0xff800001, 0x7fbfffff, 0x7fc00000, 0x3400001},
8835{0x3400000, 0xff800001, 0x7fc00000, 0x7fc00000, 0x3400001},
8836{0x3400000, 0xff800001, 0x7fd9ba98, 0x7fc00000, 0x3400001},
8837{0x3400000, 0xff800001, 0x7fffffff, 0x7fc00000, 0x3400001},
8838{0x3400000, 0xff800001, 0x80000000, 0x7fc00000, 0x3400001},
8839{0x3400000, 0xff800001, 0x80000001, 0x7fc00000, 0x3400081},
8840{0x3400000, 0xff800001, 0x80000076, 0x7fc00000, 0x3400081},
8841{0x3400000, 0xff800001, 0x80002b94, 0x7fc00000, 0x3400081},
8842{0x3400000, 0xff800001, 0x80636d24, 0x7fc00000, 0x3400081},
8843{0x3400000, 0xff800001, 0x807fffff, 0x7fc00000, 0x3400081},
8844{0x3400000, 0xff800001, 0x80800000, 0x7fc00000, 0x3400001},
8845{0x3400000, 0xff800001, 0x80800002, 0x7fc00000, 0x3400001},
8846{0x3400000, 0xff800001, 0x81398437, 0x7fc00000, 0x3400001},
8847{0x3400000, 0xff800001, 0x8ba98d27, 0x7fc00000, 0x3400001},
8848{0x3400000, 0xff800001, 0x8ba98d7a, 0x7fc00000, 0x3400001},
8849{0x3400000, 0xff800001, 0xf51f853a, 0x7fc00000, 0x3400001},
8850{0x3400000, 0xff800001, 0xff7ffff0, 0x7fc00000, 0x3400001},
8851{0x3400000, 0xff800001, 0xff7fffff, 0x7fc00000, 0x3400001},
8852{0x3400000, 0xff800001, 0xff800000, 0x7fc00000, 0x3400001},
8853{0x3400000, 0xff800001, 0xff800001, 0x7fc00000, 0x3400001},
8854{0x3400000, 0xff800001, 0xff984a37, 0x7fc00000, 0x3400001},
8855{0x3400000, 0xff800001, 0xffbfffff, 0x7fc00000, 0x3400001},
8856{0x3400000, 0xff800001, 0xffc00000, 0x7fc00000, 0x3400001},
8857{0x3400000, 0xff800001, 0xffd9ba98, 0x7fc00000, 0x3400001},
8858{0x3400000, 0xff800001, 0xffffffff, 0x7fc00000, 0x3400001},
8859{0x3400000, 0xff800001, 0x4f3495cb, 0x7fc00000, 0x3400001},
8860{0x3400000, 0xff800001, 0xe73a5134, 0x7fc00000, 0x3400001},
8861{0x3400000, 0xff800001, 0x7c994e9e, 0x7fc00000, 0x3400001},
8862{0x3400000, 0xff800001, 0x6164bd6c, 0x7fc00000, 0x3400001},
8863{0x3400000, 0xff800001, 0x9503366, 0x7fc00000, 0x3400001},
8864{0x3400000, 0xff800001, 0xbf5a97c9, 0x7fc00000, 0x3400001},
8865{0x3400000, 0xff800001, 0xe6ff1a14, 0x7fc00000, 0x3400001},
8866{0x3400000, 0xff800001, 0x77f31e2f, 0x7fc00000, 0x3400001},
8867{0x3400000, 0xff800001, 0xaab4d7d8, 0x7fc00000, 0x3400001},
8868{0x3400000, 0xff800001, 0x966320b, 0x7fc00000, 0x3400001},
8869{0x3400000, 0xff800001, 0xb26bddee, 0x7fc00000, 0x3400001},
8870{0x3400000, 0xff800001, 0xb5c8e5d3, 0x7fc00000, 0x3400001},
8871{0x3400000, 0xff800001, 0x317285d3, 0x7fc00000, 0x3400001},
8872{0x3400000, 0xff800001, 0x3c9623b1, 0x7fc00000, 0x3400001},
8873{0x3400000, 0xff800001, 0x51fd2c7c, 0x7fc00000, 0x3400001},
8874{0x3400000, 0xff800001, 0x7b906a6c, 0x7fc00000, 0x3400001},
8875{0x3400000, 0xff984a37, 0x0, 0x7fc00000, 0x3400001},
8876{0x3400000, 0xff984a37, 0x1, 0x7fc00000, 0x3400081},
8877{0x3400000, 0xff984a37, 0x76, 0x7fc00000, 0x3400081},
8878{0x3400000, 0xff984a37, 0x2b94, 0x7fc00000, 0x3400081},
8879{0x3400000, 0xff984a37, 0x636d24, 0x7fc00000, 0x3400081},
8880{0x3400000, 0xff984a37, 0x7fffff, 0x7fc00000, 0x3400081},
8881{0x3400000, 0xff984a37, 0x800000, 0x7fc00000, 0x3400001},
8882{0x3400000, 0xff984a37, 0x800002, 0x7fc00000, 0x3400001},
8883{0x3400000, 0xff984a37, 0x1398437, 0x7fc00000, 0x3400001},
8884{0x3400000, 0xff984a37, 0xba98d27, 0x7fc00000, 0x3400001},
8885{0x3400000, 0xff984a37, 0xba98d7a, 0x7fc00000, 0x3400001},
8886{0x3400000, 0xff984a37, 0x751f853a, 0x7fc00000, 0x3400001},
8887{0x3400000, 0xff984a37, 0x7f7ffff0, 0x7fc00000, 0x3400001},
8888{0x3400000, 0xff984a37, 0x7f7fffff, 0x7fc00000, 0x3400001},
8889{0x3400000, 0xff984a37, 0x7f800000, 0x7fc00000, 0x3400001},
8890{0x3400000, 0xff984a37, 0x7f800001, 0x7fc00000, 0x3400001},
8891{0x3400000, 0xff984a37, 0x7f984a37, 0x7fc00000, 0x3400001},
8892{0x3400000, 0xff984a37, 0x7fbfffff, 0x7fc00000, 0x3400001},
8893{0x3400000, 0xff984a37, 0x7fc00000, 0x7fc00000, 0x3400001},
8894{0x3400000, 0xff984a37, 0x7fd9ba98, 0x7fc00000, 0x3400001},
8895{0x3400000, 0xff984a37, 0x7fffffff, 0x7fc00000, 0x3400001},
8896{0x3400000, 0xff984a37, 0x80000000, 0x7fc00000, 0x3400001},
8897{0x3400000, 0xff984a37, 0x80000001, 0x7fc00000, 0x3400081},
8898{0x3400000, 0xff984a37, 0x80000076, 0x7fc00000, 0x3400081},
8899{0x3400000, 0xff984a37, 0x80002b94, 0x7fc00000, 0x3400081},
8900{0x3400000, 0xff984a37, 0x80636d24, 0x7fc00000, 0x3400081},
8901{0x3400000, 0xff984a37, 0x807fffff, 0x7fc00000, 0x3400081},
8902{0x3400000, 0xff984a37, 0x80800000, 0x7fc00000, 0x3400001},
8903{0x3400000, 0xff984a37, 0x80800002, 0x7fc00000, 0x3400001},
8904{0x3400000, 0xff984a37, 0x81398437, 0x7fc00000, 0x3400001},
8905{0x3400000, 0xff984a37, 0x8ba98d27, 0x7fc00000, 0x3400001},
8906{0x3400000, 0xff984a37, 0x8ba98d7a, 0x7fc00000, 0x3400001},
8907{0x3400000, 0xff984a37, 0xf51f853a, 0x7fc00000, 0x3400001},
8908{0x3400000, 0xff984a37, 0xff7ffff0, 0x7fc00000, 0x3400001},
8909{0x3400000, 0xff984a37, 0xff7fffff, 0x7fc00000, 0x3400001},
8910{0x3400000, 0xff984a37, 0xff800000, 0x7fc00000, 0x3400001},
8911{0x3400000, 0xff984a37, 0xff800001, 0x7fc00000, 0x3400001},
8912{0x3400000, 0xff984a37, 0xff984a37, 0x7fc00000, 0x3400001},
8913{0x3400000, 0xff984a37, 0xffbfffff, 0x7fc00000, 0x3400001},
8914{0x3400000, 0xff984a37, 0xffc00000, 0x7fc00000, 0x3400001},
8915{0x3400000, 0xff984a37, 0xffd9ba98, 0x7fc00000, 0x3400001},
8916{0x3400000, 0xff984a37, 0xffffffff, 0x7fc00000, 0x3400001},
8917{0x3400000, 0xff984a37, 0x4f3495cb, 0x7fc00000, 0x3400001},
8918{0x3400000, 0xff984a37, 0xe73a5134, 0x7fc00000, 0x3400001},
8919{0x3400000, 0xff984a37, 0x7c994e9e, 0x7fc00000, 0x3400001},
8920{0x3400000, 0xff984a37, 0x6164bd6c, 0x7fc00000, 0x3400001},
8921{0x3400000, 0xff984a37, 0x9503366, 0x7fc00000, 0x3400001},
8922{0x3400000, 0xff984a37, 0xbf5a97c9, 0x7fc00000, 0x3400001},
8923{0x3400000, 0xff984a37, 0xe6ff1a14, 0x7fc00000, 0x3400001},
8924{0x3400000, 0xff984a37, 0x77f31e2f, 0x7fc00000, 0x3400001},
8925{0x3400000, 0xff984a37, 0xaab4d7d8, 0x7fc00000, 0x3400001},
8926{0x3400000, 0xff984a37, 0x966320b, 0x7fc00000, 0x3400001},
8927{0x3400000, 0xff984a37, 0xb26bddee, 0x7fc00000, 0x3400001},
8928{0x3400000, 0xff984a37, 0xb5c8e5d3, 0x7fc00000, 0x3400001},
8929{0x3400000, 0xff984a37, 0x317285d3, 0x7fc00000, 0x3400001},
8930{0x3400000, 0xff984a37, 0x3c9623b1, 0x7fc00000, 0x3400001},
8931{0x3400000, 0xff984a37, 0x51fd2c7c, 0x7fc00000, 0x3400001},
8932{0x3400000, 0xff984a37, 0x7b906a6c, 0x7fc00000, 0x3400001},
8933{0x3400000, 0xffbfffff, 0x0, 0x7fc00000, 0x3400001},
8934{0x3400000, 0xffbfffff, 0x1, 0x7fc00000, 0x3400081},
8935{0x3400000, 0xffbfffff, 0x76, 0x7fc00000, 0x3400081},
8936{0x3400000, 0xffbfffff, 0x2b94, 0x7fc00000, 0x3400081},
8937{0x3400000, 0xffbfffff, 0x636d24, 0x7fc00000, 0x3400081},
8938{0x3400000, 0xffbfffff, 0x7fffff, 0x7fc00000, 0x3400081},
8939{0x3400000, 0xffbfffff, 0x800000, 0x7fc00000, 0x3400001},
8940{0x3400000, 0xffbfffff, 0x800002, 0x7fc00000, 0x3400001},
8941{0x3400000, 0xffbfffff, 0x1398437, 0x7fc00000, 0x3400001},
8942{0x3400000, 0xffbfffff, 0xba98d27, 0x7fc00000, 0x3400001},
8943{0x3400000, 0xffbfffff, 0xba98d7a, 0x7fc00000, 0x3400001},
8944{0x3400000, 0xffbfffff, 0x751f853a, 0x7fc00000, 0x3400001},
8945{0x3400000, 0xffbfffff, 0x7f7ffff0, 0x7fc00000, 0x3400001},
8946{0x3400000, 0xffbfffff, 0x7f7fffff, 0x7fc00000, 0x3400001},
8947{0x3400000, 0xffbfffff, 0x7f800000, 0x7fc00000, 0x3400001},
8948{0x3400000, 0xffbfffff, 0x7f800001, 0x7fc00000, 0x3400001},
8949{0x3400000, 0xffbfffff, 0x7f984a37, 0x7fc00000, 0x3400001},
8950{0x3400000, 0xffbfffff, 0x7fbfffff, 0x7fc00000, 0x3400001},
8951{0x3400000, 0xffbfffff, 0x7fc00000, 0x7fc00000, 0x3400001},
8952{0x3400000, 0xffbfffff, 0x7fd9ba98, 0x7fc00000, 0x3400001},
8953{0x3400000, 0xffbfffff, 0x7fffffff, 0x7fc00000, 0x3400001},
8954{0x3400000, 0xffbfffff, 0x80000000, 0x7fc00000, 0x3400001},
8955{0x3400000, 0xffbfffff, 0x80000001, 0x7fc00000, 0x3400081},
8956{0x3400000, 0xffbfffff, 0x80000076, 0x7fc00000, 0x3400081},
8957{0x3400000, 0xffbfffff, 0x80002b94, 0x7fc00000, 0x3400081},
8958{0x3400000, 0xffbfffff, 0x80636d24, 0x7fc00000, 0x3400081},
8959{0x3400000, 0xffbfffff, 0x807fffff, 0x7fc00000, 0x3400081},
8960{0x3400000, 0xffbfffff, 0x80800000, 0x7fc00000, 0x3400001},
8961{0x3400000, 0xffbfffff, 0x80800002, 0x7fc00000, 0x3400001},
8962{0x3400000, 0xffbfffff, 0x81398437, 0x7fc00000, 0x3400001},
8963{0x3400000, 0xffbfffff, 0x8ba98d27, 0x7fc00000, 0x3400001},
8964{0x3400000, 0xffbfffff, 0x8ba98d7a, 0x7fc00000, 0x3400001},
8965{0x3400000, 0xffbfffff, 0xf51f853a, 0x7fc00000, 0x3400001},
8966{0x3400000, 0xffbfffff, 0xff7ffff0, 0x7fc00000, 0x3400001},
8967{0x3400000, 0xffbfffff, 0xff7fffff, 0x7fc00000, 0x3400001},
8968{0x3400000, 0xffbfffff, 0xff800000, 0x7fc00000, 0x3400001},
8969{0x3400000, 0xffbfffff, 0xff800001, 0x7fc00000, 0x3400001},
8970{0x3400000, 0xffbfffff, 0xff984a37, 0x7fc00000, 0x3400001},
8971{0x3400000, 0xffbfffff, 0xffbfffff, 0x7fc00000, 0x3400001},
8972{0x3400000, 0xffbfffff, 0xffc00000, 0x7fc00000, 0x3400001},
8973{0x3400000, 0xffbfffff, 0xffd9ba98, 0x7fc00000, 0x3400001},
8974{0x3400000, 0xffbfffff, 0xffffffff, 0x7fc00000, 0x3400001},
8975{0x3400000, 0xffbfffff, 0x4f3495cb, 0x7fc00000, 0x3400001},
8976{0x3400000, 0xffbfffff, 0xe73a5134, 0x7fc00000, 0x3400001},
8977{0x3400000, 0xffbfffff, 0x7c994e9e, 0x7fc00000, 0x3400001},
8978{0x3400000, 0xffbfffff, 0x6164bd6c, 0x7fc00000, 0x3400001},
8979{0x3400000, 0xffbfffff, 0x9503366, 0x7fc00000, 0x3400001},
8980{0x3400000, 0xffbfffff, 0xbf5a97c9, 0x7fc00000, 0x3400001},
8981{0x3400000, 0xffbfffff, 0xe6ff1a14, 0x7fc00000, 0x3400001},
8982{0x3400000, 0xffbfffff, 0x77f31e2f, 0x7fc00000, 0x3400001},
8983{0x3400000, 0xffbfffff, 0xaab4d7d8, 0x7fc00000, 0x3400001},
8984{0x3400000, 0xffbfffff, 0x966320b, 0x7fc00000, 0x3400001},
8985{0x3400000, 0xffbfffff, 0xb26bddee, 0x7fc00000, 0x3400001},
8986{0x3400000, 0xffbfffff, 0xb5c8e5d3, 0x7fc00000, 0x3400001},
8987{0x3400000, 0xffbfffff, 0x317285d3, 0x7fc00000, 0x3400001},
8988{0x3400000, 0xffbfffff, 0x3c9623b1, 0x7fc00000, 0x3400001},
8989{0x3400000, 0xffbfffff, 0x51fd2c7c, 0x7fc00000, 0x3400001},
8990{0x3400000, 0xffbfffff, 0x7b906a6c, 0x7fc00000, 0x3400001},
8991{0x3400000, 0xffc00000, 0x0, 0x7fc00000, 0x3400000},
8992{0x3400000, 0xffc00000, 0x1, 0x7fc00000, 0x3400080},
8993{0x3400000, 0xffc00000, 0x76, 0x7fc00000, 0x3400080},
8994{0x3400000, 0xffc00000, 0x2b94, 0x7fc00000, 0x3400080},
8995{0x3400000, 0xffc00000, 0x636d24, 0x7fc00000, 0x3400080},
8996{0x3400000, 0xffc00000, 0x7fffff, 0x7fc00000, 0x3400080},
8997{0x3400000, 0xffc00000, 0x800000, 0x7fc00000, 0x3400000},
8998{0x3400000, 0xffc00000, 0x800002, 0x7fc00000, 0x3400000},
8999{0x3400000, 0xffc00000, 0x1398437, 0x7fc00000, 0x3400000},
9000{0x3400000, 0xffc00000, 0xba98d27, 0x7fc00000, 0x3400000},
9001{0x3400000, 0xffc00000, 0xba98d7a, 0x7fc00000, 0x3400000},
9002{0x3400000, 0xffc00000, 0x751f853a, 0x7fc00000, 0x3400000},
9003{0x3400000, 0xffc00000, 0x7f7ffff0, 0x7fc00000, 0x3400000},
9004{0x3400000, 0xffc00000, 0x7f7fffff, 0x7fc00000, 0x3400000},
9005{0x3400000, 0xffc00000, 0x7f800000, 0x7fc00000, 0x3400000},
9006{0x3400000, 0xffc00000, 0x7f800001, 0x7fc00000, 0x3400001},
9007{0x3400000, 0xffc00000, 0x7f984a37, 0x7fc00000, 0x3400001},
9008{0x3400000, 0xffc00000, 0x7fbfffff, 0x7fc00000, 0x3400001},
9009{0x3400000, 0xffc00000, 0x7fc00000, 0x7fc00000, 0x3400000},
9010{0x3400000, 0xffc00000, 0x7fd9ba98, 0x7fc00000, 0x3400000},
9011{0x3400000, 0xffc00000, 0x7fffffff, 0x7fc00000, 0x3400000},
9012{0x3400000, 0xffc00000, 0x80000000, 0x7fc00000, 0x3400000},
9013{0x3400000, 0xffc00000, 0x80000001, 0x7fc00000, 0x3400080},
9014{0x3400000, 0xffc00000, 0x80000076, 0x7fc00000, 0x3400080},
9015{0x3400000, 0xffc00000, 0x80002b94, 0x7fc00000, 0x3400080},
9016{0x3400000, 0xffc00000, 0x80636d24, 0x7fc00000, 0x3400080},
9017{0x3400000, 0xffc00000, 0x807fffff, 0x7fc00000, 0x3400080},
9018{0x3400000, 0xffc00000, 0x80800000, 0x7fc00000, 0x3400000},
9019{0x3400000, 0xffc00000, 0x80800002, 0x7fc00000, 0x3400000},
9020{0x3400000, 0xffc00000, 0x81398437, 0x7fc00000, 0x3400000},
9021{0x3400000, 0xffc00000, 0x8ba98d27, 0x7fc00000, 0x3400000},
9022{0x3400000, 0xffc00000, 0x8ba98d7a, 0x7fc00000, 0x3400000},
9023{0x3400000, 0xffc00000, 0xf51f853a, 0x7fc00000, 0x3400000},
9024{0x3400000, 0xffc00000, 0xff7ffff0, 0x7fc00000, 0x3400000},
9025{0x3400000, 0xffc00000, 0xff7fffff, 0x7fc00000, 0x3400000},
9026{0x3400000, 0xffc00000, 0xff800000, 0x7fc00000, 0x3400000},
9027{0x3400000, 0xffc00000, 0xff800001, 0x7fc00000, 0x3400001},
9028{0x3400000, 0xffc00000, 0xff984a37, 0x7fc00000, 0x3400001},
9029{0x3400000, 0xffc00000, 0xffbfffff, 0x7fc00000, 0x3400001},
9030{0x3400000, 0xffc00000, 0xffc00000, 0x7fc00000, 0x3400000},
9031{0x3400000, 0xffc00000, 0xffd9ba98, 0x7fc00000, 0x3400000},
9032{0x3400000, 0xffc00000, 0xffffffff, 0x7fc00000, 0x3400000},
9033{0x3400000, 0xffc00000, 0x4f3495cb, 0x7fc00000, 0x3400000},
9034{0x3400000, 0xffc00000, 0xe73a5134, 0x7fc00000, 0x3400000},
9035{0x3400000, 0xffc00000, 0x7c994e9e, 0x7fc00000, 0x3400000},
9036{0x3400000, 0xffc00000, 0x6164bd6c, 0x7fc00000, 0x3400000},
9037{0x3400000, 0xffc00000, 0x9503366, 0x7fc00000, 0x3400000},
9038{0x3400000, 0xffc00000, 0xbf5a97c9, 0x7fc00000, 0x3400000},
9039{0x3400000, 0xffc00000, 0xe6ff1a14, 0x7fc00000, 0x3400000},
9040{0x3400000, 0xffc00000, 0x77f31e2f, 0x7fc00000, 0x3400000},
9041{0x3400000, 0xffc00000, 0xaab4d7d8, 0x7fc00000, 0x3400000},
9042{0x3400000, 0xffc00000, 0x966320b, 0x7fc00000, 0x3400000},
9043{0x3400000, 0xffc00000, 0xb26bddee, 0x7fc00000, 0x3400000},
9044{0x3400000, 0xffc00000, 0xb5c8e5d3, 0x7fc00000, 0x3400000},
9045{0x3400000, 0xffc00000, 0x317285d3, 0x7fc00000, 0x3400000},
9046{0x3400000, 0xffc00000, 0x3c9623b1, 0x7fc00000, 0x3400000},
9047{0x3400000, 0xffc00000, 0x51fd2c7c, 0x7fc00000, 0x3400000},
9048{0x3400000, 0xffc00000, 0x7b906a6c, 0x7fc00000, 0x3400000},
9049{0x3400000, 0xffd9ba98, 0x0, 0x7fc00000, 0x3400000},
9050{0x3400000, 0xffd9ba98, 0x1, 0x7fc00000, 0x3400080},
9051{0x3400000, 0xffd9ba98, 0x76, 0x7fc00000, 0x3400080},
9052{0x3400000, 0xffd9ba98, 0x2b94, 0x7fc00000, 0x3400080},
9053{0x3400000, 0xffd9ba98, 0x636d24, 0x7fc00000, 0x3400080},
9054{0x3400000, 0xffd9ba98, 0x7fffff, 0x7fc00000, 0x3400080},
9055{0x3400000, 0xffd9ba98, 0x800000, 0x7fc00000, 0x3400000},
9056{0x3400000, 0xffd9ba98, 0x800002, 0x7fc00000, 0x3400000},
9057{0x3400000, 0xffd9ba98, 0x1398437, 0x7fc00000, 0x3400000},
9058{0x3400000, 0xffd9ba98, 0xba98d27, 0x7fc00000, 0x3400000},
9059{0x3400000, 0xffd9ba98, 0xba98d7a, 0x7fc00000, 0x3400000},
9060{0x3400000, 0xffd9ba98, 0x751f853a, 0x7fc00000, 0x3400000},
9061{0x3400000, 0xffd9ba98, 0x7f7ffff0, 0x7fc00000, 0x3400000},
9062{0x3400000, 0xffd9ba98, 0x7f7fffff, 0x7fc00000, 0x3400000},
9063{0x3400000, 0xffd9ba98, 0x7f800000, 0x7fc00000, 0x3400000},
9064{0x3400000, 0xffd9ba98, 0x7f800001, 0x7fc00000, 0x3400001},
9065{0x3400000, 0xffd9ba98, 0x7f984a37, 0x7fc00000, 0x3400001},
9066{0x3400000, 0xffd9ba98, 0x7fbfffff, 0x7fc00000, 0x3400001},
9067{0x3400000, 0xffd9ba98, 0x7fc00000, 0x7fc00000, 0x3400000},
9068{0x3400000, 0xffd9ba98, 0x7fd9ba98, 0x7fc00000, 0x3400000},
9069{0x3400000, 0xffd9ba98, 0x7fffffff, 0x7fc00000, 0x3400000},
9070{0x3400000, 0xffd9ba98, 0x80000000, 0x7fc00000, 0x3400000},
9071{0x3400000, 0xffd9ba98, 0x80000001, 0x7fc00000, 0x3400080},
9072{0x3400000, 0xffd9ba98, 0x80000076, 0x7fc00000, 0x3400080},
9073{0x3400000, 0xffd9ba98, 0x80002b94, 0x7fc00000, 0x3400080},
9074{0x3400000, 0xffd9ba98, 0x80636d24, 0x7fc00000, 0x3400080},
9075{0x3400000, 0xffd9ba98, 0x807fffff, 0x7fc00000, 0x3400080},
9076{0x3400000, 0xffd9ba98, 0x80800000, 0x7fc00000, 0x3400000},
9077{0x3400000, 0xffd9ba98, 0x80800002, 0x7fc00000, 0x3400000},
9078{0x3400000, 0xffd9ba98, 0x81398437, 0x7fc00000, 0x3400000},
9079{0x3400000, 0xffd9ba98, 0x8ba98d27, 0x7fc00000, 0x3400000},
9080{0x3400000, 0xffd9ba98, 0x8ba98d7a, 0x7fc00000, 0x3400000},
9081{0x3400000, 0xffd9ba98, 0xf51f853a, 0x7fc00000, 0x3400000},
9082{0x3400000, 0xffd9ba98, 0xff7ffff0, 0x7fc00000, 0x3400000},
9083{0x3400000, 0xffd9ba98, 0xff7fffff, 0x7fc00000, 0x3400000},
9084{0x3400000, 0xffd9ba98, 0xff800000, 0x7fc00000, 0x3400000},
9085{0x3400000, 0xffd9ba98, 0xff800001, 0x7fc00000, 0x3400001},
9086{0x3400000, 0xffd9ba98, 0xff984a37, 0x7fc00000, 0x3400001},
9087{0x3400000, 0xffd9ba98, 0xffbfffff, 0x7fc00000, 0x3400001},
9088{0x3400000, 0xffd9ba98, 0xffc00000, 0x7fc00000, 0x3400000},
9089{0x3400000, 0xffd9ba98, 0xffd9ba98, 0x7fc00000, 0x3400000},
9090{0x3400000, 0xffd9ba98, 0xffffffff, 0x7fc00000, 0x3400000},
9091{0x3400000, 0xffd9ba98, 0x4f3495cb, 0x7fc00000, 0x3400000},
9092{0x3400000, 0xffd9ba98, 0xe73a5134, 0x7fc00000, 0x3400000},
9093{0x3400000, 0xffd9ba98, 0x7c994e9e, 0x7fc00000, 0x3400000},
9094{0x3400000, 0xffd9ba98, 0x6164bd6c, 0x7fc00000, 0x3400000},
9095{0x3400000, 0xffd9ba98, 0x9503366, 0x7fc00000, 0x3400000},
9096{0x3400000, 0xffd9ba98, 0xbf5a97c9, 0x7fc00000, 0x3400000},
9097{0x3400000, 0xffd9ba98, 0xe6ff1a14, 0x7fc00000, 0x3400000},
9098{0x3400000, 0xffd9ba98, 0x77f31e2f, 0x7fc00000, 0x3400000},
9099{0x3400000, 0xffd9ba98, 0xaab4d7d8, 0x7fc00000, 0x3400000},
9100{0x3400000, 0xffd9ba98, 0x966320b, 0x7fc00000, 0x3400000},
9101{0x3400000, 0xffd9ba98, 0xb26bddee, 0x7fc00000, 0x3400000},
9102{0x3400000, 0xffd9ba98, 0xb5c8e5d3, 0x7fc00000, 0x3400000},
9103{0x3400000, 0xffd9ba98, 0x317285d3, 0x7fc00000, 0x3400000},
9104{0x3400000, 0xffd9ba98, 0x3c9623b1, 0x7fc00000, 0x3400000},
9105{0x3400000, 0xffd9ba98, 0x51fd2c7c, 0x7fc00000, 0x3400000},
9106{0x3400000, 0xffd9ba98, 0x7b906a6c, 0x7fc00000, 0x3400000},
9107{0x3400000, 0xffffffff, 0x0, 0x7fc00000, 0x3400000},
9108{0x3400000, 0xffffffff, 0x1, 0x7fc00000, 0x3400080},
9109{0x3400000, 0xffffffff, 0x76, 0x7fc00000, 0x3400080},
9110{0x3400000, 0xffffffff, 0x2b94, 0x7fc00000, 0x3400080},
9111{0x3400000, 0xffffffff, 0x636d24, 0x7fc00000, 0x3400080},
9112{0x3400000, 0xffffffff, 0x7fffff, 0x7fc00000, 0x3400080},
9113{0x3400000, 0xffffffff, 0x800000, 0x7fc00000, 0x3400000},
9114{0x3400000, 0xffffffff, 0x800002, 0x7fc00000, 0x3400000},
9115{0x3400000, 0xffffffff, 0x1398437, 0x7fc00000, 0x3400000},
9116{0x3400000, 0xffffffff, 0xba98d27, 0x7fc00000, 0x3400000},
9117{0x3400000, 0xffffffff, 0xba98d7a, 0x7fc00000, 0x3400000},
9118{0x3400000, 0xffffffff, 0x751f853a, 0x7fc00000, 0x3400000},
9119{0x3400000, 0xffffffff, 0x7f7ffff0, 0x7fc00000, 0x3400000},
9120{0x3400000, 0xffffffff, 0x7f7fffff, 0x7fc00000, 0x3400000},
9121{0x3400000, 0xffffffff, 0x7f800000, 0x7fc00000, 0x3400000},
9122{0x3400000, 0xffffffff, 0x7f800001, 0x7fc00000, 0x3400001},
9123{0x3400000, 0xffffffff, 0x7f984a37, 0x7fc00000, 0x3400001},
9124{0x3400000, 0xffffffff, 0x7fbfffff, 0x7fc00000, 0x3400001},
9125{0x3400000, 0xffffffff, 0x7fc00000, 0x7fc00000, 0x3400000},
9126{0x3400000, 0xffffffff, 0x7fd9ba98, 0x7fc00000, 0x3400000},
9127{0x3400000, 0xffffffff, 0x7fffffff, 0x7fc00000, 0x3400000},
9128{0x3400000, 0xffffffff, 0x80000000, 0x7fc00000, 0x3400000},
9129{0x3400000, 0xffffffff, 0x80000001, 0x7fc00000, 0x3400080},
9130{0x3400000, 0xffffffff, 0x80000076, 0x7fc00000, 0x3400080},
9131{0x3400000, 0xffffffff, 0x80002b94, 0x7fc00000, 0x3400080},
9132{0x3400000, 0xffffffff, 0x80636d24, 0x7fc00000, 0x3400080},
9133{0x3400000, 0xffffffff, 0x807fffff, 0x7fc00000, 0x3400080},
9134{0x3400000, 0xffffffff, 0x80800000, 0x7fc00000, 0x3400000},
9135{0x3400000, 0xffffffff, 0x80800002, 0x7fc00000, 0x3400000},
9136{0x3400000, 0xffffffff, 0x81398437, 0x7fc00000, 0x3400000},
9137{0x3400000, 0xffffffff, 0x8ba98d27, 0x7fc00000, 0x3400000},
9138{0x3400000, 0xffffffff, 0x8ba98d7a, 0x7fc00000, 0x3400000},
9139{0x3400000, 0xffffffff, 0xf51f853a, 0x7fc00000, 0x3400000},
9140{0x3400000, 0xffffffff, 0xff7ffff0, 0x7fc00000, 0x3400000},
9141{0x3400000, 0xffffffff, 0xff7fffff, 0x7fc00000, 0x3400000},
9142{0x3400000, 0xffffffff, 0xff800000, 0x7fc00000, 0x3400000},
9143{0x3400000, 0xffffffff, 0xff800001, 0x7fc00000, 0x3400001},
9144{0x3400000, 0xffffffff, 0xff984a37, 0x7fc00000, 0x3400001},
9145{0x3400000, 0xffffffff, 0xffbfffff, 0x7fc00000, 0x3400001},
9146{0x3400000, 0xffffffff, 0xffc00000, 0x7fc00000, 0x3400000},
9147{0x3400000, 0xffffffff, 0xffd9ba98, 0x7fc00000, 0x3400000},
9148{0x3400000, 0xffffffff, 0xffffffff, 0x7fc00000, 0x3400000},
9149{0x3400000, 0xffffffff, 0x4f3495cb, 0x7fc00000, 0x3400000},
9150{0x3400000, 0xffffffff, 0xe73a5134, 0x7fc00000, 0x3400000},
9151{0x3400000, 0xffffffff, 0x7c994e9e, 0x7fc00000, 0x3400000},
9152{0x3400000, 0xffffffff, 0x6164bd6c, 0x7fc00000, 0x3400000},
9153{0x3400000, 0xffffffff, 0x9503366, 0x7fc00000, 0x3400000},
9154{0x3400000, 0xffffffff, 0xbf5a97c9, 0x7fc00000, 0x3400000},
9155{0x3400000, 0xffffffff, 0xe6ff1a14, 0x7fc00000, 0x3400000},
9156{0x3400000, 0xffffffff, 0x77f31e2f, 0x7fc00000, 0x3400000},
9157{0x3400000, 0xffffffff, 0xaab4d7d8, 0x7fc00000, 0x3400000},
9158{0x3400000, 0xffffffff, 0x966320b, 0x7fc00000, 0x3400000},
9159{0x3400000, 0xffffffff, 0xb26bddee, 0x7fc00000, 0x3400000},
9160{0x3400000, 0xffffffff, 0xb5c8e5d3, 0x7fc00000, 0x3400000},
9161{0x3400000, 0xffffffff, 0x317285d3, 0x7fc00000, 0x3400000},
9162{0x3400000, 0xffffffff, 0x3c9623b1, 0x7fc00000, 0x3400000},
9163{0x3400000, 0xffffffff, 0x51fd2c7c, 0x7fc00000, 0x3400000},
9164{0x3400000, 0xffffffff, 0x7b906a6c, 0x7fc00000, 0x3400000},
9165{0x3400000, 0x4f3495cb, 0x0, 0x4f3495cb, 0x3400000},
9166{0x3400000, 0x4f3495cb, 0x1, 0x4f3495cb, 0x3400080},
9167{0x3400000, 0x4f3495cb, 0x76, 0x4f3495cb, 0x3400080},
9168{0x3400000, 0x4f3495cb, 0x2b94, 0x4f3495cb, 0x3400080},
9169{0x3400000, 0x4f3495cb, 0x636d24, 0x4f3495cb, 0x3400080},
9170{0x3400000, 0x4f3495cb, 0x7fffff, 0x4f3495cb, 0x3400080},
9171{0x3400000, 0x4f3495cb, 0x800000, 0x4f3495cc, 0x3400010},
9172{0x3400000, 0x4f3495cb, 0x800002, 0x4f3495cc, 0x3400010},
9173{0x3400000, 0x4f3495cb, 0x1398437, 0x4f3495cc, 0x3400010},
9174{0x3400000, 0x4f3495cb, 0xba98d27, 0x4f3495cc, 0x3400010},
9175{0x3400000, 0x4f3495cb, 0xba98d7a, 0x4f3495cc, 0x3400010},
9176{0x3400000, 0x4f3495cb, 0x751f853a, 0x751f853b, 0x3400010},
9177{0x3400000, 0x4f3495cb, 0x7f7ffff0, 0x7f7ffff1, 0x3400010},
9178{0x3400000, 0x4f3495cb, 0x7f7fffff, 0x7f800000, 0x3400014},
9179{0x3400000, 0x4f3495cb, 0x7f800000, 0x7f800000, 0x3400000},
9180{0x3400000, 0x4f3495cb, 0x7f800001, 0x7fc00000, 0x3400001},
9181{0x3400000, 0x4f3495cb, 0x7f984a37, 0x7fc00000, 0x3400001},
9182{0x3400000, 0x4f3495cb, 0x7fbfffff, 0x7fc00000, 0x3400001},
9183{0x3400000, 0x4f3495cb, 0x7fc00000, 0x7fc00000, 0x3400000},
9184{0x3400000, 0x4f3495cb, 0x7fd9ba98, 0x7fc00000, 0x3400000},
9185{0x3400000, 0x4f3495cb, 0x7fffffff, 0x7fc00000, 0x3400000},
9186{0x3400000, 0x4f3495cb, 0x80000000, 0x4f3495cb, 0x3400000},
9187{0x3400000, 0x4f3495cb, 0x80000001, 0x4f3495cb, 0x3400080},
9188{0x3400000, 0x4f3495cb, 0x80000076, 0x4f3495cb, 0x3400080},
9189{0x3400000, 0x4f3495cb, 0x80002b94, 0x4f3495cb, 0x3400080},
9190{0x3400000, 0x4f3495cb, 0x80636d24, 0x4f3495cb, 0x3400080},
9191{0x3400000, 0x4f3495cb, 0x807fffff, 0x4f3495cb, 0x3400080},
9192{0x3400000, 0x4f3495cb, 0x80800000, 0x4f3495cb, 0x3400010},
9193{0x3400000, 0x4f3495cb, 0x80800002, 0x4f3495cb, 0x3400010},
9194{0x3400000, 0x4f3495cb, 0x81398437, 0x4f3495cb, 0x3400010},
9195{0x3400000, 0x4f3495cb, 0x8ba98d27, 0x4f3495cb, 0x3400010},
9196{0x3400000, 0x4f3495cb, 0x8ba98d7a, 0x4f3495cb, 0x3400010},
9197{0x3400000, 0x4f3495cb, 0xf51f853a, 0xf51f8539, 0x3400010},
9198{0x3400000, 0x4f3495cb, 0xff7ffff0, 0xff7fffef, 0x3400010},
9199{0x3400000, 0x4f3495cb, 0xff7fffff, 0xff7ffffe, 0x3400010},
9200{0x3400000, 0x4f3495cb, 0xff800000, 0xff800000, 0x3400000},
9201{0x3400000, 0x4f3495cb, 0xff800001, 0x7fc00000, 0x3400001},
9202{0x3400000, 0x4f3495cb, 0xff984a37, 0x7fc00000, 0x3400001},
9203{0x3400000, 0x4f3495cb, 0xffbfffff, 0x7fc00000, 0x3400001},
9204{0x3400000, 0x4f3495cb, 0xffc00000, 0x7fc00000, 0x3400000},
9205{0x3400000, 0x4f3495cb, 0xffd9ba98, 0x7fc00000, 0x3400000},
9206{0x3400000, 0x4f3495cb, 0xffffffff, 0x7fc00000, 0x3400000},
9207{0x3400000, 0x4f3495cb, 0x4f3495cb, 0x4fb495cb, 0x3400000},
9208{0x3400000, 0x4f3495cb, 0xe73a5134, 0xe73a5133, 0x3400010},
9209{0x3400000, 0x4f3495cb, 0x7c994e9e, 0x7c994e9f, 0x3400010},
9210{0x3400000, 0x4f3495cb, 0x6164bd6c, 0x6164bd6d, 0x3400010},
9211{0x3400000, 0x4f3495cb, 0x9503366, 0x4f3495cc, 0x3400010},
9212{0x3400000, 0x4f3495cb, 0xbf5a97c9, 0x4f3495cb, 0x3400010},
9213{0x3400000, 0x4f3495cb, 0xe6ff1a14, 0xe6ff1a13, 0x3400010},
9214{0x3400000, 0x4f3495cb, 0x77f31e2f, 0x77f31e30, 0x3400010},
9215{0x3400000, 0x4f3495cb, 0xaab4d7d8, 0x4f3495cb, 0x3400010},
9216{0x3400000, 0x4f3495cb, 0x966320b, 0x4f3495cc, 0x3400010},
9217{0x3400000, 0x4f3495cb, 0xb26bddee, 0x4f3495cb, 0x3400010},
9218{0x3400000, 0x4f3495cb, 0xb5c8e5d3, 0x4f3495cb, 0x3400010},
9219{0x3400000, 0x4f3495cb, 0x317285d3, 0x4f3495cc, 0x3400010},
9220{0x3400000, 0x4f3495cb, 0x3c9623b1, 0x4f3495cc, 0x3400010},
9221{0x3400000, 0x4f3495cb, 0x51fd2c7c, 0x52016896, 0x3400010},
9222{0x3400000, 0x4f3495cb, 0x7b906a6c, 0x7b906a6d, 0x3400010},
9223{0x3400000, 0xe73a5134, 0x0, 0xe73a5134, 0x3400000},
9224{0x3400000, 0xe73a5134, 0x1, 0xe73a5134, 0x3400080},
9225{0x3400000, 0xe73a5134, 0x76, 0xe73a5134, 0x3400080},
9226{0x3400000, 0xe73a5134, 0x2b94, 0xe73a5134, 0x3400080},
9227{0x3400000, 0xe73a5134, 0x636d24, 0xe73a5134, 0x3400080},
9228{0x3400000, 0xe73a5134, 0x7fffff, 0xe73a5134, 0x3400080},
9229{0x3400000, 0xe73a5134, 0x800000, 0xe73a5133, 0x3400010},
9230{0x3400000, 0xe73a5134, 0x800002, 0xe73a5133, 0x3400010},
9231{0x3400000, 0xe73a5134, 0x1398437, 0xe73a5133, 0x3400010},
9232{0x3400000, 0xe73a5134, 0xba98d27, 0xe73a5133, 0x3400010},
9233{0x3400000, 0xe73a5134, 0xba98d7a, 0xe73a5133, 0x3400010},
9234{0x3400000, 0xe73a5134, 0x751f853a, 0x751f853a, 0x3400010},
9235{0x3400000, 0xe73a5134, 0x7f7ffff0, 0x7f7ffff0, 0x3400010},
9236{0x3400000, 0xe73a5134, 0x7f7fffff, 0x7f7fffff, 0x3400010},
9237{0x3400000, 0xe73a5134, 0x7f800000, 0x7f800000, 0x3400000},
9238{0x3400000, 0xe73a5134, 0x7f800001, 0x7fc00000, 0x3400001},
9239{0x3400000, 0xe73a5134, 0x7f984a37, 0x7fc00000, 0x3400001},
9240{0x3400000, 0xe73a5134, 0x7fbfffff, 0x7fc00000, 0x3400001},
9241{0x3400000, 0xe73a5134, 0x7fc00000, 0x7fc00000, 0x3400000},
9242{0x3400000, 0xe73a5134, 0x7fd9ba98, 0x7fc00000, 0x3400000},
9243{0x3400000, 0xe73a5134, 0x7fffffff, 0x7fc00000, 0x3400000},
9244{0x3400000, 0xe73a5134, 0x80000000, 0xe73a5134, 0x3400000},
9245{0x3400000, 0xe73a5134, 0x80000001, 0xe73a5134, 0x3400080},
9246{0x3400000, 0xe73a5134, 0x80000076, 0xe73a5134, 0x3400080},
9247{0x3400000, 0xe73a5134, 0x80002b94, 0xe73a5134, 0x3400080},
9248{0x3400000, 0xe73a5134, 0x80636d24, 0xe73a5134, 0x3400080},
9249{0x3400000, 0xe73a5134, 0x807fffff, 0xe73a5134, 0x3400080},
9250{0x3400000, 0xe73a5134, 0x80800000, 0xe73a5134, 0x3400010},
9251{0x3400000, 0xe73a5134, 0x80800002, 0xe73a5134, 0x3400010},
9252{0x3400000, 0xe73a5134, 0x81398437, 0xe73a5134, 0x3400010},
9253{0x3400000, 0xe73a5134, 0x8ba98d27, 0xe73a5134, 0x3400010},
9254{0x3400000, 0xe73a5134, 0x8ba98d7a, 0xe73a5134, 0x3400010},
9255{0x3400000, 0xe73a5134, 0xf51f853a, 0xf51f853a, 0x3400010},
9256{0x3400000, 0xe73a5134, 0xff7ffff0, 0xff7ffff0, 0x3400010},
9257{0x3400000, 0xe73a5134, 0xff7fffff, 0xff7fffff, 0x3400010},
9258{0x3400000, 0xe73a5134, 0xff800000, 0xff800000, 0x3400000},
9259{0x3400000, 0xe73a5134, 0xff800001, 0x7fc00000, 0x3400001},
9260{0x3400000, 0xe73a5134, 0xff984a37, 0x7fc00000, 0x3400001},
9261{0x3400000, 0xe73a5134, 0xffbfffff, 0x7fc00000, 0x3400001},
9262{0x3400000, 0xe73a5134, 0xffc00000, 0x7fc00000, 0x3400000},
9263{0x3400000, 0xe73a5134, 0xffd9ba98, 0x7fc00000, 0x3400000},
9264{0x3400000, 0xe73a5134, 0xffffffff, 0x7fc00000, 0x3400000},
9265{0x3400000, 0xe73a5134, 0x4f3495cb, 0xe73a5133, 0x3400010},
9266{0x3400000, 0xe73a5134, 0xe73a5134, 0xe7ba5134, 0x3400000},
9267{0x3400000, 0xe73a5134, 0x7c994e9e, 0x7c994e9e, 0x3400010},
9268{0x3400000, 0xe73a5134, 0x6164bd6c, 0xe73a42e8, 0x3400010},
9269{0x3400000, 0xe73a5134, 0x9503366, 0xe73a5133, 0x3400010},
9270{0x3400000, 0xe73a5134, 0xbf5a97c9, 0xe73a5134, 0x3400010},
9271{0x3400000, 0xe73a5134, 0xe6ff1a14, 0xe79cef1f, 0x3400000},
9272{0x3400000, 0xe73a5134, 0x77f31e2f, 0x77f31e2f, 0x3400010},
9273{0x3400000, 0xe73a5134, 0xaab4d7d8, 0xe73a5134, 0x3400010},
9274{0x3400000, 0xe73a5134, 0x966320b, 0xe73a5133, 0x3400010},
9275{0x3400000, 0xe73a5134, 0xb26bddee, 0xe73a5134, 0x3400010},
9276{0x3400000, 0xe73a5134, 0xb5c8e5d3, 0xe73a5134, 0x3400010},
9277{0x3400000, 0xe73a5134, 0x317285d3, 0xe73a5133, 0x3400010},
9278{0x3400000, 0xe73a5134, 0x3c9623b1, 0xe73a5133, 0x3400010},
9279{0x3400000, 0xe73a5134, 0x51fd2c7c, 0xe73a5133, 0x3400010},
9280{0x3400000, 0xe73a5134, 0x7b906a6c, 0x7b906a6c, 0x3400010},
9281{0x3400000, 0x7c994e9e, 0x0, 0x7c994e9e, 0x3400000},
9282{0x3400000, 0x7c994e9e, 0x1, 0x7c994e9e, 0x3400080},
9283{0x3400000, 0x7c994e9e, 0x76, 0x7c994e9e, 0x3400080},
9284{0x3400000, 0x7c994e9e, 0x2b94, 0x7c994e9e, 0x3400080},
9285{0x3400000, 0x7c994e9e, 0x636d24, 0x7c994e9e, 0x3400080},
9286{0x3400000, 0x7c994e9e, 0x7fffff, 0x7c994e9e, 0x3400080},
9287{0x3400000, 0x7c994e9e, 0x800000, 0x7c994e9f, 0x3400010},
9288{0x3400000, 0x7c994e9e, 0x800002, 0x7c994e9f, 0x3400010},
9289{0x3400000, 0x7c994e9e, 0x1398437, 0x7c994e9f, 0x3400010},
9290{0x3400000, 0x7c994e9e, 0xba98d27, 0x7c994e9f, 0x3400010},
9291{0x3400000, 0x7c994e9e, 0xba98d7a, 0x7c994e9f, 0x3400010},
9292{0x3400000, 0x7c994e9e, 0x751f853a, 0x7c994fde, 0x3400010},
9293{0x3400000, 0x7c994e9e, 0x7f7ffff0, 0x7f800000, 0x3400014},
9294{0x3400000, 0x7c994e9e, 0x7f7fffff, 0x7f800000, 0x3400014},
9295{0x3400000, 0x7c994e9e, 0x7f800000, 0x7f800000, 0x3400000},
9296{0x3400000, 0x7c994e9e, 0x7f800001, 0x7fc00000, 0x3400001},
9297{0x3400000, 0x7c994e9e, 0x7f984a37, 0x7fc00000, 0x3400001},
9298{0x3400000, 0x7c994e9e, 0x7fbfffff, 0x7fc00000, 0x3400001},
9299{0x3400000, 0x7c994e9e, 0x7fc00000, 0x7fc00000, 0x3400000},
9300{0x3400000, 0x7c994e9e, 0x7fd9ba98, 0x7fc00000, 0x3400000},
9301{0x3400000, 0x7c994e9e, 0x7fffffff, 0x7fc00000, 0x3400000},
9302{0x3400000, 0x7c994e9e, 0x80000000, 0x7c994e9e, 0x3400000},
9303{0x3400000, 0x7c994e9e, 0x80000001, 0x7c994e9e, 0x3400080},
9304{0x3400000, 0x7c994e9e, 0x80000076, 0x7c994e9e, 0x3400080},
9305{0x3400000, 0x7c994e9e, 0x80002b94, 0x7c994e9e, 0x3400080},
9306{0x3400000, 0x7c994e9e, 0x80636d24, 0x7c994e9e, 0x3400080},
9307{0x3400000, 0x7c994e9e, 0x807fffff, 0x7c994e9e, 0x3400080},
9308{0x3400000, 0x7c994e9e, 0x80800000, 0x7c994e9e, 0x3400010},
9309{0x3400000, 0x7c994e9e, 0x80800002, 0x7c994e9e, 0x3400010},
9310{0x3400000, 0x7c994e9e, 0x81398437, 0x7c994e9e, 0x3400010},
9311{0x3400000, 0x7c994e9e, 0x8ba98d27, 0x7c994e9e, 0x3400010},
9312{0x3400000, 0x7c994e9e, 0x8ba98d7a, 0x7c994e9e, 0x3400010},
9313{0x3400000, 0x7c994e9e, 0xf51f853a, 0x7c994d5f, 0x3400010},
9314{0x3400000, 0x7c994e9e, 0xff7ffff0, 0xff7b357b, 0x3400010},
9315{0x3400000, 0x7c994e9e, 0xff7fffff, 0xff7b358a, 0x3400010},
9316{0x3400000, 0x7c994e9e, 0xff800000, 0xff800000, 0x3400000},
9317{0x3400000, 0x7c994e9e, 0xff800001, 0x7fc00000, 0x3400001},
9318{0x3400000, 0x7c994e9e, 0xff984a37, 0x7fc00000, 0x3400001},
9319{0x3400000, 0x7c994e9e, 0xffbfffff, 0x7fc00000, 0x3400001},
9320{0x3400000, 0x7c994e9e, 0xffc00000, 0x7fc00000, 0x3400000},
9321{0x3400000, 0x7c994e9e, 0xffd9ba98, 0x7fc00000, 0x3400000},
9322{0x3400000, 0x7c994e9e, 0xffffffff, 0x7fc00000, 0x3400000},
9323{0x3400000, 0x7c994e9e, 0x4f3495cb, 0x7c994e9f, 0x3400010},
9324{0x3400000, 0x7c994e9e, 0xe73a5134, 0x7c994e9e, 0x3400010},
9325{0x3400000, 0x7c994e9e, 0x7c994e9e, 0x7d194e9e, 0x3400000},
9326{0x3400000, 0x7c994e9e, 0x6164bd6c, 0x7c994e9f, 0x3400010},
9327{0x3400000, 0x7c994e9e, 0x9503366, 0x7c994e9f, 0x3400010},
9328{0x3400000, 0x7c994e9e, 0xbf5a97c9, 0x7c994e9e, 0x3400010},
9329{0x3400000, 0x7c994e9e, 0xe6ff1a14, 0x7c994e9e, 0x3400010},
9330{0x3400000, 0x7c994e9e, 0x77f31e2f, 0x7c998b66, 0x3400010},
9331{0x3400000, 0x7c994e9e, 0xaab4d7d8, 0x7c994e9e, 0x3400010},
9332{0x3400000, 0x7c994e9e, 0x966320b, 0x7c994e9f, 0x3400010},
9333{0x3400000, 0x7c994e9e, 0xb26bddee, 0x7c994e9e, 0x3400010},
9334{0x3400000, 0x7c994e9e, 0xb5c8e5d3, 0x7c994e9e, 0x3400010},
9335{0x3400000, 0x7c994e9e, 0x317285d3, 0x7c994e9f, 0x3400010},
9336{0x3400000, 0x7c994e9e, 0x3c9623b1, 0x7c994e9f, 0x3400010},
9337{0x3400000, 0x7c994e9e, 0x51fd2c7c, 0x7c994e9f, 0x3400010},
9338{0x3400000, 0x7c994e9e, 0x7b906a6c, 0x7cbd6939, 0x3400000},
9339{0x3400000, 0x6164bd6c, 0x0, 0x6164bd6c, 0x3400000},
9340{0x3400000, 0x6164bd6c, 0x1, 0x6164bd6c, 0x3400080},
9341{0x3400000, 0x6164bd6c, 0x76, 0x6164bd6c, 0x3400080},
9342{0x3400000, 0x6164bd6c, 0x2b94, 0x6164bd6c, 0x3400080},
9343{0x3400000, 0x6164bd6c, 0x636d24, 0x6164bd6c, 0x3400080},
9344{0x3400000, 0x6164bd6c, 0x7fffff, 0x6164bd6c, 0x3400080},
9345{0x3400000, 0x6164bd6c, 0x800000, 0x6164bd6d, 0x3400010},
9346{0x3400000, 0x6164bd6c, 0x800002, 0x6164bd6d, 0x3400010},
9347{0x3400000, 0x6164bd6c, 0x1398437, 0x6164bd6d, 0x3400010},
9348{0x3400000, 0x6164bd6c, 0xba98d27, 0x6164bd6d, 0x3400010},
9349{0x3400000, 0x6164bd6c, 0xba98d7a, 0x6164bd6d, 0x3400010},
9350{0x3400000, 0x6164bd6c, 0x751f853a, 0x751f853b, 0x3400010},
9351{0x3400000, 0x6164bd6c, 0x7f7ffff0, 0x7f7ffff1, 0x3400010},
9352{0x3400000, 0x6164bd6c, 0x7f7fffff, 0x7f800000, 0x3400014},
9353{0x3400000, 0x6164bd6c, 0x7f800000, 0x7f800000, 0x3400000},
9354{0x3400000, 0x6164bd6c, 0x7f800001, 0x7fc00000, 0x3400001},
9355{0x3400000, 0x6164bd6c, 0x7f984a37, 0x7fc00000, 0x3400001},
9356{0x3400000, 0x6164bd6c, 0x7fbfffff, 0x7fc00000, 0x3400001},
9357{0x3400000, 0x6164bd6c, 0x7fc00000, 0x7fc00000, 0x3400000},
9358{0x3400000, 0x6164bd6c, 0x7fd9ba98, 0x7fc00000, 0x3400000},
9359{0x3400000, 0x6164bd6c, 0x7fffffff, 0x7fc00000, 0x3400000},
9360{0x3400000, 0x6164bd6c, 0x80000000, 0x6164bd6c, 0x3400000},
9361{0x3400000, 0x6164bd6c, 0x80000001, 0x6164bd6c, 0x3400080},
9362{0x3400000, 0x6164bd6c, 0x80000076, 0x6164bd6c, 0x3400080},
9363{0x3400000, 0x6164bd6c, 0x80002b94, 0x6164bd6c, 0x3400080},
9364{0x3400000, 0x6164bd6c, 0x80636d24, 0x6164bd6c, 0x3400080},
9365{0x3400000, 0x6164bd6c, 0x807fffff, 0x6164bd6c, 0x3400080},
9366{0x3400000, 0x6164bd6c, 0x80800000, 0x6164bd6c, 0x3400010},
9367{0x3400000, 0x6164bd6c, 0x80800002, 0x6164bd6c, 0x3400010},
9368{0x3400000, 0x6164bd6c, 0x81398437, 0x6164bd6c, 0x3400010},
9369{0x3400000, 0x6164bd6c, 0x8ba98d27, 0x6164bd6c, 0x3400010},
9370{0x3400000, 0x6164bd6c, 0x8ba98d7a, 0x6164bd6c, 0x3400010},
9371{0x3400000, 0x6164bd6c, 0xf51f853a, 0xf51f8539, 0x3400010},
9372{0x3400000, 0x6164bd6c, 0xff7ffff0, 0xff7fffef, 0x3400010},
9373{0x3400000, 0x6164bd6c, 0xff7fffff, 0xff7ffffe, 0x3400010},
9374{0x3400000, 0x6164bd6c, 0xff800000, 0xff800000, 0x3400000},
9375{0x3400000, 0x6164bd6c, 0xff800001, 0x7fc00000, 0x3400001},
9376{0x3400000, 0x6164bd6c, 0xff984a37, 0x7fc00000, 0x3400001},
9377{0x3400000, 0x6164bd6c, 0xffbfffff, 0x7fc00000, 0x3400001},
9378{0x3400000, 0x6164bd6c, 0xffc00000, 0x7fc00000, 0x3400000},
9379{0x3400000, 0x6164bd6c, 0xffd9ba98, 0x7fc00000, 0x3400000},
9380{0x3400000, 0x6164bd6c, 0xffffffff, 0x7fc00000, 0x3400000},
9381{0x3400000, 0x6164bd6c, 0x4f3495cb, 0x6164bd6d, 0x3400010},
9382{0x3400000, 0x6164bd6c, 0xe73a5134, 0xe73a42e8, 0x3400010},
9383{0x3400000, 0x6164bd6c, 0x7c994e9e, 0x7c994e9f, 0x3400010},
9384{0x3400000, 0x6164bd6c, 0x6164bd6c, 0x61e4bd6c, 0x3400000},
9385{0x3400000, 0x6164bd6c, 0x9503366, 0x6164bd6d, 0x3400010},
9386{0x3400000, 0x6164bd6c, 0xbf5a97c9, 0x6164bd6c, 0x3400010},
9387{0x3400000, 0x6164bd6c, 0xe6ff1a14, 0xe6fefd7c, 0x3400010},
9388{0x3400000, 0x6164bd6c, 0x77f31e2f, 0x77f31e30, 0x3400010},
9389{0x3400000, 0x6164bd6c, 0xaab4d7d8, 0x6164bd6c, 0x3400010},
9390{0x3400000, 0x6164bd6c, 0x966320b, 0x6164bd6d, 0x3400010},
9391{0x3400000, 0x6164bd6c, 0xb26bddee, 0x6164bd6c, 0x3400010},
9392{0x3400000, 0x6164bd6c, 0xb5c8e5d3, 0x6164bd6c, 0x3400010},
9393{0x3400000, 0x6164bd6c, 0x317285d3, 0x6164bd6d, 0x3400010},
9394{0x3400000, 0x6164bd6c, 0x3c9623b1, 0x6164bd6d, 0x3400010},
9395{0x3400000, 0x6164bd6c, 0x51fd2c7c, 0x6164bd6d, 0x3400010},
9396{0x3400000, 0x6164bd6c, 0x7b906a6c, 0x7b906a6d, 0x3400010},
9397{0x3400000, 0x9503366, 0x0, 0x9503366, 0x3400000},
9398{0x3400000, 0x9503366, 0x1, 0x9503366, 0x3400080},
9399{0x3400000, 0x9503366, 0x76, 0x9503366, 0x3400080},
9400{0x3400000, 0x9503366, 0x2b94, 0x9503366, 0x3400080},
9401{0x3400000, 0x9503366, 0x636d24, 0x9503366, 0x3400080},
9402{0x3400000, 0x9503366, 0x7fffff, 0x9503366, 0x3400080},
9403{0x3400000, 0x9503366, 0x800000, 0x95033a6, 0x3400000},
9404{0x3400000, 0x9503366, 0x800002, 0x95033a7, 0x3400010},
9405{0x3400000, 0x9503366, 0x1398437, 0x9503420, 0x3400010},
9406{0x3400000, 0x9503366, 0xba98d27, 0xbb00ec3, 0x3400010},
9407{0x3400000, 0x9503366, 0xba98d7a, 0xbb00f16, 0x3400010},
9408{0x3400000, 0x9503366, 0x751f853a, 0x751f853b, 0x3400010},
9409{0x3400000, 0x9503366, 0x7f7ffff0, 0x7f7ffff1, 0x3400010},
9410{0x3400000, 0x9503366, 0x7f7fffff, 0x7f800000, 0x3400014},
9411{0x3400000, 0x9503366, 0x7f800000, 0x7f800000, 0x3400000},
9412{0x3400000, 0x9503366, 0x7f800001, 0x7fc00000, 0x3400001},
9413{0x3400000, 0x9503366, 0x7f984a37, 0x7fc00000, 0x3400001},
9414{0x3400000, 0x9503366, 0x7fbfffff, 0x7fc00000, 0x3400001},
9415{0x3400000, 0x9503366, 0x7fc00000, 0x7fc00000, 0x3400000},
9416{0x3400000, 0x9503366, 0x7fd9ba98, 0x7fc00000, 0x3400000},
9417{0x3400000, 0x9503366, 0x7fffffff, 0x7fc00000, 0x3400000},
9418{0x3400000, 0x9503366, 0x80000000, 0x9503366, 0x3400000},
9419{0x3400000, 0x9503366, 0x80000001, 0x9503366, 0x3400080},
9420{0x3400000, 0x9503366, 0x80000076, 0x9503366, 0x3400080},
9421{0x3400000, 0x9503366, 0x80002b94, 0x9503366, 0x3400080},
9422{0x3400000, 0x9503366, 0x80636d24, 0x9503366, 0x3400080},
9423{0x3400000, 0x9503366, 0x807fffff, 0x9503366, 0x3400080},
9424{0x3400000, 0x9503366, 0x80800000, 0x9503326, 0x3400000},
9425{0x3400000, 0x9503366, 0x80800002, 0x9503326, 0x3400010},
9426{0x3400000, 0x9503366, 0x81398437, 0x95032ad, 0x3400010},
9427{0x3400000, 0x9503366, 0x8ba98d27, 0x8ba30b8b, 0x3400010},
9428{0x3400000, 0x9503366, 0x8ba98d7a, 0x8ba30bde, 0x3400010},
9429{0x3400000, 0x9503366, 0xf51f853a, 0xf51f8539, 0x3400010},
9430{0x3400000, 0x9503366, 0xff7ffff0, 0xff7fffef, 0x3400010},
9431{0x3400000, 0x9503366, 0xff7fffff, 0xff7ffffe, 0x3400010},
9432{0x3400000, 0x9503366, 0xff800000, 0xff800000, 0x3400000},
9433{0x3400000, 0x9503366, 0xff800001, 0x7fc00000, 0x3400001},
9434{0x3400000, 0x9503366, 0xff984a37, 0x7fc00000, 0x3400001},
9435{0x3400000, 0x9503366, 0xffbfffff, 0x7fc00000, 0x3400001},
9436{0x3400000, 0x9503366, 0xffc00000, 0x7fc00000, 0x3400000},
9437{0x3400000, 0x9503366, 0xffd9ba98, 0x7fc00000, 0x3400000},
9438{0x3400000, 0x9503366, 0xffffffff, 0x7fc00000, 0x3400000},
9439{0x3400000, 0x9503366, 0x4f3495cb, 0x4f3495cc, 0x3400010},
9440{0x3400000, 0x9503366, 0xe73a5134, 0xe73a5133, 0x3400010},
9441{0x3400000, 0x9503366, 0x7c994e9e, 0x7c994e9f, 0x3400010},
9442{0x3400000, 0x9503366, 0x6164bd6c, 0x6164bd6d, 0x3400010},
9443{0x3400000, 0x9503366, 0x9503366, 0x9d03366, 0x3400000},
9444{0x3400000, 0x9503366, 0xbf5a97c9, 0xbf5a97c8, 0x3400010},
9445{0x3400000, 0x9503366, 0xe6ff1a14, 0xe6ff1a13, 0x3400010},
9446{0x3400000, 0x9503366, 0x77f31e2f, 0x77f31e30, 0x3400010},
9447{0x3400000, 0x9503366, 0xaab4d7d8, 0xaab4d7d7, 0x3400010},
9448{0x3400000, 0x9503366, 0x966320b, 0x9db32b9, 0x3400010},
9449{0x3400000, 0x9503366, 0xb26bddee, 0xb26bdded, 0x3400010},
9450{0x3400000, 0x9503366, 0xb5c8e5d3, 0xb5c8e5d2, 0x3400010},
9451{0x3400000, 0x9503366, 0x317285d3, 0x317285d4, 0x3400010},
9452{0x3400000, 0x9503366, 0x3c9623b1, 0x3c9623b2, 0x3400010},
9453{0x3400000, 0x9503366, 0x51fd2c7c, 0x51fd2c7d, 0x3400010},
9454{0x3400000, 0x9503366, 0x7b906a6c, 0x7b906a6d, 0x3400010},
9455{0x3400000, 0xbf5a97c9, 0x0, 0xbf5a97c9, 0x3400000},
9456{0x3400000, 0xbf5a97c9, 0x1, 0xbf5a97c9, 0x3400080},
9457{0x3400000, 0xbf5a97c9, 0x76, 0xbf5a97c9, 0x3400080},
9458{0x3400000, 0xbf5a97c9, 0x2b94, 0xbf5a97c9, 0x3400080},
9459{0x3400000, 0xbf5a97c9, 0x636d24, 0xbf5a97c9, 0x3400080},
9460{0x3400000, 0xbf5a97c9, 0x7fffff, 0xbf5a97c9, 0x3400080},
9461{0x3400000, 0xbf5a97c9, 0x800000, 0xbf5a97c8, 0x3400010},
9462{0x3400000, 0xbf5a97c9, 0x800002, 0xbf5a97c8, 0x3400010},
9463{0x3400000, 0xbf5a97c9, 0x1398437, 0xbf5a97c8, 0x3400010},
9464{0x3400000, 0xbf5a97c9, 0xba98d27, 0xbf5a97c8, 0x3400010},
9465{0x3400000, 0xbf5a97c9, 0xba98d7a, 0xbf5a97c8, 0x3400010},
9466{0x3400000, 0xbf5a97c9, 0x751f853a, 0x751f853a, 0x3400010},
9467{0x3400000, 0xbf5a97c9, 0x7f7ffff0, 0x7f7ffff0, 0x3400010},
9468{0x3400000, 0xbf5a97c9, 0x7f7fffff, 0x7f7fffff, 0x3400010},
9469{0x3400000, 0xbf5a97c9, 0x7f800000, 0x7f800000, 0x3400000},
9470{0x3400000, 0xbf5a97c9, 0x7f800001, 0x7fc00000, 0x3400001},
9471{0x3400000, 0xbf5a97c9, 0x7f984a37, 0x7fc00000, 0x3400001},
9472{0x3400000, 0xbf5a97c9, 0x7fbfffff, 0x7fc00000, 0x3400001},
9473{0x3400000, 0xbf5a97c9, 0x7fc00000, 0x7fc00000, 0x3400000},
9474{0x3400000, 0xbf5a97c9, 0x7fd9ba98, 0x7fc00000, 0x3400000},
9475{0x3400000, 0xbf5a97c9, 0x7fffffff, 0x7fc00000, 0x3400000},
9476{0x3400000, 0xbf5a97c9, 0x80000000, 0xbf5a97c9, 0x3400000},
9477{0x3400000, 0xbf5a97c9, 0x80000001, 0xbf5a97c9, 0x3400080},
9478{0x3400000, 0xbf5a97c9, 0x80000076, 0xbf5a97c9, 0x3400080},
9479{0x3400000, 0xbf5a97c9, 0x80002b94, 0xbf5a97c9, 0x3400080},
9480{0x3400000, 0xbf5a97c9, 0x80636d24, 0xbf5a97c9, 0x3400080},
9481{0x3400000, 0xbf5a97c9, 0x807fffff, 0xbf5a97c9, 0x3400080},
9482{0x3400000, 0xbf5a97c9, 0x80800000, 0xbf5a97c9, 0x3400010},
9483{0x3400000, 0xbf5a97c9, 0x80800002, 0xbf5a97c9, 0x3400010},
9484{0x3400000, 0xbf5a97c9, 0x81398437, 0xbf5a97c9, 0x3400010},
9485{0x3400000, 0xbf5a97c9, 0x8ba98d27, 0xbf5a97c9, 0x3400010},
9486{0x3400000, 0xbf5a97c9, 0x8ba98d7a, 0xbf5a97c9, 0x3400010},
9487{0x3400000, 0xbf5a97c9, 0xf51f853a, 0xf51f853a, 0x3400010},
9488{0x3400000, 0xbf5a97c9, 0xff7ffff0, 0xff7ffff0, 0x3400010},
9489{0x3400000, 0xbf5a97c9, 0xff7fffff, 0xff7fffff, 0x3400010},
9490{0x3400000, 0xbf5a97c9, 0xff800000, 0xff800000, 0x3400000},
9491{0x3400000, 0xbf5a97c9, 0xff800001, 0x7fc00000, 0x3400001},
9492{0x3400000, 0xbf5a97c9, 0xff984a37, 0x7fc00000, 0x3400001},
9493{0x3400000, 0xbf5a97c9, 0xffbfffff, 0x7fc00000, 0x3400001},
9494{0x3400000, 0xbf5a97c9, 0xffc00000, 0x7fc00000, 0x3400000},
9495{0x3400000, 0xbf5a97c9, 0xffd9ba98, 0x7fc00000, 0x3400000},
9496{0x3400000, 0xbf5a97c9, 0xffffffff, 0x7fc00000, 0x3400000},
9497{0x3400000, 0xbf5a97c9, 0x4f3495cb, 0x4f3495cb, 0x3400010},
9498{0x3400000, 0xbf5a97c9, 0xe73a5134, 0xe73a5134, 0x3400010},
9499{0x3400000, 0xbf5a97c9, 0x7c994e9e, 0x7c994e9e, 0x3400010},
9500{0x3400000, 0xbf5a97c9, 0x6164bd6c, 0x6164bd6c, 0x3400010},
9501{0x3400000, 0xbf5a97c9, 0x9503366, 0xbf5a97c8, 0x3400010},
9502{0x3400000, 0xbf5a97c9, 0xbf5a97c9, 0xbfda97c9, 0x3400000},
9503{0x3400000, 0xbf5a97c9, 0xe6ff1a14, 0xe6ff1a14, 0x3400010},
9504{0x3400000, 0xbf5a97c9, 0x77f31e2f, 0x77f31e2f, 0x3400010},
9505{0x3400000, 0xbf5a97c9, 0xaab4d7d8, 0xbf5a97c9, 0x3400010},
9506{0x3400000, 0xbf5a97c9, 0x966320b, 0xbf5a97c8, 0x3400010},
9507{0x3400000, 0xbf5a97c9, 0xb26bddee, 0xbf5a97c9, 0x3400010},
9508{0x3400000, 0xbf5a97c9, 0xb5c8e5d3, 0xbf5a97e2, 0x3400010},
9509{0x3400000, 0xbf5a97c9, 0x317285d3, 0xbf5a97c8, 0x3400010},
9510{0x3400000, 0xbf5a97c9, 0x3c9623b1, 0xbf55e6ab, 0x3400010},
9511{0x3400000, 0xbf5a97c9, 0x51fd2c7c, 0x51fd2c7c, 0x3400010},
9512{0x3400000, 0xbf5a97c9, 0x7b906a6c, 0x7b906a6c, 0x3400010},
9513{0x3400000, 0xe6ff1a14, 0x0, 0xe6ff1a14, 0x3400000},
9514{0x3400000, 0xe6ff1a14, 0x1, 0xe6ff1a14, 0x3400080},
9515{0x3400000, 0xe6ff1a14, 0x76, 0xe6ff1a14, 0x3400080},
9516{0x3400000, 0xe6ff1a14, 0x2b94, 0xe6ff1a14, 0x3400080},
9517{0x3400000, 0xe6ff1a14, 0x636d24, 0xe6ff1a14, 0x3400080},
9518{0x3400000, 0xe6ff1a14, 0x7fffff, 0xe6ff1a14, 0x3400080},
9519{0x3400000, 0xe6ff1a14, 0x800000, 0xe6ff1a13, 0x3400010},
9520{0x3400000, 0xe6ff1a14, 0x800002, 0xe6ff1a13, 0x3400010},
9521{0x3400000, 0xe6ff1a14, 0x1398437, 0xe6ff1a13, 0x3400010},
9522{0x3400000, 0xe6ff1a14, 0xba98d27, 0xe6ff1a13, 0x3400010},
9523{0x3400000, 0xe6ff1a14, 0xba98d7a, 0xe6ff1a13, 0x3400010},
9524{0x3400000, 0xe6ff1a14, 0x751f853a, 0x751f853a, 0x3400010},
9525{0x3400000, 0xe6ff1a14, 0x7f7ffff0, 0x7f7ffff0, 0x3400010},
9526{0x3400000, 0xe6ff1a14, 0x7f7fffff, 0x7f7fffff, 0x3400010},
9527{0x3400000, 0xe6ff1a14, 0x7f800000, 0x7f800000, 0x3400000},
9528{0x3400000, 0xe6ff1a14, 0x7f800001, 0x7fc00000, 0x3400001},
9529{0x3400000, 0xe6ff1a14, 0x7f984a37, 0x7fc00000, 0x3400001},
9530{0x3400000, 0xe6ff1a14, 0x7fbfffff, 0x7fc00000, 0x3400001},
9531{0x3400000, 0xe6ff1a14, 0x7fc00000, 0x7fc00000, 0x3400000},
9532{0x3400000, 0xe6ff1a14, 0x7fd9ba98, 0x7fc00000, 0x3400000},
9533{0x3400000, 0xe6ff1a14, 0x7fffffff, 0x7fc00000, 0x3400000},
9534{0x3400000, 0xe6ff1a14, 0x80000000, 0xe6ff1a14, 0x3400000},
9535{0x3400000, 0xe6ff1a14, 0x80000001, 0xe6ff1a14, 0x3400080},
9536{0x3400000, 0xe6ff1a14, 0x80000076, 0xe6ff1a14, 0x3400080},
9537{0x3400000, 0xe6ff1a14, 0x80002b94, 0xe6ff1a14, 0x3400080},
9538{0x3400000, 0xe6ff1a14, 0x80636d24, 0xe6ff1a14, 0x3400080},
9539{0x3400000, 0xe6ff1a14, 0x807fffff, 0xe6ff1a14, 0x3400080},
9540{0x3400000, 0xe6ff1a14, 0x80800000, 0xe6ff1a14, 0x3400010},
9541{0x3400000, 0xe6ff1a14, 0x80800002, 0xe6ff1a14, 0x3400010},
9542{0x3400000, 0xe6ff1a14, 0x81398437, 0xe6ff1a14, 0x3400010},
9543{0x3400000, 0xe6ff1a14, 0x8ba98d27, 0xe6ff1a14, 0x3400010},
9544{0x3400000, 0xe6ff1a14, 0x8ba98d7a, 0xe6ff1a14, 0x3400010},
9545{0x3400000, 0xe6ff1a14, 0xf51f853a, 0xf51f853a, 0x3400010},
9546{0x3400000, 0xe6ff1a14, 0xff7ffff0, 0xff7ffff0, 0x3400010},
9547{0x3400000, 0xe6ff1a14, 0xff7fffff, 0xff7fffff, 0x3400010},
9548{0x3400000, 0xe6ff1a14, 0xff800000, 0xff800000, 0x3400000},
9549{0x3400000, 0xe6ff1a14, 0xff800001, 0x7fc00000, 0x3400001},
9550{0x3400000, 0xe6ff1a14, 0xff984a37, 0x7fc00000, 0x3400001},
9551{0x3400000, 0xe6ff1a14, 0xffbfffff, 0x7fc00000, 0x3400001},
9552{0x3400000, 0xe6ff1a14, 0xffc00000, 0x7fc00000, 0x3400000},
9553{0x3400000, 0xe6ff1a14, 0xffd9ba98, 0x7fc00000, 0x3400000},
9554{0x3400000, 0xe6ff1a14, 0xffffffff, 0x7fc00000, 0x3400000},
9555{0x3400000, 0xe6ff1a14, 0x4f3495cb, 0xe6ff1a13, 0x3400010},
9556{0x3400000, 0xe6ff1a14, 0xe73a5134, 0xe79cef1f, 0x3400000},
9557{0x3400000, 0xe6ff1a14, 0x7c994e9e, 0x7c994e9e, 0x3400010},
9558{0x3400000, 0xe6ff1a14, 0x6164bd6c, 0xe6fefd7c, 0x3400010},
9559{0x3400000, 0xe6ff1a14, 0x9503366, 0xe6ff1a13, 0x3400010},
9560{0x3400000, 0xe6ff1a14, 0xbf5a97c9, 0xe6ff1a14, 0x3400010},
9561{0x3400000, 0xe6ff1a14, 0xe6ff1a14, 0xe77f1a14, 0x3400000},
9562{0x3400000, 0xe6ff1a14, 0x77f31e2f, 0x77f31e2f, 0x3400010},
9563{0x3400000, 0xe6ff1a14, 0xaab4d7d8, 0xe6ff1a14, 0x3400010},
9564{0x3400000, 0xe6ff1a14, 0x966320b, 0xe6ff1a13, 0x3400010},
9565{0x3400000, 0xe6ff1a14, 0xb26bddee, 0xe6ff1a14, 0x3400010},
9566{0x3400000, 0xe6ff1a14, 0xb5c8e5d3, 0xe6ff1a14, 0x3400010},
9567{0x3400000, 0xe6ff1a14, 0x317285d3, 0xe6ff1a13, 0x3400010},
9568{0x3400000, 0xe6ff1a14, 0x3c9623b1, 0xe6ff1a13, 0x3400010},
9569{0x3400000, 0xe6ff1a14, 0x51fd2c7c, 0xe6ff1a13, 0x3400010},
9570{0x3400000, 0xe6ff1a14, 0x7b906a6c, 0x7b906a6c, 0x3400010},
9571{0x3400000, 0x77f31e2f, 0x0, 0x77f31e2f, 0x3400000},
9572{0x3400000, 0x77f31e2f, 0x1, 0x77f31e2f, 0x3400080},
9573{0x3400000, 0x77f31e2f, 0x76, 0x77f31e2f, 0x3400080},
9574{0x3400000, 0x77f31e2f, 0x2b94, 0x77f31e2f, 0x3400080},
9575{0x3400000, 0x77f31e2f, 0x636d24, 0x77f31e2f, 0x3400080},
9576{0x3400000, 0x77f31e2f, 0x7fffff, 0x77f31e2f, 0x3400080},
9577{0x3400000, 0x77f31e2f, 0x800000, 0x77f31e30, 0x3400010},
9578{0x3400000, 0x77f31e2f, 0x800002, 0x77f31e30, 0x3400010},
9579{0x3400000, 0x77f31e2f, 0x1398437, 0x77f31e30, 0x3400010},
9580{0x3400000, 0x77f31e2f, 0xba98d27, 0x77f31e30, 0x3400010},
9581{0x3400000, 0x77f31e2f, 0xba98d7a, 0x77f31e30, 0x3400010},
9582{0x3400000, 0x77f31e2f, 0x751f853a, 0x77f81a59, 0x3400010},
9583{0x3400000, 0x77f31e2f, 0x7f7ffff0, 0x7f800000, 0x3400014},
9584{0x3400000, 0x77f31e2f, 0x7f7fffff, 0x7f800000, 0x3400014},
9585{0x3400000, 0x77f31e2f, 0x7f800000, 0x7f800000, 0x3400000},
9586{0x3400000, 0x77f31e2f, 0x7f800001, 0x7fc00000, 0x3400001},
9587{0x3400000, 0x77f31e2f, 0x7f984a37, 0x7fc00000, 0x3400001},
9588{0x3400000, 0x77f31e2f, 0x7fbfffff, 0x7fc00000, 0x3400001},
9589{0x3400000, 0x77f31e2f, 0x7fc00000, 0x7fc00000, 0x3400000},
9590{0x3400000, 0x77f31e2f, 0x7fd9ba98, 0x7fc00000, 0x3400000},
9591{0x3400000, 0x77f31e2f, 0x7fffffff, 0x7fc00000, 0x3400000},
9592{0x3400000, 0x77f31e2f, 0x80000000, 0x77f31e2f, 0x3400000},
9593{0x3400000, 0x77f31e2f, 0x80000001, 0x77f31e2f, 0x3400080},
9594{0x3400000, 0x77f31e2f, 0x80000076, 0x77f31e2f, 0x3400080},
9595{0x3400000, 0x77f31e2f, 0x80002b94, 0x77f31e2f, 0x3400080},
9596{0x3400000, 0x77f31e2f, 0x80636d24, 0x77f31e2f, 0x3400080},
9597{0x3400000, 0x77f31e2f, 0x807fffff, 0x77f31e2f, 0x3400080},
9598{0x3400000, 0x77f31e2f, 0x80800000, 0x77f31e2f, 0x3400010},
9599{0x3400000, 0x77f31e2f, 0x80800002, 0x77f31e2f, 0x3400010},
9600{0x3400000, 0x77f31e2f, 0x81398437, 0x77f31e2f, 0x3400010},
9601{0x3400000, 0x77f31e2f, 0x8ba98d27, 0x77f31e2f, 0x3400010},
9602{0x3400000, 0x77f31e2f, 0x8ba98d7a, 0x77f31e2f, 0x3400010},
9603{0x3400000, 0x77f31e2f, 0xf51f853a, 0x77ee2206, 0x3400010},
9604{0x3400000, 0x77f31e2f, 0xff7ffff0, 0xff7ffe09, 0x3400010},
9605{0x3400000, 0x77f31e2f, 0xff7fffff, 0xff7ffe18, 0x3400010},
9606{0x3400000, 0x77f31e2f, 0xff800000, 0xff800000, 0x3400000},
9607{0x3400000, 0x77f31e2f, 0xff800001, 0x7fc00000, 0x3400001},
9608{0x3400000, 0x77f31e2f, 0xff984a37, 0x7fc00000, 0x3400001},
9609{0x3400000, 0x77f31e2f, 0xffbfffff, 0x7fc00000, 0x3400001},
9610{0x3400000, 0x77f31e2f, 0xffc00000, 0x7fc00000, 0x3400000},
9611{0x3400000, 0x77f31e2f, 0xffd9ba98, 0x7fc00000, 0x3400000},
9612{0x3400000, 0x77f31e2f, 0xffffffff, 0x7fc00000, 0x3400000},
9613{0x3400000, 0x77f31e2f, 0x4f3495cb, 0x77f31e30, 0x3400010},
9614{0x3400000, 0x77f31e2f, 0xe73a5134, 0x77f31e2f, 0x3400010},
9615{0x3400000, 0x77f31e2f, 0x7c994e9e, 0x7c998b66, 0x3400010},
9616{0x3400000, 0x77f31e2f, 0x6164bd6c, 0x77f31e30, 0x3400010},
9617{0x3400000, 0x77f31e2f, 0x9503366, 0x77f31e30, 0x3400010},
9618{0x3400000, 0x77f31e2f, 0xbf5a97c9, 0x77f31e2f, 0x3400010},
9619{0x3400000, 0x77f31e2f, 0xe6ff1a14, 0x77f31e2f, 0x3400010},
9620{0x3400000, 0x77f31e2f, 0x77f31e2f, 0x78731e2f, 0x3400000},
9621{0x3400000, 0x77f31e2f, 0xaab4d7d8, 0x77f31e2f, 0x3400010},
9622{0x3400000, 0x77f31e2f, 0x966320b, 0x77f31e30, 0x3400010},
9623{0x3400000, 0x77f31e2f, 0xb26bddee, 0x77f31e2f, 0x3400010},
9624{0x3400000, 0x77f31e2f, 0xb5c8e5d3, 0x77f31e2f, 0x3400010},
9625{0x3400000, 0x77f31e2f, 0x317285d3, 0x77f31e30, 0x3400010},
9626{0x3400000, 0x77f31e2f, 0x3c9623b1, 0x77f31e30, 0x3400010},
9627{0x3400000, 0x77f31e2f, 0x51fd2c7c, 0x77f31e30, 0x3400010},
9628{0x3400000, 0x77f31e2f, 0x7b906a6c, 0x7b915d8b, 0x3400010},
9629{0x3400000, 0xaab4d7d8, 0x0, 0xaab4d7d8, 0x3400000},
9630{0x3400000, 0xaab4d7d8, 0x1, 0xaab4d7d8, 0x3400080},
9631{0x3400000, 0xaab4d7d8, 0x76, 0xaab4d7d8, 0x3400080},
9632{0x3400000, 0xaab4d7d8, 0x2b94, 0xaab4d7d8, 0x3400080},
9633{0x3400000, 0xaab4d7d8, 0x636d24, 0xaab4d7d8, 0x3400080},
9634{0x3400000, 0xaab4d7d8, 0x7fffff, 0xaab4d7d8, 0x3400080},
9635{0x3400000, 0xaab4d7d8, 0x800000, 0xaab4d7d7, 0x3400010},
9636{0x3400000, 0xaab4d7d8, 0x800002, 0xaab4d7d7, 0x3400010},
9637{0x3400000, 0xaab4d7d8, 0x1398437, 0xaab4d7d7, 0x3400010},
9638{0x3400000, 0xaab4d7d8, 0xba98d27, 0xaab4d7d7, 0x3400010},
9639{0x3400000, 0xaab4d7d8, 0xba98d7a, 0xaab4d7d7, 0x3400010},
9640{0x3400000, 0xaab4d7d8, 0x751f853a, 0x751f853a, 0x3400010},
9641{0x3400000, 0xaab4d7d8, 0x7f7ffff0, 0x7f7ffff0, 0x3400010},
9642{0x3400000, 0xaab4d7d8, 0x7f7fffff, 0x7f7fffff, 0x3400010},
9643{0x3400000, 0xaab4d7d8, 0x7f800000, 0x7f800000, 0x3400000},
9644{0x3400000, 0xaab4d7d8, 0x7f800001, 0x7fc00000, 0x3400001},
9645{0x3400000, 0xaab4d7d8, 0x7f984a37, 0x7fc00000, 0x3400001},
9646{0x3400000, 0xaab4d7d8, 0x7fbfffff, 0x7fc00000, 0x3400001},
9647{0x3400000, 0xaab4d7d8, 0x7fc00000, 0x7fc00000, 0x3400000},
9648{0x3400000, 0xaab4d7d8, 0x7fd9ba98, 0x7fc00000, 0x3400000},
9649{0x3400000, 0xaab4d7d8, 0x7fffffff, 0x7fc00000, 0x3400000},
9650{0x3400000, 0xaab4d7d8, 0x80000000, 0xaab4d7d8, 0x3400000},
9651{0x3400000, 0xaab4d7d8, 0x80000001, 0xaab4d7d8, 0x3400080},
9652{0x3400000, 0xaab4d7d8, 0x80000076, 0xaab4d7d8, 0x3400080},
9653{0x3400000, 0xaab4d7d8, 0x80002b94, 0xaab4d7d8, 0x3400080},
9654{0x3400000, 0xaab4d7d8, 0x80636d24, 0xaab4d7d8, 0x3400080},
9655{0x3400000, 0xaab4d7d8, 0x807fffff, 0xaab4d7d8, 0x3400080},
9656{0x3400000, 0xaab4d7d8, 0x80800000, 0xaab4d7d8, 0x3400010},
9657{0x3400000, 0xaab4d7d8, 0x80800002, 0xaab4d7d8, 0x3400010},
9658{0x3400000, 0xaab4d7d8, 0x81398437, 0xaab4d7d8, 0x3400010},
9659{0x3400000, 0xaab4d7d8, 0x8ba98d27, 0xaab4d7d8, 0x3400010},
9660{0x3400000, 0xaab4d7d8, 0x8ba98d7a, 0xaab4d7d8, 0x3400010},
9661{0x3400000, 0xaab4d7d8, 0xf51f853a, 0xf51f853a, 0x3400010},
9662{0x3400000, 0xaab4d7d8, 0xff7ffff0, 0xff7ffff0, 0x3400010},
9663{0x3400000, 0xaab4d7d8, 0xff7fffff, 0xff7fffff, 0x3400010},
9664{0x3400000, 0xaab4d7d8, 0xff800000, 0xff800000, 0x3400000},
9665{0x3400000, 0xaab4d7d8, 0xff800001, 0x7fc00000, 0x3400001},
9666{0x3400000, 0xaab4d7d8, 0xff984a37, 0x7fc00000, 0x3400001},
9667{0x3400000, 0xaab4d7d8, 0xffbfffff, 0x7fc00000, 0x3400001},
9668{0x3400000, 0xaab4d7d8, 0xffc00000, 0x7fc00000, 0x3400000},
9669{0x3400000, 0xaab4d7d8, 0xffd9ba98, 0x7fc00000, 0x3400000},
9670{0x3400000, 0xaab4d7d8, 0xffffffff, 0x7fc00000, 0x3400000},
9671{0x3400000, 0xaab4d7d8, 0x4f3495cb, 0x4f3495cb, 0x3400010},
9672{0x3400000, 0xaab4d7d8, 0xe73a5134, 0xe73a5134, 0x3400010},
9673{0x3400000, 0xaab4d7d8, 0x7c994e9e, 0x7c994e9e, 0x3400010},
9674{0x3400000, 0xaab4d7d8, 0x6164bd6c, 0x6164bd6c, 0x3400010},
9675{0x3400000, 0xaab4d7d8, 0x9503366, 0xaab4d7d7, 0x3400010},
9676{0x3400000, 0xaab4d7d8, 0xbf5a97c9, 0xbf5a97c9, 0x3400010},
9677{0x3400000, 0xaab4d7d8, 0xe6ff1a14, 0xe6ff1a14, 0x3400010},
9678{0x3400000, 0xaab4d7d8, 0x77f31e2f, 0x77f31e2f, 0x3400010},
9679{0x3400000, 0xaab4d7d8, 0xaab4d7d8, 0xab34d7d8, 0x3400000},
9680{0x3400000, 0xaab4d7d8, 0x966320b, 0xaab4d7d7, 0x3400010},
9681{0x3400000, 0xaab4d7d8, 0xb26bddee, 0xb26bdf57, 0x3400010},
9682{0x3400000, 0xaab4d7d8, 0xb5c8e5d3, 0xb5c8e5d5, 0x3400010},
9683{0x3400000, 0xaab4d7d8, 0x317285d3, 0x3172802d, 0x3400010},
9684{0x3400000, 0xaab4d7d8, 0x3c9623b1, 0x3c9623b1, 0x3400010},
9685{0x3400000, 0xaab4d7d8, 0x51fd2c7c, 0x51fd2c7c, 0x3400010},
9686{0x3400000, 0xaab4d7d8, 0x7b906a6c, 0x7b906a6c, 0x3400010},
9687{0x3400000, 0x966320b, 0x0, 0x966320b, 0x3400000},
9688{0x3400000, 0x966320b, 0x1, 0x966320b, 0x3400080},
9689{0x3400000, 0x966320b, 0x76, 0x966320b, 0x3400080},
9690{0x3400000, 0x966320b, 0x2b94, 0x966320b, 0x3400080},
9691{0x3400000, 0x966320b, 0x636d24, 0x966320b, 0x3400080},
9692{0x3400000, 0x966320b, 0x7fffff, 0x966320b, 0x3400080},
9693{0x3400000, 0x966320b, 0x800000, 0x966324b, 0x3400000},
9694{0x3400000, 0x966320b, 0x800002, 0x966324c, 0x3400010},
9695{0x3400000, 0x966320b, 0x1398437, 0x96632c5, 0x3400010},
9696{0x3400000, 0x966320b, 0xba98d27, 0xbb0beb8, 0x3400010},
9697{0x3400000, 0x966320b, 0xba98d7a, 0xbb0bf0b, 0x3400010},
9698{0x3400000, 0x966320b, 0x751f853a, 0x751f853b, 0x3400010},
9699{0x3400000, 0x966320b, 0x7f7ffff0, 0x7f7ffff1, 0x3400010},
9700{0x3400000, 0x966320b, 0x7f7fffff, 0x7f800000, 0x3400014},
9701{0x3400000, 0x966320b, 0x7f800000, 0x7f800000, 0x3400000},
9702{0x3400000, 0x966320b, 0x7f800001, 0x7fc00000, 0x3400001},
9703{0x3400000, 0x966320b, 0x7f984a37, 0x7fc00000, 0x3400001},
9704{0x3400000, 0x966320b, 0x7fbfffff, 0x7fc00000, 0x3400001},
9705{0x3400000, 0x966320b, 0x7fc00000, 0x7fc00000, 0x3400000},
9706{0x3400000, 0x966320b, 0x7fd9ba98, 0x7fc00000, 0x3400000},
9707{0x3400000, 0x966320b, 0x7fffffff, 0x7fc00000, 0x3400000},
9708{0x3400000, 0x966320b, 0x80000000, 0x966320b, 0x3400000},
9709{0x3400000, 0x966320b, 0x80000001, 0x966320b, 0x3400080},
9710{0x3400000, 0x966320b, 0x80000076, 0x966320b, 0x3400080},
9711{0x3400000, 0x966320b, 0x80002b94, 0x966320b, 0x3400080},
9712{0x3400000, 0x966320b, 0x80636d24, 0x966320b, 0x3400080},
9713{0x3400000, 0x966320b, 0x807fffff, 0x966320b, 0x3400080},
9714{0x3400000, 0x966320b, 0x80800000, 0x96631cb, 0x3400000},
9715{0x3400000, 0x966320b, 0x80800002, 0x96631cb, 0x3400010},
9716{0x3400000, 0x966320b, 0x81398437, 0x9663152, 0x3400010},
9717{0x3400000, 0x966320b, 0x8ba98d27, 0x8ba25b96, 0x3400010},
9718{0x3400000, 0x966320b, 0x8ba98d7a, 0x8ba25be9, 0x3400010},
9719{0x3400000, 0x966320b, 0xf51f853a, 0xf51f8539, 0x3400010},
9720{0x3400000, 0x966320b, 0xff7ffff0, 0xff7fffef, 0x3400010},
9721{0x3400000, 0x966320b, 0xff7fffff, 0xff7ffffe, 0x3400010},
9722{0x3400000, 0x966320b, 0xff800000, 0xff800000, 0x3400000},
9723{0x3400000, 0x966320b, 0xff800001, 0x7fc00000, 0x3400001},
9724{0x3400000, 0x966320b, 0xff984a37, 0x7fc00000, 0x3400001},
9725{0x3400000, 0x966320b, 0xffbfffff, 0x7fc00000, 0x3400001},
9726{0x3400000, 0x966320b, 0xffc00000, 0x7fc00000, 0x3400000},
9727{0x3400000, 0x966320b, 0xffd9ba98, 0x7fc00000, 0x3400000},
9728{0x3400000, 0x966320b, 0xffffffff, 0x7fc00000, 0x3400000},
9729{0x3400000, 0x966320b, 0x4f3495cb, 0x4f3495cc, 0x3400010},
9730{0x3400000, 0x966320b, 0xe73a5134, 0xe73a5133, 0x3400010},
9731{0x3400000, 0x966320b, 0x7c994e9e, 0x7c994e9f, 0x3400010},
9732{0x3400000, 0x966320b, 0x6164bd6c, 0x6164bd6d, 0x3400010},
9733{0x3400000, 0x966320b, 0x9503366, 0x9db32b9, 0x3400010},
9734{0x3400000, 0x966320b, 0xbf5a97c9, 0xbf5a97c8, 0x3400010},
9735{0x3400000, 0x966320b, 0xe6ff1a14, 0xe6ff1a13, 0x3400010},
9736{0x3400000, 0x966320b, 0x77f31e2f, 0x77f31e30, 0x3400010},
9737{0x3400000, 0x966320b, 0xaab4d7d8, 0xaab4d7d7, 0x3400010},
9738{0x3400000, 0x966320b, 0x966320b, 0x9e6320b, 0x3400000},
9739{0x3400000, 0x966320b, 0xb26bddee, 0xb26bdded, 0x3400010},
9740{0x3400000, 0x966320b, 0xb5c8e5d3, 0xb5c8e5d2, 0x3400010},
9741{0x3400000, 0x966320b, 0x317285d3, 0x317285d4, 0x3400010},
9742{0x3400000, 0x966320b, 0x3c9623b1, 0x3c9623b2, 0x3400010},
9743{0x3400000, 0x966320b, 0x51fd2c7c, 0x51fd2c7d, 0x3400010},
9744{0x3400000, 0x966320b, 0x7b906a6c, 0x7b906a6d, 0x3400010},
9745{0x3400000, 0xb26bddee, 0x0, 0xb26bddee, 0x3400000},
9746{0x3400000, 0xb26bddee, 0x1, 0xb26bddee, 0x3400080},
9747{0x3400000, 0xb26bddee, 0x76, 0xb26bddee, 0x3400080},
9748{0x3400000, 0xb26bddee, 0x2b94, 0xb26bddee, 0x3400080},
9749{0x3400000, 0xb26bddee, 0x636d24, 0xb26bddee, 0x3400080},
9750{0x3400000, 0xb26bddee, 0x7fffff, 0xb26bddee, 0x3400080},
9751{0x3400000, 0xb26bddee, 0x800000, 0xb26bdded, 0x3400010},
9752{0x3400000, 0xb26bddee, 0x800002, 0xb26bdded, 0x3400010},
9753{0x3400000, 0xb26bddee, 0x1398437, 0xb26bdded, 0x3400010},
9754{0x3400000, 0xb26bddee, 0xba98d27, 0xb26bdded, 0x3400010},
9755{0x3400000, 0xb26bddee, 0xba98d7a, 0xb26bdded, 0x3400010},
9756{0x3400000, 0xb26bddee, 0x751f853a, 0x751f853a, 0x3400010},
9757{0x3400000, 0xb26bddee, 0x7f7ffff0, 0x7f7ffff0, 0x3400010},
9758{0x3400000, 0xb26bddee, 0x7f7fffff, 0x7f7fffff, 0x3400010},
9759{0x3400000, 0xb26bddee, 0x7f800000, 0x7f800000, 0x3400000},
9760{0x3400000, 0xb26bddee, 0x7f800001, 0x7fc00000, 0x3400001},
9761{0x3400000, 0xb26bddee, 0x7f984a37, 0x7fc00000, 0x3400001},
9762{0x3400000, 0xb26bddee, 0x7fbfffff, 0x7fc00000, 0x3400001},
9763{0x3400000, 0xb26bddee, 0x7fc00000, 0x7fc00000, 0x3400000},
9764{0x3400000, 0xb26bddee, 0x7fd9ba98, 0x7fc00000, 0x3400000},
9765{0x3400000, 0xb26bddee, 0x7fffffff, 0x7fc00000, 0x3400000},
9766{0x3400000, 0xb26bddee, 0x80000000, 0xb26bddee, 0x3400000},
9767{0x3400000, 0xb26bddee, 0x80000001, 0xb26bddee, 0x3400080},
9768{0x3400000, 0xb26bddee, 0x80000076, 0xb26bddee, 0x3400080},
9769{0x3400000, 0xb26bddee, 0x80002b94, 0xb26bddee, 0x3400080},
9770{0x3400000, 0xb26bddee, 0x80636d24, 0xb26bddee, 0x3400080},
9771{0x3400000, 0xb26bddee, 0x807fffff, 0xb26bddee, 0x3400080},
9772{0x3400000, 0xb26bddee, 0x80800000, 0xb26bddee, 0x3400010},
9773{0x3400000, 0xb26bddee, 0x80800002, 0xb26bddee, 0x3400010},
9774{0x3400000, 0xb26bddee, 0x81398437, 0xb26bddee, 0x3400010},
9775{0x3400000, 0xb26bddee, 0x8ba98d27, 0xb26bddee, 0x3400010},
9776{0x3400000, 0xb26bddee, 0x8ba98d7a, 0xb26bddee, 0x3400010},
9777{0x3400000, 0xb26bddee, 0xf51f853a, 0xf51f853a, 0x3400010},
9778{0x3400000, 0xb26bddee, 0xff7ffff0, 0xff7ffff0, 0x3400010},
9779{0x3400000, 0xb26bddee, 0xff7fffff, 0xff7fffff, 0x3400010},
9780{0x3400000, 0xb26bddee, 0xff800000, 0xff800000, 0x3400000},
9781{0x3400000, 0xb26bddee, 0xff800001, 0x7fc00000, 0x3400001},
9782{0x3400000, 0xb26bddee, 0xff984a37, 0x7fc00000, 0x3400001},
9783{0x3400000, 0xb26bddee, 0xffbfffff, 0x7fc00000, 0x3400001},
9784{0x3400000, 0xb26bddee, 0xffc00000, 0x7fc00000, 0x3400000},
9785{0x3400000, 0xb26bddee, 0xffd9ba98, 0x7fc00000, 0x3400000},
9786{0x3400000, 0xb26bddee, 0xffffffff, 0x7fc00000, 0x3400000},
9787{0x3400000, 0xb26bddee, 0x4f3495cb, 0x4f3495cb, 0x3400010},
9788{0x3400000, 0xb26bddee, 0xe73a5134, 0xe73a5134, 0x3400010},
9789{0x3400000, 0xb26bddee, 0x7c994e9e, 0x7c994e9e, 0x3400010},
9790{0x3400000, 0xb26bddee, 0x6164bd6c, 0x6164bd6c, 0x3400010},
9791{0x3400000, 0xb26bddee, 0x9503366, 0xb26bdded, 0x3400010},
9792{0x3400000, 0xb26bddee, 0xbf5a97c9, 0xbf5a97c9, 0x3400010},
9793{0x3400000, 0xb26bddee, 0xe6ff1a14, 0xe6ff1a14, 0x3400010},
9794{0x3400000, 0xb26bddee, 0x77f31e2f, 0x77f31e2f, 0x3400010},
9795{0x3400000, 0xb26bddee, 0xaab4d7d8, 0xb26bdf57, 0x3400010},
9796{0x3400000, 0xb26bddee, 0x966320b, 0xb26bdded, 0x3400010},
9797{0x3400000, 0xb26bddee, 0xb26bddee, 0xb2ebddee, 0x3400000},
9798{0x3400000, 0xb26bddee, 0xb5c8e5d3, 0xb5cabd8e, 0x3400010},
9799{0x3400000, 0xb26bddee, 0x317285d3, 0xb22f3c79, 0x3400010},
9800{0x3400000, 0xb26bddee, 0x3c9623b1, 0x3c9623aa, 0x3400010},
9801{0x3400000, 0xb26bddee, 0x51fd2c7c, 0x51fd2c7c, 0x3400010},
9802{0x3400000, 0xb26bddee, 0x7b906a6c, 0x7b906a6c, 0x3400010},
9803{0x3400000, 0xb5c8e5d3, 0x0, 0xb5c8e5d3, 0x3400000},
9804{0x3400000, 0xb5c8e5d3, 0x1, 0xb5c8e5d3, 0x3400080},
9805{0x3400000, 0xb5c8e5d3, 0x76, 0xb5c8e5d3, 0x3400080},
9806{0x3400000, 0xb5c8e5d3, 0x2b94, 0xb5c8e5d3, 0x3400080},
9807{0x3400000, 0xb5c8e5d3, 0x636d24, 0xb5c8e5d3, 0x3400080},
9808{0x3400000, 0xb5c8e5d3, 0x7fffff, 0xb5c8e5d3, 0x3400080},
9809{0x3400000, 0xb5c8e5d3, 0x800000, 0xb5c8e5d2, 0x3400010},
9810{0x3400000, 0xb5c8e5d3, 0x800002, 0xb5c8e5d2, 0x3400010},
9811{0x3400000, 0xb5c8e5d3, 0x1398437, 0xb5c8e5d2, 0x3400010},
9812{0x3400000, 0xb5c8e5d3, 0xba98d27, 0xb5c8e5d2, 0x3400010},
9813{0x3400000, 0xb5c8e5d3, 0xba98d7a, 0xb5c8e5d2, 0x3400010},
9814{0x3400000, 0xb5c8e5d3, 0x751f853a, 0x751f853a, 0x3400010},
9815{0x3400000, 0xb5c8e5d3, 0x7f7ffff0, 0x7f7ffff0, 0x3400010},
9816{0x3400000, 0xb5c8e5d3, 0x7f7fffff, 0x7f7fffff, 0x3400010},
9817{0x3400000, 0xb5c8e5d3, 0x7f800000, 0x7f800000, 0x3400000},
9818{0x3400000, 0xb5c8e5d3, 0x7f800001, 0x7fc00000, 0x3400001},
9819{0x3400000, 0xb5c8e5d3, 0x7f984a37, 0x7fc00000, 0x3400001},
9820{0x3400000, 0xb5c8e5d3, 0x7fbfffff, 0x7fc00000, 0x3400001},
9821{0x3400000, 0xb5c8e5d3, 0x7fc00000, 0x7fc00000, 0x3400000},
9822{0x3400000, 0xb5c8e5d3, 0x7fd9ba98, 0x7fc00000, 0x3400000},
9823{0x3400000, 0xb5c8e5d3, 0x7fffffff, 0x7fc00000, 0x3400000},
9824{0x3400000, 0xb5c8e5d3, 0x80000000, 0xb5c8e5d3, 0x3400000},
9825{0x3400000, 0xb5c8e5d3, 0x80000001, 0xb5c8e5d3, 0x3400080},
9826{0x3400000, 0xb5c8e5d3, 0x80000076, 0xb5c8e5d3, 0x3400080},
9827{0x3400000, 0xb5c8e5d3, 0x80002b94, 0xb5c8e5d3, 0x3400080},
9828{0x3400000, 0xb5c8e5d3, 0x80636d24, 0xb5c8e5d3, 0x3400080},
9829{0x3400000, 0xb5c8e5d3, 0x807fffff, 0xb5c8e5d3, 0x3400080},
9830{0x3400000, 0xb5c8e5d3, 0x80800000, 0xb5c8e5d3, 0x3400010},
9831{0x3400000, 0xb5c8e5d3, 0x80800002, 0xb5c8e5d3, 0x3400010},
9832{0x3400000, 0xb5c8e5d3, 0x81398437, 0xb5c8e5d3, 0x3400010},
9833{0x3400000, 0xb5c8e5d3, 0x8ba98d27, 0xb5c8e5d3, 0x3400010},
9834{0x3400000, 0xb5c8e5d3, 0x8ba98d7a, 0xb5c8e5d3, 0x3400010},
9835{0x3400000, 0xb5c8e5d3, 0xf51f853a, 0xf51f853a, 0x3400010},
9836{0x3400000, 0xb5c8e5d3, 0xff7ffff0, 0xff7ffff0, 0x3400010},
9837{0x3400000, 0xb5c8e5d3, 0xff7fffff, 0xff7fffff, 0x3400010},
9838{0x3400000, 0xb5c8e5d3, 0xff800000, 0xff800000, 0x3400000},
9839{0x3400000, 0xb5c8e5d3, 0xff800001, 0x7fc00000, 0x3400001},
9840{0x3400000, 0xb5c8e5d3, 0xff984a37, 0x7fc00000, 0x3400001},
9841{0x3400000, 0xb5c8e5d3, 0xffbfffff, 0x7fc00000, 0x3400001},
9842{0x3400000, 0xb5c8e5d3, 0xffc00000, 0x7fc00000, 0x3400000},
9843{0x3400000, 0xb5c8e5d3, 0xffd9ba98, 0x7fc00000, 0x3400000},
9844{0x3400000, 0xb5c8e5d3, 0xffffffff, 0x7fc00000, 0x3400000},
9845{0x3400000, 0xb5c8e5d3, 0x4f3495cb, 0x4f3495cb, 0x3400010},
9846{0x3400000, 0xb5c8e5d3, 0xe73a5134, 0xe73a5134, 0x3400010},
9847{0x3400000, 0xb5c8e5d3, 0x7c994e9e, 0x7c994e9e, 0x3400010},
9848{0x3400000, 0xb5c8e5d3, 0x6164bd6c, 0x6164bd6c, 0x3400010},
9849{0x3400000, 0xb5c8e5d3, 0x9503366, 0xb5c8e5d2, 0x3400010},
9850{0x3400000, 0xb5c8e5d3, 0xbf5a97c9, 0xbf5a97e2, 0x3400010},
9851{0x3400000, 0xb5c8e5d3, 0xe6ff1a14, 0xe6ff1a14, 0x3400010},
9852{0x3400000, 0xb5c8e5d3, 0x77f31e2f, 0x77f31e2f, 0x3400010},
9853{0x3400000, 0xb5c8e5d3, 0xaab4d7d8, 0xb5c8e5d5, 0x3400010},
9854{0x3400000, 0xb5c8e5d3, 0x966320b, 0xb5c8e5d2, 0x3400010},
9855{0x3400000, 0xb5c8e5d3, 0xb26bddee, 0xb5cabd8e, 0x3400010},
9856{0x3400000, 0xb5c8e5d3, 0xb5c8e5d3, 0xb648e5d3, 0x3400000},
9857{0x3400000, 0xb5c8e5d3, 0x317285d3, 0xb5c86c90, 0x3400010},
9858{0x3400000, 0xb5c8e5d3, 0x3c9623b1, 0x3c96208e, 0x3400010},
9859{0x3400000, 0xb5c8e5d3, 0x51fd2c7c, 0x51fd2c7c, 0x3400010},
9860{0x3400000, 0xb5c8e5d3, 0x7b906a6c, 0x7b906a6c, 0x3400010},
9861{0x3400000, 0x317285d3, 0x0, 0x317285d3, 0x3400000},
9862{0x3400000, 0x317285d3, 0x1, 0x317285d3, 0x3400080},
9863{0x3400000, 0x317285d3, 0x76, 0x317285d3, 0x3400080},
9864{0x3400000, 0x317285d3, 0x2b94, 0x317285d3, 0x3400080},
9865{0x3400000, 0x317285d3, 0x636d24, 0x317285d3, 0x3400080},
9866{0x3400000, 0x317285d3, 0x7fffff, 0x317285d3, 0x3400080},
9867{0x3400000, 0x317285d3, 0x800000, 0x317285d4, 0x3400010},
9868{0x3400000, 0x317285d3, 0x800002, 0x317285d4, 0x3400010},
9869{0x3400000, 0x317285d3, 0x1398437, 0x317285d4, 0x3400010},
9870{0x3400000, 0x317285d3, 0xba98d27, 0x317285d4, 0x3400010},
9871{0x3400000, 0x317285d3, 0xba98d7a, 0x317285d4, 0x3400010},
9872{0x3400000, 0x317285d3, 0x751f853a, 0x751f853b, 0x3400010},
9873{0x3400000, 0x317285d3, 0x7f7ffff0, 0x7f7ffff1, 0x3400010},
9874{0x3400000, 0x317285d3, 0x7f7fffff, 0x7f800000, 0x3400014},
9875{0x3400000, 0x317285d3, 0x7f800000, 0x7f800000, 0x3400000},
9876{0x3400000, 0x317285d3, 0x7f800001, 0x7fc00000, 0x3400001},
9877{0x3400000, 0x317285d3, 0x7f984a37, 0x7fc00000, 0x3400001},
9878{0x3400000, 0x317285d3, 0x7fbfffff, 0x7fc00000, 0x3400001},
9879{0x3400000, 0x317285d3, 0x7fc00000, 0x7fc00000, 0x3400000},
9880{0x3400000, 0x317285d3, 0x7fd9ba98, 0x7fc00000, 0x3400000},
9881{0x3400000, 0x317285d3, 0x7fffffff, 0x7fc00000, 0x3400000},
9882{0x3400000, 0x317285d3, 0x80000000, 0x317285d3, 0x3400000},
9883{0x3400000, 0x317285d3, 0x80000001, 0x317285d3, 0x3400080},
9884{0x3400000, 0x317285d3, 0x80000076, 0x317285d3, 0x3400080},
9885{0x3400000, 0x317285d3, 0x80002b94, 0x317285d3, 0x3400080},
9886{0x3400000, 0x317285d3, 0x80636d24, 0x317285d3, 0x3400080},
9887{0x3400000, 0x317285d3, 0x807fffff, 0x317285d3, 0x3400080},
9888{0x3400000, 0x317285d3, 0x80800000, 0x317285d3, 0x3400010},
9889{0x3400000, 0x317285d3, 0x80800002, 0x317285d3, 0x3400010},
9890{0x3400000, 0x317285d3, 0x81398437, 0x317285d3, 0x3400010},
9891{0x3400000, 0x317285d3, 0x8ba98d27, 0x317285d3, 0x3400010},
9892{0x3400000, 0x317285d3, 0x8ba98d7a, 0x317285d3, 0x3400010},
9893{0x3400000, 0x317285d3, 0xf51f853a, 0xf51f8539, 0x3400010},
9894{0x3400000, 0x317285d3, 0xff7ffff0, 0xff7fffef, 0x3400010},
9895{0x3400000, 0x317285d3, 0xff7fffff, 0xff7ffffe, 0x3400010},
9896{0x3400000, 0x317285d3, 0xff800000, 0xff800000, 0x3400000},
9897{0x3400000, 0x317285d3, 0xff800001, 0x7fc00000, 0x3400001},
9898{0x3400000, 0x317285d3, 0xff984a37, 0x7fc00000, 0x3400001},
9899{0x3400000, 0x317285d3, 0xffbfffff, 0x7fc00000, 0x3400001},
9900{0x3400000, 0x317285d3, 0xffc00000, 0x7fc00000, 0x3400000},
9901{0x3400000, 0x317285d3, 0xffd9ba98, 0x7fc00000, 0x3400000},
9902{0x3400000, 0x317285d3, 0xffffffff, 0x7fc00000, 0x3400000},
9903{0x3400000, 0x317285d3, 0x4f3495cb, 0x4f3495cc, 0x3400010},
9904{0x3400000, 0x317285d3, 0xe73a5134, 0xe73a5133, 0x3400010},
9905{0x3400000, 0x317285d3, 0x7c994e9e, 0x7c994e9f, 0x3400010},
9906{0x3400000, 0x317285d3, 0x6164bd6c, 0x6164bd6d, 0x3400010},
9907{0x3400000, 0x317285d3, 0x9503366, 0x317285d4, 0x3400010},
9908{0x3400000, 0x317285d3, 0xbf5a97c9, 0xbf5a97c8, 0x3400010},
9909{0x3400000, 0x317285d3, 0xe6ff1a14, 0xe6ff1a13, 0x3400010},
9910{0x3400000, 0x317285d3, 0x77f31e2f, 0x77f31e30, 0x3400010},
9911{0x3400000, 0x317285d3, 0xaab4d7d8, 0x3172802d, 0x3400010},
9912{0x3400000, 0x317285d3, 0x966320b, 0x317285d4, 0x3400010},
9913{0x3400000, 0x317285d3, 0xb26bddee, 0xb22f3c79, 0x3400010},
9914{0x3400000, 0x317285d3, 0xb5c8e5d3, 0xb5c86c90, 0x3400010},
9915{0x3400000, 0x317285d3, 0x317285d3, 0x31f285d3, 0x3400000},
9916{0x3400000, 0x317285d3, 0x3c9623b1, 0x3c9623b3, 0x3400010},
9917{0x3400000, 0x317285d3, 0x51fd2c7c, 0x51fd2c7d, 0x3400010},
9918{0x3400000, 0x317285d3, 0x7b906a6c, 0x7b906a6d, 0x3400010},
9919{0x3400000, 0x3c9623b1, 0x0, 0x3c9623b1, 0x3400000},
9920{0x3400000, 0x3c9623b1, 0x1, 0x3c9623b1, 0x3400080},
9921{0x3400000, 0x3c9623b1, 0x76, 0x3c9623b1, 0x3400080},
9922{0x3400000, 0x3c9623b1, 0x2b94, 0x3c9623b1, 0x3400080},
9923{0x3400000, 0x3c9623b1, 0x636d24, 0x3c9623b1, 0x3400080},
9924{0x3400000, 0x3c9623b1, 0x7fffff, 0x3c9623b1, 0x3400080},
9925{0x3400000, 0x3c9623b1, 0x800000, 0x3c9623b2, 0x3400010},
9926{0x3400000, 0x3c9623b1, 0x800002, 0x3c9623b2, 0x3400010},
9927{0x3400000, 0x3c9623b1, 0x1398437, 0x3c9623b2, 0x3400010},
9928{0x3400000, 0x3c9623b1, 0xba98d27, 0x3c9623b2, 0x3400010},
9929{0x3400000, 0x3c9623b1, 0xba98d7a, 0x3c9623b2, 0x3400010},
9930{0x3400000, 0x3c9623b1, 0x751f853a, 0x751f853b, 0x3400010},
9931{0x3400000, 0x3c9623b1, 0x7f7ffff0, 0x7f7ffff1, 0x3400010},
9932{0x3400000, 0x3c9623b1, 0x7f7fffff, 0x7f800000, 0x3400014},
9933{0x3400000, 0x3c9623b1, 0x7f800000, 0x7f800000, 0x3400000},
9934{0x3400000, 0x3c9623b1, 0x7f800001, 0x7fc00000, 0x3400001},
9935{0x3400000, 0x3c9623b1, 0x7f984a37, 0x7fc00000, 0x3400001},
9936{0x3400000, 0x3c9623b1, 0x7fbfffff, 0x7fc00000, 0x3400001},
9937{0x3400000, 0x3c9623b1, 0x7fc00000, 0x7fc00000, 0x3400000},
9938{0x3400000, 0x3c9623b1, 0x7fd9ba98, 0x7fc00000, 0x3400000},
9939{0x3400000, 0x3c9623b1, 0x7fffffff, 0x7fc00000, 0x3400000},
9940{0x3400000, 0x3c9623b1, 0x80000000, 0x3c9623b1, 0x3400000},
9941{0x3400000, 0x3c9623b1, 0x80000001, 0x3c9623b1, 0x3400080},
9942{0x3400000, 0x3c9623b1, 0x80000076, 0x3c9623b1, 0x3400080},
9943{0x3400000, 0x3c9623b1, 0x80002b94, 0x3c9623b1, 0x3400080},
9944{0x3400000, 0x3c9623b1, 0x80636d24, 0x3c9623b1, 0x3400080},
9945{0x3400000, 0x3c9623b1, 0x807fffff, 0x3c9623b1, 0x3400080},
9946{0x3400000, 0x3c9623b1, 0x80800000, 0x3c9623b1, 0x3400010},
9947{0x3400000, 0x3c9623b1, 0x80800002, 0x3c9623b1, 0x3400010},
9948{0x3400000, 0x3c9623b1, 0x81398437, 0x3c9623b1, 0x3400010},
9949{0x3400000, 0x3c9623b1, 0x8ba98d27, 0x3c9623b1, 0x3400010},
9950{0x3400000, 0x3c9623b1, 0x8ba98d7a, 0x3c9623b1, 0x3400010},
9951{0x3400000, 0x3c9623b1, 0xf51f853a, 0xf51f8539, 0x3400010},
9952{0x3400000, 0x3c9623b1, 0xff7ffff0, 0xff7fffef, 0x3400010},
9953{0x3400000, 0x3c9623b1, 0xff7fffff, 0xff7ffffe, 0x3400010},
9954{0x3400000, 0x3c9623b1, 0xff800000, 0xff800000, 0x3400000},
9955{0x3400000, 0x3c9623b1, 0xff800001, 0x7fc00000, 0x3400001},
9956{0x3400000, 0x3c9623b1, 0xff984a37, 0x7fc00000, 0x3400001},
9957{0x3400000, 0x3c9623b1, 0xffbfffff, 0x7fc00000, 0x3400001},
9958{0x3400000, 0x3c9623b1, 0xffc00000, 0x7fc00000, 0x3400000},
9959{0x3400000, 0x3c9623b1, 0xffd9ba98, 0x7fc00000, 0x3400000},
9960{0x3400000, 0x3c9623b1, 0xffffffff, 0x7fc00000, 0x3400000},
9961{0x3400000, 0x3c9623b1, 0x4f3495cb, 0x4f3495cc, 0x3400010},
9962{0x3400000, 0x3c9623b1, 0xe73a5134, 0xe73a5133, 0x3400010},
9963{0x3400000, 0x3c9623b1, 0x7c994e9e, 0x7c994e9f, 0x3400010},
9964{0x3400000, 0x3c9623b1, 0x6164bd6c, 0x6164bd6d, 0x3400010},
9965{0x3400000, 0x3c9623b1, 0x9503366, 0x3c9623b2, 0x3400010},
9966{0x3400000, 0x3c9623b1, 0xbf5a97c9, 0xbf55e6ab, 0x3400010},
9967{0x3400000, 0x3c9623b1, 0xe6ff1a14, 0xe6ff1a13, 0x3400010},
9968{0x3400000, 0x3c9623b1, 0x77f31e2f, 0x77f31e30, 0x3400010},
9969{0x3400000, 0x3c9623b1, 0xaab4d7d8, 0x3c9623b1, 0x3400010},
9970{0x3400000, 0x3c9623b1, 0x966320b, 0x3c9623b2, 0x3400010},
9971{0x3400000, 0x3c9623b1, 0xb26bddee, 0x3c9623aa, 0x3400010},
9972{0x3400000, 0x3c9623b1, 0xb5c8e5d3, 0x3c96208e, 0x3400010},
9973{0x3400000, 0x3c9623b1, 0x317285d3, 0x3c9623b3, 0x3400010},
9974{0x3400000, 0x3c9623b1, 0x3c9623b1, 0x3d1623b1, 0x3400000},
9975{0x3400000, 0x3c9623b1, 0x51fd2c7c, 0x51fd2c7d, 0x3400010},
9976{0x3400000, 0x3c9623b1, 0x7b906a6c, 0x7b906a6d, 0x3400010},
9977{0x3400000, 0x51fd2c7c, 0x0, 0x51fd2c7c, 0x3400000},
9978{0x3400000, 0x51fd2c7c, 0x1, 0x51fd2c7c, 0x3400080},
9979{0x3400000, 0x51fd2c7c, 0x76, 0x51fd2c7c, 0x3400080},
9980{0x3400000, 0x51fd2c7c, 0x2b94, 0x51fd2c7c, 0x3400080},
9981{0x3400000, 0x51fd2c7c, 0x636d24, 0x51fd2c7c, 0x3400080},
9982{0x3400000, 0x51fd2c7c, 0x7fffff, 0x51fd2c7c, 0x3400080},
9983{0x3400000, 0x51fd2c7c, 0x800000, 0x51fd2c7d, 0x3400010},
9984{0x3400000, 0x51fd2c7c, 0x800002, 0x51fd2c7d, 0x3400010},
9985{0x3400000, 0x51fd2c7c, 0x1398437, 0x51fd2c7d, 0x3400010},
9986{0x3400000, 0x51fd2c7c, 0xba98d27, 0x51fd2c7d, 0x3400010},
9987{0x3400000, 0x51fd2c7c, 0xba98d7a, 0x51fd2c7d, 0x3400010},
9988{0x3400000, 0x51fd2c7c, 0x751f853a, 0x751f853b, 0x3400010},
9989{0x3400000, 0x51fd2c7c, 0x7f7ffff0, 0x7f7ffff1, 0x3400010},
9990{0x3400000, 0x51fd2c7c, 0x7f7fffff, 0x7f800000, 0x3400014},
9991{0x3400000, 0x51fd2c7c, 0x7f800000, 0x7f800000, 0x3400000},
9992{0x3400000, 0x51fd2c7c, 0x7f800001, 0x7fc00000, 0x3400001},
9993{0x3400000, 0x51fd2c7c, 0x7f984a37, 0x7fc00000, 0x3400001},
9994{0x3400000, 0x51fd2c7c, 0x7fbfffff, 0x7fc00000, 0x3400001},
9995{0x3400000, 0x51fd2c7c, 0x7fc00000, 0x7fc00000, 0x3400000},
9996{0x3400000, 0x51fd2c7c, 0x7fd9ba98, 0x7fc00000, 0x3400000},
9997{0x3400000, 0x51fd2c7c, 0x7fffffff, 0x7fc00000, 0x3400000},
9998{0x3400000, 0x51fd2c7c, 0x80000000, 0x51fd2c7c, 0x3400000},
9999{0x3400000, 0x51fd2c7c, 0x80000001, 0x51fd2c7c, 0x3400080},
10000{0x3400000, 0x51fd2c7c, 0x80000076, 0x51fd2c7c, 0x3400080},
10001{0x3400000, 0x51fd2c7c, 0x80002b94, 0x51fd2c7c, 0x3400080},
10002{0x3400000, 0x51fd2c7c, 0x80636d24, 0x51fd2c7c, 0x3400080},
10003{0x3400000, 0x51fd2c7c, 0x807fffff, 0x51fd2c7c, 0x3400080},
10004{0x3400000, 0x51fd2c7c, 0x80800000, 0x51fd2c7c, 0x3400010},
10005{0x3400000, 0x51fd2c7c, 0x80800002, 0x51fd2c7c, 0x3400010},
10006{0x3400000, 0x51fd2c7c, 0x81398437, 0x51fd2c7c, 0x3400010},
10007{0x3400000, 0x51fd2c7c, 0x8ba98d27, 0x51fd2c7c, 0x3400010},
10008{0x3400000, 0x51fd2c7c, 0x8ba98d7a, 0x51fd2c7c, 0x3400010},
10009{0x3400000, 0x51fd2c7c, 0xf51f853a, 0xf51f8539, 0x3400010},
10010{0x3400000, 0x51fd2c7c, 0xff7ffff0, 0xff7fffef, 0x3400010},
10011{0x3400000, 0x51fd2c7c, 0xff7fffff, 0xff7ffffe, 0x3400010},
10012{0x3400000, 0x51fd2c7c, 0xff800000, 0xff800000, 0x3400000},
10013{0x3400000, 0x51fd2c7c, 0xff800001, 0x7fc00000, 0x3400001},
10014{0x3400000, 0x51fd2c7c, 0xff984a37, 0x7fc00000, 0x3400001},
10015{0x3400000, 0x51fd2c7c, 0xffbfffff, 0x7fc00000, 0x3400001},
10016{0x3400000, 0x51fd2c7c, 0xffc00000, 0x7fc00000, 0x3400000},
10017{0x3400000, 0x51fd2c7c, 0xffd9ba98, 0x7fc00000, 0x3400000},
10018{0x3400000, 0x51fd2c7c, 0xffffffff, 0x7fc00000, 0x3400000},
10019{0x3400000, 0x51fd2c7c, 0x4f3495cb, 0x52016896, 0x3400010},
10020{0x3400000, 0x51fd2c7c, 0xe73a5134, 0xe73a5133, 0x3400010},
10021{0x3400000, 0x51fd2c7c, 0x7c994e9e, 0x7c994e9f, 0x3400010},
10022{0x3400000, 0x51fd2c7c, 0x6164bd6c, 0x6164bd6d, 0x3400010},
10023{0x3400000, 0x51fd2c7c, 0x9503366, 0x51fd2c7d, 0x3400010},
10024{0x3400000, 0x51fd2c7c, 0xbf5a97c9, 0x51fd2c7c, 0x3400010},
10025{0x3400000, 0x51fd2c7c, 0xe6ff1a14, 0xe6ff1a13, 0x3400010},
10026{0x3400000, 0x51fd2c7c, 0x77f31e2f, 0x77f31e30, 0x3400010},
10027{0x3400000, 0x51fd2c7c, 0xaab4d7d8, 0x51fd2c7c, 0x3400010},
10028{0x3400000, 0x51fd2c7c, 0x966320b, 0x51fd2c7d, 0x3400010},
10029{0x3400000, 0x51fd2c7c, 0xb26bddee, 0x51fd2c7c, 0x3400010},
10030{0x3400000, 0x51fd2c7c, 0xb5c8e5d3, 0x51fd2c7c, 0x3400010},
10031{0x3400000, 0x51fd2c7c, 0x317285d3, 0x51fd2c7d, 0x3400010},
10032{0x3400000, 0x51fd2c7c, 0x3c9623b1, 0x51fd2c7d, 0x3400010},
10033{0x3400000, 0x51fd2c7c, 0x51fd2c7c, 0x527d2c7c, 0x3400000},
10034{0x3400000, 0x51fd2c7c, 0x7b906a6c, 0x7b906a6d, 0x3400010},
10035{0x3400000, 0x7b906a6c, 0x0, 0x7b906a6c, 0x3400000},
10036{0x3400000, 0x7b906a6c, 0x1, 0x7b906a6c, 0x3400080},
10037{0x3400000, 0x7b906a6c, 0x76, 0x7b906a6c, 0x3400080},
10038{0x3400000, 0x7b906a6c, 0x2b94, 0x7b906a6c, 0x3400080},
10039{0x3400000, 0x7b906a6c, 0x636d24, 0x7b906a6c, 0x3400080},
10040{0x3400000, 0x7b906a6c, 0x7fffff, 0x7b906a6c, 0x3400080},
10041{0x3400000, 0x7b906a6c, 0x800000, 0x7b906a6d, 0x3400010},
10042{0x3400000, 0x7b906a6c, 0x800002, 0x7b906a6d, 0x3400010},
10043{0x3400000, 0x7b906a6c, 0x1398437, 0x7b906a6d, 0x3400010},
10044{0x3400000, 0x7b906a6c, 0xba98d27, 0x7b906a6d, 0x3400010},
10045{0x3400000, 0x7b906a6c, 0xba98d7a, 0x7b906a6d, 0x3400010},
10046{0x3400000, 0x7b906a6c, 0x751f853a, 0x7b906f69, 0x3400010},
10047{0x3400000, 0x7b906a6c, 0x7f7ffff0, 0x7f800000, 0x3400014},
10048{0x3400000, 0x7b906a6c, 0x7f7fffff, 0x7f800000, 0x3400014},
10049{0x3400000, 0x7b906a6c, 0x7f800000, 0x7f800000, 0x3400000},
10050{0x3400000, 0x7b906a6c, 0x7f800001, 0x7fc00000, 0x3400001},
10051{0x3400000, 0x7b906a6c, 0x7f984a37, 0x7fc00000, 0x3400001},
10052{0x3400000, 0x7b906a6c, 0x7fbfffff, 0x7fc00000, 0x3400001},
10053{0x3400000, 0x7b906a6c, 0x7fc00000, 0x7fc00000, 0x3400000},
10054{0x3400000, 0x7b906a6c, 0x7fd9ba98, 0x7fc00000, 0x3400000},
10055{0x3400000, 0x7b906a6c, 0x7fffffff, 0x7fc00000, 0x3400000},
10056{0x3400000, 0x7b906a6c, 0x80000000, 0x7b906a6c, 0x3400000},
10057{0x3400000, 0x7b906a6c, 0x80000001, 0x7b906a6c, 0x3400080},
10058{0x3400000, 0x7b906a6c, 0x80000076, 0x7b906a6c, 0x3400080},
10059{0x3400000, 0x7b906a6c, 0x80002b94, 0x7b906a6c, 0x3400080},
10060{0x3400000, 0x7b906a6c, 0x80636d24, 0x7b906a6c, 0x3400080},
10061{0x3400000, 0x7b906a6c, 0x807fffff, 0x7b906a6c, 0x3400080},
10062{0x3400000, 0x7b906a6c, 0x80800000, 0x7b906a6c, 0x3400010},
10063{0x3400000, 0x7b906a6c, 0x80800002, 0x7b906a6c, 0x3400010},
10064{0x3400000, 0x7b906a6c, 0x81398437, 0x7b906a6c, 0x3400010},
10065{0x3400000, 0x7b906a6c, 0x8ba98d27, 0x7b906a6c, 0x3400010},
10066{0x3400000, 0x7b906a6c, 0x8ba98d7a, 0x7b906a6c, 0x3400010},
10067{0x3400000, 0x7b906a6c, 0xf51f853a, 0x7b906570, 0x3400010},
10068{0x3400000, 0x7b906a6c, 0xff7ffff0, 0xff7edf1b, 0x3400010},
10069{0x3400000, 0x7b906a6c, 0xff7fffff, 0xff7edf2a, 0x3400010},
10070{0x3400000, 0x7b906a6c, 0xff800000, 0xff800000, 0x3400000},
10071{0x3400000, 0x7b906a6c, 0xff800001, 0x7fc00000, 0x3400001},
10072{0x3400000, 0x7b906a6c, 0xff984a37, 0x7fc00000, 0x3400001},
10073{0x3400000, 0x7b906a6c, 0xffbfffff, 0x7fc00000, 0x3400001},
10074{0x3400000, 0x7b906a6c, 0xffc00000, 0x7fc00000, 0x3400000},
10075{0x3400000, 0x7b906a6c, 0xffd9ba98, 0x7fc00000, 0x3400000},
10076{0x3400000, 0x7b906a6c, 0xffffffff, 0x7fc00000, 0x3400000},
10077{0x3400000, 0x7b906a6c, 0x4f3495cb, 0x7b906a6d, 0x3400010},
10078{0x3400000, 0x7b906a6c, 0xe73a5134, 0x7b906a6c, 0x3400010},
10079{0x3400000, 0x7b906a6c, 0x7c994e9e, 0x7cbd6939, 0x3400000},
10080{0x3400000, 0x7b906a6c, 0x6164bd6c, 0x7b906a6d, 0x3400010},
10081{0x3400000, 0x7b906a6c, 0x9503366, 0x7b906a6d, 0x3400010},
10082{0x3400000, 0x7b906a6c, 0xbf5a97c9, 0x7b906a6c, 0x3400010},
10083{0x3400000, 0x7b906a6c, 0xe6ff1a14, 0x7b906a6c, 0x3400010},
10084{0x3400000, 0x7b906a6c, 0x77f31e2f, 0x7b915d8b, 0x3400010},
10085{0x3400000, 0x7b906a6c, 0xaab4d7d8, 0x7b906a6c, 0x3400010},
10086{0x3400000, 0x7b906a6c, 0x966320b, 0x7b906a6d, 0x3400010},
10087{0x3400000, 0x7b906a6c, 0xb26bddee, 0x7b906a6c, 0x3400010},
10088{0x3400000, 0x7b906a6c, 0xb5c8e5d3, 0x7b906a6c, 0x3400010},
10089{0x3400000, 0x7b906a6c, 0x317285d3, 0x7b906a6d, 0x3400010},
10090{0x3400000, 0x7b906a6c, 0x3c9623b1, 0x7b906a6d, 0x3400010},
10091{0x3400000, 0x7b906a6c, 0x51fd2c7c, 0x7b906a6d, 0x3400010},
10092{0x3400000, 0x7b906a6c, 0x7b906a6c, 0x7c106a6c, 0x3400000},
10093{0x3000000, 0x0, 0x0, 0x0, 0x3000000},
10094{0x3000000, 0x0, 0x1, 0x0, 0x3000080},
10095{0x3000000, 0x0, 0x76, 0x0, 0x3000080},
10096{0x3000000, 0x0, 0x2b94, 0x0, 0x3000080},
10097{0x3000000, 0x0, 0x636d24, 0x0, 0x3000080},
10098{0x3000000, 0x0, 0x7fffff, 0x0, 0x3000080},
10099{0x3000000, 0x0, 0x800000, 0x800000, 0x3000000},
10100{0x3000000, 0x0, 0x800002, 0x800002, 0x3000000},
10101{0x3000000, 0x0, 0x1398437, 0x1398437, 0x3000000},
10102{0x3000000, 0x0, 0xba98d27, 0xba98d27, 0x3000000},
10103{0x3000000, 0x0, 0xba98d7a, 0xba98d7a, 0x3000000},
10104{0x3000000, 0x0, 0x751f853a, 0x751f853a, 0x3000000},
10105{0x3000000, 0x0, 0x7f7ffff0, 0x7f7ffff0, 0x3000000},
10106{0x3000000, 0x0, 0x7f7fffff, 0x7f7fffff, 0x3000000},
10107{0x3000000, 0x0, 0x7f800000, 0x7f800000, 0x3000000},
10108{0x3000000, 0x0, 0x7f800001, 0x7fc00000, 0x3000001},
10109{0x3000000, 0x0, 0x7f984a37, 0x7fc00000, 0x3000001},
10110{0x3000000, 0x0, 0x7fbfffff, 0x7fc00000, 0x3000001},
10111{0x3000000, 0x0, 0x7fc00000, 0x7fc00000, 0x3000000},
10112{0x3000000, 0x0, 0x7fd9ba98, 0x7fc00000, 0x3000000},
10113{0x3000000, 0x0, 0x7fffffff, 0x7fc00000, 0x3000000},
10114{0x3000000, 0x0, 0x80000000, 0x0, 0x3000000},
10115{0x3000000, 0x0, 0x80000001, 0x0, 0x3000080},
10116{0x3000000, 0x0, 0x80000076, 0x0, 0x3000080},
10117{0x3000000, 0x0, 0x80002b94, 0x0, 0x3000080},
10118{0x3000000, 0x0, 0x80636d24, 0x0, 0x3000080},
10119{0x3000000, 0x0, 0x807fffff, 0x0, 0x3000080},
10120{0x3000000, 0x0, 0x80800000, 0x80800000, 0x3000000},
10121{0x3000000, 0x0, 0x80800002, 0x80800002, 0x3000000},
10122{0x3000000, 0x0, 0x81398437, 0x81398437, 0x3000000},
10123{0x3000000, 0x0, 0x8ba98d27, 0x8ba98d27, 0x3000000},
10124{0x3000000, 0x0, 0x8ba98d7a, 0x8ba98d7a, 0x3000000},
10125{0x3000000, 0x0, 0xf51f853a, 0xf51f853a, 0x3000000},
10126{0x3000000, 0x0, 0xff7ffff0, 0xff7ffff0, 0x3000000},
10127{0x3000000, 0x0, 0xff7fffff, 0xff7fffff, 0x3000000},
10128{0x3000000, 0x0, 0xff800000, 0xff800000, 0x3000000},
10129{0x3000000, 0x0, 0xff800001, 0x7fc00000, 0x3000001},
10130{0x3000000, 0x0, 0xff984a37, 0x7fc00000, 0x3000001},
10131{0x3000000, 0x0, 0xffbfffff, 0x7fc00000, 0x3000001},
10132{0x3000000, 0x0, 0xffc00000, 0x7fc00000, 0x3000000},
10133{0x3000000, 0x0, 0xffd9ba98, 0x7fc00000, 0x3000000},
10134{0x3000000, 0x0, 0xffffffff, 0x7fc00000, 0x3000000},
10135{0x3000000, 0x0, 0x4f3495cb, 0x4f3495cb, 0x3000000},
10136{0x3000000, 0x0, 0xe73a5134, 0xe73a5134, 0x3000000},
10137{0x3000000, 0x0, 0x7c994e9e, 0x7c994e9e, 0x3000000},
10138{0x3000000, 0x0, 0x6164bd6c, 0x6164bd6c, 0x3000000},
10139{0x3000000, 0x0, 0x9503366, 0x9503366, 0x3000000},
10140{0x3000000, 0x0, 0xbf5a97c9, 0xbf5a97c9, 0x3000000},
10141{0x3000000, 0x0, 0xe6ff1a14, 0xe6ff1a14, 0x3000000},
10142{0x3000000, 0x0, 0x77f31e2f, 0x77f31e2f, 0x3000000},
10143{0x3000000, 0x0, 0xaab4d7d8, 0xaab4d7d8, 0x3000000},
10144{0x3000000, 0x0, 0x966320b, 0x966320b, 0x3000000},
10145{0x3000000, 0x0, 0xb26bddee, 0xb26bddee, 0x3000000},
10146{0x3000000, 0x0, 0xb5c8e5d3, 0xb5c8e5d3, 0x3000000},
10147{0x3000000, 0x0, 0x317285d3, 0x317285d3, 0x3000000},
10148{0x3000000, 0x0, 0x3c9623b1, 0x3c9623b1, 0x3000000},
10149{0x3000000, 0x0, 0x51fd2c7c, 0x51fd2c7c, 0x3000000},
10150{0x3000000, 0x0, 0x7b906a6c, 0x7b906a6c, 0x3000000},
10151{0x3000000, 0x1, 0x0, 0x0, 0x3000080},
10152{0x3000000, 0x1, 0x1, 0x0, 0x3000080},
10153{0x3000000, 0x1, 0x76, 0x0, 0x3000080},
10154{0x3000000, 0x1, 0x2b94, 0x0, 0x3000080},
10155{0x3000000, 0x1, 0x636d24, 0x0, 0x3000080},
10156{0x3000000, 0x1, 0x7fffff, 0x0, 0x3000080},
10157{0x3000000, 0x1, 0x800000, 0x800000, 0x3000080},
10158{0x3000000, 0x1, 0x800002, 0x800002, 0x3000080},
10159{0x3000000, 0x1, 0x1398437, 0x1398437, 0x3000080},
10160{0x3000000, 0x1, 0xba98d27, 0xba98d27, 0x3000080},
10161{0x3000000, 0x1, 0xba98d7a, 0xba98d7a, 0x3000080},
10162{0x3000000, 0x1, 0x751f853a, 0x751f853a, 0x3000080},
10163{0x3000000, 0x1, 0x7f7ffff0, 0x7f7ffff0, 0x3000080},
10164{0x3000000, 0x1, 0x7f7fffff, 0x7f7fffff, 0x3000080},
10165{0x3000000, 0x1, 0x7f800000, 0x7f800000, 0x3000080},
10166{0x3000000, 0x1, 0x7f800001, 0x7fc00000, 0x3000081},
10167{0x3000000, 0x1, 0x7f984a37, 0x7fc00000, 0x3000081},
10168{0x3000000, 0x1, 0x7fbfffff, 0x7fc00000, 0x3000081},
10169{0x3000000, 0x1, 0x7fc00000, 0x7fc00000, 0x3000080},
10170{0x3000000, 0x1, 0x7fd9ba98, 0x7fc00000, 0x3000080},
10171{0x3000000, 0x1, 0x7fffffff, 0x7fc00000, 0x3000080},
10172{0x3000000, 0x1, 0x80000000, 0x0, 0x3000080},
10173{0x3000000, 0x1, 0x80000001, 0x0, 0x3000080},
10174{0x3000000, 0x1, 0x80000076, 0x0, 0x3000080},
10175{0x3000000, 0x1, 0x80002b94, 0x0, 0x3000080},
10176{0x3000000, 0x1, 0x80636d24, 0x0, 0x3000080},
10177{0x3000000, 0x1, 0x807fffff, 0x0, 0x3000080},
10178{0x3000000, 0x1, 0x80800000, 0x80800000, 0x3000080},
10179{0x3000000, 0x1, 0x80800002, 0x80800002, 0x3000080},
10180{0x3000000, 0x1, 0x81398437, 0x81398437, 0x3000080},
10181{0x3000000, 0x1, 0x8ba98d27, 0x8ba98d27, 0x3000080},
10182{0x3000000, 0x1, 0x8ba98d7a, 0x8ba98d7a, 0x3000080},
10183{0x3000000, 0x1, 0xf51f853a, 0xf51f853a, 0x3000080},
10184{0x3000000, 0x1, 0xff7ffff0, 0xff7ffff0, 0x3000080},
10185{0x3000000, 0x1, 0xff7fffff, 0xff7fffff, 0x3000080},
10186{0x3000000, 0x1, 0xff800000, 0xff800000, 0x3000080},
10187{0x3000000, 0x1, 0xff800001, 0x7fc00000, 0x3000081},
10188{0x3000000, 0x1, 0xff984a37, 0x7fc00000, 0x3000081},
10189{0x3000000, 0x1, 0xffbfffff, 0x7fc00000, 0x3000081},
10190{0x3000000, 0x1, 0xffc00000, 0x7fc00000, 0x3000080},
10191{0x3000000, 0x1, 0xffd9ba98, 0x7fc00000, 0x3000080},
10192{0x3000000, 0x1, 0xffffffff, 0x7fc00000, 0x3000080},
10193{0x3000000, 0x1, 0x4f3495cb, 0x4f3495cb, 0x3000080},
10194{0x3000000, 0x1, 0xe73a5134, 0xe73a5134, 0x3000080},
10195{0x3000000, 0x1, 0x7c994e9e, 0x7c994e9e, 0x3000080},
10196{0x3000000, 0x1, 0x6164bd6c, 0x6164bd6c, 0x3000080},
10197{0x3000000, 0x1, 0x9503366, 0x9503366, 0x3000080},
10198{0x3000000, 0x1, 0xbf5a97c9, 0xbf5a97c9, 0x3000080},
10199{0x3000000, 0x1, 0xe6ff1a14, 0xe6ff1a14, 0x3000080},
10200{0x3000000, 0x1, 0x77f31e2f, 0x77f31e2f, 0x3000080},
10201{0x3000000, 0x1, 0xaab4d7d8, 0xaab4d7d8, 0x3000080},
10202{0x3000000, 0x1, 0x966320b, 0x966320b, 0x3000080},
10203{0x3000000, 0x1, 0xb26bddee, 0xb26bddee, 0x3000080},
10204{0x3000000, 0x1, 0xb5c8e5d3, 0xb5c8e5d3, 0x3000080},
10205{0x3000000, 0x1, 0x317285d3, 0x317285d3, 0x3000080},
10206{0x3000000, 0x1, 0x3c9623b1, 0x3c9623b1, 0x3000080},
10207{0x3000000, 0x1, 0x51fd2c7c, 0x51fd2c7c, 0x3000080},
10208{0x3000000, 0x1, 0x7b906a6c, 0x7b906a6c, 0x3000080},
10209{0x3000000, 0x76, 0x0, 0x0, 0x3000080},
10210{0x3000000, 0x76, 0x1, 0x0, 0x3000080},
10211{0x3000000, 0x76, 0x76, 0x0, 0x3000080},
10212{0x3000000, 0x76, 0x2b94, 0x0, 0x3000080},
10213{0x3000000, 0x76, 0x636d24, 0x0, 0x3000080},
10214{0x3000000, 0x76, 0x7fffff, 0x0, 0x3000080},
10215{0x3000000, 0x76, 0x800000, 0x800000, 0x3000080},
10216{0x3000000, 0x76, 0x800002, 0x800002, 0x3000080},
10217{0x3000000, 0x76, 0x1398437, 0x1398437, 0x3000080},
10218{0x3000000, 0x76, 0xba98d27, 0xba98d27, 0x3000080},
10219{0x3000000, 0x76, 0xba98d7a, 0xba98d7a, 0x3000080},
10220{0x3000000, 0x76, 0x751f853a, 0x751f853a, 0x3000080},
10221{0x3000000, 0x76, 0x7f7ffff0, 0x7f7ffff0, 0x3000080},
10222{0x3000000, 0x76, 0x7f7fffff, 0x7f7fffff, 0x3000080},
10223{0x3000000, 0x76, 0x7f800000, 0x7f800000, 0x3000080},
10224{0x3000000, 0x76, 0x7f800001, 0x7fc00000, 0x3000081},
10225{0x3000000, 0x76, 0x7f984a37, 0x7fc00000, 0x3000081},
10226{0x3000000, 0x76, 0x7fbfffff, 0x7fc00000, 0x3000081},
10227{0x3000000, 0x76, 0x7fc00000, 0x7fc00000, 0x3000080},
10228{0x3000000, 0x76, 0x7fd9ba98, 0x7fc00000, 0x3000080},
10229{0x3000000, 0x76, 0x7fffffff, 0x7fc00000, 0x3000080},
10230{0x3000000, 0x76, 0x80000000, 0x0, 0x3000080},
10231{0x3000000, 0x76, 0x80000001, 0x0, 0x3000080},
10232{0x3000000, 0x76, 0x80000076, 0x0, 0x3000080},
10233{0x3000000, 0x76, 0x80002b94, 0x0, 0x3000080},
10234{0x3000000, 0x76, 0x80636d24, 0x0, 0x3000080},
10235{0x3000000, 0x76, 0x807fffff, 0x0, 0x3000080},
10236{0x3000000, 0x76, 0x80800000, 0x80800000, 0x3000080},
10237{0x3000000, 0x76, 0x80800002, 0x80800002, 0x3000080},
10238{0x3000000, 0x76, 0x81398437, 0x81398437, 0x3000080},
10239{0x3000000, 0x76, 0x8ba98d27, 0x8ba98d27, 0x3000080},
10240{0x3000000, 0x76, 0x8ba98d7a, 0x8ba98d7a, 0x3000080},
10241{0x3000000, 0x76, 0xf51f853a, 0xf51f853a, 0x3000080},
10242{0x3000000, 0x76, 0xff7ffff0, 0xff7ffff0, 0x3000080},
10243{0x3000000, 0x76, 0xff7fffff, 0xff7fffff, 0x3000080},
10244{0x3000000, 0x76, 0xff800000, 0xff800000, 0x3000080},
10245{0x3000000, 0x76, 0xff800001, 0x7fc00000, 0x3000081},
10246{0x3000000, 0x76, 0xff984a37, 0x7fc00000, 0x3000081},
10247{0x3000000, 0x76, 0xffbfffff, 0x7fc00000, 0x3000081},
10248{0x3000000, 0x76, 0xffc00000, 0x7fc00000, 0x3000080},
10249{0x3000000, 0x76, 0xffd9ba98, 0x7fc00000, 0x3000080},
10250{0x3000000, 0x76, 0xffffffff, 0x7fc00000, 0x3000080},
10251{0x3000000, 0x76, 0x4f3495cb, 0x4f3495cb, 0x3000080},
10252{0x3000000, 0x76, 0xe73a5134, 0xe73a5134, 0x3000080},
10253{0x3000000, 0x76, 0x7c994e9e, 0x7c994e9e, 0x3000080},
10254{0x3000000, 0x76, 0x6164bd6c, 0x6164bd6c, 0x3000080},
10255{0x3000000, 0x76, 0x9503366, 0x9503366, 0x3000080},
10256{0x3000000, 0x76, 0xbf5a97c9, 0xbf5a97c9, 0x3000080},
10257{0x3000000, 0x76, 0xe6ff1a14, 0xe6ff1a14, 0x3000080},
10258{0x3000000, 0x76, 0x77f31e2f, 0x77f31e2f, 0x3000080},
10259{0x3000000, 0x76, 0xaab4d7d8, 0xaab4d7d8, 0x3000080},
10260{0x3000000, 0x76, 0x966320b, 0x966320b, 0x3000080},
10261{0x3000000, 0x76, 0xb26bddee, 0xb26bddee, 0x3000080},
10262{0x3000000, 0x76, 0xb5c8e5d3, 0xb5c8e5d3, 0x3000080},
10263{0x3000000, 0x76, 0x317285d3, 0x317285d3, 0x3000080},
10264{0x3000000, 0x76, 0x3c9623b1, 0x3c9623b1, 0x3000080},
10265{0x3000000, 0x76, 0x51fd2c7c, 0x51fd2c7c, 0x3000080},
10266{0x3000000, 0x76, 0x7b906a6c, 0x7b906a6c, 0x3000080},
10267{0x3000000, 0x2b94, 0x0, 0x0, 0x3000080},
10268{0x3000000, 0x2b94, 0x1, 0x0, 0x3000080},
10269{0x3000000, 0x2b94, 0x76, 0x0, 0x3000080},
10270{0x3000000, 0x2b94, 0x2b94, 0x0, 0x3000080},
10271{0x3000000, 0x2b94, 0x636d24, 0x0, 0x3000080},
10272{0x3000000, 0x2b94, 0x7fffff, 0x0, 0x3000080},
10273{0x3000000, 0x2b94, 0x800000, 0x800000, 0x3000080},
10274{0x3000000, 0x2b94, 0x800002, 0x800002, 0x3000080},
10275{0x3000000, 0x2b94, 0x1398437, 0x1398437, 0x3000080},
10276{0x3000000, 0x2b94, 0xba98d27, 0xba98d27, 0x3000080},
10277{0x3000000, 0x2b94, 0xba98d7a, 0xba98d7a, 0x3000080},
10278{0x3000000, 0x2b94, 0x751f853a, 0x751f853a, 0x3000080},
10279{0x3000000, 0x2b94, 0x7f7ffff0, 0x7f7ffff0, 0x3000080},
10280{0x3000000, 0x2b94, 0x7f7fffff, 0x7f7fffff, 0x3000080},
10281{0x3000000, 0x2b94, 0x7f800000, 0x7f800000, 0x3000080},
10282{0x3000000, 0x2b94, 0x7f800001, 0x7fc00000, 0x3000081},
10283{0x3000000, 0x2b94, 0x7f984a37, 0x7fc00000, 0x3000081},
10284{0x3000000, 0x2b94, 0x7fbfffff, 0x7fc00000, 0x3000081},
10285{0x3000000, 0x2b94, 0x7fc00000, 0x7fc00000, 0x3000080},
10286{0x3000000, 0x2b94, 0x7fd9ba98, 0x7fc00000, 0x3000080},
10287{0x3000000, 0x2b94, 0x7fffffff, 0x7fc00000, 0x3000080},
10288{0x3000000, 0x2b94, 0x80000000, 0x0, 0x3000080},
10289{0x3000000, 0x2b94, 0x80000001, 0x0, 0x3000080},
10290{0x3000000, 0x2b94, 0x80000076, 0x0, 0x3000080},
10291{0x3000000, 0x2b94, 0x80002b94, 0x0, 0x3000080},
10292{0x3000000, 0x2b94, 0x80636d24, 0x0, 0x3000080},
10293{0x3000000, 0x2b94, 0x807fffff, 0x0, 0x3000080},
10294{0x3000000, 0x2b94, 0x80800000, 0x80800000, 0x3000080},
10295{0x3000000, 0x2b94, 0x80800002, 0x80800002, 0x3000080},
10296{0x3000000, 0x2b94, 0x81398437, 0x81398437, 0x3000080},
10297{0x3000000, 0x2b94, 0x8ba98d27, 0x8ba98d27, 0x3000080},
10298{0x3000000, 0x2b94, 0x8ba98d7a, 0x8ba98d7a, 0x3000080},
10299{0x3000000, 0x2b94, 0xf51f853a, 0xf51f853a, 0x3000080},
10300{0x3000000, 0x2b94, 0xff7ffff0, 0xff7ffff0, 0x3000080},
10301{0x3000000, 0x2b94, 0xff7fffff, 0xff7fffff, 0x3000080},
10302{0x3000000, 0x2b94, 0xff800000, 0xff800000, 0x3000080},
10303{0x3000000, 0x2b94, 0xff800001, 0x7fc00000, 0x3000081},
10304{0x3000000, 0x2b94, 0xff984a37, 0x7fc00000, 0x3000081},
10305{0x3000000, 0x2b94, 0xffbfffff, 0x7fc00000, 0x3000081},
10306{0x3000000, 0x2b94, 0xffc00000, 0x7fc00000, 0x3000080},
10307{0x3000000, 0x2b94, 0xffd9ba98, 0x7fc00000, 0x3000080},
10308{0x3000000, 0x2b94, 0xffffffff, 0x7fc00000, 0x3000080},
10309{0x3000000, 0x2b94, 0x4f3495cb, 0x4f3495cb, 0x3000080},
10310{0x3000000, 0x2b94, 0xe73a5134, 0xe73a5134, 0x3000080},
10311{0x3000000, 0x2b94, 0x7c994e9e, 0x7c994e9e, 0x3000080},
10312{0x3000000, 0x2b94, 0x6164bd6c, 0x6164bd6c, 0x3000080},
10313{0x3000000, 0x2b94, 0x9503366, 0x9503366, 0x3000080},
10314{0x3000000, 0x2b94, 0xbf5a97c9, 0xbf5a97c9, 0x3000080},
10315{0x3000000, 0x2b94, 0xe6ff1a14, 0xe6ff1a14, 0x3000080},
10316{0x3000000, 0x2b94, 0x77f31e2f, 0x77f31e2f, 0x3000080},
10317{0x3000000, 0x2b94, 0xaab4d7d8, 0xaab4d7d8, 0x3000080},
10318{0x3000000, 0x2b94, 0x966320b, 0x966320b, 0x3000080},
10319{0x3000000, 0x2b94, 0xb26bddee, 0xb26bddee, 0x3000080},
10320{0x3000000, 0x2b94, 0xb5c8e5d3, 0xb5c8e5d3, 0x3000080},
10321{0x3000000, 0x2b94, 0x317285d3, 0x317285d3, 0x3000080},
10322{0x3000000, 0x2b94, 0x3c9623b1, 0x3c9623b1, 0x3000080},
10323{0x3000000, 0x2b94, 0x51fd2c7c, 0x51fd2c7c, 0x3000080},
10324{0x3000000, 0x2b94, 0x7b906a6c, 0x7b906a6c, 0x3000080},
10325{0x3000000, 0x636d24, 0x0, 0x0, 0x3000080},
10326{0x3000000, 0x636d24, 0x1, 0x0, 0x3000080},
10327{0x3000000, 0x636d24, 0x76, 0x0, 0x3000080},
10328{0x3000000, 0x636d24, 0x2b94, 0x0, 0x3000080},
10329{0x3000000, 0x636d24, 0x636d24, 0x0, 0x3000080},
10330{0x3000000, 0x636d24, 0x7fffff, 0x0, 0x3000080},
10331{0x3000000, 0x636d24, 0x800000, 0x800000, 0x3000080},
10332{0x3000000, 0x636d24, 0x800002, 0x800002, 0x3000080},
10333{0x3000000, 0x636d24, 0x1398437, 0x1398437, 0x3000080},
10334{0x3000000, 0x636d24, 0xba98d27, 0xba98d27, 0x3000080},
10335{0x3000000, 0x636d24, 0xba98d7a, 0xba98d7a, 0x3000080},
10336{0x3000000, 0x636d24, 0x751f853a, 0x751f853a, 0x3000080},
10337{0x3000000, 0x636d24, 0x7f7ffff0, 0x7f7ffff0, 0x3000080},
10338{0x3000000, 0x636d24, 0x7f7fffff, 0x7f7fffff, 0x3000080},
10339{0x3000000, 0x636d24, 0x7f800000, 0x7f800000, 0x3000080},
10340{0x3000000, 0x636d24, 0x7f800001, 0x7fc00000, 0x3000081},
10341{0x3000000, 0x636d24, 0x7f984a37, 0x7fc00000, 0x3000081},
10342{0x3000000, 0x636d24, 0x7fbfffff, 0x7fc00000, 0x3000081},
10343{0x3000000, 0x636d24, 0x7fc00000, 0x7fc00000, 0x3000080},
10344{0x3000000, 0x636d24, 0x7fd9ba98, 0x7fc00000, 0x3000080},
10345{0x3000000, 0x636d24, 0x7fffffff, 0x7fc00000, 0x3000080},
10346{0x3000000, 0x636d24, 0x80000000, 0x0, 0x3000080},
10347{0x3000000, 0x636d24, 0x80000001, 0x0, 0x3000080},
10348{0x3000000, 0x636d24, 0x80000076, 0x0, 0x3000080},
10349{0x3000000, 0x636d24, 0x80002b94, 0x0, 0x3000080},
10350{0x3000000, 0x636d24, 0x80636d24, 0x0, 0x3000080},
10351{0x3000000, 0x636d24, 0x807fffff, 0x0, 0x3000080},
10352{0x3000000, 0x636d24, 0x80800000, 0x80800000, 0x3000080},
10353{0x3000000, 0x636d24, 0x80800002, 0x80800002, 0x3000080},
10354{0x3000000, 0x636d24, 0x81398437, 0x81398437, 0x3000080},
10355{0x3000000, 0x636d24, 0x8ba98d27, 0x8ba98d27, 0x3000080},
10356{0x3000000, 0x636d24, 0x8ba98d7a, 0x8ba98d7a, 0x3000080},
10357{0x3000000, 0x636d24, 0xf51f853a, 0xf51f853a, 0x3000080},
10358{0x3000000, 0x636d24, 0xff7ffff0, 0xff7ffff0, 0x3000080},
10359{0x3000000, 0x636d24, 0xff7fffff, 0xff7fffff, 0x3000080},
10360{0x3000000, 0x636d24, 0xff800000, 0xff800000, 0x3000080},
10361{0x3000000, 0x636d24, 0xff800001, 0x7fc00000, 0x3000081},
10362{0x3000000, 0x636d24, 0xff984a37, 0x7fc00000, 0x3000081},
10363{0x3000000, 0x636d24, 0xffbfffff, 0x7fc00000, 0x3000081},
10364{0x3000000, 0x636d24, 0xffc00000, 0x7fc00000, 0x3000080},
10365{0x3000000, 0x636d24, 0xffd9ba98, 0x7fc00000, 0x3000080},
10366{0x3000000, 0x636d24, 0xffffffff, 0x7fc00000, 0x3000080},
10367{0x3000000, 0x636d24, 0x4f3495cb, 0x4f3495cb, 0x3000080},
10368{0x3000000, 0x636d24, 0xe73a5134, 0xe73a5134, 0x3000080},
10369{0x3000000, 0x636d24, 0x7c994e9e, 0x7c994e9e, 0x3000080},
10370{0x3000000, 0x636d24, 0x6164bd6c, 0x6164bd6c, 0x3000080},
10371{0x3000000, 0x636d24, 0x9503366, 0x9503366, 0x3000080},
10372{0x3000000, 0x636d24, 0xbf5a97c9, 0xbf5a97c9, 0x3000080},
10373{0x3000000, 0x636d24, 0xe6ff1a14, 0xe6ff1a14, 0x3000080},
10374{0x3000000, 0x636d24, 0x77f31e2f, 0x77f31e2f, 0x3000080},
10375{0x3000000, 0x636d24, 0xaab4d7d8, 0xaab4d7d8, 0x3000080},
10376{0x3000000, 0x636d24, 0x966320b, 0x966320b, 0x3000080},
10377{0x3000000, 0x636d24, 0xb26bddee, 0xb26bddee, 0x3000080},
10378{0x3000000, 0x636d24, 0xb5c8e5d3, 0xb5c8e5d3, 0x3000080},
10379{0x3000000, 0x636d24, 0x317285d3, 0x317285d3, 0x3000080},
10380{0x3000000, 0x636d24, 0x3c9623b1, 0x3c9623b1, 0x3000080},
10381{0x3000000, 0x636d24, 0x51fd2c7c, 0x51fd2c7c, 0x3000080},
10382{0x3000000, 0x636d24, 0x7b906a6c, 0x7b906a6c, 0x3000080},
10383{0x3000000, 0x7fffff, 0x0, 0x0, 0x3000080},
10384{0x3000000, 0x7fffff, 0x1, 0x0, 0x3000080},
10385{0x3000000, 0x7fffff, 0x76, 0x0, 0x3000080},
10386{0x3000000, 0x7fffff, 0x2b94, 0x0, 0x3000080},
10387{0x3000000, 0x7fffff, 0x636d24, 0x0, 0x3000080},
10388{0x3000000, 0x7fffff, 0x7fffff, 0x0, 0x3000080},
10389{0x3000000, 0x7fffff, 0x800000, 0x800000, 0x3000080},
10390{0x3000000, 0x7fffff, 0x800002, 0x800002, 0x3000080},
10391{0x3000000, 0x7fffff, 0x1398437, 0x1398437, 0x3000080},
10392{0x3000000, 0x7fffff, 0xba98d27, 0xba98d27, 0x3000080},
10393{0x3000000, 0x7fffff, 0xba98d7a, 0xba98d7a, 0x3000080},
10394{0x3000000, 0x7fffff, 0x751f853a, 0x751f853a, 0x3000080},
10395{0x3000000, 0x7fffff, 0x7f7ffff0, 0x7f7ffff0, 0x3000080},
10396{0x3000000, 0x7fffff, 0x7f7fffff, 0x7f7fffff, 0x3000080},
10397{0x3000000, 0x7fffff, 0x7f800000, 0x7f800000, 0x3000080},
10398{0x3000000, 0x7fffff, 0x7f800001, 0x7fc00000, 0x3000081},
10399{0x3000000, 0x7fffff, 0x7f984a37, 0x7fc00000, 0x3000081},
10400{0x3000000, 0x7fffff, 0x7fbfffff, 0x7fc00000, 0x3000081},
10401{0x3000000, 0x7fffff, 0x7fc00000, 0x7fc00000, 0x3000080},
10402{0x3000000, 0x7fffff, 0x7fd9ba98, 0x7fc00000, 0x3000080},
10403{0x3000000, 0x7fffff, 0x7fffffff, 0x7fc00000, 0x3000080},
10404{0x3000000, 0x7fffff, 0x80000000, 0x0, 0x3000080},
10405{0x3000000, 0x7fffff, 0x80000001, 0x0, 0x3000080},
10406{0x3000000, 0x7fffff, 0x80000076, 0x0, 0x3000080},
10407{0x3000000, 0x7fffff, 0x80002b94, 0x0, 0x3000080},
10408{0x3000000, 0x7fffff, 0x80636d24, 0x0, 0x3000080},
10409{0x3000000, 0x7fffff, 0x807fffff, 0x0, 0x3000080},
10410{0x3000000, 0x7fffff, 0x80800000, 0x80800000, 0x3000080},
10411{0x3000000, 0x7fffff, 0x80800002, 0x80800002, 0x3000080},
10412{0x3000000, 0x7fffff, 0x81398437, 0x81398437, 0x3000080},
10413{0x3000000, 0x7fffff, 0x8ba98d27, 0x8ba98d27, 0x3000080},
10414{0x3000000, 0x7fffff, 0x8ba98d7a, 0x8ba98d7a, 0x3000080},
10415{0x3000000, 0x7fffff, 0xf51f853a, 0xf51f853a, 0x3000080},
10416{0x3000000, 0x7fffff, 0xff7ffff0, 0xff7ffff0, 0x3000080},
10417{0x3000000, 0x7fffff, 0xff7fffff, 0xff7fffff, 0x3000080},
10418{0x3000000, 0x7fffff, 0xff800000, 0xff800000, 0x3000080},
10419{0x3000000, 0x7fffff, 0xff800001, 0x7fc00000, 0x3000081},
10420{0x3000000, 0x7fffff, 0xff984a37, 0x7fc00000, 0x3000081},
10421{0x3000000, 0x7fffff, 0xffbfffff, 0x7fc00000, 0x3000081},
10422{0x3000000, 0x7fffff, 0xffc00000, 0x7fc00000, 0x3000080},
10423{0x3000000, 0x7fffff, 0xffd9ba98, 0x7fc00000, 0x3000080},
10424{0x3000000, 0x7fffff, 0xffffffff, 0x7fc00000, 0x3000080},
10425{0x3000000, 0x7fffff, 0x4f3495cb, 0x4f3495cb, 0x3000080},
10426{0x3000000, 0x7fffff, 0xe73a5134, 0xe73a5134, 0x3000080},
10427{0x3000000, 0x7fffff, 0x7c994e9e, 0x7c994e9e, 0x3000080},
10428{0x3000000, 0x7fffff, 0x6164bd6c, 0x6164bd6c, 0x3000080},
10429{0x3000000, 0x7fffff, 0x9503366, 0x9503366, 0x3000080},
10430{0x3000000, 0x7fffff, 0xbf5a97c9, 0xbf5a97c9, 0x3000080},
10431{0x3000000, 0x7fffff, 0xe6ff1a14, 0xe6ff1a14, 0x3000080},
10432{0x3000000, 0x7fffff, 0x77f31e2f, 0x77f31e2f, 0x3000080},
10433{0x3000000, 0x7fffff, 0xaab4d7d8, 0xaab4d7d8, 0x3000080},
10434{0x3000000, 0x7fffff, 0x966320b, 0x966320b, 0x3000080},
10435{0x3000000, 0x7fffff, 0xb26bddee, 0xb26bddee, 0x3000080},
10436{0x3000000, 0x7fffff, 0xb5c8e5d3, 0xb5c8e5d3, 0x3000080},
10437{0x3000000, 0x7fffff, 0x317285d3, 0x317285d3, 0x3000080},
10438{0x3000000, 0x7fffff, 0x3c9623b1, 0x3c9623b1, 0x3000080},
10439{0x3000000, 0x7fffff, 0x51fd2c7c, 0x51fd2c7c, 0x3000080},
10440{0x3000000, 0x7fffff, 0x7b906a6c, 0x7b906a6c, 0x3000080},
10441{0x3000000, 0x800000, 0x0, 0x800000, 0x3000000},
10442{0x3000000, 0x800000, 0x1, 0x800000, 0x3000080},
10443{0x3000000, 0x800000, 0x76, 0x800000, 0x3000080},
10444{0x3000000, 0x800000, 0x2b94, 0x800000, 0x3000080},
10445{0x3000000, 0x800000, 0x636d24, 0x800000, 0x3000080},
10446{0x3000000, 0x800000, 0x7fffff, 0x800000, 0x3000080},
10447{0x3000000, 0x800000, 0x800000, 0x1000000, 0x3000000},
10448{0x3000000, 0x800000, 0x800002, 0x1000001, 0x3000000},
10449{0x3000000, 0x800000, 0x1398437, 0x1798437, 0x3000000},
10450{0x3000000, 0x800000, 0xba98d27, 0xba98d29, 0x3000000},
10451{0x3000000, 0x800000, 0xba98d7a, 0xba98d7c, 0x3000000},
10452{0x3000000, 0x800000, 0x751f853a, 0x751f853a, 0x3000010},
10453{0x3000000, 0x800000, 0x7f7ffff0, 0x7f7ffff0, 0x3000010},
10454{0x3000000, 0x800000, 0x7f7fffff, 0x7f7fffff, 0x3000010},
10455{0x3000000, 0x800000, 0x7f800000, 0x7f800000, 0x3000000},
10456{0x3000000, 0x800000, 0x7f800001, 0x7fc00000, 0x3000001},
10457{0x3000000, 0x800000, 0x7f984a37, 0x7fc00000, 0x3000001},
10458{0x3000000, 0x800000, 0x7fbfffff, 0x7fc00000, 0x3000001},
10459{0x3000000, 0x800000, 0x7fc00000, 0x7fc00000, 0x3000000},
10460{0x3000000, 0x800000, 0x7fd9ba98, 0x7fc00000, 0x3000000},
10461{0x3000000, 0x800000, 0x7fffffff, 0x7fc00000, 0x3000000},
10462{0x3000000, 0x800000, 0x80000000, 0x800000, 0x3000000},
10463{0x3000000, 0x800000, 0x80000001, 0x800000, 0x3000080},
10464{0x3000000, 0x800000, 0x80000076, 0x800000, 0x3000080},
10465{0x3000000, 0x800000, 0x80002b94, 0x800000, 0x3000080},
10466{0x3000000, 0x800000, 0x80636d24, 0x800000, 0x3000080},
10467{0x3000000, 0x800000, 0x807fffff, 0x800000, 0x3000080},
10468{0x3000000, 0x800000, 0x80800000, 0x0, 0x3000000},
10469{0x3000000, 0x800000, 0x80800002, 0x0, 0x3000008},
10470{0x3000000, 0x800000, 0x81398437, 0x80f3086e, 0x3000000},
10471{0x3000000, 0x800000, 0x8ba98d27, 0x8ba98d25, 0x3000000},
10472{0x3000000, 0x800000, 0x8ba98d7a, 0x8ba98d78, 0x3000000},
10473{0x3000000, 0x800000, 0xf51f853a, 0xf51f853a, 0x3000010},
10474{0x3000000, 0x800000, 0xff7ffff0, 0xff7ffff0, 0x3000010},
10475{0x3000000, 0x800000, 0xff7fffff, 0xff7fffff, 0x3000010},
10476{0x3000000, 0x800000, 0xff800000, 0xff800000, 0x3000000},
10477{0x3000000, 0x800000, 0xff800001, 0x7fc00000, 0x3000001},
10478{0x3000000, 0x800000, 0xff984a37, 0x7fc00000, 0x3000001},
10479{0x3000000, 0x800000, 0xffbfffff, 0x7fc00000, 0x3000001},
10480{0x3000000, 0x800000, 0xffc00000, 0x7fc00000, 0x3000000},
10481{0x3000000, 0x800000, 0xffd9ba98, 0x7fc00000, 0x3000000},
10482{0x3000000, 0x800000, 0xffffffff, 0x7fc00000, 0x3000000},
10483{0x3000000, 0x800000, 0x4f3495cb, 0x4f3495cb, 0x3000010},
10484{0x3000000, 0x800000, 0xe73a5134, 0xe73a5134, 0x3000010},
10485{0x3000000, 0x800000, 0x7c994e9e, 0x7c994e9e, 0x3000010},
10486{0x3000000, 0x800000, 0x6164bd6c, 0x6164bd6c, 0x3000010},
10487{0x3000000, 0x800000, 0x9503366, 0x95033a6, 0x3000000},
10488{0x3000000, 0x800000, 0xbf5a97c9, 0xbf5a97c9, 0x3000010},
10489{0x3000000, 0x800000, 0xe6ff1a14, 0xe6ff1a14, 0x3000010},
10490{0x3000000, 0x800000, 0x77f31e2f, 0x77f31e2f, 0x3000010},
10491{0x3000000, 0x800000, 0xaab4d7d8, 0xaab4d7d8, 0x3000010},
10492{0x3000000, 0x800000, 0x966320b, 0x966324b, 0x3000000},
10493{0x3000000, 0x800000, 0xb26bddee, 0xb26bddee, 0x3000010},
10494{0x3000000, 0x800000, 0xb5c8e5d3, 0xb5c8e5d3, 0x3000010},
10495{0x3000000, 0x800000, 0x317285d3, 0x317285d3, 0x3000010},
10496{0x3000000, 0x800000, 0x3c9623b1, 0x3c9623b1, 0x3000010},
10497{0x3000000, 0x800000, 0x51fd2c7c, 0x51fd2c7c, 0x3000010},
10498{0x3000000, 0x800000, 0x7b906a6c, 0x7b906a6c, 0x3000010},
10499{0x3000000, 0x800002, 0x0, 0x800002, 0x3000000},
10500{0x3000000, 0x800002, 0x1, 0x800002, 0x3000080},
10501{0x3000000, 0x800002, 0x76, 0x800002, 0x3000080},
10502{0x3000000, 0x800002, 0x2b94, 0x800002, 0x3000080},
10503{0x3000000, 0x800002, 0x636d24, 0x800002, 0x3000080},
10504{0x3000000, 0x800002, 0x7fffff, 0x800002, 0x3000080},
10505{0x3000000, 0x800002, 0x800000, 0x1000001, 0x3000000},
10506{0x3000000, 0x800002, 0x800002, 0x1000002, 0x3000000},
10507{0x3000000, 0x800002, 0x1398437, 0x1798438, 0x3000000},
10508{0x3000000, 0x800002, 0xba98d27, 0xba98d29, 0x3000010},
10509{0x3000000, 0x800002, 0xba98d7a, 0xba98d7c, 0x3000010},
10510{0x3000000, 0x800002, 0x751f853a, 0x751f853a, 0x3000010},
10511{0x3000000, 0x800002, 0x7f7ffff0, 0x7f7ffff0, 0x3000010},
10512{0x3000000, 0x800002, 0x7f7fffff, 0x7f7fffff, 0x3000010},
10513{0x3000000, 0x800002, 0x7f800000, 0x7f800000, 0x3000000},
10514{0x3000000, 0x800002, 0x7f800001, 0x7fc00000, 0x3000001},
10515{0x3000000, 0x800002, 0x7f984a37, 0x7fc00000, 0x3000001},
10516{0x3000000, 0x800002, 0x7fbfffff, 0x7fc00000, 0x3000001},
10517{0x3000000, 0x800002, 0x7fc00000, 0x7fc00000, 0x3000000},
10518{0x3000000, 0x800002, 0x7fd9ba98, 0x7fc00000, 0x3000000},
10519{0x3000000, 0x800002, 0x7fffffff, 0x7fc00000, 0x3000000},
10520{0x3000000, 0x800002, 0x80000000, 0x800002, 0x3000000},
10521{0x3000000, 0x800002, 0x80000001, 0x800002, 0x3000080},
10522{0x3000000, 0x800002, 0x80000076, 0x800002, 0x3000080},
10523{0x3000000, 0x800002, 0x80002b94, 0x800002, 0x3000080},
10524{0x3000000, 0x800002, 0x80636d24, 0x800002, 0x3000080},
10525{0x3000000, 0x800002, 0x807fffff, 0x800002, 0x3000080},
10526{0x3000000, 0x800002, 0x80800000, 0x0, 0x3000008},
10527{0x3000000, 0x800002, 0x80800002, 0x0, 0x3000000},
10528{0x3000000, 0x800002, 0x81398437, 0x80f3086c, 0x3000000},
10529{0x3000000, 0x800002, 0x8ba98d27, 0x8ba98d25, 0x3000010},
10530{0x3000000, 0x800002, 0x8ba98d7a, 0x8ba98d78, 0x3000010},
10531{0x3000000, 0x800002, 0xf51f853a, 0xf51f853a, 0x3000010},
10532{0x3000000, 0x800002, 0xff7ffff0, 0xff7ffff0, 0x3000010},
10533{0x3000000, 0x800002, 0xff7fffff, 0xff7fffff, 0x3000010},
10534{0x3000000, 0x800002, 0xff800000, 0xff800000, 0x3000000},
10535{0x3000000, 0x800002, 0xff800001, 0x7fc00000, 0x3000001},
10536{0x3000000, 0x800002, 0xff984a37, 0x7fc00000, 0x3000001},
10537{0x3000000, 0x800002, 0xffbfffff, 0x7fc00000, 0x3000001},
10538{0x3000000, 0x800002, 0xffc00000, 0x7fc00000, 0x3000000},
10539{0x3000000, 0x800002, 0xffd9ba98, 0x7fc00000, 0x3000000},
10540{0x3000000, 0x800002, 0xffffffff, 0x7fc00000, 0x3000000},
10541{0x3000000, 0x800002, 0x4f3495cb, 0x4f3495cb, 0x3000010},
10542{0x3000000, 0x800002, 0xe73a5134, 0xe73a5134, 0x3000010},
10543{0x3000000, 0x800002, 0x7c994e9e, 0x7c994e9e, 0x3000010},
10544{0x3000000, 0x800002, 0x6164bd6c, 0x6164bd6c, 0x3000010},
10545{0x3000000, 0x800002, 0x9503366, 0x95033a6, 0x3000010},
10546{0x3000000, 0x800002, 0xbf5a97c9, 0xbf5a97c9, 0x3000010},
10547{0x3000000, 0x800002, 0xe6ff1a14, 0xe6ff1a14, 0x3000010},
10548{0x3000000, 0x800002, 0x77f31e2f, 0x77f31e2f, 0x3000010},
10549{0x3000000, 0x800002, 0xaab4d7d8, 0xaab4d7d8, 0x3000010},
10550{0x3000000, 0x800002, 0x966320b, 0x966324b, 0x3000010},
10551{0x3000000, 0x800002, 0xb26bddee, 0xb26bddee, 0x3000010},
10552{0x3000000, 0x800002, 0xb5c8e5d3, 0xb5c8e5d3, 0x3000010},
10553{0x3000000, 0x800002, 0x317285d3, 0x317285d3, 0x3000010},
10554{0x3000000, 0x800002, 0x3c9623b1, 0x3c9623b1, 0x3000010},
10555{0x3000000, 0x800002, 0x51fd2c7c, 0x51fd2c7c, 0x3000010},
10556{0x3000000, 0x800002, 0x7b906a6c, 0x7b906a6c, 0x3000010},
10557{0x3000000, 0x1398437, 0x0, 0x1398437, 0x3000000},
10558{0x3000000, 0x1398437, 0x1, 0x1398437, 0x3000080},
10559{0x3000000, 0x1398437, 0x76, 0x1398437, 0x3000080},
10560{0x3000000, 0x1398437, 0x2b94, 0x1398437, 0x3000080},
10561{0x3000000, 0x1398437, 0x636d24, 0x1398437, 0x3000080},
10562{0x3000000, 0x1398437, 0x7fffff, 0x1398437, 0x3000080},
10563{0x3000000, 0x1398437, 0x800000, 0x1798437, 0x3000000},
10564{0x3000000, 0x1398437, 0x800002, 0x1798438, 0x3000000},
10565{0x3000000, 0x1398437, 0x1398437, 0x1b98437, 0x3000000},
10566{0x3000000, 0x1398437, 0xba98d27, 0xba98d2d, 0x3000010},
10567{0x3000000, 0x1398437, 0xba98d7a, 0xba98d80, 0x3000010},
10568{0x3000000, 0x1398437, 0x751f853a, 0x751f853a, 0x3000010},
10569{0x3000000, 0x1398437, 0x7f7ffff0, 0x7f7ffff0, 0x3000010},
10570{0x3000000, 0x1398437, 0x7f7fffff, 0x7f7fffff, 0x3000010},
10571{0x3000000, 0x1398437, 0x7f800000, 0x7f800000, 0x3000000},
10572{0x3000000, 0x1398437, 0x7f800001, 0x7fc00000, 0x3000001},
10573{0x3000000, 0x1398437, 0x7f984a37, 0x7fc00000, 0x3000001},
10574{0x3000000, 0x1398437, 0x7fbfffff, 0x7fc00000, 0x3000001},
10575{0x3000000, 0x1398437, 0x7fc00000, 0x7fc00000, 0x3000000},
10576{0x3000000, 0x1398437, 0x7fd9ba98, 0x7fc00000, 0x3000000},
10577{0x3000000, 0x1398437, 0x7fffffff, 0x7fc00000, 0x3000000},
10578{0x3000000, 0x1398437, 0x80000000, 0x1398437, 0x3000000},
10579{0x3000000, 0x1398437, 0x80000001, 0x1398437, 0x3000080},
10580{0x3000000, 0x1398437, 0x80000076, 0x1398437, 0x3000080},
10581{0x3000000, 0x1398437, 0x80002b94, 0x1398437, 0x3000080},
10582{0x3000000, 0x1398437, 0x80636d24, 0x1398437, 0x3000080},
10583{0x3000000, 0x1398437, 0x807fffff, 0x1398437, 0x3000080},
10584{0x3000000, 0x1398437, 0x80800000, 0xf3086e, 0x3000000},
10585{0x3000000, 0x1398437, 0x80800002, 0xf3086c, 0x3000000},
10586{0x3000000, 0x1398437, 0x81398437, 0x0, 0x3000000},
10587{0x3000000, 0x1398437, 0x8ba98d27, 0x8ba98d21, 0x3000010},
10588{0x3000000, 0x1398437, 0x8ba98d7a, 0x8ba98d74, 0x3000010},
10589{0x3000000, 0x1398437, 0xf51f853a, 0xf51f853a, 0x3000010},
10590{0x3000000, 0x1398437, 0xff7ffff0, 0xff7ffff0, 0x3000010},
10591{0x3000000, 0x1398437, 0xff7fffff, 0xff7fffff, 0x3000010},
10592{0x3000000, 0x1398437, 0xff800000, 0xff800000, 0x3000000},
10593{0x3000000, 0x1398437, 0xff800001, 0x7fc00000, 0x3000001},
10594{0x3000000, 0x1398437, 0xff984a37, 0x7fc00000, 0x3000001},
10595{0x3000000, 0x1398437, 0xffbfffff, 0x7fc00000, 0x3000001},
10596{0x3000000, 0x1398437, 0xffc00000, 0x7fc00000, 0x3000000},
10597{0x3000000, 0x1398437, 0xffd9ba98, 0x7fc00000, 0x3000000},
10598{0x3000000, 0x1398437, 0xffffffff, 0x7fc00000, 0x3000000},
10599{0x3000000, 0x1398437, 0x4f3495cb, 0x4f3495cb, 0x3000010},
10600{0x3000000, 0x1398437, 0xe73a5134, 0xe73a5134, 0x3000010},
10601{0x3000000, 0x1398437, 0x7c994e9e, 0x7c994e9e, 0x3000010},
10602{0x3000000, 0x1398437, 0x6164bd6c, 0x6164bd6c, 0x3000010},
10603{0x3000000, 0x1398437, 0x9503366, 0x9503420, 0x3000010},
10604{0x3000000, 0x1398437, 0xbf5a97c9, 0xbf5a97c9, 0x3000010},
10605{0x3000000, 0x1398437, 0xe6ff1a14, 0xe6ff1a14, 0x3000010},
10606{0x3000000, 0x1398437, 0x77f31e2f, 0x77f31e2f, 0x3000010},
10607{0x3000000, 0x1398437, 0xaab4d7d8, 0xaab4d7d8, 0x3000010},
10608{0x3000000, 0x1398437, 0x966320b, 0x96632c5, 0x3000010},
10609{0x3000000, 0x1398437, 0xb26bddee, 0xb26bddee, 0x3000010},
10610{0x3000000, 0x1398437, 0xb5c8e5d3, 0xb5c8e5d3, 0x3000010},
10611{0x3000000, 0x1398437, 0x317285d3, 0x317285d3, 0x3000010},
10612{0x3000000, 0x1398437, 0x3c9623b1, 0x3c9623b1, 0x3000010},
10613{0x3000000, 0x1398437, 0x51fd2c7c, 0x51fd2c7c, 0x3000010},
10614{0x3000000, 0x1398437, 0x7b906a6c, 0x7b906a6c, 0x3000010},
10615{0x3000000, 0xba98d27, 0x0, 0xba98d27, 0x3000000},
10616{0x3000000, 0xba98d27, 0x1, 0xba98d27, 0x3000080},
10617{0x3000000, 0xba98d27, 0x76, 0xba98d27, 0x3000080},
10618{0x3000000, 0xba98d27, 0x2b94, 0xba98d27, 0x3000080},
10619{0x3000000, 0xba98d27, 0x636d24, 0xba98d27, 0x3000080},
10620{0x3000000, 0xba98d27, 0x7fffff, 0xba98d27, 0x3000080},
10621{0x3000000, 0xba98d27, 0x800000, 0xba98d29, 0x3000000},
10622{0x3000000, 0xba98d27, 0x800002, 0xba98d29, 0x3000010},
10623{0x3000000, 0xba98d27, 0x1398437, 0xba98d2d, 0x3000010},
10624{0x3000000, 0xba98d27, 0xba98d27, 0xc298d27, 0x3000000},
10625{0x3000000, 0xba98d27, 0xba98d7a, 0xc298d50, 0x3000010},
10626{0x3000000, 0xba98d27, 0x751f853a, 0x751f853a, 0x3000010},
10627{0x3000000, 0xba98d27, 0x7f7ffff0, 0x7f7ffff0, 0x3000010},
10628{0x3000000, 0xba98d27, 0x7f7fffff, 0x7f7fffff, 0x3000010},
10629{0x3000000, 0xba98d27, 0x7f800000, 0x7f800000, 0x3000000},
10630{0x3000000, 0xba98d27, 0x7f800001, 0x7fc00000, 0x3000001},
10631{0x3000000, 0xba98d27, 0x7f984a37, 0x7fc00000, 0x3000001},
10632{0x3000000, 0xba98d27, 0x7fbfffff, 0x7fc00000, 0x3000001},
10633{0x3000000, 0xba98d27, 0x7fc00000, 0x7fc00000, 0x3000000},
10634{0x3000000, 0xba98d27, 0x7fd9ba98, 0x7fc00000, 0x3000000},
10635{0x3000000, 0xba98d27, 0x7fffffff, 0x7fc00000, 0x3000000},
10636{0x3000000, 0xba98d27, 0x80000000, 0xba98d27, 0x3000000},
10637{0x3000000, 0xba98d27, 0x80000001, 0xba98d27, 0x3000080},
10638{0x3000000, 0xba98d27, 0x80000076, 0xba98d27, 0x3000080},
10639{0x3000000, 0xba98d27, 0x80002b94, 0xba98d27, 0x3000080},
10640{0x3000000, 0xba98d27, 0x80636d24, 0xba98d27, 0x3000080},
10641{0x3000000, 0xba98d27, 0x807fffff, 0xba98d27, 0x3000080},
10642{0x3000000, 0xba98d27, 0x80800000, 0xba98d25, 0x3000000},
10643{0x3000000, 0xba98d27, 0x80800002, 0xba98d25, 0x3000010},
10644{0x3000000, 0xba98d27, 0x81398437, 0xba98d21, 0x3000010},
10645{0x3000000, 0xba98d27, 0x8ba98d27, 0x0, 0x3000000},
10646{0x3000000, 0xba98d27, 0x8ba98d7a, 0x83260000, 0x3000000},
10647{0x3000000, 0xba98d27, 0xf51f853a, 0xf51f853a, 0x3000010},
10648{0x3000000, 0xba98d27, 0xff7ffff0, 0xff7ffff0, 0x3000010},
10649{0x3000000, 0xba98d27, 0xff7fffff, 0xff7fffff, 0x3000010},
10650{0x3000000, 0xba98d27, 0xff800000, 0xff800000, 0x3000000},
10651{0x3000000, 0xba98d27, 0xff800001, 0x7fc00000, 0x3000001},
10652{0x3000000, 0xba98d27, 0xff984a37, 0x7fc00000, 0x3000001},
10653{0x3000000, 0xba98d27, 0xffbfffff, 0x7fc00000, 0x3000001},
10654{0x3000000, 0xba98d27, 0xffc00000, 0x7fc00000, 0x3000000},
10655{0x3000000, 0xba98d27, 0xffd9ba98, 0x7fc00000, 0x3000000},
10656{0x3000000, 0xba98d27, 0xffffffff, 0x7fc00000, 0x3000000},
10657{0x3000000, 0xba98d27, 0x4f3495cb, 0x4f3495cb, 0x3000010},
10658{0x3000000, 0xba98d27, 0xe73a5134, 0xe73a5134, 0x3000010},
10659{0x3000000, 0xba98d27, 0x7c994e9e, 0x7c994e9e, 0x3000010},
10660{0x3000000, 0xba98d27, 0x6164bd6c, 0x6164bd6c, 0x3000010},
10661{0x3000000, 0xba98d27, 0x9503366, 0xbb00ec2, 0x3000010},
10662{0x3000000, 0xba98d27, 0xbf5a97c9, 0xbf5a97c9, 0x3000010},
10663{0x3000000, 0xba98d27, 0xe6ff1a14, 0xe6ff1a14, 0x3000010},
10664{0x3000000, 0xba98d27, 0x77f31e2f, 0x77f31e2f, 0x3000010},
10665{0x3000000, 0xba98d27, 0xaab4d7d8, 0xaab4d7d8, 0x3000010},
10666{0x3000000, 0xba98d27, 0x966320b, 0xbb0beb7, 0x3000010},
10667{0x3000000, 0xba98d27, 0xb26bddee, 0xb26bddee, 0x3000010},
10668{0x3000000, 0xba98d27, 0xb5c8e5d3, 0xb5c8e5d3, 0x3000010},
10669{0x3000000, 0xba98d27, 0x317285d3, 0x317285d3, 0x3000010},
10670{0x3000000, 0xba98d27, 0x3c9623b1, 0x3c9623b1, 0x3000010},
10671{0x3000000, 0xba98d27, 0x51fd2c7c, 0x51fd2c7c, 0x3000010},
10672{0x3000000, 0xba98d27, 0x7b906a6c, 0x7b906a6c, 0x3000010},
10673{0x3000000, 0xba98d7a, 0x0, 0xba98d7a, 0x3000000},
10674{0x3000000, 0xba98d7a, 0x1, 0xba98d7a, 0x3000080},
10675{0x3000000, 0xba98d7a, 0x76, 0xba98d7a, 0x3000080},
10676{0x3000000, 0xba98d7a, 0x2b94, 0xba98d7a, 0x3000080},
10677{0x3000000, 0xba98d7a, 0x636d24, 0xba98d7a, 0x3000080},
10678{0x3000000, 0xba98d7a, 0x7fffff, 0xba98d7a, 0x3000080},
10679{0x3000000, 0xba98d7a, 0x800000, 0xba98d7c, 0x3000000},
10680{0x3000000, 0xba98d7a, 0x800002, 0xba98d7c, 0x3000010},
10681{0x3000000, 0xba98d7a, 0x1398437, 0xba98d80, 0x3000010},
10682{0x3000000, 0xba98d7a, 0xba98d27, 0xc298d50, 0x3000010},
10683{0x3000000, 0xba98d7a, 0xba98d7a, 0xc298d7a, 0x3000000},
10684{0x3000000, 0xba98d7a, 0x751f853a, 0x751f853a, 0x3000010},
10685{0x3000000, 0xba98d7a, 0x7f7ffff0, 0x7f7ffff0, 0x3000010},
10686{0x3000000, 0xba98d7a, 0x7f7fffff, 0x7f7fffff, 0x3000010},
10687{0x3000000, 0xba98d7a, 0x7f800000, 0x7f800000, 0x3000000},
10688{0x3000000, 0xba98d7a, 0x7f800001, 0x7fc00000, 0x3000001},
10689{0x3000000, 0xba98d7a, 0x7f984a37, 0x7fc00000, 0x3000001},
10690{0x3000000, 0xba98d7a, 0x7fbfffff, 0x7fc00000, 0x3000001},
10691{0x3000000, 0xba98d7a, 0x7fc00000, 0x7fc00000, 0x3000000},
10692{0x3000000, 0xba98d7a, 0x7fd9ba98, 0x7fc00000, 0x3000000},
10693{0x3000000, 0xba98d7a, 0x7fffffff, 0x7fc00000, 0x3000000},
10694{0x3000000, 0xba98d7a, 0x80000000, 0xba98d7a, 0x3000000},
10695{0x3000000, 0xba98d7a, 0x80000001, 0xba98d7a, 0x3000080},
10696{0x3000000, 0xba98d7a, 0x80000076, 0xba98d7a, 0x3000080},
10697{0x3000000, 0xba98d7a, 0x80002b94, 0xba98d7a, 0x3000080},
10698{0x3000000, 0xba98d7a, 0x80636d24, 0xba98d7a, 0x3000080},
10699{0x3000000, 0xba98d7a, 0x807fffff, 0xba98d7a, 0x3000080},
10700{0x3000000, 0xba98d7a, 0x80800000, 0xba98d78, 0x3000000},
10701{0x3000000, 0xba98d7a, 0x80800002, 0xba98d78, 0x3000010},
10702{0x3000000, 0xba98d7a, 0x81398437, 0xba98d74, 0x3000010},
10703{0x3000000, 0xba98d7a, 0x8ba98d27, 0x3260000, 0x3000000},
10704{0x3000000, 0xba98d7a, 0x8ba98d7a, 0x0, 0x3000000},
10705{0x3000000, 0xba98d7a, 0xf51f853a, 0xf51f853a, 0x3000010},
10706{0x3000000, 0xba98d7a, 0xff7ffff0, 0xff7ffff0, 0x3000010},
10707{0x3000000, 0xba98d7a, 0xff7fffff, 0xff7fffff, 0x3000010},
10708{0x3000000, 0xba98d7a, 0xff800000, 0xff800000, 0x3000000},
10709{0x3000000, 0xba98d7a, 0xff800001, 0x7fc00000, 0x3000001},
10710{0x3000000, 0xba98d7a, 0xff984a37, 0x7fc00000, 0x3000001},
10711{0x3000000, 0xba98d7a, 0xffbfffff, 0x7fc00000, 0x3000001},
10712{0x3000000, 0xba98d7a, 0xffc00000, 0x7fc00000, 0x3000000},
10713{0x3000000, 0xba98d7a, 0xffd9ba98, 0x7fc00000, 0x3000000},
10714{0x3000000, 0xba98d7a, 0xffffffff, 0x7fc00000, 0x3000000},
10715{0x3000000, 0xba98d7a, 0x4f3495cb, 0x4f3495cb, 0x3000010},
10716{0x3000000, 0xba98d7a, 0xe73a5134, 0xe73a5134, 0x3000010},
10717{0x3000000, 0xba98d7a, 0x7c994e9e, 0x7c994e9e, 0x3000010},
10718{0x3000000, 0xba98d7a, 0x6164bd6c, 0x6164bd6c, 0x3000010},
10719{0x3000000, 0xba98d7a, 0x9503366, 0xbb00f15, 0x3000010},
10720{0x3000000, 0xba98d7a, 0xbf5a97c9, 0xbf5a97c9, 0x3000010},
10721{0x3000000, 0xba98d7a, 0xe6ff1a14, 0xe6ff1a14, 0x3000010},
10722{0x3000000, 0xba98d7a, 0x77f31e2f, 0x77f31e2f, 0x3000010},
10723{0x3000000, 0xba98d7a, 0xaab4d7d8, 0xaab4d7d8, 0x3000010},
10724{0x3000000, 0xba98d7a, 0x966320b, 0xbb0bf0a, 0x3000010},
10725{0x3000000, 0xba98d7a, 0xb26bddee, 0xb26bddee, 0x3000010},
10726{0x3000000, 0xba98d7a, 0xb5c8e5d3, 0xb5c8e5d3, 0x3000010},
10727{0x3000000, 0xba98d7a, 0x317285d3, 0x317285d3, 0x3000010},
10728{0x3000000, 0xba98d7a, 0x3c9623b1, 0x3c9623b1, 0x3000010},
10729{0x3000000, 0xba98d7a, 0x51fd2c7c, 0x51fd2c7c, 0x3000010},
10730{0x3000000, 0xba98d7a, 0x7b906a6c, 0x7b906a6c, 0x3000010},
10731{0x3000000, 0x751f853a, 0x0, 0x751f853a, 0x3000000},
10732{0x3000000, 0x751f853a, 0x1, 0x751f853a, 0x3000080},
10733{0x3000000, 0x751f853a, 0x76, 0x751f853a, 0x3000080},
10734{0x3000000, 0x751f853a, 0x2b94, 0x751f853a, 0x3000080},
10735{0x3000000, 0x751f853a, 0x636d24, 0x751f853a, 0x3000080},
10736{0x3000000, 0x751f853a, 0x7fffff, 0x751f853a, 0x3000080},
10737{0x3000000, 0x751f853a, 0x800000, 0x751f853a, 0x3000010},
10738{0x3000000, 0x751f853a, 0x800002, 0x751f853a, 0x3000010},
10739{0x3000000, 0x751f853a, 0x1398437, 0x751f853a, 0x3000010},
10740{0x3000000, 0x751f853a, 0xba98d27, 0x751f853a, 0x3000010},
10741{0x3000000, 0x751f853a, 0xba98d7a, 0x751f853a, 0x3000010},
10742{0x3000000, 0x751f853a, 0x751f853a, 0x759f853a, 0x3000000},
10743{0x3000000, 0x751f853a, 0x7f7ffff0, 0x7f7ffffa, 0x3000010},
10744{0x3000000, 0x751f853a, 0x7f7fffff, 0x7f800000, 0x3000014},
10745{0x3000000, 0x751f853a, 0x7f800000, 0x7f800000, 0x3000000},
10746{0x3000000, 0x751f853a, 0x7f800001, 0x7fc00000, 0x3000001},
10747{0x3000000, 0x751f853a, 0x7f984a37, 0x7fc00000, 0x3000001},
10748{0x3000000, 0x751f853a, 0x7fbfffff, 0x7fc00000, 0x3000001},
10749{0x3000000, 0x751f853a, 0x7fc00000, 0x7fc00000, 0x3000000},
10750{0x3000000, 0x751f853a, 0x7fd9ba98, 0x7fc00000, 0x3000000},
10751{0x3000000, 0x751f853a, 0x7fffffff, 0x7fc00000, 0x3000000},
10752{0x3000000, 0x751f853a, 0x80000000, 0x751f853a, 0x3000000},
10753{0x3000000, 0x751f853a, 0x80000001, 0x751f853a, 0x3000080},
10754{0x3000000, 0x751f853a, 0x80000076, 0x751f853a, 0x3000080},
10755{0x3000000, 0x751f853a, 0x80002b94, 0x751f853a, 0x3000080},
10756{0x3000000, 0x751f853a, 0x80636d24, 0x751f853a, 0x3000080},
10757{0x3000000, 0x751f853a, 0x807fffff, 0x751f853a, 0x3000080},
10758{0x3000000, 0x751f853a, 0x80800000, 0x751f853a, 0x3000010},
10759{0x3000000, 0x751f853a, 0x80800002, 0x751f853a, 0x3000010},
10760{0x3000000, 0x751f853a, 0x81398437, 0x751f853a, 0x3000010},
10761{0x3000000, 0x751f853a, 0x8ba98d27, 0x751f853a, 0x3000010},
10762{0x3000000, 0x751f853a, 0x8ba98d7a, 0x751f853a, 0x3000010},
10763{0x3000000, 0x751f853a, 0xf51f853a, 0x0, 0x3000000},
10764{0x3000000, 0x751f853a, 0xff7ffff0, 0xff7fffe6, 0x3000010},
10765{0x3000000, 0x751f853a, 0xff7fffff, 0xff7ffff5, 0x3000010},
10766{0x3000000, 0x751f853a, 0xff800000, 0xff800000, 0x3000000},
10767{0x3000000, 0x751f853a, 0xff800001, 0x7fc00000, 0x3000001},
10768{0x3000000, 0x751f853a, 0xff984a37, 0x7fc00000, 0x3000001},
10769{0x3000000, 0x751f853a, 0xffbfffff, 0x7fc00000, 0x3000001},
10770{0x3000000, 0x751f853a, 0xffc00000, 0x7fc00000, 0x3000000},
10771{0x3000000, 0x751f853a, 0xffd9ba98, 0x7fc00000, 0x3000000},
10772{0x3000000, 0x751f853a, 0xffffffff, 0x7fc00000, 0x3000000},
10773{0x3000000, 0x751f853a, 0x4f3495cb, 0x751f853a, 0x3000010},
10774{0x3000000, 0x751f853a, 0xe73a5134, 0x751f853a, 0x3000010},
10775{0x3000000, 0x751f853a, 0x7c994e9e, 0x7c994fdd, 0x3000010},
10776{0x3000000, 0x751f853a, 0x6164bd6c, 0x751f853a, 0x3000010},
10777{0x3000000, 0x751f853a, 0x9503366, 0x751f853a, 0x3000010},
10778{0x3000000, 0x751f853a, 0xbf5a97c9, 0x751f853a, 0x3000010},
10779{0x3000000, 0x751f853a, 0xe6ff1a14, 0x751f853a, 0x3000010},
10780{0x3000000, 0x751f853a, 0x77f31e2f, 0x77f81a59, 0x3000010},
10781{0x3000000, 0x751f853a, 0xaab4d7d8, 0x751f853a, 0x3000010},
10782{0x3000000, 0x751f853a, 0x966320b, 0x751f853a, 0x3000010},
10783{0x3000000, 0x751f853a, 0xb26bddee, 0x751f853a, 0x3000010},
10784{0x3000000, 0x751f853a, 0xb5c8e5d3, 0x751f853a, 0x3000010},
10785{0x3000000, 0x751f853a, 0x317285d3, 0x751f853a, 0x3000010},
10786{0x3000000, 0x751f853a, 0x3c9623b1, 0x751f853a, 0x3000010},
10787{0x3000000, 0x751f853a, 0x51fd2c7c, 0x751f853a, 0x3000010},
10788{0x3000000, 0x751f853a, 0x7b906a6c, 0x7b906f68, 0x3000010},
10789{0x3000000, 0x7f7ffff0, 0x0, 0x7f7ffff0, 0x3000000},
10790{0x3000000, 0x7f7ffff0, 0x1, 0x7f7ffff0, 0x3000080},
10791{0x3000000, 0x7f7ffff0, 0x76, 0x7f7ffff0, 0x3000080},
10792{0x3000000, 0x7f7ffff0, 0x2b94, 0x7f7ffff0, 0x3000080},
10793{0x3000000, 0x7f7ffff0, 0x636d24, 0x7f7ffff0, 0x3000080},
10794{0x3000000, 0x7f7ffff0, 0x7fffff, 0x7f7ffff0, 0x3000080},
10795{0x3000000, 0x7f7ffff0, 0x800000, 0x7f7ffff0, 0x3000010},
10796{0x3000000, 0x7f7ffff0, 0x800002, 0x7f7ffff0, 0x3000010},
10797{0x3000000, 0x7f7ffff0, 0x1398437, 0x7f7ffff0, 0x3000010},
10798{0x3000000, 0x7f7ffff0, 0xba98d27, 0x7f7ffff0, 0x3000010},
10799{0x3000000, 0x7f7ffff0, 0xba98d7a, 0x7f7ffff0, 0x3000010},
10800{0x3000000, 0x7f7ffff0, 0x751f853a, 0x7f7ffffa, 0x3000010},
10801{0x3000000, 0x7f7ffff0, 0x7f7ffff0, 0x7f800000, 0x3000014},
10802{0x3000000, 0x7f7ffff0, 0x7f7fffff, 0x7f800000, 0x3000014},
10803{0x3000000, 0x7f7ffff0, 0x7f800000, 0x7f800000, 0x3000000},
10804{0x3000000, 0x7f7ffff0, 0x7f800001, 0x7fc00000, 0x3000001},
10805{0x3000000, 0x7f7ffff0, 0x7f984a37, 0x7fc00000, 0x3000001},
10806{0x3000000, 0x7f7ffff0, 0x7fbfffff, 0x7fc00000, 0x3000001},
10807{0x3000000, 0x7f7ffff0, 0x7fc00000, 0x7fc00000, 0x3000000},
10808{0x3000000, 0x7f7ffff0, 0x7fd9ba98, 0x7fc00000, 0x3000000},
10809{0x3000000, 0x7f7ffff0, 0x7fffffff, 0x7fc00000, 0x3000000},
10810{0x3000000, 0x7f7ffff0, 0x80000000, 0x7f7ffff0, 0x3000000},
10811{0x3000000, 0x7f7ffff0, 0x80000001, 0x7f7ffff0, 0x3000080},
10812{0x3000000, 0x7f7ffff0, 0x80000076, 0x7f7ffff0, 0x3000080},
10813{0x3000000, 0x7f7ffff0, 0x80002b94, 0x7f7ffff0, 0x3000080},
10814{0x3000000, 0x7f7ffff0, 0x80636d24, 0x7f7ffff0, 0x3000080},
10815{0x3000000, 0x7f7ffff0, 0x807fffff, 0x7f7ffff0, 0x3000080},
10816{0x3000000, 0x7f7ffff0, 0x80800000, 0x7f7ffff0, 0x3000010},
10817{0x3000000, 0x7f7ffff0, 0x80800002, 0x7f7ffff0, 0x3000010},
10818{0x3000000, 0x7f7ffff0, 0x81398437, 0x7f7ffff0, 0x3000010},
10819{0x3000000, 0x7f7ffff0, 0x8ba98d27, 0x7f7ffff0, 0x3000010},
10820{0x3000000, 0x7f7ffff0, 0x8ba98d7a, 0x7f7ffff0, 0x3000010},
10821{0x3000000, 0x7f7ffff0, 0xf51f853a, 0x7f7fffe6, 0x3000010},
10822{0x3000000, 0x7f7ffff0, 0xff7ffff0, 0x0, 0x3000000},
10823{0x3000000, 0x7f7ffff0, 0xff7fffff, 0xf5700000, 0x3000000},
10824{0x3000000, 0x7f7ffff0, 0xff800000, 0xff800000, 0x3000000},
10825{0x3000000, 0x7f7ffff0, 0xff800001, 0x7fc00000, 0x3000001},
10826{0x3000000, 0x7f7ffff0, 0xff984a37, 0x7fc00000, 0x3000001},
10827{0x3000000, 0x7f7ffff0, 0xffbfffff, 0x7fc00000, 0x3000001},
10828{0x3000000, 0x7f7ffff0, 0xffc00000, 0x7fc00000, 0x3000000},
10829{0x3000000, 0x7f7ffff0, 0xffd9ba98, 0x7fc00000, 0x3000000},
10830{0x3000000, 0x7f7ffff0, 0xffffffff, 0x7fc00000, 0x3000000},
10831{0x3000000, 0x7f7ffff0, 0x4f3495cb, 0x7f7ffff0, 0x3000010},
10832{0x3000000, 0x7f7ffff0, 0xe73a5134, 0x7f7ffff0, 0x3000010},
10833{0x3000000, 0x7f7ffff0, 0x7c994e9e, 0x7f800000, 0x3000014},
10834{0x3000000, 0x7f7ffff0, 0x6164bd6c, 0x7f7ffff0, 0x3000010},
10835{0x3000000, 0x7f7ffff0, 0x9503366, 0x7f7ffff0, 0x3000010},
10836{0x3000000, 0x7f7ffff0, 0xbf5a97c9, 0x7f7ffff0, 0x3000010},
10837{0x3000000, 0x7f7ffff0, 0xe6ff1a14, 0x7f7ffff0, 0x3000010},
10838{0x3000000, 0x7f7ffff0, 0x77f31e2f, 0x7f800000, 0x3000014},
10839{0x3000000, 0x7f7ffff0, 0xaab4d7d8, 0x7f7ffff0, 0x3000010},
10840{0x3000000, 0x7f7ffff0, 0x966320b, 0x7f7ffff0, 0x3000010},
10841{0x3000000, 0x7f7ffff0, 0xb26bddee, 0x7f7ffff0, 0x3000010},
10842{0x3000000, 0x7f7ffff0, 0xb5c8e5d3, 0x7f7ffff0, 0x3000010},
10843{0x3000000, 0x7f7ffff0, 0x317285d3, 0x7f7ffff0, 0x3000010},
10844{0x3000000, 0x7f7ffff0, 0x3c9623b1, 0x7f7ffff0, 0x3000010},
10845{0x3000000, 0x7f7ffff0, 0x51fd2c7c, 0x7f7ffff0, 0x3000010},
10846{0x3000000, 0x7f7ffff0, 0x7b906a6c, 0x7f800000, 0x3000014},
10847{0x3000000, 0x7f7fffff, 0x0, 0x7f7fffff, 0x3000000},
10848{0x3000000, 0x7f7fffff, 0x1, 0x7f7fffff, 0x3000080},
10849{0x3000000, 0x7f7fffff, 0x76, 0x7f7fffff, 0x3000080},
10850{0x3000000, 0x7f7fffff, 0x2b94, 0x7f7fffff, 0x3000080},
10851{0x3000000, 0x7f7fffff, 0x636d24, 0x7f7fffff, 0x3000080},
10852{0x3000000, 0x7f7fffff, 0x7fffff, 0x7f7fffff, 0x3000080},
10853{0x3000000, 0x7f7fffff, 0x800000, 0x7f7fffff, 0x3000010},
10854{0x3000000, 0x7f7fffff, 0x800002, 0x7f7fffff, 0x3000010},
10855{0x3000000, 0x7f7fffff, 0x1398437, 0x7f7fffff, 0x3000010},
10856{0x3000000, 0x7f7fffff, 0xba98d27, 0x7f7fffff, 0x3000010},
10857{0x3000000, 0x7f7fffff, 0xba98d7a, 0x7f7fffff, 0x3000010},
10858{0x3000000, 0x7f7fffff, 0x751f853a, 0x7f800000, 0x3000014},
10859{0x3000000, 0x7f7fffff, 0x7f7ffff0, 0x7f800000, 0x3000014},
10860{0x3000000, 0x7f7fffff, 0x7f7fffff, 0x7f800000, 0x3000014},
10861{0x3000000, 0x7f7fffff, 0x7f800000, 0x7f800000, 0x3000000},
10862{0x3000000, 0x7f7fffff, 0x7f800001, 0x7fc00000, 0x3000001},
10863{0x3000000, 0x7f7fffff, 0x7f984a37, 0x7fc00000, 0x3000001},
10864{0x3000000, 0x7f7fffff, 0x7fbfffff, 0x7fc00000, 0x3000001},
10865{0x3000000, 0x7f7fffff, 0x7fc00000, 0x7fc00000, 0x3000000},
10866{0x3000000, 0x7f7fffff, 0x7fd9ba98, 0x7fc00000, 0x3000000},
10867{0x3000000, 0x7f7fffff, 0x7fffffff, 0x7fc00000, 0x3000000},
10868{0x3000000, 0x7f7fffff, 0x80000000, 0x7f7fffff, 0x3000000},
10869{0x3000000, 0x7f7fffff, 0x80000001, 0x7f7fffff, 0x3000080},
10870{0x3000000, 0x7f7fffff, 0x80000076, 0x7f7fffff, 0x3000080},
10871{0x3000000, 0x7f7fffff, 0x80002b94, 0x7f7fffff, 0x3000080},
10872{0x3000000, 0x7f7fffff, 0x80636d24, 0x7f7fffff, 0x3000080},
10873{0x3000000, 0x7f7fffff, 0x807fffff, 0x7f7fffff, 0x3000080},
10874{0x3000000, 0x7f7fffff, 0x80800000, 0x7f7fffff, 0x3000010},
10875{0x3000000, 0x7f7fffff, 0x80800002, 0x7f7fffff, 0x3000010},
10876{0x3000000, 0x7f7fffff, 0x81398437, 0x7f7fffff, 0x3000010},
10877{0x3000000, 0x7f7fffff, 0x8ba98d27, 0x7f7fffff, 0x3000010},
10878{0x3000000, 0x7f7fffff, 0x8ba98d7a, 0x7f7fffff, 0x3000010},
10879{0x3000000, 0x7f7fffff, 0xf51f853a, 0x7f7ffff5, 0x3000010},
10880{0x3000000, 0x7f7fffff, 0xff7ffff0, 0x75700000, 0x3000000},
10881{0x3000000, 0x7f7fffff, 0xff7fffff, 0x0, 0x3000000},
10882{0x3000000, 0x7f7fffff, 0xff800000, 0xff800000, 0x3000000},
10883{0x3000000, 0x7f7fffff, 0xff800001, 0x7fc00000, 0x3000001},
10884{0x3000000, 0x7f7fffff, 0xff984a37, 0x7fc00000, 0x3000001},
10885{0x3000000, 0x7f7fffff, 0xffbfffff, 0x7fc00000, 0x3000001},
10886{0x3000000, 0x7f7fffff, 0xffc00000, 0x7fc00000, 0x3000000},
10887{0x3000000, 0x7f7fffff, 0xffd9ba98, 0x7fc00000, 0x3000000},
10888{0x3000000, 0x7f7fffff, 0xffffffff, 0x7fc00000, 0x3000000},
10889{0x3000000, 0x7f7fffff, 0x4f3495cb, 0x7f7fffff, 0x3000010},
10890{0x3000000, 0x7f7fffff, 0xe73a5134, 0x7f7fffff, 0x3000010},
10891{0x3000000, 0x7f7fffff, 0x7c994e9e, 0x7f800000, 0x3000014},
10892{0x3000000, 0x7f7fffff, 0x6164bd6c, 0x7f7fffff, 0x3000010},
10893{0x3000000, 0x7f7fffff, 0x9503366, 0x7f7fffff, 0x3000010},
10894{0x3000000, 0x7f7fffff, 0xbf5a97c9, 0x7f7fffff, 0x3000010},
10895{0x3000000, 0x7f7fffff, 0xe6ff1a14, 0x7f7fffff, 0x3000010},
10896{0x3000000, 0x7f7fffff, 0x77f31e2f, 0x7f800000, 0x3000014},
10897{0x3000000, 0x7f7fffff, 0xaab4d7d8, 0x7f7fffff, 0x3000010},
10898{0x3000000, 0x7f7fffff, 0x966320b, 0x7f7fffff, 0x3000010},
10899{0x3000000, 0x7f7fffff, 0xb26bddee, 0x7f7fffff, 0x3000010},
10900{0x3000000, 0x7f7fffff, 0xb5c8e5d3, 0x7f7fffff, 0x3000010},
10901{0x3000000, 0x7f7fffff, 0x317285d3, 0x7f7fffff, 0x3000010},
10902{0x3000000, 0x7f7fffff, 0x3c9623b1, 0x7f7fffff, 0x3000010},
10903{0x3000000, 0x7f7fffff, 0x51fd2c7c, 0x7f7fffff, 0x3000010},
10904{0x3000000, 0x7f7fffff, 0x7b906a6c, 0x7f800000, 0x3000014},
10905{0x3000000, 0x7f800000, 0x0, 0x7f800000, 0x3000000},
10906{0x3000000, 0x7f800000, 0x1, 0x7f800000, 0x3000080},
10907{0x3000000, 0x7f800000, 0x76, 0x7f800000, 0x3000080},
10908{0x3000000, 0x7f800000, 0x2b94, 0x7f800000, 0x3000080},
10909{0x3000000, 0x7f800000, 0x636d24, 0x7f800000, 0x3000080},
10910{0x3000000, 0x7f800000, 0x7fffff, 0x7f800000, 0x3000080},
10911{0x3000000, 0x7f800000, 0x800000, 0x7f800000, 0x3000000},
10912{0x3000000, 0x7f800000, 0x800002, 0x7f800000, 0x3000000},
10913{0x3000000, 0x7f800000, 0x1398437, 0x7f800000, 0x3000000},
10914{0x3000000, 0x7f800000, 0xba98d27, 0x7f800000, 0x3000000},
10915{0x3000000, 0x7f800000, 0xba98d7a, 0x7f800000, 0x3000000},
10916{0x3000000, 0x7f800000, 0x751f853a, 0x7f800000, 0x3000000},
10917{0x3000000, 0x7f800000, 0x7f7ffff0, 0x7f800000, 0x3000000},
10918{0x3000000, 0x7f800000, 0x7f7fffff, 0x7f800000, 0x3000000},
10919{0x3000000, 0x7f800000, 0x7f800000, 0x7f800000, 0x3000000},
10920{0x3000000, 0x7f800000, 0x7f800001, 0x7fc00000, 0x3000001},
10921{0x3000000, 0x7f800000, 0x7f984a37, 0x7fc00000, 0x3000001},
10922{0x3000000, 0x7f800000, 0x7fbfffff, 0x7fc00000, 0x3000001},
10923{0x3000000, 0x7f800000, 0x7fc00000, 0x7fc00000, 0x3000000},
10924{0x3000000, 0x7f800000, 0x7fd9ba98, 0x7fc00000, 0x3000000},
10925{0x3000000, 0x7f800000, 0x7fffffff, 0x7fc00000, 0x3000000},
10926{0x3000000, 0x7f800000, 0x80000000, 0x7f800000, 0x3000000},
10927{0x3000000, 0x7f800000, 0x80000001, 0x7f800000, 0x3000080},
10928{0x3000000, 0x7f800000, 0x80000076, 0x7f800000, 0x3000080},
10929{0x3000000, 0x7f800000, 0x80002b94, 0x7f800000, 0x3000080},
10930{0x3000000, 0x7f800000, 0x80636d24, 0x7f800000, 0x3000080},
10931{0x3000000, 0x7f800000, 0x807fffff, 0x7f800000, 0x3000080},
10932{0x3000000, 0x7f800000, 0x80800000, 0x7f800000, 0x3000000},
10933{0x3000000, 0x7f800000, 0x80800002, 0x7f800000, 0x3000000},
10934{0x3000000, 0x7f800000, 0x81398437, 0x7f800000, 0x3000000},
10935{0x3000000, 0x7f800000, 0x8ba98d27, 0x7f800000, 0x3000000},
10936{0x3000000, 0x7f800000, 0x8ba98d7a, 0x7f800000, 0x3000000},
10937{0x3000000, 0x7f800000, 0xf51f853a, 0x7f800000, 0x3000000},
10938{0x3000000, 0x7f800000, 0xff7ffff0, 0x7f800000, 0x3000000},
10939{0x3000000, 0x7f800000, 0xff7fffff, 0x7f800000, 0x3000000},
10940{0x3000000, 0x7f800000, 0xff800000, 0x7fc00000, 0x3000001},
10941{0x3000000, 0x7f800000, 0xff800001, 0x7fc00000, 0x3000001},
10942{0x3000000, 0x7f800000, 0xff984a37, 0x7fc00000, 0x3000001},
10943{0x3000000, 0x7f800000, 0xffbfffff, 0x7fc00000, 0x3000001},
10944{0x3000000, 0x7f800000, 0xffc00000, 0x7fc00000, 0x3000000},
10945{0x3000000, 0x7f800000, 0xffd9ba98, 0x7fc00000, 0x3000000},
10946{0x3000000, 0x7f800000, 0xffffffff, 0x7fc00000, 0x3000000},
10947{0x3000000, 0x7f800000, 0x4f3495cb, 0x7f800000, 0x3000000},
10948{0x3000000, 0x7f800000, 0xe73a5134, 0x7f800000, 0x3000000},
10949{0x3000000, 0x7f800000, 0x7c994e9e, 0x7f800000, 0x3000000},
10950{0x3000000, 0x7f800000, 0x6164bd6c, 0x7f800000, 0x3000000},
10951{0x3000000, 0x7f800000, 0x9503366, 0x7f800000, 0x3000000},
10952{0x3000000, 0x7f800000, 0xbf5a97c9, 0x7f800000, 0x3000000},
10953{0x3000000, 0x7f800000, 0xe6ff1a14, 0x7f800000, 0x3000000},
10954{0x3000000, 0x7f800000, 0x77f31e2f, 0x7f800000, 0x3000000},
10955{0x3000000, 0x7f800000, 0xaab4d7d8, 0x7f800000, 0x3000000},
10956{0x3000000, 0x7f800000, 0x966320b, 0x7f800000, 0x3000000},
10957{0x3000000, 0x7f800000, 0xb26bddee, 0x7f800000, 0x3000000},
10958{0x3000000, 0x7f800000, 0xb5c8e5d3, 0x7f800000, 0x3000000},
10959{0x3000000, 0x7f800000, 0x317285d3, 0x7f800000, 0x3000000},
10960{0x3000000, 0x7f800000, 0x3c9623b1, 0x7f800000, 0x3000000},
10961{0x3000000, 0x7f800000, 0x51fd2c7c, 0x7f800000, 0x3000000},
10962{0x3000000, 0x7f800000, 0x7b906a6c, 0x7f800000, 0x3000000},
10963{0x3000000, 0x7f800001, 0x0, 0x7fc00000, 0x3000001},
10964{0x3000000, 0x7f800001, 0x1, 0x7fc00000, 0x3000081},
10965{0x3000000, 0x7f800001, 0x76, 0x7fc00000, 0x3000081},
10966{0x3000000, 0x7f800001, 0x2b94, 0x7fc00000, 0x3000081},
10967{0x3000000, 0x7f800001, 0x636d24, 0x7fc00000, 0x3000081},
10968{0x3000000, 0x7f800001, 0x7fffff, 0x7fc00000, 0x3000081},
10969{0x3000000, 0x7f800001, 0x800000, 0x7fc00000, 0x3000001},
10970{0x3000000, 0x7f800001, 0x800002, 0x7fc00000, 0x3000001},
10971{0x3000000, 0x7f800001, 0x1398437, 0x7fc00000, 0x3000001},
10972{0x3000000, 0x7f800001, 0xba98d27, 0x7fc00000, 0x3000001},
10973{0x3000000, 0x7f800001, 0xba98d7a, 0x7fc00000, 0x3000001},
10974{0x3000000, 0x7f800001, 0x751f853a, 0x7fc00000, 0x3000001},
10975{0x3000000, 0x7f800001, 0x7f7ffff0, 0x7fc00000, 0x3000001},
10976{0x3000000, 0x7f800001, 0x7f7fffff, 0x7fc00000, 0x3000001},
10977{0x3000000, 0x7f800001, 0x7f800000, 0x7fc00000, 0x3000001},
10978{0x3000000, 0x7f800001, 0x7f800001, 0x7fc00000, 0x3000001},
10979{0x3000000, 0x7f800001, 0x7f984a37, 0x7fc00000, 0x3000001},
10980{0x3000000, 0x7f800001, 0x7fbfffff, 0x7fc00000, 0x3000001},
10981{0x3000000, 0x7f800001, 0x7fc00000, 0x7fc00000, 0x3000001},
10982{0x3000000, 0x7f800001, 0x7fd9ba98, 0x7fc00000, 0x3000001},
10983{0x3000000, 0x7f800001, 0x7fffffff, 0x7fc00000, 0x3000001},
10984{0x3000000, 0x7f800001, 0x80000000, 0x7fc00000, 0x3000001},
10985{0x3000000, 0x7f800001, 0x80000001, 0x7fc00000, 0x3000081},
10986{0x3000000, 0x7f800001, 0x80000076, 0x7fc00000, 0x3000081},
10987{0x3000000, 0x7f800001, 0x80002b94, 0x7fc00000, 0x3000081},
10988{0x3000000, 0x7f800001, 0x80636d24, 0x7fc00000, 0x3000081},
10989{0x3000000, 0x7f800001, 0x807fffff, 0x7fc00000, 0x3000081},
10990{0x3000000, 0x7f800001, 0x80800000, 0x7fc00000, 0x3000001},
10991{0x3000000, 0x7f800001, 0x80800002, 0x7fc00000, 0x3000001},
10992{0x3000000, 0x7f800001, 0x81398437, 0x7fc00000, 0x3000001},
10993{0x3000000, 0x7f800001, 0x8ba98d27, 0x7fc00000, 0x3000001},
10994{0x3000000, 0x7f800001, 0x8ba98d7a, 0x7fc00000, 0x3000001},
10995{0x3000000, 0x7f800001, 0xf51f853a, 0x7fc00000, 0x3000001},
10996{0x3000000, 0x7f800001, 0xff7ffff0, 0x7fc00000, 0x3000001},
10997{0x3000000, 0x7f800001, 0xff7fffff, 0x7fc00000, 0x3000001},
10998{0x3000000, 0x7f800001, 0xff800000, 0x7fc00000, 0x3000001},
10999{0x3000000, 0x7f800001, 0xff800001, 0x7fc00000, 0x3000001},
11000{0x3000000, 0x7f800001, 0xff984a37, 0x7fc00000, 0x3000001},
11001{0x3000000, 0x7f800001, 0xffbfffff, 0x7fc00000, 0x3000001},
11002{0x3000000, 0x7f800001, 0xffc00000, 0x7fc00000, 0x3000001},
11003{0x3000000, 0x7f800001, 0xffd9ba98, 0x7fc00000, 0x3000001},
11004{0x3000000, 0x7f800001, 0xffffffff, 0x7fc00000, 0x3000001},
11005{0x3000000, 0x7f800001, 0x4f3495cb, 0x7fc00000, 0x3000001},
11006{0x3000000, 0x7f800001, 0xe73a5134, 0x7fc00000, 0x3000001},
11007{0x3000000, 0x7f800001, 0x7c994e9e, 0x7fc00000, 0x3000001},
11008{0x3000000, 0x7f800001, 0x6164bd6c, 0x7fc00000, 0x3000001},
11009{0x3000000, 0x7f800001, 0x9503366, 0x7fc00000, 0x3000001},
11010{0x3000000, 0x7f800001, 0xbf5a97c9, 0x7fc00000, 0x3000001},
11011{0x3000000, 0x7f800001, 0xe6ff1a14, 0x7fc00000, 0x3000001},
11012{0x3000000, 0x7f800001, 0x77f31e2f, 0x7fc00000, 0x3000001},
11013{0x3000000, 0x7f800001, 0xaab4d7d8, 0x7fc00000, 0x3000001},
11014{0x3000000, 0x7f800001, 0x966320b, 0x7fc00000, 0x3000001},
11015{0x3000000, 0x7f800001, 0xb26bddee, 0x7fc00000, 0x3000001},
11016{0x3000000, 0x7f800001, 0xb5c8e5d3, 0x7fc00000, 0x3000001},
11017{0x3000000, 0x7f800001, 0x317285d3, 0x7fc00000, 0x3000001},
11018{0x3000000, 0x7f800001, 0x3c9623b1, 0x7fc00000, 0x3000001},
11019{0x3000000, 0x7f800001, 0x51fd2c7c, 0x7fc00000, 0x3000001},
11020{0x3000000, 0x7f800001, 0x7b906a6c, 0x7fc00000, 0x3000001},
11021{0x3000000, 0x7f984a37, 0x0, 0x7fc00000, 0x3000001},
11022{0x3000000, 0x7f984a37, 0x1, 0x7fc00000, 0x3000081},
11023{0x3000000, 0x7f984a37, 0x76, 0x7fc00000, 0x3000081},
11024{0x3000000, 0x7f984a37, 0x2b94, 0x7fc00000, 0x3000081},
11025{0x3000000, 0x7f984a37, 0x636d24, 0x7fc00000, 0x3000081},
11026{0x3000000, 0x7f984a37, 0x7fffff, 0x7fc00000, 0x3000081},
11027{0x3000000, 0x7f984a37, 0x800000, 0x7fc00000, 0x3000001},
11028{0x3000000, 0x7f984a37, 0x800002, 0x7fc00000, 0x3000001},
11029{0x3000000, 0x7f984a37, 0x1398437, 0x7fc00000, 0x3000001},
11030{0x3000000, 0x7f984a37, 0xba98d27, 0x7fc00000, 0x3000001},
11031{0x3000000, 0x7f984a37, 0xba98d7a, 0x7fc00000, 0x3000001},
11032{0x3000000, 0x7f984a37, 0x751f853a, 0x7fc00000, 0x3000001},
11033{0x3000000, 0x7f984a37, 0x7f7ffff0, 0x7fc00000, 0x3000001},
11034{0x3000000, 0x7f984a37, 0x7f7fffff, 0x7fc00000, 0x3000001},
11035{0x3000000, 0x7f984a37, 0x7f800000, 0x7fc00000, 0x3000001},
11036{0x3000000, 0x7f984a37, 0x7f800001, 0x7fc00000, 0x3000001},
11037{0x3000000, 0x7f984a37, 0x7f984a37, 0x7fc00000, 0x3000001},
11038{0x3000000, 0x7f984a37, 0x7fbfffff, 0x7fc00000, 0x3000001},
11039{0x3000000, 0x7f984a37, 0x7fc00000, 0x7fc00000, 0x3000001},
11040{0x3000000, 0x7f984a37, 0x7fd9ba98, 0x7fc00000, 0x3000001},
11041{0x3000000, 0x7f984a37, 0x7fffffff, 0x7fc00000, 0x3000001},
11042{0x3000000, 0x7f984a37, 0x80000000, 0x7fc00000, 0x3000001},
11043{0x3000000, 0x7f984a37, 0x80000001, 0x7fc00000, 0x3000081},
11044{0x3000000, 0x7f984a37, 0x80000076, 0x7fc00000, 0x3000081},
11045{0x3000000, 0x7f984a37, 0x80002b94, 0x7fc00000, 0x3000081},
11046{0x3000000, 0x7f984a37, 0x80636d24, 0x7fc00000, 0x3000081},
11047{0x3000000, 0x7f984a37, 0x807fffff, 0x7fc00000, 0x3000081},
11048{0x3000000, 0x7f984a37, 0x80800000, 0x7fc00000, 0x3000001},
11049{0x3000000, 0x7f984a37, 0x80800002, 0x7fc00000, 0x3000001},
11050{0x3000000, 0x7f984a37, 0x81398437, 0x7fc00000, 0x3000001},
11051{0x3000000, 0x7f984a37, 0x8ba98d27, 0x7fc00000, 0x3000001},
11052{0x3000000, 0x7f984a37, 0x8ba98d7a, 0x7fc00000, 0x3000001},
11053{0x3000000, 0x7f984a37, 0xf51f853a, 0x7fc00000, 0x3000001},
11054{0x3000000, 0x7f984a37, 0xff7ffff0, 0x7fc00000, 0x3000001},
11055{0x3000000, 0x7f984a37, 0xff7fffff, 0x7fc00000, 0x3000001},
11056{0x3000000, 0x7f984a37, 0xff800000, 0x7fc00000, 0x3000001},
11057{0x3000000, 0x7f984a37, 0xff800001, 0x7fc00000, 0x3000001},
11058{0x3000000, 0x7f984a37, 0xff984a37, 0x7fc00000, 0x3000001},
11059{0x3000000, 0x7f984a37, 0xffbfffff, 0x7fc00000, 0x3000001},
11060{0x3000000, 0x7f984a37, 0xffc00000, 0x7fc00000, 0x3000001},
11061{0x3000000, 0x7f984a37, 0xffd9ba98, 0x7fc00000, 0x3000001},
11062{0x3000000, 0x7f984a37, 0xffffffff, 0x7fc00000, 0x3000001},
11063{0x3000000, 0x7f984a37, 0x4f3495cb, 0x7fc00000, 0x3000001},
11064{0x3000000, 0x7f984a37, 0xe73a5134, 0x7fc00000, 0x3000001},
11065{0x3000000, 0x7f984a37, 0x7c994e9e, 0x7fc00000, 0x3000001},
11066{0x3000000, 0x7f984a37, 0x6164bd6c, 0x7fc00000, 0x3000001},
11067{0x3000000, 0x7f984a37, 0x9503366, 0x7fc00000, 0x3000001},
11068{0x3000000, 0x7f984a37, 0xbf5a97c9, 0x7fc00000, 0x3000001},
11069{0x3000000, 0x7f984a37, 0xe6ff1a14, 0x7fc00000, 0x3000001},
11070{0x3000000, 0x7f984a37, 0x77f31e2f, 0x7fc00000, 0x3000001},
11071{0x3000000, 0x7f984a37, 0xaab4d7d8, 0x7fc00000, 0x3000001},
11072{0x3000000, 0x7f984a37, 0x966320b, 0x7fc00000, 0x3000001},
11073{0x3000000, 0x7f984a37, 0xb26bddee, 0x7fc00000, 0x3000001},
11074{0x3000000, 0x7f984a37, 0xb5c8e5d3, 0x7fc00000, 0x3000001},
11075{0x3000000, 0x7f984a37, 0x317285d3, 0x7fc00000, 0x3000001},
11076{0x3000000, 0x7f984a37, 0x3c9623b1, 0x7fc00000, 0x3000001},
11077{0x3000000, 0x7f984a37, 0x51fd2c7c, 0x7fc00000, 0x3000001},
11078{0x3000000, 0x7f984a37, 0x7b906a6c, 0x7fc00000, 0x3000001},
11079{0x3000000, 0x7fbfffff, 0x0, 0x7fc00000, 0x3000001},
11080{0x3000000, 0x7fbfffff, 0x1, 0x7fc00000, 0x3000081},
11081{0x3000000, 0x7fbfffff, 0x76, 0x7fc00000, 0x3000081},
11082{0x3000000, 0x7fbfffff, 0x2b94, 0x7fc00000, 0x3000081},
11083{0x3000000, 0x7fbfffff, 0x636d24, 0x7fc00000, 0x3000081},
11084{0x3000000, 0x7fbfffff, 0x7fffff, 0x7fc00000, 0x3000081},
11085{0x3000000, 0x7fbfffff, 0x800000, 0x7fc00000, 0x3000001},
11086{0x3000000, 0x7fbfffff, 0x800002, 0x7fc00000, 0x3000001},
11087{0x3000000, 0x7fbfffff, 0x1398437, 0x7fc00000, 0x3000001},
11088{0x3000000, 0x7fbfffff, 0xba98d27, 0x7fc00000, 0x3000001},
11089{0x3000000, 0x7fbfffff, 0xba98d7a, 0x7fc00000, 0x3000001},
11090{0x3000000, 0x7fbfffff, 0x751f853a, 0x7fc00000, 0x3000001},
11091{0x3000000, 0x7fbfffff, 0x7f7ffff0, 0x7fc00000, 0x3000001},
11092{0x3000000, 0x7fbfffff, 0x7f7fffff, 0x7fc00000, 0x3000001},
11093{0x3000000, 0x7fbfffff, 0x7f800000, 0x7fc00000, 0x3000001},
11094{0x3000000, 0x7fbfffff, 0x7f800001, 0x7fc00000, 0x3000001},
11095{0x3000000, 0x7fbfffff, 0x7f984a37, 0x7fc00000, 0x3000001},
11096{0x3000000, 0x7fbfffff, 0x7fbfffff, 0x7fc00000, 0x3000001},
11097{0x3000000, 0x7fbfffff, 0x7fc00000, 0x7fc00000, 0x3000001},
11098{0x3000000, 0x7fbfffff, 0x7fd9ba98, 0x7fc00000, 0x3000001},
11099{0x3000000, 0x7fbfffff, 0x7fffffff, 0x7fc00000, 0x3000001},
11100{0x3000000, 0x7fbfffff, 0x80000000, 0x7fc00000, 0x3000001},
11101{0x3000000, 0x7fbfffff, 0x80000001, 0x7fc00000, 0x3000081},
11102{0x3000000, 0x7fbfffff, 0x80000076, 0x7fc00000, 0x3000081},
11103{0x3000000, 0x7fbfffff, 0x80002b94, 0x7fc00000, 0x3000081},
11104{0x3000000, 0x7fbfffff, 0x80636d24, 0x7fc00000, 0x3000081},
11105{0x3000000, 0x7fbfffff, 0x807fffff, 0x7fc00000, 0x3000081},
11106{0x3000000, 0x7fbfffff, 0x80800000, 0x7fc00000, 0x3000001},
11107{0x3000000, 0x7fbfffff, 0x80800002, 0x7fc00000, 0x3000001},
11108{0x3000000, 0x7fbfffff, 0x81398437, 0x7fc00000, 0x3000001},
11109{0x3000000, 0x7fbfffff, 0x8ba98d27, 0x7fc00000, 0x3000001},
11110{0x3000000, 0x7fbfffff, 0x8ba98d7a, 0x7fc00000, 0x3000001},
11111{0x3000000, 0x7fbfffff, 0xf51f853a, 0x7fc00000, 0x3000001},
11112{0x3000000, 0x7fbfffff, 0xff7ffff0, 0x7fc00000, 0x3000001},
11113{0x3000000, 0x7fbfffff, 0xff7fffff, 0x7fc00000, 0x3000001},
11114{0x3000000, 0x7fbfffff, 0xff800000, 0x7fc00000, 0x3000001},
11115{0x3000000, 0x7fbfffff, 0xff800001, 0x7fc00000, 0x3000001},
11116{0x3000000, 0x7fbfffff, 0xff984a37, 0x7fc00000, 0x3000001},
11117{0x3000000, 0x7fbfffff, 0xffbfffff, 0x7fc00000, 0x3000001},
11118{0x3000000, 0x7fbfffff, 0xffc00000, 0x7fc00000, 0x3000001},
11119{0x3000000, 0x7fbfffff, 0xffd9ba98, 0x7fc00000, 0x3000001},
11120{0x3000000, 0x7fbfffff, 0xffffffff, 0x7fc00000, 0x3000001},
11121{0x3000000, 0x7fbfffff, 0x4f3495cb, 0x7fc00000, 0x3000001},
11122{0x3000000, 0x7fbfffff, 0xe73a5134, 0x7fc00000, 0x3000001},
11123{0x3000000, 0x7fbfffff, 0x7c994e9e, 0x7fc00000, 0x3000001},
11124{0x3000000, 0x7fbfffff, 0x6164bd6c, 0x7fc00000, 0x3000001},
11125{0x3000000, 0x7fbfffff, 0x9503366, 0x7fc00000, 0x3000001},
11126{0x3000000, 0x7fbfffff, 0xbf5a97c9, 0x7fc00000, 0x3000001},
11127{0x3000000, 0x7fbfffff, 0xe6ff1a14, 0x7fc00000, 0x3000001},
11128{0x3000000, 0x7fbfffff, 0x77f31e2f, 0x7fc00000, 0x3000001},
11129{0x3000000, 0x7fbfffff, 0xaab4d7d8, 0x7fc00000, 0x3000001},
11130{0x3000000, 0x7fbfffff, 0x966320b, 0x7fc00000, 0x3000001},
11131{0x3000000, 0x7fbfffff, 0xb26bddee, 0x7fc00000, 0x3000001},
11132{0x3000000, 0x7fbfffff, 0xb5c8e5d3, 0x7fc00000, 0x3000001},
11133{0x3000000, 0x7fbfffff, 0x317285d3, 0x7fc00000, 0x3000001},
11134{0x3000000, 0x7fbfffff, 0x3c9623b1, 0x7fc00000, 0x3000001},
11135{0x3000000, 0x7fbfffff, 0x51fd2c7c, 0x7fc00000, 0x3000001},
11136{0x3000000, 0x7fbfffff, 0x7b906a6c, 0x7fc00000, 0x3000001},
11137{0x3000000, 0x7fc00000, 0x0, 0x7fc00000, 0x3000000},
11138{0x3000000, 0x7fc00000, 0x1, 0x7fc00000, 0x3000080},
11139{0x3000000, 0x7fc00000, 0x76, 0x7fc00000, 0x3000080},
11140{0x3000000, 0x7fc00000, 0x2b94, 0x7fc00000, 0x3000080},
11141{0x3000000, 0x7fc00000, 0x636d24, 0x7fc00000, 0x3000080},
11142{0x3000000, 0x7fc00000, 0x7fffff, 0x7fc00000, 0x3000080},
11143{0x3000000, 0x7fc00000, 0x800000, 0x7fc00000, 0x3000000},
11144{0x3000000, 0x7fc00000, 0x800002, 0x7fc00000, 0x3000000},
11145{0x3000000, 0x7fc00000, 0x1398437, 0x7fc00000, 0x3000000},
11146{0x3000000, 0x7fc00000, 0xba98d27, 0x7fc00000, 0x3000000},
11147{0x3000000, 0x7fc00000, 0xba98d7a, 0x7fc00000, 0x3000000},
11148{0x3000000, 0x7fc00000, 0x751f853a, 0x7fc00000, 0x3000000},
11149{0x3000000, 0x7fc00000, 0x7f7ffff0, 0x7fc00000, 0x3000000},
11150{0x3000000, 0x7fc00000, 0x7f7fffff, 0x7fc00000, 0x3000000},
11151{0x3000000, 0x7fc00000, 0x7f800000, 0x7fc00000, 0x3000000},
11152{0x3000000, 0x7fc00000, 0x7f800001, 0x7fc00000, 0x3000001},
11153{0x3000000, 0x7fc00000, 0x7f984a37, 0x7fc00000, 0x3000001},
11154{0x3000000, 0x7fc00000, 0x7fbfffff, 0x7fc00000, 0x3000001},
11155{0x3000000, 0x7fc00000, 0x7fc00000, 0x7fc00000, 0x3000000},
11156{0x3000000, 0x7fc00000, 0x7fd9ba98, 0x7fc00000, 0x3000000},
11157{0x3000000, 0x7fc00000, 0x7fffffff, 0x7fc00000, 0x3000000},
11158{0x3000000, 0x7fc00000, 0x80000000, 0x7fc00000, 0x3000000},
11159{0x3000000, 0x7fc00000, 0x80000001, 0x7fc00000, 0x3000080},
11160{0x3000000, 0x7fc00000, 0x80000076, 0x7fc00000, 0x3000080},
11161{0x3000000, 0x7fc00000, 0x80002b94, 0x7fc00000, 0x3000080},
11162{0x3000000, 0x7fc00000, 0x80636d24, 0x7fc00000, 0x3000080},
11163{0x3000000, 0x7fc00000, 0x807fffff, 0x7fc00000, 0x3000080},
11164{0x3000000, 0x7fc00000, 0x80800000, 0x7fc00000, 0x3000000},
11165{0x3000000, 0x7fc00000, 0x80800002, 0x7fc00000, 0x3000000},
11166{0x3000000, 0x7fc00000, 0x81398437, 0x7fc00000, 0x3000000},
11167{0x3000000, 0x7fc00000, 0x8ba98d27, 0x7fc00000, 0x3000000},
11168{0x3000000, 0x7fc00000, 0x8ba98d7a, 0x7fc00000, 0x3000000},
11169{0x3000000, 0x7fc00000, 0xf51f853a, 0x7fc00000, 0x3000000},
11170{0x3000000, 0x7fc00000, 0xff7ffff0, 0x7fc00000, 0x3000000},
11171{0x3000000, 0x7fc00000, 0xff7fffff, 0x7fc00000, 0x3000000},
11172{0x3000000, 0x7fc00000, 0xff800000, 0x7fc00000, 0x3000000},
11173{0x3000000, 0x7fc00000, 0xff800001, 0x7fc00000, 0x3000001},
11174{0x3000000, 0x7fc00000, 0xff984a37, 0x7fc00000, 0x3000001},
11175{0x3000000, 0x7fc00000, 0xffbfffff, 0x7fc00000, 0x3000001},
11176{0x3000000, 0x7fc00000, 0xffc00000, 0x7fc00000, 0x3000000},
11177{0x3000000, 0x7fc00000, 0xffd9ba98, 0x7fc00000, 0x3000000},
11178{0x3000000, 0x7fc00000, 0xffffffff, 0x7fc00000, 0x3000000},
11179{0x3000000, 0x7fc00000, 0x4f3495cb, 0x7fc00000, 0x3000000},
11180{0x3000000, 0x7fc00000, 0xe73a5134, 0x7fc00000, 0x3000000},
11181{0x3000000, 0x7fc00000, 0x7c994e9e, 0x7fc00000, 0x3000000},
11182{0x3000000, 0x7fc00000, 0x6164bd6c, 0x7fc00000, 0x3000000},
11183{0x3000000, 0x7fc00000, 0x9503366, 0x7fc00000, 0x3000000},
11184{0x3000000, 0x7fc00000, 0xbf5a97c9, 0x7fc00000, 0x3000000},
11185{0x3000000, 0x7fc00000, 0xe6ff1a14, 0x7fc00000, 0x3000000},
11186{0x3000000, 0x7fc00000, 0x77f31e2f, 0x7fc00000, 0x3000000},
11187{0x3000000, 0x7fc00000, 0xaab4d7d8, 0x7fc00000, 0x3000000},
11188{0x3000000, 0x7fc00000, 0x966320b, 0x7fc00000, 0x3000000},
11189{0x3000000, 0x7fc00000, 0xb26bddee, 0x7fc00000, 0x3000000},
11190{0x3000000, 0x7fc00000, 0xb5c8e5d3, 0x7fc00000, 0x3000000},
11191{0x3000000, 0x7fc00000, 0x317285d3, 0x7fc00000, 0x3000000},
11192{0x3000000, 0x7fc00000, 0x3c9623b1, 0x7fc00000, 0x3000000},
11193{0x3000000, 0x7fc00000, 0x51fd2c7c, 0x7fc00000, 0x3000000},
11194{0x3000000, 0x7fc00000, 0x7b906a6c, 0x7fc00000, 0x3000000},
11195{0x3000000, 0x7fd9ba98, 0x0, 0x7fc00000, 0x3000000},
11196{0x3000000, 0x7fd9ba98, 0x1, 0x7fc00000, 0x3000080},
11197{0x3000000, 0x7fd9ba98, 0x76, 0x7fc00000, 0x3000080},
11198{0x3000000, 0x7fd9ba98, 0x2b94, 0x7fc00000, 0x3000080},
11199{0x3000000, 0x7fd9ba98, 0x636d24, 0x7fc00000, 0x3000080},
11200{0x3000000, 0x7fd9ba98, 0x7fffff, 0x7fc00000, 0x3000080},
11201{0x3000000, 0x7fd9ba98, 0x800000, 0x7fc00000, 0x3000000},
11202{0x3000000, 0x7fd9ba98, 0x800002, 0x7fc00000, 0x3000000},
11203{0x3000000, 0x7fd9ba98, 0x1398437, 0x7fc00000, 0x3000000},
11204{0x3000000, 0x7fd9ba98, 0xba98d27, 0x7fc00000, 0x3000000},
11205{0x3000000, 0x7fd9ba98, 0xba98d7a, 0x7fc00000, 0x3000000},
11206{0x3000000, 0x7fd9ba98, 0x751f853a, 0x7fc00000, 0x3000000},
11207{0x3000000, 0x7fd9ba98, 0x7f7ffff0, 0x7fc00000, 0x3000000},
11208{0x3000000, 0x7fd9ba98, 0x7f7fffff, 0x7fc00000, 0x3000000},
11209{0x3000000, 0x7fd9ba98, 0x7f800000, 0x7fc00000, 0x3000000},
11210{0x3000000, 0x7fd9ba98, 0x7f800001, 0x7fc00000, 0x3000001},
11211{0x3000000, 0x7fd9ba98, 0x7f984a37, 0x7fc00000, 0x3000001},
11212{0x3000000, 0x7fd9ba98, 0x7fbfffff, 0x7fc00000, 0x3000001},
11213{0x3000000, 0x7fd9ba98, 0x7fc00000, 0x7fc00000, 0x3000000},
11214{0x3000000, 0x7fd9ba98, 0x7fd9ba98, 0x7fc00000, 0x3000000},
11215{0x3000000, 0x7fd9ba98, 0x7fffffff, 0x7fc00000, 0x3000000},
11216{0x3000000, 0x7fd9ba98, 0x80000000, 0x7fc00000, 0x3000000},
11217{0x3000000, 0x7fd9ba98, 0x80000001, 0x7fc00000, 0x3000080},
11218{0x3000000, 0x7fd9ba98, 0x80000076, 0x7fc00000, 0x3000080},
11219{0x3000000, 0x7fd9ba98, 0x80002b94, 0x7fc00000, 0x3000080},
11220{0x3000000, 0x7fd9ba98, 0x80636d24, 0x7fc00000, 0x3000080},
11221{0x3000000, 0x7fd9ba98, 0x807fffff, 0x7fc00000, 0x3000080},
11222{0x3000000, 0x7fd9ba98, 0x80800000, 0x7fc00000, 0x3000000},
11223{0x3000000, 0x7fd9ba98, 0x80800002, 0x7fc00000, 0x3000000},
11224{0x3000000, 0x7fd9ba98, 0x81398437, 0x7fc00000, 0x3000000},
11225{0x3000000, 0x7fd9ba98, 0x8ba98d27, 0x7fc00000, 0x3000000},
11226{0x3000000, 0x7fd9ba98, 0x8ba98d7a, 0x7fc00000, 0x3000000},
11227{0x3000000, 0x7fd9ba98, 0xf51f853a, 0x7fc00000, 0x3000000},
11228{0x3000000, 0x7fd9ba98, 0xff7ffff0, 0x7fc00000, 0x3000000},
11229{0x3000000, 0x7fd9ba98, 0xff7fffff, 0x7fc00000, 0x3000000},
11230{0x3000000, 0x7fd9ba98, 0xff800000, 0x7fc00000, 0x3000000},
11231{0x3000000, 0x7fd9ba98, 0xff800001, 0x7fc00000, 0x3000001},
11232{0x3000000, 0x7fd9ba98, 0xff984a37, 0x7fc00000, 0x3000001},
11233{0x3000000, 0x7fd9ba98, 0xffbfffff, 0x7fc00000, 0x3000001},
11234{0x3000000, 0x7fd9ba98, 0xffc00000, 0x7fc00000, 0x3000000},
11235{0x3000000, 0x7fd9ba98, 0xffd9ba98, 0x7fc00000, 0x3000000},
11236{0x3000000, 0x7fd9ba98, 0xffffffff, 0x7fc00000, 0x3000000},
11237{0x3000000, 0x7fd9ba98, 0x4f3495cb, 0x7fc00000, 0x3000000},
11238{0x3000000, 0x7fd9ba98, 0xe73a5134, 0x7fc00000, 0x3000000},
11239{0x3000000, 0x7fd9ba98, 0x7c994e9e, 0x7fc00000, 0x3000000},
11240{0x3000000, 0x7fd9ba98, 0x6164bd6c, 0x7fc00000, 0x3000000},
11241{0x3000000, 0x7fd9ba98, 0x9503366, 0x7fc00000, 0x3000000},
11242{0x3000000, 0x7fd9ba98, 0xbf5a97c9, 0x7fc00000, 0x3000000},
11243{0x3000000, 0x7fd9ba98, 0xe6ff1a14, 0x7fc00000, 0x3000000},
11244{0x3000000, 0x7fd9ba98, 0x77f31e2f, 0x7fc00000, 0x3000000},
11245{0x3000000, 0x7fd9ba98, 0xaab4d7d8, 0x7fc00000, 0x3000000},
11246{0x3000000, 0x7fd9ba98, 0x966320b, 0x7fc00000, 0x3000000},
11247{0x3000000, 0x7fd9ba98, 0xb26bddee, 0x7fc00000, 0x3000000},
11248{0x3000000, 0x7fd9ba98, 0xb5c8e5d3, 0x7fc00000, 0x3000000},
11249{0x3000000, 0x7fd9ba98, 0x317285d3, 0x7fc00000, 0x3000000},
11250{0x3000000, 0x7fd9ba98, 0x3c9623b1, 0x7fc00000, 0x3000000},
11251{0x3000000, 0x7fd9ba98, 0x51fd2c7c, 0x7fc00000, 0x3000000},
11252{0x3000000, 0x7fd9ba98, 0x7b906a6c, 0x7fc00000, 0x3000000},
11253{0x3000000, 0x7fffffff, 0x0, 0x7fc00000, 0x3000000},
11254{0x3000000, 0x7fffffff, 0x1, 0x7fc00000, 0x3000080},
11255{0x3000000, 0x7fffffff, 0x76, 0x7fc00000, 0x3000080},
11256{0x3000000, 0x7fffffff, 0x2b94, 0x7fc00000, 0x3000080},
11257{0x3000000, 0x7fffffff, 0x636d24, 0x7fc00000, 0x3000080},
11258{0x3000000, 0x7fffffff, 0x7fffff, 0x7fc00000, 0x3000080},
11259{0x3000000, 0x7fffffff, 0x800000, 0x7fc00000, 0x3000000},
11260{0x3000000, 0x7fffffff, 0x800002, 0x7fc00000, 0x3000000},
11261{0x3000000, 0x7fffffff, 0x1398437, 0x7fc00000, 0x3000000},
11262{0x3000000, 0x7fffffff, 0xba98d27, 0x7fc00000, 0x3000000},
11263{0x3000000, 0x7fffffff, 0xba98d7a, 0x7fc00000, 0x3000000},
11264{0x3000000, 0x7fffffff, 0x751f853a, 0x7fc00000, 0x3000000},
11265{0x3000000, 0x7fffffff, 0x7f7ffff0, 0x7fc00000, 0x3000000},
11266{0x3000000, 0x7fffffff, 0x7f7fffff, 0x7fc00000, 0x3000000},
11267{0x3000000, 0x7fffffff, 0x7f800000, 0x7fc00000, 0x3000000},
11268{0x3000000, 0x7fffffff, 0x7f800001, 0x7fc00000, 0x3000001},
11269{0x3000000, 0x7fffffff, 0x7f984a37, 0x7fc00000, 0x3000001},
11270{0x3000000, 0x7fffffff, 0x7fbfffff, 0x7fc00000, 0x3000001},
11271{0x3000000, 0x7fffffff, 0x7fc00000, 0x7fc00000, 0x3000000},
11272{0x3000000, 0x7fffffff, 0x7fd9ba98, 0x7fc00000, 0x3000000},
11273{0x3000000, 0x7fffffff, 0x7fffffff, 0x7fc00000, 0x3000000},
11274{0x3000000, 0x7fffffff, 0x80000000, 0x7fc00000, 0x3000000},
11275{0x3000000, 0x7fffffff, 0x80000001, 0x7fc00000, 0x3000080},
11276{0x3000000, 0x7fffffff, 0x80000076, 0x7fc00000, 0x3000080},
11277{0x3000000, 0x7fffffff, 0x80002b94, 0x7fc00000, 0x3000080},
11278{0x3000000, 0x7fffffff, 0x80636d24, 0x7fc00000, 0x3000080},
11279{0x3000000, 0x7fffffff, 0x807fffff, 0x7fc00000, 0x3000080},
11280{0x3000000, 0x7fffffff, 0x80800000, 0x7fc00000, 0x3000000},
11281{0x3000000, 0x7fffffff, 0x80800002, 0x7fc00000, 0x3000000},
11282{0x3000000, 0x7fffffff, 0x81398437, 0x7fc00000, 0x3000000},
11283{0x3000000, 0x7fffffff, 0x8ba98d27, 0x7fc00000, 0x3000000},
11284{0x3000000, 0x7fffffff, 0x8ba98d7a, 0x7fc00000, 0x3000000},
11285{0x3000000, 0x7fffffff, 0xf51f853a, 0x7fc00000, 0x3000000},
11286{0x3000000, 0x7fffffff, 0xff7ffff0, 0x7fc00000, 0x3000000},
11287{0x3000000, 0x7fffffff, 0xff7fffff, 0x7fc00000, 0x3000000},
11288{0x3000000, 0x7fffffff, 0xff800000, 0x7fc00000, 0x3000000},
11289{0x3000000, 0x7fffffff, 0xff800001, 0x7fc00000, 0x3000001},
11290{0x3000000, 0x7fffffff, 0xff984a37, 0x7fc00000, 0x3000001},
11291{0x3000000, 0x7fffffff, 0xffbfffff, 0x7fc00000, 0x3000001},
11292{0x3000000, 0x7fffffff, 0xffc00000, 0x7fc00000, 0x3000000},
11293{0x3000000, 0x7fffffff, 0xffd9ba98, 0x7fc00000, 0x3000000},
11294{0x3000000, 0x7fffffff, 0xffffffff, 0x7fc00000, 0x3000000},
11295{0x3000000, 0x7fffffff, 0x4f3495cb, 0x7fc00000, 0x3000000},
11296{0x3000000, 0x7fffffff, 0xe73a5134, 0x7fc00000, 0x3000000},
11297{0x3000000, 0x7fffffff, 0x7c994e9e, 0x7fc00000, 0x3000000},
11298{0x3000000, 0x7fffffff, 0x6164bd6c, 0x7fc00000, 0x3000000},
11299{0x3000000, 0x7fffffff, 0x9503366, 0x7fc00000, 0x3000000},
11300{0x3000000, 0x7fffffff, 0xbf5a97c9, 0x7fc00000, 0x3000000},
11301{0x3000000, 0x7fffffff, 0xe6ff1a14, 0x7fc00000, 0x3000000},
11302{0x3000000, 0x7fffffff, 0x77f31e2f, 0x7fc00000, 0x3000000},
11303{0x3000000, 0x7fffffff, 0xaab4d7d8, 0x7fc00000, 0x3000000},
11304{0x3000000, 0x7fffffff, 0x966320b, 0x7fc00000, 0x3000000},
11305{0x3000000, 0x7fffffff, 0xb26bddee, 0x7fc00000, 0x3000000},
11306{0x3000000, 0x7fffffff, 0xb5c8e5d3, 0x7fc00000, 0x3000000},
11307{0x3000000, 0x7fffffff, 0x317285d3, 0x7fc00000, 0x3000000},
11308{0x3000000, 0x7fffffff, 0x3c9623b1, 0x7fc00000, 0x3000000},
11309{0x3000000, 0x7fffffff, 0x51fd2c7c, 0x7fc00000, 0x3000000},
11310{0x3000000, 0x7fffffff, 0x7b906a6c, 0x7fc00000, 0x3000000},
11311{0x3000000, 0x80000000, 0x0, 0x0, 0x3000000},
11312{0x3000000, 0x80000000, 0x1, 0x0, 0x3000080},
11313{0x3000000, 0x80000000, 0x76, 0x0, 0x3000080},
11314{0x3000000, 0x80000000, 0x2b94, 0x0, 0x3000080},
11315{0x3000000, 0x80000000, 0x636d24, 0x0, 0x3000080},
11316{0x3000000, 0x80000000, 0x7fffff, 0x0, 0x3000080},
11317{0x3000000, 0x80000000, 0x800000, 0x800000, 0x3000000},
11318{0x3000000, 0x80000000, 0x800002, 0x800002, 0x3000000},
11319{0x3000000, 0x80000000, 0x1398437, 0x1398437, 0x3000000},
11320{0x3000000, 0x80000000, 0xba98d27, 0xba98d27, 0x3000000},
11321{0x3000000, 0x80000000, 0xba98d7a, 0xba98d7a, 0x3000000},
11322{0x3000000, 0x80000000, 0x751f853a, 0x751f853a, 0x3000000},
11323{0x3000000, 0x80000000, 0x7f7ffff0, 0x7f7ffff0, 0x3000000},
11324{0x3000000, 0x80000000, 0x7f7fffff, 0x7f7fffff, 0x3000000},
11325{0x3000000, 0x80000000, 0x7f800000, 0x7f800000, 0x3000000},
11326{0x3000000, 0x80000000, 0x7f800001, 0x7fc00000, 0x3000001},
11327{0x3000000, 0x80000000, 0x7f984a37, 0x7fc00000, 0x3000001},
11328{0x3000000, 0x80000000, 0x7fbfffff, 0x7fc00000, 0x3000001},
11329{0x3000000, 0x80000000, 0x7fc00000, 0x7fc00000, 0x3000000},
11330{0x3000000, 0x80000000, 0x7fd9ba98, 0x7fc00000, 0x3000000},
11331{0x3000000, 0x80000000, 0x7fffffff, 0x7fc00000, 0x3000000},
11332{0x3000000, 0x80000000, 0x80000000, 0x80000000, 0x3000000},
11333{0x3000000, 0x80000000, 0x80000001, 0x0, 0x3000080},
11334{0x3000000, 0x80000000, 0x80000076, 0x0, 0x3000080},
11335{0x3000000, 0x80000000, 0x80002b94, 0x0, 0x3000080},
11336{0x3000000, 0x80000000, 0x80636d24, 0x0, 0x3000080},
11337{0x3000000, 0x80000000, 0x807fffff, 0x0, 0x3000080},
11338{0x3000000, 0x80000000, 0x80800000, 0x80800000, 0x3000000},
11339{0x3000000, 0x80000000, 0x80800002, 0x80800002, 0x3000000},
11340{0x3000000, 0x80000000, 0x81398437, 0x81398437, 0x3000000},
11341{0x3000000, 0x80000000, 0x8ba98d27, 0x8ba98d27, 0x3000000},
11342{0x3000000, 0x80000000, 0x8ba98d7a, 0x8ba98d7a, 0x3000000},
11343{0x3000000, 0x80000000, 0xf51f853a, 0xf51f853a, 0x3000000},
11344{0x3000000, 0x80000000, 0xff7ffff0, 0xff7ffff0, 0x3000000},
11345{0x3000000, 0x80000000, 0xff7fffff, 0xff7fffff, 0x3000000},
11346{0x3000000, 0x80000000, 0xff800000, 0xff800000, 0x3000000},
11347{0x3000000, 0x80000000, 0xff800001, 0x7fc00000, 0x3000001},
11348{0x3000000, 0x80000000, 0xff984a37, 0x7fc00000, 0x3000001},
11349{0x3000000, 0x80000000, 0xffbfffff, 0x7fc00000, 0x3000001},
11350{0x3000000, 0x80000000, 0xffc00000, 0x7fc00000, 0x3000000},
11351{0x3000000, 0x80000000, 0xffd9ba98, 0x7fc00000, 0x3000000},
11352{0x3000000, 0x80000000, 0xffffffff, 0x7fc00000, 0x3000000},
11353{0x3000000, 0x80000000, 0x4f3495cb, 0x4f3495cb, 0x3000000},
11354{0x3000000, 0x80000000, 0xe73a5134, 0xe73a5134, 0x3000000},
11355{0x3000000, 0x80000000, 0x7c994e9e, 0x7c994e9e, 0x3000000},
11356{0x3000000, 0x80000000, 0x6164bd6c, 0x6164bd6c, 0x3000000},
11357{0x3000000, 0x80000000, 0x9503366, 0x9503366, 0x3000000},
11358{0x3000000, 0x80000000, 0xbf5a97c9, 0xbf5a97c9, 0x3000000},
11359{0x3000000, 0x80000000, 0xe6ff1a14, 0xe6ff1a14, 0x3000000},
11360{0x3000000, 0x80000000, 0x77f31e2f, 0x77f31e2f, 0x3000000},
11361{0x3000000, 0x80000000, 0xaab4d7d8, 0xaab4d7d8, 0x3000000},
11362{0x3000000, 0x80000000, 0x966320b, 0x966320b, 0x3000000},
11363{0x3000000, 0x80000000, 0xb26bddee, 0xb26bddee, 0x3000000},
11364{0x3000000, 0x80000000, 0xb5c8e5d3, 0xb5c8e5d3, 0x3000000},
11365{0x3000000, 0x80000000, 0x317285d3, 0x317285d3, 0x3000000},
11366{0x3000000, 0x80000000, 0x3c9623b1, 0x3c9623b1, 0x3000000},
11367{0x3000000, 0x80000000, 0x51fd2c7c, 0x51fd2c7c, 0x3000000},
11368{0x3000000, 0x80000000, 0x7b906a6c, 0x7b906a6c, 0x3000000},
11369{0x3000000, 0x80000001, 0x0, 0x0, 0x3000080},
11370{0x3000000, 0x80000001, 0x1, 0x0, 0x3000080},
11371{0x3000000, 0x80000001, 0x76, 0x0, 0x3000080},
11372{0x3000000, 0x80000001, 0x2b94, 0x0, 0x3000080},
11373{0x3000000, 0x80000001, 0x636d24, 0x0, 0x3000080},
11374{0x3000000, 0x80000001, 0x7fffff, 0x0, 0x3000080},
11375{0x3000000, 0x80000001, 0x800000, 0x800000, 0x3000080},
11376{0x3000000, 0x80000001, 0x800002, 0x800002, 0x3000080},
11377{0x3000000, 0x80000001, 0x1398437, 0x1398437, 0x3000080},
11378{0x3000000, 0x80000001, 0xba98d27, 0xba98d27, 0x3000080},
11379{0x3000000, 0x80000001, 0xba98d7a, 0xba98d7a, 0x3000080},
11380{0x3000000, 0x80000001, 0x751f853a, 0x751f853a, 0x3000080},
11381{0x3000000, 0x80000001, 0x7f7ffff0, 0x7f7ffff0, 0x3000080},
11382{0x3000000, 0x80000001, 0x7f7fffff, 0x7f7fffff, 0x3000080},
11383{0x3000000, 0x80000001, 0x7f800000, 0x7f800000, 0x3000080},
11384{0x3000000, 0x80000001, 0x7f800001, 0x7fc00000, 0x3000081},
11385{0x3000000, 0x80000001, 0x7f984a37, 0x7fc00000, 0x3000081},
11386{0x3000000, 0x80000001, 0x7fbfffff, 0x7fc00000, 0x3000081},
11387{0x3000000, 0x80000001, 0x7fc00000, 0x7fc00000, 0x3000080},
11388{0x3000000, 0x80000001, 0x7fd9ba98, 0x7fc00000, 0x3000080},
11389{0x3000000, 0x80000001, 0x7fffffff, 0x7fc00000, 0x3000080},
11390{0x3000000, 0x80000001, 0x80000000, 0x0, 0x3000080},
11391{0x3000000, 0x80000001, 0x80000001, 0x0, 0x3000080},
11392{0x3000000, 0x80000001, 0x80000076, 0x0, 0x3000080},
11393{0x3000000, 0x80000001, 0x80002b94, 0x0, 0x3000080},
11394{0x3000000, 0x80000001, 0x80636d24, 0x0, 0x3000080},
11395{0x3000000, 0x80000001, 0x807fffff, 0x0, 0x3000080},
11396{0x3000000, 0x80000001, 0x80800000, 0x80800000, 0x3000080},
11397{0x3000000, 0x80000001, 0x80800002, 0x80800002, 0x3000080},
11398{0x3000000, 0x80000001, 0x81398437, 0x81398437, 0x3000080},
11399{0x3000000, 0x80000001, 0x8ba98d27, 0x8ba98d27, 0x3000080},
11400{0x3000000, 0x80000001, 0x8ba98d7a, 0x8ba98d7a, 0x3000080},
11401{0x3000000, 0x80000001, 0xf51f853a, 0xf51f853a, 0x3000080},
11402{0x3000000, 0x80000001, 0xff7ffff0, 0xff7ffff0, 0x3000080},
11403{0x3000000, 0x80000001, 0xff7fffff, 0xff7fffff, 0x3000080},
11404{0x3000000, 0x80000001, 0xff800000, 0xff800000, 0x3000080},
11405{0x3000000, 0x80000001, 0xff800001, 0x7fc00000, 0x3000081},
11406{0x3000000, 0x80000001, 0xff984a37, 0x7fc00000, 0x3000081},
11407{0x3000000, 0x80000001, 0xffbfffff, 0x7fc00000, 0x3000081},
11408{0x3000000, 0x80000001, 0xffc00000, 0x7fc00000, 0x3000080},
11409{0x3000000, 0x80000001, 0xffd9ba98, 0x7fc00000, 0x3000080},
11410{0x3000000, 0x80000001, 0xffffffff, 0x7fc00000, 0x3000080},
11411{0x3000000, 0x80000001, 0x4f3495cb, 0x4f3495cb, 0x3000080},
11412{0x3000000, 0x80000001, 0xe73a5134, 0xe73a5134, 0x3000080},
11413{0x3000000, 0x80000001, 0x7c994e9e, 0x7c994e9e, 0x3000080},
11414{0x3000000, 0x80000001, 0x6164bd6c, 0x6164bd6c, 0x3000080},
11415{0x3000000, 0x80000001, 0x9503366, 0x9503366, 0x3000080},
11416{0x3000000, 0x80000001, 0xbf5a97c9, 0xbf5a97c9, 0x3000080},
11417{0x3000000, 0x80000001, 0xe6ff1a14, 0xe6ff1a14, 0x3000080},
11418{0x3000000, 0x80000001, 0x77f31e2f, 0x77f31e2f, 0x3000080},
11419{0x3000000, 0x80000001, 0xaab4d7d8, 0xaab4d7d8, 0x3000080},
11420{0x3000000, 0x80000001, 0x966320b, 0x966320b, 0x3000080},
11421{0x3000000, 0x80000001, 0xb26bddee, 0xb26bddee, 0x3000080},
11422{0x3000000, 0x80000001, 0xb5c8e5d3, 0xb5c8e5d3, 0x3000080},
11423{0x3000000, 0x80000001, 0x317285d3, 0x317285d3, 0x3000080},
11424{0x3000000, 0x80000001, 0x3c9623b1, 0x3c9623b1, 0x3000080},
11425{0x3000000, 0x80000001, 0x51fd2c7c, 0x51fd2c7c, 0x3000080},
11426{0x3000000, 0x80000001, 0x7b906a6c, 0x7b906a6c, 0x3000080},
11427{0x3000000, 0x80000076, 0x0, 0x0, 0x3000080},
11428{0x3000000, 0x80000076, 0x1, 0x0, 0x3000080},
11429{0x3000000, 0x80000076, 0x76, 0x0, 0x3000080},
11430{0x3000000, 0x80000076, 0x2b94, 0x0, 0x3000080},
11431{0x3000000, 0x80000076, 0x636d24, 0x0, 0x3000080},
11432{0x3000000, 0x80000076, 0x7fffff, 0x0, 0x3000080},
11433{0x3000000, 0x80000076, 0x800000, 0x800000, 0x3000080},
11434{0x3000000, 0x80000076, 0x800002, 0x800002, 0x3000080},
11435{0x3000000, 0x80000076, 0x1398437, 0x1398437, 0x3000080},
11436{0x3000000, 0x80000076, 0xba98d27, 0xba98d27, 0x3000080},
11437{0x3000000, 0x80000076, 0xba98d7a, 0xba98d7a, 0x3000080},
11438{0x3000000, 0x80000076, 0x751f853a, 0x751f853a, 0x3000080},
11439{0x3000000, 0x80000076, 0x7f7ffff0, 0x7f7ffff0, 0x3000080},
11440{0x3000000, 0x80000076, 0x7f7fffff, 0x7f7fffff, 0x3000080},
11441{0x3000000, 0x80000076, 0x7f800000, 0x7f800000, 0x3000080},
11442{0x3000000, 0x80000076, 0x7f800001, 0x7fc00000, 0x3000081},
11443{0x3000000, 0x80000076, 0x7f984a37, 0x7fc00000, 0x3000081},
11444{0x3000000, 0x80000076, 0x7fbfffff, 0x7fc00000, 0x3000081},
11445{0x3000000, 0x80000076, 0x7fc00000, 0x7fc00000, 0x3000080},
11446{0x3000000, 0x80000076, 0x7fd9ba98, 0x7fc00000, 0x3000080},
11447{0x3000000, 0x80000076, 0x7fffffff, 0x7fc00000, 0x3000080},
11448{0x3000000, 0x80000076, 0x80000000, 0x0, 0x3000080},
11449{0x3000000, 0x80000076, 0x80000001, 0x0, 0x3000080},
11450{0x3000000, 0x80000076, 0x80000076, 0x0, 0x3000080},
11451{0x3000000, 0x80000076, 0x80002b94, 0x0, 0x3000080},
11452{0x3000000, 0x80000076, 0x80636d24, 0x0, 0x3000080},
11453{0x3000000, 0x80000076, 0x807fffff, 0x0, 0x3000080},
11454{0x3000000, 0x80000076, 0x80800000, 0x80800000, 0x3000080},
11455{0x3000000, 0x80000076, 0x80800002, 0x80800002, 0x3000080},
11456{0x3000000, 0x80000076, 0x81398437, 0x81398437, 0x3000080},
11457{0x3000000, 0x80000076, 0x8ba98d27, 0x8ba98d27, 0x3000080},
11458{0x3000000, 0x80000076, 0x8ba98d7a, 0x8ba98d7a, 0x3000080},
11459{0x3000000, 0x80000076, 0xf51f853a, 0xf51f853a, 0x3000080},
11460{0x3000000, 0x80000076, 0xff7ffff0, 0xff7ffff0, 0x3000080},
11461{0x3000000, 0x80000076, 0xff7fffff, 0xff7fffff, 0x3000080},
11462{0x3000000, 0x80000076, 0xff800000, 0xff800000, 0x3000080},
11463{0x3000000, 0x80000076, 0xff800001, 0x7fc00000, 0x3000081},
11464{0x3000000, 0x80000076, 0xff984a37, 0x7fc00000, 0x3000081},
11465{0x3000000, 0x80000076, 0xffbfffff, 0x7fc00000, 0x3000081},
11466{0x3000000, 0x80000076, 0xffc00000, 0x7fc00000, 0x3000080},
11467{0x3000000, 0x80000076, 0xffd9ba98, 0x7fc00000, 0x3000080},
11468{0x3000000, 0x80000076, 0xffffffff, 0x7fc00000, 0x3000080},
11469{0x3000000, 0x80000076, 0x4f3495cb, 0x4f3495cb, 0x3000080},
11470{0x3000000, 0x80000076, 0xe73a5134, 0xe73a5134, 0x3000080},
11471{0x3000000, 0x80000076, 0x7c994e9e, 0x7c994e9e, 0x3000080},
11472{0x3000000, 0x80000076, 0x6164bd6c, 0x6164bd6c, 0x3000080},
11473{0x3000000, 0x80000076, 0x9503366, 0x9503366, 0x3000080},
11474{0x3000000, 0x80000076, 0xbf5a97c9, 0xbf5a97c9, 0x3000080},
11475{0x3000000, 0x80000076, 0xe6ff1a14, 0xe6ff1a14, 0x3000080},
11476{0x3000000, 0x80000076, 0x77f31e2f, 0x77f31e2f, 0x3000080},
11477{0x3000000, 0x80000076, 0xaab4d7d8, 0xaab4d7d8, 0x3000080},
11478{0x3000000, 0x80000076, 0x966320b, 0x966320b, 0x3000080},
11479{0x3000000, 0x80000076, 0xb26bddee, 0xb26bddee, 0x3000080},
11480{0x3000000, 0x80000076, 0xb5c8e5d3, 0xb5c8e5d3, 0x3000080},
11481{0x3000000, 0x80000076, 0x317285d3, 0x317285d3, 0x3000080},
11482{0x3000000, 0x80000076, 0x3c9623b1, 0x3c9623b1, 0x3000080},
11483{0x3000000, 0x80000076, 0x51fd2c7c, 0x51fd2c7c, 0x3000080},
11484{0x3000000, 0x80000076, 0x7b906a6c, 0x7b906a6c, 0x3000080},
11485{0x3000000, 0x80002b94, 0x0, 0x0, 0x3000080},
11486{0x3000000, 0x80002b94, 0x1, 0x0, 0x3000080},
11487{0x3000000, 0x80002b94, 0x76, 0x0, 0x3000080},
11488{0x3000000, 0x80002b94, 0x2b94, 0x0, 0x3000080},
11489{0x3000000, 0x80002b94, 0x636d24, 0x0, 0x3000080},
11490{0x3000000, 0x80002b94, 0x7fffff, 0x0, 0x3000080},
11491{0x3000000, 0x80002b94, 0x800000, 0x800000, 0x3000080},
11492{0x3000000, 0x80002b94, 0x800002, 0x800002, 0x3000080},
11493{0x3000000, 0x80002b94, 0x1398437, 0x1398437, 0x3000080},
11494{0x3000000, 0x80002b94, 0xba98d27, 0xba98d27, 0x3000080},
11495{0x3000000, 0x80002b94, 0xba98d7a, 0xba98d7a, 0x3000080},
11496{0x3000000, 0x80002b94, 0x751f853a, 0x751f853a, 0x3000080},
11497{0x3000000, 0x80002b94, 0x7f7ffff0, 0x7f7ffff0, 0x3000080},
11498{0x3000000, 0x80002b94, 0x7f7fffff, 0x7f7fffff, 0x3000080},
11499{0x3000000, 0x80002b94, 0x7f800000, 0x7f800000, 0x3000080},
11500{0x3000000, 0x80002b94, 0x7f800001, 0x7fc00000, 0x3000081},
11501{0x3000000, 0x80002b94, 0x7f984a37, 0x7fc00000, 0x3000081},
11502{0x3000000, 0x80002b94, 0x7fbfffff, 0x7fc00000, 0x3000081},
11503{0x3000000, 0x80002b94, 0x7fc00000, 0x7fc00000, 0x3000080},
11504{0x3000000, 0x80002b94, 0x7fd9ba98, 0x7fc00000, 0x3000080},
11505{0x3000000, 0x80002b94, 0x7fffffff, 0x7fc00000, 0x3000080},
11506{0x3000000, 0x80002b94, 0x80000000, 0x0, 0x3000080},
11507{0x3000000, 0x80002b94, 0x80000001, 0x0, 0x3000080},
11508{0x3000000, 0x80002b94, 0x80000076, 0x0, 0x3000080},
11509{0x3000000, 0x80002b94, 0x80002b94, 0x0, 0x3000080},
11510{0x3000000, 0x80002b94, 0x80636d24, 0x0, 0x3000080},
11511{0x3000000, 0x80002b94, 0x807fffff, 0x0, 0x3000080},
11512{0x3000000, 0x80002b94, 0x80800000, 0x80800000, 0x3000080},
11513{0x3000000, 0x80002b94, 0x80800002, 0x80800002, 0x3000080},
11514{0x3000000, 0x80002b94, 0x81398437, 0x81398437, 0x3000080},
11515{0x3000000, 0x80002b94, 0x8ba98d27, 0x8ba98d27, 0x3000080},
11516{0x3000000, 0x80002b94, 0x8ba98d7a, 0x8ba98d7a, 0x3000080},
11517{0x3000000, 0x80002b94, 0xf51f853a, 0xf51f853a, 0x3000080},
11518{0x3000000, 0x80002b94, 0xff7ffff0, 0xff7ffff0, 0x3000080},
11519{0x3000000, 0x80002b94, 0xff7fffff, 0xff7fffff, 0x3000080},
11520{0x3000000, 0x80002b94, 0xff800000, 0xff800000, 0x3000080},
11521{0x3000000, 0x80002b94, 0xff800001, 0x7fc00000, 0x3000081},
11522{0x3000000, 0x80002b94, 0xff984a37, 0x7fc00000, 0x3000081},
11523{0x3000000, 0x80002b94, 0xffbfffff, 0x7fc00000, 0x3000081},
11524{0x3000000, 0x80002b94, 0xffc00000, 0x7fc00000, 0x3000080},
11525{0x3000000, 0x80002b94, 0xffd9ba98, 0x7fc00000, 0x3000080},
11526{0x3000000, 0x80002b94, 0xffffffff, 0x7fc00000, 0x3000080},
11527{0x3000000, 0x80002b94, 0x4f3495cb, 0x4f3495cb, 0x3000080},
11528{0x3000000, 0x80002b94, 0xe73a5134, 0xe73a5134, 0x3000080},
11529{0x3000000, 0x80002b94, 0x7c994e9e, 0x7c994e9e, 0x3000080},
11530{0x3000000, 0x80002b94, 0x6164bd6c, 0x6164bd6c, 0x3000080},
11531{0x3000000, 0x80002b94, 0x9503366, 0x9503366, 0x3000080},
11532{0x3000000, 0x80002b94, 0xbf5a97c9, 0xbf5a97c9, 0x3000080},
11533{0x3000000, 0x80002b94, 0xe6ff1a14, 0xe6ff1a14, 0x3000080},
11534{0x3000000, 0x80002b94, 0x77f31e2f, 0x77f31e2f, 0x3000080},
11535{0x3000000, 0x80002b94, 0xaab4d7d8, 0xaab4d7d8, 0x3000080},
11536{0x3000000, 0x80002b94, 0x966320b, 0x966320b, 0x3000080},
11537{0x3000000, 0x80002b94, 0xb26bddee, 0xb26bddee, 0x3000080},
11538{0x3000000, 0x80002b94, 0xb5c8e5d3, 0xb5c8e5d3, 0x3000080},
11539{0x3000000, 0x80002b94, 0x317285d3, 0x317285d3, 0x3000080},
11540{0x3000000, 0x80002b94, 0x3c9623b1, 0x3c9623b1, 0x3000080},
11541{0x3000000, 0x80002b94, 0x51fd2c7c, 0x51fd2c7c, 0x3000080},
11542{0x3000000, 0x80002b94, 0x7b906a6c, 0x7b906a6c, 0x3000080},
11543{0x3000000, 0x80636d24, 0x0, 0x0, 0x3000080},
11544{0x3000000, 0x80636d24, 0x1, 0x0, 0x3000080},
11545{0x3000000, 0x80636d24, 0x76, 0x0, 0x3000080},
11546{0x3000000, 0x80636d24, 0x2b94, 0x0, 0x3000080},
11547{0x3000000, 0x80636d24, 0x636d24, 0x0, 0x3000080},
11548{0x3000000, 0x80636d24, 0x7fffff, 0x0, 0x3000080},
11549{0x3000000, 0x80636d24, 0x800000, 0x800000, 0x3000080},
11550{0x3000000, 0x80636d24, 0x800002, 0x800002, 0x3000080},
11551{0x3000000, 0x80636d24, 0x1398437, 0x1398437, 0x3000080},
11552{0x3000000, 0x80636d24, 0xba98d27, 0xba98d27, 0x3000080},
11553{0x3000000, 0x80636d24, 0xba98d7a, 0xba98d7a, 0x3000080},
11554{0x3000000, 0x80636d24, 0x751f853a, 0x751f853a, 0x3000080},
11555{0x3000000, 0x80636d24, 0x7f7ffff0, 0x7f7ffff0, 0x3000080},
11556{0x3000000, 0x80636d24, 0x7f7fffff, 0x7f7fffff, 0x3000080},
11557{0x3000000, 0x80636d24, 0x7f800000, 0x7f800000, 0x3000080},
11558{0x3000000, 0x80636d24, 0x7f800001, 0x7fc00000, 0x3000081},
11559{0x3000000, 0x80636d24, 0x7f984a37, 0x7fc00000, 0x3000081},
11560{0x3000000, 0x80636d24, 0x7fbfffff, 0x7fc00000, 0x3000081},
11561{0x3000000, 0x80636d24, 0x7fc00000, 0x7fc00000, 0x3000080},
11562{0x3000000, 0x80636d24, 0x7fd9ba98, 0x7fc00000, 0x3000080},
11563{0x3000000, 0x80636d24, 0x7fffffff, 0x7fc00000, 0x3000080},
11564{0x3000000, 0x80636d24, 0x80000000, 0x0, 0x3000080},
11565{0x3000000, 0x80636d24, 0x80000001, 0x0, 0x3000080},
11566{0x3000000, 0x80636d24, 0x80000076, 0x0, 0x3000080},
11567{0x3000000, 0x80636d24, 0x80002b94, 0x0, 0x3000080},
11568{0x3000000, 0x80636d24, 0x80636d24, 0x0, 0x3000080},
11569{0x3000000, 0x80636d24, 0x807fffff, 0x0, 0x3000080},
11570{0x3000000, 0x80636d24, 0x80800000, 0x80800000, 0x3000080},
11571{0x3000000, 0x80636d24, 0x80800002, 0x80800002, 0x3000080},
11572{0x3000000, 0x80636d24, 0x81398437, 0x81398437, 0x3000080},
11573{0x3000000, 0x80636d24, 0x8ba98d27, 0x8ba98d27, 0x3000080},
11574{0x3000000, 0x80636d24, 0x8ba98d7a, 0x8ba98d7a, 0x3000080},
11575{0x3000000, 0x80636d24, 0xf51f853a, 0xf51f853a, 0x3000080},
11576{0x3000000, 0x80636d24, 0xff7ffff0, 0xff7ffff0, 0x3000080},
11577{0x3000000, 0x80636d24, 0xff7fffff, 0xff7fffff, 0x3000080},
11578{0x3000000, 0x80636d24, 0xff800000, 0xff800000, 0x3000080},
11579{0x3000000, 0x80636d24, 0xff800001, 0x7fc00000, 0x3000081},
11580{0x3000000, 0x80636d24, 0xff984a37, 0x7fc00000, 0x3000081},
11581{0x3000000, 0x80636d24, 0xffbfffff, 0x7fc00000, 0x3000081},
11582{0x3000000, 0x80636d24, 0xffc00000, 0x7fc00000, 0x3000080},
11583{0x3000000, 0x80636d24, 0xffd9ba98, 0x7fc00000, 0x3000080},
11584{0x3000000, 0x80636d24, 0xffffffff, 0x7fc00000, 0x3000080},
11585{0x3000000, 0x80636d24, 0x4f3495cb, 0x4f3495cb, 0x3000080},
11586{0x3000000, 0x80636d24, 0xe73a5134, 0xe73a5134, 0x3000080},
11587{0x3000000, 0x80636d24, 0x7c994e9e, 0x7c994e9e, 0x3000080},
11588{0x3000000, 0x80636d24, 0x6164bd6c, 0x6164bd6c, 0x3000080},
11589{0x3000000, 0x80636d24, 0x9503366, 0x9503366, 0x3000080},
11590{0x3000000, 0x80636d24, 0xbf5a97c9, 0xbf5a97c9, 0x3000080},
11591{0x3000000, 0x80636d24, 0xe6ff1a14, 0xe6ff1a14, 0x3000080},
11592{0x3000000, 0x80636d24, 0x77f31e2f, 0x77f31e2f, 0x3000080},
11593{0x3000000, 0x80636d24, 0xaab4d7d8, 0xaab4d7d8, 0x3000080},
11594{0x3000000, 0x80636d24, 0x966320b, 0x966320b, 0x3000080},
11595{0x3000000, 0x80636d24, 0xb26bddee, 0xb26bddee, 0x3000080},
11596{0x3000000, 0x80636d24, 0xb5c8e5d3, 0xb5c8e5d3, 0x3000080},
11597{0x3000000, 0x80636d24, 0x317285d3, 0x317285d3, 0x3000080},
11598{0x3000000, 0x80636d24, 0x3c9623b1, 0x3c9623b1, 0x3000080},
11599{0x3000000, 0x80636d24, 0x51fd2c7c, 0x51fd2c7c, 0x3000080},
11600{0x3000000, 0x80636d24, 0x7b906a6c, 0x7b906a6c, 0x3000080},
11601{0x3000000, 0x807fffff, 0x0, 0x0, 0x3000080},
11602{0x3000000, 0x807fffff, 0x1, 0x0, 0x3000080},
11603{0x3000000, 0x807fffff, 0x76, 0x0, 0x3000080},
11604{0x3000000, 0x807fffff, 0x2b94, 0x0, 0x3000080},
11605{0x3000000, 0x807fffff, 0x636d24, 0x0, 0x3000080},
11606{0x3000000, 0x807fffff, 0x7fffff, 0x0, 0x3000080},
11607{0x3000000, 0x807fffff, 0x800000, 0x800000, 0x3000080},
11608{0x3000000, 0x807fffff, 0x800002, 0x800002, 0x3000080},
11609{0x3000000, 0x807fffff, 0x1398437, 0x1398437, 0x3000080},
11610{0x3000000, 0x807fffff, 0xba98d27, 0xba98d27, 0x3000080},
11611{0x3000000, 0x807fffff, 0xba98d7a, 0xba98d7a, 0x3000080},
11612{0x3000000, 0x807fffff, 0x751f853a, 0x751f853a, 0x3000080},
11613{0x3000000, 0x807fffff, 0x7f7ffff0, 0x7f7ffff0, 0x3000080},
11614{0x3000000, 0x807fffff, 0x7f7fffff, 0x7f7fffff, 0x3000080},
11615{0x3000000, 0x807fffff, 0x7f800000, 0x7f800000, 0x3000080},
11616{0x3000000, 0x807fffff, 0x7f800001, 0x7fc00000, 0x3000081},
11617{0x3000000, 0x807fffff, 0x7f984a37, 0x7fc00000, 0x3000081},
11618{0x3000000, 0x807fffff, 0x7fbfffff, 0x7fc00000, 0x3000081},
11619{0x3000000, 0x807fffff, 0x7fc00000, 0x7fc00000, 0x3000080},
11620{0x3000000, 0x807fffff, 0x7fd9ba98, 0x7fc00000, 0x3000080},
11621{0x3000000, 0x807fffff, 0x7fffffff, 0x7fc00000, 0x3000080},
11622{0x3000000, 0x807fffff, 0x80000000, 0x0, 0x3000080},
11623{0x3000000, 0x807fffff, 0x80000001, 0x0, 0x3000080},
11624{0x3000000, 0x807fffff, 0x80000076, 0x0, 0x3000080},
11625{0x3000000, 0x807fffff, 0x80002b94, 0x0, 0x3000080},
11626{0x3000000, 0x807fffff, 0x80636d24, 0x0, 0x3000080},
11627{0x3000000, 0x807fffff, 0x807fffff, 0x0, 0x3000080},
11628{0x3000000, 0x807fffff, 0x80800000, 0x80800000, 0x3000080},
11629{0x3000000, 0x807fffff, 0x80800002, 0x80800002, 0x3000080},
11630{0x3000000, 0x807fffff, 0x81398437, 0x81398437, 0x3000080},
11631{0x3000000, 0x807fffff, 0x8ba98d27, 0x8ba98d27, 0x3000080},
11632{0x3000000, 0x807fffff, 0x8ba98d7a, 0x8ba98d7a, 0x3000080},
11633{0x3000000, 0x807fffff, 0xf51f853a, 0xf51f853a, 0x3000080},
11634{0x3000000, 0x807fffff, 0xff7ffff0, 0xff7ffff0, 0x3000080},
11635{0x3000000, 0x807fffff, 0xff7fffff, 0xff7fffff, 0x3000080},
11636{0x3000000, 0x807fffff, 0xff800000, 0xff800000, 0x3000080},
11637{0x3000000, 0x807fffff, 0xff800001, 0x7fc00000, 0x3000081},
11638{0x3000000, 0x807fffff, 0xff984a37, 0x7fc00000, 0x3000081},
11639{0x3000000, 0x807fffff, 0xffbfffff, 0x7fc00000, 0x3000081},
11640{0x3000000, 0x807fffff, 0xffc00000, 0x7fc00000, 0x3000080},
11641{0x3000000, 0x807fffff, 0xffd9ba98, 0x7fc00000, 0x3000080},
11642{0x3000000, 0x807fffff, 0xffffffff, 0x7fc00000, 0x3000080},
11643{0x3000000, 0x807fffff, 0x4f3495cb, 0x4f3495cb, 0x3000080},
11644{0x3000000, 0x807fffff, 0xe73a5134, 0xe73a5134, 0x3000080},
11645{0x3000000, 0x807fffff, 0x7c994e9e, 0x7c994e9e, 0x3000080},
11646{0x3000000, 0x807fffff, 0x6164bd6c, 0x6164bd6c, 0x3000080},
11647{0x3000000, 0x807fffff, 0x9503366, 0x9503366, 0x3000080},
11648{0x3000000, 0x807fffff, 0xbf5a97c9, 0xbf5a97c9, 0x3000080},
11649{0x3000000, 0x807fffff, 0xe6ff1a14, 0xe6ff1a14, 0x3000080},
11650{0x3000000, 0x807fffff, 0x77f31e2f, 0x77f31e2f, 0x3000080},
11651{0x3000000, 0x807fffff, 0xaab4d7d8, 0xaab4d7d8, 0x3000080},
11652{0x3000000, 0x807fffff, 0x966320b, 0x966320b, 0x3000080},
11653{0x3000000, 0x807fffff, 0xb26bddee, 0xb26bddee, 0x3000080},
11654{0x3000000, 0x807fffff, 0xb5c8e5d3, 0xb5c8e5d3, 0x3000080},
11655{0x3000000, 0x807fffff, 0x317285d3, 0x317285d3, 0x3000080},
11656{0x3000000, 0x807fffff, 0x3c9623b1, 0x3c9623b1, 0x3000080},
11657{0x3000000, 0x807fffff, 0x51fd2c7c, 0x51fd2c7c, 0x3000080},
11658{0x3000000, 0x807fffff, 0x7b906a6c, 0x7b906a6c, 0x3000080},
11659{0x3000000, 0x80800000, 0x0, 0x80800000, 0x3000000},
11660{0x3000000, 0x80800000, 0x1, 0x80800000, 0x3000080},
11661{0x3000000, 0x80800000, 0x76, 0x80800000, 0x3000080},
11662{0x3000000, 0x80800000, 0x2b94, 0x80800000, 0x3000080},
11663{0x3000000, 0x80800000, 0x636d24, 0x80800000, 0x3000080},
11664{0x3000000, 0x80800000, 0x7fffff, 0x80800000, 0x3000080},
11665{0x3000000, 0x80800000, 0x800000, 0x0, 0x3000000},
11666{0x3000000, 0x80800000, 0x800002, 0x0, 0x3000008},
11667{0x3000000, 0x80800000, 0x1398437, 0xf3086e, 0x3000000},
11668{0x3000000, 0x80800000, 0xba98d27, 0xba98d25, 0x3000000},
11669{0x3000000, 0x80800000, 0xba98d7a, 0xba98d78, 0x3000000},
11670{0x3000000, 0x80800000, 0x751f853a, 0x751f853a, 0x3000010},
11671{0x3000000, 0x80800000, 0x7f7ffff0, 0x7f7ffff0, 0x3000010},
11672{0x3000000, 0x80800000, 0x7f7fffff, 0x7f7fffff, 0x3000010},
11673{0x3000000, 0x80800000, 0x7f800000, 0x7f800000, 0x3000000},
11674{0x3000000, 0x80800000, 0x7f800001, 0x7fc00000, 0x3000001},
11675{0x3000000, 0x80800000, 0x7f984a37, 0x7fc00000, 0x3000001},
11676{0x3000000, 0x80800000, 0x7fbfffff, 0x7fc00000, 0x3000001},
11677{0x3000000, 0x80800000, 0x7fc00000, 0x7fc00000, 0x3000000},
11678{0x3000000, 0x80800000, 0x7fd9ba98, 0x7fc00000, 0x3000000},
11679{0x3000000, 0x80800000, 0x7fffffff, 0x7fc00000, 0x3000000},
11680{0x3000000, 0x80800000, 0x80000000, 0x80800000, 0x3000000},
11681{0x3000000, 0x80800000, 0x80000001, 0x80800000, 0x3000080},
11682{0x3000000, 0x80800000, 0x80000076, 0x80800000, 0x3000080},
11683{0x3000000, 0x80800000, 0x80002b94, 0x80800000, 0x3000080},
11684{0x3000000, 0x80800000, 0x80636d24, 0x80800000, 0x3000080},
11685{0x3000000, 0x80800000, 0x807fffff, 0x80800000, 0x3000080},
11686{0x3000000, 0x80800000, 0x80800000, 0x81000000, 0x3000000},
11687{0x3000000, 0x80800000, 0x80800002, 0x81000001, 0x3000000},
11688{0x3000000, 0x80800000, 0x81398437, 0x81798437, 0x3000000},
11689{0x3000000, 0x80800000, 0x8ba98d27, 0x8ba98d29, 0x3000000},
11690{0x3000000, 0x80800000, 0x8ba98d7a, 0x8ba98d7c, 0x3000000},
11691{0x3000000, 0x80800000, 0xf51f853a, 0xf51f853a, 0x3000010},
11692{0x3000000, 0x80800000, 0xff7ffff0, 0xff7ffff0, 0x3000010},
11693{0x3000000, 0x80800000, 0xff7fffff, 0xff7fffff, 0x3000010},
11694{0x3000000, 0x80800000, 0xff800000, 0xff800000, 0x3000000},
11695{0x3000000, 0x80800000, 0xff800001, 0x7fc00000, 0x3000001},
11696{0x3000000, 0x80800000, 0xff984a37, 0x7fc00000, 0x3000001},
11697{0x3000000, 0x80800000, 0xffbfffff, 0x7fc00000, 0x3000001},
11698{0x3000000, 0x80800000, 0xffc00000, 0x7fc00000, 0x3000000},
11699{0x3000000, 0x80800000, 0xffd9ba98, 0x7fc00000, 0x3000000},
11700{0x3000000, 0x80800000, 0xffffffff, 0x7fc00000, 0x3000000},
11701{0x3000000, 0x80800000, 0x4f3495cb, 0x4f3495cb, 0x3000010},
11702{0x3000000, 0x80800000, 0xe73a5134, 0xe73a5134, 0x3000010},
11703{0x3000000, 0x80800000, 0x7c994e9e, 0x7c994e9e, 0x3000010},
11704{0x3000000, 0x80800000, 0x6164bd6c, 0x6164bd6c, 0x3000010},
11705{0x3000000, 0x80800000, 0x9503366, 0x9503326, 0x3000000},
11706{0x3000000, 0x80800000, 0xbf5a97c9, 0xbf5a97c9, 0x3000010},
11707{0x3000000, 0x80800000, 0xe6ff1a14, 0xe6ff1a14, 0x3000010},
11708{0x3000000, 0x80800000, 0x77f31e2f, 0x77f31e2f, 0x3000010},
11709{0x3000000, 0x80800000, 0xaab4d7d8, 0xaab4d7d8, 0x3000010},
11710{0x3000000, 0x80800000, 0x966320b, 0x96631cb, 0x3000000},
11711{0x3000000, 0x80800000, 0xb26bddee, 0xb26bddee, 0x3000010},
11712{0x3000000, 0x80800000, 0xb5c8e5d3, 0xb5c8e5d3, 0x3000010},
11713{0x3000000, 0x80800000, 0x317285d3, 0x317285d3, 0x3000010},
11714{0x3000000, 0x80800000, 0x3c9623b1, 0x3c9623b1, 0x3000010},
11715{0x3000000, 0x80800000, 0x51fd2c7c, 0x51fd2c7c, 0x3000010},
11716{0x3000000, 0x80800000, 0x7b906a6c, 0x7b906a6c, 0x3000010},
11717{0x3000000, 0x80800002, 0x0, 0x80800002, 0x3000000},
11718{0x3000000, 0x80800002, 0x1, 0x80800002, 0x3000080},
11719{0x3000000, 0x80800002, 0x76, 0x80800002, 0x3000080},
11720{0x3000000, 0x80800002, 0x2b94, 0x80800002, 0x3000080},
11721{0x3000000, 0x80800002, 0x636d24, 0x80800002, 0x3000080},
11722{0x3000000, 0x80800002, 0x7fffff, 0x80800002, 0x3000080},
11723{0x3000000, 0x80800002, 0x800000, 0x0, 0x3000008},
11724{0x3000000, 0x80800002, 0x800002, 0x0, 0x3000000},
11725{0x3000000, 0x80800002, 0x1398437, 0xf3086c, 0x3000000},
11726{0x3000000, 0x80800002, 0xba98d27, 0xba98d25, 0x3000010},
11727{0x3000000, 0x80800002, 0xba98d7a, 0xba98d78, 0x3000010},
11728{0x3000000, 0x80800002, 0x751f853a, 0x751f853a, 0x3000010},
11729{0x3000000, 0x80800002, 0x7f7ffff0, 0x7f7ffff0, 0x3000010},
11730{0x3000000, 0x80800002, 0x7f7fffff, 0x7f7fffff, 0x3000010},
11731{0x3000000, 0x80800002, 0x7f800000, 0x7f800000, 0x3000000},
11732{0x3000000, 0x80800002, 0x7f800001, 0x7fc00000, 0x3000001},
11733{0x3000000, 0x80800002, 0x7f984a37, 0x7fc00000, 0x3000001},
11734{0x3000000, 0x80800002, 0x7fbfffff, 0x7fc00000, 0x3000001},
11735{0x3000000, 0x80800002, 0x7fc00000, 0x7fc00000, 0x3000000},
11736{0x3000000, 0x80800002, 0x7fd9ba98, 0x7fc00000, 0x3000000},
11737{0x3000000, 0x80800002, 0x7fffffff, 0x7fc00000, 0x3000000},
11738{0x3000000, 0x80800002, 0x80000000, 0x80800002, 0x3000000},
11739{0x3000000, 0x80800002, 0x80000001, 0x80800002, 0x3000080},
11740{0x3000000, 0x80800002, 0x80000076, 0x80800002, 0x3000080},
11741{0x3000000, 0x80800002, 0x80002b94, 0x80800002, 0x3000080},
11742{0x3000000, 0x80800002, 0x80636d24, 0x80800002, 0x3000080},
11743{0x3000000, 0x80800002, 0x807fffff, 0x80800002, 0x3000080},
11744{0x3000000, 0x80800002, 0x80800000, 0x81000001, 0x3000000},
11745{0x3000000, 0x80800002, 0x80800002, 0x81000002, 0x3000000},
11746{0x3000000, 0x80800002, 0x81398437, 0x81798438, 0x3000000},
11747{0x3000000, 0x80800002, 0x8ba98d27, 0x8ba98d29, 0x3000010},
11748{0x3000000, 0x80800002, 0x8ba98d7a, 0x8ba98d7c, 0x3000010},
11749{0x3000000, 0x80800002, 0xf51f853a, 0xf51f853a, 0x3000010},
11750{0x3000000, 0x80800002, 0xff7ffff0, 0xff7ffff0, 0x3000010},
11751{0x3000000, 0x80800002, 0xff7fffff, 0xff7fffff, 0x3000010},
11752{0x3000000, 0x80800002, 0xff800000, 0xff800000, 0x3000000},
11753{0x3000000, 0x80800002, 0xff800001, 0x7fc00000, 0x3000001},
11754{0x3000000, 0x80800002, 0xff984a37, 0x7fc00000, 0x3000001},
11755{0x3000000, 0x80800002, 0xffbfffff, 0x7fc00000, 0x3000001},
11756{0x3000000, 0x80800002, 0xffc00000, 0x7fc00000, 0x3000000},
11757{0x3000000, 0x80800002, 0xffd9ba98, 0x7fc00000, 0x3000000},
11758{0x3000000, 0x80800002, 0xffffffff, 0x7fc00000, 0x3000000},
11759{0x3000000, 0x80800002, 0x4f3495cb, 0x4f3495cb, 0x3000010},
11760{0x3000000, 0x80800002, 0xe73a5134, 0xe73a5134, 0x3000010},
11761{0x3000000, 0x80800002, 0x7c994e9e, 0x7c994e9e, 0x3000010},
11762{0x3000000, 0x80800002, 0x6164bd6c, 0x6164bd6c, 0x3000010},
11763{0x3000000, 0x80800002, 0x9503366, 0x9503326, 0x3000010},
11764{0x3000000, 0x80800002, 0xbf5a97c9, 0xbf5a97c9, 0x3000010},
11765{0x3000000, 0x80800002, 0xe6ff1a14, 0xe6ff1a14, 0x3000010},
11766{0x3000000, 0x80800002, 0x77f31e2f, 0x77f31e2f, 0x3000010},
11767{0x3000000, 0x80800002, 0xaab4d7d8, 0xaab4d7d8, 0x3000010},
11768{0x3000000, 0x80800002, 0x966320b, 0x96631cb, 0x3000010},
11769{0x3000000, 0x80800002, 0xb26bddee, 0xb26bddee, 0x3000010},
11770{0x3000000, 0x80800002, 0xb5c8e5d3, 0xb5c8e5d3, 0x3000010},
11771{0x3000000, 0x80800002, 0x317285d3, 0x317285d3, 0x3000010},
11772{0x3000000, 0x80800002, 0x3c9623b1, 0x3c9623b1, 0x3000010},
11773{0x3000000, 0x80800002, 0x51fd2c7c, 0x51fd2c7c, 0x3000010},
11774{0x3000000, 0x80800002, 0x7b906a6c, 0x7b906a6c, 0x3000010},
11775{0x3000000, 0x81398437, 0x0, 0x81398437, 0x3000000},
11776{0x3000000, 0x81398437, 0x1, 0x81398437, 0x3000080},
11777{0x3000000, 0x81398437, 0x76, 0x81398437, 0x3000080},
11778{0x3000000, 0x81398437, 0x2b94, 0x81398437, 0x3000080},
11779{0x3000000, 0x81398437, 0x636d24, 0x81398437, 0x3000080},
11780{0x3000000, 0x81398437, 0x7fffff, 0x81398437, 0x3000080},
11781{0x3000000, 0x81398437, 0x800000, 0x80f3086e, 0x3000000},
11782{0x3000000, 0x81398437, 0x800002, 0x80f3086c, 0x3000000},
11783{0x3000000, 0x81398437, 0x1398437, 0x0, 0x3000000},
11784{0x3000000, 0x81398437, 0xba98d27, 0xba98d21, 0x3000010},
11785{0x3000000, 0x81398437, 0xba98d7a, 0xba98d74, 0x3000010},
11786{0x3000000, 0x81398437, 0x751f853a, 0x751f853a, 0x3000010},
11787{0x3000000, 0x81398437, 0x7f7ffff0, 0x7f7ffff0, 0x3000010},
11788{0x3000000, 0x81398437, 0x7f7fffff, 0x7f7fffff, 0x3000010},
11789{0x3000000, 0x81398437, 0x7f800000, 0x7f800000, 0x3000000},
11790{0x3000000, 0x81398437, 0x7f800001, 0x7fc00000, 0x3000001},
11791{0x3000000, 0x81398437, 0x7f984a37, 0x7fc00000, 0x3000001},
11792{0x3000000, 0x81398437, 0x7fbfffff, 0x7fc00000, 0x3000001},
11793{0x3000000, 0x81398437, 0x7fc00000, 0x7fc00000, 0x3000000},
11794{0x3000000, 0x81398437, 0x7fd9ba98, 0x7fc00000, 0x3000000},
11795{0x3000000, 0x81398437, 0x7fffffff, 0x7fc00000, 0x3000000},
11796{0x3000000, 0x81398437, 0x80000000, 0x81398437, 0x3000000},
11797{0x3000000, 0x81398437, 0x80000001, 0x81398437, 0x3000080},
11798{0x3000000, 0x81398437, 0x80000076, 0x81398437, 0x3000080},
11799{0x3000000, 0x81398437, 0x80002b94, 0x81398437, 0x3000080},
11800{0x3000000, 0x81398437, 0x80636d24, 0x81398437, 0x3000080},
11801{0x3000000, 0x81398437, 0x807fffff, 0x81398437, 0x3000080},
11802{0x3000000, 0x81398437, 0x80800000, 0x81798437, 0x3000000},
11803{0x3000000, 0x81398437, 0x80800002, 0x81798438, 0x3000000},
11804{0x3000000, 0x81398437, 0x81398437, 0x81b98437, 0x3000000},
11805{0x3000000, 0x81398437, 0x8ba98d27, 0x8ba98d2d, 0x3000010},
11806{0x3000000, 0x81398437, 0x8ba98d7a, 0x8ba98d80, 0x3000010},
11807{0x3000000, 0x81398437, 0xf51f853a, 0xf51f853a, 0x3000010},
11808{0x3000000, 0x81398437, 0xff7ffff0, 0xff7ffff0, 0x3000010},
11809{0x3000000, 0x81398437, 0xff7fffff, 0xff7fffff, 0x3000010},
11810{0x3000000, 0x81398437, 0xff800000, 0xff800000, 0x3000000},
11811{0x3000000, 0x81398437, 0xff800001, 0x7fc00000, 0x3000001},
11812{0x3000000, 0x81398437, 0xff984a37, 0x7fc00000, 0x3000001},
11813{0x3000000, 0x81398437, 0xffbfffff, 0x7fc00000, 0x3000001},
11814{0x3000000, 0x81398437, 0xffc00000, 0x7fc00000, 0x3000000},
11815{0x3000000, 0x81398437, 0xffd9ba98, 0x7fc00000, 0x3000000},
11816{0x3000000, 0x81398437, 0xffffffff, 0x7fc00000, 0x3000000},
11817{0x3000000, 0x81398437, 0x4f3495cb, 0x4f3495cb, 0x3000010},
11818{0x3000000, 0x81398437, 0xe73a5134, 0xe73a5134, 0x3000010},
11819{0x3000000, 0x81398437, 0x7c994e9e, 0x7c994e9e, 0x3000010},
11820{0x3000000, 0x81398437, 0x6164bd6c, 0x6164bd6c, 0x3000010},
11821{0x3000000, 0x81398437, 0x9503366, 0x95032ac, 0x3000010},
11822{0x3000000, 0x81398437, 0xbf5a97c9, 0xbf5a97c9, 0x3000010},
11823{0x3000000, 0x81398437, 0xe6ff1a14, 0xe6ff1a14, 0x3000010},
11824{0x3000000, 0x81398437, 0x77f31e2f, 0x77f31e2f, 0x3000010},
11825{0x3000000, 0x81398437, 0xaab4d7d8, 0xaab4d7d8, 0x3000010},
11826{0x3000000, 0x81398437, 0x966320b, 0x9663151, 0x3000010},
11827{0x3000000, 0x81398437, 0xb26bddee, 0xb26bddee, 0x3000010},
11828{0x3000000, 0x81398437, 0xb5c8e5d3, 0xb5c8e5d3, 0x3000010},
11829{0x3000000, 0x81398437, 0x317285d3, 0x317285d3, 0x3000010},
11830{0x3000000, 0x81398437, 0x3c9623b1, 0x3c9623b1, 0x3000010},
11831{0x3000000, 0x81398437, 0x51fd2c7c, 0x51fd2c7c, 0x3000010},
11832{0x3000000, 0x81398437, 0x7b906a6c, 0x7b906a6c, 0x3000010},
11833{0x3000000, 0x8ba98d27, 0x0, 0x8ba98d27, 0x3000000},
11834{0x3000000, 0x8ba98d27, 0x1, 0x8ba98d27, 0x3000080},
11835{0x3000000, 0x8ba98d27, 0x76, 0x8ba98d27, 0x3000080},
11836{0x3000000, 0x8ba98d27, 0x2b94, 0x8ba98d27, 0x3000080},
11837{0x3000000, 0x8ba98d27, 0x636d24, 0x8ba98d27, 0x3000080},
11838{0x3000000, 0x8ba98d27, 0x7fffff, 0x8ba98d27, 0x3000080},
11839{0x3000000, 0x8ba98d27, 0x800000, 0x8ba98d25, 0x3000000},
11840{0x3000000, 0x8ba98d27, 0x800002, 0x8ba98d25, 0x3000010},
11841{0x3000000, 0x8ba98d27, 0x1398437, 0x8ba98d21, 0x3000010},
11842{0x3000000, 0x8ba98d27, 0xba98d27, 0x0, 0x3000000},
11843{0x3000000, 0x8ba98d27, 0xba98d7a, 0x3260000, 0x3000000},
11844{0x3000000, 0x8ba98d27, 0x751f853a, 0x751f853a, 0x3000010},
11845{0x3000000, 0x8ba98d27, 0x7f7ffff0, 0x7f7ffff0, 0x3000010},
11846{0x3000000, 0x8ba98d27, 0x7f7fffff, 0x7f7fffff, 0x3000010},
11847{0x3000000, 0x8ba98d27, 0x7f800000, 0x7f800000, 0x3000000},
11848{0x3000000, 0x8ba98d27, 0x7f800001, 0x7fc00000, 0x3000001},
11849{0x3000000, 0x8ba98d27, 0x7f984a37, 0x7fc00000, 0x3000001},
11850{0x3000000, 0x8ba98d27, 0x7fbfffff, 0x7fc00000, 0x3000001},
11851{0x3000000, 0x8ba98d27, 0x7fc00000, 0x7fc00000, 0x3000000},
11852{0x3000000, 0x8ba98d27, 0x7fd9ba98, 0x7fc00000, 0x3000000},
11853{0x3000000, 0x8ba98d27, 0x7fffffff, 0x7fc00000, 0x3000000},
11854{0x3000000, 0x8ba98d27, 0x80000000, 0x8ba98d27, 0x3000000},
11855{0x3000000, 0x8ba98d27, 0x80000001, 0x8ba98d27, 0x3000080},
11856{0x3000000, 0x8ba98d27, 0x80000076, 0x8ba98d27, 0x3000080},
11857{0x3000000, 0x8ba98d27, 0x80002b94, 0x8ba98d27, 0x3000080},
11858{0x3000000, 0x8ba98d27, 0x80636d24, 0x8ba98d27, 0x3000080},
11859{0x3000000, 0x8ba98d27, 0x807fffff, 0x8ba98d27, 0x3000080},
11860{0x3000000, 0x8ba98d27, 0x80800000, 0x8ba98d29, 0x3000000},
11861{0x3000000, 0x8ba98d27, 0x80800002, 0x8ba98d29, 0x3000010},
11862{0x3000000, 0x8ba98d27, 0x81398437, 0x8ba98d2d, 0x3000010},
11863{0x3000000, 0x8ba98d27, 0x8ba98d27, 0x8c298d27, 0x3000000},
11864{0x3000000, 0x8ba98d27, 0x8ba98d7a, 0x8c298d50, 0x3000010},
11865{0x3000000, 0x8ba98d27, 0xf51f853a, 0xf51f853a, 0x3000010},
11866{0x3000000, 0x8ba98d27, 0xff7ffff0, 0xff7ffff0, 0x3000010},
11867{0x3000000, 0x8ba98d27, 0xff7fffff, 0xff7fffff, 0x3000010},
11868{0x3000000, 0x8ba98d27, 0xff800000, 0xff800000, 0x3000000},
11869{0x3000000, 0x8ba98d27, 0xff800001, 0x7fc00000, 0x3000001},
11870{0x3000000, 0x8ba98d27, 0xff984a37, 0x7fc00000, 0x3000001},
11871{0x3000000, 0x8ba98d27, 0xffbfffff, 0x7fc00000, 0x3000001},
11872{0x3000000, 0x8ba98d27, 0xffc00000, 0x7fc00000, 0x3000000},
11873{0x3000000, 0x8ba98d27, 0xffd9ba98, 0x7fc00000, 0x3000000},
11874{0x3000000, 0x8ba98d27, 0xffffffff, 0x7fc00000, 0x3000000},
11875{0x3000000, 0x8ba98d27, 0x4f3495cb, 0x4f3495cb, 0x3000010},
11876{0x3000000, 0x8ba98d27, 0xe73a5134, 0xe73a5134, 0x3000010},
11877{0x3000000, 0x8ba98d27, 0x7c994e9e, 0x7c994e9e, 0x3000010},
11878{0x3000000, 0x8ba98d27, 0x6164bd6c, 0x6164bd6c, 0x3000010},
11879{0x3000000, 0x8ba98d27, 0x9503366, 0x8ba30b8c, 0x3000010},
11880{0x3000000, 0x8ba98d27, 0xbf5a97c9, 0xbf5a97c9, 0x3000010},
11881{0x3000000, 0x8ba98d27, 0xe6ff1a14, 0xe6ff1a14, 0x3000010},
11882{0x3000000, 0x8ba98d27, 0x77f31e2f, 0x77f31e2f, 0x3000010},
11883{0x3000000, 0x8ba98d27, 0xaab4d7d8, 0xaab4d7d8, 0x3000010},
11884{0x3000000, 0x8ba98d27, 0x966320b, 0x8ba25b97, 0x3000010},
11885{0x3000000, 0x8ba98d27, 0xb26bddee, 0xb26bddee, 0x3000010},
11886{0x3000000, 0x8ba98d27, 0xb5c8e5d3, 0xb5c8e5d3, 0x3000010},
11887{0x3000000, 0x8ba98d27, 0x317285d3, 0x317285d3, 0x3000010},
11888{0x3000000, 0x8ba98d27, 0x3c9623b1, 0x3c9623b1, 0x3000010},
11889{0x3000000, 0x8ba98d27, 0x51fd2c7c, 0x51fd2c7c, 0x3000010},
11890{0x3000000, 0x8ba98d27, 0x7b906a6c, 0x7b906a6c, 0x3000010},
11891{0x3000000, 0x8ba98d7a, 0x0, 0x8ba98d7a, 0x3000000},
11892{0x3000000, 0x8ba98d7a, 0x1, 0x8ba98d7a, 0x3000080},
11893{0x3000000, 0x8ba98d7a, 0x76, 0x8ba98d7a, 0x3000080},
11894{0x3000000, 0x8ba98d7a, 0x2b94, 0x8ba98d7a, 0x3000080},
11895{0x3000000, 0x8ba98d7a, 0x636d24, 0x8ba98d7a, 0x3000080},
11896{0x3000000, 0x8ba98d7a, 0x7fffff, 0x8ba98d7a, 0x3000080},
11897{0x3000000, 0x8ba98d7a, 0x800000, 0x8ba98d78, 0x3000000},
11898{0x3000000, 0x8ba98d7a, 0x800002, 0x8ba98d78, 0x3000010},
11899{0x3000000, 0x8ba98d7a, 0x1398437, 0x8ba98d74, 0x3000010},
11900{0x3000000, 0x8ba98d7a, 0xba98d27, 0x83260000, 0x3000000},
11901{0x3000000, 0x8ba98d7a, 0xba98d7a, 0x0, 0x3000000},
11902{0x3000000, 0x8ba98d7a, 0x751f853a, 0x751f853a, 0x3000010},
11903{0x3000000, 0x8ba98d7a, 0x7f7ffff0, 0x7f7ffff0, 0x3000010},
11904{0x3000000, 0x8ba98d7a, 0x7f7fffff, 0x7f7fffff, 0x3000010},
11905{0x3000000, 0x8ba98d7a, 0x7f800000, 0x7f800000, 0x3000000},
11906{0x3000000, 0x8ba98d7a, 0x7f800001, 0x7fc00000, 0x3000001},
11907{0x3000000, 0x8ba98d7a, 0x7f984a37, 0x7fc00000, 0x3000001},
11908{0x3000000, 0x8ba98d7a, 0x7fbfffff, 0x7fc00000, 0x3000001},
11909{0x3000000, 0x8ba98d7a, 0x7fc00000, 0x7fc00000, 0x3000000},
11910{0x3000000, 0x8ba98d7a, 0x7fd9ba98, 0x7fc00000, 0x3000000},
11911{0x3000000, 0x8ba98d7a, 0x7fffffff, 0x7fc00000, 0x3000000},
11912{0x3000000, 0x8ba98d7a, 0x80000000, 0x8ba98d7a, 0x3000000},
11913{0x3000000, 0x8ba98d7a, 0x80000001, 0x8ba98d7a, 0x3000080},
11914{0x3000000, 0x8ba98d7a, 0x80000076, 0x8ba98d7a, 0x3000080},
11915{0x3000000, 0x8ba98d7a, 0x80002b94, 0x8ba98d7a, 0x3000080},
11916{0x3000000, 0x8ba98d7a, 0x80636d24, 0x8ba98d7a, 0x3000080},
11917{0x3000000, 0x8ba98d7a, 0x807fffff, 0x8ba98d7a, 0x3000080},
11918{0x3000000, 0x8ba98d7a, 0x80800000, 0x8ba98d7c, 0x3000000},
11919{0x3000000, 0x8ba98d7a, 0x80800002, 0x8ba98d7c, 0x3000010},
11920{0x3000000, 0x8ba98d7a, 0x81398437, 0x8ba98d80, 0x3000010},
11921{0x3000000, 0x8ba98d7a, 0x8ba98d27, 0x8c298d50, 0x3000010},
11922{0x3000000, 0x8ba98d7a, 0x8ba98d7a, 0x8c298d7a, 0x3000000},
11923{0x3000000, 0x8ba98d7a, 0xf51f853a, 0xf51f853a, 0x3000010},
11924{0x3000000, 0x8ba98d7a, 0xff7ffff0, 0xff7ffff0, 0x3000010},
11925{0x3000000, 0x8ba98d7a, 0xff7fffff, 0xff7fffff, 0x3000010},
11926{0x3000000, 0x8ba98d7a, 0xff800000, 0xff800000, 0x3000000},
11927{0x3000000, 0x8ba98d7a, 0xff800001, 0x7fc00000, 0x3000001},
11928{0x3000000, 0x8ba98d7a, 0xff984a37, 0x7fc00000, 0x3000001},
11929{0x3000000, 0x8ba98d7a, 0xffbfffff, 0x7fc00000, 0x3000001},
11930{0x3000000, 0x8ba98d7a, 0xffc00000, 0x7fc00000, 0x3000000},
11931{0x3000000, 0x8ba98d7a, 0xffd9ba98, 0x7fc00000, 0x3000000},
11932{0x3000000, 0x8ba98d7a, 0xffffffff, 0x7fc00000, 0x3000000},
11933{0x3000000, 0x8ba98d7a, 0x4f3495cb, 0x4f3495cb, 0x3000010},
11934{0x3000000, 0x8ba98d7a, 0xe73a5134, 0xe73a5134, 0x3000010},
11935{0x3000000, 0x8ba98d7a, 0x7c994e9e, 0x7c994e9e, 0x3000010},
11936{0x3000000, 0x8ba98d7a, 0x6164bd6c, 0x6164bd6c, 0x3000010},
11937{0x3000000, 0x8ba98d7a, 0x9503366, 0x8ba30bdf, 0x3000010},
11938{0x3000000, 0x8ba98d7a, 0xbf5a97c9, 0xbf5a97c9, 0x3000010},
11939{0x3000000, 0x8ba98d7a, 0xe6ff1a14, 0xe6ff1a14, 0x3000010},
11940{0x3000000, 0x8ba98d7a, 0x77f31e2f, 0x77f31e2f, 0x3000010},
11941{0x3000000, 0x8ba98d7a, 0xaab4d7d8, 0xaab4d7d8, 0x3000010},
11942{0x3000000, 0x8ba98d7a, 0x966320b, 0x8ba25bea, 0x3000010},
11943{0x3000000, 0x8ba98d7a, 0xb26bddee, 0xb26bddee, 0x3000010},
11944{0x3000000, 0x8ba98d7a, 0xb5c8e5d3, 0xb5c8e5d3, 0x3000010},
11945{0x3000000, 0x8ba98d7a, 0x317285d3, 0x317285d3, 0x3000010},
11946{0x3000000, 0x8ba98d7a, 0x3c9623b1, 0x3c9623b1, 0x3000010},
11947{0x3000000, 0x8ba98d7a, 0x51fd2c7c, 0x51fd2c7c, 0x3000010},
11948{0x3000000, 0x8ba98d7a, 0x7b906a6c, 0x7b906a6c, 0x3000010},
11949{0x3000000, 0xf51f853a, 0x0, 0xf51f853a, 0x3000000},
11950{0x3000000, 0xf51f853a, 0x1, 0xf51f853a, 0x3000080},
11951{0x3000000, 0xf51f853a, 0x76, 0xf51f853a, 0x3000080},
11952{0x3000000, 0xf51f853a, 0x2b94, 0xf51f853a, 0x3000080},
11953{0x3000000, 0xf51f853a, 0x636d24, 0xf51f853a, 0x3000080},
11954{0x3000000, 0xf51f853a, 0x7fffff, 0xf51f853a, 0x3000080},
11955{0x3000000, 0xf51f853a, 0x800000, 0xf51f853a, 0x3000010},
11956{0x3000000, 0xf51f853a, 0x800002, 0xf51f853a, 0x3000010},
11957{0x3000000, 0xf51f853a, 0x1398437, 0xf51f853a, 0x3000010},
11958{0x3000000, 0xf51f853a, 0xba98d27, 0xf51f853a, 0x3000010},
11959{0x3000000, 0xf51f853a, 0xba98d7a, 0xf51f853a, 0x3000010},
11960{0x3000000, 0xf51f853a, 0x751f853a, 0x0, 0x3000000},
11961{0x3000000, 0xf51f853a, 0x7f7ffff0, 0x7f7fffe6, 0x3000010},
11962{0x3000000, 0xf51f853a, 0x7f7fffff, 0x7f7ffff5, 0x3000010},
11963{0x3000000, 0xf51f853a, 0x7f800000, 0x7f800000, 0x3000000},
11964{0x3000000, 0xf51f853a, 0x7f800001, 0x7fc00000, 0x3000001},
11965{0x3000000, 0xf51f853a, 0x7f984a37, 0x7fc00000, 0x3000001},
11966{0x3000000, 0xf51f853a, 0x7fbfffff, 0x7fc00000, 0x3000001},
11967{0x3000000, 0xf51f853a, 0x7fc00000, 0x7fc00000, 0x3000000},
11968{0x3000000, 0xf51f853a, 0x7fd9ba98, 0x7fc00000, 0x3000000},
11969{0x3000000, 0xf51f853a, 0x7fffffff, 0x7fc00000, 0x3000000},
11970{0x3000000, 0xf51f853a, 0x80000000, 0xf51f853a, 0x3000000},
11971{0x3000000, 0xf51f853a, 0x80000001, 0xf51f853a, 0x3000080},
11972{0x3000000, 0xf51f853a, 0x80000076, 0xf51f853a, 0x3000080},
11973{0x3000000, 0xf51f853a, 0x80002b94, 0xf51f853a, 0x3000080},
11974{0x3000000, 0xf51f853a, 0x80636d24, 0xf51f853a, 0x3000080},
11975{0x3000000, 0xf51f853a, 0x807fffff, 0xf51f853a, 0x3000080},
11976{0x3000000, 0xf51f853a, 0x80800000, 0xf51f853a, 0x3000010},
11977{0x3000000, 0xf51f853a, 0x80800002, 0xf51f853a, 0x3000010},
11978{0x3000000, 0xf51f853a, 0x81398437, 0xf51f853a, 0x3000010},
11979{0x3000000, 0xf51f853a, 0x8ba98d27, 0xf51f853a, 0x3000010},
11980{0x3000000, 0xf51f853a, 0x8ba98d7a, 0xf51f853a, 0x3000010},
11981{0x3000000, 0xf51f853a, 0xf51f853a, 0xf59f853a, 0x3000000},
11982{0x3000000, 0xf51f853a, 0xff7ffff0, 0xff7ffffa, 0x3000010},
11983{0x3000000, 0xf51f853a, 0xff7fffff, 0xff800000, 0x3000014},
11984{0x3000000, 0xf51f853a, 0xff800000, 0xff800000, 0x3000000},
11985{0x3000000, 0xf51f853a, 0xff800001, 0x7fc00000, 0x3000001},
11986{0x3000000, 0xf51f853a, 0xff984a37, 0x7fc00000, 0x3000001},
11987{0x3000000, 0xf51f853a, 0xffbfffff, 0x7fc00000, 0x3000001},
11988{0x3000000, 0xf51f853a, 0xffc00000, 0x7fc00000, 0x3000000},
11989{0x3000000, 0xf51f853a, 0xffd9ba98, 0x7fc00000, 0x3000000},
11990{0x3000000, 0xf51f853a, 0xffffffff, 0x7fc00000, 0x3000000},
11991{0x3000000, 0xf51f853a, 0x4f3495cb, 0xf51f853a, 0x3000010},
11992{0x3000000, 0xf51f853a, 0xe73a5134, 0xf51f853a, 0x3000010},
11993{0x3000000, 0xf51f853a, 0x7c994e9e, 0x7c994d5f, 0x3000010},
11994{0x3000000, 0xf51f853a, 0x6164bd6c, 0xf51f853a, 0x3000010},
11995{0x3000000, 0xf51f853a, 0x9503366, 0xf51f853a, 0x3000010},
11996{0x3000000, 0xf51f853a, 0xbf5a97c9, 0xf51f853a, 0x3000010},
11997{0x3000000, 0xf51f853a, 0xe6ff1a14, 0xf51f853a, 0x3000010},
11998{0x3000000, 0xf51f853a, 0x77f31e2f, 0x77ee2205, 0x3000010},
11999{0x3000000, 0xf51f853a, 0xaab4d7d8, 0xf51f853a, 0x3000010},
12000{0x3000000, 0xf51f853a, 0x966320b, 0xf51f853a, 0x3000010},
12001{0x3000000, 0xf51f853a, 0xb26bddee, 0xf51f853a, 0x3000010},
12002{0x3000000, 0xf51f853a, 0xb5c8e5d3, 0xf51f853a, 0x3000010},
12003{0x3000000, 0xf51f853a, 0x317285d3, 0xf51f853a, 0x3000010},
12004{0x3000000, 0xf51f853a, 0x3c9623b1, 0xf51f853a, 0x3000010},
12005{0x3000000, 0xf51f853a, 0x51fd2c7c, 0xf51f853a, 0x3000010},
12006{0x3000000, 0xf51f853a, 0x7b906a6c, 0x7b906570, 0x3000010},
12007{0x3000000, 0xff7ffff0, 0x0, 0xff7ffff0, 0x3000000},
12008{0x3000000, 0xff7ffff0, 0x1, 0xff7ffff0, 0x3000080},
12009{0x3000000, 0xff7ffff0, 0x76, 0xff7ffff0, 0x3000080},
12010{0x3000000, 0xff7ffff0, 0x2b94, 0xff7ffff0, 0x3000080},
12011{0x3000000, 0xff7ffff0, 0x636d24, 0xff7ffff0, 0x3000080},
12012{0x3000000, 0xff7ffff0, 0x7fffff, 0xff7ffff0, 0x3000080},
12013{0x3000000, 0xff7ffff0, 0x800000, 0xff7ffff0, 0x3000010},
12014{0x3000000, 0xff7ffff0, 0x800002, 0xff7ffff0, 0x3000010},
12015{0x3000000, 0xff7ffff0, 0x1398437, 0xff7ffff0, 0x3000010},
12016{0x3000000, 0xff7ffff0, 0xba98d27, 0xff7ffff0, 0x3000010},
12017{0x3000000, 0xff7ffff0, 0xba98d7a, 0xff7ffff0, 0x3000010},
12018{0x3000000, 0xff7ffff0, 0x751f853a, 0xff7fffe6, 0x3000010},
12019{0x3000000, 0xff7ffff0, 0x7f7ffff0, 0x0, 0x3000000},
12020{0x3000000, 0xff7ffff0, 0x7f7fffff, 0x75700000, 0x3000000},
12021{0x3000000, 0xff7ffff0, 0x7f800000, 0x7f800000, 0x3000000},
12022{0x3000000, 0xff7ffff0, 0x7f800001, 0x7fc00000, 0x3000001},
12023{0x3000000, 0xff7ffff0, 0x7f984a37, 0x7fc00000, 0x3000001},
12024{0x3000000, 0xff7ffff0, 0x7fbfffff, 0x7fc00000, 0x3000001},
12025{0x3000000, 0xff7ffff0, 0x7fc00000, 0x7fc00000, 0x3000000},
12026{0x3000000, 0xff7ffff0, 0x7fd9ba98, 0x7fc00000, 0x3000000},
12027{0x3000000, 0xff7ffff0, 0x7fffffff, 0x7fc00000, 0x3000000},
12028{0x3000000, 0xff7ffff0, 0x80000000, 0xff7ffff0, 0x3000000},
12029{0x3000000, 0xff7ffff0, 0x80000001, 0xff7ffff0, 0x3000080},
12030{0x3000000, 0xff7ffff0, 0x80000076, 0xff7ffff0, 0x3000080},
12031{0x3000000, 0xff7ffff0, 0x80002b94, 0xff7ffff0, 0x3000080},
12032{0x3000000, 0xff7ffff0, 0x80636d24, 0xff7ffff0, 0x3000080},
12033{0x3000000, 0xff7ffff0, 0x807fffff, 0xff7ffff0, 0x3000080},
12034{0x3000000, 0xff7ffff0, 0x80800000, 0xff7ffff0, 0x3000010},
12035{0x3000000, 0xff7ffff0, 0x80800002, 0xff7ffff0, 0x3000010},
12036{0x3000000, 0xff7ffff0, 0x81398437, 0xff7ffff0, 0x3000010},
12037{0x3000000, 0xff7ffff0, 0x8ba98d27, 0xff7ffff0, 0x3000010},
12038{0x3000000, 0xff7ffff0, 0x8ba98d7a, 0xff7ffff0, 0x3000010},
12039{0x3000000, 0xff7ffff0, 0xf51f853a, 0xff7ffffa, 0x3000010},
12040{0x3000000, 0xff7ffff0, 0xff7ffff0, 0xff800000, 0x3000014},
12041{0x3000000, 0xff7ffff0, 0xff7fffff, 0xff800000, 0x3000014},
12042{0x3000000, 0xff7ffff0, 0xff800000, 0xff800000, 0x3000000},
12043{0x3000000, 0xff7ffff0, 0xff800001, 0x7fc00000, 0x3000001},
12044{0x3000000, 0xff7ffff0, 0xff984a37, 0x7fc00000, 0x3000001},
12045{0x3000000, 0xff7ffff0, 0xffbfffff, 0x7fc00000, 0x3000001},
12046{0x3000000, 0xff7ffff0, 0xffc00000, 0x7fc00000, 0x3000000},
12047{0x3000000, 0xff7ffff0, 0xffd9ba98, 0x7fc00000, 0x3000000},
12048{0x3000000, 0xff7ffff0, 0xffffffff, 0x7fc00000, 0x3000000},
12049{0x3000000, 0xff7ffff0, 0x4f3495cb, 0xff7ffff0, 0x3000010},
12050{0x3000000, 0xff7ffff0, 0xe73a5134, 0xff7ffff0, 0x3000010},
12051{0x3000000, 0xff7ffff0, 0x7c994e9e, 0xff7b357b, 0x3000010},
12052{0x3000000, 0xff7ffff0, 0x6164bd6c, 0xff7ffff0, 0x3000010},
12053{0x3000000, 0xff7ffff0, 0x9503366, 0xff7ffff0, 0x3000010},
12054{0x3000000, 0xff7ffff0, 0xbf5a97c9, 0xff7ffff0, 0x3000010},
12055{0x3000000, 0xff7ffff0, 0xe6ff1a14, 0xff7ffff0, 0x3000010},
12056{0x3000000, 0xff7ffff0, 0x77f31e2f, 0xff7ffe0a, 0x3000010},
12057{0x3000000, 0xff7ffff0, 0xaab4d7d8, 0xff7ffff0, 0x3000010},
12058{0x3000000, 0xff7ffff0, 0x966320b, 0xff7ffff0, 0x3000010},
12059{0x3000000, 0xff7ffff0, 0xb26bddee, 0xff7ffff0, 0x3000010},
12060{0x3000000, 0xff7ffff0, 0xb5c8e5d3, 0xff7ffff0, 0x3000010},
12061{0x3000000, 0xff7ffff0, 0x317285d3, 0xff7ffff0, 0x3000010},
12062{0x3000000, 0xff7ffff0, 0x3c9623b1, 0xff7ffff0, 0x3000010},
12063{0x3000000, 0xff7ffff0, 0x51fd2c7c, 0xff7ffff0, 0x3000010},
12064{0x3000000, 0xff7ffff0, 0x7b906a6c, 0xff7edf1b, 0x3000010},
12065{0x3000000, 0xff7fffff, 0x0, 0xff7fffff, 0x3000000},
12066{0x3000000, 0xff7fffff, 0x1, 0xff7fffff, 0x3000080},
12067{0x3000000, 0xff7fffff, 0x76, 0xff7fffff, 0x3000080},
12068{0x3000000, 0xff7fffff, 0x2b94, 0xff7fffff, 0x3000080},
12069{0x3000000, 0xff7fffff, 0x636d24, 0xff7fffff, 0x3000080},
12070{0x3000000, 0xff7fffff, 0x7fffff, 0xff7fffff, 0x3000080},
12071{0x3000000, 0xff7fffff, 0x800000, 0xff7fffff, 0x3000010},
12072{0x3000000, 0xff7fffff, 0x800002, 0xff7fffff, 0x3000010},
12073{0x3000000, 0xff7fffff, 0x1398437, 0xff7fffff, 0x3000010},
12074{0x3000000, 0xff7fffff, 0xba98d27, 0xff7fffff, 0x3000010},
12075{0x3000000, 0xff7fffff, 0xba98d7a, 0xff7fffff, 0x3000010},
12076{0x3000000, 0xff7fffff, 0x751f853a, 0xff7ffff5, 0x3000010},
12077{0x3000000, 0xff7fffff, 0x7f7ffff0, 0xf5700000, 0x3000000},
12078{0x3000000, 0xff7fffff, 0x7f7fffff, 0x0, 0x3000000},
12079{0x3000000, 0xff7fffff, 0x7f800000, 0x7f800000, 0x3000000},
12080{0x3000000, 0xff7fffff, 0x7f800001, 0x7fc00000, 0x3000001},
12081{0x3000000, 0xff7fffff, 0x7f984a37, 0x7fc00000, 0x3000001},
12082{0x3000000, 0xff7fffff, 0x7fbfffff, 0x7fc00000, 0x3000001},
12083{0x3000000, 0xff7fffff, 0x7fc00000, 0x7fc00000, 0x3000000},
12084{0x3000000, 0xff7fffff, 0x7fd9ba98, 0x7fc00000, 0x3000000},
12085{0x3000000, 0xff7fffff, 0x7fffffff, 0x7fc00000, 0x3000000},
12086{0x3000000, 0xff7fffff, 0x80000000, 0xff7fffff, 0x3000000},
12087{0x3000000, 0xff7fffff, 0x80000001, 0xff7fffff, 0x3000080},
12088{0x3000000, 0xff7fffff, 0x80000076, 0xff7fffff, 0x3000080},
12089{0x3000000, 0xff7fffff, 0x80002b94, 0xff7fffff, 0x3000080},
12090{0x3000000, 0xff7fffff, 0x80636d24, 0xff7fffff, 0x3000080},
12091{0x3000000, 0xff7fffff, 0x807fffff, 0xff7fffff, 0x3000080},
12092{0x3000000, 0xff7fffff, 0x80800000, 0xff7fffff, 0x3000010},
12093{0x3000000, 0xff7fffff, 0x80800002, 0xff7fffff, 0x3000010},
12094{0x3000000, 0xff7fffff, 0x81398437, 0xff7fffff, 0x3000010},
12095{0x3000000, 0xff7fffff, 0x8ba98d27, 0xff7fffff, 0x3000010},
12096{0x3000000, 0xff7fffff, 0x8ba98d7a, 0xff7fffff, 0x3000010},
12097{0x3000000, 0xff7fffff, 0xf51f853a, 0xff800000, 0x3000014},
12098{0x3000000, 0xff7fffff, 0xff7ffff0, 0xff800000, 0x3000014},
12099{0x3000000, 0xff7fffff, 0xff7fffff, 0xff800000, 0x3000014},
12100{0x3000000, 0xff7fffff, 0xff800000, 0xff800000, 0x3000000},
12101{0x3000000, 0xff7fffff, 0xff800001, 0x7fc00000, 0x3000001},
12102{0x3000000, 0xff7fffff, 0xff984a37, 0x7fc00000, 0x3000001},
12103{0x3000000, 0xff7fffff, 0xffbfffff, 0x7fc00000, 0x3000001},
12104{0x3000000, 0xff7fffff, 0xffc00000, 0x7fc00000, 0x3000000},
12105{0x3000000, 0xff7fffff, 0xffd9ba98, 0x7fc00000, 0x3000000},
12106{0x3000000, 0xff7fffff, 0xffffffff, 0x7fc00000, 0x3000000},
12107{0x3000000, 0xff7fffff, 0x4f3495cb, 0xff7fffff, 0x3000010},
12108{0x3000000, 0xff7fffff, 0xe73a5134, 0xff7fffff, 0x3000010},
12109{0x3000000, 0xff7fffff, 0x7c994e9e, 0xff7b358a, 0x3000010},
12110{0x3000000, 0xff7fffff, 0x6164bd6c, 0xff7fffff, 0x3000010},
12111{0x3000000, 0xff7fffff, 0x9503366, 0xff7fffff, 0x3000010},
12112{0x3000000, 0xff7fffff, 0xbf5a97c9, 0xff7fffff, 0x3000010},
12113{0x3000000, 0xff7fffff, 0xe6ff1a14, 0xff7fffff, 0x3000010},
12114{0x3000000, 0xff7fffff, 0x77f31e2f, 0xff7ffe19, 0x3000010},
12115{0x3000000, 0xff7fffff, 0xaab4d7d8, 0xff7fffff, 0x3000010},
12116{0x3000000, 0xff7fffff, 0x966320b, 0xff7fffff, 0x3000010},
12117{0x3000000, 0xff7fffff, 0xb26bddee, 0xff7fffff, 0x3000010},
12118{0x3000000, 0xff7fffff, 0xb5c8e5d3, 0xff7fffff, 0x3000010},
12119{0x3000000, 0xff7fffff, 0x317285d3, 0xff7fffff, 0x3000010},
12120{0x3000000, 0xff7fffff, 0x3c9623b1, 0xff7fffff, 0x3000010},
12121{0x3000000, 0xff7fffff, 0x51fd2c7c, 0xff7fffff, 0x3000010},
12122{0x3000000, 0xff7fffff, 0x7b906a6c, 0xff7edf2a, 0x3000010},
12123{0x3000000, 0xff800000, 0x0, 0xff800000, 0x3000000},
12124{0x3000000, 0xff800000, 0x1, 0xff800000, 0x3000080},
12125{0x3000000, 0xff800000, 0x76, 0xff800000, 0x3000080},
12126{0x3000000, 0xff800000, 0x2b94, 0xff800000, 0x3000080},
12127{0x3000000, 0xff800000, 0x636d24, 0xff800000, 0x3000080},
12128{0x3000000, 0xff800000, 0x7fffff, 0xff800000, 0x3000080},
12129{0x3000000, 0xff800000, 0x800000, 0xff800000, 0x3000000},
12130{0x3000000, 0xff800000, 0x800002, 0xff800000, 0x3000000},
12131{0x3000000, 0xff800000, 0x1398437, 0xff800000, 0x3000000},
12132{0x3000000, 0xff800000, 0xba98d27, 0xff800000, 0x3000000},
12133{0x3000000, 0xff800000, 0xba98d7a, 0xff800000, 0x3000000},
12134{0x3000000, 0xff800000, 0x751f853a, 0xff800000, 0x3000000},
12135{0x3000000, 0xff800000, 0x7f7ffff0, 0xff800000, 0x3000000},
12136{0x3000000, 0xff800000, 0x7f7fffff, 0xff800000, 0x3000000},
12137{0x3000000, 0xff800000, 0x7f800000, 0x7fc00000, 0x3000001},
12138{0x3000000, 0xff800000, 0x7f800001, 0x7fc00000, 0x3000001},
12139{0x3000000, 0xff800000, 0x7f984a37, 0x7fc00000, 0x3000001},
12140{0x3000000, 0xff800000, 0x7fbfffff, 0x7fc00000, 0x3000001},
12141{0x3000000, 0xff800000, 0x7fc00000, 0x7fc00000, 0x3000000},
12142{0x3000000, 0xff800000, 0x7fd9ba98, 0x7fc00000, 0x3000000},
12143{0x3000000, 0xff800000, 0x7fffffff, 0x7fc00000, 0x3000000},
12144{0x3000000, 0xff800000, 0x80000000, 0xff800000, 0x3000000},
12145{0x3000000, 0xff800000, 0x80000001, 0xff800000, 0x3000080},
12146{0x3000000, 0xff800000, 0x80000076, 0xff800000, 0x3000080},
12147{0x3000000, 0xff800000, 0x80002b94, 0xff800000, 0x3000080},
12148{0x3000000, 0xff800000, 0x80636d24, 0xff800000, 0x3000080},
12149{0x3000000, 0xff800000, 0x807fffff, 0xff800000, 0x3000080},
12150{0x3000000, 0xff800000, 0x80800000, 0xff800000, 0x3000000},
12151{0x3000000, 0xff800000, 0x80800002, 0xff800000, 0x3000000},
12152{0x3000000, 0xff800000, 0x81398437, 0xff800000, 0x3000000},
12153{0x3000000, 0xff800000, 0x8ba98d27, 0xff800000, 0x3000000},
12154{0x3000000, 0xff800000, 0x8ba98d7a, 0xff800000, 0x3000000},
12155{0x3000000, 0xff800000, 0xf51f853a, 0xff800000, 0x3000000},
12156{0x3000000, 0xff800000, 0xff7ffff0, 0xff800000, 0x3000000},
12157{0x3000000, 0xff800000, 0xff7fffff, 0xff800000, 0x3000000},
12158{0x3000000, 0xff800000, 0xff800000, 0xff800000, 0x3000000},
12159{0x3000000, 0xff800000, 0xff800001, 0x7fc00000, 0x3000001},
12160{0x3000000, 0xff800000, 0xff984a37, 0x7fc00000, 0x3000001},
12161{0x3000000, 0xff800000, 0xffbfffff, 0x7fc00000, 0x3000001},
12162{0x3000000, 0xff800000, 0xffc00000, 0x7fc00000, 0x3000000},
12163{0x3000000, 0xff800000, 0xffd9ba98, 0x7fc00000, 0x3000000},
12164{0x3000000, 0xff800000, 0xffffffff, 0x7fc00000, 0x3000000},
12165{0x3000000, 0xff800000, 0x4f3495cb, 0xff800000, 0x3000000},
12166{0x3000000, 0xff800000, 0xe73a5134, 0xff800000, 0x3000000},
12167{0x3000000, 0xff800000, 0x7c994e9e, 0xff800000, 0x3000000},
12168{0x3000000, 0xff800000, 0x6164bd6c, 0xff800000, 0x3000000},
12169{0x3000000, 0xff800000, 0x9503366, 0xff800000, 0x3000000},
12170{0x3000000, 0xff800000, 0xbf5a97c9, 0xff800000, 0x3000000},
12171{0x3000000, 0xff800000, 0xe6ff1a14, 0xff800000, 0x3000000},
12172{0x3000000, 0xff800000, 0x77f31e2f, 0xff800000, 0x3000000},
12173{0x3000000, 0xff800000, 0xaab4d7d8, 0xff800000, 0x3000000},
12174{0x3000000, 0xff800000, 0x966320b, 0xff800000, 0x3000000},
12175{0x3000000, 0xff800000, 0xb26bddee, 0xff800000, 0x3000000},
12176{0x3000000, 0xff800000, 0xb5c8e5d3, 0xff800000, 0x3000000},
12177{0x3000000, 0xff800000, 0x317285d3, 0xff800000, 0x3000000},
12178{0x3000000, 0xff800000, 0x3c9623b1, 0xff800000, 0x3000000},
12179{0x3000000, 0xff800000, 0x51fd2c7c, 0xff800000, 0x3000000},
12180{0x3000000, 0xff800000, 0x7b906a6c, 0xff800000, 0x3000000},
12181{0x3000000, 0xff800001, 0x0, 0x7fc00000, 0x3000001},
12182{0x3000000, 0xff800001, 0x1, 0x7fc00000, 0x3000081},
12183{0x3000000, 0xff800001, 0x76, 0x7fc00000, 0x3000081},
12184{0x3000000, 0xff800001, 0x2b94, 0x7fc00000, 0x3000081},
12185{0x3000000, 0xff800001, 0x636d24, 0x7fc00000, 0x3000081},
12186{0x3000000, 0xff800001, 0x7fffff, 0x7fc00000, 0x3000081},
12187{0x3000000, 0xff800001, 0x800000, 0x7fc00000, 0x3000001},
12188{0x3000000, 0xff800001, 0x800002, 0x7fc00000, 0x3000001},
12189{0x3000000, 0xff800001, 0x1398437, 0x7fc00000, 0x3000001},
12190{0x3000000, 0xff800001, 0xba98d27, 0x7fc00000, 0x3000001},
12191{0x3000000, 0xff800001, 0xba98d7a, 0x7fc00000, 0x3000001},
12192{0x3000000, 0xff800001, 0x751f853a, 0x7fc00000, 0x3000001},
12193{0x3000000, 0xff800001, 0x7f7ffff0, 0x7fc00000, 0x3000001},
12194{0x3000000, 0xff800001, 0x7f7fffff, 0x7fc00000, 0x3000001},
12195{0x3000000, 0xff800001, 0x7f800000, 0x7fc00000, 0x3000001},
12196{0x3000000, 0xff800001, 0x7f800001, 0x7fc00000, 0x3000001},
12197{0x3000000, 0xff800001, 0x7f984a37, 0x7fc00000, 0x3000001},
12198{0x3000000, 0xff800001, 0x7fbfffff, 0x7fc00000, 0x3000001},
12199{0x3000000, 0xff800001, 0x7fc00000, 0x7fc00000, 0x3000001},
12200{0x3000000, 0xff800001, 0x7fd9ba98, 0x7fc00000, 0x3000001},
12201{0x3000000, 0xff800001, 0x7fffffff, 0x7fc00000, 0x3000001},
12202{0x3000000, 0xff800001, 0x80000000, 0x7fc00000, 0x3000001},
12203{0x3000000, 0xff800001, 0x80000001, 0x7fc00000, 0x3000081},
12204{0x3000000, 0xff800001, 0x80000076, 0x7fc00000, 0x3000081},
12205{0x3000000, 0xff800001, 0x80002b94, 0x7fc00000, 0x3000081},
12206{0x3000000, 0xff800001, 0x80636d24, 0x7fc00000, 0x3000081},
12207{0x3000000, 0xff800001, 0x807fffff, 0x7fc00000, 0x3000081},
12208{0x3000000, 0xff800001, 0x80800000, 0x7fc00000, 0x3000001},
12209{0x3000000, 0xff800001, 0x80800002, 0x7fc00000, 0x3000001},
12210{0x3000000, 0xff800001, 0x81398437, 0x7fc00000, 0x3000001},
12211{0x3000000, 0xff800001, 0x8ba98d27, 0x7fc00000, 0x3000001},
12212{0x3000000, 0xff800001, 0x8ba98d7a, 0x7fc00000, 0x3000001},
12213{0x3000000, 0xff800001, 0xf51f853a, 0x7fc00000, 0x3000001},
12214{0x3000000, 0xff800001, 0xff7ffff0, 0x7fc00000, 0x3000001},
12215{0x3000000, 0xff800001, 0xff7fffff, 0x7fc00000, 0x3000001},
12216{0x3000000, 0xff800001, 0xff800000, 0x7fc00000, 0x3000001},
12217{0x3000000, 0xff800001, 0xff800001, 0x7fc00000, 0x3000001},
12218{0x3000000, 0xff800001, 0xff984a37, 0x7fc00000, 0x3000001},
12219{0x3000000, 0xff800001, 0xffbfffff, 0x7fc00000, 0x3000001},
12220{0x3000000, 0xff800001, 0xffc00000, 0x7fc00000, 0x3000001},
12221{0x3000000, 0xff800001, 0xffd9ba98, 0x7fc00000, 0x3000001},
12222{0x3000000, 0xff800001, 0xffffffff, 0x7fc00000, 0x3000001},
12223{0x3000000, 0xff800001, 0x4f3495cb, 0x7fc00000, 0x3000001},
12224{0x3000000, 0xff800001, 0xe73a5134, 0x7fc00000, 0x3000001},
12225{0x3000000, 0xff800001, 0x7c994e9e, 0x7fc00000, 0x3000001},
12226{0x3000000, 0xff800001, 0x6164bd6c, 0x7fc00000, 0x3000001},
12227{0x3000000, 0xff800001, 0x9503366, 0x7fc00000, 0x3000001},
12228{0x3000000, 0xff800001, 0xbf5a97c9, 0x7fc00000, 0x3000001},
12229{0x3000000, 0xff800001, 0xe6ff1a14, 0x7fc00000, 0x3000001},
12230{0x3000000, 0xff800001, 0x77f31e2f, 0x7fc00000, 0x3000001},
12231{0x3000000, 0xff800001, 0xaab4d7d8, 0x7fc00000, 0x3000001},
12232{0x3000000, 0xff800001, 0x966320b, 0x7fc00000, 0x3000001},
12233{0x3000000, 0xff800001, 0xb26bddee, 0x7fc00000, 0x3000001},
12234{0x3000000, 0xff800001, 0xb5c8e5d3, 0x7fc00000, 0x3000001},
12235{0x3000000, 0xff800001, 0x317285d3, 0x7fc00000, 0x3000001},
12236{0x3000000, 0xff800001, 0x3c9623b1, 0x7fc00000, 0x3000001},
12237{0x3000000, 0xff800001, 0x51fd2c7c, 0x7fc00000, 0x3000001},
12238{0x3000000, 0xff800001, 0x7b906a6c, 0x7fc00000, 0x3000001},
12239{0x3000000, 0xff984a37, 0x0, 0x7fc00000, 0x3000001},
12240{0x3000000, 0xff984a37, 0x1, 0x7fc00000, 0x3000081},
12241{0x3000000, 0xff984a37, 0x76, 0x7fc00000, 0x3000081},
12242{0x3000000, 0xff984a37, 0x2b94, 0x7fc00000, 0x3000081},
12243{0x3000000, 0xff984a37, 0x636d24, 0x7fc00000, 0x3000081},
12244{0x3000000, 0xff984a37, 0x7fffff, 0x7fc00000, 0x3000081},
12245{0x3000000, 0xff984a37, 0x800000, 0x7fc00000, 0x3000001},
12246{0x3000000, 0xff984a37, 0x800002, 0x7fc00000, 0x3000001},
12247{0x3000000, 0xff984a37, 0x1398437, 0x7fc00000, 0x3000001},
12248{0x3000000, 0xff984a37, 0xba98d27, 0x7fc00000, 0x3000001},
12249{0x3000000, 0xff984a37, 0xba98d7a, 0x7fc00000, 0x3000001},
12250{0x3000000, 0xff984a37, 0x751f853a, 0x7fc00000, 0x3000001},
12251{0x3000000, 0xff984a37, 0x7f7ffff0, 0x7fc00000, 0x3000001},
12252{0x3000000, 0xff984a37, 0x7f7fffff, 0x7fc00000, 0x3000001},
12253{0x3000000, 0xff984a37, 0x7f800000, 0x7fc00000, 0x3000001},
12254{0x3000000, 0xff984a37, 0x7f800001, 0x7fc00000, 0x3000001},
12255{0x3000000, 0xff984a37, 0x7f984a37, 0x7fc00000, 0x3000001},
12256{0x3000000, 0xff984a37, 0x7fbfffff, 0x7fc00000, 0x3000001},
12257{0x3000000, 0xff984a37, 0x7fc00000, 0x7fc00000, 0x3000001},
12258{0x3000000, 0xff984a37, 0x7fd9ba98, 0x7fc00000, 0x3000001},
12259{0x3000000, 0xff984a37, 0x7fffffff, 0x7fc00000, 0x3000001},
12260{0x3000000, 0xff984a37, 0x80000000, 0x7fc00000, 0x3000001},
12261{0x3000000, 0xff984a37, 0x80000001, 0x7fc00000, 0x3000081},
12262{0x3000000, 0xff984a37, 0x80000076, 0x7fc00000, 0x3000081},
12263{0x3000000, 0xff984a37, 0x80002b94, 0x7fc00000, 0x3000081},
12264{0x3000000, 0xff984a37, 0x80636d24, 0x7fc00000, 0x3000081},
12265{0x3000000, 0xff984a37, 0x807fffff, 0x7fc00000, 0x3000081},
12266{0x3000000, 0xff984a37, 0x80800000, 0x7fc00000, 0x3000001},
12267{0x3000000, 0xff984a37, 0x80800002, 0x7fc00000, 0x3000001},
12268{0x3000000, 0xff984a37, 0x81398437, 0x7fc00000, 0x3000001},
12269{0x3000000, 0xff984a37, 0x8ba98d27, 0x7fc00000, 0x3000001},
12270{0x3000000, 0xff984a37, 0x8ba98d7a, 0x7fc00000, 0x3000001},
12271{0x3000000, 0xff984a37, 0xf51f853a, 0x7fc00000, 0x3000001},
12272{0x3000000, 0xff984a37, 0xff7ffff0, 0x7fc00000, 0x3000001},
12273{0x3000000, 0xff984a37, 0xff7fffff, 0x7fc00000, 0x3000001},
12274{0x3000000, 0xff984a37, 0xff800000, 0x7fc00000, 0x3000001},
12275{0x3000000, 0xff984a37, 0xff800001, 0x7fc00000, 0x3000001},
12276{0x3000000, 0xff984a37, 0xff984a37, 0x7fc00000, 0x3000001},
12277{0x3000000, 0xff984a37, 0xffbfffff, 0x7fc00000, 0x3000001},
12278{0x3000000, 0xff984a37, 0xffc00000, 0x7fc00000, 0x3000001},
12279{0x3000000, 0xff984a37, 0xffd9ba98, 0x7fc00000, 0x3000001},
12280{0x3000000, 0xff984a37, 0xffffffff, 0x7fc00000, 0x3000001},
12281{0x3000000, 0xff984a37, 0x4f3495cb, 0x7fc00000, 0x3000001},
12282{0x3000000, 0xff984a37, 0xe73a5134, 0x7fc00000, 0x3000001},
12283{0x3000000, 0xff984a37, 0x7c994e9e, 0x7fc00000, 0x3000001},
12284{0x3000000, 0xff984a37, 0x6164bd6c, 0x7fc00000, 0x3000001},
12285{0x3000000, 0xff984a37, 0x9503366, 0x7fc00000, 0x3000001},
12286{0x3000000, 0xff984a37, 0xbf5a97c9, 0x7fc00000, 0x3000001},
12287{0x3000000, 0xff984a37, 0xe6ff1a14, 0x7fc00000, 0x3000001},
12288{0x3000000, 0xff984a37, 0x77f31e2f, 0x7fc00000, 0x3000001},
12289{0x3000000, 0xff984a37, 0xaab4d7d8, 0x7fc00000, 0x3000001},
12290{0x3000000, 0xff984a37, 0x966320b, 0x7fc00000, 0x3000001},
12291{0x3000000, 0xff984a37, 0xb26bddee, 0x7fc00000, 0x3000001},
12292{0x3000000, 0xff984a37, 0xb5c8e5d3, 0x7fc00000, 0x3000001},
12293{0x3000000, 0xff984a37, 0x317285d3, 0x7fc00000, 0x3000001},
12294{0x3000000, 0xff984a37, 0x3c9623b1, 0x7fc00000, 0x3000001},
12295{0x3000000, 0xff984a37, 0x51fd2c7c, 0x7fc00000, 0x3000001},
12296{0x3000000, 0xff984a37, 0x7b906a6c, 0x7fc00000, 0x3000001},
12297{0x3000000, 0xffbfffff, 0x0, 0x7fc00000, 0x3000001},
12298{0x3000000, 0xffbfffff, 0x1, 0x7fc00000, 0x3000081},
12299{0x3000000, 0xffbfffff, 0x76, 0x7fc00000, 0x3000081},
12300{0x3000000, 0xffbfffff, 0x2b94, 0x7fc00000, 0x3000081},
12301{0x3000000, 0xffbfffff, 0x636d24, 0x7fc00000, 0x3000081},
12302{0x3000000, 0xffbfffff, 0x7fffff, 0x7fc00000, 0x3000081},
12303{0x3000000, 0xffbfffff, 0x800000, 0x7fc00000, 0x3000001},
12304{0x3000000, 0xffbfffff, 0x800002, 0x7fc00000, 0x3000001},
12305{0x3000000, 0xffbfffff, 0x1398437, 0x7fc00000, 0x3000001},
12306{0x3000000, 0xffbfffff, 0xba98d27, 0x7fc00000, 0x3000001},
12307{0x3000000, 0xffbfffff, 0xba98d7a, 0x7fc00000, 0x3000001},
12308{0x3000000, 0xffbfffff, 0x751f853a, 0x7fc00000, 0x3000001},
12309{0x3000000, 0xffbfffff, 0x7f7ffff0, 0x7fc00000, 0x3000001},
12310{0x3000000, 0xffbfffff, 0x7f7fffff, 0x7fc00000, 0x3000001},
12311{0x3000000, 0xffbfffff, 0x7f800000, 0x7fc00000, 0x3000001},
12312{0x3000000, 0xffbfffff, 0x7f800001, 0x7fc00000, 0x3000001},
12313{0x3000000, 0xffbfffff, 0x7f984a37, 0x7fc00000, 0x3000001},
12314{0x3000000, 0xffbfffff, 0x7fbfffff, 0x7fc00000, 0x3000001},
12315{0x3000000, 0xffbfffff, 0x7fc00000, 0x7fc00000, 0x3000001},
12316{0x3000000, 0xffbfffff, 0x7fd9ba98, 0x7fc00000, 0x3000001},
12317{0x3000000, 0xffbfffff, 0x7fffffff, 0x7fc00000, 0x3000001},
12318{0x3000000, 0xffbfffff, 0x80000000, 0x7fc00000, 0x3000001},
12319{0x3000000, 0xffbfffff, 0x80000001, 0x7fc00000, 0x3000081},
12320{0x3000000, 0xffbfffff, 0x80000076, 0x7fc00000, 0x3000081},
12321{0x3000000, 0xffbfffff, 0x80002b94, 0x7fc00000, 0x3000081},
12322{0x3000000, 0xffbfffff, 0x80636d24, 0x7fc00000, 0x3000081},
12323{0x3000000, 0xffbfffff, 0x807fffff, 0x7fc00000, 0x3000081},
12324{0x3000000, 0xffbfffff, 0x80800000, 0x7fc00000, 0x3000001},
12325{0x3000000, 0xffbfffff, 0x80800002, 0x7fc00000, 0x3000001},
12326{0x3000000, 0xffbfffff, 0x81398437, 0x7fc00000, 0x3000001},
12327{0x3000000, 0xffbfffff, 0x8ba98d27, 0x7fc00000, 0x3000001},
12328{0x3000000, 0xffbfffff, 0x8ba98d7a, 0x7fc00000, 0x3000001},
12329{0x3000000, 0xffbfffff, 0xf51f853a, 0x7fc00000, 0x3000001},
12330{0x3000000, 0xffbfffff, 0xff7ffff0, 0x7fc00000, 0x3000001},
12331{0x3000000, 0xffbfffff, 0xff7fffff, 0x7fc00000, 0x3000001},
12332{0x3000000, 0xffbfffff, 0xff800000, 0x7fc00000, 0x3000001},
12333{0x3000000, 0xffbfffff, 0xff800001, 0x7fc00000, 0x3000001},
12334{0x3000000, 0xffbfffff, 0xff984a37, 0x7fc00000, 0x3000001},
12335{0x3000000, 0xffbfffff, 0xffbfffff, 0x7fc00000, 0x3000001},
12336{0x3000000, 0xffbfffff, 0xffc00000, 0x7fc00000, 0x3000001},
12337{0x3000000, 0xffbfffff, 0xffd9ba98, 0x7fc00000, 0x3000001},
12338{0x3000000, 0xffbfffff, 0xffffffff, 0x7fc00000, 0x3000001},
12339{0x3000000, 0xffbfffff, 0x4f3495cb, 0x7fc00000, 0x3000001},
12340{0x3000000, 0xffbfffff, 0xe73a5134, 0x7fc00000, 0x3000001},
12341{0x3000000, 0xffbfffff, 0x7c994e9e, 0x7fc00000, 0x3000001},
12342{0x3000000, 0xffbfffff, 0x6164bd6c, 0x7fc00000, 0x3000001},
12343{0x3000000, 0xffbfffff, 0x9503366, 0x7fc00000, 0x3000001},
12344{0x3000000, 0xffbfffff, 0xbf5a97c9, 0x7fc00000, 0x3000001},
12345{0x3000000, 0xffbfffff, 0xe6ff1a14, 0x7fc00000, 0x3000001},
12346{0x3000000, 0xffbfffff, 0x77f31e2f, 0x7fc00000, 0x3000001},
12347{0x3000000, 0xffbfffff, 0xaab4d7d8, 0x7fc00000, 0x3000001},
12348{0x3000000, 0xffbfffff, 0x966320b, 0x7fc00000, 0x3000001},
12349{0x3000000, 0xffbfffff, 0xb26bddee, 0x7fc00000, 0x3000001},
12350{0x3000000, 0xffbfffff, 0xb5c8e5d3, 0x7fc00000, 0x3000001},
12351{0x3000000, 0xffbfffff, 0x317285d3, 0x7fc00000, 0x3000001},
12352{0x3000000, 0xffbfffff, 0x3c9623b1, 0x7fc00000, 0x3000001},
12353{0x3000000, 0xffbfffff, 0x51fd2c7c, 0x7fc00000, 0x3000001},
12354{0x3000000, 0xffbfffff, 0x7b906a6c, 0x7fc00000, 0x3000001},
12355{0x3000000, 0xffc00000, 0x0, 0x7fc00000, 0x3000000},
12356{0x3000000, 0xffc00000, 0x1, 0x7fc00000, 0x3000080},
12357{0x3000000, 0xffc00000, 0x76, 0x7fc00000, 0x3000080},
12358{0x3000000, 0xffc00000, 0x2b94, 0x7fc00000, 0x3000080},
12359{0x3000000, 0xffc00000, 0x636d24, 0x7fc00000, 0x3000080},
12360{0x3000000, 0xffc00000, 0x7fffff, 0x7fc00000, 0x3000080},
12361{0x3000000, 0xffc00000, 0x800000, 0x7fc00000, 0x3000000},
12362{0x3000000, 0xffc00000, 0x800002, 0x7fc00000, 0x3000000},
12363{0x3000000, 0xffc00000, 0x1398437, 0x7fc00000, 0x3000000},
12364{0x3000000, 0xffc00000, 0xba98d27, 0x7fc00000, 0x3000000},
12365{0x3000000, 0xffc00000, 0xba98d7a, 0x7fc00000, 0x3000000},
12366{0x3000000, 0xffc00000, 0x751f853a, 0x7fc00000, 0x3000000},
12367{0x3000000, 0xffc00000, 0x7f7ffff0, 0x7fc00000, 0x3000000},
12368{0x3000000, 0xffc00000, 0x7f7fffff, 0x7fc00000, 0x3000000},
12369{0x3000000, 0xffc00000, 0x7f800000, 0x7fc00000, 0x3000000},
12370{0x3000000, 0xffc00000, 0x7f800001, 0x7fc00000, 0x3000001},
12371{0x3000000, 0xffc00000, 0x7f984a37, 0x7fc00000, 0x3000001},
12372{0x3000000, 0xffc00000, 0x7fbfffff, 0x7fc00000, 0x3000001},
12373{0x3000000, 0xffc00000, 0x7fc00000, 0x7fc00000, 0x3000000},
12374{0x3000000, 0xffc00000, 0x7fd9ba98, 0x7fc00000, 0x3000000},
12375{0x3000000, 0xffc00000, 0x7fffffff, 0x7fc00000, 0x3000000},
12376{0x3000000, 0xffc00000, 0x80000000, 0x7fc00000, 0x3000000},
12377{0x3000000, 0xffc00000, 0x80000001, 0x7fc00000, 0x3000080},
12378{0x3000000, 0xffc00000, 0x80000076, 0x7fc00000, 0x3000080},
12379{0x3000000, 0xffc00000, 0x80002b94, 0x7fc00000, 0x3000080},
12380{0x3000000, 0xffc00000, 0x80636d24, 0x7fc00000, 0x3000080},
12381{0x3000000, 0xffc00000, 0x807fffff, 0x7fc00000, 0x3000080},
12382{0x3000000, 0xffc00000, 0x80800000, 0x7fc00000, 0x3000000},
12383{0x3000000, 0xffc00000, 0x80800002, 0x7fc00000, 0x3000000},
12384{0x3000000, 0xffc00000, 0x81398437, 0x7fc00000, 0x3000000},
12385{0x3000000, 0xffc00000, 0x8ba98d27, 0x7fc00000, 0x3000000},
12386{0x3000000, 0xffc00000, 0x8ba98d7a, 0x7fc00000, 0x3000000},
12387{0x3000000, 0xffc00000, 0xf51f853a, 0x7fc00000, 0x3000000},
12388{0x3000000, 0xffc00000, 0xff7ffff0, 0x7fc00000, 0x3000000},
12389{0x3000000, 0xffc00000, 0xff7fffff, 0x7fc00000, 0x3000000},
12390{0x3000000, 0xffc00000, 0xff800000, 0x7fc00000, 0x3000000},
12391{0x3000000, 0xffc00000, 0xff800001, 0x7fc00000, 0x3000001},
12392{0x3000000, 0xffc00000, 0xff984a37, 0x7fc00000, 0x3000001},
12393{0x3000000, 0xffc00000, 0xffbfffff, 0x7fc00000, 0x3000001},
12394{0x3000000, 0xffc00000, 0xffc00000, 0x7fc00000, 0x3000000},
12395{0x3000000, 0xffc00000, 0xffd9ba98, 0x7fc00000, 0x3000000},
12396{0x3000000, 0xffc00000, 0xffffffff, 0x7fc00000, 0x3000000},
12397{0x3000000, 0xffc00000, 0x4f3495cb, 0x7fc00000, 0x3000000},
12398{0x3000000, 0xffc00000, 0xe73a5134, 0x7fc00000, 0x3000000},
12399{0x3000000, 0xffc00000, 0x7c994e9e, 0x7fc00000, 0x3000000},
12400{0x3000000, 0xffc00000, 0x6164bd6c, 0x7fc00000, 0x3000000},
12401{0x3000000, 0xffc00000, 0x9503366, 0x7fc00000, 0x3000000},
12402{0x3000000, 0xffc00000, 0xbf5a97c9, 0x7fc00000, 0x3000000},
12403{0x3000000, 0xffc00000, 0xe6ff1a14, 0x7fc00000, 0x3000000},
12404{0x3000000, 0xffc00000, 0x77f31e2f, 0x7fc00000, 0x3000000},
12405{0x3000000, 0xffc00000, 0xaab4d7d8, 0x7fc00000, 0x3000000},
12406{0x3000000, 0xffc00000, 0x966320b, 0x7fc00000, 0x3000000},
12407{0x3000000, 0xffc00000, 0xb26bddee, 0x7fc00000, 0x3000000},
12408{0x3000000, 0xffc00000, 0xb5c8e5d3, 0x7fc00000, 0x3000000},
12409{0x3000000, 0xffc00000, 0x317285d3, 0x7fc00000, 0x3000000},
12410{0x3000000, 0xffc00000, 0x3c9623b1, 0x7fc00000, 0x3000000},
12411{0x3000000, 0xffc00000, 0x51fd2c7c, 0x7fc00000, 0x3000000},
12412{0x3000000, 0xffc00000, 0x7b906a6c, 0x7fc00000, 0x3000000},
12413{0x3000000, 0xffd9ba98, 0x0, 0x7fc00000, 0x3000000},
12414{0x3000000, 0xffd9ba98, 0x1, 0x7fc00000, 0x3000080},
12415{0x3000000, 0xffd9ba98, 0x76, 0x7fc00000, 0x3000080},
12416{0x3000000, 0xffd9ba98, 0x2b94, 0x7fc00000, 0x3000080},
12417{0x3000000, 0xffd9ba98, 0x636d24, 0x7fc00000, 0x3000080},
12418{0x3000000, 0xffd9ba98, 0x7fffff, 0x7fc00000, 0x3000080},
12419{0x3000000, 0xffd9ba98, 0x800000, 0x7fc00000, 0x3000000},
12420{0x3000000, 0xffd9ba98, 0x800002, 0x7fc00000, 0x3000000},
12421{0x3000000, 0xffd9ba98, 0x1398437, 0x7fc00000, 0x3000000},
12422{0x3000000, 0xffd9ba98, 0xba98d27, 0x7fc00000, 0x3000000},
12423{0x3000000, 0xffd9ba98, 0xba98d7a, 0x7fc00000, 0x3000000},
12424{0x3000000, 0xffd9ba98, 0x751f853a, 0x7fc00000, 0x3000000},
12425{0x3000000, 0xffd9ba98, 0x7f7ffff0, 0x7fc00000, 0x3000000},
12426{0x3000000, 0xffd9ba98, 0x7f7fffff, 0x7fc00000, 0x3000000},
12427{0x3000000, 0xffd9ba98, 0x7f800000, 0x7fc00000, 0x3000000},
12428{0x3000000, 0xffd9ba98, 0x7f800001, 0x7fc00000, 0x3000001},
12429{0x3000000, 0xffd9ba98, 0x7f984a37, 0x7fc00000, 0x3000001},
12430{0x3000000, 0xffd9ba98, 0x7fbfffff, 0x7fc00000, 0x3000001},
12431{0x3000000, 0xffd9ba98, 0x7fc00000, 0x7fc00000, 0x3000000},
12432{0x3000000, 0xffd9ba98, 0x7fd9ba98, 0x7fc00000, 0x3000000},
12433{0x3000000, 0xffd9ba98, 0x7fffffff, 0x7fc00000, 0x3000000},
12434{0x3000000, 0xffd9ba98, 0x80000000, 0x7fc00000, 0x3000000},
12435{0x3000000, 0xffd9ba98, 0x80000001, 0x7fc00000, 0x3000080},
12436{0x3000000, 0xffd9ba98, 0x80000076, 0x7fc00000, 0x3000080},
12437{0x3000000, 0xffd9ba98, 0x80002b94, 0x7fc00000, 0x3000080},
12438{0x3000000, 0xffd9ba98, 0x80636d24, 0x7fc00000, 0x3000080},
12439{0x3000000, 0xffd9ba98, 0x807fffff, 0x7fc00000, 0x3000080},
12440{0x3000000, 0xffd9ba98, 0x80800000, 0x7fc00000, 0x3000000},
12441{0x3000000, 0xffd9ba98, 0x80800002, 0x7fc00000, 0x3000000},
12442{0x3000000, 0xffd9ba98, 0x81398437, 0x7fc00000, 0x3000000},
12443{0x3000000, 0xffd9ba98, 0x8ba98d27, 0x7fc00000, 0x3000000},
12444{0x3000000, 0xffd9ba98, 0x8ba98d7a, 0x7fc00000, 0x3000000},
12445{0x3000000, 0xffd9ba98, 0xf51f853a, 0x7fc00000, 0x3000000},
12446{0x3000000, 0xffd9ba98, 0xff7ffff0, 0x7fc00000, 0x3000000},
12447{0x3000000, 0xffd9ba98, 0xff7fffff, 0x7fc00000, 0x3000000},
12448{0x3000000, 0xffd9ba98, 0xff800000, 0x7fc00000, 0x3000000},
12449{0x3000000, 0xffd9ba98, 0xff800001, 0x7fc00000, 0x3000001},
12450{0x3000000, 0xffd9ba98, 0xff984a37, 0x7fc00000, 0x3000001},
12451{0x3000000, 0xffd9ba98, 0xffbfffff, 0x7fc00000, 0x3000001},
12452{0x3000000, 0xffd9ba98, 0xffc00000, 0x7fc00000, 0x3000000},
12453{0x3000000, 0xffd9ba98, 0xffd9ba98, 0x7fc00000, 0x3000000},
12454{0x3000000, 0xffd9ba98, 0xffffffff, 0x7fc00000, 0x3000000},
12455{0x3000000, 0xffd9ba98, 0x4f3495cb, 0x7fc00000, 0x3000000},
12456{0x3000000, 0xffd9ba98, 0xe73a5134, 0x7fc00000, 0x3000000},
12457{0x3000000, 0xffd9ba98, 0x7c994e9e, 0x7fc00000, 0x3000000},
12458{0x3000000, 0xffd9ba98, 0x6164bd6c, 0x7fc00000, 0x3000000},
12459{0x3000000, 0xffd9ba98, 0x9503366, 0x7fc00000, 0x3000000},
12460{0x3000000, 0xffd9ba98, 0xbf5a97c9, 0x7fc00000, 0x3000000},
12461{0x3000000, 0xffd9ba98, 0xe6ff1a14, 0x7fc00000, 0x3000000},
12462{0x3000000, 0xffd9ba98, 0x77f31e2f, 0x7fc00000, 0x3000000},
12463{0x3000000, 0xffd9ba98, 0xaab4d7d8, 0x7fc00000, 0x3000000},
12464{0x3000000, 0xffd9ba98, 0x966320b, 0x7fc00000, 0x3000000},
12465{0x3000000, 0xffd9ba98, 0xb26bddee, 0x7fc00000, 0x3000000},
12466{0x3000000, 0xffd9ba98, 0xb5c8e5d3, 0x7fc00000, 0x3000000},
12467{0x3000000, 0xffd9ba98, 0x317285d3, 0x7fc00000, 0x3000000},
12468{0x3000000, 0xffd9ba98, 0x3c9623b1, 0x7fc00000, 0x3000000},
12469{0x3000000, 0xffd9ba98, 0x51fd2c7c, 0x7fc00000, 0x3000000},
12470{0x3000000, 0xffd9ba98, 0x7b906a6c, 0x7fc00000, 0x3000000},
12471{0x3000000, 0xffffffff, 0x0, 0x7fc00000, 0x3000000},
12472{0x3000000, 0xffffffff, 0x1, 0x7fc00000, 0x3000080},
12473{0x3000000, 0xffffffff, 0x76, 0x7fc00000, 0x3000080},
12474{0x3000000, 0xffffffff, 0x2b94, 0x7fc00000, 0x3000080},
12475{0x3000000, 0xffffffff, 0x636d24, 0x7fc00000, 0x3000080},
12476{0x3000000, 0xffffffff, 0x7fffff, 0x7fc00000, 0x3000080},
12477{0x3000000, 0xffffffff, 0x800000, 0x7fc00000, 0x3000000},
12478{0x3000000, 0xffffffff, 0x800002, 0x7fc00000, 0x3000000},
12479{0x3000000, 0xffffffff, 0x1398437, 0x7fc00000, 0x3000000},
12480{0x3000000, 0xffffffff, 0xba98d27, 0x7fc00000, 0x3000000},
12481{0x3000000, 0xffffffff, 0xba98d7a, 0x7fc00000, 0x3000000},
12482{0x3000000, 0xffffffff, 0x751f853a, 0x7fc00000, 0x3000000},
12483{0x3000000, 0xffffffff, 0x7f7ffff0, 0x7fc00000, 0x3000000},
12484{0x3000000, 0xffffffff, 0x7f7fffff, 0x7fc00000, 0x3000000},
12485{0x3000000, 0xffffffff, 0x7f800000, 0x7fc00000, 0x3000000},
12486{0x3000000, 0xffffffff, 0x7f800001, 0x7fc00000, 0x3000001},
12487{0x3000000, 0xffffffff, 0x7f984a37, 0x7fc00000, 0x3000001},
12488{0x3000000, 0xffffffff, 0x7fbfffff, 0x7fc00000, 0x3000001},
12489{0x3000000, 0xffffffff, 0x7fc00000, 0x7fc00000, 0x3000000},
12490{0x3000000, 0xffffffff, 0x7fd9ba98, 0x7fc00000, 0x3000000},
12491{0x3000000, 0xffffffff, 0x7fffffff, 0x7fc00000, 0x3000000},
12492{0x3000000, 0xffffffff, 0x80000000, 0x7fc00000, 0x3000000},
12493{0x3000000, 0xffffffff, 0x80000001, 0x7fc00000, 0x3000080},
12494{0x3000000, 0xffffffff, 0x80000076, 0x7fc00000, 0x3000080},
12495{0x3000000, 0xffffffff, 0x80002b94, 0x7fc00000, 0x3000080},
12496{0x3000000, 0xffffffff, 0x80636d24, 0x7fc00000, 0x3000080},
12497{0x3000000, 0xffffffff, 0x807fffff, 0x7fc00000, 0x3000080},
12498{0x3000000, 0xffffffff, 0x80800000, 0x7fc00000, 0x3000000},
12499{0x3000000, 0xffffffff, 0x80800002, 0x7fc00000, 0x3000000},
12500{0x3000000, 0xffffffff, 0x81398437, 0x7fc00000, 0x3000000},
12501{0x3000000, 0xffffffff, 0x8ba98d27, 0x7fc00000, 0x3000000},
12502{0x3000000, 0xffffffff, 0x8ba98d7a, 0x7fc00000, 0x3000000},
12503{0x3000000, 0xffffffff, 0xf51f853a, 0x7fc00000, 0x3000000},
12504{0x3000000, 0xffffffff, 0xff7ffff0, 0x7fc00000, 0x3000000},
12505{0x3000000, 0xffffffff, 0xff7fffff, 0x7fc00000, 0x3000000},
12506{0x3000000, 0xffffffff, 0xff800000, 0x7fc00000, 0x3000000},
12507{0x3000000, 0xffffffff, 0xff800001, 0x7fc00000, 0x3000001},
12508{0x3000000, 0xffffffff, 0xff984a37, 0x7fc00000, 0x3000001},
12509{0x3000000, 0xffffffff, 0xffbfffff, 0x7fc00000, 0x3000001},
12510{0x3000000, 0xffffffff, 0xffc00000, 0x7fc00000, 0x3000000},
12511{0x3000000, 0xffffffff, 0xffd9ba98, 0x7fc00000, 0x3000000},
12512{0x3000000, 0xffffffff, 0xffffffff, 0x7fc00000, 0x3000000},
12513{0x3000000, 0xffffffff, 0x4f3495cb, 0x7fc00000, 0x3000000},
12514{0x3000000, 0xffffffff, 0xe73a5134, 0x7fc00000, 0x3000000},
12515{0x3000000, 0xffffffff, 0x7c994e9e, 0x7fc00000, 0x3000000},
12516{0x3000000, 0xffffffff, 0x6164bd6c, 0x7fc00000, 0x3000000},
12517{0x3000000, 0xffffffff, 0x9503366, 0x7fc00000, 0x3000000},
12518{0x3000000, 0xffffffff, 0xbf5a97c9, 0x7fc00000, 0x3000000},
12519{0x3000000, 0xffffffff, 0xe6ff1a14, 0x7fc00000, 0x3000000},
12520{0x3000000, 0xffffffff, 0x77f31e2f, 0x7fc00000, 0x3000000},
12521{0x3000000, 0xffffffff, 0xaab4d7d8, 0x7fc00000, 0x3000000},
12522{0x3000000, 0xffffffff, 0x966320b, 0x7fc00000, 0x3000000},
12523{0x3000000, 0xffffffff, 0xb26bddee, 0x7fc00000, 0x3000000},
12524{0x3000000, 0xffffffff, 0xb5c8e5d3, 0x7fc00000, 0x3000000},
12525{0x3000000, 0xffffffff, 0x317285d3, 0x7fc00000, 0x3000000},
12526{0x3000000, 0xffffffff, 0x3c9623b1, 0x7fc00000, 0x3000000},
12527{0x3000000, 0xffffffff, 0x51fd2c7c, 0x7fc00000, 0x3000000},
12528{0x3000000, 0xffffffff, 0x7b906a6c, 0x7fc00000, 0x3000000},
12529{0x3000000, 0x4f3495cb, 0x0, 0x4f3495cb, 0x3000000},
12530{0x3000000, 0x4f3495cb, 0x1, 0x4f3495cb, 0x3000080},
12531{0x3000000, 0x4f3495cb, 0x76, 0x4f3495cb, 0x3000080},
12532{0x3000000, 0x4f3495cb, 0x2b94, 0x4f3495cb, 0x3000080},
12533{0x3000000, 0x4f3495cb, 0x636d24, 0x4f3495cb, 0x3000080},
12534{0x3000000, 0x4f3495cb, 0x7fffff, 0x4f3495cb, 0x3000080},
12535{0x3000000, 0x4f3495cb, 0x800000, 0x4f3495cb, 0x3000010},
12536{0x3000000, 0x4f3495cb, 0x800002, 0x4f3495cb, 0x3000010},
12537{0x3000000, 0x4f3495cb, 0x1398437, 0x4f3495cb, 0x3000010},
12538{0x3000000, 0x4f3495cb, 0xba98d27, 0x4f3495cb, 0x3000010},
12539{0x3000000, 0x4f3495cb, 0xba98d7a, 0x4f3495cb, 0x3000010},
12540{0x3000000, 0x4f3495cb, 0x751f853a, 0x751f853a, 0x3000010},
12541{0x3000000, 0x4f3495cb, 0x7f7ffff0, 0x7f7ffff0, 0x3000010},
12542{0x3000000, 0x4f3495cb, 0x7f7fffff, 0x7f7fffff, 0x3000010},
12543{0x3000000, 0x4f3495cb, 0x7f800000, 0x7f800000, 0x3000000},
12544{0x3000000, 0x4f3495cb, 0x7f800001, 0x7fc00000, 0x3000001},
12545{0x3000000, 0x4f3495cb, 0x7f984a37, 0x7fc00000, 0x3000001},
12546{0x3000000, 0x4f3495cb, 0x7fbfffff, 0x7fc00000, 0x3000001},
12547{0x3000000, 0x4f3495cb, 0x7fc00000, 0x7fc00000, 0x3000000},
12548{0x3000000, 0x4f3495cb, 0x7fd9ba98, 0x7fc00000, 0x3000000},
12549{0x3000000, 0x4f3495cb, 0x7fffffff, 0x7fc00000, 0x3000000},
12550{0x3000000, 0x4f3495cb, 0x80000000, 0x4f3495cb, 0x3000000},
12551{0x3000000, 0x4f3495cb, 0x80000001, 0x4f3495cb, 0x3000080},
12552{0x3000000, 0x4f3495cb, 0x80000076, 0x4f3495cb, 0x3000080},
12553{0x3000000, 0x4f3495cb, 0x80002b94, 0x4f3495cb, 0x3000080},
12554{0x3000000, 0x4f3495cb, 0x80636d24, 0x4f3495cb, 0x3000080},
12555{0x3000000, 0x4f3495cb, 0x807fffff, 0x4f3495cb, 0x3000080},
12556{0x3000000, 0x4f3495cb, 0x80800000, 0x4f3495cb, 0x3000010},
12557{0x3000000, 0x4f3495cb, 0x80800002, 0x4f3495cb, 0x3000010},
12558{0x3000000, 0x4f3495cb, 0x81398437, 0x4f3495cb, 0x3000010},
12559{0x3000000, 0x4f3495cb, 0x8ba98d27, 0x4f3495cb, 0x3000010},
12560{0x3000000, 0x4f3495cb, 0x8ba98d7a, 0x4f3495cb, 0x3000010},
12561{0x3000000, 0x4f3495cb, 0xf51f853a, 0xf51f853a, 0x3000010},
12562{0x3000000, 0x4f3495cb, 0xff7ffff0, 0xff7ffff0, 0x3000010},
12563{0x3000000, 0x4f3495cb, 0xff7fffff, 0xff7fffff, 0x3000010},
12564{0x3000000, 0x4f3495cb, 0xff800000, 0xff800000, 0x3000000},
12565{0x3000000, 0x4f3495cb, 0xff800001, 0x7fc00000, 0x3000001},
12566{0x3000000, 0x4f3495cb, 0xff984a37, 0x7fc00000, 0x3000001},
12567{0x3000000, 0x4f3495cb, 0xffbfffff, 0x7fc00000, 0x3000001},
12568{0x3000000, 0x4f3495cb, 0xffc00000, 0x7fc00000, 0x3000000},
12569{0x3000000, 0x4f3495cb, 0xffd9ba98, 0x7fc00000, 0x3000000},
12570{0x3000000, 0x4f3495cb, 0xffffffff, 0x7fc00000, 0x3000000},
12571{0x3000000, 0x4f3495cb, 0x4f3495cb, 0x4fb495cb, 0x3000000},
12572{0x3000000, 0x4f3495cb, 0xe73a5134, 0xe73a5134, 0x3000010},
12573{0x3000000, 0x4f3495cb, 0x7c994e9e, 0x7c994e9e, 0x3000010},
12574{0x3000000, 0x4f3495cb, 0x6164bd6c, 0x6164bd6c, 0x3000010},
12575{0x3000000, 0x4f3495cb, 0x9503366, 0x4f3495cb, 0x3000010},
12576{0x3000000, 0x4f3495cb, 0xbf5a97c9, 0x4f3495cb, 0x3000010},
12577{0x3000000, 0x4f3495cb, 0xe6ff1a14, 0xe6ff1a14, 0x3000010},
12578{0x3000000, 0x4f3495cb, 0x77f31e2f, 0x77f31e2f, 0x3000010},
12579{0x3000000, 0x4f3495cb, 0xaab4d7d8, 0x4f3495cb, 0x3000010},
12580{0x3000000, 0x4f3495cb, 0x966320b, 0x4f3495cb, 0x3000010},
12581{0x3000000, 0x4f3495cb, 0xb26bddee, 0x4f3495cb, 0x3000010},
12582{0x3000000, 0x4f3495cb, 0xb5c8e5d3, 0x4f3495cb, 0x3000010},
12583{0x3000000, 0x4f3495cb, 0x317285d3, 0x4f3495cb, 0x3000010},
12584{0x3000000, 0x4f3495cb, 0x3c9623b1, 0x4f3495cb, 0x3000010},
12585{0x3000000, 0x4f3495cb, 0x51fd2c7c, 0x52016895, 0x3000010},
12586{0x3000000, 0x4f3495cb, 0x7b906a6c, 0x7b906a6c, 0x3000010},
12587{0x3000000, 0xe73a5134, 0x0, 0xe73a5134, 0x3000000},
12588{0x3000000, 0xe73a5134, 0x1, 0xe73a5134, 0x3000080},
12589{0x3000000, 0xe73a5134, 0x76, 0xe73a5134, 0x3000080},
12590{0x3000000, 0xe73a5134, 0x2b94, 0xe73a5134, 0x3000080},
12591{0x3000000, 0xe73a5134, 0x636d24, 0xe73a5134, 0x3000080},
12592{0x3000000, 0xe73a5134, 0x7fffff, 0xe73a5134, 0x3000080},
12593{0x3000000, 0xe73a5134, 0x800000, 0xe73a5134, 0x3000010},
12594{0x3000000, 0xe73a5134, 0x800002, 0xe73a5134, 0x3000010},
12595{0x3000000, 0xe73a5134, 0x1398437, 0xe73a5134, 0x3000010},
12596{0x3000000, 0xe73a5134, 0xba98d27, 0xe73a5134, 0x3000010},
12597{0x3000000, 0xe73a5134, 0xba98d7a, 0xe73a5134, 0x3000010},
12598{0x3000000, 0xe73a5134, 0x751f853a, 0x751f853a, 0x3000010},
12599{0x3000000, 0xe73a5134, 0x7f7ffff0, 0x7f7ffff0, 0x3000010},
12600{0x3000000, 0xe73a5134, 0x7f7fffff, 0x7f7fffff, 0x3000010},
12601{0x3000000, 0xe73a5134, 0x7f800000, 0x7f800000, 0x3000000},
12602{0x3000000, 0xe73a5134, 0x7f800001, 0x7fc00000, 0x3000001},
12603{0x3000000, 0xe73a5134, 0x7f984a37, 0x7fc00000, 0x3000001},
12604{0x3000000, 0xe73a5134, 0x7fbfffff, 0x7fc00000, 0x3000001},
12605{0x3000000, 0xe73a5134, 0x7fc00000, 0x7fc00000, 0x3000000},
12606{0x3000000, 0xe73a5134, 0x7fd9ba98, 0x7fc00000, 0x3000000},
12607{0x3000000, 0xe73a5134, 0x7fffffff, 0x7fc00000, 0x3000000},
12608{0x3000000, 0xe73a5134, 0x80000000, 0xe73a5134, 0x3000000},
12609{0x3000000, 0xe73a5134, 0x80000001, 0xe73a5134, 0x3000080},
12610{0x3000000, 0xe73a5134, 0x80000076, 0xe73a5134, 0x3000080},
12611{0x3000000, 0xe73a5134, 0x80002b94, 0xe73a5134, 0x3000080},
12612{0x3000000, 0xe73a5134, 0x80636d24, 0xe73a5134, 0x3000080},
12613{0x3000000, 0xe73a5134, 0x807fffff, 0xe73a5134, 0x3000080},
12614{0x3000000, 0xe73a5134, 0x80800000, 0xe73a5134, 0x3000010},
12615{0x3000000, 0xe73a5134, 0x80800002, 0xe73a5134, 0x3000010},
12616{0x3000000, 0xe73a5134, 0x81398437, 0xe73a5134, 0x3000010},
12617{0x3000000, 0xe73a5134, 0x8ba98d27, 0xe73a5134, 0x3000010},
12618{0x3000000, 0xe73a5134, 0x8ba98d7a, 0xe73a5134, 0x3000010},
12619{0x3000000, 0xe73a5134, 0xf51f853a, 0xf51f853a, 0x3000010},
12620{0x3000000, 0xe73a5134, 0xff7ffff0, 0xff7ffff0, 0x3000010},
12621{0x3000000, 0xe73a5134, 0xff7fffff, 0xff7fffff, 0x3000010},
12622{0x3000000, 0xe73a5134, 0xff800000, 0xff800000, 0x3000000},
12623{0x3000000, 0xe73a5134, 0xff800001, 0x7fc00000, 0x3000001},
12624{0x3000000, 0xe73a5134, 0xff984a37, 0x7fc00000, 0x3000001},
12625{0x3000000, 0xe73a5134, 0xffbfffff, 0x7fc00000, 0x3000001},
12626{0x3000000, 0xe73a5134, 0xffc00000, 0x7fc00000, 0x3000000},
12627{0x3000000, 0xe73a5134, 0xffd9ba98, 0x7fc00000, 0x3000000},
12628{0x3000000, 0xe73a5134, 0xffffffff, 0x7fc00000, 0x3000000},
12629{0x3000000, 0xe73a5134, 0x4f3495cb, 0xe73a5134, 0x3000010},
12630{0x3000000, 0xe73a5134, 0xe73a5134, 0xe7ba5134, 0x3000000},
12631{0x3000000, 0xe73a5134, 0x7c994e9e, 0x7c994e9e, 0x3000010},
12632{0x3000000, 0xe73a5134, 0x6164bd6c, 0xe73a42e8, 0x3000010},
12633{0x3000000, 0xe73a5134, 0x9503366, 0xe73a5134, 0x3000010},
12634{0x3000000, 0xe73a5134, 0xbf5a97c9, 0xe73a5134, 0x3000010},
12635{0x3000000, 0xe73a5134, 0xe6ff1a14, 0xe79cef1f, 0x3000000},
12636{0x3000000, 0xe73a5134, 0x77f31e2f, 0x77f31e2f, 0x3000010},
12637{0x3000000, 0xe73a5134, 0xaab4d7d8, 0xe73a5134, 0x3000010},
12638{0x3000000, 0xe73a5134, 0x966320b, 0xe73a5134, 0x3000010},
12639{0x3000000, 0xe73a5134, 0xb26bddee, 0xe73a5134, 0x3000010},
12640{0x3000000, 0xe73a5134, 0xb5c8e5d3, 0xe73a5134, 0x3000010},
12641{0x3000000, 0xe73a5134, 0x317285d3, 0xe73a5134, 0x3000010},
12642{0x3000000, 0xe73a5134, 0x3c9623b1, 0xe73a5134, 0x3000010},
12643{0x3000000, 0xe73a5134, 0x51fd2c7c, 0xe73a5134, 0x3000010},
12644{0x3000000, 0xe73a5134, 0x7b906a6c, 0x7b906a6c, 0x3000010},
12645{0x3000000, 0x7c994e9e, 0x0, 0x7c994e9e, 0x3000000},
12646{0x3000000, 0x7c994e9e, 0x1, 0x7c994e9e, 0x3000080},
12647{0x3000000, 0x7c994e9e, 0x76, 0x7c994e9e, 0x3000080},
12648{0x3000000, 0x7c994e9e, 0x2b94, 0x7c994e9e, 0x3000080},
12649{0x3000000, 0x7c994e9e, 0x636d24, 0x7c994e9e, 0x3000080},
12650{0x3000000, 0x7c994e9e, 0x7fffff, 0x7c994e9e, 0x3000080},
12651{0x3000000, 0x7c994e9e, 0x800000, 0x7c994e9e, 0x3000010},
12652{0x3000000, 0x7c994e9e, 0x800002, 0x7c994e9e, 0x3000010},
12653{0x3000000, 0x7c994e9e, 0x1398437, 0x7c994e9e, 0x3000010},
12654{0x3000000, 0x7c994e9e, 0xba98d27, 0x7c994e9e, 0x3000010},
12655{0x3000000, 0x7c994e9e, 0xba98d7a, 0x7c994e9e, 0x3000010},
12656{0x3000000, 0x7c994e9e, 0x751f853a, 0x7c994fdd, 0x3000010},
12657{0x3000000, 0x7c994e9e, 0x7f7ffff0, 0x7f800000, 0x3000014},
12658{0x3000000, 0x7c994e9e, 0x7f7fffff, 0x7f800000, 0x3000014},
12659{0x3000000, 0x7c994e9e, 0x7f800000, 0x7f800000, 0x3000000},
12660{0x3000000, 0x7c994e9e, 0x7f800001, 0x7fc00000, 0x3000001},
12661{0x3000000, 0x7c994e9e, 0x7f984a37, 0x7fc00000, 0x3000001},
12662{0x3000000, 0x7c994e9e, 0x7fbfffff, 0x7fc00000, 0x3000001},
12663{0x3000000, 0x7c994e9e, 0x7fc00000, 0x7fc00000, 0x3000000},
12664{0x3000000, 0x7c994e9e, 0x7fd9ba98, 0x7fc00000, 0x3000000},
12665{0x3000000, 0x7c994e9e, 0x7fffffff, 0x7fc00000, 0x3000000},
12666{0x3000000, 0x7c994e9e, 0x80000000, 0x7c994e9e, 0x3000000},
12667{0x3000000, 0x7c994e9e, 0x80000001, 0x7c994e9e, 0x3000080},
12668{0x3000000, 0x7c994e9e, 0x80000076, 0x7c994e9e, 0x3000080},
12669{0x3000000, 0x7c994e9e, 0x80002b94, 0x7c994e9e, 0x3000080},
12670{0x3000000, 0x7c994e9e, 0x80636d24, 0x7c994e9e, 0x3000080},
12671{0x3000000, 0x7c994e9e, 0x807fffff, 0x7c994e9e, 0x3000080},
12672{0x3000000, 0x7c994e9e, 0x80800000, 0x7c994e9e, 0x3000010},
12673{0x3000000, 0x7c994e9e, 0x80800002, 0x7c994e9e, 0x3000010},
12674{0x3000000, 0x7c994e9e, 0x81398437, 0x7c994e9e, 0x3000010},
12675{0x3000000, 0x7c994e9e, 0x8ba98d27, 0x7c994e9e, 0x3000010},
12676{0x3000000, 0x7c994e9e, 0x8ba98d7a, 0x7c994e9e, 0x3000010},
12677{0x3000000, 0x7c994e9e, 0xf51f853a, 0x7c994d5f, 0x3000010},
12678{0x3000000, 0x7c994e9e, 0xff7ffff0, 0xff7b357b, 0x3000010},
12679{0x3000000, 0x7c994e9e, 0xff7fffff, 0xff7b358a, 0x3000010},
12680{0x3000000, 0x7c994e9e, 0xff800000, 0xff800000, 0x3000000},
12681{0x3000000, 0x7c994e9e, 0xff800001, 0x7fc00000, 0x3000001},
12682{0x3000000, 0x7c994e9e, 0xff984a37, 0x7fc00000, 0x3000001},
12683{0x3000000, 0x7c994e9e, 0xffbfffff, 0x7fc00000, 0x3000001},
12684{0x3000000, 0x7c994e9e, 0xffc00000, 0x7fc00000, 0x3000000},
12685{0x3000000, 0x7c994e9e, 0xffd9ba98, 0x7fc00000, 0x3000000},
12686{0x3000000, 0x7c994e9e, 0xffffffff, 0x7fc00000, 0x3000000},
12687{0x3000000, 0x7c994e9e, 0x4f3495cb, 0x7c994e9e, 0x3000010},
12688{0x3000000, 0x7c994e9e, 0xe73a5134, 0x7c994e9e, 0x3000010},
12689{0x3000000, 0x7c994e9e, 0x7c994e9e, 0x7d194e9e, 0x3000000},
12690{0x3000000, 0x7c994e9e, 0x6164bd6c, 0x7c994e9e, 0x3000010},
12691{0x3000000, 0x7c994e9e, 0x9503366, 0x7c994e9e, 0x3000010},
12692{0x3000000, 0x7c994e9e, 0xbf5a97c9, 0x7c994e9e, 0x3000010},
12693{0x3000000, 0x7c994e9e, 0xe6ff1a14, 0x7c994e9e, 0x3000010},
12694{0x3000000, 0x7c994e9e, 0x77f31e2f, 0x7c998b66, 0x3000010},
12695{0x3000000, 0x7c994e9e, 0xaab4d7d8, 0x7c994e9e, 0x3000010},
12696{0x3000000, 0x7c994e9e, 0x966320b, 0x7c994e9e, 0x3000010},
12697{0x3000000, 0x7c994e9e, 0xb26bddee, 0x7c994e9e, 0x3000010},
12698{0x3000000, 0x7c994e9e, 0xb5c8e5d3, 0x7c994e9e, 0x3000010},
12699{0x3000000, 0x7c994e9e, 0x317285d3, 0x7c994e9e, 0x3000010},
12700{0x3000000, 0x7c994e9e, 0x3c9623b1, 0x7c994e9e, 0x3000010},
12701{0x3000000, 0x7c994e9e, 0x51fd2c7c, 0x7c994e9e, 0x3000010},
12702{0x3000000, 0x7c994e9e, 0x7b906a6c, 0x7cbd6939, 0x3000000},
12703{0x3000000, 0x6164bd6c, 0x0, 0x6164bd6c, 0x3000000},
12704{0x3000000, 0x6164bd6c, 0x1, 0x6164bd6c, 0x3000080},
12705{0x3000000, 0x6164bd6c, 0x76, 0x6164bd6c, 0x3000080},
12706{0x3000000, 0x6164bd6c, 0x2b94, 0x6164bd6c, 0x3000080},
12707{0x3000000, 0x6164bd6c, 0x636d24, 0x6164bd6c, 0x3000080},
12708{0x3000000, 0x6164bd6c, 0x7fffff, 0x6164bd6c, 0x3000080},
12709{0x3000000, 0x6164bd6c, 0x800000, 0x6164bd6c, 0x3000010},
12710{0x3000000, 0x6164bd6c, 0x800002, 0x6164bd6c, 0x3000010},
12711{0x3000000, 0x6164bd6c, 0x1398437, 0x6164bd6c, 0x3000010},
12712{0x3000000, 0x6164bd6c, 0xba98d27, 0x6164bd6c, 0x3000010},
12713{0x3000000, 0x6164bd6c, 0xba98d7a, 0x6164bd6c, 0x3000010},
12714{0x3000000, 0x6164bd6c, 0x751f853a, 0x751f853a, 0x3000010},
12715{0x3000000, 0x6164bd6c, 0x7f7ffff0, 0x7f7ffff0, 0x3000010},
12716{0x3000000, 0x6164bd6c, 0x7f7fffff, 0x7f7fffff, 0x3000010},
12717{0x3000000, 0x6164bd6c, 0x7f800000, 0x7f800000, 0x3000000},
12718{0x3000000, 0x6164bd6c, 0x7f800001, 0x7fc00000, 0x3000001},
12719{0x3000000, 0x6164bd6c, 0x7f984a37, 0x7fc00000, 0x3000001},
12720{0x3000000, 0x6164bd6c, 0x7fbfffff, 0x7fc00000, 0x3000001},
12721{0x3000000, 0x6164bd6c, 0x7fc00000, 0x7fc00000, 0x3000000},
12722{0x3000000, 0x6164bd6c, 0x7fd9ba98, 0x7fc00000, 0x3000000},
12723{0x3000000, 0x6164bd6c, 0x7fffffff, 0x7fc00000, 0x3000000},
12724{0x3000000, 0x6164bd6c, 0x80000000, 0x6164bd6c, 0x3000000},
12725{0x3000000, 0x6164bd6c, 0x80000001, 0x6164bd6c, 0x3000080},
12726{0x3000000, 0x6164bd6c, 0x80000076, 0x6164bd6c, 0x3000080},
12727{0x3000000, 0x6164bd6c, 0x80002b94, 0x6164bd6c, 0x3000080},
12728{0x3000000, 0x6164bd6c, 0x80636d24, 0x6164bd6c, 0x3000080},
12729{0x3000000, 0x6164bd6c, 0x807fffff, 0x6164bd6c, 0x3000080},
12730{0x3000000, 0x6164bd6c, 0x80800000, 0x6164bd6c, 0x3000010},
12731{0x3000000, 0x6164bd6c, 0x80800002, 0x6164bd6c, 0x3000010},
12732{0x3000000, 0x6164bd6c, 0x81398437, 0x6164bd6c, 0x3000010},
12733{0x3000000, 0x6164bd6c, 0x8ba98d27, 0x6164bd6c, 0x3000010},
12734{0x3000000, 0x6164bd6c, 0x8ba98d7a, 0x6164bd6c, 0x3000010},
12735{0x3000000, 0x6164bd6c, 0xf51f853a, 0xf51f853a, 0x3000010},
12736{0x3000000, 0x6164bd6c, 0xff7ffff0, 0xff7ffff0, 0x3000010},
12737{0x3000000, 0x6164bd6c, 0xff7fffff, 0xff7fffff, 0x3000010},
12738{0x3000000, 0x6164bd6c, 0xff800000, 0xff800000, 0x3000000},
12739{0x3000000, 0x6164bd6c, 0xff800001, 0x7fc00000, 0x3000001},
12740{0x3000000, 0x6164bd6c, 0xff984a37, 0x7fc00000, 0x3000001},
12741{0x3000000, 0x6164bd6c, 0xffbfffff, 0x7fc00000, 0x3000001},
12742{0x3000000, 0x6164bd6c, 0xffc00000, 0x7fc00000, 0x3000000},
12743{0x3000000, 0x6164bd6c, 0xffd9ba98, 0x7fc00000, 0x3000000},
12744{0x3000000, 0x6164bd6c, 0xffffffff, 0x7fc00000, 0x3000000},
12745{0x3000000, 0x6164bd6c, 0x4f3495cb, 0x6164bd6c, 0x3000010},
12746{0x3000000, 0x6164bd6c, 0xe73a5134, 0xe73a42e8, 0x3000010},
12747{0x3000000, 0x6164bd6c, 0x7c994e9e, 0x7c994e9e, 0x3000010},
12748{0x3000000, 0x6164bd6c, 0x6164bd6c, 0x61e4bd6c, 0x3000000},
12749{0x3000000, 0x6164bd6c, 0x9503366, 0x6164bd6c, 0x3000010},
12750{0x3000000, 0x6164bd6c, 0xbf5a97c9, 0x6164bd6c, 0x3000010},
12751{0x3000000, 0x6164bd6c, 0xe6ff1a14, 0xe6fefd7c, 0x3000010},
12752{0x3000000, 0x6164bd6c, 0x77f31e2f, 0x77f31e2f, 0x3000010},
12753{0x3000000, 0x6164bd6c, 0xaab4d7d8, 0x6164bd6c, 0x3000010},
12754{0x3000000, 0x6164bd6c, 0x966320b, 0x6164bd6c, 0x3000010},
12755{0x3000000, 0x6164bd6c, 0xb26bddee, 0x6164bd6c, 0x3000010},
12756{0x3000000, 0x6164bd6c, 0xb5c8e5d3, 0x6164bd6c, 0x3000010},
12757{0x3000000, 0x6164bd6c, 0x317285d3, 0x6164bd6c, 0x3000010},
12758{0x3000000, 0x6164bd6c, 0x3c9623b1, 0x6164bd6c, 0x3000010},
12759{0x3000000, 0x6164bd6c, 0x51fd2c7c, 0x6164bd6c, 0x3000010},
12760{0x3000000, 0x6164bd6c, 0x7b906a6c, 0x7b906a6c, 0x3000010},
12761{0x3000000, 0x9503366, 0x0, 0x9503366, 0x3000000},
12762{0x3000000, 0x9503366, 0x1, 0x9503366, 0x3000080},
12763{0x3000000, 0x9503366, 0x76, 0x9503366, 0x3000080},
12764{0x3000000, 0x9503366, 0x2b94, 0x9503366, 0x3000080},
12765{0x3000000, 0x9503366, 0x636d24, 0x9503366, 0x3000080},
12766{0x3000000, 0x9503366, 0x7fffff, 0x9503366, 0x3000080},
12767{0x3000000, 0x9503366, 0x800000, 0x95033a6, 0x3000000},
12768{0x3000000, 0x9503366, 0x800002, 0x95033a6, 0x3000010},
12769{0x3000000, 0x9503366, 0x1398437, 0x9503420, 0x3000010},
12770{0x3000000, 0x9503366, 0xba98d27, 0xbb00ec2, 0x3000010},
12771{0x3000000, 0x9503366, 0xba98d7a, 0xbb00f15, 0x3000010},
12772{0x3000000, 0x9503366, 0x751f853a, 0x751f853a, 0x3000010},
12773{0x3000000, 0x9503366, 0x7f7ffff0, 0x7f7ffff0, 0x3000010},
12774{0x3000000, 0x9503366, 0x7f7fffff, 0x7f7fffff, 0x3000010},
12775{0x3000000, 0x9503366, 0x7f800000, 0x7f800000, 0x3000000},
12776{0x3000000, 0x9503366, 0x7f800001, 0x7fc00000, 0x3000001},
12777{0x3000000, 0x9503366, 0x7f984a37, 0x7fc00000, 0x3000001},
12778{0x3000000, 0x9503366, 0x7fbfffff, 0x7fc00000, 0x3000001},
12779{0x3000000, 0x9503366, 0x7fc00000, 0x7fc00000, 0x3000000},
12780{0x3000000, 0x9503366, 0x7fd9ba98, 0x7fc00000, 0x3000000},
12781{0x3000000, 0x9503366, 0x7fffffff, 0x7fc00000, 0x3000000},
12782{0x3000000, 0x9503366, 0x80000000, 0x9503366, 0x3000000},
12783{0x3000000, 0x9503366, 0x80000001, 0x9503366, 0x3000080},
12784{0x3000000, 0x9503366, 0x80000076, 0x9503366, 0x3000080},
12785{0x3000000, 0x9503366, 0x80002b94, 0x9503366, 0x3000080},
12786{0x3000000, 0x9503366, 0x80636d24, 0x9503366, 0x3000080},
12787{0x3000000, 0x9503366, 0x807fffff, 0x9503366, 0x3000080},
12788{0x3000000, 0x9503366, 0x80800000, 0x9503326, 0x3000000},
12789{0x3000000, 0x9503366, 0x80800002, 0x9503326, 0x3000010},
12790{0x3000000, 0x9503366, 0x81398437, 0x95032ac, 0x3000010},
12791{0x3000000, 0x9503366, 0x8ba98d27, 0x8ba30b8c, 0x3000010},
12792{0x3000000, 0x9503366, 0x8ba98d7a, 0x8ba30bdf, 0x3000010},
12793{0x3000000, 0x9503366, 0xf51f853a, 0xf51f853a, 0x3000010},
12794{0x3000000, 0x9503366, 0xff7ffff0, 0xff7ffff0, 0x3000010},
12795{0x3000000, 0x9503366, 0xff7fffff, 0xff7fffff, 0x3000010},
12796{0x3000000, 0x9503366, 0xff800000, 0xff800000, 0x3000000},
12797{0x3000000, 0x9503366, 0xff800001, 0x7fc00000, 0x3000001},
12798{0x3000000, 0x9503366, 0xff984a37, 0x7fc00000, 0x3000001},
12799{0x3000000, 0x9503366, 0xffbfffff, 0x7fc00000, 0x3000001},
12800{0x3000000, 0x9503366, 0xffc00000, 0x7fc00000, 0x3000000},
12801{0x3000000, 0x9503366, 0xffd9ba98, 0x7fc00000, 0x3000000},
12802{0x3000000, 0x9503366, 0xffffffff, 0x7fc00000, 0x3000000},
12803{0x3000000, 0x9503366, 0x4f3495cb, 0x4f3495cb, 0x3000010},
12804{0x3000000, 0x9503366, 0xe73a5134, 0xe73a5134, 0x3000010},
12805{0x3000000, 0x9503366, 0x7c994e9e, 0x7c994e9e, 0x3000010},
12806{0x3000000, 0x9503366, 0x6164bd6c, 0x6164bd6c, 0x3000010},
12807{0x3000000, 0x9503366, 0x9503366, 0x9d03366, 0x3000000},
12808{0x3000000, 0x9503366, 0xbf5a97c9, 0xbf5a97c9, 0x3000010},
12809{0x3000000, 0x9503366, 0xe6ff1a14, 0xe6ff1a14, 0x3000010},
12810{0x3000000, 0x9503366, 0x77f31e2f, 0x77f31e2f, 0x3000010},
12811{0x3000000, 0x9503366, 0xaab4d7d8, 0xaab4d7d8, 0x3000010},
12812{0x3000000, 0x9503366, 0x966320b, 0x9db32b8, 0x3000010},
12813{0x3000000, 0x9503366, 0xb26bddee, 0xb26bddee, 0x3000010},
12814{0x3000000, 0x9503366, 0xb5c8e5d3, 0xb5c8e5d3, 0x3000010},
12815{0x3000000, 0x9503366, 0x317285d3, 0x317285d3, 0x3000010},
12816{0x3000000, 0x9503366, 0x3c9623b1, 0x3c9623b1, 0x3000010},
12817{0x3000000, 0x9503366, 0x51fd2c7c, 0x51fd2c7c, 0x3000010},
12818{0x3000000, 0x9503366, 0x7b906a6c, 0x7b906a6c, 0x3000010},
12819{0x3000000, 0xbf5a97c9, 0x0, 0xbf5a97c9, 0x3000000},
12820{0x3000000, 0xbf5a97c9, 0x1, 0xbf5a97c9, 0x3000080},
12821{0x3000000, 0xbf5a97c9, 0x76, 0xbf5a97c9, 0x3000080},
12822{0x3000000, 0xbf5a97c9, 0x2b94, 0xbf5a97c9, 0x3000080},
12823{0x3000000, 0xbf5a97c9, 0x636d24, 0xbf5a97c9, 0x3000080},
12824{0x3000000, 0xbf5a97c9, 0x7fffff, 0xbf5a97c9, 0x3000080},
12825{0x3000000, 0xbf5a97c9, 0x800000, 0xbf5a97c9, 0x3000010},
12826{0x3000000, 0xbf5a97c9, 0x800002, 0xbf5a97c9, 0x3000010},
12827{0x3000000, 0xbf5a97c9, 0x1398437, 0xbf5a97c9, 0x3000010},
12828{0x3000000, 0xbf5a97c9, 0xba98d27, 0xbf5a97c9, 0x3000010},
12829{0x3000000, 0xbf5a97c9, 0xba98d7a, 0xbf5a97c9, 0x3000010},
12830{0x3000000, 0xbf5a97c9, 0x751f853a, 0x751f853a, 0x3000010},
12831{0x3000000, 0xbf5a97c9, 0x7f7ffff0, 0x7f7ffff0, 0x3000010},
12832{0x3000000, 0xbf5a97c9, 0x7f7fffff, 0x7f7fffff, 0x3000010},
12833{0x3000000, 0xbf5a97c9, 0x7f800000, 0x7f800000, 0x3000000},
12834{0x3000000, 0xbf5a97c9, 0x7f800001, 0x7fc00000, 0x3000001},
12835{0x3000000, 0xbf5a97c9, 0x7f984a37, 0x7fc00000, 0x3000001},
12836{0x3000000, 0xbf5a97c9, 0x7fbfffff, 0x7fc00000, 0x3000001},
12837{0x3000000, 0xbf5a97c9, 0x7fc00000, 0x7fc00000, 0x3000000},
12838{0x3000000, 0xbf5a97c9, 0x7fd9ba98, 0x7fc00000, 0x3000000},
12839{0x3000000, 0xbf5a97c9, 0x7fffffff, 0x7fc00000, 0x3000000},
12840{0x3000000, 0xbf5a97c9, 0x80000000, 0xbf5a97c9, 0x3000000},
12841{0x3000000, 0xbf5a97c9, 0x80000001, 0xbf5a97c9, 0x3000080},
12842{0x3000000, 0xbf5a97c9, 0x80000076, 0xbf5a97c9, 0x3000080},
12843{0x3000000, 0xbf5a97c9, 0x80002b94, 0xbf5a97c9, 0x3000080},
12844{0x3000000, 0xbf5a97c9, 0x80636d24, 0xbf5a97c9, 0x3000080},
12845{0x3000000, 0xbf5a97c9, 0x807fffff, 0xbf5a97c9, 0x3000080},
12846{0x3000000, 0xbf5a97c9, 0x80800000, 0xbf5a97c9, 0x3000010},
12847{0x3000000, 0xbf5a97c9, 0x80800002, 0xbf5a97c9, 0x3000010},
12848{0x3000000, 0xbf5a97c9, 0x81398437, 0xbf5a97c9, 0x3000010},
12849{0x3000000, 0xbf5a97c9, 0x8ba98d27, 0xbf5a97c9, 0x3000010},
12850{0x3000000, 0xbf5a97c9, 0x8ba98d7a, 0xbf5a97c9, 0x3000010},
12851{0x3000000, 0xbf5a97c9, 0xf51f853a, 0xf51f853a, 0x3000010},
12852{0x3000000, 0xbf5a97c9, 0xff7ffff0, 0xff7ffff0, 0x3000010},
12853{0x3000000, 0xbf5a97c9, 0xff7fffff, 0xff7fffff, 0x3000010},
12854{0x3000000, 0xbf5a97c9, 0xff800000, 0xff800000, 0x3000000},
12855{0x3000000, 0xbf5a97c9, 0xff800001, 0x7fc00000, 0x3000001},
12856{0x3000000, 0xbf5a97c9, 0xff984a37, 0x7fc00000, 0x3000001},
12857{0x3000000, 0xbf5a97c9, 0xffbfffff, 0x7fc00000, 0x3000001},
12858{0x3000000, 0xbf5a97c9, 0xffc00000, 0x7fc00000, 0x3000000},
12859{0x3000000, 0xbf5a97c9, 0xffd9ba98, 0x7fc00000, 0x3000000},
12860{0x3000000, 0xbf5a97c9, 0xffffffff, 0x7fc00000, 0x3000000},
12861{0x3000000, 0xbf5a97c9, 0x4f3495cb, 0x4f3495cb, 0x3000010},
12862{0x3000000, 0xbf5a97c9, 0xe73a5134, 0xe73a5134, 0x3000010},
12863{0x3000000, 0xbf5a97c9, 0x7c994e9e, 0x7c994e9e, 0x3000010},
12864{0x3000000, 0xbf5a97c9, 0x6164bd6c, 0x6164bd6c, 0x3000010},
12865{0x3000000, 0xbf5a97c9, 0x9503366, 0xbf5a97c9, 0x3000010},
12866{0x3000000, 0xbf5a97c9, 0xbf5a97c9, 0xbfda97c9, 0x3000000},
12867{0x3000000, 0xbf5a97c9, 0xe6ff1a14, 0xe6ff1a14, 0x3000010},
12868{0x3000000, 0xbf5a97c9, 0x77f31e2f, 0x77f31e2f, 0x3000010},
12869{0x3000000, 0xbf5a97c9, 0xaab4d7d8, 0xbf5a97c9, 0x3000010},
12870{0x3000000, 0xbf5a97c9, 0x966320b, 0xbf5a97c9, 0x3000010},
12871{0x3000000, 0xbf5a97c9, 0xb26bddee, 0xbf5a97c9, 0x3000010},
12872{0x3000000, 0xbf5a97c9, 0xb5c8e5d3, 0xbf5a97e2, 0x3000010},
12873{0x3000000, 0xbf5a97c9, 0x317285d3, 0xbf5a97c9, 0x3000010},
12874{0x3000000, 0xbf5a97c9, 0x3c9623b1, 0xbf55e6ab, 0x3000010},
12875{0x3000000, 0xbf5a97c9, 0x51fd2c7c, 0x51fd2c7c, 0x3000010},
12876{0x3000000, 0xbf5a97c9, 0x7b906a6c, 0x7b906a6c, 0x3000010},
12877{0x3000000, 0xe6ff1a14, 0x0, 0xe6ff1a14, 0x3000000},
12878{0x3000000, 0xe6ff1a14, 0x1, 0xe6ff1a14, 0x3000080},
12879{0x3000000, 0xe6ff1a14, 0x76, 0xe6ff1a14, 0x3000080},
12880{0x3000000, 0xe6ff1a14, 0x2b94, 0xe6ff1a14, 0x3000080},
12881{0x3000000, 0xe6ff1a14, 0x636d24, 0xe6ff1a14, 0x3000080},
12882{0x3000000, 0xe6ff1a14, 0x7fffff, 0xe6ff1a14, 0x3000080},
12883{0x3000000, 0xe6ff1a14, 0x800000, 0xe6ff1a14, 0x3000010},
12884{0x3000000, 0xe6ff1a14, 0x800002, 0xe6ff1a14, 0x3000010},
12885{0x3000000, 0xe6ff1a14, 0x1398437, 0xe6ff1a14, 0x3000010},
12886{0x3000000, 0xe6ff1a14, 0xba98d27, 0xe6ff1a14, 0x3000010},
12887{0x3000000, 0xe6ff1a14, 0xba98d7a, 0xe6ff1a14, 0x3000010},
12888{0x3000000, 0xe6ff1a14, 0x751f853a, 0x751f853a, 0x3000010},
12889{0x3000000, 0xe6ff1a14, 0x7f7ffff0, 0x7f7ffff0, 0x3000010},
12890{0x3000000, 0xe6ff1a14, 0x7f7fffff, 0x7f7fffff, 0x3000010},
12891{0x3000000, 0xe6ff1a14, 0x7f800000, 0x7f800000, 0x3000000},
12892{0x3000000, 0xe6ff1a14, 0x7f800001, 0x7fc00000, 0x3000001},
12893{0x3000000, 0xe6ff1a14, 0x7f984a37, 0x7fc00000, 0x3000001},
12894{0x3000000, 0xe6ff1a14, 0x7fbfffff, 0x7fc00000, 0x3000001},
12895{0x3000000, 0xe6ff1a14, 0x7fc00000, 0x7fc00000, 0x3000000},
12896{0x3000000, 0xe6ff1a14, 0x7fd9ba98, 0x7fc00000, 0x3000000},
12897{0x3000000, 0xe6ff1a14, 0x7fffffff, 0x7fc00000, 0x3000000},
12898{0x3000000, 0xe6ff1a14, 0x80000000, 0xe6ff1a14, 0x3000000},
12899{0x3000000, 0xe6ff1a14, 0x80000001, 0xe6ff1a14, 0x3000080},
12900{0x3000000, 0xe6ff1a14, 0x80000076, 0xe6ff1a14, 0x3000080},
12901{0x3000000, 0xe6ff1a14, 0x80002b94, 0xe6ff1a14, 0x3000080},
12902{0x3000000, 0xe6ff1a14, 0x80636d24, 0xe6ff1a14, 0x3000080},
12903{0x3000000, 0xe6ff1a14, 0x807fffff, 0xe6ff1a14, 0x3000080},
12904{0x3000000, 0xe6ff1a14, 0x80800000, 0xe6ff1a14, 0x3000010},
12905{0x3000000, 0xe6ff1a14, 0x80800002, 0xe6ff1a14, 0x3000010},
12906{0x3000000, 0xe6ff1a14, 0x81398437, 0xe6ff1a14, 0x3000010},
12907{0x3000000, 0xe6ff1a14, 0x8ba98d27, 0xe6ff1a14, 0x3000010},
12908{0x3000000, 0xe6ff1a14, 0x8ba98d7a, 0xe6ff1a14, 0x3000010},
12909{0x3000000, 0xe6ff1a14, 0xf51f853a, 0xf51f853a, 0x3000010},
12910{0x3000000, 0xe6ff1a14, 0xff7ffff0, 0xff7ffff0, 0x3000010},
12911{0x3000000, 0xe6ff1a14, 0xff7fffff, 0xff7fffff, 0x3000010},
12912{0x3000000, 0xe6ff1a14, 0xff800000, 0xff800000, 0x3000000},
12913{0x3000000, 0xe6ff1a14, 0xff800001, 0x7fc00000, 0x3000001},
12914{0x3000000, 0xe6ff1a14, 0xff984a37, 0x7fc00000, 0x3000001},
12915{0x3000000, 0xe6ff1a14, 0xffbfffff, 0x7fc00000, 0x3000001},
12916{0x3000000, 0xe6ff1a14, 0xffc00000, 0x7fc00000, 0x3000000},
12917{0x3000000, 0xe6ff1a14, 0xffd9ba98, 0x7fc00000, 0x3000000},
12918{0x3000000, 0xe6ff1a14, 0xffffffff, 0x7fc00000, 0x3000000},
12919{0x3000000, 0xe6ff1a14, 0x4f3495cb, 0xe6ff1a14, 0x3000010},
12920{0x3000000, 0xe6ff1a14, 0xe73a5134, 0xe79cef1f, 0x3000000},
12921{0x3000000, 0xe6ff1a14, 0x7c994e9e, 0x7c994e9e, 0x3000010},
12922{0x3000000, 0xe6ff1a14, 0x6164bd6c, 0xe6fefd7c, 0x3000010},
12923{0x3000000, 0xe6ff1a14, 0x9503366, 0xe6ff1a14, 0x3000010},
12924{0x3000000, 0xe6ff1a14, 0xbf5a97c9, 0xe6ff1a14, 0x3000010},
12925{0x3000000, 0xe6ff1a14, 0xe6ff1a14, 0xe77f1a14, 0x3000000},
12926{0x3000000, 0xe6ff1a14, 0x77f31e2f, 0x77f31e2f, 0x3000010},
12927{0x3000000, 0xe6ff1a14, 0xaab4d7d8, 0xe6ff1a14, 0x3000010},
12928{0x3000000, 0xe6ff1a14, 0x966320b, 0xe6ff1a14, 0x3000010},
12929{0x3000000, 0xe6ff1a14, 0xb26bddee, 0xe6ff1a14, 0x3000010},
12930{0x3000000, 0xe6ff1a14, 0xb5c8e5d3, 0xe6ff1a14, 0x3000010},
12931{0x3000000, 0xe6ff1a14, 0x317285d3, 0xe6ff1a14, 0x3000010},
12932{0x3000000, 0xe6ff1a14, 0x3c9623b1, 0xe6ff1a14, 0x3000010},
12933{0x3000000, 0xe6ff1a14, 0x51fd2c7c, 0xe6ff1a14, 0x3000010},
12934{0x3000000, 0xe6ff1a14, 0x7b906a6c, 0x7b906a6c, 0x3000010},
12935{0x3000000, 0x77f31e2f, 0x0, 0x77f31e2f, 0x3000000},
12936{0x3000000, 0x77f31e2f, 0x1, 0x77f31e2f, 0x3000080},
12937{0x3000000, 0x77f31e2f, 0x76, 0x77f31e2f, 0x3000080},
12938{0x3000000, 0x77f31e2f, 0x2b94, 0x77f31e2f, 0x3000080},
12939{0x3000000, 0x77f31e2f, 0x636d24, 0x77f31e2f, 0x3000080},
12940{0x3000000, 0x77f31e2f, 0x7fffff, 0x77f31e2f, 0x3000080},
12941{0x3000000, 0x77f31e2f, 0x800000, 0x77f31e2f, 0x3000010},
12942{0x3000000, 0x77f31e2f, 0x800002, 0x77f31e2f, 0x3000010},
12943{0x3000000, 0x77f31e2f, 0x1398437, 0x77f31e2f, 0x3000010},
12944{0x3000000, 0x77f31e2f, 0xba98d27, 0x77f31e2f, 0x3000010},
12945{0x3000000, 0x77f31e2f, 0xba98d7a, 0x77f31e2f, 0x3000010},
12946{0x3000000, 0x77f31e2f, 0x751f853a, 0x77f81a59, 0x3000010},
12947{0x3000000, 0x77f31e2f, 0x7f7ffff0, 0x7f800000, 0x3000014},
12948{0x3000000, 0x77f31e2f, 0x7f7fffff, 0x7f800000, 0x3000014},
12949{0x3000000, 0x77f31e2f, 0x7f800000, 0x7f800000, 0x3000000},
12950{0x3000000, 0x77f31e2f, 0x7f800001, 0x7fc00000, 0x3000001},
12951{0x3000000, 0x77f31e2f, 0x7f984a37, 0x7fc00000, 0x3000001},
12952{0x3000000, 0x77f31e2f, 0x7fbfffff, 0x7fc00000, 0x3000001},
12953{0x3000000, 0x77f31e2f, 0x7fc00000, 0x7fc00000, 0x3000000},
12954{0x3000000, 0x77f31e2f, 0x7fd9ba98, 0x7fc00000, 0x3000000},
12955{0x3000000, 0x77f31e2f, 0x7fffffff, 0x7fc00000, 0x3000000},
12956{0x3000000, 0x77f31e2f, 0x80000000, 0x77f31e2f, 0x3000000},
12957{0x3000000, 0x77f31e2f, 0x80000001, 0x77f31e2f, 0x3000080},
12958{0x3000000, 0x77f31e2f, 0x80000076, 0x77f31e2f, 0x3000080},
12959{0x3000000, 0x77f31e2f, 0x80002b94, 0x77f31e2f, 0x3000080},
12960{0x3000000, 0x77f31e2f, 0x80636d24, 0x77f31e2f, 0x3000080},
12961{0x3000000, 0x77f31e2f, 0x807fffff, 0x77f31e2f, 0x3000080},
12962{0x3000000, 0x77f31e2f, 0x80800000, 0x77f31e2f, 0x3000010},
12963{0x3000000, 0x77f31e2f, 0x80800002, 0x77f31e2f, 0x3000010},
12964{0x3000000, 0x77f31e2f, 0x81398437, 0x77f31e2f, 0x3000010},
12965{0x3000000, 0x77f31e2f, 0x8ba98d27, 0x77f31e2f, 0x3000010},
12966{0x3000000, 0x77f31e2f, 0x8ba98d7a, 0x77f31e2f, 0x3000010},
12967{0x3000000, 0x77f31e2f, 0xf51f853a, 0x77ee2205, 0x3000010},
12968{0x3000000, 0x77f31e2f, 0xff7ffff0, 0xff7ffe0a, 0x3000010},
12969{0x3000000, 0x77f31e2f, 0xff7fffff, 0xff7ffe19, 0x3000010},
12970{0x3000000, 0x77f31e2f, 0xff800000, 0xff800000, 0x3000000},
12971{0x3000000, 0x77f31e2f, 0xff800001, 0x7fc00000, 0x3000001},
12972{0x3000000, 0x77f31e2f, 0xff984a37, 0x7fc00000, 0x3000001},
12973{0x3000000, 0x77f31e2f, 0xffbfffff, 0x7fc00000, 0x3000001},
12974{0x3000000, 0x77f31e2f, 0xffc00000, 0x7fc00000, 0x3000000},
12975{0x3000000, 0x77f31e2f, 0xffd9ba98, 0x7fc00000, 0x3000000},
12976{0x3000000, 0x77f31e2f, 0xffffffff, 0x7fc00000, 0x3000000},
12977{0x3000000, 0x77f31e2f, 0x4f3495cb, 0x77f31e2f, 0x3000010},
12978{0x3000000, 0x77f31e2f, 0xe73a5134, 0x77f31e2f, 0x3000010},
12979{0x3000000, 0x77f31e2f, 0x7c994e9e, 0x7c998b66, 0x3000010},
12980{0x3000000, 0x77f31e2f, 0x6164bd6c, 0x77f31e2f, 0x3000010},
12981{0x3000000, 0x77f31e2f, 0x9503366, 0x77f31e2f, 0x3000010},
12982{0x3000000, 0x77f31e2f, 0xbf5a97c9, 0x77f31e2f, 0x3000010},
12983{0x3000000, 0x77f31e2f, 0xe6ff1a14, 0x77f31e2f, 0x3000010},
12984{0x3000000, 0x77f31e2f, 0x77f31e2f, 0x78731e2f, 0x3000000},
12985{0x3000000, 0x77f31e2f, 0xaab4d7d8, 0x77f31e2f, 0x3000010},
12986{0x3000000, 0x77f31e2f, 0x966320b, 0x77f31e2f, 0x3000010},
12987{0x3000000, 0x77f31e2f, 0xb26bddee, 0x77f31e2f, 0x3000010},
12988{0x3000000, 0x77f31e2f, 0xb5c8e5d3, 0x77f31e2f, 0x3000010},
12989{0x3000000, 0x77f31e2f, 0x317285d3, 0x77f31e2f, 0x3000010},
12990{0x3000000, 0x77f31e2f, 0x3c9623b1, 0x77f31e2f, 0x3000010},
12991{0x3000000, 0x77f31e2f, 0x51fd2c7c, 0x77f31e2f, 0x3000010},
12992{0x3000000, 0x77f31e2f, 0x7b906a6c, 0x7b915d8a, 0x3000010},
12993{0x3000000, 0xaab4d7d8, 0x0, 0xaab4d7d8, 0x3000000},
12994{0x3000000, 0xaab4d7d8, 0x1, 0xaab4d7d8, 0x3000080},
12995{0x3000000, 0xaab4d7d8, 0x76, 0xaab4d7d8, 0x3000080},
12996{0x3000000, 0xaab4d7d8, 0x2b94, 0xaab4d7d8, 0x3000080},
12997{0x3000000, 0xaab4d7d8, 0x636d24, 0xaab4d7d8, 0x3000080},
12998{0x3000000, 0xaab4d7d8, 0x7fffff, 0xaab4d7d8, 0x3000080},
12999{0x3000000, 0xaab4d7d8, 0x800000, 0xaab4d7d8, 0x3000010},
13000{0x3000000, 0xaab4d7d8, 0x800002, 0xaab4d7d8, 0x3000010},
13001{0x3000000, 0xaab4d7d8, 0x1398437, 0xaab4d7d8, 0x3000010},
13002{0x3000000, 0xaab4d7d8, 0xba98d27, 0xaab4d7d8, 0x3000010},
13003{0x3000000, 0xaab4d7d8, 0xba98d7a, 0xaab4d7d8, 0x3000010},
13004{0x3000000, 0xaab4d7d8, 0x751f853a, 0x751f853a, 0x3000010},
13005{0x3000000, 0xaab4d7d8, 0x7f7ffff0, 0x7f7ffff0, 0x3000010},
13006{0x3000000, 0xaab4d7d8, 0x7f7fffff, 0x7f7fffff, 0x3000010},
13007{0x3000000, 0xaab4d7d8, 0x7f800000, 0x7f800000, 0x3000000},
13008{0x3000000, 0xaab4d7d8, 0x7f800001, 0x7fc00000, 0x3000001},
13009{0x3000000, 0xaab4d7d8, 0x7f984a37, 0x7fc00000, 0x3000001},
13010{0x3000000, 0xaab4d7d8, 0x7fbfffff, 0x7fc00000, 0x3000001},
13011{0x3000000, 0xaab4d7d8, 0x7fc00000, 0x7fc00000, 0x3000000},
13012{0x3000000, 0xaab4d7d8, 0x7fd9ba98, 0x7fc00000, 0x3000000},
13013{0x3000000, 0xaab4d7d8, 0x7fffffff, 0x7fc00000, 0x3000000},
13014{0x3000000, 0xaab4d7d8, 0x80000000, 0xaab4d7d8, 0x3000000},
13015{0x3000000, 0xaab4d7d8, 0x80000001, 0xaab4d7d8, 0x3000080},
13016{0x3000000, 0xaab4d7d8, 0x80000076, 0xaab4d7d8, 0x3000080},
13017{0x3000000, 0xaab4d7d8, 0x80002b94, 0xaab4d7d8, 0x3000080},
13018{0x3000000, 0xaab4d7d8, 0x80636d24, 0xaab4d7d8, 0x3000080},
13019{0x3000000, 0xaab4d7d8, 0x807fffff, 0xaab4d7d8, 0x3000080},
13020{0x3000000, 0xaab4d7d8, 0x80800000, 0xaab4d7d8, 0x3000010},
13021{0x3000000, 0xaab4d7d8, 0x80800002, 0xaab4d7d8, 0x3000010},
13022{0x3000000, 0xaab4d7d8, 0x81398437, 0xaab4d7d8, 0x3000010},
13023{0x3000000, 0xaab4d7d8, 0x8ba98d27, 0xaab4d7d8, 0x3000010},
13024{0x3000000, 0xaab4d7d8, 0x8ba98d7a, 0xaab4d7d8, 0x3000010},
13025{0x3000000, 0xaab4d7d8, 0xf51f853a, 0xf51f853a, 0x3000010},
13026{0x3000000, 0xaab4d7d8, 0xff7ffff0, 0xff7ffff0, 0x3000010},
13027{0x3000000, 0xaab4d7d8, 0xff7fffff, 0xff7fffff, 0x3000010},
13028{0x3000000, 0xaab4d7d8, 0xff800000, 0xff800000, 0x3000000},
13029{0x3000000, 0xaab4d7d8, 0xff800001, 0x7fc00000, 0x3000001},
13030{0x3000000, 0xaab4d7d8, 0xff984a37, 0x7fc00000, 0x3000001},
13031{0x3000000, 0xaab4d7d8, 0xffbfffff, 0x7fc00000, 0x3000001},
13032{0x3000000, 0xaab4d7d8, 0xffc00000, 0x7fc00000, 0x3000000},
13033{0x3000000, 0xaab4d7d8, 0xffd9ba98, 0x7fc00000, 0x3000000},
13034{0x3000000, 0xaab4d7d8, 0xffffffff, 0x7fc00000, 0x3000000},
13035{0x3000000, 0xaab4d7d8, 0x4f3495cb, 0x4f3495cb, 0x3000010},
13036{0x3000000, 0xaab4d7d8, 0xe73a5134, 0xe73a5134, 0x3000010},
13037{0x3000000, 0xaab4d7d8, 0x7c994e9e, 0x7c994e9e, 0x3000010},
13038{0x3000000, 0xaab4d7d8, 0x6164bd6c, 0x6164bd6c, 0x3000010},
13039{0x3000000, 0xaab4d7d8, 0x9503366, 0xaab4d7d8, 0x3000010},
13040{0x3000000, 0xaab4d7d8, 0xbf5a97c9, 0xbf5a97c9, 0x3000010},
13041{0x3000000, 0xaab4d7d8, 0xe6ff1a14, 0xe6ff1a14, 0x3000010},
13042{0x3000000, 0xaab4d7d8, 0x77f31e2f, 0x77f31e2f, 0x3000010},
13043{0x3000000, 0xaab4d7d8, 0xaab4d7d8, 0xab34d7d8, 0x3000000},
13044{0x3000000, 0xaab4d7d8, 0x966320b, 0xaab4d7d8, 0x3000010},
13045{0x3000000, 0xaab4d7d8, 0xb26bddee, 0xb26bdf58, 0x3000010},
13046{0x3000000, 0xaab4d7d8, 0xb5c8e5d3, 0xb5c8e5d6, 0x3000010},
13047{0x3000000, 0xaab4d7d8, 0x317285d3, 0x3172802c, 0x3000010},
13048{0x3000000, 0xaab4d7d8, 0x3c9623b1, 0x3c9623b1, 0x3000010},
13049{0x3000000, 0xaab4d7d8, 0x51fd2c7c, 0x51fd2c7c, 0x3000010},
13050{0x3000000, 0xaab4d7d8, 0x7b906a6c, 0x7b906a6c, 0x3000010},
13051{0x3000000, 0x966320b, 0x0, 0x966320b, 0x3000000},
13052{0x3000000, 0x966320b, 0x1, 0x966320b, 0x3000080},
13053{0x3000000, 0x966320b, 0x76, 0x966320b, 0x3000080},
13054{0x3000000, 0x966320b, 0x2b94, 0x966320b, 0x3000080},
13055{0x3000000, 0x966320b, 0x636d24, 0x966320b, 0x3000080},
13056{0x3000000, 0x966320b, 0x7fffff, 0x966320b, 0x3000080},
13057{0x3000000, 0x966320b, 0x800000, 0x966324b, 0x3000000},
13058{0x3000000, 0x966320b, 0x800002, 0x966324b, 0x3000010},
13059{0x3000000, 0x966320b, 0x1398437, 0x96632c5, 0x3000010},
13060{0x3000000, 0x966320b, 0xba98d27, 0xbb0beb7, 0x3000010},
13061{0x3000000, 0x966320b, 0xba98d7a, 0xbb0bf0a, 0x3000010},
13062{0x3000000, 0x966320b, 0x751f853a, 0x751f853a, 0x3000010},
13063{0x3000000, 0x966320b, 0x7f7ffff0, 0x7f7ffff0, 0x3000010},
13064{0x3000000, 0x966320b, 0x7f7fffff, 0x7f7fffff, 0x3000010},
13065{0x3000000, 0x966320b, 0x7f800000, 0x7f800000, 0x3000000},
13066{0x3000000, 0x966320b, 0x7f800001, 0x7fc00000, 0x3000001},
13067{0x3000000, 0x966320b, 0x7f984a37, 0x7fc00000, 0x3000001},
13068{0x3000000, 0x966320b, 0x7fbfffff, 0x7fc00000, 0x3000001},
13069{0x3000000, 0x966320b, 0x7fc00000, 0x7fc00000, 0x3000000},
13070{0x3000000, 0x966320b, 0x7fd9ba98, 0x7fc00000, 0x3000000},
13071{0x3000000, 0x966320b, 0x7fffffff, 0x7fc00000, 0x3000000},
13072{0x3000000, 0x966320b, 0x80000000, 0x966320b, 0x3000000},
13073{0x3000000, 0x966320b, 0x80000001, 0x966320b, 0x3000080},
13074{0x3000000, 0x966320b, 0x80000076, 0x966320b, 0x3000080},
13075{0x3000000, 0x966320b, 0x80002b94, 0x966320b, 0x3000080},
13076{0x3000000, 0x966320b, 0x80636d24, 0x966320b, 0x3000080},
13077{0x3000000, 0x966320b, 0x807fffff, 0x966320b, 0x3000080},
13078{0x3000000, 0x966320b, 0x80800000, 0x96631cb, 0x3000000},
13079{0x3000000, 0x966320b, 0x80800002, 0x96631cb, 0x3000010},
13080{0x3000000, 0x966320b, 0x81398437, 0x9663151, 0x3000010},
13081{0x3000000, 0x966320b, 0x8ba98d27, 0x8ba25b97, 0x3000010},
13082{0x3000000, 0x966320b, 0x8ba98d7a, 0x8ba25bea, 0x3000010},
13083{0x3000000, 0x966320b, 0xf51f853a, 0xf51f853a, 0x3000010},
13084{0x3000000, 0x966320b, 0xff7ffff0, 0xff7ffff0, 0x3000010},
13085{0x3000000, 0x966320b, 0xff7fffff, 0xff7fffff, 0x3000010},
13086{0x3000000, 0x966320b, 0xff800000, 0xff800000, 0x3000000},
13087{0x3000000, 0x966320b, 0xff800001, 0x7fc00000, 0x3000001},
13088{0x3000000, 0x966320b, 0xff984a37, 0x7fc00000, 0x3000001},
13089{0x3000000, 0x966320b, 0xffbfffff, 0x7fc00000, 0x3000001},
13090{0x3000000, 0x966320b, 0xffc00000, 0x7fc00000, 0x3000000},
13091{0x3000000, 0x966320b, 0xffd9ba98, 0x7fc00000, 0x3000000},
13092{0x3000000, 0x966320b, 0xffffffff, 0x7fc00000, 0x3000000},
13093{0x3000000, 0x966320b, 0x4f3495cb, 0x4f3495cb, 0x3000010},
13094{0x3000000, 0x966320b, 0xe73a5134, 0xe73a5134, 0x3000010},
13095{0x3000000, 0x966320b, 0x7c994e9e, 0x7c994e9e, 0x3000010},
13096{0x3000000, 0x966320b, 0x6164bd6c, 0x6164bd6c, 0x3000010},
13097{0x3000000, 0x966320b, 0x9503366, 0x9db32b8, 0x3000010},
13098{0x3000000, 0x966320b, 0xbf5a97c9, 0xbf5a97c9, 0x3000010},
13099{0x3000000, 0x966320b, 0xe6ff1a14, 0xe6ff1a14, 0x3000010},
13100{0x3000000, 0x966320b, 0x77f31e2f, 0x77f31e2f, 0x3000010},
13101{0x3000000, 0x966320b, 0xaab4d7d8, 0xaab4d7d8, 0x3000010},
13102{0x3000000, 0x966320b, 0x966320b, 0x9e6320b, 0x3000000},
13103{0x3000000, 0x966320b, 0xb26bddee, 0xb26bddee, 0x3000010},
13104{0x3000000, 0x966320b, 0xb5c8e5d3, 0xb5c8e5d3, 0x3000010},
13105{0x3000000, 0x966320b, 0x317285d3, 0x317285d3, 0x3000010},
13106{0x3000000, 0x966320b, 0x3c9623b1, 0x3c9623b1, 0x3000010},
13107{0x3000000, 0x966320b, 0x51fd2c7c, 0x51fd2c7c, 0x3000010},
13108{0x3000000, 0x966320b, 0x7b906a6c, 0x7b906a6c, 0x3000010},
13109{0x3000000, 0xb26bddee, 0x0, 0xb26bddee, 0x3000000},
13110{0x3000000, 0xb26bddee, 0x1, 0xb26bddee, 0x3000080},
13111{0x3000000, 0xb26bddee, 0x76, 0xb26bddee, 0x3000080},
13112{0x3000000, 0xb26bddee, 0x2b94, 0xb26bddee, 0x3000080},
13113{0x3000000, 0xb26bddee, 0x636d24, 0xb26bddee, 0x3000080},
13114{0x3000000, 0xb26bddee, 0x7fffff, 0xb26bddee, 0x3000080},
13115{0x3000000, 0xb26bddee, 0x800000, 0xb26bddee, 0x3000010},
13116{0x3000000, 0xb26bddee, 0x800002, 0xb26bddee, 0x3000010},
13117{0x3000000, 0xb26bddee, 0x1398437, 0xb26bddee, 0x3000010},
13118{0x3000000, 0xb26bddee, 0xba98d27, 0xb26bddee, 0x3000010},
13119{0x3000000, 0xb26bddee, 0xba98d7a, 0xb26bddee, 0x3000010},
13120{0x3000000, 0xb26bddee, 0x751f853a, 0x751f853a, 0x3000010},
13121{0x3000000, 0xb26bddee, 0x7f7ffff0, 0x7f7ffff0, 0x3000010},
13122{0x3000000, 0xb26bddee, 0x7f7fffff, 0x7f7fffff, 0x3000010},
13123{0x3000000, 0xb26bddee, 0x7f800000, 0x7f800000, 0x3000000},
13124{0x3000000, 0xb26bddee, 0x7f800001, 0x7fc00000, 0x3000001},
13125{0x3000000, 0xb26bddee, 0x7f984a37, 0x7fc00000, 0x3000001},
13126{0x3000000, 0xb26bddee, 0x7fbfffff, 0x7fc00000, 0x3000001},
13127{0x3000000, 0xb26bddee, 0x7fc00000, 0x7fc00000, 0x3000000},
13128{0x3000000, 0xb26bddee, 0x7fd9ba98, 0x7fc00000, 0x3000000},
13129{0x3000000, 0xb26bddee, 0x7fffffff, 0x7fc00000, 0x3000000},
13130{0x3000000, 0xb26bddee, 0x80000000, 0xb26bddee, 0x3000000},
13131{0x3000000, 0xb26bddee, 0x80000001, 0xb26bddee, 0x3000080},
13132{0x3000000, 0xb26bddee, 0x80000076, 0xb26bddee, 0x3000080},
13133{0x3000000, 0xb26bddee, 0x80002b94, 0xb26bddee, 0x3000080},
13134{0x3000000, 0xb26bddee, 0x80636d24, 0xb26bddee, 0x3000080},
13135{0x3000000, 0xb26bddee, 0x807fffff, 0xb26bddee, 0x3000080},
13136{0x3000000, 0xb26bddee, 0x80800000, 0xb26bddee, 0x3000010},
13137{0x3000000, 0xb26bddee, 0x80800002, 0xb26bddee, 0x3000010},
13138{0x3000000, 0xb26bddee, 0x81398437, 0xb26bddee, 0x3000010},
13139{0x3000000, 0xb26bddee, 0x8ba98d27, 0xb26bddee, 0x3000010},
13140{0x3000000, 0xb26bddee, 0x8ba98d7a, 0xb26bddee, 0x3000010},
13141{0x3000000, 0xb26bddee, 0xf51f853a, 0xf51f853a, 0x3000010},
13142{0x3000000, 0xb26bddee, 0xff7ffff0, 0xff7ffff0, 0x3000010},
13143{0x3000000, 0xb26bddee, 0xff7fffff, 0xff7fffff, 0x3000010},
13144{0x3000000, 0xb26bddee, 0xff800000, 0xff800000, 0x3000000},
13145{0x3000000, 0xb26bddee, 0xff800001, 0x7fc00000, 0x3000001},
13146{0x3000000, 0xb26bddee, 0xff984a37, 0x7fc00000, 0x3000001},
13147{0x3000000, 0xb26bddee, 0xffbfffff, 0x7fc00000, 0x3000001},
13148{0x3000000, 0xb26bddee, 0xffc00000, 0x7fc00000, 0x3000000},
13149{0x3000000, 0xb26bddee, 0xffd9ba98, 0x7fc00000, 0x3000000},
13150{0x3000000, 0xb26bddee, 0xffffffff, 0x7fc00000, 0x3000000},
13151{0x3000000, 0xb26bddee, 0x4f3495cb, 0x4f3495cb, 0x3000010},
13152{0x3000000, 0xb26bddee, 0xe73a5134, 0xe73a5134, 0x3000010},
13153{0x3000000, 0xb26bddee, 0x7c994e9e, 0x7c994e9e, 0x3000010},
13154{0x3000000, 0xb26bddee, 0x6164bd6c, 0x6164bd6c, 0x3000010},
13155{0x3000000, 0xb26bddee, 0x9503366, 0xb26bddee, 0x3000010},
13156{0x3000000, 0xb26bddee, 0xbf5a97c9, 0xbf5a97c9, 0x3000010},
13157{0x3000000, 0xb26bddee, 0xe6ff1a14, 0xe6ff1a14, 0x3000010},
13158{0x3000000, 0xb26bddee, 0x77f31e2f, 0x77f31e2f, 0x3000010},
13159{0x3000000, 0xb26bddee, 0xaab4d7d8, 0xb26bdf58, 0x3000010},
13160{0x3000000, 0xb26bddee, 0x966320b, 0xb26bddee, 0x3000010},
13161{0x3000000, 0xb26bddee, 0xb26bddee, 0xb2ebddee, 0x3000000},
13162{0x3000000, 0xb26bddee, 0xb5c8e5d3, 0xb5cabd8f, 0x3000010},
13163{0x3000000, 0xb26bddee, 0x317285d3, 0xb22f3c79, 0x3000010},
13164{0x3000000, 0xb26bddee, 0x3c9623b1, 0x3c9623aa, 0x3000010},
13165{0x3000000, 0xb26bddee, 0x51fd2c7c, 0x51fd2c7c, 0x3000010},
13166{0x3000000, 0xb26bddee, 0x7b906a6c, 0x7b906a6c, 0x3000010},
13167{0x3000000, 0xb5c8e5d3, 0x0, 0xb5c8e5d3, 0x3000000},
13168{0x3000000, 0xb5c8e5d3, 0x1, 0xb5c8e5d3, 0x3000080},
13169{0x3000000, 0xb5c8e5d3, 0x76, 0xb5c8e5d3, 0x3000080},
13170{0x3000000, 0xb5c8e5d3, 0x2b94, 0xb5c8e5d3, 0x3000080},
13171{0x3000000, 0xb5c8e5d3, 0x636d24, 0xb5c8e5d3, 0x3000080},
13172{0x3000000, 0xb5c8e5d3, 0x7fffff, 0xb5c8e5d3, 0x3000080},
13173{0x3000000, 0xb5c8e5d3, 0x800000, 0xb5c8e5d3, 0x3000010},
13174{0x3000000, 0xb5c8e5d3, 0x800002, 0xb5c8e5d3, 0x3000010},
13175{0x3000000, 0xb5c8e5d3, 0x1398437, 0xb5c8e5d3, 0x3000010},
13176{0x3000000, 0xb5c8e5d3, 0xba98d27, 0xb5c8e5d3, 0x3000010},
13177{0x3000000, 0xb5c8e5d3, 0xba98d7a, 0xb5c8e5d3, 0x3000010},
13178{0x3000000, 0xb5c8e5d3, 0x751f853a, 0x751f853a, 0x3000010},
13179{0x3000000, 0xb5c8e5d3, 0x7f7ffff0, 0x7f7ffff0, 0x3000010},
13180{0x3000000, 0xb5c8e5d3, 0x7f7fffff, 0x7f7fffff, 0x3000010},
13181{0x3000000, 0xb5c8e5d3, 0x7f800000, 0x7f800000, 0x3000000},
13182{0x3000000, 0xb5c8e5d3, 0x7f800001, 0x7fc00000, 0x3000001},
13183{0x3000000, 0xb5c8e5d3, 0x7f984a37, 0x7fc00000, 0x3000001},
13184{0x3000000, 0xb5c8e5d3, 0x7fbfffff, 0x7fc00000, 0x3000001},
13185{0x3000000, 0xb5c8e5d3, 0x7fc00000, 0x7fc00000, 0x3000000},
13186{0x3000000, 0xb5c8e5d3, 0x7fd9ba98, 0x7fc00000, 0x3000000},
13187{0x3000000, 0xb5c8e5d3, 0x7fffffff, 0x7fc00000, 0x3000000},
13188{0x3000000, 0xb5c8e5d3, 0x80000000, 0xb5c8e5d3, 0x3000000},
13189{0x3000000, 0xb5c8e5d3, 0x80000001, 0xb5c8e5d3, 0x3000080},
13190{0x3000000, 0xb5c8e5d3, 0x80000076, 0xb5c8e5d3, 0x3000080},
13191{0x3000000, 0xb5c8e5d3, 0x80002b94, 0xb5c8e5d3, 0x3000080},
13192{0x3000000, 0xb5c8e5d3, 0x80636d24, 0xb5c8e5d3, 0x3000080},
13193{0x3000000, 0xb5c8e5d3, 0x807fffff, 0xb5c8e5d3, 0x3000080},
13194{0x3000000, 0xb5c8e5d3, 0x80800000, 0xb5c8e5d3, 0x3000010},
13195{0x3000000, 0xb5c8e5d3, 0x80800002, 0xb5c8e5d3, 0x3000010},
13196{0x3000000, 0xb5c8e5d3, 0x81398437, 0xb5c8e5d3, 0x3000010},
13197{0x3000000, 0xb5c8e5d3, 0x8ba98d27, 0xb5c8e5d3, 0x3000010},
13198{0x3000000, 0xb5c8e5d3, 0x8ba98d7a, 0xb5c8e5d3, 0x3000010},
13199{0x3000000, 0xb5c8e5d3, 0xf51f853a, 0xf51f853a, 0x3000010},
13200{0x3000000, 0xb5c8e5d3, 0xff7ffff0, 0xff7ffff0, 0x3000010},
13201{0x3000000, 0xb5c8e5d3, 0xff7fffff, 0xff7fffff, 0x3000010},
13202{0x3000000, 0xb5c8e5d3, 0xff800000, 0xff800000, 0x3000000},
13203{0x3000000, 0xb5c8e5d3, 0xff800001, 0x7fc00000, 0x3000001},
13204{0x3000000, 0xb5c8e5d3, 0xff984a37, 0x7fc00000, 0x3000001},
13205{0x3000000, 0xb5c8e5d3, 0xffbfffff, 0x7fc00000, 0x3000001},
13206{0x3000000, 0xb5c8e5d3, 0xffc00000, 0x7fc00000, 0x3000000},
13207{0x3000000, 0xb5c8e5d3, 0xffd9ba98, 0x7fc00000, 0x3000000},
13208{0x3000000, 0xb5c8e5d3, 0xffffffff, 0x7fc00000, 0x3000000},
13209{0x3000000, 0xb5c8e5d3, 0x4f3495cb, 0x4f3495cb, 0x3000010},
13210{0x3000000, 0xb5c8e5d3, 0xe73a5134, 0xe73a5134, 0x3000010},
13211{0x3000000, 0xb5c8e5d3, 0x7c994e9e, 0x7c994e9e, 0x3000010},
13212{0x3000000, 0xb5c8e5d3, 0x6164bd6c, 0x6164bd6c, 0x3000010},
13213{0x3000000, 0xb5c8e5d3, 0x9503366, 0xb5c8e5d3, 0x3000010},
13214{0x3000000, 0xb5c8e5d3, 0xbf5a97c9, 0xbf5a97e2, 0x3000010},
13215{0x3000000, 0xb5c8e5d3, 0xe6ff1a14, 0xe6ff1a14, 0x3000010},
13216{0x3000000, 0xb5c8e5d3, 0x77f31e2f, 0x77f31e2f, 0x3000010},
13217{0x3000000, 0xb5c8e5d3, 0xaab4d7d8, 0xb5c8e5d6, 0x3000010},
13218{0x3000000, 0xb5c8e5d3, 0x966320b, 0xb5c8e5d3, 0x3000010},
13219{0x3000000, 0xb5c8e5d3, 0xb26bddee, 0xb5cabd8f, 0x3000010},
13220{0x3000000, 0xb5c8e5d3, 0xb5c8e5d3, 0xb648e5d3, 0x3000000},
13221{0x3000000, 0xb5c8e5d3, 0x317285d3, 0xb5c86c90, 0x3000010},
13222{0x3000000, 0xb5c8e5d3, 0x3c9623b1, 0x3c96208d, 0x3000010},
13223{0x3000000, 0xb5c8e5d3, 0x51fd2c7c, 0x51fd2c7c, 0x3000010},
13224{0x3000000, 0xb5c8e5d3, 0x7b906a6c, 0x7b906a6c, 0x3000010},
13225{0x3000000, 0x317285d3, 0x0, 0x317285d3, 0x3000000},
13226{0x3000000, 0x317285d3, 0x1, 0x317285d3, 0x3000080},
13227{0x3000000, 0x317285d3, 0x76, 0x317285d3, 0x3000080},
13228{0x3000000, 0x317285d3, 0x2b94, 0x317285d3, 0x3000080},
13229{0x3000000, 0x317285d3, 0x636d24, 0x317285d3, 0x3000080},
13230{0x3000000, 0x317285d3, 0x7fffff, 0x317285d3, 0x3000080},
13231{0x3000000, 0x317285d3, 0x800000, 0x317285d3, 0x3000010},
13232{0x3000000, 0x317285d3, 0x800002, 0x317285d3, 0x3000010},
13233{0x3000000, 0x317285d3, 0x1398437, 0x317285d3, 0x3000010},
13234{0x3000000, 0x317285d3, 0xba98d27, 0x317285d3, 0x3000010},
13235{0x3000000, 0x317285d3, 0xba98d7a, 0x317285d3, 0x3000010},
13236{0x3000000, 0x317285d3, 0x751f853a, 0x751f853a, 0x3000010},
13237{0x3000000, 0x317285d3, 0x7f7ffff0, 0x7f7ffff0, 0x3000010},
13238{0x3000000, 0x317285d3, 0x7f7fffff, 0x7f7fffff, 0x3000010},
13239{0x3000000, 0x317285d3, 0x7f800000, 0x7f800000, 0x3000000},
13240{0x3000000, 0x317285d3, 0x7f800001, 0x7fc00000, 0x3000001},
13241{0x3000000, 0x317285d3, 0x7f984a37, 0x7fc00000, 0x3000001},
13242{0x3000000, 0x317285d3, 0x7fbfffff, 0x7fc00000, 0x3000001},
13243{0x3000000, 0x317285d3, 0x7fc00000, 0x7fc00000, 0x3000000},
13244{0x3000000, 0x317285d3, 0x7fd9ba98, 0x7fc00000, 0x3000000},
13245{0x3000000, 0x317285d3, 0x7fffffff, 0x7fc00000, 0x3000000},
13246{0x3000000, 0x317285d3, 0x80000000, 0x317285d3, 0x3000000},
13247{0x3000000, 0x317285d3, 0x80000001, 0x317285d3, 0x3000080},
13248{0x3000000, 0x317285d3, 0x80000076, 0x317285d3, 0x3000080},
13249{0x3000000, 0x317285d3, 0x80002b94, 0x317285d3, 0x3000080},
13250{0x3000000, 0x317285d3, 0x80636d24, 0x317285d3, 0x3000080},
13251{0x3000000, 0x317285d3, 0x807fffff, 0x317285d3, 0x3000080},
13252{0x3000000, 0x317285d3, 0x80800000, 0x317285d3, 0x3000010},
13253{0x3000000, 0x317285d3, 0x80800002, 0x317285d3, 0x3000010},
13254{0x3000000, 0x317285d3, 0x81398437, 0x317285d3, 0x3000010},
13255{0x3000000, 0x317285d3, 0x8ba98d27, 0x317285d3, 0x3000010},
13256{0x3000000, 0x317285d3, 0x8ba98d7a, 0x317285d3, 0x3000010},
13257{0x3000000, 0x317285d3, 0xf51f853a, 0xf51f853a, 0x3000010},
13258{0x3000000, 0x317285d3, 0xff7ffff0, 0xff7ffff0, 0x3000010},
13259{0x3000000, 0x317285d3, 0xff7fffff, 0xff7fffff, 0x3000010},
13260{0x3000000, 0x317285d3, 0xff800000, 0xff800000, 0x3000000},
13261{0x3000000, 0x317285d3, 0xff800001, 0x7fc00000, 0x3000001},
13262{0x3000000, 0x317285d3, 0xff984a37, 0x7fc00000, 0x3000001},
13263{0x3000000, 0x317285d3, 0xffbfffff, 0x7fc00000, 0x3000001},
13264{0x3000000, 0x317285d3, 0xffc00000, 0x7fc00000, 0x3000000},
13265{0x3000000, 0x317285d3, 0xffd9ba98, 0x7fc00000, 0x3000000},
13266{0x3000000, 0x317285d3, 0xffffffff, 0x7fc00000, 0x3000000},
13267{0x3000000, 0x317285d3, 0x4f3495cb, 0x4f3495cb, 0x3000010},
13268{0x3000000, 0x317285d3, 0xe73a5134, 0xe73a5134, 0x3000010},
13269{0x3000000, 0x317285d3, 0x7c994e9e, 0x7c994e9e, 0x3000010},
13270{0x3000000, 0x317285d3, 0x6164bd6c, 0x6164bd6c, 0x3000010},
13271{0x3000000, 0x317285d3, 0x9503366, 0x317285d3, 0x3000010},
13272{0x3000000, 0x317285d3, 0xbf5a97c9, 0xbf5a97c9, 0x3000010},
13273{0x3000000, 0x317285d3, 0xe6ff1a14, 0xe6ff1a14, 0x3000010},
13274{0x3000000, 0x317285d3, 0x77f31e2f, 0x77f31e2f, 0x3000010},
13275{0x3000000, 0x317285d3, 0xaab4d7d8, 0x3172802c, 0x3000010},
13276{0x3000000, 0x317285d3, 0x966320b, 0x317285d3, 0x3000010},
13277{0x3000000, 0x317285d3, 0xb26bddee, 0xb22f3c79, 0x3000010},
13278{0x3000000, 0x317285d3, 0xb5c8e5d3, 0xb5c86c90, 0x3000010},
13279{0x3000000, 0x317285d3, 0x317285d3, 0x31f285d3, 0x3000000},
13280{0x3000000, 0x317285d3, 0x3c9623b1, 0x3c9623b3, 0x3000010},
13281{0x3000000, 0x317285d3, 0x51fd2c7c, 0x51fd2c7c, 0x3000010},
13282{0x3000000, 0x317285d3, 0x7b906a6c, 0x7b906a6c, 0x3000010},
13283{0x3000000, 0x3c9623b1, 0x0, 0x3c9623b1, 0x3000000},
13284{0x3000000, 0x3c9623b1, 0x1, 0x3c9623b1, 0x3000080},
13285{0x3000000, 0x3c9623b1, 0x76, 0x3c9623b1, 0x3000080},
13286{0x3000000, 0x3c9623b1, 0x2b94, 0x3c9623b1, 0x3000080},
13287{0x3000000, 0x3c9623b1, 0x636d24, 0x3c9623b1, 0x3000080},
13288{0x3000000, 0x3c9623b1, 0x7fffff, 0x3c9623b1, 0x3000080},
13289{0x3000000, 0x3c9623b1, 0x800000, 0x3c9623b1, 0x3000010},
13290{0x3000000, 0x3c9623b1, 0x800002, 0x3c9623b1, 0x3000010},
13291{0x3000000, 0x3c9623b1, 0x1398437, 0x3c9623b1, 0x3000010},
13292{0x3000000, 0x3c9623b1, 0xba98d27, 0x3c9623b1, 0x3000010},
13293{0x3000000, 0x3c9623b1, 0xba98d7a, 0x3c9623b1, 0x3000010},
13294{0x3000000, 0x3c9623b1, 0x751f853a, 0x751f853a, 0x3000010},
13295{0x3000000, 0x3c9623b1, 0x7f7ffff0, 0x7f7ffff0, 0x3000010},
13296{0x3000000, 0x3c9623b1, 0x7f7fffff, 0x7f7fffff, 0x3000010},
13297{0x3000000, 0x3c9623b1, 0x7f800000, 0x7f800000, 0x3000000},
13298{0x3000000, 0x3c9623b1, 0x7f800001, 0x7fc00000, 0x3000001},
13299{0x3000000, 0x3c9623b1, 0x7f984a37, 0x7fc00000, 0x3000001},
13300{0x3000000, 0x3c9623b1, 0x7fbfffff, 0x7fc00000, 0x3000001},
13301{0x3000000, 0x3c9623b1, 0x7fc00000, 0x7fc00000, 0x3000000},
13302{0x3000000, 0x3c9623b1, 0x7fd9ba98, 0x7fc00000, 0x3000000},
13303{0x3000000, 0x3c9623b1, 0x7fffffff, 0x7fc00000, 0x3000000},
13304{0x3000000, 0x3c9623b1, 0x80000000, 0x3c9623b1, 0x3000000},
13305{0x3000000, 0x3c9623b1, 0x80000001, 0x3c9623b1, 0x3000080},
13306{0x3000000, 0x3c9623b1, 0x80000076, 0x3c9623b1, 0x3000080},
13307{0x3000000, 0x3c9623b1, 0x80002b94, 0x3c9623b1, 0x3000080},
13308{0x3000000, 0x3c9623b1, 0x80636d24, 0x3c9623b1, 0x3000080},
13309{0x3000000, 0x3c9623b1, 0x807fffff, 0x3c9623b1, 0x3000080},
13310{0x3000000, 0x3c9623b1, 0x80800000, 0x3c9623b1, 0x3000010},
13311{0x3000000, 0x3c9623b1, 0x80800002, 0x3c9623b1, 0x3000010},
13312{0x3000000, 0x3c9623b1, 0x81398437, 0x3c9623b1, 0x3000010},
13313{0x3000000, 0x3c9623b1, 0x8ba98d27, 0x3c9623b1, 0x3000010},
13314{0x3000000, 0x3c9623b1, 0x8ba98d7a, 0x3c9623b1, 0x3000010},
13315{0x3000000, 0x3c9623b1, 0xf51f853a, 0xf51f853a, 0x3000010},
13316{0x3000000, 0x3c9623b1, 0xff7ffff0, 0xff7ffff0, 0x3000010},
13317{0x3000000, 0x3c9623b1, 0xff7fffff, 0xff7fffff, 0x3000010},
13318{0x3000000, 0x3c9623b1, 0xff800000, 0xff800000, 0x3000000},
13319{0x3000000, 0x3c9623b1, 0xff800001, 0x7fc00000, 0x3000001},
13320{0x3000000, 0x3c9623b1, 0xff984a37, 0x7fc00000, 0x3000001},
13321{0x3000000, 0x3c9623b1, 0xffbfffff, 0x7fc00000, 0x3000001},
13322{0x3000000, 0x3c9623b1, 0xffc00000, 0x7fc00000, 0x3000000},
13323{0x3000000, 0x3c9623b1, 0xffd9ba98, 0x7fc00000, 0x3000000},
13324{0x3000000, 0x3c9623b1, 0xffffffff, 0x7fc00000, 0x3000000},
13325{0x3000000, 0x3c9623b1, 0x4f3495cb, 0x4f3495cb, 0x3000010},
13326{0x3000000, 0x3c9623b1, 0xe73a5134, 0xe73a5134, 0x3000010},
13327{0x3000000, 0x3c9623b1, 0x7c994e9e, 0x7c994e9e, 0x3000010},
13328{0x3000000, 0x3c9623b1, 0x6164bd6c, 0x6164bd6c, 0x3000010},
13329{0x3000000, 0x3c9623b1, 0x9503366, 0x3c9623b1, 0x3000010},
13330{0x3000000, 0x3c9623b1, 0xbf5a97c9, 0xbf55e6ab, 0x3000010},
13331{0x3000000, 0x3c9623b1, 0xe6ff1a14, 0xe6ff1a14, 0x3000010},
13332{0x3000000, 0x3c9623b1, 0x77f31e2f, 0x77f31e2f, 0x3000010},
13333{0x3000000, 0x3c9623b1, 0xaab4d7d8, 0x3c9623b1, 0x3000010},
13334{0x3000000, 0x3c9623b1, 0x966320b, 0x3c9623b1, 0x3000010},
13335{0x3000000, 0x3c9623b1, 0xb26bddee, 0x3c9623aa, 0x3000010},
13336{0x3000000, 0x3c9623b1, 0xb5c8e5d3, 0x3c96208d, 0x3000010},
13337{0x3000000, 0x3c9623b1, 0x317285d3, 0x3c9623b3, 0x3000010},
13338{0x3000000, 0x3c9623b1, 0x3c9623b1, 0x3d1623b1, 0x3000000},
13339{0x3000000, 0x3c9623b1, 0x51fd2c7c, 0x51fd2c7c, 0x3000010},
13340{0x3000000, 0x3c9623b1, 0x7b906a6c, 0x7b906a6c, 0x3000010},
13341{0x3000000, 0x51fd2c7c, 0x0, 0x51fd2c7c, 0x3000000},
13342{0x3000000, 0x51fd2c7c, 0x1, 0x51fd2c7c, 0x3000080},
13343{0x3000000, 0x51fd2c7c, 0x76, 0x51fd2c7c, 0x3000080},
13344{0x3000000, 0x51fd2c7c, 0x2b94, 0x51fd2c7c, 0x3000080},
13345{0x3000000, 0x51fd2c7c, 0x636d24, 0x51fd2c7c, 0x3000080},
13346{0x3000000, 0x51fd2c7c, 0x7fffff, 0x51fd2c7c, 0x3000080},
13347{0x3000000, 0x51fd2c7c, 0x800000, 0x51fd2c7c, 0x3000010},
13348{0x3000000, 0x51fd2c7c, 0x800002, 0x51fd2c7c, 0x3000010},
13349{0x3000000, 0x51fd2c7c, 0x1398437, 0x51fd2c7c, 0x3000010},
13350{0x3000000, 0x51fd2c7c, 0xba98d27, 0x51fd2c7c, 0x3000010},
13351{0x3000000, 0x51fd2c7c, 0xba98d7a, 0x51fd2c7c, 0x3000010},
13352{0x3000000, 0x51fd2c7c, 0x751f853a, 0x751f853a, 0x3000010},
13353{0x3000000, 0x51fd2c7c, 0x7f7ffff0, 0x7f7ffff0, 0x3000010},
13354{0x3000000, 0x51fd2c7c, 0x7f7fffff, 0x7f7fffff, 0x3000010},
13355{0x3000000, 0x51fd2c7c, 0x7f800000, 0x7f800000, 0x3000000},
13356{0x3000000, 0x51fd2c7c, 0x7f800001, 0x7fc00000, 0x3000001},
13357{0x3000000, 0x51fd2c7c, 0x7f984a37, 0x7fc00000, 0x3000001},
13358{0x3000000, 0x51fd2c7c, 0x7fbfffff, 0x7fc00000, 0x3000001},
13359{0x3000000, 0x51fd2c7c, 0x7fc00000, 0x7fc00000, 0x3000000},
13360{0x3000000, 0x51fd2c7c, 0x7fd9ba98, 0x7fc00000, 0x3000000},
13361{0x3000000, 0x51fd2c7c, 0x7fffffff, 0x7fc00000, 0x3000000},
13362{0x3000000, 0x51fd2c7c, 0x80000000, 0x51fd2c7c, 0x3000000},
13363{0x3000000, 0x51fd2c7c, 0x80000001, 0x51fd2c7c, 0x3000080},
13364{0x3000000, 0x51fd2c7c, 0x80000076, 0x51fd2c7c, 0x3000080},
13365{0x3000000, 0x51fd2c7c, 0x80002b94, 0x51fd2c7c, 0x3000080},
13366{0x3000000, 0x51fd2c7c, 0x80636d24, 0x51fd2c7c, 0x3000080},
13367{0x3000000, 0x51fd2c7c, 0x807fffff, 0x51fd2c7c, 0x3000080},
13368{0x3000000, 0x51fd2c7c, 0x80800000, 0x51fd2c7c, 0x3000010},
13369{0x3000000, 0x51fd2c7c, 0x80800002, 0x51fd2c7c, 0x3000010},
13370{0x3000000, 0x51fd2c7c, 0x81398437, 0x51fd2c7c, 0x3000010},
13371{0x3000000, 0x51fd2c7c, 0x8ba98d27, 0x51fd2c7c, 0x3000010},
13372{0x3000000, 0x51fd2c7c, 0x8ba98d7a, 0x51fd2c7c, 0x3000010},
13373{0x3000000, 0x51fd2c7c, 0xf51f853a, 0xf51f853a, 0x3000010},
13374{0x3000000, 0x51fd2c7c, 0xff7ffff0, 0xff7ffff0, 0x3000010},
13375{0x3000000, 0x51fd2c7c, 0xff7fffff, 0xff7fffff, 0x3000010},
13376{0x3000000, 0x51fd2c7c, 0xff800000, 0xff800000, 0x3000000},
13377{0x3000000, 0x51fd2c7c, 0xff800001, 0x7fc00000, 0x3000001},
13378{0x3000000, 0x51fd2c7c, 0xff984a37, 0x7fc00000, 0x3000001},
13379{0x3000000, 0x51fd2c7c, 0xffbfffff, 0x7fc00000, 0x3000001},
13380{0x3000000, 0x51fd2c7c, 0xffc00000, 0x7fc00000, 0x3000000},
13381{0x3000000, 0x51fd2c7c, 0xffd9ba98, 0x7fc00000, 0x3000000},
13382{0x3000000, 0x51fd2c7c, 0xffffffff, 0x7fc00000, 0x3000000},
13383{0x3000000, 0x51fd2c7c, 0x4f3495cb, 0x52016895, 0x3000010},
13384{0x3000000, 0x51fd2c7c, 0xe73a5134, 0xe73a5134, 0x3000010},
13385{0x3000000, 0x51fd2c7c, 0x7c994e9e, 0x7c994e9e, 0x3000010},
13386{0x3000000, 0x51fd2c7c, 0x6164bd6c, 0x6164bd6c, 0x3000010},
13387{0x3000000, 0x51fd2c7c, 0x9503366, 0x51fd2c7c, 0x3000010},
13388{0x3000000, 0x51fd2c7c, 0xbf5a97c9, 0x51fd2c7c, 0x3000010},
13389{0x3000000, 0x51fd2c7c, 0xe6ff1a14, 0xe6ff1a14, 0x3000010},
13390{0x3000000, 0x51fd2c7c, 0x77f31e2f, 0x77f31e2f, 0x3000010},
13391{0x3000000, 0x51fd2c7c, 0xaab4d7d8, 0x51fd2c7c, 0x3000010},
13392{0x3000000, 0x51fd2c7c, 0x966320b, 0x51fd2c7c, 0x3000010},
13393{0x3000000, 0x51fd2c7c, 0xb26bddee, 0x51fd2c7c, 0x3000010},
13394{0x3000000, 0x51fd2c7c, 0xb5c8e5d3, 0x51fd2c7c, 0x3000010},
13395{0x3000000, 0x51fd2c7c, 0x317285d3, 0x51fd2c7c, 0x3000010},
13396{0x3000000, 0x51fd2c7c, 0x3c9623b1, 0x51fd2c7c, 0x3000010},
13397{0x3000000, 0x51fd2c7c, 0x51fd2c7c, 0x527d2c7c, 0x3000000},
13398{0x3000000, 0x51fd2c7c, 0x7b906a6c, 0x7b906a6c, 0x3000010},
13399{0x3000000, 0x7b906a6c, 0x0, 0x7b906a6c, 0x3000000},
13400{0x3000000, 0x7b906a6c, 0x1, 0x7b906a6c, 0x3000080},
13401{0x3000000, 0x7b906a6c, 0x76, 0x7b906a6c, 0x3000080},
13402{0x3000000, 0x7b906a6c, 0x2b94, 0x7b906a6c, 0x3000080},
13403{0x3000000, 0x7b906a6c, 0x636d24, 0x7b906a6c, 0x3000080},
13404{0x3000000, 0x7b906a6c, 0x7fffff, 0x7b906a6c, 0x3000080},
13405{0x3000000, 0x7b906a6c, 0x800000, 0x7b906a6c, 0x3000010},
13406{0x3000000, 0x7b906a6c, 0x800002, 0x7b906a6c, 0x3000010},
13407{0x3000000, 0x7b906a6c, 0x1398437, 0x7b906a6c, 0x3000010},
13408{0x3000000, 0x7b906a6c, 0xba98d27, 0x7b906a6c, 0x3000010},
13409{0x3000000, 0x7b906a6c, 0xba98d7a, 0x7b906a6c, 0x3000010},
13410{0x3000000, 0x7b906a6c, 0x751f853a, 0x7b906f68, 0x3000010},
13411{0x3000000, 0x7b906a6c, 0x7f7ffff0, 0x7f800000, 0x3000014},
13412{0x3000000, 0x7b906a6c, 0x7f7fffff, 0x7f800000, 0x3000014},
13413{0x3000000, 0x7b906a6c, 0x7f800000, 0x7f800000, 0x3000000},
13414{0x3000000, 0x7b906a6c, 0x7f800001, 0x7fc00000, 0x3000001},
13415{0x3000000, 0x7b906a6c, 0x7f984a37, 0x7fc00000, 0x3000001},
13416{0x3000000, 0x7b906a6c, 0x7fbfffff, 0x7fc00000, 0x3000001},
13417{0x3000000, 0x7b906a6c, 0x7fc00000, 0x7fc00000, 0x3000000},
13418{0x3000000, 0x7b906a6c, 0x7fd9ba98, 0x7fc00000, 0x3000000},
13419{0x3000000, 0x7b906a6c, 0x7fffffff, 0x7fc00000, 0x3000000},
13420{0x3000000, 0x7b906a6c, 0x80000000, 0x7b906a6c, 0x3000000},
13421{0x3000000, 0x7b906a6c, 0x80000001, 0x7b906a6c, 0x3000080},
13422{0x3000000, 0x7b906a6c, 0x80000076, 0x7b906a6c, 0x3000080},
13423{0x3000000, 0x7b906a6c, 0x80002b94, 0x7b906a6c, 0x3000080},
13424{0x3000000, 0x7b906a6c, 0x80636d24, 0x7b906a6c, 0x3000080},
13425{0x3000000, 0x7b906a6c, 0x807fffff, 0x7b906a6c, 0x3000080},
13426{0x3000000, 0x7b906a6c, 0x80800000, 0x7b906a6c, 0x3000010},
13427{0x3000000, 0x7b906a6c, 0x80800002, 0x7b906a6c, 0x3000010},
13428{0x3000000, 0x7b906a6c, 0x81398437, 0x7b906a6c, 0x3000010},
13429{0x3000000, 0x7b906a6c, 0x8ba98d27, 0x7b906a6c, 0x3000010},
13430{0x3000000, 0x7b906a6c, 0x8ba98d7a, 0x7b906a6c, 0x3000010},
13431{0x3000000, 0x7b906a6c, 0xf51f853a, 0x7b906570, 0x3000010},
13432{0x3000000, 0x7b906a6c, 0xff7ffff0, 0xff7edf1b, 0x3000010},
13433{0x3000000, 0x7b906a6c, 0xff7fffff, 0xff7edf2a, 0x3000010},
13434{0x3000000, 0x7b906a6c, 0xff800000, 0xff800000, 0x3000000},
13435{0x3000000, 0x7b906a6c, 0xff800001, 0x7fc00000, 0x3000001},
13436{0x3000000, 0x7b906a6c, 0xff984a37, 0x7fc00000, 0x3000001},
13437{0x3000000, 0x7b906a6c, 0xffbfffff, 0x7fc00000, 0x3000001},
13438{0x3000000, 0x7b906a6c, 0xffc00000, 0x7fc00000, 0x3000000},
13439{0x3000000, 0x7b906a6c, 0xffd9ba98, 0x7fc00000, 0x3000000},
13440{0x3000000, 0x7b906a6c, 0xffffffff, 0x7fc00000, 0x3000000},
13441{0x3000000, 0x7b906a6c, 0x4f3495cb, 0x7b906a6c, 0x3000010},
13442{0x3000000, 0x7b906a6c, 0xe73a5134, 0x7b906a6c, 0x3000010},
13443{0x3000000, 0x7b906a6c, 0x7c994e9e, 0x7cbd6939, 0x3000000},
13444{0x3000000, 0x7b906a6c, 0x6164bd6c, 0x7b906a6c, 0x3000010},
13445{0x3000000, 0x7b906a6c, 0x9503366, 0x7b906a6c, 0x3000010},
13446{0x3000000, 0x7b906a6c, 0xbf5a97c9, 0x7b906a6c, 0x3000010},
13447{0x3000000, 0x7b906a6c, 0xe6ff1a14, 0x7b906a6c, 0x3000010},
13448{0x3000000, 0x7b906a6c, 0x77f31e2f, 0x7b915d8a, 0x3000010},
13449{0x3000000, 0x7b906a6c, 0xaab4d7d8, 0x7b906a6c, 0x3000010},
13450{0x3000000, 0x7b906a6c, 0x966320b, 0x7b906a6c, 0x3000010},
13451{0x3000000, 0x7b906a6c, 0xb26bddee, 0x7b906a6c, 0x3000010},
13452{0x3000000, 0x7b906a6c, 0xb5c8e5d3, 0x7b906a6c, 0x3000010},
13453{0x3000000, 0x7b906a6c, 0x317285d3, 0x7b906a6c, 0x3000010},
13454{0x3000000, 0x7b906a6c, 0x3c9623b1, 0x7b906a6c, 0x3000010},
13455{0x3000000, 0x7b906a6c, 0x51fd2c7c, 0x7b906a6c, 0x3000010},
13456{0x3000000, 0x7b906a6c, 0x7b906a6c, 0x7c106a6c, 0x3000000},
diff --git a/src/tests/core/memory/memory.cpp b/src/tests/core/memory/memory.cpp
new file mode 100644
index 000000000..671afb702
--- /dev/null
+++ b/src/tests/core/memory/memory.cpp
@@ -0,0 +1,56 @@
1// Copyright 2017 Citra Emulator Project
2// Licensed under GPLv2 or any later version
3// Refer to the license.txt file included.
4
5#include <catch.hpp>
6#include "core/hle/kernel/memory.h"
7#include "core/hle/kernel/process.h"
8#include "core/memory.h"
9
10TEST_CASE("Memory::IsValidVirtualAddress", "[core][memory]") {
11 SECTION("these regions should not be mapped on an empty process") {
12 auto process = Kernel::Process::Create("");
13 CHECK(Memory::IsValidVirtualAddress(*process, Memory::PROCESS_IMAGE_VADDR) == false);
14 CHECK(Memory::IsValidVirtualAddress(*process, Memory::HEAP_VADDR) == false);
15 CHECK(Memory::IsValidVirtualAddress(*process, Memory::LINEAR_HEAP_VADDR) == false);
16 CHECK(Memory::IsValidVirtualAddress(*process, Memory::VRAM_VADDR) == false);
17 CHECK(Memory::IsValidVirtualAddress(*process, Memory::CONFIG_MEMORY_VADDR) == false);
18 CHECK(Memory::IsValidVirtualAddress(*process, Memory::SHARED_PAGE_VADDR) == false);
19 CHECK(Memory::IsValidVirtualAddress(*process, Memory::TLS_AREA_VADDR) == false);
20 }
21
22 SECTION("CONFIG_MEMORY_VADDR and SHARED_PAGE_VADDR should be valid after mapping them") {
23 auto process = Kernel::Process::Create("");
24 Kernel::MapSharedPages(process->vm_manager);
25 CHECK(Memory::IsValidVirtualAddress(*process, Memory::CONFIG_MEMORY_VADDR) == true);
26 CHECK(Memory::IsValidVirtualAddress(*process, Memory::SHARED_PAGE_VADDR) == true);
27 }
28
29 SECTION("special regions should be valid after mapping them") {
30 auto process = Kernel::Process::Create("");
31 SECTION("VRAM") {
32 Kernel::HandleSpecialMapping(process->vm_manager,
33 {Memory::VRAM_VADDR, Memory::VRAM_SIZE, false, false});
34 CHECK(Memory::IsValidVirtualAddress(*process, Memory::VRAM_VADDR) == true);
35 }
36
37 SECTION("IO (Not yet implemented)") {
38 Kernel::HandleSpecialMapping(
39 process->vm_manager, {Memory::IO_AREA_VADDR, Memory::IO_AREA_SIZE, false, false});
40 CHECK_FALSE(Memory::IsValidVirtualAddress(*process, Memory::IO_AREA_VADDR) == true);
41 }
42
43 SECTION("DSP") {
44 Kernel::HandleSpecialMapping(
45 process->vm_manager, {Memory::DSP_RAM_VADDR, Memory::DSP_RAM_SIZE, false, false});
46 CHECK(Memory::IsValidVirtualAddress(*process, Memory::DSP_RAM_VADDR) == true);
47 }
48 }
49
50 SECTION("Unmapping a VAddr should make it invalid") {
51 auto process = Kernel::Process::Create("");
52 Kernel::MapSharedPages(process->vm_manager);
53 process->vm_manager.UnmapRange(Memory::CONFIG_MEMORY_VADDR, Memory::CONFIG_MEMORY_SIZE);
54 CHECK(Memory::IsValidVirtualAddress(*process, Memory::CONFIG_MEMORY_VADDR) == false);
55 }
56}
diff --git a/src/video_core/CMakeLists.txt b/src/video_core/CMakeLists.txt
index 0961a3251..82f47d8a9 100644
--- a/src/video_core/CMakeLists.txt
+++ b/src/video_core/CMakeLists.txt
@@ -1,6 +1,7 @@
1set(SRCS 1set(SRCS
2 command_processor.cpp 2 command_processor.cpp
3 debug_utils/debug_utils.cpp 3 debug_utils/debug_utils.cpp
4 geometry_pipeline.cpp
4 pica.cpp 5 pica.cpp
5 primitive_assembly.cpp 6 primitive_assembly.cpp
6 regs.cpp 7 regs.cpp
@@ -15,6 +16,7 @@ set(SRCS
15 shader/shader_interpreter.cpp 16 shader/shader_interpreter.cpp
16 swrasterizer/clipper.cpp 17 swrasterizer/clipper.cpp
17 swrasterizer/framebuffer.cpp 18 swrasterizer/framebuffer.cpp
19 swrasterizer/lighting.cpp
18 swrasterizer/proctex.cpp 20 swrasterizer/proctex.cpp
19 swrasterizer/rasterizer.cpp 21 swrasterizer/rasterizer.cpp
20 swrasterizer/swrasterizer.cpp 22 swrasterizer/swrasterizer.cpp
@@ -28,6 +30,7 @@ set(SRCS
28set(HEADERS 30set(HEADERS
29 command_processor.h 31 command_processor.h
30 debug_utils/debug_utils.h 32 debug_utils/debug_utils.h
33 geometry_pipeline.h
31 gpu_debugger.h 34 gpu_debugger.h
32 pica.h 35 pica.h
33 pica_state.h 36 pica_state.h
@@ -55,6 +58,7 @@ set(HEADERS
55 shader/shader_interpreter.h 58 shader/shader_interpreter.h
56 swrasterizer/clipper.h 59 swrasterizer/clipper.h
57 swrasterizer/framebuffer.h 60 swrasterizer/framebuffer.h
61 swrasterizer/lighting.h
58 swrasterizer/proctex.h 62 swrasterizer/proctex.h
59 swrasterizer/rasterizer.h 63 swrasterizer/rasterizer.h
60 swrasterizer/swrasterizer.h 64 swrasterizer/swrasterizer.h
diff --git a/src/video_core/command_processor.cpp b/src/video_core/command_processor.cpp
index 4633a1df1..caf9f7a06 100644
--- a/src/video_core/command_processor.cpp
+++ b/src/video_core/command_processor.cpp
@@ -119,24 +119,221 @@ static void WriteUniformFloatReg(ShaderRegs& config, Shader::ShaderSetup& setup,
119 } 119 }
120} 120}
121 121
122static void WriteProgramCode(ShaderRegs& config, Shader::ShaderSetup& setup, 122static void LoadDefaultVertexAttributes(u32 register_value) {
123 unsigned max_program_code_length, u32 value) { 123 auto& regs = g_state.regs;
124 if (config.program.offset >= max_program_code_length) { 124
125 LOG_ERROR(HW_GPU, "Invalid %s program offset %d", GetShaderSetupTypeName(setup), 125 // TODO: Does actual hardware indeed keep an intermediate buffer or does
126 (int)config.program.offset); 126 // it directly write the values?
127 } else { 127 default_attr_write_buffer[default_attr_counter++] = register_value;
128 setup.program_code[config.program.offset] = value; 128
129 config.program.offset++; 129 // Default attributes are written in a packed format such that four float24 values are encoded
130 // in three 32-bit numbers.
131 // We write to internal memory once a full such vector is written.
132 if (default_attr_counter >= 3) {
133 default_attr_counter = 0;
134
135 auto& setup = regs.pipeline.vs_default_attributes_setup;
136
137 if (setup.index >= 16) {
138 LOG_ERROR(HW_GPU, "Invalid VS default attribute index %d", (int)setup.index);
139 return;
140 }
141
142 Math::Vec4<float24> attribute;
143
144 // NOTE: The destination component order indeed is "backwards"
145 attribute.w = float24::FromRaw(default_attr_write_buffer[0] >> 8);
146 attribute.z = float24::FromRaw(((default_attr_write_buffer[0] & 0xFF) << 16) |
147 ((default_attr_write_buffer[1] >> 16) & 0xFFFF));
148 attribute.y = float24::FromRaw(((default_attr_write_buffer[1] & 0xFFFF) << 8) |
149 ((default_attr_write_buffer[2] >> 24) & 0xFF));
150 attribute.x = float24::FromRaw(default_attr_write_buffer[2] & 0xFFFFFF);
151
152 LOG_TRACE(HW_GPU, "Set default VS attribute %x to (%f %f %f %f)", (int)setup.index,
153 attribute.x.ToFloat32(), attribute.y.ToFloat32(), attribute.z.ToFloat32(),
154 attribute.w.ToFloat32());
155
156 // TODO: Verify that this actually modifies the register!
157 if (setup.index < 15) {
158 g_state.input_default_attributes.attr[setup.index] = attribute;
159 setup.index++;
160 } else {
161 // Put each attribute into an immediate input buffer. When all specified immediate
162 // attributes are present, the Vertex Shader is invoked and everything is sent to
163 // the primitive assembler.
164
165 auto& immediate_input = g_state.immediate.input_vertex;
166 auto& immediate_attribute_id = g_state.immediate.current_attribute;
167
168 immediate_input.attr[immediate_attribute_id] = attribute;
169
170 if (immediate_attribute_id < regs.pipeline.max_input_attrib_index) {
171 immediate_attribute_id += 1;
172 } else {
173 MICROPROFILE_SCOPE(GPU_Drawing);
174 immediate_attribute_id = 0;
175
176 auto* shader_engine = Shader::GetEngine();
177 shader_engine->SetupBatch(g_state.vs, regs.vs.main_offset);
178
179 // Send to vertex shader
180 if (g_debug_context)
181 g_debug_context->OnEvent(DebugContext::Event::VertexShaderInvocation,
182 static_cast<void*>(&immediate_input));
183 Shader::UnitState shader_unit;
184 Shader::AttributeBuffer output{};
185
186 shader_unit.LoadInput(regs.vs, immediate_input);
187 shader_engine->Run(g_state.vs, shader_unit);
188 shader_unit.WriteOutput(regs.vs, output);
189
190 // Send to geometry pipeline
191 if (g_state.immediate.reset_geometry_pipeline) {
192 g_state.geometry_pipeline.Reconfigure();
193 g_state.immediate.reset_geometry_pipeline = false;
194 }
195 ASSERT(!g_state.geometry_pipeline.NeedIndexInput());
196 g_state.geometry_pipeline.Setup(shader_engine);
197 g_state.geometry_pipeline.SubmitVertex(output);
198
199 // TODO: If drawing after every immediate mode triangle kills performance,
200 // change it to flush triangles whenever a drawing config register changes
201 // See: https://github.com/citra-emu/citra/pull/2866#issuecomment-327011550
202 VideoCore::g_renderer->Rasterizer()->DrawTriangles();
203 if (g_debug_context) {
204 g_debug_context->OnEvent(DebugContext::Event::FinishedPrimitiveBatch, nullptr);
205 }
206 }
207 }
130 } 208 }
131} 209}
132 210
133static void WriteSwizzlePatterns(ShaderRegs& config, Shader::ShaderSetup& setup, u32 value) { 211static void Draw(u32 command_id) {
134 if (config.swizzle_patterns.offset >= setup.swizzle_data.size()) { 212 MICROPROFILE_SCOPE(GPU_Drawing);
135 LOG_ERROR(HW_GPU, "Invalid %s swizzle pattern offset %d", GetShaderSetupTypeName(setup), 213 auto& regs = g_state.regs;
136 (int)config.swizzle_patterns.offset); 214
137 } else { 215#if PICA_LOG_TEV
138 setup.swizzle_data[config.swizzle_patterns.offset] = value; 216 DebugUtils::DumpTevStageConfig(regs.GetTevStages());
139 config.swizzle_patterns.offset++; 217#endif
218 if (g_debug_context)
219 g_debug_context->OnEvent(DebugContext::Event::IncomingPrimitiveBatch, nullptr);
220
221 // Processes information about internal vertex attributes to figure out how a vertex is
222 // loaded.
223 // Later, these can be compiled and cached.
224 const u32 base_address = regs.pipeline.vertex_attributes.GetPhysicalBaseAddress();
225 VertexLoader loader(regs.pipeline);
226
227 // Load vertices
228 bool is_indexed = (command_id == PICA_REG_INDEX(pipeline.trigger_draw_indexed));
229
230 const auto& index_info = regs.pipeline.index_array;
231 const u8* index_address_8 = Memory::GetPhysicalPointer(base_address + index_info.offset);
232 const u16* index_address_16 = reinterpret_cast<const u16*>(index_address_8);
233 bool index_u16 = index_info.format != 0;
234
235 PrimitiveAssembler<Shader::OutputVertex>& primitive_assembler = g_state.primitive_assembler;
236
237 if (g_debug_context && g_debug_context->recorder) {
238 for (int i = 0; i < 3; ++i) {
239 const auto texture = regs.texturing.GetTextures()[i];
240 if (!texture.enabled)
241 continue;
242
243 u8* texture_data = Memory::GetPhysicalPointer(texture.config.GetPhysicalAddress());
244 g_debug_context->recorder->MemoryAccessed(
245 texture_data, Pica::TexturingRegs::NibblesPerPixel(texture.format) *
246 texture.config.width / 2 * texture.config.height,
247 texture.config.GetPhysicalAddress());
248 }
249 }
250
251 DebugUtils::MemoryAccessTracker memory_accesses;
252
253 // Simple circular-replacement vertex cache
254 // The size has been tuned for optimal balance between hit-rate and the cost of lookup
255 const size_t VERTEX_CACHE_SIZE = 32;
256 std::array<u16, VERTEX_CACHE_SIZE> vertex_cache_ids;
257 std::array<Shader::AttributeBuffer, VERTEX_CACHE_SIZE> vertex_cache;
258 Shader::AttributeBuffer vs_output;
259
260 unsigned int vertex_cache_pos = 0;
261 vertex_cache_ids.fill(-1);
262
263 auto* shader_engine = Shader::GetEngine();
264 Shader::UnitState shader_unit;
265
266 shader_engine->SetupBatch(g_state.vs, regs.vs.main_offset);
267
268 g_state.geometry_pipeline.Reconfigure();
269 g_state.geometry_pipeline.Setup(shader_engine);
270 if (g_state.geometry_pipeline.NeedIndexInput())
271 ASSERT(is_indexed);
272
273 for (unsigned int index = 0; index < regs.pipeline.num_vertices; ++index) {
274 // Indexed rendering doesn't use the start offset
275 unsigned int vertex = is_indexed
276 ? (index_u16 ? index_address_16[index] : index_address_8[index])
277 : (index + regs.pipeline.vertex_offset);
278
279 // -1 is a common special value used for primitive restart. Since it's unknown if
280 // the PICA supports it, and it would mess up the caching, guard against it here.
281 ASSERT(vertex != -1);
282
283 bool vertex_cache_hit = false;
284
285 if (is_indexed) {
286 if (g_state.geometry_pipeline.NeedIndexInput()) {
287 g_state.geometry_pipeline.SubmitIndex(vertex);
288 continue;
289 }
290
291 if (g_debug_context && Pica::g_debug_context->recorder) {
292 int size = index_u16 ? 2 : 1;
293 memory_accesses.AddAccess(base_address + index_info.offset + size * index, size);
294 }
295
296 for (unsigned int i = 0; i < VERTEX_CACHE_SIZE; ++i) {
297 if (vertex == vertex_cache_ids[i]) {
298 vs_output = vertex_cache[i];
299 vertex_cache_hit = true;
300 break;
301 }
302 }
303 }
304
305 if (!vertex_cache_hit) {
306 // Initialize data for the current vertex
307 Shader::AttributeBuffer input;
308 loader.LoadVertex(base_address, index, vertex, input, memory_accesses);
309
310 // Send to vertex shader
311 if (g_debug_context)
312 g_debug_context->OnEvent(DebugContext::Event::VertexShaderInvocation,
313 (void*)&input);
314 shader_unit.LoadInput(regs.vs, input);
315 shader_engine->Run(g_state.vs, shader_unit);
316 shader_unit.WriteOutput(regs.vs, vs_output);
317
318 if (is_indexed) {
319 vertex_cache[vertex_cache_pos] = vs_output;
320 vertex_cache_ids[vertex_cache_pos] = vertex;
321 vertex_cache_pos = (vertex_cache_pos + 1) % VERTEX_CACHE_SIZE;
322 }
323 }
324
325 // Send to geometry pipeline
326 g_state.geometry_pipeline.SubmitVertex(vs_output);
327 }
328
329 for (auto& range : memory_accesses.ranges) {
330 g_debug_context->recorder->MemoryAccessed(Memory::GetPhysicalPointer(range.first),
331 range.second, range.first);
332 }
333
334 VideoCore::g_renderer->Rasterizer()->DrawTriangles();
335 if (g_debug_context) {
336 g_debug_context->OnEvent(DebugContext::Event::FinishedPrimitiveBatch, nullptr);
140 } 337 }
141} 338}
142 339
@@ -182,106 +379,19 @@ static void WritePicaReg(u32 id, u32 value, u32 mask) {
182 379
183 case PICA_REG_INDEX(pipeline.vs_default_attributes_setup.index): 380 case PICA_REG_INDEX(pipeline.vs_default_attributes_setup.index):
184 g_state.immediate.current_attribute = 0; 381 g_state.immediate.current_attribute = 0;
382 g_state.immediate.reset_geometry_pipeline = true;
185 default_attr_counter = 0; 383 default_attr_counter = 0;
186 break; 384 break;
187 385
188 // Load default vertex input attributes 386 // Load default vertex input attributes
189 case PICA_REG_INDEX_WORKAROUND(pipeline.vs_default_attributes_setup.set_value[0], 0x233): 387 case PICA_REG_INDEX_WORKAROUND(pipeline.vs_default_attributes_setup.set_value[0], 0x233):
190 case PICA_REG_INDEX_WORKAROUND(pipeline.vs_default_attributes_setup.set_value[1], 0x234): 388 case PICA_REG_INDEX_WORKAROUND(pipeline.vs_default_attributes_setup.set_value[1], 0x234):
191 case PICA_REG_INDEX_WORKAROUND(pipeline.vs_default_attributes_setup.set_value[2], 0x235): { 389 case PICA_REG_INDEX_WORKAROUND(pipeline.vs_default_attributes_setup.set_value[2], 0x235):
192 // TODO: Does actual hardware indeed keep an intermediate buffer or does 390 LoadDefaultVertexAttributes(value);
193 // it directly write the values?
194 default_attr_write_buffer[default_attr_counter++] = value;
195
196 // Default attributes are written in a packed format such that four float24 values are
197 // encoded in
198 // three 32-bit numbers. We write to internal memory once a full such vector is
199 // written.
200 if (default_attr_counter >= 3) {
201 default_attr_counter = 0;
202
203 auto& setup = regs.pipeline.vs_default_attributes_setup;
204
205 if (setup.index >= 16) {
206 LOG_ERROR(HW_GPU, "Invalid VS default attribute index %d", (int)setup.index);
207 break;
208 }
209
210 Math::Vec4<float24> attribute;
211
212 // NOTE: The destination component order indeed is "backwards"
213 attribute.w = float24::FromRaw(default_attr_write_buffer[0] >> 8);
214 attribute.z = float24::FromRaw(((default_attr_write_buffer[0] & 0xFF) << 16) |
215 ((default_attr_write_buffer[1] >> 16) & 0xFFFF));
216 attribute.y = float24::FromRaw(((default_attr_write_buffer[1] & 0xFFFF) << 8) |
217 ((default_attr_write_buffer[2] >> 24) & 0xFF));
218 attribute.x = float24::FromRaw(default_attr_write_buffer[2] & 0xFFFFFF);
219
220 LOG_TRACE(HW_GPU, "Set default VS attribute %x to (%f %f %f %f)", (int)setup.index,
221 attribute.x.ToFloat32(), attribute.y.ToFloat32(), attribute.z.ToFloat32(),
222 attribute.w.ToFloat32());
223
224 // TODO: Verify that this actually modifies the register!
225 if (setup.index < 15) {
226 g_state.input_default_attributes.attr[setup.index] = attribute;
227 setup.index++;
228 } else {
229 // Put each attribute into an immediate input buffer. When all specified immediate
230 // attributes are present, the Vertex Shader is invoked and everything is sent to
231 // the primitive assembler.
232
233 auto& immediate_input = g_state.immediate.input_vertex;
234 auto& immediate_attribute_id = g_state.immediate.current_attribute;
235
236 immediate_input.attr[immediate_attribute_id] = attribute;
237
238 if (immediate_attribute_id < regs.pipeline.max_input_attrib_index) {
239 immediate_attribute_id += 1;
240 } else {
241 MICROPROFILE_SCOPE(GPU_Drawing);
242 immediate_attribute_id = 0;
243
244 auto* shader_engine = Shader::GetEngine();
245 shader_engine->SetupBatch(g_state.vs, regs.vs.main_offset);
246
247 // Send to vertex shader
248 if (g_debug_context)
249 g_debug_context->OnEvent(DebugContext::Event::VertexShaderInvocation,
250 static_cast<void*>(&immediate_input));
251 Shader::UnitState shader_unit;
252 Shader::AttributeBuffer output{};
253
254 shader_unit.LoadInput(regs.vs, immediate_input);
255 shader_engine->Run(g_state.vs, shader_unit);
256 shader_unit.WriteOutput(regs.vs, output);
257
258 // Send to renderer
259 using Pica::Shader::OutputVertex;
260 auto AddTriangle = [](const OutputVertex& v0, const OutputVertex& v1,
261 const OutputVertex& v2) {
262 VideoCore::g_renderer->Rasterizer()->AddTriangle(v0, v1, v2);
263 };
264
265 g_state.primitive_assembler.SubmitVertex(
266 Shader::OutputVertex::FromAttributeBuffer(regs.rasterizer, output),
267 AddTriangle);
268 }
269 }
270 }
271 break; 391 break;
272 }
273 392
274 case PICA_REG_INDEX(pipeline.gpu_mode): 393 case PICA_REG_INDEX(pipeline.gpu_mode):
275 if (regs.pipeline.gpu_mode == PipelineRegs::GPUMode::Configuring) { 394 // This register likely just enables vertex processing and doesn't need any special handling
276 MICROPROFILE_SCOPE(GPU_Drawing);
277
278 // Draw immediate mode triangles when GPU Mode is set to GPUMode::Configuring
279 VideoCore::g_renderer->Rasterizer()->DrawTriangles();
280
281 if (g_debug_context) {
282 g_debug_context->OnEvent(DebugContext::Event::FinishedPrimitiveBatch, nullptr);
283 }
284 }
285 break; 395 break;
286 396
287 case PICA_REG_INDEX_WORKAROUND(pipeline.command_buffer.trigger[0], 0x23c): 397 case PICA_REG_INDEX_WORKAROUND(pipeline.command_buffer.trigger[0], 0x23c):
@@ -297,130 +407,9 @@ static void WritePicaReg(u32 id, u32 value, u32 mask) {
297 407
298 // It seems like these trigger vertex rendering 408 // It seems like these trigger vertex rendering
299 case PICA_REG_INDEX(pipeline.trigger_draw): 409 case PICA_REG_INDEX(pipeline.trigger_draw):
300 case PICA_REG_INDEX(pipeline.trigger_draw_indexed): { 410 case PICA_REG_INDEX(pipeline.trigger_draw_indexed):
301 MICROPROFILE_SCOPE(GPU_Drawing); 411 Draw(id);
302
303#if PICA_LOG_TEV
304 DebugUtils::DumpTevStageConfig(regs.GetTevStages());
305#endif
306 if (g_debug_context)
307 g_debug_context->OnEvent(DebugContext::Event::IncomingPrimitiveBatch, nullptr);
308
309 // Processes information about internal vertex attributes to figure out how a vertex is
310 // loaded.
311 // Later, these can be compiled and cached.
312 const u32 base_address = regs.pipeline.vertex_attributes.GetPhysicalBaseAddress();
313 VertexLoader loader(regs.pipeline);
314
315 // Load vertices
316 bool is_indexed = (id == PICA_REG_INDEX(pipeline.trigger_draw_indexed));
317
318 const auto& index_info = regs.pipeline.index_array;
319 const u8* index_address_8 = Memory::GetPhysicalPointer(base_address + index_info.offset);
320 const u16* index_address_16 = reinterpret_cast<const u16*>(index_address_8);
321 bool index_u16 = index_info.format != 0;
322
323 PrimitiveAssembler<Shader::OutputVertex>& primitive_assembler = g_state.primitive_assembler;
324
325 if (g_debug_context && g_debug_context->recorder) {
326 for (int i = 0; i < 3; ++i) {
327 const auto texture = regs.texturing.GetTextures()[i];
328 if (!texture.enabled)
329 continue;
330
331 u8* texture_data = Memory::GetPhysicalPointer(texture.config.GetPhysicalAddress());
332 g_debug_context->recorder->MemoryAccessed(
333 texture_data, Pica::TexturingRegs::NibblesPerPixel(texture.format) *
334 texture.config.width / 2 * texture.config.height,
335 texture.config.GetPhysicalAddress());
336 }
337 }
338
339 DebugUtils::MemoryAccessTracker memory_accesses;
340
341 // Simple circular-replacement vertex cache
342 // The size has been tuned for optimal balance between hit-rate and the cost of lookup
343 const size_t VERTEX_CACHE_SIZE = 32;
344 std::array<u16, VERTEX_CACHE_SIZE> vertex_cache_ids;
345 std::array<Shader::OutputVertex, VERTEX_CACHE_SIZE> vertex_cache;
346 Shader::OutputVertex output_vertex;
347
348 unsigned int vertex_cache_pos = 0;
349 vertex_cache_ids.fill(-1);
350
351 auto* shader_engine = Shader::GetEngine();
352 Shader::UnitState shader_unit;
353
354 shader_engine->SetupBatch(g_state.vs, regs.vs.main_offset);
355
356 for (unsigned int index = 0; index < regs.pipeline.num_vertices; ++index) {
357 // Indexed rendering doesn't use the start offset
358 unsigned int vertex =
359 is_indexed ? (index_u16 ? index_address_16[index] : index_address_8[index])
360 : (index + regs.pipeline.vertex_offset);
361
362 // -1 is a common special value used for primitive restart. Since it's unknown if
363 // the PICA supports it, and it would mess up the caching, guard against it here.
364 ASSERT(vertex != -1);
365
366 bool vertex_cache_hit = false;
367
368 if (is_indexed) {
369 if (g_debug_context && Pica::g_debug_context->recorder) {
370 int size = index_u16 ? 2 : 1;
371 memory_accesses.AddAccess(base_address + index_info.offset + size * index,
372 size);
373 }
374
375 for (unsigned int i = 0; i < VERTEX_CACHE_SIZE; ++i) {
376 if (vertex == vertex_cache_ids[i]) {
377 output_vertex = vertex_cache[i];
378 vertex_cache_hit = true;
379 break;
380 }
381 }
382 }
383
384 if (!vertex_cache_hit) {
385 // Initialize data for the current vertex
386 Shader::AttributeBuffer input, output{};
387 loader.LoadVertex(base_address, index, vertex, input, memory_accesses);
388
389 // Send to vertex shader
390 if (g_debug_context)
391 g_debug_context->OnEvent(DebugContext::Event::VertexShaderInvocation,
392 (void*)&input);
393 shader_unit.LoadInput(regs.vs, input);
394 shader_engine->Run(g_state.vs, shader_unit);
395 shader_unit.WriteOutput(regs.vs, output);
396
397 // Retrieve vertex from register data
398 output_vertex = Shader::OutputVertex::FromAttributeBuffer(regs.rasterizer, output);
399
400 if (is_indexed) {
401 vertex_cache[vertex_cache_pos] = output_vertex;
402 vertex_cache_ids[vertex_cache_pos] = vertex;
403 vertex_cache_pos = (vertex_cache_pos + 1) % VERTEX_CACHE_SIZE;
404 }
405 }
406
407 // Send to renderer
408 using Pica::Shader::OutputVertex;
409 auto AddTriangle = [](const OutputVertex& v0, const OutputVertex& v1,
410 const OutputVertex& v2) {
411 VideoCore::g_renderer->Rasterizer()->AddTriangle(v0, v1, v2);
412 };
413
414 primitive_assembler.SubmitVertex(output_vertex, AddTriangle);
415 }
416
417 for (auto& range : memory_accesses.ranges) {
418 g_debug_context->recorder->MemoryAccessed(Memory::GetPhysicalPointer(range.first),
419 range.second, range.first);
420 }
421
422 break; 412 break;
423 }
424 413
425 case PICA_REG_INDEX(gs.bool_uniforms): 414 case PICA_REG_INDEX(gs.bool_uniforms):
426 WriteUniformBoolReg(g_state.gs, g_state.regs.gs.bool_uniforms.Value()); 415 WriteUniformBoolReg(g_state.gs, g_state.regs.gs.bool_uniforms.Value());
@@ -458,7 +447,13 @@ static void WritePicaReg(u32 id, u32 value, u32 mask) {
458 case PICA_REG_INDEX_WORKAROUND(gs.program.set_word[5], 0x2a1): 447 case PICA_REG_INDEX_WORKAROUND(gs.program.set_word[5], 0x2a1):
459 case PICA_REG_INDEX_WORKAROUND(gs.program.set_word[6], 0x2a2): 448 case PICA_REG_INDEX_WORKAROUND(gs.program.set_word[6], 0x2a2):
460 case PICA_REG_INDEX_WORKAROUND(gs.program.set_word[7], 0x2a3): { 449 case PICA_REG_INDEX_WORKAROUND(gs.program.set_word[7], 0x2a3): {
461 WriteProgramCode(g_state.regs.gs, g_state.gs, 4096, value); 450 u32& offset = g_state.regs.gs.program.offset;
451 if (offset >= 4096) {
452 LOG_ERROR(HW_GPU, "Invalid GS program offset %u", offset);
453 } else {
454 g_state.gs.program_code[offset] = value;
455 offset++;
456 }
462 break; 457 break;
463 } 458 }
464 459
@@ -470,11 +465,18 @@ static void WritePicaReg(u32 id, u32 value, u32 mask) {
470 case PICA_REG_INDEX_WORKAROUND(gs.swizzle_patterns.set_word[5], 0x2ab): 465 case PICA_REG_INDEX_WORKAROUND(gs.swizzle_patterns.set_word[5], 0x2ab):
471 case PICA_REG_INDEX_WORKAROUND(gs.swizzle_patterns.set_word[6], 0x2ac): 466 case PICA_REG_INDEX_WORKAROUND(gs.swizzle_patterns.set_word[6], 0x2ac):
472 case PICA_REG_INDEX_WORKAROUND(gs.swizzle_patterns.set_word[7], 0x2ad): { 467 case PICA_REG_INDEX_WORKAROUND(gs.swizzle_patterns.set_word[7], 0x2ad): {
473 WriteSwizzlePatterns(g_state.regs.gs, g_state.gs, value); 468 u32& offset = g_state.regs.gs.swizzle_patterns.offset;
469 if (offset >= g_state.gs.swizzle_data.size()) {
470 LOG_ERROR(HW_GPU, "Invalid GS swizzle pattern offset %u", offset);
471 } else {
472 g_state.gs.swizzle_data[offset] = value;
473 offset++;
474 }
474 break; 475 break;
475 } 476 }
476 477
477 case PICA_REG_INDEX(vs.bool_uniforms): 478 case PICA_REG_INDEX(vs.bool_uniforms):
479 // TODO (wwylele): does regs.pipeline.gs_unit_exclusive_configuration affect this?
478 WriteUniformBoolReg(g_state.vs, g_state.regs.vs.bool_uniforms.Value()); 480 WriteUniformBoolReg(g_state.vs, g_state.regs.vs.bool_uniforms.Value());
479 break; 481 break;
480 482
@@ -482,6 +484,7 @@ static void WritePicaReg(u32 id, u32 value, u32 mask) {
482 case PICA_REG_INDEX_WORKAROUND(vs.int_uniforms[1], 0x2b2): 484 case PICA_REG_INDEX_WORKAROUND(vs.int_uniforms[1], 0x2b2):
483 case PICA_REG_INDEX_WORKAROUND(vs.int_uniforms[2], 0x2b3): 485 case PICA_REG_INDEX_WORKAROUND(vs.int_uniforms[2], 0x2b3):
484 case PICA_REG_INDEX_WORKAROUND(vs.int_uniforms[3], 0x2b4): { 486 case PICA_REG_INDEX_WORKAROUND(vs.int_uniforms[3], 0x2b4): {
487 // TODO (wwylele): does regs.pipeline.gs_unit_exclusive_configuration affect this?
485 unsigned index = (id - PICA_REG_INDEX_WORKAROUND(vs.int_uniforms[0], 0x2b1)); 488 unsigned index = (id - PICA_REG_INDEX_WORKAROUND(vs.int_uniforms[0], 0x2b1));
486 auto values = regs.vs.int_uniforms[index]; 489 auto values = regs.vs.int_uniforms[index];
487 WriteUniformIntReg(g_state.vs, index, 490 WriteUniformIntReg(g_state.vs, index,
@@ -497,6 +500,7 @@ static void WritePicaReg(u32 id, u32 value, u32 mask) {
497 case PICA_REG_INDEX_WORKAROUND(vs.uniform_setup.set_value[5], 0x2c6): 500 case PICA_REG_INDEX_WORKAROUND(vs.uniform_setup.set_value[5], 0x2c6):
498 case PICA_REG_INDEX_WORKAROUND(vs.uniform_setup.set_value[6], 0x2c7): 501 case PICA_REG_INDEX_WORKAROUND(vs.uniform_setup.set_value[6], 0x2c7):
499 case PICA_REG_INDEX_WORKAROUND(vs.uniform_setup.set_value[7], 0x2c8): { 502 case PICA_REG_INDEX_WORKAROUND(vs.uniform_setup.set_value[7], 0x2c8): {
503 // TODO (wwylele): does regs.pipeline.gs_unit_exclusive_configuration affect this?
500 WriteUniformFloatReg(g_state.regs.vs, g_state.vs, vs_float_regs_counter, 504 WriteUniformFloatReg(g_state.regs.vs, g_state.vs, vs_float_regs_counter,
501 vs_uniform_write_buffer, value); 505 vs_uniform_write_buffer, value);
502 break; 506 break;
@@ -510,7 +514,16 @@ static void WritePicaReg(u32 id, u32 value, u32 mask) {
510 case PICA_REG_INDEX_WORKAROUND(vs.program.set_word[5], 0x2d1): 514 case PICA_REG_INDEX_WORKAROUND(vs.program.set_word[5], 0x2d1):
511 case PICA_REG_INDEX_WORKAROUND(vs.program.set_word[6], 0x2d2): 515 case PICA_REG_INDEX_WORKAROUND(vs.program.set_word[6], 0x2d2):
512 case PICA_REG_INDEX_WORKAROUND(vs.program.set_word[7], 0x2d3): { 516 case PICA_REG_INDEX_WORKAROUND(vs.program.set_word[7], 0x2d3): {
513 WriteProgramCode(g_state.regs.vs, g_state.vs, 512, value); 517 u32& offset = g_state.regs.vs.program.offset;
518 if (offset >= 512) {
519 LOG_ERROR(HW_GPU, "Invalid VS program offset %u", offset);
520 } else {
521 g_state.vs.program_code[offset] = value;
522 if (!g_state.regs.pipeline.gs_unit_exclusive_configuration) {
523 g_state.gs.program_code[offset] = value;
524 }
525 offset++;
526 }
514 break; 527 break;
515 } 528 }
516 529
@@ -522,7 +535,16 @@ static void WritePicaReg(u32 id, u32 value, u32 mask) {
522 case PICA_REG_INDEX_WORKAROUND(vs.swizzle_patterns.set_word[5], 0x2db): 535 case PICA_REG_INDEX_WORKAROUND(vs.swizzle_patterns.set_word[5], 0x2db):
523 case PICA_REG_INDEX_WORKAROUND(vs.swizzle_patterns.set_word[6], 0x2dc): 536 case PICA_REG_INDEX_WORKAROUND(vs.swizzle_patterns.set_word[6], 0x2dc):
524 case PICA_REG_INDEX_WORKAROUND(vs.swizzle_patterns.set_word[7], 0x2dd): { 537 case PICA_REG_INDEX_WORKAROUND(vs.swizzle_patterns.set_word[7], 0x2dd): {
525 WriteSwizzlePatterns(g_state.regs.vs, g_state.vs, value); 538 u32& offset = g_state.regs.vs.swizzle_patterns.offset;
539 if (offset >= g_state.vs.swizzle_data.size()) {
540 LOG_ERROR(HW_GPU, "Invalid VS swizzle pattern offset %u", offset);
541 } else {
542 g_state.vs.swizzle_data[offset] = value;
543 if (!g_state.regs.pipeline.gs_unit_exclusive_configuration) {
544 g_state.gs.swizzle_data[offset] = value;
545 }
546 offset++;
547 }
526 break; 548 break;
527 } 549 }
528 550
@@ -620,6 +642,6 @@ void ProcessCommandList(const u32* list, u32 size) {
620 } 642 }
621} 643}
622 644
623} // namespace 645} // namespace CommandProcessor
624 646
625} // namespace 647} // namespace Pica
diff --git a/src/video_core/geometry_pipeline.cpp b/src/video_core/geometry_pipeline.cpp
new file mode 100644
index 000000000..98ff2ccd3
--- /dev/null
+++ b/src/video_core/geometry_pipeline.cpp
@@ -0,0 +1,274 @@
1// Copyright 2017 Citra Emulator Project
2// Licensed under GPLv2 or any later version
3// Refer to the license.txt file included.
4
5#include "video_core/geometry_pipeline.h"
6#include "video_core/pica_state.h"
7#include "video_core/regs.h"
8#include "video_core/renderer_base.h"
9#include "video_core/video_core.h"
10
11namespace Pica {
12
13/// An attribute buffering interface for different pipeline modes
14class GeometryPipelineBackend {
15public:
16 virtual ~GeometryPipelineBackend() = default;
17
18 /// Checks if there is no incomplete data transfer
19 virtual bool IsEmpty() const = 0;
20
21 /// Checks if the pipeline needs a direct input from index buffer
22 virtual bool NeedIndexInput() const = 0;
23
24 /// Submits an index from index buffer
25 virtual void SubmitIndex(unsigned int val) = 0;
26
27 /**
28 * Submits vertex attributes
29 * @param input attributes of a vertex output from vertex shader
30 * @return if the buffer is full and the geometry shader should be invoked
31 */
32 virtual bool SubmitVertex(const Shader::AttributeBuffer& input) = 0;
33};
34
35// In the Point mode, vertex attributes are sent to the input registers in the geometry shader unit.
36// The size of vertex shader outputs and geometry shader inputs are constants. Geometry shader is
37// invoked upon inputs buffer filled up by vertex shader outputs. For example, if we have a geometry
38// shader that takes 6 inputs, and the vertex shader outputs 2 attributes, it would take 3 vertices
39// for one geometry shader invocation.
40// TODO: what happens when the input size is not divisible by the output size?
41class GeometryPipeline_Point : public GeometryPipelineBackend {
42public:
43 GeometryPipeline_Point(const Regs& regs, Shader::GSUnitState& unit) : regs(regs), unit(unit) {
44 ASSERT(regs.pipeline.variable_primitive == 0);
45 ASSERT(regs.gs.input_to_uniform == 0);
46 vs_output_num = regs.pipeline.vs_outmap_total_minus_1_a + 1;
47 size_t gs_input_num = regs.gs.max_input_attribute_index + 1;
48 ASSERT(gs_input_num % vs_output_num == 0);
49 buffer_cur = attribute_buffer.attr;
50 buffer_end = attribute_buffer.attr + gs_input_num;
51 }
52
53 bool IsEmpty() const override {
54 return buffer_cur == attribute_buffer.attr;
55 }
56
57 bool NeedIndexInput() const override {
58 return false;
59 }
60
61 void SubmitIndex(unsigned int val) override {
62 UNREACHABLE();
63 }
64
65 bool SubmitVertex(const Shader::AttributeBuffer& input) override {
66 buffer_cur = std::copy(input.attr, input.attr + vs_output_num, buffer_cur);
67 if (buffer_cur == buffer_end) {
68 buffer_cur = attribute_buffer.attr;
69 unit.LoadInput(regs.gs, attribute_buffer);
70 return true;
71 }
72 return false;
73 }
74
75private:
76 const Regs& regs;
77 Shader::GSUnitState& unit;
78 Shader::AttributeBuffer attribute_buffer;
79 Math::Vec4<float24>* buffer_cur;
80 Math::Vec4<float24>* buffer_end;
81 unsigned int vs_output_num;
82};
83
84// In VariablePrimitive mode, vertex attributes are buffered into the uniform registers in the
85// geometry shader unit. The number of vertex is variable, which is specified by the first index
86// value in the batch. This mode is usually used for subdivision.
87class GeometryPipeline_VariablePrimitive : public GeometryPipelineBackend {
88public:
89 GeometryPipeline_VariablePrimitive(const Regs& regs, Shader::ShaderSetup& setup)
90 : regs(regs), setup(setup) {
91 ASSERT(regs.pipeline.variable_primitive == 1);
92 ASSERT(regs.gs.input_to_uniform == 1);
93 vs_output_num = regs.pipeline.vs_outmap_total_minus_1_a + 1;
94 }
95
96 bool IsEmpty() const override {
97 return need_index;
98 }
99
100 bool NeedIndexInput() const override {
101 return need_index;
102 }
103
104 void SubmitIndex(unsigned int val) override {
105 DEBUG_ASSERT(need_index);
106
107 // The number of vertex input is put to the uniform register
108 float24 vertex_num = float24::FromFloat32(static_cast<float>(val));
109 setup.uniforms.f[0] = Math::MakeVec(vertex_num, vertex_num, vertex_num, vertex_num);
110
111 // The second uniform register and so on are used for receiving input vertices
112 buffer_cur = setup.uniforms.f + 1;
113
114 main_vertex_num = regs.pipeline.variable_vertex_main_num_minus_1 + 1;
115 total_vertex_num = val;
116 need_index = false;
117 }
118
119 bool SubmitVertex(const Shader::AttributeBuffer& input) override {
120 DEBUG_ASSERT(!need_index);
121 if (main_vertex_num != 0) {
122 // For main vertices, receive all attributes
123 buffer_cur = std::copy(input.attr, input.attr + vs_output_num, buffer_cur);
124 --main_vertex_num;
125 } else {
126 // For other vertices, only receive the first attribute (usually the position)
127 *(buffer_cur++) = input.attr[0];
128 }
129 --total_vertex_num;
130
131 if (total_vertex_num == 0) {
132 need_index = true;
133 return true;
134 }
135
136 return false;
137 }
138
139private:
140 bool need_index = true;
141 const Regs& regs;
142 Shader::ShaderSetup& setup;
143 unsigned int main_vertex_num;
144 unsigned int total_vertex_num;
145 Math::Vec4<float24>* buffer_cur;
146 unsigned int vs_output_num;
147};
148
149// In FixedPrimitive mode, vertex attributes are buffered into the uniform registers in the geometry
150// shader unit. The number of vertex per shader invocation is constant. This is usually used for
151// particle system.
152class GeometryPipeline_FixedPrimitive : public GeometryPipelineBackend {
153public:
154 GeometryPipeline_FixedPrimitive(const Regs& regs, Shader::ShaderSetup& setup)
155 : regs(regs), setup(setup) {
156 ASSERT(regs.pipeline.variable_primitive == 0);
157 ASSERT(regs.gs.input_to_uniform == 1);
158 vs_output_num = regs.pipeline.vs_outmap_total_minus_1_a + 1;
159 ASSERT(vs_output_num == regs.pipeline.gs_config.stride_minus_1 + 1);
160 size_t vertex_num = regs.pipeline.gs_config.fixed_vertex_num_minus_1 + 1;
161 buffer_cur = buffer_begin = setup.uniforms.f + regs.pipeline.gs_config.start_index;
162 buffer_end = buffer_begin + vs_output_num * vertex_num;
163 }
164
165 bool IsEmpty() const override {
166 return buffer_cur == buffer_begin;
167 }
168
169 bool NeedIndexInput() const override {
170 return false;
171 }
172
173 void SubmitIndex(unsigned int val) override {
174 UNREACHABLE();
175 }
176
177 bool SubmitVertex(const Shader::AttributeBuffer& input) override {
178 buffer_cur = std::copy(input.attr, input.attr + vs_output_num, buffer_cur);
179 if (buffer_cur == buffer_end) {
180 buffer_cur = buffer_begin;
181 return true;
182 }
183 return false;
184 }
185
186private:
187 const Regs& regs;
188 Shader::ShaderSetup& setup;
189 Math::Vec4<float24>* buffer_begin;
190 Math::Vec4<float24>* buffer_cur;
191 Math::Vec4<float24>* buffer_end;
192 unsigned int vs_output_num;
193};
194
195GeometryPipeline::GeometryPipeline(State& state) : state(state) {}
196
197GeometryPipeline::~GeometryPipeline() = default;
198
199void GeometryPipeline::SetVertexHandler(Shader::VertexHandler vertex_handler) {
200 this->vertex_handler = vertex_handler;
201}
202
203void GeometryPipeline::Setup(Shader::ShaderEngine* shader_engine) {
204 if (!backend)
205 return;
206
207 this->shader_engine = shader_engine;
208 shader_engine->SetupBatch(state.gs, state.regs.gs.main_offset);
209}
210
211void GeometryPipeline::Reconfigure() {
212 ASSERT(!backend || backend->IsEmpty());
213
214 if (state.regs.pipeline.use_gs == PipelineRegs::UseGS::No) {
215 backend = nullptr;
216 return;
217 }
218
219 ASSERT(state.regs.pipeline.use_gs == PipelineRegs::UseGS::Yes);
220
221 // The following assumes that when geometry shader is in use, the shader unit 3 is configured as
222 // a geometry shader unit.
223 // TODO: what happens if this is not true?
224 ASSERT(state.regs.pipeline.gs_unit_exclusive_configuration == 1);
225 ASSERT(state.regs.gs.shader_mode == ShaderRegs::ShaderMode::GS);
226
227 state.gs_unit.ConfigOutput(state.regs.gs);
228
229 ASSERT(state.regs.pipeline.vs_outmap_total_minus_1_a ==
230 state.regs.pipeline.vs_outmap_total_minus_1_b);
231
232 switch (state.regs.pipeline.gs_config.mode) {
233 case PipelineRegs::GSMode::Point:
234 backend = std::make_unique<GeometryPipeline_Point>(state.regs, state.gs_unit);
235 break;
236 case PipelineRegs::GSMode::VariablePrimitive:
237 backend = std::make_unique<GeometryPipeline_VariablePrimitive>(state.regs, state.gs);
238 break;
239 case PipelineRegs::GSMode::FixedPrimitive:
240 backend = std::make_unique<GeometryPipeline_FixedPrimitive>(state.regs, state.gs);
241 break;
242 default:
243 UNREACHABLE();
244 }
245}
246
247bool GeometryPipeline::NeedIndexInput() const {
248 if (!backend)
249 return false;
250 return backend->NeedIndexInput();
251}
252
253void GeometryPipeline::SubmitIndex(unsigned int val) {
254 backend->SubmitIndex(val);
255}
256
257void GeometryPipeline::SubmitVertex(const Shader::AttributeBuffer& input) {
258 if (!backend) {
259 // No backend means the geometry shader is disabled, so we send the vertex shader output
260 // directly to the primitive assembler.
261 vertex_handler(input);
262 } else {
263 if (backend->SubmitVertex(input)) {
264 shader_engine->Run(state.gs, state.gs_unit);
265
266 // The uniform b15 is set to true after every geometry shader invocation. This is useful
267 // for the shader to know if this is the first invocation in a batch, if the program set
268 // b15 to false first.
269 state.gs.uniforms.b[15] = true;
270 }
271 }
272}
273
274} // namespace Pica
diff --git a/src/video_core/geometry_pipeline.h b/src/video_core/geometry_pipeline.h
new file mode 100644
index 000000000..91fdd3192
--- /dev/null
+++ b/src/video_core/geometry_pipeline.h
@@ -0,0 +1,49 @@
1// Copyright 2017 Citra Emulator Project
2// Licensed under GPLv2 or any later version
3// Refer to the license.txt file included.
4
5#pragma once
6
7#include <memory>
8#include "video_core/shader/shader.h"
9
10namespace Pica {
11
12struct State;
13
14class GeometryPipelineBackend;
15
16/// A pipeline receiving from vertex shader and sending to geometry shader and primitive assembler
17class GeometryPipeline {
18public:
19 explicit GeometryPipeline(State& state);
20 ~GeometryPipeline();
21
22 /// Sets the handler for receiving vertex outputs from vertex shader
23 void SetVertexHandler(Shader::VertexHandler vertex_handler);
24
25 /**
26 * Setup the geometry shader unit if it is in use
27 * @param shader_engine the shader engine for the geometry shader to run
28 */
29 void Setup(Shader::ShaderEngine* shader_engine);
30
31 /// Reconfigures the pipeline according to current register settings
32 void Reconfigure();
33
34 /// Checks if the pipeline needs a direct input from index buffer
35 bool NeedIndexInput() const;
36
37 /// Submits an index from index buffer. Call this only when NeedIndexInput returns true
38 void SubmitIndex(unsigned int val);
39
40 /// Submits vertex attributes output from vertex shader
41 void SubmitVertex(const Shader::AttributeBuffer& input);
42
43private:
44 Shader::VertexHandler vertex_handler;
45 Shader::ShaderEngine* shader_engine;
46 std::unique_ptr<GeometryPipelineBackend> backend;
47 State& state;
48};
49} // namespace Pica
diff --git a/src/video_core/pica.cpp b/src/video_core/pica.cpp
index b95148a6a..218e06883 100644
--- a/src/video_core/pica.cpp
+++ b/src/video_core/pica.cpp
@@ -3,9 +3,11 @@
3// Refer to the license.txt file included. 3// Refer to the license.txt file included.
4 4
5#include <cstring> 5#include <cstring>
6#include "video_core/geometry_pipeline.h"
6#include "video_core/pica.h" 7#include "video_core/pica.h"
7#include "video_core/pica_state.h" 8#include "video_core/pica_state.h"
8#include "video_core/regs_pipeline.h" 9#include "video_core/renderer_base.h"
10#include "video_core/video_core.h"
9 11
10namespace Pica { 12namespace Pica {
11 13
@@ -24,6 +26,23 @@ void Zero(T& o) {
24 memset(&o, 0, sizeof(o)); 26 memset(&o, 0, sizeof(o));
25} 27}
26 28
29State::State() : geometry_pipeline(*this) {
30 auto SubmitVertex = [this](const Shader::AttributeBuffer& vertex) {
31 using Pica::Shader::OutputVertex;
32 auto AddTriangle = [this](const OutputVertex& v0, const OutputVertex& v1,
33 const OutputVertex& v2) {
34 VideoCore::g_renderer->Rasterizer()->AddTriangle(v0, v1, v2);
35 };
36 primitive_assembler.SubmitVertex(
37 Shader::OutputVertex::FromAttributeBuffer(regs.rasterizer, vertex), AddTriangle);
38 };
39
40 auto SetWinding = [this]() { primitive_assembler.SetWinding(); };
41
42 g_state.gs_unit.SetVertexHandler(SubmitVertex, SetWinding);
43 g_state.geometry_pipeline.SetVertexHandler(SubmitVertex);
44}
45
27void State::Reset() { 46void State::Reset() {
28 Zero(regs); 47 Zero(regs);
29 Zero(vs); 48 Zero(vs);
diff --git a/src/video_core/pica_state.h b/src/video_core/pica_state.h
index 2d23d34e6..c6634a0bc 100644
--- a/src/video_core/pica_state.h
+++ b/src/video_core/pica_state.h
@@ -8,6 +8,7 @@
8#include "common/bit_field.h" 8#include "common/bit_field.h"
9#include "common/common_types.h" 9#include "common/common_types.h"
10#include "common/vector_math.h" 10#include "common/vector_math.h"
11#include "video_core/geometry_pipeline.h"
11#include "video_core/primitive_assembly.h" 12#include "video_core/primitive_assembly.h"
12#include "video_core/regs.h" 13#include "video_core/regs.h"
13#include "video_core/shader/shader.h" 14#include "video_core/shader/shader.h"
@@ -16,6 +17,7 @@ namespace Pica {
16 17
17/// Struct used to describe current Pica state 18/// Struct used to describe current Pica state
18struct State { 19struct State {
20 State();
19 void Reset(); 21 void Reset();
20 22
21 /// Pica registers 23 /// Pica registers
@@ -79,7 +81,7 @@ struct State {
79 std::array<ColorDifferenceEntry, 256> color_diff_table; 81 std::array<ColorDifferenceEntry, 256> color_diff_table;
80 } proctex; 82 } proctex;
81 83
82 struct { 84 struct Lighting {
83 union LutEntry { 85 union LutEntry {
84 // Used for raw access 86 // Used for raw access
85 u32 raw; 87 u32 raw;
@@ -137,8 +139,17 @@ struct State {
137 Shader::AttributeBuffer input_vertex; 139 Shader::AttributeBuffer input_vertex;
138 // Index of the next attribute to be loaded into `input_vertex`. 140 // Index of the next attribute to be loaded into `input_vertex`.
139 u32 current_attribute = 0; 141 u32 current_attribute = 0;
142 // Indicates the immediate mode just started and the geometry pipeline needs to reconfigure
143 bool reset_geometry_pipeline = true;
140 } immediate; 144 } immediate;
141 145
146 // the geometry shader needs to be kept in the global state because some shaders relie on
147 // preserved register value across shader invocation.
148 // TODO: also bring the three vertex shader units here and implement the shader scheduler.
149 Shader::GSUnitState gs_unit;
150
151 GeometryPipeline geometry_pipeline;
152
142 // This is constructed with a dummy triangle topology 153 // This is constructed with a dummy triangle topology
143 PrimitiveAssembler<Shader::OutputVertex> primitive_assembler; 154 PrimitiveAssembler<Shader::OutputVertex> primitive_assembler;
144}; 155};
diff --git a/src/video_core/pica_types.h b/src/video_core/pica_types.h
index 5d7e10066..2eafa7e9e 100644
--- a/src/video_core/pica_types.h
+++ b/src/video_core/pica_types.h
@@ -58,11 +58,12 @@ public:
58 } 58 }
59 59
60 Float<M, E> operator*(const Float<M, E>& flt) const { 60 Float<M, E> operator*(const Float<M, E>& flt) const {
61 if ((this->value == 0.f && !std::isnan(flt.value)) || 61 float result = value * flt.ToFloat32();
62 (flt.value == 0.f && !std::isnan(this->value))) 62 // PICA gives 0 instead of NaN when multiplying by inf
63 // PICA gives 0 instead of NaN when multiplying by inf 63 if (!std::isnan(value) && !std::isnan(flt.ToFloat32()))
64 return Zero(); 64 if (std::isnan(result))
65 return Float<M, E>::FromFloat32(ToFloat32() * flt.ToFloat32()); 65 result = 0.f;
66 return Float<M, E>::FromFloat32(result);
66 } 67 }
67 68
68 Float<M, E> operator/(const Float<M, E>& flt) const { 69 Float<M, E> operator/(const Float<M, E>& flt) const {
@@ -78,12 +79,7 @@ public:
78 } 79 }
79 80
80 Float<M, E>& operator*=(const Float<M, E>& flt) { 81 Float<M, E>& operator*=(const Float<M, E>& flt) {
81 if ((this->value == 0.f && !std::isnan(flt.value)) || 82 value = operator*(flt).value;
82 (flt.value == 0.f && !std::isnan(this->value)))
83 // PICA gives 0 instead of NaN when multiplying by inf
84 *this = Zero();
85 else
86 value *= flt.ToFloat32();
87 return *this; 83 return *this;
88 } 84 }
89 85
diff --git a/src/video_core/primitive_assembly.cpp b/src/video_core/primitive_assembly.cpp
index acd2ac5e2..9c3dd4cab 100644
--- a/src/video_core/primitive_assembly.cpp
+++ b/src/video_core/primitive_assembly.cpp
@@ -17,15 +17,18 @@ template <typename VertexType>
17void PrimitiveAssembler<VertexType>::SubmitVertex(const VertexType& vtx, 17void PrimitiveAssembler<VertexType>::SubmitVertex(const VertexType& vtx,
18 TriangleHandler triangle_handler) { 18 TriangleHandler triangle_handler) {
19 switch (topology) { 19 switch (topology) {
20 // TODO: Figure out what's different with TriangleTopology::Shader.
21 case PipelineRegs::TriangleTopology::List: 20 case PipelineRegs::TriangleTopology::List:
22 case PipelineRegs::TriangleTopology::Shader: 21 case PipelineRegs::TriangleTopology::Shader:
23 if (buffer_index < 2) { 22 if (buffer_index < 2) {
24 buffer[buffer_index++] = vtx; 23 buffer[buffer_index++] = vtx;
25 } else { 24 } else {
26 buffer_index = 0; 25 buffer_index = 0;
27 26 if (topology == PipelineRegs::TriangleTopology::Shader && winding) {
28 triangle_handler(buffer[0], buffer[1], vtx); 27 triangle_handler(buffer[1], buffer[0], vtx);
28 winding = false;
29 } else {
30 triangle_handler(buffer[0], buffer[1], vtx);
31 }
29 } 32 }
30 break; 33 break;
31 34
@@ -51,9 +54,15 @@ void PrimitiveAssembler<VertexType>::SubmitVertex(const VertexType& vtx,
51} 54}
52 55
53template <typename VertexType> 56template <typename VertexType>
57void PrimitiveAssembler<VertexType>::SetWinding() {
58 winding = true;
59}
60
61template <typename VertexType>
54void PrimitiveAssembler<VertexType>::Reset() { 62void PrimitiveAssembler<VertexType>::Reset() {
55 buffer_index = 0; 63 buffer_index = 0;
56 strip_ready = false; 64 strip_ready = false;
65 winding = false;
57} 66}
58 67
59template <typename VertexType> 68template <typename VertexType>
diff --git a/src/video_core/primitive_assembly.h b/src/video_core/primitive_assembly.h
index e8eccdf27..12de8e3b9 100644
--- a/src/video_core/primitive_assembly.h
+++ b/src/video_core/primitive_assembly.h
@@ -30,6 +30,12 @@ struct PrimitiveAssembler {
30 void SubmitVertex(const VertexType& vtx, TriangleHandler triangle_handler); 30 void SubmitVertex(const VertexType& vtx, TriangleHandler triangle_handler);
31 31
32 /** 32 /**
33 * Invert the vertex order of the next triangle. Called by geometry shader emitter.
34 * This only takes effect for TriangleTopology::Shader.
35 */
36 void SetWinding();
37
38 /**
33 * Resets the internal state of the PrimitiveAssembler. 39 * Resets the internal state of the PrimitiveAssembler.
34 */ 40 */
35 void Reset(); 41 void Reset();
@@ -45,6 +51,7 @@ private:
45 int buffer_index; 51 int buffer_index;
46 VertexType buffer[2]; 52 VertexType buffer[2];
47 bool strip_ready = false; 53 bool strip_ready = false;
54 bool winding = false;
48}; 55};
49 56
50} // namespace 57} // namespace
diff --git a/src/video_core/regs_framebuffer.h b/src/video_core/regs_framebuffer.h
index a50bd4111..7b565f911 100644
--- a/src/video_core/regs_framebuffer.h
+++ b/src/video_core/regs_framebuffer.h
@@ -256,10 +256,9 @@ struct FramebufferRegs {
256 return 3; 256 return 3;
257 case DepthFormat::D24S8: 257 case DepthFormat::D24S8:
258 return 4; 258 return 4;
259 default:
260 LOG_CRITICAL(HW_GPU, "Unknown depth format %u", format);
261 UNIMPLEMENTED();
262 } 259 }
260
261 ASSERT_MSG(false, "Unknown depth format %u", format);
263 } 262 }
264 263
265 // Returns the number of bits per depth component of the specified depth format 264 // Returns the number of bits per depth component of the specified depth format
@@ -270,10 +269,9 @@ struct FramebufferRegs {
270 case DepthFormat::D24: 269 case DepthFormat::D24:
271 case DepthFormat::D24S8: 270 case DepthFormat::D24S8:
272 return 24; 271 return 24;
273 default:
274 LOG_CRITICAL(HW_GPU, "Unknown depth format %u", format);
275 UNIMPLEMENTED();
276 } 272 }
273
274 ASSERT_MSG(false, "Unknown depth format %u", format);
277 } 275 }
278 276
279 INSERT_PADDING_WORDS(0x20); 277 INSERT_PADDING_WORDS(0x20);
diff --git a/src/video_core/regs_pipeline.h b/src/video_core/regs_pipeline.h
index 31c747d77..e78c3e331 100644
--- a/src/video_core/regs_pipeline.h
+++ b/src/video_core/regs_pipeline.h
@@ -147,7 +147,15 @@ struct PipelineRegs {
147 // Number of vertices to render 147 // Number of vertices to render
148 u32 num_vertices; 148 u32 num_vertices;
149 149
150 INSERT_PADDING_WORDS(0x1); 150 enum class UseGS : u32 {
151 No = 0,
152 Yes = 2,
153 };
154
155 union {
156 BitField<0, 2, UseGS> use_gs;
157 BitField<31, 1, u32> variable_primitive;
158 };
151 159
152 // The index of the first vertex to render 160 // The index of the first vertex to render
153 u32 vertex_offset; 161 u32 vertex_offset;
@@ -202,7 +210,14 @@ struct PipelineRegs {
202 /// Number of input attributes to the vertex shader minus 1 210 /// Number of input attributes to the vertex shader minus 1
203 BitField<0, 4, u32> max_input_attrib_index; 211 BitField<0, 4, u32> max_input_attrib_index;
204 212
205 INSERT_PADDING_WORDS(2); 213 INSERT_PADDING_WORDS(1);
214
215 // The shader unit 3, which can be used for both vertex and geometry shader, gets its
216 // configuration depending on this register. If this is not set, unit 3 will share some
217 // configuration with other units. It is known that program code and swizzle pattern uploaded
218 // via regs.vs will be also uploaded to unit 3 if this is not set. Although very likely, it is
219 // still unclear whether uniforms and other configuration can be also shared.
220 BitField<0, 1, u32> gs_unit_exclusive_configuration;
206 221
207 enum class GPUMode : u32 { 222 enum class GPUMode : u32 {
208 Drawing = 0, 223 Drawing = 0,
@@ -211,7 +226,29 @@ struct PipelineRegs {
211 226
212 GPUMode gpu_mode; 227 GPUMode gpu_mode;
213 228
214 INSERT_PADDING_WORDS(0x18); 229 INSERT_PADDING_WORDS(0x4);
230 BitField<0, 4, u32> vs_outmap_total_minus_1_a;
231 INSERT_PADDING_WORDS(0x6);
232 BitField<0, 4, u32> vs_outmap_total_minus_1_b;
233
234 enum class GSMode : u32 {
235 Point = 0,
236 VariablePrimitive = 1,
237 FixedPrimitive = 2,
238 };
239
240 union {
241 BitField<0, 8, GSMode> mode;
242 BitField<8, 4, u32> fixed_vertex_num_minus_1;
243 BitField<12, 4, u32> stride_minus_1;
244 BitField<16, 4, u32> start_index;
245 } gs_config;
246
247 INSERT_PADDING_WORDS(0x1);
248
249 u32 variable_vertex_main_num_minus_1;
250
251 INSERT_PADDING_WORDS(0x9);
215 252
216 enum class TriangleTopology : u32 { 253 enum class TriangleTopology : u32 {
217 List = 0, 254 List = 0,
diff --git a/src/video_core/regs_rasterizer.h b/src/video_core/regs_rasterizer.h
index 2874fd127..4fef00d76 100644
--- a/src/video_core/regs_rasterizer.h
+++ b/src/video_core/regs_rasterizer.h
@@ -5,10 +5,10 @@
5#pragma once 5#pragma once
6 6
7#include <array> 7#include <array>
8
9#include "common/bit_field.h" 8#include "common/bit_field.h"
10#include "common/common_funcs.h" 9#include "common/common_funcs.h"
11#include "common/common_types.h" 10#include "common/common_types.h"
11#include "video_core/pica_types.h"
12 12
13namespace Pica { 13namespace Pica {
14 14
@@ -31,7 +31,17 @@ struct RasterizerRegs {
31 31
32 BitField<0, 24, u32> viewport_size_y; 32 BitField<0, 24, u32> viewport_size_y;
33 33
34 INSERT_PADDING_WORDS(0x9); 34 INSERT_PADDING_WORDS(0x3);
35
36 BitField<0, 1, u32> clip_enable;
37 BitField<0, 24, u32> clip_coef[4]; // float24
38
39 Math::Vec4<float24> GetClipCoef() const {
40 return {float24::FromRaw(clip_coef[0]), float24::FromRaw(clip_coef[1]),
41 float24::FromRaw(clip_coef[2]), float24::FromRaw(clip_coef[3])};
42 }
43
44 INSERT_PADDING_WORDS(0x1);
35 45
36 BitField<0, 24, u32> viewport_depth_range; // float24 46 BitField<0, 24, u32> viewport_depth_range; // float24
37 BitField<0, 24, u32> viewport_depth_near_plane; // float24 47 BitField<0, 24, u32> viewport_depth_near_plane; // float24
diff --git a/src/video_core/regs_shader.h b/src/video_core/regs_shader.h
index ddb1ee451..c15d4d162 100644
--- a/src/video_core/regs_shader.h
+++ b/src/video_core/regs_shader.h
@@ -24,9 +24,16 @@ struct ShaderRegs {
24 24
25 INSERT_PADDING_WORDS(0x4); 25 INSERT_PADDING_WORDS(0x4);
26 26
27 enum ShaderMode {
28 GS = 0x08,
29 VS = 0xA0,
30 };
31
27 union { 32 union {
28 // Number of input attributes to shader unit - 1 33 // Number of input attributes to shader unit - 1
29 BitField<0, 4, u32> max_input_attribute_index; 34 BitField<0, 4, u32> max_input_attribute_index;
35 BitField<8, 8, u32> input_to_uniform;
36 BitField<24, 8, ShaderMode> shader_mode;
30 }; 37 };
31 38
32 // Offset to shader program entry point (in words) 39 // Offset to shader program entry point (in words)
diff --git a/src/video_core/renderer_opengl/gl_rasterizer.cpp b/src/video_core/renderer_opengl/gl_rasterizer.cpp
index 1c6c15a58..7e09e4712 100644
--- a/src/video_core/renderer_opengl/gl_rasterizer.cpp
+++ b/src/video_core/renderer_opengl/gl_rasterizer.cpp
@@ -28,6 +28,9 @@ MICROPROFILE_DEFINE(OpenGL_Blits, "OpenGL", "Blits", MP_RGB(100, 100, 255));
28MICROPROFILE_DEFINE(OpenGL_CacheManagement, "OpenGL", "Cache Mgmt", MP_RGB(100, 255, 100)); 28MICROPROFILE_DEFINE(OpenGL_CacheManagement, "OpenGL", "Cache Mgmt", MP_RGB(100, 255, 100));
29 29
30RasterizerOpenGL::RasterizerOpenGL() : shader_dirty(true) { 30RasterizerOpenGL::RasterizerOpenGL() : shader_dirty(true) {
31 // Clipping plane 0 is always enabled for PICA fixed clip plane z <= 0
32 state.clip_distance[0] = true;
33
31 // Create sampler objects 34 // Create sampler objects
32 for (size_t i = 0; i < texture_samplers.size(); ++i) { 35 for (size_t i = 0; i < texture_samplers.size(); ++i) {
33 texture_samplers[i].Create(); 36 texture_samplers[i].Create();
@@ -166,6 +169,8 @@ RasterizerOpenGL::RasterizerOpenGL() : shader_dirty(true) {
166 glTexBuffer(GL_TEXTURE_BUFFER, GL_RGBA32F, proctex_diff_lut_buffer.handle); 169 glTexBuffer(GL_TEXTURE_BUFFER, GL_RGBA32F, proctex_diff_lut_buffer.handle);
167 170
168 // Sync fixed function OpenGL state 171 // Sync fixed function OpenGL state
172 SyncClipEnabled();
173 SyncClipCoef();
169 SyncCullMode(); 174 SyncCullMode();
170 SyncBlendEnabled(); 175 SyncBlendEnabled();
171 SyncBlendFuncs(); 176 SyncBlendFuncs();
@@ -232,13 +237,24 @@ void RasterizerOpenGL::DrawTriangles() {
232 237
233 glFramebufferTexture2D(GL_DRAW_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, 238 glFramebufferTexture2D(GL_DRAW_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D,
234 color_surface != nullptr ? color_surface->texture.handle : 0, 0); 239 color_surface != nullptr ? color_surface->texture.handle : 0, 0);
235 glFramebufferTexture2D(GL_DRAW_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_TEXTURE_2D, 240 if (depth_surface != nullptr) {
236 depth_surface != nullptr ? depth_surface->texture.handle : 0, 0); 241 if (regs.framebuffer.framebuffer.depth_format ==
237 bool has_stencil = 242 Pica::FramebufferRegs::DepthFormat::D24S8) {
238 regs.framebuffer.framebuffer.depth_format == Pica::FramebufferRegs::DepthFormat::D24S8; 243 // attach both depth and stencil
239 glFramebufferTexture2D( 244 glFramebufferTexture2D(GL_DRAW_FRAMEBUFFER, GL_DEPTH_STENCIL_ATTACHMENT, GL_TEXTURE_2D,
240 GL_DRAW_FRAMEBUFFER, GL_STENCIL_ATTACHMENT, GL_TEXTURE_2D, 245 depth_surface->texture.handle, 0);
241 (has_stencil && depth_surface != nullptr) ? depth_surface->texture.handle : 0, 0); 246 } else {
247 // attach depth
248 glFramebufferTexture2D(GL_DRAW_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_TEXTURE_2D,
249 depth_surface->texture.handle, 0);
250 // clear stencil attachment
251 glFramebufferTexture2D(GL_DRAW_FRAMEBUFFER, GL_STENCIL_ATTACHMENT, GL_TEXTURE_2D, 0, 0);
252 }
253 } else {
254 // clear both depth and stencil attachment
255 glFramebufferTexture2D(GL_DRAW_FRAMEBUFFER, GL_DEPTH_STENCIL_ATTACHMENT, GL_TEXTURE_2D, 0,
256 0);
257 }
242 258
243 // Sync the viewport 259 // Sync the viewport
244 // These registers hold half-width and half-height, so must be multiplied by 2 260 // These registers hold half-width and half-height, so must be multiplied by 2
@@ -398,6 +414,18 @@ void RasterizerOpenGL::NotifyPicaRegisterChanged(u32 id) {
398 SyncCullMode(); 414 SyncCullMode();
399 break; 415 break;
400 416
417 // Clipping plane
418 case PICA_REG_INDEX(rasterizer.clip_enable):
419 SyncClipEnabled();
420 break;
421
422 case PICA_REG_INDEX_WORKAROUND(rasterizer.clip_coef[0], 0x48):
423 case PICA_REG_INDEX_WORKAROUND(rasterizer.clip_coef[1], 0x49):
424 case PICA_REG_INDEX_WORKAROUND(rasterizer.clip_coef[2], 0x4a):
425 case PICA_REG_INDEX_WORKAROUND(rasterizer.clip_coef[3], 0x4b):
426 SyncClipCoef();
427 break;
428
401 // Depth modifiers 429 // Depth modifiers
402 case PICA_REG_INDEX(rasterizer.viewport_depth_range): 430 case PICA_REG_INDEX(rasterizer.viewport_depth_range):
403 SyncDepthScale(); 431 SyncDepthScale();
@@ -1277,6 +1305,20 @@ void RasterizerOpenGL::SetShader() {
1277 } 1305 }
1278} 1306}
1279 1307
1308void RasterizerOpenGL::SyncClipEnabled() {
1309 state.clip_distance[1] = Pica::g_state.regs.rasterizer.clip_enable != 0;
1310}
1311
1312void RasterizerOpenGL::SyncClipCoef() {
1313 const auto raw_clip_coef = Pica::g_state.regs.rasterizer.GetClipCoef();
1314 const GLvec4 new_clip_coef = {raw_clip_coef.x.ToFloat32(), raw_clip_coef.y.ToFloat32(),
1315 raw_clip_coef.z.ToFloat32(), raw_clip_coef.w.ToFloat32()};
1316 if (new_clip_coef != uniform_block_data.data.clip_coef) {
1317 uniform_block_data.data.clip_coef = new_clip_coef;
1318 uniform_block_data.dirty = true;
1319 }
1320}
1321
1280void RasterizerOpenGL::SyncCullMode() { 1322void RasterizerOpenGL::SyncCullMode() {
1281 const auto& regs = Pica::g_state.regs; 1323 const auto& regs = Pica::g_state.regs;
1282 1324
diff --git a/src/video_core/renderer_opengl/gl_rasterizer.h b/src/video_core/renderer_opengl/gl_rasterizer.h
index 78e218efe..46c62961c 100644
--- a/src/video_core/renderer_opengl/gl_rasterizer.h
+++ b/src/video_core/renderer_opengl/gl_rasterizer.h
@@ -151,14 +151,21 @@ private:
151 LightSrc light_src[8]; 151 LightSrc light_src[8];
152 alignas(16) GLvec4 const_color[6]; // A vec4 color for each of the six tev stages 152 alignas(16) GLvec4 const_color[6]; // A vec4 color for each of the six tev stages
153 alignas(16) GLvec4 tev_combiner_buffer_color; 153 alignas(16) GLvec4 tev_combiner_buffer_color;
154 alignas(16) GLvec4 clip_coef;
154 }; 155 };
155 156
156 static_assert( 157 static_assert(
157 sizeof(UniformData) == 0x460, 158 sizeof(UniformData) == 0x470,
158 "The size of the UniformData structure has changed, update the structure in the shader"); 159 "The size of the UniformData structure has changed, update the structure in the shader");
159 static_assert(sizeof(UniformData) < 16384, 160 static_assert(sizeof(UniformData) < 16384,
160 "UniformData structure must be less than 16kb as per the OpenGL spec"); 161 "UniformData structure must be less than 16kb as per the OpenGL spec");
161 162
163 /// Syncs the clip enabled status to match the PICA register
164 void SyncClipEnabled();
165
166 /// Syncs the clip coefficients to match the PICA register
167 void SyncClipCoef();
168
162 /// Sets the OpenGL shader in accordance with the current PICA register state 169 /// Sets the OpenGL shader in accordance with the current PICA register state
163 void SetShader(); 170 void SetShader();
164 171
diff --git a/src/video_core/renderer_opengl/gl_shader_gen.cpp b/src/video_core/renderer_opengl/gl_shader_gen.cpp
index bb192affd..9fe183944 100644
--- a/src/video_core/renderer_opengl/gl_shader_gen.cpp
+++ b/src/video_core/renderer_opengl/gl_shader_gen.cpp
@@ -8,6 +8,7 @@
8#include "common/assert.h" 8#include "common/assert.h"
9#include "common/bit_field.h" 9#include "common/bit_field.h"
10#include "common/logging/log.h" 10#include "common/logging/log.h"
11#include "core/core.h"
11#include "video_core/regs_framebuffer.h" 12#include "video_core/regs_framebuffer.h"
12#include "video_core/regs_lighting.h" 13#include "video_core/regs_lighting.h"
13#include "video_core/regs_rasterizer.h" 14#include "video_core/regs_rasterizer.h"
@@ -24,6 +25,42 @@ using TevStageConfig = TexturingRegs::TevStageConfig;
24 25
25namespace GLShader { 26namespace GLShader {
26 27
28static const std::string UniformBlockDef = R"(
29#define NUM_TEV_STAGES 6
30#define NUM_LIGHTS 8
31
32struct LightSrc {
33 vec3 specular_0;
34 vec3 specular_1;
35 vec3 diffuse;
36 vec3 ambient;
37 vec3 position;
38 vec3 spot_direction;
39 float dist_atten_bias;
40 float dist_atten_scale;
41};
42
43layout (std140) uniform shader_data {
44 vec2 framebuffer_scale;
45 int alphatest_ref;
46 float depth_scale;
47 float depth_offset;
48 int scissor_x1;
49 int scissor_y1;
50 int scissor_x2;
51 int scissor_y2;
52 vec3 fog_color;
53 vec2 proctex_noise_f;
54 vec2 proctex_noise_a;
55 vec2 proctex_noise_p;
56 vec3 lighting_global_ambient;
57 LightSrc light_src[NUM_LIGHTS];
58 vec4 const_color[NUM_TEV_STAGES];
59 vec4 tev_combiner_buffer_color;
60 vec4 clip_coef;
61};
62)";
63
27PicaShaderConfig PicaShaderConfig::BuildFromRegs(const Pica::Regs& regs) { 64PicaShaderConfig PicaShaderConfig::BuildFromRegs(const Pica::Regs& regs) {
28 PicaShaderConfig res; 65 PicaShaderConfig res;
29 66
@@ -525,11 +562,12 @@ static void WriteLighting(std::string& out, const PicaShaderConfig& config) {
525 "float geo_factor = 1.0;\n"; 562 "float geo_factor = 1.0;\n";
526 563
527 // Compute fragment normals and tangents 564 // Compute fragment normals and tangents
528 const std::string pertubation = 565 auto Perturbation = [&]() {
529 "2.0 * (" + SampleTexture(config, lighting.bump_selector) + ").rgb - 1.0"; 566 return "2.0 * (" + SampleTexture(config, lighting.bump_selector) + ").rgb - 1.0";
567 };
530 if (lighting.bump_mode == LightingRegs::LightingBumpMode::NormalMap) { 568 if (lighting.bump_mode == LightingRegs::LightingBumpMode::NormalMap) {
531 // Bump mapping is enabled using a normal map 569 // Bump mapping is enabled using a normal map
532 out += "vec3 surface_normal = " + pertubation + ";\n"; 570 out += "vec3 surface_normal = " + Perturbation() + ";\n";
533 571
534 // Recompute Z-component of perturbation if 'renorm' is enabled, this provides a higher 572 // Recompute Z-component of perturbation if 'renorm' is enabled, this provides a higher
535 // precision result 573 // precision result
@@ -543,7 +581,7 @@ static void WriteLighting(std::string& out, const PicaShaderConfig& config) {
543 out += "vec3 surface_tangent = vec3(1.0, 0.0, 0.0);\n"; 581 out += "vec3 surface_tangent = vec3(1.0, 0.0, 0.0);\n";
544 } else if (lighting.bump_mode == LightingRegs::LightingBumpMode::TangentMap) { 582 } else if (lighting.bump_mode == LightingRegs::LightingBumpMode::TangentMap) {
545 // Bump mapping is enabled using a tangent map 583 // Bump mapping is enabled using a tangent map
546 out += "vec3 surface_tangent = " + pertubation + ";\n"; 584 out += "vec3 surface_tangent = " + Perturbation() + ";\n";
547 // Mathematically, recomputing Z-component of the tangent vector won't affect the relevant 585 // Mathematically, recomputing Z-component of the tangent vector won't affect the relevant
548 // computation below, which is also confirmed on 3DS. So we don't bother recomputing here 586 // computation below, which is also confirmed on 3DS. So we don't bother recomputing here
549 // even if 'renorm' is enabled. 587 // even if 'renorm' is enabled.
@@ -593,8 +631,8 @@ static void WriteLighting(std::string& out, const PicaShaderConfig& config) {
593 // Note: even if the normal vector is modified by normal map, which is not the 631 // Note: even if the normal vector is modified by normal map, which is not the
594 // normal of the tangent plane anymore, the half angle vector is still projected 632 // normal of the tangent plane anymore, the half angle vector is still projected
595 // using the modified normal vector. 633 // using the modified normal vector.
596 std::string half_angle_proj = "normalize(half_vector) - normal / dot(normal, " 634 std::string half_angle_proj =
597 "normal) * dot(normal, normalize(half_vector))"; 635 "normalize(half_vector) - normal * dot(normal, normalize(half_vector))";
598 // Note: the half angle vector projection is confirmed not normalized before the dot 636 // Note: the half angle vector projection is confirmed not normalized before the dot
599 // product. The result is in fact not cos(phi) as the name suggested. 637 // product. The result is in fact not cos(phi) as the name suggested.
600 index = "dot(" + half_angle_proj + ", tangent)"; 638 index = "dot(" + half_angle_proj + ", tangent)";
@@ -749,7 +787,8 @@ static void WriteLighting(std::string& out, const PicaShaderConfig& config) {
749 } 787 }
750 788
751 // Fresnel 789 // Fresnel
752 if (lighting.lut_fr.enable && 790 // Note: only the last entry in the light slots applies the Fresnel factor
791 if (light_index == lighting.src_num - 1 && lighting.lut_fr.enable &&
753 LightingRegs::IsLightingSamplerSupported(lighting.config, 792 LightingRegs::IsLightingSamplerSupported(lighting.config,
754 LightingRegs::LightingSampler::Fresnel)) { 793 LightingRegs::LightingSampler::Fresnel)) {
755 // Lookup fresnel LUT value 794 // Lookup fresnel LUT value
@@ -758,17 +797,17 @@ static void WriteLighting(std::string& out, const PicaShaderConfig& config) {
758 lighting.lut_fr.type, lighting.lut_fr.abs_input); 797 lighting.lut_fr.type, lighting.lut_fr.abs_input);
759 value = "(" + std::to_string(lighting.lut_fr.scale) + " * " + value + ")"; 798 value = "(" + std::to_string(lighting.lut_fr.scale) + " * " + value + ")";
760 799
761 // Enabled for difffuse lighting alpha component 800 // Enabled for diffuse lighting alpha component
762 if (lighting.fresnel_selector == LightingRegs::LightingFresnelSelector::PrimaryAlpha || 801 if (lighting.fresnel_selector == LightingRegs::LightingFresnelSelector::PrimaryAlpha ||
763 lighting.fresnel_selector == LightingRegs::LightingFresnelSelector::Both) { 802 lighting.fresnel_selector == LightingRegs::LightingFresnelSelector::Both) {
764 out += "diffuse_sum.a *= " + value + ";\n"; 803 out += "diffuse_sum.a = " + value + ";\n";
765 } 804 }
766 805
767 // Enabled for the specular lighting alpha component 806 // Enabled for the specular lighting alpha component
768 if (lighting.fresnel_selector == 807 if (lighting.fresnel_selector ==
769 LightingRegs::LightingFresnelSelector::SecondaryAlpha || 808 LightingRegs::LightingFresnelSelector::SecondaryAlpha ||
770 lighting.fresnel_selector == LightingRegs::LightingFresnelSelector::Both) { 809 lighting.fresnel_selector == LightingRegs::LightingFresnelSelector::Both) {
771 out += "specular_sum.a *= " + value + ";\n"; 810 out += "specular_sum.a = " + value + ";\n";
772 } 811 }
773 } 812 }
774 813
@@ -1007,8 +1046,6 @@ std::string GenerateFragmentShader(const PicaShaderConfig& config) {
1007 1046
1008 std::string out = R"( 1047 std::string out = R"(
1009#version 330 core 1048#version 330 core
1010#define NUM_TEV_STAGES 6
1011#define NUM_LIGHTS 8
1012 1049
1013in vec4 primary_color; 1050in vec4 primary_color;
1014in vec2 texcoord[3]; 1051in vec2 texcoord[3];
@@ -1020,36 +1057,6 @@ in vec4 gl_FragCoord;
1020 1057
1021out vec4 color; 1058out vec4 color;
1022 1059
1023struct LightSrc {
1024 vec3 specular_0;
1025 vec3 specular_1;
1026 vec3 diffuse;
1027 vec3 ambient;
1028 vec3 position;
1029 vec3 spot_direction;
1030 float dist_atten_bias;
1031 float dist_atten_scale;
1032};
1033
1034layout (std140) uniform shader_data {
1035 vec2 framebuffer_scale;
1036 int alphatest_ref;
1037 float depth_scale;
1038 float depth_offset;
1039 int scissor_x1;
1040 int scissor_y1;
1041 int scissor_x2;
1042 int scissor_y2;
1043 vec3 fog_color;
1044 vec2 proctex_noise_f;
1045 vec2 proctex_noise_a;
1046 vec2 proctex_noise_p;
1047 vec3 lighting_global_ambient;
1048 LightSrc light_src[NUM_LIGHTS];
1049 vec4 const_color[NUM_TEV_STAGES];
1050 vec4 tev_combiner_buffer_color;
1051};
1052
1053uniform sampler2D tex[3]; 1060uniform sampler2D tex[3];
1054uniform samplerBuffer lighting_lut; 1061uniform samplerBuffer lighting_lut;
1055uniform samplerBuffer fog_lut; 1062uniform samplerBuffer fog_lut;
@@ -1058,7 +1065,11 @@ uniform samplerBuffer proctex_color_map;
1058uniform samplerBuffer proctex_alpha_map; 1065uniform samplerBuffer proctex_alpha_map;
1059uniform samplerBuffer proctex_lut; 1066uniform samplerBuffer proctex_lut;
1060uniform samplerBuffer proctex_diff_lut; 1067uniform samplerBuffer proctex_diff_lut;
1068)";
1069
1070 out += UniformBlockDef;
1061 1071
1072 out += R"(
1062// Rotate the vector v by the quaternion q 1073// Rotate the vector v by the quaternion q
1063vec3 quaternion_rotate(vec4 q, vec3 v) { 1074vec3 quaternion_rotate(vec4 q, vec3 v) {
1064 return v + 2.0 * cross(q.xyz, cross(q.xyz, v) + q.w * v); 1075 return v + 2.0 * cross(q.xyz, cross(q.xyz, v) + q.w * v);
@@ -1111,7 +1122,10 @@ vec4 secondary_fragment_color = vec4(0.0);
1111 "gl_FragCoord.y < scissor_y2)) discard;\n"; 1122 "gl_FragCoord.y < scissor_y2)) discard;\n";
1112 } 1123 }
1113 1124
1114 out += "float z_over_w = 1.0 - gl_FragCoord.z * 2.0;\n"; 1125 // After perspective divide, OpenGL transform z_over_w from [-1, 1] to [near, far]. Here we use
1126 // default near = 0 and far = 1, and undo the transformation to get the original z_over_w, then
1127 // do our own transformation according to PICA specification.
1128 out += "float z_over_w = 2.0 * gl_FragCoord.z - 1.0;\n";
1115 out += "float depth = z_over_w * depth_scale + depth_offset;\n"; 1129 out += "float depth = z_over_w * depth_scale + depth_offset;\n";
1116 if (state.depthmap_enable == RasterizerRegs::DepthBuffering::WBuffering) { 1130 if (state.depthmap_enable == RasterizerRegs::DepthBuffering::WBuffering) {
1117 out += "depth /= gl_FragCoord.w;\n"; 1131 out += "depth /= gl_FragCoord.w;\n";
@@ -1151,6 +1165,11 @@ vec4 secondary_fragment_color = vec4(0.0);
1151 1165
1152 // Blend the fog 1166 // Blend the fog
1153 out += "last_tex_env_out.rgb = mix(fog_color.rgb, last_tex_env_out.rgb, fog_factor);\n"; 1167 out += "last_tex_env_out.rgb = mix(fog_color.rgb, last_tex_env_out.rgb, fog_factor);\n";
1168 } else if (state.fog_mode == TexturingRegs::FogMode::Gas) {
1169 Core::Telemetry().AddField(Telemetry::FieldType::Session, "VideoCore_Pica_UseGasMode",
1170 true);
1171 LOG_CRITICAL(Render_OpenGL, "Unimplemented gas mode");
1172 UNIMPLEMENTED();
1154 } 1173 }
1155 1174
1156 out += "gl_FragDepth = depth;\n"; 1175 out += "gl_FragDepth = depth;\n";
@@ -1186,6 +1205,12 @@ out float texcoord0_w;
1186out vec4 normquat; 1205out vec4 normquat;
1187out vec3 view; 1206out vec3 view;
1188 1207
1208)";
1209
1210 out += UniformBlockDef;
1211
1212 out += R"(
1213
1189void main() { 1214void main() {
1190 primary_color = vert_color; 1215 primary_color = vert_color;
1191 texcoord[0] = vert_texcoord0; 1216 texcoord[0] = vert_texcoord0;
@@ -1194,7 +1219,9 @@ void main() {
1194 texcoord0_w = vert_texcoord0_w; 1219 texcoord0_w = vert_texcoord0_w;
1195 normquat = vert_normquat; 1220 normquat = vert_normquat;
1196 view = vert_view; 1221 view = vert_view;
1197 gl_Position = vec4(vert_position.x, vert_position.y, -vert_position.z, vert_position.w); 1222 gl_Position = vert_position;
1223 gl_ClipDistance[0] = -vert_position.z; // fixed PICA clipping plane z <= 0
1224 gl_ClipDistance[1] = dot(clip_coef, vert_position);
1198} 1225}
1199)"; 1226)";
1200 1227
diff --git a/src/video_core/renderer_opengl/gl_state.cpp b/src/video_core/renderer_opengl/gl_state.cpp
index bc9d34b84..5770ae08f 100644
--- a/src/video_core/renderer_opengl/gl_state.cpp
+++ b/src/video_core/renderer_opengl/gl_state.cpp
@@ -68,6 +68,8 @@ OpenGLState::OpenGLState() {
68 draw.vertex_buffer = 0; 68 draw.vertex_buffer = 0;
69 draw.uniform_buffer = 0; 69 draw.uniform_buffer = 0;
70 draw.shader_program = 0; 70 draw.shader_program = 0;
71
72 clip_distance = {};
71} 73}
72 74
73void OpenGLState::Apply() const { 75void OpenGLState::Apply() const {
@@ -261,6 +263,17 @@ void OpenGLState::Apply() const {
261 glUseProgram(draw.shader_program); 263 glUseProgram(draw.shader_program);
262 } 264 }
263 265
266 // Clip distance
267 for (size_t i = 0; i < clip_distance.size(); ++i) {
268 if (clip_distance[i] != cur_state.clip_distance[i]) {
269 if (clip_distance[i]) {
270 glEnable(GL_CLIP_DISTANCE0 + static_cast<GLenum>(i));
271 } else {
272 glDisable(GL_CLIP_DISTANCE0 + static_cast<GLenum>(i));
273 }
274 }
275 }
276
264 cur_state = *this; 277 cur_state = *this;
265} 278}
266 279
diff --git a/src/video_core/renderer_opengl/gl_state.h b/src/video_core/renderer_opengl/gl_state.h
index 745a74479..437fe34c4 100644
--- a/src/video_core/renderer_opengl/gl_state.h
+++ b/src/video_core/renderer_opengl/gl_state.h
@@ -4,6 +4,7 @@
4 4
5#pragma once 5#pragma once
6 6
7#include <array>
7#include <glad/glad.h> 8#include <glad/glad.h>
8 9
9namespace TextureUnits { 10namespace TextureUnits {
@@ -123,6 +124,8 @@ public:
123 GLuint shader_program; // GL_CURRENT_PROGRAM 124 GLuint shader_program; // GL_CURRENT_PROGRAM
124 } draw; 125 } draw;
125 126
127 std::array<bool, 2> clip_distance; // GL_CLIP_DISTANCE
128
126 OpenGLState(); 129 OpenGLState();
127 130
128 /// Get the currently active OpenGL state 131 /// Get the currently active OpenGL state
diff --git a/src/video_core/shader/shader.cpp b/src/video_core/shader/shader.cpp
index 67ed19ba8..2857d2829 100644
--- a/src/video_core/shader/shader.cpp
+++ b/src/video_core/shader/shader.cpp
@@ -21,7 +21,8 @@ namespace Pica {
21 21
22namespace Shader { 22namespace Shader {
23 23
24OutputVertex OutputVertex::FromAttributeBuffer(const RasterizerRegs& regs, AttributeBuffer& input) { 24OutputVertex OutputVertex::FromAttributeBuffer(const RasterizerRegs& regs,
25 const AttributeBuffer& input) {
25 // Setup output data 26 // Setup output data
26 union { 27 union {
27 OutputVertex ret{}; 28 OutputVertex ret{};
@@ -51,7 +52,8 @@ OutputVertex OutputVertex::FromAttributeBuffer(const RasterizerRegs& regs, Attri
51 // The hardware takes the absolute and saturates vertex colors like this, *before* doing 52 // The hardware takes the absolute and saturates vertex colors like this, *before* doing
52 // interpolation 53 // interpolation
53 for (unsigned i = 0; i < 4; ++i) { 54 for (unsigned i = 0; i < 4; ++i) {
54 ret.color[i] = float24::FromFloat32(std::fmin(std::fabs(ret.color[i].ToFloat32()), 1.0f)); 55 float c = std::fabs(ret.color[i].ToFloat32());
56 ret.color[i] = float24::FromFloat32(c < 1.0f ? c : 1.0f);
55 } 57 }
56 58
57 LOG_TRACE(HW_GPU, "Output vertex: pos(%.2f, %.2f, %.2f, %.2f), quat(%.2f, %.2f, %.2f, %.2f), " 59 LOG_TRACE(HW_GPU, "Output vertex: pos(%.2f, %.2f, %.2f, %.2f), quat(%.2f, %.2f, %.2f, %.2f), "
@@ -82,6 +84,44 @@ void UnitState::WriteOutput(const ShaderRegs& config, AttributeBuffer& output) {
82 } 84 }
83} 85}
84 86
87UnitState::UnitState(GSEmitter* emitter) : emitter_ptr(emitter) {}
88
89GSEmitter::GSEmitter() {
90 handlers = new Handlers;
91}
92
93GSEmitter::~GSEmitter() {
94 delete handlers;
95}
96
97void GSEmitter::Emit(Math::Vec4<float24> (&vertex)[16]) {
98 ASSERT(vertex_id < 3);
99 std::copy(std::begin(vertex), std::end(vertex), buffer[vertex_id].begin());
100 if (prim_emit) {
101 if (winding)
102 handlers->winding_setter();
103 for (size_t i = 0; i < buffer.size(); ++i) {
104 AttributeBuffer output;
105 unsigned int output_i = 0;
106 for (unsigned int reg : Common::BitSet<u32>(output_mask)) {
107 output.attr[output_i++] = buffer[i][reg];
108 }
109 handlers->vertex_handler(output);
110 }
111 }
112}
113
114GSUnitState::GSUnitState() : UnitState(&emitter) {}
115
116void GSUnitState::SetVertexHandler(VertexHandler vertex_handler, WindingSetter winding_setter) {
117 emitter.handlers->vertex_handler = std::move(vertex_handler);
118 emitter.handlers->winding_setter = std::move(winding_setter);
119}
120
121void GSUnitState::ConfigOutput(const ShaderRegs& config) {
122 emitter.output_mask = config.output_mask;
123}
124
85MICROPROFILE_DEFINE(GPU_Shader, "GPU", "Shader", MP_RGB(50, 50, 240)); 125MICROPROFILE_DEFINE(GPU_Shader, "GPU", "Shader", MP_RGB(50, 50, 240));
86 126
87#ifdef ARCHITECTURE_x86_64 127#ifdef ARCHITECTURE_x86_64
diff --git a/src/video_core/shader/shader.h b/src/video_core/shader/shader.h
index e156f6aef..a3789da01 100644
--- a/src/video_core/shader/shader.h
+++ b/src/video_core/shader/shader.h
@@ -6,6 +6,7 @@
6 6
7#include <array> 7#include <array>
8#include <cstddef> 8#include <cstddef>
9#include <functional>
9#include <type_traits> 10#include <type_traits>
10#include <nihstro/shader_bytecode.h> 11#include <nihstro/shader_bytecode.h>
11#include "common/assert.h" 12#include "common/assert.h"
@@ -31,6 +32,12 @@ struct AttributeBuffer {
31 alignas(16) Math::Vec4<float24> attr[16]; 32 alignas(16) Math::Vec4<float24> attr[16];
32}; 33};
33 34
35/// Handler type for receiving vertex outputs from vertex shader or geometry shader
36using VertexHandler = std::function<void(const AttributeBuffer&)>;
37
38/// Handler type for signaling to invert the vertex order of the next triangle
39using WindingSetter = std::function<void()>;
40
34struct OutputVertex { 41struct OutputVertex {
35 Math::Vec4<float24> pos; 42 Math::Vec4<float24> pos;
36 Math::Vec4<float24> quat; 43 Math::Vec4<float24> quat;
@@ -43,7 +50,8 @@ struct OutputVertex {
43 INSERT_PADDING_WORDS(1); 50 INSERT_PADDING_WORDS(1);
44 Math::Vec2<float24> tc2; 51 Math::Vec2<float24> tc2;
45 52
46 static OutputVertex FromAttributeBuffer(const RasterizerRegs& regs, AttributeBuffer& output); 53 static OutputVertex FromAttributeBuffer(const RasterizerRegs& regs,
54 const AttributeBuffer& output);
47}; 55};
48#define ASSERT_POS(var, pos) \ 56#define ASSERT_POS(var, pos) \
49 static_assert(offsetof(OutputVertex, var) == pos * sizeof(float24), "Semantic at wrong " \ 57 static_assert(offsetof(OutputVertex, var) == pos * sizeof(float24), "Semantic at wrong " \
@@ -61,12 +69,36 @@ static_assert(std::is_pod<OutputVertex>::value, "Structure is not POD");
61static_assert(sizeof(OutputVertex) == 24 * sizeof(float), "OutputVertex has invalid size"); 69static_assert(sizeof(OutputVertex) == 24 * sizeof(float), "OutputVertex has invalid size");
62 70
63/** 71/**
72 * This structure contains state information for primitive emitting in geometry shader.
73 */
74struct GSEmitter {
75 std::array<std::array<Math::Vec4<float24>, 16>, 3> buffer;
76 u8 vertex_id;
77 bool prim_emit;
78 bool winding;
79 u32 output_mask;
80
81 // Function objects are hidden behind a raw pointer to make the structure standard layout type,
82 // for JIT to use offsetof to access other members.
83 struct Handlers {
84 VertexHandler vertex_handler;
85 WindingSetter winding_setter;
86 } * handlers;
87
88 GSEmitter();
89 ~GSEmitter();
90 void Emit(Math::Vec4<float24> (&vertex)[16]);
91};
92static_assert(std::is_standard_layout<GSEmitter>::value, "GSEmitter is not standard layout type");
93
94/**
64 * This structure contains the state information that needs to be unique for a shader unit. The 3DS 95 * This structure contains the state information that needs to be unique for a shader unit. The 3DS
65 * has four shader units that process shaders in parallel. At the present, Citra only implements a 96 * has four shader units that process shaders in parallel. At the present, Citra only implements a
66 * single shader unit that processes all shaders serially. Putting the state information in a struct 97 * single shader unit that processes all shaders serially. Putting the state information in a struct
67 * here will make it easier for us to parallelize the shader processing later. 98 * here will make it easier for us to parallelize the shader processing later.
68 */ 99 */
69struct UnitState { 100struct UnitState {
101 explicit UnitState(GSEmitter* emitter = nullptr);
70 struct Registers { 102 struct Registers {
71 // The registers are accessed by the shader JIT using SSE instructions, and are therefore 103 // The registers are accessed by the shader JIT using SSE instructions, and are therefore
72 // required to be 16-byte aligned. 104 // required to be 16-byte aligned.
@@ -82,6 +114,8 @@ struct UnitState {
82 // TODO: How many bits do these actually have? 114 // TODO: How many bits do these actually have?
83 s32 address_registers[3]; 115 s32 address_registers[3];
84 116
117 GSEmitter* emitter_ptr;
118
85 static size_t InputOffset(const SourceRegister& reg) { 119 static size_t InputOffset(const SourceRegister& reg) {
86 switch (reg.GetRegisterType()) { 120 switch (reg.GetRegisterType()) {
87 case RegisterType::Input: 121 case RegisterType::Input:
@@ -125,6 +159,19 @@ struct UnitState {
125 void WriteOutput(const ShaderRegs& config, AttributeBuffer& output); 159 void WriteOutput(const ShaderRegs& config, AttributeBuffer& output);
126}; 160};
127 161
162/**
163 * This is an extended shader unit state that represents the special unit that can run both vertex
164 * shader and geometry shader. It contains an additional primitive emitter and utilities for
165 * geometry shader.
166 */
167struct GSUnitState : public UnitState {
168 GSUnitState();
169 void SetVertexHandler(VertexHandler vertex_handler, WindingSetter winding_setter);
170 void ConfigOutput(const ShaderRegs& config);
171
172 GSEmitter emitter;
173};
174
128struct ShaderSetup { 175struct ShaderSetup {
129 struct { 176 struct {
130 // The float uniforms are accessed by the shader JIT using SSE instructions, and are 177 // The float uniforms are accessed by the shader JIT using SSE instructions, and are
diff --git a/src/video_core/shader/shader_interpreter.cpp b/src/video_core/shader/shader_interpreter.cpp
index aa1cec81f..9d4da4904 100644
--- a/src/video_core/shader/shader_interpreter.cpp
+++ b/src/video_core/shader/shader_interpreter.cpp
@@ -631,11 +631,27 @@ static void RunInterpreter(const ShaderSetup& setup, UnitState& state, DebugData
631 state.address_registers[2] = loop_param.y; 631 state.address_registers[2] = loop_param.y;
632 632
633 Record<DebugDataRecord::LOOP_INT_IN>(debug_data, iteration, loop_param); 633 Record<DebugDataRecord::LOOP_INT_IN>(debug_data, iteration, loop_param);
634 call(program_counter + 1, instr.flow_control.dest_offset - program_counter + 1, 634 call(program_counter + 1, instr.flow_control.dest_offset - program_counter,
635 instr.flow_control.dest_offset + 1, loop_param.x, loop_param.z); 635 instr.flow_control.dest_offset + 1, loop_param.x, loop_param.z);
636 break; 636 break;
637 } 637 }
638 638
639 case OpCode::Id::EMIT: {
640 GSEmitter* emitter = state.emitter_ptr;
641 ASSERT_MSG(emitter, "Execute EMIT on VS");
642 emitter->Emit(state.registers.output);
643 break;
644 }
645
646 case OpCode::Id::SETEMIT: {
647 GSEmitter* emitter = state.emitter_ptr;
648 ASSERT_MSG(emitter, "Execute SETEMIT on VS");
649 emitter->vertex_id = instr.setemit.vertex_id;
650 emitter->prim_emit = instr.setemit.prim_emit != 0;
651 emitter->winding = instr.setemit.winding != 0;
652 break;
653 }
654
639 default: 655 default:
640 LOG_ERROR(HW_GPU, "Unhandled instruction: 0x%02x (%s): 0x%08x", 656 LOG_ERROR(HW_GPU, "Unhandled instruction: 0x%02x (%s): 0x%08x",
641 (int)instr.opcode.Value().EffectiveOpCode(), 657 (int)instr.opcode.Value().EffectiveOpCode(),
diff --git a/src/video_core/shader/shader_jit_x64_compiler.cpp b/src/video_core/shader/shader_jit_x64_compiler.cpp
index 42a57aab1..1b31623bd 100644
--- a/src/video_core/shader/shader_jit_x64_compiler.cpp
+++ b/src/video_core/shader/shader_jit_x64_compiler.cpp
@@ -75,8 +75,8 @@ const JitFunction instr_table[64] = {
75 &JitShader::Compile_IF, // ifu 75 &JitShader::Compile_IF, // ifu
76 &JitShader::Compile_IF, // ifc 76 &JitShader::Compile_IF, // ifc
77 &JitShader::Compile_LOOP, // loop 77 &JitShader::Compile_LOOP, // loop
78 nullptr, // emit 78 &JitShader::Compile_EMIT, // emit
79 nullptr, // sete 79 &JitShader::Compile_SETE, // sete
80 &JitShader::Compile_JMP, // jmpc 80 &JitShader::Compile_JMP, // jmpc
81 &JitShader::Compile_JMP, // jmpu 81 &JitShader::Compile_JMP, // jmpu
82 &JitShader::Compile_CMP, // cmp 82 &JitShader::Compile_CMP, // cmp
@@ -772,6 +772,51 @@ void JitShader::Compile_JMP(Instruction instr) {
772 } 772 }
773} 773}
774 774
775static void Emit(GSEmitter* emitter, Math::Vec4<float24> (*output)[16]) {
776 emitter->Emit(*output);
777}
778
779void JitShader::Compile_EMIT(Instruction instr) {
780 Label have_emitter, end;
781 mov(rax, qword[STATE + offsetof(UnitState, emitter_ptr)]);
782 test(rax, rax);
783 jnz(have_emitter);
784
785 ABI_PushRegistersAndAdjustStack(*this, PersistentCallerSavedRegs(), 0);
786 mov(ABI_PARAM1, reinterpret_cast<size_t>("Execute EMIT on VS"));
787 CallFarFunction(*this, LogCritical);
788 ABI_PopRegistersAndAdjustStack(*this, PersistentCallerSavedRegs(), 0);
789 jmp(end);
790
791 L(have_emitter);
792 ABI_PushRegistersAndAdjustStack(*this, PersistentCallerSavedRegs(), 0);
793 mov(ABI_PARAM1, rax);
794 mov(ABI_PARAM2, STATE);
795 add(ABI_PARAM2, static_cast<Xbyak::uint32>(offsetof(UnitState, registers.output)));
796 CallFarFunction(*this, Emit);
797 ABI_PopRegistersAndAdjustStack(*this, PersistentCallerSavedRegs(), 0);
798 L(end);
799}
800
801void JitShader::Compile_SETE(Instruction instr) {
802 Label have_emitter, end;
803 mov(rax, qword[STATE + offsetof(UnitState, emitter_ptr)]);
804 test(rax, rax);
805 jnz(have_emitter);
806
807 ABI_PushRegistersAndAdjustStack(*this, PersistentCallerSavedRegs(), 0);
808 mov(ABI_PARAM1, reinterpret_cast<size_t>("Execute SETEMIT on VS"));
809 CallFarFunction(*this, LogCritical);
810 ABI_PopRegistersAndAdjustStack(*this, PersistentCallerSavedRegs(), 0);
811 jmp(end);
812
813 L(have_emitter);
814 mov(byte[rax + offsetof(GSEmitter, vertex_id)], instr.setemit.vertex_id);
815 mov(byte[rax + offsetof(GSEmitter, prim_emit)], instr.setemit.prim_emit);
816 mov(byte[rax + offsetof(GSEmitter, winding)], instr.setemit.winding);
817 L(end);
818}
819
775void JitShader::Compile_Block(unsigned end) { 820void JitShader::Compile_Block(unsigned end) {
776 while (program_counter < end) { 821 while (program_counter < end) {
777 Compile_NextInstr(); 822 Compile_NextInstr();
diff --git a/src/video_core/shader/shader_jit_x64_compiler.h b/src/video_core/shader/shader_jit_x64_compiler.h
index 31af0ca48..4aee56b1d 100644
--- a/src/video_core/shader/shader_jit_x64_compiler.h
+++ b/src/video_core/shader/shader_jit_x64_compiler.h
@@ -66,6 +66,8 @@ public:
66 void Compile_JMP(Instruction instr); 66 void Compile_JMP(Instruction instr);
67 void Compile_CMP(Instruction instr); 67 void Compile_CMP(Instruction instr);
68 void Compile_MAD(Instruction instr); 68 void Compile_MAD(Instruction instr);
69 void Compile_EMIT(Instruction instr);
70 void Compile_SETE(Instruction instr);
69 71
70private: 72private:
71 void Compile_Block(unsigned end); 73 void Compile_Block(unsigned end);
diff --git a/src/video_core/swrasterizer/clipper.cpp b/src/video_core/swrasterizer/clipper.cpp
index 6fb923756..c1ed48398 100644
--- a/src/video_core/swrasterizer/clipper.cpp
+++ b/src/video_core/swrasterizer/clipper.cpp
@@ -31,7 +31,7 @@ public:
31 : coeffs(coeffs), bias(bias) {} 31 : coeffs(coeffs), bias(bias) {}
32 32
33 bool IsInside(const Vertex& vertex) const { 33 bool IsInside(const Vertex& vertex) const {
34 return Math::Dot(vertex.pos + bias, coeffs) <= float24::FromFloat32(0); 34 return Math::Dot(vertex.pos + bias, coeffs) >= float24::FromFloat32(0);
35 } 35 }
36 36
37 bool IsOutSide(const Vertex& vertex) const { 37 bool IsOutSide(const Vertex& vertex) const {
@@ -95,6 +95,17 @@ void ProcessTriangle(const OutputVertex& v0, const OutputVertex& v1, const Outpu
95 static const size_t MAX_VERTICES = 9; 95 static const size_t MAX_VERTICES = 9;
96 static_vector<Vertex, MAX_VERTICES> buffer_a = {v0, v1, v2}; 96 static_vector<Vertex, MAX_VERTICES> buffer_a = {v0, v1, v2};
97 static_vector<Vertex, MAX_VERTICES> buffer_b; 97 static_vector<Vertex, MAX_VERTICES> buffer_b;
98
99 auto FlipQuaternionIfOpposite = [](auto& a, const auto& b) {
100 if (Math::Dot(a, b) < float24::Zero())
101 a = a * float24::FromFloat32(-1.0f);
102 };
103
104 // Flip the quaternions if they are opposite to prevent interpolating them over the wrong
105 // direction.
106 FlipQuaternionIfOpposite(buffer_a[1].quat, buffer_a[0].quat);
107 FlipQuaternionIfOpposite(buffer_a[2].quat, buffer_a[0].quat);
108
98 auto* output_list = &buffer_a; 109 auto* output_list = &buffer_a;
99 auto* input_list = &buffer_b; 110 auto* input_list = &buffer_b;
100 111
@@ -105,23 +116,18 @@ void ProcessTriangle(const OutputVertex& v0, const OutputVertex& v1, const Outpu
105 static const float24 f0 = float24::FromFloat32(0.0); 116 static const float24 f0 = float24::FromFloat32(0.0);
106 static const float24 f1 = float24::FromFloat32(1.0); 117 static const float24 f1 = float24::FromFloat32(1.0);
107 static const std::array<ClippingEdge, 7> clipping_edges = {{ 118 static const std::array<ClippingEdge, 7> clipping_edges = {{
108 {Math::MakeVec(f1, f0, f0, -f1)}, // x = +w 119 {Math::MakeVec(-f1, f0, f0, f1)}, // x = +w
109 {Math::MakeVec(-f1, f0, f0, -f1)}, // x = -w 120 {Math::MakeVec(f1, f0, f0, f1)}, // x = -w
110 {Math::MakeVec(f0, f1, f0, -f1)}, // y = +w 121 {Math::MakeVec(f0, -f1, f0, f1)}, // y = +w
111 {Math::MakeVec(f0, -f1, f0, -f1)}, // y = -w 122 {Math::MakeVec(f0, f1, f0, f1)}, // y = -w
112 {Math::MakeVec(f0, f0, f1, f0)}, // z = 0 123 {Math::MakeVec(f0, f0, -f1, f0)}, // z = 0
113 {Math::MakeVec(f0, f0, -f1, -f1)}, // z = -w 124 {Math::MakeVec(f0, f0, f1, f1)}, // z = -w
114 {Math::MakeVec(f0, f0, f0, -f1), Math::Vec4<float24>(f0, f0, f0, EPSILON)}, // w = EPSILON 125 {Math::MakeVec(f0, f0, f0, f1), Math::Vec4<float24>(f0, f0, f0, EPSILON)}, // w = EPSILON
115 }}; 126 }};
116 127
117 // TODO: If one vertex lies outside one of the depth clipping planes, some platforms (e.g. Wii)
118 // drop the whole primitive instead of clipping the primitive properly. We should test if
119 // this happens on the 3DS, too.
120
121 // Simple implementation of the Sutherland-Hodgman clipping algorithm. 128 // Simple implementation of the Sutherland-Hodgman clipping algorithm.
122 // TODO: Make this less inefficient (currently lots of useless buffering overhead happens here) 129 // TODO: Make this less inefficient (currently lots of useless buffering overhead happens here)
123 for (auto edge : clipping_edges) { 130 auto Clip = [&](const ClippingEdge& edge) {
124
125 std::swap(input_list, output_list); 131 std::swap(input_list, output_list);
126 output_list->clear(); 132 output_list->clear();
127 133
@@ -140,12 +146,24 @@ void ProcessTriangle(const OutputVertex& v0, const OutputVertex& v1, const Outpu
140 } 146 }
141 reference_vertex = &vertex; 147 reference_vertex = &vertex;
142 } 148 }
149 };
150
151 for (auto edge : clipping_edges) {
152 Clip(edge);
143 153
144 // Need to have at least a full triangle to continue... 154 // Need to have at least a full triangle to continue...
145 if (output_list->size() < 3) 155 if (output_list->size() < 3)
146 return; 156 return;
147 } 157 }
148 158
159 if (g_state.regs.rasterizer.clip_enable) {
160 ClippingEdge custom_edge{g_state.regs.rasterizer.GetClipCoef()};
161 Clip(custom_edge);
162
163 if (output_list->size() < 3)
164 return;
165 }
166
149 InitScreenCoordinates((*output_list)[0]); 167 InitScreenCoordinates((*output_list)[0]);
150 InitScreenCoordinates((*output_list)[1]); 168 InitScreenCoordinates((*output_list)[1]);
151 169
diff --git a/src/video_core/swrasterizer/framebuffer.cpp b/src/video_core/swrasterizer/framebuffer.cpp
index 7de3aac75..f34eab6cf 100644
--- a/src/video_core/swrasterizer/framebuffer.cpp
+++ b/src/video_core/swrasterizer/framebuffer.cpp
@@ -352,6 +352,8 @@ u8 LogicOp(u8 src, u8 dest, FramebufferRegs::LogicOp op) {
352 case FramebufferRegs::LogicOp::OrInverted: 352 case FramebufferRegs::LogicOp::OrInverted:
353 return ~src | dest; 353 return ~src | dest;
354 } 354 }
355
356 UNREACHABLE();
355}; 357};
356 358
357} // namespace Rasterizer 359} // namespace Rasterizer
diff --git a/src/video_core/swrasterizer/lighting.cpp b/src/video_core/swrasterizer/lighting.cpp
new file mode 100644
index 000000000..5fa748611
--- /dev/null
+++ b/src/video_core/swrasterizer/lighting.cpp
@@ -0,0 +1,308 @@
1// Copyright 2017 Citra Emulator Project
2// Licensed under GPLv2 or any later version
3// Refer to the license.txt file included.
4
5#include "common/math_util.h"
6#include "video_core/swrasterizer/lighting.h"
7
8namespace Pica {
9
10static float LookupLightingLut(const Pica::State::Lighting& lighting, size_t lut_index, u8 index,
11 float delta) {
12 ASSERT_MSG(lut_index < lighting.luts.size(), "Out of range lut");
13 ASSERT_MSG(index < lighting.luts[lut_index].size(), "Out of range index");
14
15 const auto& lut = lighting.luts[lut_index][index];
16
17 float lut_value = lut.ToFloat();
18 float lut_diff = lut.DiffToFloat();
19
20 return lut_value + lut_diff * delta;
21}
22
23std::tuple<Math::Vec4<u8>, Math::Vec4<u8>> ComputeFragmentsColors(
24 const Pica::LightingRegs& lighting, const Pica::State::Lighting& lighting_state,
25 const Math::Quaternion<float>& normquat, const Math::Vec3<float>& view,
26 const Math::Vec4<u8> (&texture_color)[4]) {
27
28 Math::Vec3<float> surface_normal;
29 Math::Vec3<float> surface_tangent;
30
31 if (lighting.config0.bump_mode != LightingRegs::LightingBumpMode::None) {
32 Math::Vec3<float> perturbation =
33 texture_color[lighting.config0.bump_selector].xyz().Cast<float>() / 127.5f -
34 Math::MakeVec(1.0f, 1.0f, 1.0f);
35 if (lighting.config0.bump_mode == LightingRegs::LightingBumpMode::NormalMap) {
36 if (!lighting.config0.disable_bump_renorm) {
37 const float z_square = 1 - perturbation.xy().Length2();
38 perturbation.z = std::sqrt(std::max(z_square, 0.0f));
39 }
40 surface_normal = perturbation;
41 surface_tangent = Math::MakeVec(1.0f, 0.0f, 0.0f);
42 } else if (lighting.config0.bump_mode == LightingRegs::LightingBumpMode::TangentMap) {
43 surface_normal = Math::MakeVec(0.0f, 0.0f, 1.0f);
44 surface_tangent = perturbation;
45 } else {
46 LOG_ERROR(HW_GPU, "Unknown bump mode %u", lighting.config0.bump_mode.Value());
47 }
48 } else {
49 surface_normal = Math::MakeVec(0.0f, 0.0f, 1.0f);
50 surface_tangent = Math::MakeVec(1.0f, 0.0f, 0.0f);
51 }
52
53 // Use the normalized the quaternion when performing the rotation
54 auto normal = Math::QuaternionRotate(normquat, surface_normal);
55 auto tangent = Math::QuaternionRotate(normquat, surface_tangent);
56
57 Math::Vec4<float> diffuse_sum = {0.0f, 0.0f, 0.0f, 1.0f};
58 Math::Vec4<float> specular_sum = {0.0f, 0.0f, 0.0f, 1.0f};
59
60 for (unsigned light_index = 0; light_index <= lighting.max_light_index; ++light_index) {
61 unsigned num = lighting.light_enable.GetNum(light_index);
62 const auto& light_config = lighting.light[num];
63
64 Math::Vec3<float> refl_value = {};
65 Math::Vec3<float> position = {float16::FromRaw(light_config.x).ToFloat32(),
66 float16::FromRaw(light_config.y).ToFloat32(),
67 float16::FromRaw(light_config.z).ToFloat32()};
68 Math::Vec3<float> light_vector;
69
70 if (light_config.config.directional)
71 light_vector = position;
72 else
73 light_vector = position + view;
74
75 light_vector.Normalize();
76
77 Math::Vec3<float> norm_view = view.Normalized();
78 Math::Vec3<float> half_vector = norm_view + light_vector;
79
80 float dist_atten = 1.0f;
81 if (!lighting.IsDistAttenDisabled(num)) {
82 auto distance = (-view - position).Length();
83 float scale = Pica::float20::FromRaw(light_config.dist_atten_scale).ToFloat32();
84 float bias = Pica::float20::FromRaw(light_config.dist_atten_bias).ToFloat32();
85 size_t lut =
86 static_cast<size_t>(LightingRegs::LightingSampler::DistanceAttenuation) + num;
87
88 float sample_loc = MathUtil::Clamp(scale * distance + bias, 0.0f, 1.0f);
89
90 u8 lutindex =
91 static_cast<u8>(MathUtil::Clamp(std::floor(sample_loc * 256.0f), 0.0f, 255.0f));
92 float delta = sample_loc * 256 - lutindex;
93 dist_atten = LookupLightingLut(lighting_state, lut, lutindex, delta);
94 }
95
96 auto GetLutValue = [&](LightingRegs::LightingLutInput input, bool abs,
97 LightingRegs::LightingScale scale_enum,
98 LightingRegs::LightingSampler sampler) {
99 float result = 0.0f;
100
101 switch (input) {
102 case LightingRegs::LightingLutInput::NH:
103 result = Math::Dot(normal, half_vector.Normalized());
104 break;
105
106 case LightingRegs::LightingLutInput::VH:
107 result = Math::Dot(norm_view, half_vector.Normalized());
108 break;
109
110 case LightingRegs::LightingLutInput::NV:
111 result = Math::Dot(normal, norm_view);
112 break;
113
114 case LightingRegs::LightingLutInput::LN:
115 result = Math::Dot(light_vector, normal);
116 break;
117
118 case LightingRegs::LightingLutInput::SP: {
119 Math::Vec3<s32> spot_dir{light_config.spot_x.Value(), light_config.spot_y.Value(),
120 light_config.spot_z.Value()};
121 result = Math::Dot(light_vector, spot_dir.Cast<float>() / 2047.0f);
122 break;
123 }
124 case LightingRegs::LightingLutInput::CP:
125 if (lighting.config0.config == LightingRegs::LightingConfig::Config7) {
126 const Math::Vec3<float> norm_half_vector = half_vector.Normalized();
127 const Math::Vec3<float> half_vector_proj =
128 norm_half_vector - normal * Math::Dot(normal, norm_half_vector);
129 result = Math::Dot(half_vector_proj, tangent);
130 } else {
131 result = 0.0f;
132 }
133 break;
134 default:
135 LOG_CRITICAL(HW_GPU, "Unknown lighting LUT input %u\n", static_cast<u32>(input));
136 UNIMPLEMENTED();
137 result = 0.0f;
138 }
139
140 u8 index;
141 float delta;
142
143 if (abs) {
144 if (light_config.config.two_sided_diffuse)
145 result = std::abs(result);
146 else
147 result = std::max(result, 0.0f);
148
149 float flr = std::floor(result * 256.0f);
150 index = static_cast<u8>(MathUtil::Clamp(flr, 0.0f, 255.0f));
151 delta = result * 256 - index;
152 } else {
153 float flr = std::floor(result * 128.0f);
154 s8 signed_index = static_cast<s8>(MathUtil::Clamp(flr, -128.0f, 127.0f));
155 delta = result * 128.0f - signed_index;
156 index = static_cast<u8>(signed_index);
157 }
158
159 float scale = lighting.lut_scale.GetScale(scale_enum);
160 return scale *
161 LookupLightingLut(lighting_state, static_cast<size_t>(sampler), index, delta);
162 };
163
164 // If enabled, compute spot light attenuation value
165 float spot_atten = 1.0f;
166 if (!lighting.IsSpotAttenDisabled(num) &&
167 LightingRegs::IsLightingSamplerSupported(
168 lighting.config0.config, LightingRegs::LightingSampler::SpotlightAttenuation)) {
169 auto lut = LightingRegs::SpotlightAttenuationSampler(num);
170 spot_atten = GetLutValue(lighting.lut_input.sp, lighting.abs_lut_input.disable_sp == 0,
171 lighting.lut_scale.sp, lut);
172 }
173
174 // Specular 0 component
175 float d0_lut_value = 1.0f;
176 if (lighting.config1.disable_lut_d0 == 0 &&
177 LightingRegs::IsLightingSamplerSupported(
178 lighting.config0.config, LightingRegs::LightingSampler::Distribution0)) {
179 d0_lut_value =
180 GetLutValue(lighting.lut_input.d0, lighting.abs_lut_input.disable_d0 == 0,
181 lighting.lut_scale.d0, LightingRegs::LightingSampler::Distribution0);
182 }
183
184 Math::Vec3<float> specular_0 = d0_lut_value * light_config.specular_0.ToVec3f();
185
186 // If enabled, lookup ReflectRed value, otherwise, 1.0 is used
187 if (lighting.config1.disable_lut_rr == 0 &&
188 LightingRegs::IsLightingSamplerSupported(lighting.config0.config,
189 LightingRegs::LightingSampler::ReflectRed)) {
190 refl_value.x =
191 GetLutValue(lighting.lut_input.rr, lighting.abs_lut_input.disable_rr == 0,
192 lighting.lut_scale.rr, LightingRegs::LightingSampler::ReflectRed);
193 } else {
194 refl_value.x = 1.0f;
195 }
196
197 // If enabled, lookup ReflectGreen value, otherwise, ReflectRed value is used
198 if (lighting.config1.disable_lut_rg == 0 &&
199 LightingRegs::IsLightingSamplerSupported(lighting.config0.config,
200 LightingRegs::LightingSampler::ReflectGreen)) {
201 refl_value.y =
202 GetLutValue(lighting.lut_input.rg, lighting.abs_lut_input.disable_rg == 0,
203 lighting.lut_scale.rg, LightingRegs::LightingSampler::ReflectGreen);
204 } else {
205 refl_value.y = refl_value.x;
206 }
207
208 // If enabled, lookup ReflectBlue value, otherwise, ReflectRed value is used
209 if (lighting.config1.disable_lut_rb == 0 &&
210 LightingRegs::IsLightingSamplerSupported(lighting.config0.config,
211 LightingRegs::LightingSampler::ReflectBlue)) {
212 refl_value.z =
213 GetLutValue(lighting.lut_input.rb, lighting.abs_lut_input.disable_rb == 0,
214 lighting.lut_scale.rb, LightingRegs::LightingSampler::ReflectBlue);
215 } else {
216 refl_value.z = refl_value.x;
217 }
218
219 // Specular 1 component
220 float d1_lut_value = 1.0f;
221 if (lighting.config1.disable_lut_d1 == 0 &&
222 LightingRegs::IsLightingSamplerSupported(
223 lighting.config0.config, LightingRegs::LightingSampler::Distribution1)) {
224 d1_lut_value =
225 GetLutValue(lighting.lut_input.d1, lighting.abs_lut_input.disable_d1 == 0,
226 lighting.lut_scale.d1, LightingRegs::LightingSampler::Distribution1);
227 }
228
229 Math::Vec3<float> specular_1 =
230 d1_lut_value * refl_value * light_config.specular_1.ToVec3f();
231
232 // Fresnel
233 // Note: only the last entry in the light slots applies the Fresnel factor
234 if (light_index == lighting.max_light_index && lighting.config1.disable_lut_fr == 0 &&
235 LightingRegs::IsLightingSamplerSupported(lighting.config0.config,
236 LightingRegs::LightingSampler::Fresnel)) {
237
238 float lut_value =
239 GetLutValue(lighting.lut_input.fr, lighting.abs_lut_input.disable_fr == 0,
240 lighting.lut_scale.fr, LightingRegs::LightingSampler::Fresnel);
241
242 // Enabled for diffuse lighting alpha component
243 if (lighting.config0.fresnel_selector ==
244 LightingRegs::LightingFresnelSelector::PrimaryAlpha ||
245 lighting.config0.fresnel_selector == LightingRegs::LightingFresnelSelector::Both) {
246 diffuse_sum.a() = lut_value;
247 }
248
249 // Enabled for the specular lighting alpha component
250 if (lighting.config0.fresnel_selector ==
251 LightingRegs::LightingFresnelSelector::SecondaryAlpha ||
252 lighting.config0.fresnel_selector == LightingRegs::LightingFresnelSelector::Both) {
253 specular_sum.a() = lut_value;
254 }
255 }
256
257 auto dot_product = Math::Dot(light_vector, normal);
258
259 // Calculate clamp highlights before applying the two-sided diffuse configuration to the dot
260 // product.
261 float clamp_highlights = 1.0f;
262 if (lighting.config0.clamp_highlights) {
263 if (dot_product <= 0.0f)
264 clamp_highlights = 0.0f;
265 else
266 clamp_highlights = 1.0f;
267 }
268
269 if (light_config.config.two_sided_diffuse)
270 dot_product = std::abs(dot_product);
271 else
272 dot_product = std::max(dot_product, 0.0f);
273
274 if (light_config.config.geometric_factor_0 || light_config.config.geometric_factor_1) {
275 float geo_factor = half_vector.Length2();
276 geo_factor = geo_factor == 0.0f ? 0.0f : std::min(dot_product / geo_factor, 1.0f);
277 if (light_config.config.geometric_factor_0) {
278 specular_0 *= geo_factor;
279 }
280 if (light_config.config.geometric_factor_1) {
281 specular_1 *= geo_factor;
282 }
283 }
284
285 auto diffuse =
286 light_config.diffuse.ToVec3f() * dot_product + light_config.ambient.ToVec3f();
287 diffuse_sum += Math::MakeVec(diffuse * dist_atten * spot_atten, 0.0f);
288
289 specular_sum += Math::MakeVec(
290 (specular_0 + specular_1) * clamp_highlights * dist_atten * spot_atten, 0.0f);
291 }
292
293 diffuse_sum += Math::MakeVec(lighting.global_ambient.ToVec3f(), 0.0f);
294
295 auto diffuse = Math::MakeVec<float>(MathUtil::Clamp(diffuse_sum.x, 0.0f, 1.0f) * 255,
296 MathUtil::Clamp(diffuse_sum.y, 0.0f, 1.0f) * 255,
297 MathUtil::Clamp(diffuse_sum.z, 0.0f, 1.0f) * 255,
298 MathUtil::Clamp(diffuse_sum.w, 0.0f, 1.0f) * 255)
299 .Cast<u8>();
300 auto specular = Math::MakeVec<float>(MathUtil::Clamp(specular_sum.x, 0.0f, 1.0f) * 255,
301 MathUtil::Clamp(specular_sum.y, 0.0f, 1.0f) * 255,
302 MathUtil::Clamp(specular_sum.z, 0.0f, 1.0f) * 255,
303 MathUtil::Clamp(specular_sum.w, 0.0f, 1.0f) * 255)
304 .Cast<u8>();
305 return std::make_tuple(diffuse, specular);
306}
307
308} // namespace Pica
diff --git a/src/video_core/swrasterizer/lighting.h b/src/video_core/swrasterizer/lighting.h
new file mode 100644
index 000000000..d807a3d94
--- /dev/null
+++ b/src/video_core/swrasterizer/lighting.h
@@ -0,0 +1,19 @@
1// Copyright 2017 Citra Emulator Project
2// Licensed under GPLv2 or any later version
3// Refer to the license.txt file included.
4
5#pragma once
6
7#include <tuple>
8#include "common/quaternion.h"
9#include "common/vector_math.h"
10#include "video_core/pica_state.h"
11
12namespace Pica {
13
14std::tuple<Math::Vec4<u8>, Math::Vec4<u8>> ComputeFragmentsColors(
15 const Pica::LightingRegs& lighting, const Pica::State::Lighting& lighting_state,
16 const Math::Quaternion<float>& normquat, const Math::Vec3<float>& view,
17 const Math::Vec4<u8> (&texture_color)[4]);
18
19} // namespace Pica
diff --git a/src/video_core/swrasterizer/rasterizer.cpp b/src/video_core/swrasterizer/rasterizer.cpp
index 512e81c08..862135614 100644
--- a/src/video_core/swrasterizer/rasterizer.cpp
+++ b/src/video_core/swrasterizer/rasterizer.cpp
@@ -13,6 +13,7 @@
13#include "common/logging/log.h" 13#include "common/logging/log.h"
14#include "common/math_util.h" 14#include "common/math_util.h"
15#include "common/microprofile.h" 15#include "common/microprofile.h"
16#include "common/quaternion.h"
16#include "common/vector_math.h" 17#include "common/vector_math.h"
17#include "core/hw/gpu.h" 18#include "core/hw/gpu.h"
18#include "core/memory.h" 19#include "core/memory.h"
@@ -24,6 +25,7 @@
24#include "video_core/regs_texturing.h" 25#include "video_core/regs_texturing.h"
25#include "video_core/shader/shader.h" 26#include "video_core/shader/shader.h"
26#include "video_core/swrasterizer/framebuffer.h" 27#include "video_core/swrasterizer/framebuffer.h"
28#include "video_core/swrasterizer/lighting.h"
27#include "video_core/swrasterizer/proctex.h" 29#include "video_core/swrasterizer/proctex.h"
28#include "video_core/swrasterizer/rasterizer.h" 30#include "video_core/swrasterizer/rasterizer.h"
29#include "video_core/swrasterizer/texturing.h" 31#include "video_core/swrasterizer/texturing.h"
@@ -419,6 +421,26 @@ static void ProcessTriangleInternal(const Vertex& v0, const Vertex& v1, const Ve
419 regs.texturing.tev_combiner_buffer_color.a, 421 regs.texturing.tev_combiner_buffer_color.a,
420 }; 422 };
421 423
424 Math::Vec4<u8> primary_fragment_color = {0, 0, 0, 0};
425 Math::Vec4<u8> secondary_fragment_color = {0, 0, 0, 0};
426
427 if (!g_state.regs.lighting.disable) {
428 Math::Quaternion<float> normquat = Math::Quaternion<float>{
429 {GetInterpolatedAttribute(v0.quat.x, v1.quat.x, v2.quat.x).ToFloat32(),
430 GetInterpolatedAttribute(v0.quat.y, v1.quat.y, v2.quat.y).ToFloat32(),
431 GetInterpolatedAttribute(v0.quat.z, v1.quat.z, v2.quat.z).ToFloat32()},
432 GetInterpolatedAttribute(v0.quat.w, v1.quat.w, v2.quat.w).ToFloat32(),
433 }.Normalized();
434
435 Math::Vec3<float> view{
436 GetInterpolatedAttribute(v0.view.x, v1.view.x, v2.view.x).ToFloat32(),
437 GetInterpolatedAttribute(v0.view.y, v1.view.y, v2.view.y).ToFloat32(),
438 GetInterpolatedAttribute(v0.view.z, v1.view.z, v2.view.z).ToFloat32(),
439 };
440 std::tie(primary_fragment_color, secondary_fragment_color) = ComputeFragmentsColors(
441 g_state.regs.lighting, g_state.lighting, normquat, view, texture_color);
442 }
443
422 for (unsigned tev_stage_index = 0; tev_stage_index < tev_stages.size(); 444 for (unsigned tev_stage_index = 0; tev_stage_index < tev_stages.size();
423 ++tev_stage_index) { 445 ++tev_stage_index) {
424 const auto& tev_stage = tev_stages[tev_stage_index]; 446 const auto& tev_stage = tev_stages[tev_stage_index];
@@ -427,14 +449,13 @@ static void ProcessTriangleInternal(const Vertex& v0, const Vertex& v1, const Ve
427 auto GetSource = [&](Source source) -> Math::Vec4<u8> { 449 auto GetSource = [&](Source source) -> Math::Vec4<u8> {
428 switch (source) { 450 switch (source) {
429 case Source::PrimaryColor: 451 case Source::PrimaryColor:
452 return primary_color;
430 453
431 // HACK: Until we implement fragment lighting, use primary_color
432 case Source::PrimaryFragmentColor: 454 case Source::PrimaryFragmentColor:
433 return primary_color; 455 return primary_fragment_color;
434 456
435 // HACK: Until we implement fragment lighting, use zero
436 case Source::SecondaryFragmentColor: 457 case Source::SecondaryFragmentColor:
437 return {0, 0, 0, 0}; 458 return secondary_fragment_color;
438 459
439 case Source::Texture0: 460 case Source::Texture0:
440 return texture_color[0]; 461 return texture_color[0];
diff --git a/src/video_core/swrasterizer/rasterizer.h b/src/video_core/swrasterizer/rasterizer.h
index 2f0877581..66cd6cfd4 100644
--- a/src/video_core/swrasterizer/rasterizer.h
+++ b/src/video_core/swrasterizer/rasterizer.h
@@ -19,10 +19,9 @@ struct Vertex : Shader::OutputVertex {
19 19
20 // Linear interpolation 20 // Linear interpolation
21 // factor: 0=this, 1=vtx 21 // factor: 0=this, 1=vtx
22 // Note: This function cannot be called after perspective divide
22 void Lerp(float24 factor, const Vertex& vtx) { 23 void Lerp(float24 factor, const Vertex& vtx) {
23 pos = pos * factor + vtx.pos * (float24::FromFloat32(1) - factor); 24 pos = pos * factor + vtx.pos * (float24::FromFloat32(1) - factor);
24
25 // TODO: Should perform perspective correct interpolation here...
26 quat = quat * factor + vtx.quat * (float24::FromFloat32(1) - factor); 25 quat = quat * factor + vtx.quat * (float24::FromFloat32(1) - factor);
27 color = color * factor + vtx.color * (float24::FromFloat32(1) - factor); 26 color = color * factor + vtx.color * (float24::FromFloat32(1) - factor);
28 tc0 = tc0 * factor + vtx.tc0 * (float24::FromFloat32(1) - factor); 27 tc0 = tc0 * factor + vtx.tc0 * (float24::FromFloat32(1) - factor);
@@ -30,12 +29,11 @@ struct Vertex : Shader::OutputVertex {
30 tc0_w = tc0_w * factor + vtx.tc0_w * (float24::FromFloat32(1) - factor); 29 tc0_w = tc0_w * factor + vtx.tc0_w * (float24::FromFloat32(1) - factor);
31 view = view * factor + vtx.view * (float24::FromFloat32(1) - factor); 30 view = view * factor + vtx.view * (float24::FromFloat32(1) - factor);
32 tc2 = tc2 * factor + vtx.tc2 * (float24::FromFloat32(1) - factor); 31 tc2 = tc2 * factor + vtx.tc2 * (float24::FromFloat32(1) - factor);
33
34 screenpos = screenpos * factor + vtx.screenpos * (float24::FromFloat32(1) - factor);
35 } 32 }
36 33
37 // Linear interpolation 34 // Linear interpolation
38 // factor: 0=v0, 1=v1 35 // factor: 0=v0, 1=v1
36 // Note: This function cannot be called after perspective divide
39 static Vertex Lerp(float24 factor, const Vertex& v0, const Vertex& v1) { 37 static Vertex Lerp(float24 factor, const Vertex& v0, const Vertex& v1) {
40 Vertex ret = v0; 38 Vertex ret = v0;
41 ret.Lerp(factor, v1); 39 ret.Lerp(factor, v1);
diff --git a/src/video_core/swrasterizer/texturing.cpp b/src/video_core/swrasterizer/texturing.cpp
index 4f02b93f2..79b1ce841 100644
--- a/src/video_core/swrasterizer/texturing.cpp
+++ b/src/video_core/swrasterizer/texturing.cpp
@@ -89,6 +89,8 @@ Math::Vec3<u8> GetColorModifier(TevStageConfig::ColorModifier factor,
89 case ColorModifier::OneMinusSourceBlue: 89 case ColorModifier::OneMinusSourceBlue:
90 return (Math::Vec3<u8>(255, 255, 255) - values.bbb()).Cast<u8>(); 90 return (Math::Vec3<u8>(255, 255, 255) - values.bbb()).Cast<u8>();
91 } 91 }
92
93 UNREACHABLE();
92}; 94};
93 95
94u8 GetAlphaModifier(TevStageConfig::AlphaModifier factor, const Math::Vec4<u8>& values) { 96u8 GetAlphaModifier(TevStageConfig::AlphaModifier factor, const Math::Vec4<u8>& values) {
@@ -119,6 +121,8 @@ u8 GetAlphaModifier(TevStageConfig::AlphaModifier factor, const Math::Vec4<u8>&
119 case AlphaModifier::OneMinusSourceBlue: 121 case AlphaModifier::OneMinusSourceBlue:
120 return 255 - values.b(); 122 return 255 - values.b();
121 } 123 }
124
125 UNREACHABLE();
122}; 126};
123 127
124Math::Vec3<u8> ColorCombine(TevStageConfig::Operation op, const Math::Vec3<u8> input[3]) { 128Math::Vec3<u8> ColorCombine(TevStageConfig::Operation op, const Math::Vec3<u8> input[3]) {
diff --git a/src/video_core/utils.h b/src/video_core/utils.h
index 7ce83a055..d8567f314 100644
--- a/src/video_core/utils.h
+++ b/src/video_core/utils.h
@@ -8,17 +8,11 @@
8 8
9namespace VideoCore { 9namespace VideoCore {
10 10
11/** 11// 8x8 Z-Order coordinate from 2D coordinates
12 * Interleave the lower 3 bits of each coordinate to get the intra-block offsets, which are
13 * arranged in a Z-order curve. More details on the bit manipulation at:
14 * https://fgiesen.wordpress.com/2009/12/13/decoding-morton-codes/
15 */
16static inline u32 MortonInterleave(u32 x, u32 y) { 12static inline u32 MortonInterleave(u32 x, u32 y) {
17 u32 i = (x & 7) | ((y & 7) << 8); // ---- -210 13 static const u32 xlut[] = {0x00, 0x01, 0x04, 0x05, 0x10, 0x11, 0x14, 0x15};
18 i = (i ^ (i << 2)) & 0x1313; // ---2 --10 14 static const u32 ylut[] = {0x00, 0x02, 0x08, 0x0a, 0x20, 0x22, 0x28, 0x2a};
19 i = (i ^ (i << 1)) & 0x1515; // ---2 -1-0 15 return xlut[x % 8] + ylut[y % 8];
20 i = (i | (i >> 7)) & 0x3F;
21 return i;
22} 16}
23 17
24/** 18/**
diff --git a/src/web_service/CMakeLists.txt b/src/web_service/CMakeLists.txt
index 334d82a8a..c93811892 100644
--- a/src/web_service/CMakeLists.txt
+++ b/src/web_service/CMakeLists.txt
@@ -1,10 +1,12 @@
1set(SRCS 1set(SRCS
2 telemetry_json.cpp 2 telemetry_json.cpp
3 verify_login.cpp
3 web_backend.cpp 4 web_backend.cpp
4 ) 5 )
5 6
6set(HEADERS 7set(HEADERS
7 telemetry_json.h 8 telemetry_json.h
9 verify_login.h
8 web_backend.h 10 web_backend.h
9 ) 11 )
10 12
diff --git a/src/web_service/telemetry_json.cpp b/src/web_service/telemetry_json.cpp
index a2d007e77..6ad2ffcd4 100644
--- a/src/web_service/telemetry_json.cpp
+++ b/src/web_service/telemetry_json.cpp
@@ -3,7 +3,6 @@
3// Refer to the license.txt file included. 3// Refer to the license.txt file included.
4 4
5#include "common/assert.h" 5#include "common/assert.h"
6#include "core/settings.h"
7#include "web_service/telemetry_json.h" 6#include "web_service/telemetry_json.h"
8#include "web_service/web_backend.h" 7#include "web_service/web_backend.h"
9 8
@@ -81,7 +80,7 @@ void TelemetryJson::Complete() {
81 SerializeSection(Telemetry::FieldType::UserFeedback, "UserFeedback"); 80 SerializeSection(Telemetry::FieldType::UserFeedback, "UserFeedback");
82 SerializeSection(Telemetry::FieldType::UserConfig, "UserConfig"); 81 SerializeSection(Telemetry::FieldType::UserConfig, "UserConfig");
83 SerializeSection(Telemetry::FieldType::UserSystem, "UserSystem"); 82 SerializeSection(Telemetry::FieldType::UserSystem, "UserSystem");
84 PostJson(Settings::values.telemetry_endpoint_url, TopSection().dump()); 83 PostJson(endpoint_url, TopSection().dump(), true, username, token);
85} 84}
86 85
87} // namespace WebService 86} // namespace WebService
diff --git a/src/web_service/telemetry_json.h b/src/web_service/telemetry_json.h
index 39038b4f9..9e78c6803 100644
--- a/src/web_service/telemetry_json.h
+++ b/src/web_service/telemetry_json.h
@@ -17,7 +17,9 @@ namespace WebService {
17 */ 17 */
18class TelemetryJson : public Telemetry::VisitorInterface { 18class TelemetryJson : public Telemetry::VisitorInterface {
19public: 19public:
20 TelemetryJson() = default; 20 TelemetryJson(const std::string& endpoint_url, const std::string& username,
21 const std::string& token)
22 : endpoint_url(endpoint_url), username(username), token(token) {}
21 ~TelemetryJson() = default; 23 ~TelemetryJson() = default;
22 24
23 void Visit(const Telemetry::Field<bool>& field) override; 25 void Visit(const Telemetry::Field<bool>& field) override;
@@ -49,6 +51,9 @@ private:
49 51
50 nlohmann::json output; 52 nlohmann::json output;
51 std::array<nlohmann::json, 7> sections; 53 std::array<nlohmann::json, 7> sections;
54 std::string endpoint_url;
55 std::string username;
56 std::string token;
52}; 57};
53 58
54} // namespace WebService 59} // namespace WebService
diff --git a/src/web_service/verify_login.cpp b/src/web_service/verify_login.cpp
new file mode 100644
index 000000000..1bc3b5afe
--- /dev/null
+++ b/src/web_service/verify_login.cpp
@@ -0,0 +1,28 @@
1// Copyright 2017 Citra Emulator Project
2// Licensed under GPLv2 or any later version
3// Refer to the license.txt file included.
4
5#include <json.hpp>
6#include "web_service/verify_login.h"
7#include "web_service/web_backend.h"
8
9namespace WebService {
10
11std::future<bool> VerifyLogin(std::string& username, std::string& token,
12 const std::string& endpoint_url, std::function<void()> func) {
13 auto get_func = [func, username](const std::string& reply) -> bool {
14 func();
15 if (reply.empty())
16 return false;
17 nlohmann::json json = nlohmann::json::parse(reply);
18 std::string result;
19 try {
20 result = json["username"];
21 } catch (const nlohmann::detail::out_of_range&) {
22 }
23 return result == username;
24 };
25 return GetJson<bool>(get_func, endpoint_url, false, username, token);
26}
27
28} // namespace WebService
diff --git a/src/web_service/verify_login.h b/src/web_service/verify_login.h
new file mode 100644
index 000000000..303f5dbbc
--- /dev/null
+++ b/src/web_service/verify_login.h
@@ -0,0 +1,24 @@
1// Copyright 2017 Citra Emulator Project
2// Licensed under GPLv2 or any later version
3// Refer to the license.txt file included.
4
5#pragma once
6
7#include <functional>
8#include <future>
9#include <string>
10
11namespace WebService {
12
13/**
14 * Checks if username and token is valid
15 * @param username Citra username to use for authentication.
16 * @param token Citra token to use for authentication.
17 * @param endpoint_url URL of the services.citra-emu.org endpoint.
18 * @param func A function that gets exectued when the verification is finished
19 * @returns Future with bool indicating whether the verification succeeded
20 */
21std::future<bool> VerifyLogin(std::string& username, std::string& token,
22 const std::string& endpoint_url, std::function<void()> func);
23
24} // namespace WebService
diff --git a/src/web_service/web_backend.cpp b/src/web_service/web_backend.cpp
index 13e4555ac..b17d82f9c 100644
--- a/src/web_service/web_backend.cpp
+++ b/src/web_service/web_backend.cpp
@@ -2,51 +2,139 @@
2// Licensed under GPLv2 or any later version 2// Licensed under GPLv2 or any later version
3// Refer to the license.txt file included. 3// Refer to the license.txt file included.
4 4
5#ifdef _WIN32
6#include <winsock.h>
7#endif
8
9#include <cstdlib>
10#include <thread>
5#include <cpr/cpr.h> 11#include <cpr/cpr.h>
6#include <stdlib.h>
7#include "common/logging/log.h" 12#include "common/logging/log.h"
8#include "web_service/web_backend.h" 13#include "web_service/web_backend.h"
9 14
10namespace WebService { 15namespace WebService {
11 16
12static constexpr char API_VERSION[]{"1"}; 17static constexpr char API_VERSION[]{"1"};
13static constexpr char ENV_VAR_USERNAME[]{"CITRA_WEB_SERVICES_USERNAME"};
14static constexpr char ENV_VAR_TOKEN[]{"CITRA_WEB_SERVICES_TOKEN"};
15 18
16static std::string GetEnvironmentVariable(const char* name) { 19static std::unique_ptr<cpr::Session> g_session;
17 const char* value{getenv(name)}; 20
18 if (value) { 21void Win32WSAStartup() {
19 return value; 22#ifdef _WIN32
23 // On Windows, CPR/libcurl does not properly initialize Winsock. The below code is used to
24 // initialize Winsock globally, which fixes this problem. Without this, only the first CPR
25 // session will properly be created, and subsequent ones will fail.
26 WSADATA wsa_data;
27 const int wsa_result{WSAStartup(MAKEWORD(2, 2), &wsa_data)};
28 if (wsa_result) {
29 LOG_CRITICAL(WebService, "WSAStartup failed: %d", wsa_result);
20 } 30 }
21 return {}; 31#endif
22} 32}
23 33
24const std::string& GetUsername() { 34void PostJson(const std::string& url, const std::string& data, bool allow_anonymous,
25 static const std::string username{GetEnvironmentVariable(ENV_VAR_USERNAME)}; 35 const std::string& username, const std::string& token) {
26 return username; 36 if (url.empty()) {
27} 37 LOG_ERROR(WebService, "URL is invalid");
38 return;
39 }
40
41 const bool are_credentials_provided{!token.empty() && !username.empty()};
42 if (!allow_anonymous && !are_credentials_provided) {
43 LOG_ERROR(WebService, "Credentials must be provided for authenticated requests");
44 return;
45 }
28 46
29const std::string& GetToken() { 47 Win32WSAStartup();
30 static const std::string token{GetEnvironmentVariable(ENV_VAR_TOKEN)}; 48
31 return token; 49 // Built request header
50 cpr::Header header;
51 if (are_credentials_provided) {
52 // Authenticated request if credentials are provided
53 header = {{"Content-Type", "application/json"},
54 {"x-username", username.c_str()},
55 {"x-token", token.c_str()},
56 {"api-version", API_VERSION}};
57 } else {
58 // Otherwise, anonymous request
59 header = cpr::Header{{"Content-Type", "application/json"}, {"api-version", API_VERSION}};
60 }
61
62 // Post JSON asynchronously
63 static std::future<void> future;
64 future = cpr::PostCallback(
65 [](cpr::Response r) {
66 if (r.error) {
67 LOG_ERROR(WebService, "POST returned cpr error: %u:%s",
68 static_cast<u32>(r.error.code), r.error.message.c_str());
69 return;
70 }
71 if (r.status_code >= 400) {
72 LOG_ERROR(WebService, "POST returned error status code: %u", r.status_code);
73 return;
74 }
75 if (r.header["content-type"].find("application/json") == std::string::npos) {
76 LOG_ERROR(WebService, "POST returned wrong content: %s",
77 r.header["content-type"].c_str());
78 return;
79 }
80 },
81 cpr::Url{url}, cpr::Body{data}, header);
32} 82}
33 83
34void PostJson(const std::string& url, const std::string& data) { 84template <typename T>
85std::future<T> GetJson(std::function<T(const std::string&)> func, const std::string& url,
86 bool allow_anonymous, const std::string& username,
87 const std::string& token) {
35 if (url.empty()) { 88 if (url.empty()) {
36 LOG_ERROR(WebService, "URL is invalid"); 89 LOG_ERROR(WebService, "URL is invalid");
37 return; 90 return std::async(std::launch::async, [func{std::move(func)}]() { return func(""); });
38 } 91 }
39 92
40 if (GetUsername().empty() || GetToken().empty()) { 93 const bool are_credentials_provided{!token.empty() && !username.empty()};
41 LOG_ERROR(WebService, "Environment variables %s and %s must be set to POST JSON", 94 if (!allow_anonymous && !are_credentials_provided) {
42 ENV_VAR_USERNAME, ENV_VAR_TOKEN); 95 LOG_ERROR(WebService, "Credentials must be provided for authenticated requests");
43 return; 96 return std::async(std::launch::async, [func{std::move(func)}]() { return func(""); });
44 } 97 }
45 98
46 cpr::PostAsync(cpr::Url{url}, cpr::Body{data}, cpr::Header{{"Content-Type", "application/json"}, 99 Win32WSAStartup();
47 {"x-username", GetUsername()}, 100
48 {"x-token", GetToken()}, 101 // Built request header
49 {"api-version", API_VERSION}}); 102 cpr::Header header;
103 if (are_credentials_provided) {
104 // Authenticated request if credentials are provided
105 header = {{"Content-Type", "application/json"},
106 {"x-username", username.c_str()},
107 {"x-token", token.c_str()},
108 {"api-version", API_VERSION}};
109 } else {
110 // Otherwise, anonymous request
111 header = cpr::Header{{"Content-Type", "application/json"}, {"api-version", API_VERSION}};
112 }
113
114 // Get JSON asynchronously
115 return cpr::GetCallback(
116 [func{std::move(func)}](cpr::Response r) {
117 if (r.error) {
118 LOG_ERROR(WebService, "GET returned cpr error: %u:%s",
119 static_cast<u32>(r.error.code), r.error.message.c_str());
120 return func("");
121 }
122 if (r.status_code >= 400) {
123 LOG_ERROR(WebService, "GET returned error code: %u", r.status_code);
124 return func("");
125 }
126 if (r.header["content-type"].find("application/json") == std::string::npos) {
127 LOG_ERROR(WebService, "GET returned wrong content: %s",
128 r.header["content-type"].c_str());
129 return func("");
130 }
131 return func(r.text);
132 },
133 cpr::Url{url}, header);
50} 134}
51 135
136template std::future<bool> GetJson(std::function<bool(const std::string&)> func,
137 const std::string& url, bool allow_anonymous,
138 const std::string& username, const std::string& token);
139
52} // namespace WebService 140} // namespace WebService
diff --git a/src/web_service/web_backend.h b/src/web_service/web_backend.h
index 2753d3b68..a63c75d13 100644
--- a/src/web_service/web_backend.h
+++ b/src/web_service/web_backend.h
@@ -4,28 +4,36 @@
4 4
5#pragma once 5#pragma once
6 6
7#include <functional>
8#include <future>
7#include <string> 9#include <string>
8#include "common/common_types.h" 10#include "common/common_types.h"
9 11
10namespace WebService { 12namespace WebService {
11 13
12/** 14/**
13 * Gets the current username for accessing services.citra-emu.org. 15 * Posts JSON to services.citra-emu.org.
14 * @returns Username as a string, empty if not set. 16 * @param url URL of the services.citra-emu.org endpoint to post data to.
15 */ 17 * @param data String of JSON data to use for the body of the POST request.
16const std::string& GetUsername(); 18 * @param allow_anonymous If true, allow anonymous unauthenticated requests.
17 19 * @param username Citra username to use for authentication.
18/** 20 * @param token Citra token to use for authentication.
19 * Gets the current token for accessing services.citra-emu.org.
20 * @returns Token as a string, empty if not set.
21 */ 21 */
22const std::string& GetToken(); 22void PostJson(const std::string& url, const std::string& data, bool allow_anonymous,
23 const std::string& username = {}, const std::string& token = {});
23 24
24/** 25/**
25 * Posts JSON to services.citra-emu.org. 26 * Gets JSON from services.citra-emu.org.
27 * @param func A function that gets exectued when the json as a string is received
26 * @param url URL of the services.citra-emu.org endpoint to post data to. 28 * @param url URL of the services.citra-emu.org endpoint to post data to.
27 * @param data String of JSON data to use for the body of the POST request. 29 * @param allow_anonymous If true, allow anonymous unauthenticated requests.
30 * @param username Citra username to use for authentication.
31 * @param token Citra token to use for authentication.
32 * @return future that holds the return value T of the func
28 */ 33 */
29void PostJson(const std::string& url, const std::string& data); 34template <typename T>
35std::future<T> GetJson(std::function<T(const std::string&)> func, const std::string& url,
36 bool allow_anonymous, const std::string& username = {},
37 const std::string& token = {});
30 38
31} // namespace WebService 39} // namespace WebService