Merge lp:~oif-team/grail/trunk.glue into lp:grail

Proposed by Henrik Rydberg
Status: Rejected
Rejected by: Daniel d'Andrada
Proposed branch: lp:~oif-team/grail/trunk.glue
Merge into: lp:grail
Diff against target: 47689 lines (+45855/-1254)
35 files modified
include/grail-bits.h (+2/-0)
include/grail.h (+22/-25)
include/grail.h.orig (+273/-51)
src/Makefile.am (+0/-7)
src/gestures-drag.c (+0/-135)
src/gestures-pinch.c (+0/-129)
src/gestures-rotate.c (+0/-128)
src/gestures-tapping.c (+0/-100)
src/gestures-touch.c (+0/-98)
src/grail-api.c (+7/-180)
src/grail-bits.c (+10/-0)
src/grail-frame.c (+97/-3)
src/grail-gestures.c (+0/-210)
src/grail-gestures.h (+0/-115)
src/grail-impl.h (+30/-0)
src/grail-init.c (+16/-3)
src/grail-inserter.c (+0/-33)
src/grail-inserter.h (+31/-2)
src/grail-legacy.c (+105/-0)
src/grail-recognizer.c (+344/-15)
src/grail-recognizer.h (+89/-5)
test/Makefile.am (+1/-0)
test/check-gestures.c (+204/-0)
test/check-grail.c (+2/-0)
test/io/functional/drag-1.evemu (+3988/-0)
test/io/functional/drag-2.evemu (+3849/-0)
test/io/functional/drag-3.evemu (+16278/-0)
test/io/functional/drag-4.evemu (+8032/-0)
test/io/functional/hold-1.evemu (+1375/-0)
test/io/functional/pinch-2.evemu (+2457/-0)
test/io/functional/pinch-3.evemu (+4971/-0)
test/io/functional/rotate-2.evemu (+3073/-0)
test/io/functional/tap-1.evemu (+94/-0)
test/io/functional/tap-4.evemu (+388/-0)
tools/grail-gesture.c (+117/-15)
To merge this branch: bzr merge lp:~oif-team/grail/trunk.glue
Reviewer Review Type Date Requested Status
Open Input Framework Team Pending
Review via email: mp+60062@code.launchpad.net

This proposal supersedes a proposal from 2011-05-02.

Description of the change

This branch is a rebase of grail2.next, with one important change; it uses EXPECT_DRAG to trigger drag events, but it uses CENTER to report drag events. This presents a simple and accurate solution to the drag problem, where

1. All applications can rely on the drag events not to be lost.

2. All applications treat rotation around a finger as rotation, even if not listened for.

3. Apps not using rotation behaves the same as before, but pure rotation gestures will rightfully not be detected as drag.

4. Apps wanting more accurate/detailed drag/rotation behavior should use gesture frames directly instead.

This branch has been tested with unity on an XT2, which good feel. It seems the solution does not have to be more complicated than this.

To post a comment you must log in.
Revision history for this message
Henrik Rydberg (rydberg) wrote : Posted in a previous version of this proposal

Two more patches, further enhancing the unity gesture experience. The first one fixes a problem with the rewritten recognizer, and the second finally gives very clear and distinct recognition of all of drag, pinch and rotate.

Tested in unity and eog. Rotating the picture is effortless, with no side effects. Pinching to zoom is effortless (although eog seems to have some problems there). Dragging with one or two fingers (touchscreen) works just fine, no side effects.

IMHO, this is the best linux gesture experience I have had so far.

Enjoy,
Henrik

Revision history for this message
Henrik Rydberg (rydberg) wrote : Posted in a previous version of this proposal

Upon request, added some more explanation of the structs used in gru and gin.

Also, this merge is against trunk, but 2.x would be fine too, as discussed (they are equal atm).

Revision history for this message
Henrik Rydberg (rydberg) wrote :

The branch has been updated with a more logical patch sequence, some bug fixes, and more importantly, with a gesture test suite, framing the critical modifications to the recognizer. The tests are real-time gesture recognition checks, are run using make check, and take about a minute to perform (with serial execution). At the introduction of the suite, several tests fail intentionally, because of the inability of the current grail to separate drag and rotation gestures. After the switch to grail2 and tuning, all tests pass. So, from the point of view of the tests, this branch presents a major improvement over grail1. Manual tests using unity, evince and eog point at the same thing.

I think this is it, guys. Enjoy!

Revision history for this message
Jussi Pakkanen (jpakkane) wrote :

I created a new branch of this which merges trunk:

https://code.launchpad.net/~jpakkane/utouch-grail/glue-work

It has some conflicts, mainly due to Chase's removal of center of start frame. I got it to compile but some tests fail. I'll look into it next. Also there probably some latent issues there.

Revision history for this message
Daniel d'Andrada (dandrader) wrote :

It's been open for almost an year now. Thus closing it to help "keep the desk clean".
Please reopen if this merge is still relevant and wanted.

Unmerged revisions

166. By Henrik Rydberg

Add XI2 support to grail-gesture

Use the grail2 API to implement the event loop using XI events.

Signed-off-by: Henrik Rydberg <email address hidden>

165. By Henrik Rydberg

Move grail engine into pump function

Move the grail engine into the pump function, and make init/destroy
equivalent to open/close, if gesture callbacks are defined. This way,
pulling can be replaced by pumping. This concludes the grail2 API.

Signed-off-by: Henrik Rydberg <email address hidden>

164. By Henrik Rydberg

Trim the pinch and rotate bars

Gesture testing reveals a tendency to favor rotate over pinch for
small rotations. This patch lowers the pinch bar and increase the
rotate bar, leading to a more accurate recognition of both pinch
and rotate.

With this patch, all gesture tests are passing.

Signed-off-by: Henrik Rydberg <email address hidden>

163. By Henrik Rydberg

Lower priority of pinch

When performing a rotate gesture, it is very common to also trigger
the pinch primitive. Conversely, during a pinch, rotate or drag are
seldom triggered. This patch lowers the priority of pinch gestures in
favor of rotate and drag, leading to a distinct recognition of all
three basic gestures.

Signed-off-by: Henrik Rydberg <email address hidden>

162. By Henrik Rydberg

Replace recognizer with gesture frames

This patch replaces the internal recognizer with one based on the
gesture frame elements. Fully functional, and equivalent to the
previous implementation.

With this patch, the pinch tests are no longer failing, while the drag
tests still have false positives from rotation.

Signed-off-by: Henrik Rydberg <email address hidden>

161. By Henrik Rydberg

Add a gesture test suite

To ensure correctness when replacing of the internal recognizer, add a
test suite of real-time gestures. The tests take about a minute to
perform on any computer (serial mode).

Note that some of the tests are designed to fail at this stage; the
failures represent the inability of the current code to separate some
drag and rotate gestures.

Signed-off-by: Henrik Rydberg <email address hidden>

160. By Henrik Rydberg

Always output the global gesture frame

Currently, the global gesture frame is not output for one- and
two-finger gestures, but the per-contact-pair gesture elements
are used in its stead. This leads to undesired behavior when a
finger leaves the surface; it suffices to consider the start time
of a single-finger drag to see that the glue time is not respected
in that case. This patch makes sure the global gesture is always
output, such that any finger combination change leads to a restarted
gesture element.

Signed-off-by: Henrik Rydberg <email address hidden>

159. By Henrik Rydberg

Add missing grail element member documentation

The documentation of moveness in the grail_element struct got lost, fixed
with this patch.

Signed-off-by: Henrik Rydberg <email address hidden>

158. By Henrik Rydberg

Add inner product to grail bits api

Move the implementation of inner product to a more public place.

Signed-off-by: Henrik Rydberg <email address hidden>

157. By Henrik Rydberg

Deprecate open/close

Move the open/close api functions to the legacy area. No functional
changes.

Signed-off-by: Henrik Rydberg <email address hidden>

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'include/grail-bits.h'
2--- include/grail-bits.h 2011-04-28 16:53:57 +0000
3+++ include/grail-bits.h 2011-05-05 13:31:23 +0000
4@@ -76,6 +76,8 @@
5 void GRAIL_PUBLIC grail_mask_clear_mask(grail_mask_t *a, const grail_mask_t *b,
6 int bytes);
7
8+int GRAIL_PUBLIC grail_mask_inner(const grail_mask_t *a, const grail_mask_t *b,
9+ int bytes);
10 int GRAIL_PUBLIC grail_mask_count(const grail_mask_t *mask, int bytes);
11 int GRAIL_PUBLIC grail_mask_get_first(const grail_mask_t *mask, int bytes);
12 int GRAIL_PUBLIC grail_mask_get_next(int i, const grail_mask_t *mask,
13
14=== modified file 'include/grail.h'
15--- include/grail.h 2011-04-28 16:53:57 +0000
16+++ include/grail.h 2011-05-05 13:31:23 +0000
17@@ -174,6 +174,7 @@
18 * @drop_scale_ms: scaling expect timeout (ms)
19 * @drop_angle_ms: rotation expect timeout (ms)
20 * @pivot_unbound: when true, the pivot is not bound to the contact area
21+ * @tap_time_ms: maximum tap time (ms)
22 *
23 * The parameters are used to tune the behavior of the gesture recognition.
24 *
25@@ -197,6 +198,7 @@
26 float drop_scale_ms;
27 float drop_angle_ms;
28 int pivot_unbound;
29+ float tap_time_ms;
30 };
31
32 /**
33@@ -238,6 +240,7 @@
34 * @velocity: current center velocity (surface units per second)
35 * @radius: gesture radius from center (surface units)
36 * @transform: the transformation matrix of the gesture
37+ * @moveness: fraction of center movement attributed to drag motion
38 * @pivot: current center of rotate and scale (surface units)
39 * @drag: accumulated transformation displacement (surface units)
40 * @scale: accumulated scale (dimensionless)
41@@ -359,21 +362,6 @@
42 };
43
44 /**
45- * grail_open - open a grail device
46- * @ge: the grail device to open
47- * @fd: file descriptor of the kernel device
48- *
49- * Initialize the internal grail structures and configure it by reading the
50- * protocol capabilities through the file descriptor.
51- *
52- * The callbacks, parameters and priv pointer should be set prior to this
53- * call.
54- *
55- * Returns zero on success, negative error number otherwise.
56- */
57-int GRAIL_PUBLIC grail_open(struct grail *ge, int fd);
58-
59-/**
60 * grail_idle - check state of kernel device
61 * @ge: the grail device in use
62 * @fd: file descriptor of the kernel device
63@@ -401,16 +389,6 @@
64 int GRAIL_PUBLIC grail_pull(struct grail *ge, int fd);
65
66 /**
67- * grail_close - close the grail device
68- * @ge: the grail device to close
69- * @fd: file descriptor of the kernel device
70- *
71- * Deallocates all memory associated with grail, and clears the grail
72- * structure.
73- */
74-void GRAIL_PUBLIC grail_close(struct grail *ge, int fd);
75-
76-/**
77 * grail_set_bbox - set the grail unit bounding box
78 * @ge: the grail device in use
79 * @min: the minimum (lower-left) corner of the bounding box
80@@ -454,6 +432,23 @@
81 const struct utouch_frame GRAIL_PUBLIC *
82 grail_get_contact_frame(const struct grail *ge);
83
84+/**
85+ * grail_get_gesture_frame - get current gesture frame
86+ * @ge: the grail device in use
87+ *
88+ * Return the gesture frame currently being processed. If called from
89+ * within a gesture callback, it is guaranteed to return the frame
90+ * corresponding to the gesture.
91+ *
92+ * The returned pointer can be NULL if no input has yet been extracted
93+ * through the grail instance.
94+ *
95+ * The frame pointer is ABI agnostic, owned by the grail instance, and
96+ * has grail scope.
97+ */
98+const struct grail_frame GRAIL_PUBLIC *
99+grail_get_gesture_frame(const struct grail *ge);
100+
101 #ifndef GRAIL_NO_LEGACY_API
102
103 struct grail_contact {
104@@ -468,6 +463,8 @@
105 float pressure;
106 };
107
108+int GRAIL_PUBLIC grail_open(struct grail *ge, int fd);
109+void GRAIL_PUBLIC grail_close(struct grail *ge, int fd);
110 void GRAIL_PUBLIC grail_filter_abs_events(struct grail *ge, int usage);
111
112 int GRAIL_PUBLIC grail_get_contacts(const struct grail *ge,
113
114=== modified file 'include/grail.h.orig'
115--- include/grail.h.orig 2011-04-28 16:53:34 +0000
116+++ include/grail.h.orig 2011-05-05 13:31:23 +0000
117@@ -2,8 +2,7 @@
118 *
119 * grail - Gesture Recognition And Instantiation Library
120 *
121- * Copyright (C) 2010 Canonical Ltd.
122- * Copyright (C) 2010 Henrik Rydberg <rydberg@bitmath.org>
123+ * Copyright (C) 2010-2011 Canonical Ltd.
124 *
125 * This program is free software: you can redistribute it and/or modify it
126 * under the terms of the GNU General Public License as published by the
127@@ -26,11 +25,14 @@
128 #include <linux/input.h>
129 #include <grail-bits.h>
130 #include <grail-types.h>
131+#include <utouch/frame.h>
132
133 #ifdef __cplusplus
134 extern "C" {
135 #endif
136
137+#define GRAIL_VERSION 0x00011000
138+
139 #define DIM_GRAIL_TYPE 64
140 #define DIM_GRAIL_TYPE_BYTES ((DIM_GRAIL_TYPE + 7) >> 3)
141
142@@ -41,8 +43,30 @@
143 #define GRAIL_STATUS_UPDATE 1
144 #define GRAIL_STATUS_END 2
145
146-typedef float grail_prop_t; /* gesture properties */
147-typedef __u64 grail_time_t; /* time in milliseconds */
148+#define GRAIL_EXPECT_CENTER_X 0x0001
149+#define GRAIL_EXPECT_CENTER_Y 0x0002
150+#define GRAIL_EXPECT_DRAG_X 0x0004
151+#define GRAIL_EXPECT_DRAG_Y 0x0008
152+#define GRAIL_EXPECT_SCALE 0x0010
153+#define GRAIL_EXPECT_ANGLE 0x0020
154+#define GRAIL_EXPECT_MASK 0x003f
155+
156+typedef float grail_prop_t; /* gesture properties */
157+typedef utouch_frame_time_t grail_time_t; /* time in milliseconds */
158+typedef struct grail *grail_handle; /* the grail instance handle */
159+
160+/**
161+ * struct grail_get_version - get grail library version
162+ *
163+ * Report the version of the grail library, which can be different from
164+ * the value of GRAIL_VERSION in this header file.
165+ *
166+ * This function allows for fallback options from major interface
167+ * extensions within the same ABI version. For the normal cases of ABI
168+ * agnostic or backwards incompatible changes, this function is not
169+ * needed.
170+ */
171+unsigned int GRAIL_PUBLIC grail_get_version(void);
172
173 /**
174 * struct grail_coord - coordinate in bounding box units
175@@ -53,32 +77,63 @@
176 float x, y;
177 };
178
179-/**
180- * struct grail_contact - MT event information in bounding box units
181- * @id: Contact tracking id
182- * @tool_type: Tool type (ABS_MT_TOOL_TYPE)
183- * @pos: Position of contact (bbox units)
184- * @touch_major: Major axis of contact shape (bbox units)
185- * @touch_minor: Minor axis of contact shape (bbox units)
186- * @width_major: Major axis of perimeter (bbox units)
187- * @width_minor: Minor axis of perimeter (bbox units)
188- * @angle: Angle of orientation (vertical: 0 horizontal: +-M_PI_2)
189- * @pressure: Pressure of contact (min: 0 max: 1)
190- *
191- * Depending on the native support of the underlying device, some or all of
192- * the listed properties may be computed.
193- */
194-struct grail_contact {
195- int id;
196- int tool_type;
197- struct grail_coord pos;
198- float touch_major;
199- float touch_minor;
200- float width_major;
201- float width_minor;
202- float angle;
203- float pressure;
204-};
205+grail_handle GRAIL_PUBLIC grail_new_raw(utouch_frame_handle fh,
206+ unsigned int num_frames,
207+ void *select,
208+ unsigned int version,
209+ unsigned int control_size,
210+ unsigned int frame_size,
211+ unsigned int slot_size);
212+
213+/**
214+ * grail_new - allocate and initialize a new grail instance
215+ * @fh: utouch frame handle to use
216+ * @num_frames: number of frames in cyclic buffer
217+ * @select: client selection callback
218+ *
219+ * Initialize the internal grail structures.
220+ *
221+ * Returns zero in case of failure.
222+ */
223+#define grail_new(fh, num_frames, select) \
224+ grail_new_raw(fh, num_frames, select, \
225+ GRAIL_VERSION, \
226+ sizeof(struct grail_control), \
227+ sizeof(struct grail_frame), \
228+ sizeof(struct grail_element))
229+
230+/**
231+ * grail_delete - destroy and delete grail instance
232+ * @ge: grail instance in use
233+ *
234+ * Deallocates all internal memory structures.
235+ */
236+void GRAIL_PUBLIC grail_delete(grail_handle ge);
237+
238+/**
239+ * grail_get_control - get mutable control structure
240+ * @ge: the grail device in use
241+ *
242+ * Return the control struct of the grail instance.
243+ *
244+ * The control pointer is ABI agnostic, owned by the grail instance, and
245+ * has grail scope.
246+ */
247+struct grail_control GRAIL_PUBLIC *grail_get_control(grail_handle ge);
248+
249+/**
250+ * grail_pump_frame - insert touch frames into grail
251+ * @ge: the grail device in use
252+ * @frame: the touch frame to insert
253+ *
254+ * Insert a new touch frame into the grail engine. If the frame induces a
255+ * new gesture frame, a pointer to the frame is returned.
256+ *
257+ * The grail frame pointer is ABI agnostic, owned by the grail instance, and
258+ * has grail scope.
259+ */
260+const struct grail_frame GRAIL_PUBLIC *
261+grail_pump_frame(grail_handle ge, const struct utouch_frame *frame);
262
263 /**
264 * struct grail_client_id - Gesture client information
265@@ -106,6 +161,143 @@
266 };
267
268 /**
269+ * struct grail_control - control parameters of grail
270+ * @glue_ms: minimum time to hold activation (ms)
271+ * @bar_center_x: horizontal distance to activate (surface width fraction)
272+ * @bar_center_y: vertical distance to activate (surface height fraction)
273+ * @bar_drag_x: horizontal distance to activate (surface width fraction)
274+ * @bar_drag_y: vertical distance to activate (surface height fraction)
275+ * @bar_scale: minimum scaling to activate (fraction)
276+ * @bar_angle: minimum angle to activate (radians)
277+ * @drop_x_ms: horizontal expect timeout (ms)
278+ * @drop_y_ms: vertical expect timeout (ms)
279+ * @drop_scale_ms: scaling expect timeout (ms)
280+ * @drop_angle_ms: rotation expect timeout (ms)
281+ * @pivot_unbound: when true, the pivot is not bound to the contact area
282+ *
283+ * The parameters are used to tune the behavior of the gesture recognition.
284+ *
285+ * The moveness is a number between zero and one denoting the
286+ * character of the current transform. Zero means pure rotate and
287+ * scale, one means pure drag.
288+ *
289+ * Later versions of this struct may grow in size, but will remain
290+ * binary compatible with older versions.
291+ */
292+struct grail_control {
293+ float glue_ms;
294+ float bar_center_x;
295+ float bar_center_y;
296+ float bar_drag_x;
297+ float bar_drag_y;
298+ float bar_scale;
299+ float bar_angle;
300+ float drop_x_ms;
301+ float drop_y_ms;
302+ float drop_scale_ms;
303+ float drop_angle_ms;
304+ int pivot_unbound;
305+};
306+
307+/**
308+ * struct grail_frame - frame of ongoing elementary transformations
309+ * @prev: pointer to the previous gesture frame
310+ * @touch: pointer to the touch frame triggering this gesture frame
311+ * @num_ongoing: number of elements in the ongoing array
312+ * @ongoing: array of ongoing transformation elements
313+ * @slots: array of all transformation slots
314+ *
315+ * A gesture frame consists of one or several touch frames glued
316+ * together into a stable transition, combined with information on
317+ * ongoing elementary gestural transformations. The array of ongoing
318+ * elements contains all elements with a nonzero expect mask.
319+ *
320+ * Later versions of this struct may grow in size, but will remain
321+ * binary compatible with older versions.
322+ */
323+struct grail_frame {
324+ const struct grail_frame *prev;
325+ const struct utouch_frame *touch;
326+ unsigned int num_ongoing;
327+ struct grail_element **ongoing;
328+ struct grail_element **slots;
329+};
330+
331+/**
332+ * struct grail_element - elementary gesture transformation
333+ * @prev: respective element of previous frame
334+ * @slot: the transformation slot occupied by this element
335+ * @id: unique identifier of the ongoing transformation
336+ * @num_touches: number of contacts of this element
337+ * @touches: array of contacts of this element
338+ * @start_time: start time of this element
339+ * @start_center: center position at start of transform (surface units)
340+ * @expect_mask: bitmask of expected gestures (grail main types)
341+ * @active_mask: bitmask of activated gestures (grail main types)
342+ * @center: gesture center position (surface units)
343+ * @velocity: current center velocity (surface units per second)
344+ * @radius: gesture radius from center (surface units)
345+ * @transform: the transformation matrix of the gesture
346+ * @pivot: current center of rotate and scale (surface units)
347+ * @drag: accumulated transformation displacement (surface units)
348+ * @scale: accumulated scale (dimensionless)
349+ * @angle: accumulated rotation angle (radians)
350+ *
351+ * The grail element describes the ongoing gestural transformation of
352+ * a particular set of contacts. The expect mask describes which
353+ * gestural transformations may become active during the course of
354+ * events, and the active mask describes which have passed their
355+ * respective activation threshold. The set of expected gestures can
356+ * change over time, for instance by exclusion or timeout.
357+ *
358+ * Applications handling rotation, either by transformation matrix or
359+ * angle, should use the drag displacement. For other applications,
360+ * the center displacement may be used instead, as to not lose
361+ * movement accuracy.
362+ *
363+ * Later versions of this struct may grow in size, but will remain
364+ * binary compatible with older versions.
365+ */
366+struct grail_element {
367+ const struct grail_element *prev;
368+ int slot;
369+ int id;
370+ int num_touches;
371+ const struct utouch_contact **touches;
372+ grail_time_t start_time;
373+ struct grail_coord start_center;
374+ unsigned int expect_mask;
375+ unsigned int active_mask;
376+ struct grail_coord center;
377+ struct grail_coord velocity;
378+ float radius2;
379+ float transform[6];
380+ float moveness;
381+ struct grail_coord pivot;
382+ struct grail_coord drag;
383+ float scale2;
384+ float angle;
385+};
386+
387+/**
388+ * grail_element_transform - transform coordinates using element
389+ * @slot: the transformation element to use
390+ * @q: the grail coordinate to fill
391+ * @x: the grail coordinate to transform
392+ *
393+ * Performs the 3x3 transform *q = T *p, where T is the element
394+ * transform.
395+ */
396+static inline void grail_element_transform(const struct grail_element *slot,
397+ struct grail_coord *q,
398+ const struct grail_coord *p)
399+{
400+ const float *T = slot->transform;
401+ q->x = T[0] * p->x + T[1] * p->y + T[2];
402+ q->y = T[3] * p->x + T[4] * p->y + T[5];
403+}
404+
405+/**
406 * struct grail_event - Gesture event
407 * @type: The gesture type
408 * @id: Unique identifier foof the gesture instance
409@@ -231,19 +423,6 @@
410 const struct grail_coord *max);
411
412 /**
413- * grail_filter_abs_events - filter kernel motion events
414- * @ge: the grail device in use
415- * @usage: When true, filter kernel motion events.
416- *
417- * Single-finger pointer events are treated as pointer gestures in
418- * grail. When filter_motion_events is non-zero, the kernel events
419- * corresponding to pointer movement are removed from the event
420- * stream.
421- *
422- */
423-void GRAIL_PUBLIC grail_filter_abs_events(struct grail *ge, int usage);
424-
425-/**
426 * grail_get_units - get device coordinate ranges
427 * @ge: the grail device in use
428 * @min: minimum x and y coordinates
429@@ -259,17 +438,60 @@
430 struct grail_coord *min, struct grail_coord *max);
431
432 /**
433- * grail_get_contacts - get current contact state
434- * @ge: the grail device in use
435- * @touch: array of contacts to be filled in
436- * @max_touch: maximum number of contacts supported by the array
437- *
438- * Extract the contact state as currently seen by grail.
439- *
440- */
441+ * grail_get_contact_frame - get current contact frame
442+ * @ge: the grail device in use
443+ *
444+ * Return the contact frame current being processed. If called from
445+ * within a gesture callback, it is guaranteed to return the frame
446+ * corresponding to the gesture.
447+ *
448+ * The returned pointer can be NULL if no input has yet been extracted
449+ * through the grail instance.
450+ *
451+ * The frame pointer is ABI agnostic, owned by the grail instance, and
452+ * has grail scope.
453+ */
454+const struct utouch_frame GRAIL_PUBLIC *
455+grail_get_contact_frame(const struct grail *ge);
456+
457+/**
458+ * grail_get_gesture_frame - get current gesture frame
459+ * @ge: the grail device in use
460+ *
461+ * Return the gesture frame currently being processed. If called from
462+ * within a gesture callback, it is guaranteed to return the frame
463+ * corresponding to the gesture.
464+ *
465+ * The returned pointer can be NULL if no input has yet been extracted
466+ * through the grail instance.
467+ *
468+ * The frame pointer is ABI agnostic, owned by the grail instance, and
469+ * has grail scope.
470+ */
471+const struct grail_frame GRAIL_PUBLIC *
472+grail_get_gesture_frame(const struct grail *ge);
473+
474+#ifndef GRAIL_NO_LEGACY_API
475+
476+struct grail_contact {
477+ int id;
478+ int tool_type;
479+ struct grail_coord pos;
480+ float touch_major;
481+ float touch_minor;
482+ float width_major;
483+ float width_minor;
484+ float angle;
485+ float pressure;
486+};
487+
488+void GRAIL_PUBLIC grail_filter_abs_events(struct grail *ge, int usage);
489+
490 int GRAIL_PUBLIC grail_get_contacts(const struct grail *ge,
491 struct grail_contact *touch, int max_touch);
492
493+#endif
494+
495 #ifdef __cplusplus
496 }
497 #endif
498
499=== modified file 'src/Makefile.am'
500--- src/Makefile.am 2011-04-28 16:53:41 +0000
501+++ src/Makefile.am 2011-05-05 13:31:23 +0000
502@@ -14,13 +14,6 @@
503 grail-bits.c \
504 grail-inserter.c \
505 grail-inserter.h \
506- grail-gestures.c \
507- grail-gestures.h \
508- gestures-touch.c \
509- gestures-drag.c \
510- gestures-pinch.c \
511- gestures-rotate.c \
512- gestures-tapping.c \
513 grail-recognizer.c \
514 grail-recognizer.h \
515 grail-event.c \
516
517=== removed file 'src/gestures-drag.c'
518--- src/gestures-drag.c 2011-04-28 16:53:57 +0000
519+++ src/gestures-drag.c 1970-01-01 00:00:00 +0000
520@@ -1,135 +0,0 @@
521-/*****************************************************************************
522- *
523- * grail - Gesture Recognition And Instantiation Library
524- *
525- * Copyright (C) 2010-2011 Canonical Ltd.
526- *
527- * This program is free software: you can redistribute it and/or modify it
528- * under the terms of the GNU General Public License as published by the
529- * Free Software Foundation, either version 3 of the License, or (at your
530- * option) any later version.
531- *
532- * This program is distributed in the hope that it will be useful, but
533- * WITHOUT ANY WARRANTY; without even the implied warranty of
534- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
535- * General Public License for more details.
536- *
537- * You should have received a copy of the GNU General Public License along
538- * with this program. If not, see <http://www.gnu.org/licenses/>.
539- *
540- ****************************************************************************/
541-
542-#include "grail-recognizer.h"
543-#include <math.h>
544-#include <stdio.h>
545-
546-static const int getype[DIM_TOUCH + 1] = {
547- -1,
548- GRAIL_TYPE_DRAG1,
549- GRAIL_TYPE_DRAG2,
550- GRAIL_TYPE_DRAG3,
551- GRAIL_TYPE_DRAG4,
552- GRAIL_TYPE_DRAG5,
553-};
554-
555-static void set_props(const struct gesture_inserter *gin,
556- struct combo_model *s, const struct move_model *m,
557- const struct utouch_frame *frame)
558-{
559- if (m->single) {
560- s->prop[GRAIL_PROP_DRAG_DX] = m->fm[FM_X].raw_delta;
561- s->prop[GRAIL_PROP_DRAG_DY] = m->fm[FM_Y].raw_delta;
562- } else {
563- s->prop[GRAIL_PROP_DRAG_DX] = m->fm[FM_X].action_delta;
564- s->prop[GRAIL_PROP_DRAG_DY] = m->fm[FM_Y].action_delta;
565- }
566- s->prop[GRAIL_PROP_DRAG_VX] = m->fm[FM_X].velocity;
567- s->prop[GRAIL_PROP_DRAG_VY] = m->fm[FM_Y].velocity;
568- s->prop[GRAIL_PROP_DRAG_X] = m->fm[FM_X].value;
569- s->prop[GRAIL_PROP_DRAG_Y] = m->fm[FM_Y].value;
570- s->nprop = 6;
571- s->nprop += gin_add_contact_props(gin, s->prop + s->nprop, frame);
572-}
573-
574-static const int fm_mask = 0x03;
575-
576-int gru_drag(struct grail *ge,
577- const struct utouch_frame *frame)
578-{
579- struct gesture_recognizer *gru = ge->gru;
580- struct combo_model *state = &gru->drag;
581- struct move_model *move = &gru->move;
582- int mask = state->active ? (move->active & fm_mask) : fm_mask;
583- if (!move->multi && !move->single) {
584- if (state->active) {
585- gru_end(ge, state->gid, move,
586- state->prop, state->nprop);
587- state->active = 0;
588- }
589- }
590- if ((move->timeout & fm_mask) == fm_mask) {
591- if (state->active) {
592- gin_gid_timeout(ge, state->gid);
593- }
594- }
595- if (!state->active) {
596- int type = getype[move->ntouch];
597- if (type < 0)
598- return 0;
599- state->gid = gin_gid_begin(ge, type, PRIO_GESTURE, frame);
600- state->active = 1;
601- }
602- if (!(move->tickle & mask))
603- return 0;
604- if (!(move->active & fm_mask))
605- return 0;
606- set_props(ge->gin, state, move, frame);
607- gru_event(ge, state->gid, move, state->prop, state->nprop);
608- return 1;
609-}
610-
611-int gru_windrag(struct grail *ge,
612- const struct utouch_frame *frame)
613-{
614- struct gesture_recognizer *gru = ge->gru;
615- struct combo_model *state = &gru->windrag;
616- struct move_model *move = &gru->move;
617- int mask = state->active ? (move->active & fm_mask) : fm_mask;
618- if (!move->multi && !move->single) {
619- if (state->active && out_of_bounds(state, move)) {
620- gru_end(ge, state->gid, move,
621- state->prop, state->nprop);
622- state->active = 0;
623- }
624- }
625- if ((move->timeout & fm_mask) == fm_mask) {
626- if (state->active) {
627- gin_gid_timeout(ge, state->gid);
628- }
629- }
630- if (!state->active) {
631- if (move->ntouch == 4) {
632- state->gid = gin_gid_begin(ge, GRAIL_TYPE_MDRAG,
633- PRIO_META, frame);
634- state->mintouch = 1;
635- state->maxtouch = 4;
636- state->active = 1;
637- } else if (move->ntouch == 3) {
638- state->gid = gin_gid_begin(ge, GRAIL_TYPE_EDRAG,
639- PRIO_ENV, frame);
640- state->mintouch = 1;
641- state->maxtouch = 3;
642- state->active = 1;
643- } else {
644- return 0;
645- }
646- }
647- if (!(move->tickle & mask))
648- return 0;
649- if (!(move->active & fm_mask))
650- return 0;
651- set_props(ge->gin, state, move, frame);
652- gru_event(ge, state->gid, move, state->prop, state->nprop);
653- return 1;
654-}
655-
656
657=== removed file 'src/gestures-pinch.c'
658--- src/gestures-pinch.c 2011-04-28 16:53:57 +0000
659+++ src/gestures-pinch.c 1970-01-01 00:00:00 +0000
660@@ -1,129 +0,0 @@
661-/*****************************************************************************
662- *
663- * grail - Gesture Recognition And Instantiation Library
664- *
665- * Copyright (C) 2010-2011 Canonical Ltd.
666- *
667- * This program is free software: you can redistribute it and/or modify it
668- * under the terms of the GNU General Public License as published by the
669- * Free Software Foundation, either version 3 of the License, or (at your
670- * option) any later version.
671- *
672- * This program is distributed in the hope that it will be useful, but
673- * WITHOUT ANY WARRANTY; without even the implied warranty of
674- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
675- * General Public License for more details.
676- *
677- * You should have received a copy of the GNU General Public License along
678- * with this program. If not, see <http://www.gnu.org/licenses/>.
679- *
680- ****************************************************************************/
681-
682-#include "grail-recognizer.h"
683-#include <math.h>
684-#include <stdio.h>
685-
686-static const int getype[DIM_TOUCH + 1] = {
687- 0,
688- 0,
689- GRAIL_TYPE_PINCH2,
690- GRAIL_TYPE_PINCH3,
691- GRAIL_TYPE_PINCH4,
692- GRAIL_TYPE_PINCH5,
693-};
694-
695-static const int fm_mask = 0x04;
696-
697-static void set_props(const struct gesture_inserter *gin,
698- struct combo_model *s,
699- const struct move_model *m,
700- const struct utouch_frame *frame)
701-{
702- s->prop[GRAIL_PROP_PINCH_DR] = m->fm[FM_R].action_delta;
703- s->prop[GRAIL_PROP_PINCH_VR] = m->fm[FM_R].velocity;
704- s->prop[GRAIL_PROP_PINCH_R] = m->fm[FM_R].value;
705- s->nprop = 3;
706- s->nprop += gin_add_contact_props(gin, s->prop + s->nprop, frame);
707-}
708-
709-int gru_pinch(struct grail *ge,
710- const struct utouch_frame *frame)
711-{
712- struct gesture_recognizer *gru = ge->gru;
713- struct combo_model *state = &gru->pinch;
714- struct move_model *move = &gru->move;
715- int mask = state->active ? (move->active & fm_mask) : fm_mask;
716- if (!move->multi && !move->single) {
717- if (state->active) {
718- gru_end(ge, state->gid, move,
719- state->prop, state->nprop);
720- state->active = 0;
721- }
722- return 0;
723- }
724- if ((move->timeout & fm_mask) == fm_mask) {
725- if (state->active) {
726- gin_gid_timeout(ge, state->gid);
727- }
728- }
729- if (!(move->tickle & mask))
730- return 0;
731- if (!state->active) {
732- int type = getype[move->ntouch];
733- if (!type)
734- return 0;
735- state->gid = gin_gid_begin(ge, type, PRIO_GESTURE, frame);
736- state->active = 1;
737- }
738- if (!(move->active & fm_mask))
739- return 0;
740- set_props(ge->gin, state, move, frame);
741- gru_event(ge, state->gid, move, state->prop, state->nprop);
742- return 1;
743-}
744-
745-int gru_winpinch(struct grail *ge,
746- const struct utouch_frame *frame)
747-{
748- struct gesture_recognizer *gru = ge->gru;
749- struct combo_model *state = &gru->winpinch;
750- struct move_model *move = &gru->move;
751- int mask = state->active ? (move->active & fm_mask) : fm_mask;
752- if (!move->multi) {
753- if (state->active && out_of_bounds(state, move)) {
754- gru_end(ge, state->gid, move,
755- state->prop, state->nprop);
756- state->active = 0;
757- }
758- return 0;
759- }
760- if ((move->timeout & fm_mask) == fm_mask) {
761- if (state->active) {
762- gin_gid_timeout(ge, state->gid);
763- }
764- }
765- if (!(move->tickle & mask))
766- return 0;
767- if (!state->active) {
768- if (move->ntouch == 4) {
769- state->gid = gin_gid_begin(ge, GRAIL_TYPE_MPINCH,
770- PRIO_META, frame);
771- state->mintouch = 2;
772- state->maxtouch = 4;
773- state->active = 1;
774- } else if (move->ntouch == 3) {
775- state->gid = gin_gid_begin(ge, GRAIL_TYPE_EPINCH,
776- PRIO_ENV, frame);
777- state->mintouch = 2;
778- state->maxtouch = 3;
779- state->active = 1;
780- } else {
781- return 0;
782- }
783- }
784- if (!(move->active & fm_mask))
785- return 0;
786- set_props(ge->gin, state, move, frame);
787- gru_event(ge, state->gid, move, state->prop, state->nprop);
788- return 1;
789-}
790
791=== removed file 'src/gestures-rotate.c'
792--- src/gestures-rotate.c 2011-04-28 16:53:57 +0000
793+++ src/gestures-rotate.c 1970-01-01 00:00:00 +0000
794@@ -1,128 +0,0 @@
795-/*****************************************************************************
796- *
797- * grail - Gesture Recognition And Instantiation Library
798- *
799- * Copyright (C) 2010-2011 Canonical Ltd.
800- *
801- * This program is free software: you can redistribute it and/or modify it
802- * under the terms of the GNU General Public License as published by the
803- * Free Software Foundation, either version 3 of the License, or (at your
804- * option) any later version.
805- *
806- * This program is distributed in the hope that it will be useful, but
807- * WITHOUT ANY WARRANTY; without even the implied warranty of
808- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
809- * General Public License for more details.
810- *
811- * You should have received a copy of the GNU General Public License along
812- * with this program. If not, see <http://www.gnu.org/licenses/>.
813- *
814- ****************************************************************************/
815-
816-#include "grail-recognizer.h"
817-#include <math.h>
818-#include <stdio.h>
819-
820-static const int getype[DIM_TOUCH + 1] = {
821- 0,
822- 0,
823- GRAIL_TYPE_ROTATE2,
824- GRAIL_TYPE_ROTATE3,
825- GRAIL_TYPE_ROTATE4,
826- GRAIL_TYPE_ROTATE5,
827-};
828-
829-static const int fm_mask = 0x08;
830-
831-static void set_props(const struct gesture_inserter *gin,
832- struct combo_model *s, const struct move_model *m,
833- const struct utouch_frame *frame)
834-{
835- s->prop[GRAIL_PROP_ROTATE_DA] = m->fm[FM_A].action_delta;
836- s->prop[GRAIL_PROP_ROTATE_VA] = m->fm[FM_A].velocity;
837- s->prop[GRAIL_PROP_ROTATE_A] = m->fm[FM_A].value;
838- s->nprop = 3;
839- s->nprop += gin_add_contact_props(gin, s->prop + s->nprop, frame);
840-}
841-
842-int gru_rotate(struct grail *ge,
843- const struct utouch_frame *frame)
844-{
845- struct gesture_recognizer *gru = ge->gru;
846- struct combo_model *state = &gru->rotate;
847- struct move_model *move = &gru->move;
848- int mask = state->active ? (move->active & fm_mask) : fm_mask;
849- if (!move->multi && !move->single) {
850- if (state->active) {
851- gru_end(ge, state->gid, move,
852- state->prop, state->nprop);
853- state->active = 0;
854- }
855- return 0;
856- }
857- if ((move->timeout & fm_mask) == fm_mask) {
858- if (state->active) {
859- gin_gid_timeout(ge, state->gid);
860- }
861- }
862- if (!(move->tickle & mask))
863- return 0;
864- if (!state->active) {
865- int type = getype[move->ntouch];
866- if (!type)
867- return 0;
868- state->gid = gin_gid_begin(ge, type, PRIO_GESTURE, frame);
869- state->active = 1;
870- }
871- if (!(move->active & fm_mask))
872- return 0;
873- set_props(ge->gin, state, move, frame);
874- gru_event(ge, state->gid, move, state->prop, state->nprop);
875- return 1;
876-}
877-
878-int gru_winrotate(struct grail *ge,
879- const struct utouch_frame *frame)
880-{
881- struct gesture_recognizer *gru = ge->gru;
882- struct combo_model *state = &gru->winrotate;
883- struct move_model *move = &gru->move;
884- int mask = state->active ? (move->active & fm_mask) : fm_mask;
885- if (!move->multi) {
886- if (state->active && out_of_bounds(state, move)) {
887- gru_end(ge, state->gid, move,
888- state->prop, state->nprop);
889- state->active = 0;
890- }
891- return 0;
892- }
893- if ((move->timeout & fm_mask) == fm_mask) {
894- if (state->active) {
895- gin_gid_timeout(ge, state->gid);
896- }
897- }
898- if (!(move->tickle & mask))
899- return 0;
900- if (!state->active) {
901- if (move->ntouch == 4) {
902- state->gid = gin_gid_begin(ge, GRAIL_TYPE_MROTATE,
903- PRIO_META, frame);
904- state->mintouch = 2;
905- state->maxtouch = 4;
906- state->active = 1;
907- } else if (move->ntouch == 3) {
908- state->gid = gin_gid_begin(ge, GRAIL_TYPE_EROTATE,
909- PRIO_ENV, frame);
910- state->mintouch = 2;
911- state->maxtouch = 3;
912- state->active = 1;
913- } else {
914- return 0;
915- }
916- }
917- if (!(move->active & fm_mask))
918- return 0;
919- set_props(ge->gin, state, move, frame);
920- gru_event(ge, state->gid, move, state->prop, state->nprop);
921- return 1;
922-}
923
924=== removed file 'src/gestures-tapping.c'
925--- src/gestures-tapping.c 2011-04-28 16:53:57 +0000
926+++ src/gestures-tapping.c 1970-01-01 00:00:00 +0000
927@@ -1,100 +0,0 @@
928-/*****************************************************************************
929- *
930- * grail - Gesture Recognition And Instantiation Library
931- *
932- * Copyright (C) 2010-2011 Canonical Ltd.
933- *
934- * This program is free software: you can redistribute it and/or modify it
935- * under the terms of the GNU General Public License as published by the
936- * Free Software Foundation, either version 3 of the License, or (at your
937- * option) any later version.
938- *
939- * This program is distributed in the hope that it will be useful, but
940- * WITHOUT ANY WARRANTY; without even the implied warranty of
941- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
942- * General Public License for more details.
943- *
944- * You should have received a copy of the GNU General Public License along
945- * with this program. If not, see <http://www.gnu.org/licenses/>.
946- *
947- ****************************************************************************/
948-
949-#include "grail-recognizer.h"
950-#include <math.h>
951-
952-static const int fm_mask = 0x07;
953-
954-static void set_props(const struct gesture_inserter *gin,
955- struct tapping_model *s, const struct move_model *m,
956- const struct utouch_frame *frame)
957-{
958- s->prop[GRAIL_PROP_TAP_DT] = m->time - s->start;
959- s->prop[GRAIL_PROP_TAP_X] = m->fm[FM_X].value;
960- s->prop[GRAIL_PROP_TAP_Y] = m->fm[FM_Y].value;
961- s->nprop = 3;
962- s->nprop += gin_add_contact_props(gin, s->prop + s->nprop, frame);
963-}
964-
965-int gru_tapping(struct grail *ge,
966- const struct utouch_frame *frame)
967-{
968- struct gesture_recognizer *gru = ge->gru;
969- struct tapping_model *state = &gru->tapping;
970- struct move_model *move = &gru->move;
971- state->tap = 0;
972- if (frame->num_active && !frame->prev->num_active) {
973- state->mintouch = 0;
974- state->maxtouch = 0;
975- }
976- if (move->ntouch > state->maxtouch) {
977- if (state->active) {
978- gin_gid_discard(ge, state->gid);
979- state->active = 0;
980- }
981- state->start = move->time;
982- state->maxtouch = move->ntouch;
983- set_props(ge->gin, state, move, frame);
984- if (state->maxtouch <= 5) {
985- int type = GRAIL_TYPE_TAP1 + state->maxtouch - 1;
986- state->gid = gin_gid_begin(ge, type, PRIO_TAP, frame);
987- state->active = 1;
988- }
989- return 0;
990- }
991- if (!state->active) {
992- state->mintouch = move->ntouch;
993- state->maxtouch = move->ntouch;
994- return 0;
995- }
996- if (move->ntouch <= state->mintouch) {
997- int x = state->prop[GRAIL_PROP_TAP_X];
998- int y = state->prop[GRAIL_PROP_TAP_Y];
999- int t = move->time - state->start;
1000- if (t > move->fm[FM_X].bar_ms) {
1001- gin_gid_discard(ge, state->gid);
1002- state->mintouch = move->ntouch;
1003- state->maxtouch = move->ntouch;
1004- state->active = 0;
1005- return 0;
1006- }
1007- state->tap = state->maxtouch;
1008- state->prop[GRAIL_PROP_TAP_DT] = t;
1009- gin_gid_event(ge, state->gid, x, y, state->maxtouch,
1010- state->prop, state->nprop, 1);
1011- state->mintouch = move->ntouch;
1012- state->maxtouch = move->ntouch;
1013- state->active = 0;
1014- return 1;
1015- }
1016- if (!move->ntouch)
1017- return 0;
1018- state->prop[GRAIL_PROP_TAP_DT] = move->time - state->start;
1019- if ((move->active & fm_mask) ||
1020- move->time - state->start > move->fm[FM_X].bar_ms) {
1021- gin_gid_discard(ge, state->gid);
1022- state->mintouch = move->ntouch;
1023- state->maxtouch = move->ntouch;
1024- state->active = 0;
1025- }
1026- return 0;
1027-}
1028
1029=== removed file 'src/gestures-touch.c'
1030--- src/gestures-touch.c 2011-04-04 17:27:38 +0000
1031+++ src/gestures-touch.c 1970-01-01 00:00:00 +0000
1032@@ -1,98 +0,0 @@
1033-/*****************************************************************************
1034- *
1035- * grail - Gesture Recognition And Instantiation Library
1036- *
1037- * Copyright (C) 2010 Canonical Ltd.
1038- * Copyright (C) 2010 Henrik Rydberg <rydberg@bitmath.org>
1039- *
1040- * This program is free software: you can redistribute it and/or modify it
1041- * under the terms of the GNU General Public License as published by the
1042- * Free Software Foundation, either version 3 of the License, or (at your
1043- * option) any later version.
1044- *
1045- * This program is distributed in the hope that it will be useful, but
1046- * WITHOUT ANY WARRANTY; without even the implied warranty of
1047- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
1048- * General Public License for more details.
1049- *
1050- * You should have received a copy of the GNU General Public License along
1051- * with this program. If not, see <http://www.gnu.org/licenses/>.
1052- *
1053- ****************************************************************************/
1054-
1055-#include "grail-recognizer.h"
1056-#include <math.h>
1057-#include <stdio.h>
1058-
1059-static const int getype[DIM_TOUCH + 1] = {
1060- -1,
1061- GRAIL_TYPE_TOUCH1,
1062- GRAIL_TYPE_TOUCH2,
1063- GRAIL_TYPE_TOUCH3,
1064- GRAIL_TYPE_TOUCH4,
1065- GRAIL_TYPE_TOUCH5,
1066-};
1067-
1068-int gru_touch(struct grail *ge,
1069- const struct utouch_frame *frame)
1070-{
1071- struct gesture_recognizer *gru = ge->gru;
1072- struct combo_model *state = &gru->touch;
1073- struct move_model *move = &gru->move;
1074- if (frame->slot_revision != frame->prev->slot_revision) {
1075- if (state->active) {
1076- gru_end(ge, state->gid, move,
1077- state->prop, state->nprop);
1078- state->active = 0;
1079- }
1080- }
1081- if (!state->active) {
1082- int type = getype[move->ntouch];
1083- if (type <= 0)
1084- return 0;
1085- state->gid = gin_gid_begin(ge, type, -PRIO_GESTURE, frame);
1086- state->active = 1;
1087- }
1088- if (move->time - move->fm[FM_X].original_ms <= move->fm[FM_X].hold_ms)
1089- return 0;
1090- state->nprop = gin_add_contact_props(ge->gin, state->prop, frame);
1091- gru_event(ge, state->gid, move, state->prop, state->nprop);
1092- return 1;
1093-}
1094-
1095-int gru_wintouch(struct grail *ge,
1096- const struct utouch_frame *frame)
1097-{
1098- struct gesture_recognizer *gru = ge->gru;
1099- struct combo_model *state = &gru->wintouch;
1100- struct move_model *move = &gru->move;
1101- if (frame->slot_revision != frame->prev->slot_revision) {
1102- if (state->active && out_of_bounds(state, move)) {
1103- gru_end(ge, state->gid, move,
1104- state->prop, state->nprop);
1105- state->active = 0;
1106- }
1107- }
1108- if (!state->active) {
1109- if (move->ntouch == 4) {
1110- state->gid = gin_gid_begin(ge, GRAIL_TYPE_MTOUCH,
1111- -PRIO_META, frame);
1112- state->mintouch = 1;
1113- state->maxtouch = 4;
1114- state->active = 1;
1115- } else if (move->ntouch == 3) {
1116- state->gid = gin_gid_begin(ge, GRAIL_TYPE_ETOUCH,
1117- -PRIO_ENV, frame);
1118- state->mintouch = 1;
1119- state->maxtouch = 3;
1120- state->active = 1;
1121- } else {
1122- return 0;
1123- }
1124- }
1125- if (move->time - move->fm[FM_X].original_ms <= move->fm[FM_X].hold_ms)
1126- return 0;
1127- state->nprop = gin_add_contact_props(ge->gin, state->prop, frame);
1128- gru_event(ge, state->gid, move, state->prop, state->nprop);
1129- return 1;
1130-}
1131
1132=== modified file 'src/grail-api.c'
1133--- src/grail-api.c 2011-04-28 16:53:57 +0000
1134+++ src/grail-api.c 2011-05-05 13:31:23 +0000
1135@@ -31,105 +31,11 @@
1136 #include <stdlib.h>
1137 #include <sys/stat.h>
1138
1139-#define DIM_FRAMES 100
1140-#define FRAME_RATE 100
1141-
1142 unsigned int GRAIL_PUBLIC grail_get_version(void)
1143 {
1144 return GRAIL_VERSION;
1145 }
1146
1147-int GRAIL_PUBLIC grail_open(struct grail *ge, int fd)
1148-{
1149- struct grail_impl *x;
1150- struct stat fs;
1151- int ret;
1152-
1153- ret = fstat(fd, &fs);
1154- if (ret)
1155- return ret;
1156-
1157- x = calloc(1, sizeof(*x));
1158- if (!x)
1159- return -ENOMEM;
1160-
1161- if (!fs.st_rdev)
1162- x->fptest = fdopen(fd, "r");
1163-
1164- x->evemu = evemu_new(x->fptest ? "fptest" : 0);
1165- if (!x->evemu) {
1166- ret = -ENOMEM;
1167- goto freemem;
1168- }
1169- if (x->fptest)
1170- ret = evemu_read(x->evemu, x->fptest) <= 0;
1171- else
1172- ret = evemu_extract(x->evemu, fd);
1173- if (ret)
1174- goto freemem;
1175- if (!utouch_frame_is_supported_mtdev(x->evemu)) {
1176- ret = -ENODEV;
1177- goto freemem;
1178- }
1179-
1180- if (!x->fptest) {
1181- x->mtdev = mtdev_new_open(fd);
1182- if (!x->mtdev) {
1183- ret = -ENOMEM;
1184- goto freemem;
1185- }
1186- }
1187- x->fh = utouch_frame_new_engine(DIM_FRAMES, DIM_TOUCH, FRAME_RATE);
1188- if (!x->fh) {
1189- ret = -ENOMEM;
1190- goto freedev;
1191- }
1192- ret = utouch_frame_init_mtdev(x->fh, x->evemu);
1193- if (ret)
1194- goto freeframe;
1195-
1196- ge->impl = x;
1197-
1198- ret = gin_init(ge);
1199- if (ret)
1200- goto freeframe;
1201-
1202- ret = gru_init(ge);
1203- if (ret)
1204- goto freegin;
1205-
1206- return 0;
1207- freegin:
1208- gin_destroy(ge);
1209- freeframe:
1210- utouch_frame_delete_engine(x->fh);
1211- freedev:
1212- if (x->mtdev)
1213- mtdev_close_delete(x->mtdev);
1214- freemem:
1215- evemu_delete(x->evemu);
1216- if (x->fptest)
1217- fclose(x->fptest);
1218- free(x);
1219- ge->impl = 0;
1220- return ret;
1221-}
1222-
1223-void GRAIL_PUBLIC grail_close(struct grail *ge, int fd)
1224-{
1225- struct grail_impl *x = ge->impl;
1226- gru_destroy(ge);
1227- gin_destroy(ge);
1228- utouch_frame_delete_engine(x->fh);
1229- if (x->mtdev)
1230- mtdev_close_delete(x->mtdev);
1231- evemu_delete(x->evemu);
1232- if (x->fptest)
1233- fclose(x->fptest);
1234- free(x);
1235- ge->impl = 0;
1236-}
1237-
1238 int GRAIL_PUBLIC grail_idle(struct grail *ge, int fd, int ms)
1239 {
1240 struct grail_impl *x = ge->impl;
1241@@ -156,6 +62,12 @@
1242 return ge->impl->touch;
1243 }
1244
1245+const struct grail_frame GRAIL_PUBLIC *
1246+grail_get_gesture_frame(const struct grail *ge)
1247+{
1248+ return ge->impl->frame;
1249+}
1250+
1251 static void flush_events(struct grail *ge)
1252 {
1253 struct grail_impl *impl = ge->impl;
1254@@ -169,89 +81,6 @@
1255 }
1256 }
1257
1258-static int skip_event(const struct input_event *ev, int count)
1259-{
1260- switch (ev->type) {
1261- case EV_ABS:
1262- return 1;
1263- case EV_KEY:
1264- return ev->code >= BTN_DIGI && ev->code < BTN_WHEEL;
1265- case EV_SYN:
1266- switch (ev->code) {
1267- case SYN_MT_REPORT:
1268- return 1;
1269- case SYN_REPORT:
1270- return count == 0;
1271- default:
1272- return 0;
1273- }
1274- default:
1275- return 0;
1276- }
1277-}
1278-
1279-static void flush_gestures(struct grail *ge)
1280-{
1281- struct grail_impl *impl = ge->impl;
1282- struct input_event iev;
1283- struct grail_event gev;
1284- int count = 0;
1285-
1286- while (!evbuf_empty(&impl->evbuf)) {
1287- evbuf_get(&impl->evbuf, &iev);
1288- if (skip_event(&iev, count))
1289- continue;
1290- if (ge->event)
1291- ge->event(ge, &iev);
1292- if (iev.type == EV_SYN && iev.code == SYN_REPORT)
1293- count = 0;
1294- else
1295- count++;
1296- }
1297- while (!grailbuf_empty(&impl->gbuf)) {
1298- grailbuf_get(&impl->gbuf, &gev);
1299- if (ge->gesture)
1300- ge->gesture(ge, &gev);
1301- }
1302-}
1303-
1304-static int gesture_timeout(struct grail *ge, const struct utouch_frame *frame)
1305-{
1306- struct gesture_recognizer *gru = ge->gru;
1307- struct gesture_inserter *gin = ge->gin;
1308-
1309- return grail_mask_count(gin->used, sizeof(gin->used)) == 0 &&
1310- frame->time - frame->mod_time > gru->move.fm[FM_X].hold_ms;
1311-}
1312-
1313-static void report_frame(struct grail *ge,
1314- const struct utouch_frame *touch,
1315- const struct input_event *syn)
1316-{
1317- struct grail_impl *impl = ge->impl;
1318- struct grail_event gev;
1319-
1320- impl->touch = touch;
1321-
1322- if (touch->num_active && !touch->prev->num_active) {
1323- impl->ongoing = 1;
1324- impl->gesture = 0;
1325- }
1326-
1327- if (!impl->ongoing)
1328- return;
1329-
1330- gin_frame_begin(ge, touch);
1331- gru_recognize(ge, touch);
1332- gin_frame_end(ge, touch);
1333-
1334- if (!grailbuf_empty(&impl->gbuf))
1335- impl->gesture = 1;
1336-
1337- if (touch->num_active == 0 || gesture_timeout(ge, touch))
1338- impl->ongoing &= impl->gesture;
1339-}
1340-
1341 static void grail_pump_mtdev(struct grail *ge, const struct input_event *ev)
1342 {
1343 struct grail_impl *impl = ge->impl;
1344@@ -262,14 +91,12 @@
1345 if (ev->type == EV_SYN || ev->type == EV_ABS || ev->type == EV_KEY) {
1346 frame = utouch_frame_pump_mtdev(impl->fh, ev);
1347 if (frame)
1348- report_frame(ge, frame, ev);
1349+ grail_pump_frame(ge, frame);
1350 }
1351
1352 if (ev->type == EV_SYN) {
1353 if (!impl->ongoing)
1354 flush_events(ge);
1355- if (impl->gesture)
1356- flush_gestures(ge);
1357 }
1358 }
1359
1360
1361=== modified file 'src/grail-bits.c'
1362--- src/grail-bits.c 2011-04-28 16:53:57 +0000
1363+++ src/grail-bits.c 2011-05-05 13:31:23 +0000
1364@@ -59,6 +59,16 @@
1365 *a++ &= ~*b++;
1366 }
1367
1368+int GRAIL_PUBLIC grail_mask_inner(const grail_mask_t *a, const grail_mask_t *b,
1369+ int bytes)
1370+{
1371+ int k;
1372+ for (k = 0; k < bytes; k++)
1373+ if (a[k] & b[k])
1374+ return 1;
1375+ return 0;
1376+}
1377+
1378 int GRAIL_PUBLIC grail_mask_count(const grail_mask_t *mask, int bytes)
1379 {
1380 int count = 0;
1381
1382=== modified file 'src/grail-frame.c'
1383--- src/grail-frame.c 2011-04-28 16:53:57 +0000
1384+++ src/grail-frame.c 2011-05-05 13:31:23 +0000
1385@@ -20,6 +20,8 @@
1386 ****************************************************************************/
1387
1388 #include "grail-impl.h"
1389+#include "grail-inserter.h"
1390+#include "grail-recognizer.h"
1391 #include <stdlib.h>
1392 #include <string.h>
1393 #include <math.h>
1394@@ -261,7 +263,7 @@
1395 int i, j, n = impl->num_touches;
1396 struct grail_element *best = 0;
1397
1398- if (touch->num_active < 3) {
1399+ if (!touch->num_active) {
1400 stop_slot(impl, slot);
1401 return;
1402 }
1403@@ -291,6 +293,8 @@
1404 best = s;
1405 }
1406 }
1407+ if (!best)
1408+ best = slots[0];
1409
1410 update_slot(impl, slot, best->transform[1], best->transform[0]);
1411 }
1412@@ -372,14 +376,75 @@
1413 }
1414 }
1415
1416+static int skip_event(const struct input_event *ev, int count)
1417+{
1418+ switch (ev->type) {
1419+ case EV_ABS:
1420+ return 1;
1421+ case EV_KEY:
1422+ return ev->code >= BTN_DIGI && ev->code < BTN_WHEEL;
1423+ case EV_SYN:
1424+ switch (ev->code) {
1425+ case SYN_MT_REPORT:
1426+ return 1;
1427+ case SYN_REPORT:
1428+ return count == 0;
1429+ default:
1430+ return 0;
1431+ }
1432+ default:
1433+ return 0;
1434+ }
1435+}
1436+
1437+static void flush_gestures(struct grail *ge)
1438+{
1439+ struct grail_impl *impl = ge->impl;
1440+ struct input_event iev;
1441+ struct grail_event gev;
1442+ int count = 0;
1443+
1444+ while (!evbuf_empty(&impl->evbuf)) {
1445+ evbuf_get(&impl->evbuf, &iev);
1446+ if (skip_event(&iev, count))
1447+ continue;
1448+ if (ge->event)
1449+ ge->event(ge, &iev);
1450+ if (iev.type == EV_SYN && iev.code == SYN_REPORT)
1451+ count = 0;
1452+ else
1453+ count++;
1454+ }
1455+ while (!grailbuf_empty(&impl->gbuf)) {
1456+ grailbuf_get(&impl->gbuf, &gev);
1457+ if (ge->gesture)
1458+ ge->gesture(ge, &gev);
1459+ }
1460+}
1461+
1462+static int gesture_timeout(struct grail *ge, const struct utouch_frame *frame)
1463+{
1464+ struct gesture_inserter *gin = ge->gin;
1465+ struct grail_impl *impl = ge->impl;
1466+
1467+ return grail_mask_count(gin->used, sizeof(gin->used)) == 0 &&
1468+ frame->time - frame->mod_time > impl->ctl->drop_x_ms;
1469+}
1470+
1471 const struct grail_frame GRAIL_PUBLIC *
1472 grail_pump_frame(grail_handle ge, const struct utouch_frame *touch)
1473 {
1474 struct grail_impl *impl = ge->impl;
1475- struct grail_frame *frame = impl->frames[impl->nextframe];
1476- const struct grail_frame *prev = frame->prev;
1477+ struct grail_frame *frame;
1478+ const struct grail_frame *prev;
1479 int i;
1480
1481+ if (!impl->frames)
1482+ return 0;
1483+
1484+ frame = impl->frames[impl->nextframe];
1485+ prev = frame->prev;
1486+
1487 if (touch->slot_revision == touch->prev->slot_revision &&
1488 !prev->num_ongoing)
1489 return 0;
1490@@ -394,5 +459,34 @@
1491
1492 impl->nextframe = (impl->nextframe + 1) % impl->num_frames;
1493
1494+ if (!ge->gesture)
1495+ return frame;
1496+
1497+ impl->touch = touch;
1498+ impl->frame = frame;
1499+
1500+ if (touch->num_active && !touch->prev->num_active) {
1501+ impl->ongoing = 1;
1502+ impl->gesture = 0;
1503+ }
1504+
1505+ if (!impl->ongoing)
1506+ return frame;
1507+
1508+ gin_frame_begin(ge, touch);
1509+
1510+ gru_recognize(ge, frame, touch);
1511+
1512+ gin_frame_end(ge, touch);
1513+
1514+ if (!grailbuf_empty(&impl->gbuf))
1515+ impl->gesture = 1;
1516+
1517+ if (touch->num_active == 0 || gesture_timeout(ge, touch))
1518+ impl->ongoing &= impl->gesture;
1519+
1520+ if (impl->gesture)
1521+ flush_gestures(ge);
1522+
1523 return frame;
1524 }
1525
1526=== removed file 'src/grail-gestures.c'
1527--- src/grail-gestures.c 2011-04-28 16:53:57 +0000
1528+++ src/grail-gestures.c 1970-01-01 00:00:00 +0000
1529@@ -1,210 +0,0 @@
1530-/*****************************************************************************
1531- *
1532- * grail - Gesture Recognition And Instantiation Library
1533- *
1534- * Copyright (C) 2010-2011 Canonical Ltd.
1535- *
1536- * This program is free software: you can redistribute it and/or modify it
1537- * under the terms of the GNU General Public License as published by the
1538- * Free Software Foundation, either version 3 of the License, or (at your
1539- * option) any later version.
1540- *
1541- * This program is distributed in the hope that it will be useful, but
1542- * WITHOUT ANY WARRANTY; without even the implied warranty of
1543- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
1544- * General Public License for more details.
1545- *
1546- * You should have received a copy of the GNU General Public License along
1547- * with this program. If not, see <http://www.gnu.org/licenses/>.
1548- *
1549- ****************************************************************************/
1550-
1551-#include "grail-recognizer.h"
1552-#include "grail-impl.h"
1553-#include <math.h>
1554-
1555-static const float FM_SN[DIM_FM] = { 1000, 1000, 1000, 1000 };
1556-static const float FM_BAR[DIM_FM] = { 50, 50, 50, 50 };
1557-static const grail_time_t FM_HOLD_MS[DIM_FM] = { 60, 60, 60, 60 };
1558-static const grail_time_t FM_BAR_MS[DIM_FM] = { 300, 300, 500, 500 };
1559-static const grail_time_t SAMPLE_MS = 10;
1560-static const float EPS = 1e-3;
1561-
1562-static void compute_position(float *x, float *y,
1563- const struct utouch_frame *frame)
1564-{
1565- int i, n = frame->num_active;
1566- *x = 0;
1567- *y = 0;
1568- if (n < 1)
1569- return;
1570- for (i = 0; i < n; i++) {
1571- const struct utouch_contact *t = frame->active[i];
1572- *x += t->x;
1573- *y += t->y;
1574- }
1575- *x /= n;
1576- *y /= n;
1577-}
1578-
1579-static float compute_radius(float x, float y,
1580- const struct utouch_frame *frame)
1581-{
1582- int i, n = frame->num_active;
1583- float r = 0, r2 = 0;
1584- if (n < 2)
1585- return r;
1586- for (i = 0; i < n; i++) {
1587- const struct utouch_contact *t = frame->active[i];
1588- float dx = t->x - x;
1589- float dy = t->y - y;
1590- r2 += dx * dx + dy * dy;
1591- }
1592- r2 /= n;
1593- r = sqrt(r2);
1594- return r;
1595-}
1596-
1597-static float compute_rotation(float x, float y, float r,
1598- const struct utouch_frame *frame)
1599-{
1600- int i, n = frame->num_active;
1601- float da = 0, darc2 = 0;
1602- if (n < 2)
1603- return da;
1604- for (i = 0; i < n; i++) {
1605- const struct utouch_contact *t = frame->active[i];
1606- const struct utouch_contact *ot = t->prev;
1607- float dx = t->x - x;
1608- float dy = t->y - y;
1609- float mx = t->x - ot->x;
1610- float my = t->y - ot->y;
1611- darc2 += dx * my - dy * mx;
1612- }
1613- darc2 /= n;
1614- da = darc2 / (r * r);
1615- return da;
1616-}
1617-
1618-static void move_reset(struct move_model *m, int i, float x, grail_time_t t)
1619-{
1620- struct filter_model *fm = &m->fm[i];
1621- fm->raw_delta = 0;
1622- fm->action_delta = 0;
1623- fm->velocity = 0;
1624- fm->value = x;
1625- fm->original = x;
1626- fm->original_ms = t;
1627- fm->sample = x;
1628- fm->sample_ms = t;
1629- m->tickle &= ~(1 << i);
1630- m->active &= ~(1 << i);
1631- m->timeout &= ~(1 << i);
1632-}
1633-
1634-static void move_update(struct move_model *m, int i, float x, grail_time_t t)
1635-{
1636- struct filter_model *fm = &m->fm[i];
1637- float dt = t - fm->sample_ms;
1638- fm->raw_delta = x - fm->value;
1639- fm->action_delta = fm->raw_delta;
1640- fm->value = x;
1641- if (dt > SAMPLE_MS) {
1642- fm->velocity = (x - fm->sample) / dt;
1643- fm->sample = x;
1644- fm->sample_ms = t;
1645- }
1646- if (fabs(fm->raw_delta) > EPS)
1647- m->tickle |= (1 << i);
1648- else
1649- m->tickle &= ~(1 << i);
1650- if (m->active & (1 << i))
1651- return;
1652- fm->action_delta = 0;
1653- if (fabs(x - fm->original) > fm->bar) {
1654- if (t - fm->original_ms > fm->hold_ms) {
1655- m->active |= (1 << i);
1656- fm->action_delta = x - fm->original;
1657- }
1658- } else if (t - fm->original_ms > fm->bar_ms) {
1659- m->timeout |= (1 << i);
1660- }
1661-}
1662-
1663-void gru_init_motion(struct grail *ge)
1664-{
1665- struct utouch_surface *s = utouch_frame_get_surface(ge->impl->fh);
1666- struct gesture_recognizer *gru = ge->gru;
1667- struct move_model *m = &gru->move;
1668- float D[DIM_FM];
1669- int i;
1670- D[FM_X] = s->mapped_max_x - s->mapped_min_x;
1671- D[FM_Y] = s->mapped_max_y - s->mapped_min_y;
1672- D[FM_R] = sqrt(D[FM_X] * D[FM_X] + D[FM_Y] * D[FM_Y]);
1673- D[FM_A] = 2 * M_PI;
1674- for (i = 0; i < DIM_FM; i++) {
1675- m->fm[i].fuzz = D[i] / FM_SN[i];
1676- m->fm[i].bar = D[i] / FM_BAR[i];
1677- m->fm[i].hold_ms = FM_HOLD_MS[i];
1678- m->fm[i].bar_ms = FM_BAR_MS[i];
1679- }
1680-}
1681-
1682-void gru_motion(struct grail *ge,
1683- const struct utouch_frame *frame)
1684-{
1685- const struct utouch_surface *s = utouch_frame_get_surface(ge->impl->fh);
1686- struct gesture_recognizer *gru = ge->gru;
1687- struct move_model *m = &gru->move;
1688- grail_time_t t = frame->time;
1689- float x, y, r, a;
1690-
1691- compute_position(&x, &y, frame);
1692- if (frame->prev->revision != frame->revision) {
1693- r = compute_radius(x, y, frame);
1694- a = 0;
1695- move_reset(m, FM_X, x, t);
1696- move_reset(m, FM_Y, y, t);
1697- move_reset(m, FM_R, r, t);
1698- move_reset(m, FM_A, a, t);
1699- m->single = 0;
1700- m->multi = 0;
1701- } else if (frame->num_active < 2) {
1702- r = 0;
1703- a = 0;
1704- move_update(m, FM_X, x, t);
1705- move_update(m, FM_Y, y, t);
1706- move_reset(m, FM_R, r, t);
1707- move_reset(m, FM_A, a, t);
1708- m->single = 1;
1709- m->multi = 0;
1710- } else {
1711- r = compute_radius(x, y, frame);
1712- a = m->fm[FM_A].value;
1713- if (!s->is_semi_mt)
1714- a += compute_rotation(x, y, r, frame);
1715- move_update(m, FM_X, x, t);
1716- move_update(m, FM_Y, y, t);
1717- move_update(m, FM_R, r, t);
1718- move_update(m, FM_A, a, t);
1719- m->single = 0;
1720- m->multi = 1;
1721- }
1722- m->ntouch = frame->num_active;
1723- m->time = t;
1724-}
1725-
1726-void gru_event(struct grail *ge, int gid,
1727- const struct move_model *m,
1728- const grail_prop_t *prop, int nprop)
1729-{
1730- gin_gid_event(ge, gid, m->fm[FM_X].value, m->fm[FM_Y].value, m->ntouch,
1731- prop, nprop, 0);
1732-}
1733-
1734-void gru_end(struct grail *ge, int gid, const struct move_model *m,
1735- const grail_prop_t *prop, int nprop)
1736-{
1737- gin_gid_end(ge, gid, m->fm[FM_X].value, m->fm[FM_Y].value, m->ntouch,
1738- prop, nprop);
1739-}
1740
1741=== removed file 'src/grail-gestures.h'
1742--- src/grail-gestures.h 2011-04-28 16:53:57 +0000
1743+++ src/grail-gestures.h 1970-01-01 00:00:00 +0000
1744@@ -1,115 +0,0 @@
1745-/*****************************************************************************
1746- *
1747- * grail - Gesture Recognition And Instantiation Library
1748- *
1749- * Copyright (C) 2010-2011 Canonical Ltd.
1750- *
1751- * This program is free software: you can redistribute it and/or modify it
1752- * under the terms of the GNU General Public License as published by the
1753- * Free Software Foundation, either version 3 of the License, or (at your
1754- * option) any later version.
1755- *
1756- * This program is distributed in the hope that it will be useful, but
1757- * WITHOUT ANY WARRANTY; without even the implied warranty of
1758- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
1759- * General Public License for more details.
1760- *
1761- * You should have received a copy of the GNU General Public License along
1762- * with this program. If not, see <http://www.gnu.org/licenses/>.
1763- *
1764- ****************************************************************************/
1765-
1766-#ifndef _GRAIL_GESTURES_H
1767-#define _GRAIL_GESTURES_H
1768-
1769-#include "grail-inserter.h"
1770-
1771-#define PRIO_POINTER 1
1772-#define PRIO_GESTURE 2
1773-#define PRIO_ENV 3
1774-#define PRIO_META 4
1775-#define PRIO_TAP 5
1776-
1777-#define DIM_FM 4
1778-
1779-#define FM_X 0
1780-#define FM_Y 1
1781-#define FM_R 2
1782-#define FM_A 3
1783-
1784-struct filter_model {
1785- float raw_delta;
1786- float action_delta;
1787- float velocity;
1788- float value;
1789- float original;
1790- float sample;
1791- float fuzz;
1792- float bar;
1793- grail_time_t original_ms;
1794- grail_time_t sample_ms;
1795- grail_time_t hold_ms;
1796- grail_time_t bar_ms;
1797-};
1798-
1799-struct move_model {
1800- struct filter_model fm[DIM_FM];
1801- int tickle, active, timeout;
1802- int single, multi, ntouch;
1803- grail_time_t time;
1804-};
1805-
1806-void gru_init_motion(struct grail *ge);
1807-void gru_motion(struct grail *ge,
1808- const struct utouch_frame *frame);
1809-void gru_event(struct grail *ge, int gid,
1810- const struct move_model *move,
1811- const grail_prop_t *prop, int nprop);
1812-void gru_end(struct grail *ge, int gid,
1813- const struct move_model *move,
1814- const grail_prop_t *prop, int nprop);
1815-
1816-struct combo_model {
1817- int active, gid;
1818- int mintouch, maxtouch;
1819- int nprop;
1820- grail_prop_t prop[DIM_GRAIL_PROP];
1821-};
1822-
1823-int gru_touch(struct grail *ge,
1824- const struct utouch_frame *frame);
1825-int gru_drag(struct grail *ge,
1826- const struct utouch_frame *frame);
1827-int gru_pinch(struct grail *ge,
1828- const struct utouch_frame *frame);
1829-int gru_rotate(struct grail *ge,
1830- const struct utouch_frame *frame);
1831-
1832-static inline int out_of_bounds(const struct combo_model *s,
1833- const struct move_model *m)
1834-{
1835- return m->ntouch < s->mintouch || m->ntouch > s->maxtouch;
1836-}
1837-
1838-int gru_wintouch(struct grail *ge,
1839- const struct utouch_frame *frame);
1840-int gru_windrag(struct grail *ge,
1841- const struct utouch_frame *frame);
1842-int gru_winpinch(struct grail *ge,
1843- const struct utouch_frame *frame);
1844-int gru_winrotate(struct grail *ge,
1845- const struct utouch_frame *frame);
1846-
1847-struct tapping_model {
1848- grail_time_t start;
1849- int mintouch, maxtouch;
1850- int active, gid, tap;
1851- int nprop;
1852- grail_prop_t prop[DIM_GRAIL_PROP];
1853-};
1854-
1855-int gru_tapping(struct grail *ge,
1856- const struct utouch_frame *frame);
1857-
1858-#endif
1859-
1860
1861=== modified file 'src/grail-impl.h'
1862--- src/grail-impl.h 2011-04-28 16:53:57 +0000
1863+++ src/grail-impl.h 2011-05-05 13:31:23 +0000
1864@@ -59,6 +59,35 @@
1865
1866 void destroy_grail2(struct grail_impl *x);
1867
1868+/*
1869+ * struct grail_impl - gesture engine state
1870+ * @evemu: evemu instance (grail1 only)
1871+ * @mtdev: mtdev instance (grail1 only)
1872+ * @fh: frame handler instance (grail1: owner, grail2: referenced)
1873+ * @touch: current touch frame
1874+ * @evbuf: input event buffer (grail1 only)
1875+ * @gbuf: gesture event buffer (grail1 only)
1876+ * @filter_abs: if true, abs events are filtered (grail1 only)
1877+ * @ongoing: if true, a gesture is ongoing (grail1 only)
1878+ * @gesture: if true, a gesture is active (events sent) (grail1 only)
1879+ * @fptest: file pointer used for data input from file (grail1 only)
1880+ * @ctl: mutable grail control structure
1881+ * @select: grail event secltion callback
1882+ * @num_frames: number of gestures frames in cyclic buffer
1883+ * @num_slots: number of allocated gesture element slots
1884+ * @num_touches: number of touches supported for frame instance
1885+ * @nextframe: index of next frame to be (re)used
1886+ * @seqid: next gesture frame sequence number
1887+ * @control_size: maximum number of bytes for grail_control struct
1888+ * @frame_size: maximum number of bytes for grail_frame struct
1889+ * @slot_size: maximum number of bytes for grail_element struct
1890+ * @frames: cyclic array of allocated gesture frames
1891+ * @frame: current gesture frame (grail1 only)
1892+ *
1893+ * The grail engine supports both the grail1 interface, with
1894+ * open/close and event pulling, and the grail2 interface, with
1895+ * new/delete, gesture frames and event pumping.
1896+ */
1897 struct grail_impl {
1898 struct evemu_device *evemu;
1899 struct mtdev *mtdev;
1900@@ -82,6 +111,7 @@
1901 unsigned int frame_size;
1902 unsigned int slot_size;
1903 struct grail_frame **frames;
1904+ const struct grail_frame *frame;
1905 };
1906
1907 #endif
1908
1909=== modified file 'src/grail-init.c'
1910--- src/grail-init.c 2011-04-28 16:53:57 +0000
1911+++ src/grail-init.c 2011-05-05 13:31:23 +0000
1912@@ -36,12 +36,13 @@
1913 c->bar_center_y = 0.03;
1914 c->bar_drag_x = 0.03;
1915 c->bar_drag_y = 0.03;
1916- c->bar_scale = 0.3;
1917- c->bar_angle = 0.1;
1918+ c->bar_scale = 0.2;
1919+ c->bar_angle = 0.2;
1920 c->drop_x_ms = 300;
1921 c->drop_y_ms = 300;
1922 c->drop_scale_ms = 300;
1923 c->drop_angle_ms = 300;
1924+ c->tap_time_ms = 300;
1925
1926 return c;
1927 }
1928@@ -206,6 +207,7 @@
1929 {
1930 struct grail *ge;
1931 struct grail_impl *x;
1932+ int ret;
1933
1934 ge = calloc(1, sizeof(*ge));
1935 if (!ge)
1936@@ -219,8 +221,17 @@
1937 goto out;
1938
1939 ge->impl = x;
1940+
1941+ ret = gin_init(ge);
1942+ if (ret)
1943+ goto out;
1944+ ret = gru_init(ge);
1945+ if (ret)
1946+ goto freegin;
1947+
1948 return ge;
1949-
1950+ freegin:
1951+ gin_destroy(ge);
1952 out:
1953 free(x);
1954 free(ge);
1955@@ -229,6 +240,8 @@
1956
1957 void GRAIL_PUBLIC grail_delete(grail_handle ge)
1958 {
1959+ gru_destroy(ge);
1960+ gin_destroy(ge);
1961 destroy_grail2(ge->impl);
1962 free(ge->impl);
1963 free(ge);
1964
1965=== modified file 'src/grail-inserter.c'
1966--- src/grail-inserter.c 2011-04-28 16:53:57 +0000
1967+++ src/grail-inserter.c 2011-05-05 13:31:23 +0000
1968@@ -19,7 +19,6 @@
1969 *
1970 ****************************************************************************/
1971
1972-#include "grail-gestures.h"
1973 #include "grail-inserter.h"
1974 #include "grail-impl.h"
1975 #include <malloc.h>
1976@@ -38,18 +37,6 @@
1977 return -1;
1978 }
1979
1980-static int mask_overlap(const grail_mask_t *a, const grail_mask_t *b,
1981- int bytes)
1982-{
1983- int i;
1984-
1985- for (i = 0; i < bytes; i++)
1986- if (a[i] & b[i])
1987- return 1;
1988-
1989- return 0;
1990-}
1991-
1992 // todo: spanning tree for multi-user case
1993 static void setup_new_gestures(struct grail *ge,
1994 const struct utouch_frame *frame)
1995@@ -158,15 +145,6 @@
1996
1997 grail_mask_foreach(i, gin->used, sizeof(gin->used)) {
1998 struct slot_state *s = &gin->state[i];
1999- if (!s->timeout)
2000- continue;
2001- if (mask_overlap(keep, s->span, sizeof(keep)))
2002- continue;
2003- gin_gid_discard(ge, s->id);
2004- }
2005-
2006- grail_mask_foreach(i, gin->used, sizeof(gin->used)) {
2007- struct slot_state *s = &gin->state[i];
2008 struct gesture_event ev;
2009 grail_mask_set(gin->types, s->type);
2010 if (s->priority < hold[s->slice] && !s->sent)
2011@@ -203,7 +181,6 @@
2012 s->priority = priority;
2013 s->slice = 0;
2014 }
2015- s->timeout = 0;
2016 s->sent = 0;
2017 s->id = gin->gestureid++ & MAX_GESTURE_ID;
2018 s->status = GRAIL_STATUS_BEGIN;
2019@@ -231,13 +208,6 @@
2020 grail_mask_set(gin->unused, i);
2021 }
2022
2023-void gin_gid_timeout(struct grail *ge, int gid)
2024-{
2025- int i = find_gslot(ge->gin, gid);
2026- if (i >= 0)
2027- ge->gin->state[i].timeout = 1;
2028-}
2029-
2030 void gin_gid_event(struct grail *ge, int gid,
2031 float x, float y, int ntouch,
2032 const grail_prop_t *prop, int nprop,
2033@@ -298,7 +268,4 @@
2034 s->mapped_min_y = tmin->y;
2035 s->mapped_max_x = tmax->x;
2036 s->mapped_max_y = tmax->y;
2037-
2038- if (ge->gru)
2039- gru_init_motion(ge);
2040 }
2041
2042=== modified file 'src/grail-inserter.h'
2043--- src/grail-inserter.h 2011-04-28 16:53:57 +0000
2044+++ src/grail-inserter.h 2011-05-05 13:31:23 +0000
2045@@ -33,11 +33,27 @@
2046
2047 #define DIM_CLIENT 32
2048
2049+/*
2050+ * struct slot_state - gesture state
2051+ * @type: gesture type of this gesture
2052+ * @priority: priority of this gesture
2053+ * @slice: 0: normal gesture, 1: touch gesture
2054+ * @sent: events have been sent for this gesture
2055+ * @id: unique identifier of this gesture
2056+ * @status: gesture status (begin, update, end)
2057+ * @nclient: number of clients listening to this gesture
2058+ * @client_id: array of clients listening to this gesture
2059+ * @span: bitmask of contact slots used in this gesture
2060+ * @buf: gesture event buffer
2061+ *
2062+ * This structure keeps track of an individual gesture, from the
2063+ * tentative state before being qualified as a gesture, through the
2064+ * beginning of the gesture to the end of the gesture.
2065+ */
2066 struct slot_state {
2067 int type;
2068 int priority;
2069 int slice;
2070- int timeout;
2071 int sent;
2072 int id;
2073 int status;
2074@@ -47,6 +63,20 @@
2075 struct gebuf buf;
2076 };
2077
2078+/*
2079+ * struct gesture_inserter - gesture inserter state
2080+ * @state: array of simultaneous gesture states
2081+ * @types: bitmask of ongoing gesture types
2082+ * @unused: bitmask of unused gesture slots
2083+ * @fresh: bitmask of slots initiated in this frame
2084+ * @used: bitmask of used gesture slots
2085+ * @time: time of current gesture frame
2086+ * @gestureid: next gesture id to be used
2087+ * @grab_active: used to signal an active system gesture grab
2088+ * @grab_client: the grabbing client
2089+ *
2090+ * This is the state of the gesture inserter.
2091+ */
2092 struct gesture_inserter {
2093 struct slot_state state[DIM_INSTANCE];
2094 grail_mask_t types[DIM_GRAIL_TYPE_BYTES];
2095@@ -80,7 +110,6 @@
2096 int gin_gid_begin(struct grail *ge, int type, int priority,
2097 const struct utouch_frame *frame);
2098 void gin_gid_discard(struct grail *ge, int gid);
2099-void gin_gid_timeout(struct grail *ge, int gid);
2100
2101 void gin_gid_event(struct grail *ge, int gid,
2102 float x, float y, int ntouch,
2103
2104=== modified file 'src/grail-legacy.c'
2105--- src/grail-legacy.c 2011-04-28 16:53:57 +0000
2106+++ src/grail-legacy.c 2011-05-05 13:31:23 +0000
2107@@ -31,6 +31,111 @@
2108
2109 #ifndef GRAIL_NO_LEGACY_ABI
2110
2111+#define DIM_FRAMES 100
2112+#define FRAME_RATE 100
2113+
2114+int GRAIL_PUBLIC grail_open(struct grail *ge, int fd)
2115+{
2116+ struct grail_impl *x;
2117+ struct stat fs;
2118+ int ret;
2119+
2120+ ret = fstat(fd, &fs);
2121+ if (ret)
2122+ return ret;
2123+
2124+ x = calloc(1, sizeof(*x));
2125+ if (!x)
2126+ return -ENOMEM;
2127+
2128+ if (!fs.st_rdev)
2129+ x->fptest = fdopen(fd, "r");
2130+
2131+ x->evemu = evemu_new(x->fptest ? "fptest" : 0);
2132+ if (!x->evemu) {
2133+ ret = -ENOMEM;
2134+ goto freemem;
2135+ }
2136+ if (x->fptest)
2137+ ret = evemu_read(x->evemu, x->fptest) <= 0;
2138+ else
2139+ ret = evemu_extract(x->evemu, fd);
2140+ if (ret)
2141+ goto freemem;
2142+ if (!utouch_frame_is_supported_mtdev(x->evemu)) {
2143+ ret = -ENODEV;
2144+ goto freemem;
2145+ }
2146+
2147+ if (!x->fptest) {
2148+ x->mtdev = mtdev_new_open(fd);
2149+ if (!x->mtdev) {
2150+ ret = -ENOMEM;
2151+ goto freemem;
2152+ }
2153+ }
2154+ x->fh = utouch_frame_new_engine(DIM_FRAMES, DIM_TOUCH, FRAME_RATE);
2155+ if (!x->fh) {
2156+ ret = -ENOMEM;
2157+ goto freedev;
2158+ }
2159+ ret = utouch_frame_init_mtdev(x->fh, x->evemu);
2160+ if (ret)
2161+ goto freeframe;
2162+
2163+ ret = create_grail2(x, x->fh, DIM_FRAMES, NULL,
2164+ GRAIL_VERSION,
2165+ sizeof(struct grail_control),
2166+ sizeof(struct grail_frame),
2167+ sizeof(struct grail_element));
2168+ if (ret)
2169+ goto freeframe;
2170+
2171+ ge->impl = x;
2172+
2173+ ret = gin_init(ge);
2174+ if (ret)
2175+ goto freegrail2;
2176+
2177+ ret = gru_init(ge);
2178+ if (ret)
2179+ goto freegin;
2180+
2181+ return 0;
2182+ freegin:
2183+ gin_destroy(ge);
2184+ freegrail2:
2185+ destroy_grail2(x);
2186+ freeframe:
2187+ utouch_frame_delete_engine(x->fh);
2188+ freedev:
2189+ if (x->mtdev)
2190+ mtdev_close_delete(x->mtdev);
2191+ freemem:
2192+ evemu_delete(x->evemu);
2193+ if (x->fptest)
2194+ fclose(x->fptest);
2195+ free(x);
2196+ ge->impl = 0;
2197+ return ret;
2198+}
2199+
2200+void GRAIL_PUBLIC grail_close(struct grail *ge, int fd)
2201+{
2202+ struct grail_impl *x = ge->impl;
2203+ gru_destroy(ge);
2204+ gin_destroy(ge);
2205+ destroy_grail2(x);
2206+ utouch_frame_delete_engine(x->fh);
2207+ if (x->mtdev)
2208+ mtdev_close_delete(x->mtdev);
2209+ evemu_delete(x->evemu);
2210+ if (x->fptest)
2211+ fclose(x->fptest);
2212+ free(x);
2213+ ge->impl = 0;
2214+}
2215+
2216 void GRAIL_PUBLIC grail_filter_abs_events(struct grail *ge, int usage)
2217 {
2218 struct grail_impl *x = ge->impl;
2219
2220=== modified file 'src/grail-recognizer.c'
2221--- src/grail-recognizer.c 2011-04-28 16:53:57 +0000
2222+++ src/grail-recognizer.c 2011-05-05 13:31:23 +0000
2223@@ -23,6 +23,177 @@
2224 #include <string.h>
2225 #include <malloc.h>
2226 #include <errno.h>
2227+#include <math.h>
2228+
2229+static const int MAX_TOUCH_GESTURE = 5;
2230+
2231+static void touch_props(const struct gesture_inserter *gin,
2232+ struct combo_model *s, const struct grail_element *m,
2233+ const struct utouch_frame *frame)
2234+{
2235+ s->nprop = 0;
2236+}
2237+
2238+static void drag_props(const struct gesture_inserter *gin,
2239+ struct combo_model *s, const struct grail_element *m,
2240+ const struct utouch_frame *frame)
2241+{
2242+ s->prop[GRAIL_PROP_DRAG_DX] = m->center.x - m->prev->center.x;
2243+ s->prop[GRAIL_PROP_DRAG_DY] = m->center.y - m->prev->center.y;
2244+ s->prop[GRAIL_PROP_DRAG_VX] = m->velocity.x;
2245+ s->prop[GRAIL_PROP_DRAG_VY] = m->velocity.y;
2246+ s->prop[GRAIL_PROP_DRAG_X] = m->center.x - m->start_center.x;
2247+ s->prop[GRAIL_PROP_DRAG_Y] = m->center.y - m->start_center.x;
2248+ s->nprop = 6;
2249+}
2250+
2251+static void pinch_props(const struct gesture_inserter *gin,
2252+ struct combo_model *s, const struct grail_element *m,
2253+ const struct utouch_frame *frame)
2254+{
2255+ s->prop[GRAIL_PROP_PINCH_DR] =
2256+ sqrt(m->radius2) - sqrt(m->prev->radius2);
2257+ s->prop[GRAIL_PROP_PINCH_VR] = 0;
2258+ s->prop[GRAIL_PROP_PINCH_R] = sqrt(m->radius2);
2259+ s->nprop = 3;
2260+}
2261+
2262+static void rotate_props(const struct gesture_inserter *gin,
2263+ struct combo_model *s, const struct grail_element *m,
2264+ const struct utouch_frame *frame)
2265+{
2266+ s->prop[GRAIL_PROP_ROTATE_DA] = m->angle - m->prev->angle;
2267+ s->prop[GRAIL_PROP_ROTATE_VA] = 0;
2268+ s->prop[GRAIL_PROP_ROTATE_A] = m->angle;
2269+ s->nprop = 3;
2270+}
2271+
2272+static void tap_props(const struct gesture_inserter *gin,
2273+ struct combo_model *s, const struct grail_element *m,
2274+ const struct utouch_frame *frame)
2275+{
2276+ s->prop[GRAIL_PROP_TAP_DT] = frame->time - s->start;
2277+ s->prop[GRAIL_PROP_TAP_X] = m->center.x;
2278+ s->prop[GRAIL_PROP_TAP_Y] = m->center.y;
2279+ s->nprop = 3;
2280+}
2281+
2282+static const struct gesture_handler touch_handler = {
2283+ 0,
2284+ {
2285+ { -1, 0, 0, 0 },
2286+ { GRAIL_TYPE_TOUCH1, 1, 1, PRIO_DRAG },
2287+ { GRAIL_TYPE_TOUCH2, 2, 2, PRIO_DRAG },
2288+ { GRAIL_TYPE_TOUCH3, 3, 3, PRIO_DRAG },
2289+ { GRAIL_TYPE_TOUCH4, 4, 4, PRIO_DRAG },
2290+ { GRAIL_TYPE_TOUCH5, 5, 5, PRIO_DRAG }
2291+ },
2292+ touch_props
2293+};
2294+
2295+static const struct gesture_handler drag_handler = {
2296+ GRAIL_EXPECT_DRAG_X | GRAIL_EXPECT_DRAG_Y,
2297+ {
2298+ { -1, 0, 0, 0 },
2299+ { GRAIL_TYPE_DRAG1, 1, 1, PRIO_DRAG },
2300+ { GRAIL_TYPE_DRAG2, 2, 2, PRIO_DRAG },
2301+ { GRAIL_TYPE_DRAG3, 3, 3, PRIO_DRAG },
2302+ { GRAIL_TYPE_DRAG4, 4, 4, PRIO_DRAG },
2303+ { GRAIL_TYPE_DRAG5, 5, 5, PRIO_DRAG }
2304+ },
2305+ drag_props
2306+};
2307+
2308+static const struct gesture_handler pinch_handler = {
2309+ GRAIL_EXPECT_SCALE,
2310+ {
2311+ { -1, 0, 0, 0 },
2312+ { -1, 0, 0, 0 },
2313+ { GRAIL_TYPE_PINCH2, 2, 2, PRIO_PINCH },
2314+ { GRAIL_TYPE_PINCH3, 3, 3, PRIO_PINCH },
2315+ { GRAIL_TYPE_PINCH4, 4, 4, PRIO_PINCH },
2316+ { GRAIL_TYPE_PINCH5, 5, 5, PRIO_PINCH }
2317+ },
2318+ pinch_props
2319+};
2320+
2321+static const struct gesture_handler rotate_handler = {
2322+ GRAIL_EXPECT_ANGLE,
2323+ {
2324+ { -1, 0, 0, 0 },
2325+ { -1, 0, 0, 0 },
2326+ { GRAIL_TYPE_ROTATE2, 2, 2, PRIO_ROTATE },
2327+ { GRAIL_TYPE_ROTATE3, 3, 3, PRIO_ROTATE },
2328+ { GRAIL_TYPE_ROTATE4, 4, 4, PRIO_ROTATE },
2329+ { GRAIL_TYPE_ROTATE5, 5, 5, PRIO_ROTATE }
2330+ },
2331+ rotate_props
2332+};
2333+
2334+static const struct gesture_handler tap_handler = {
2335+ GRAIL_EXPECT_MASK,
2336+ {
2337+ { -1, 0, 0, 0 },
2338+ { GRAIL_TYPE_TAP1, 1, 1, PRIO_TAP },
2339+ { GRAIL_TYPE_TAP2, 2, 2, PRIO_TAP },
2340+ { GRAIL_TYPE_TAP3, 3, 3, PRIO_TAP },
2341+ { GRAIL_TYPE_TAP4, 4, 4, PRIO_TAP },
2342+ { GRAIL_TYPE_TAP5, 5, 5, PRIO_TAP }
2343+ },
2344+ tap_props
2345+};
2346+
2347+static const struct gesture_handler wintouch_handler = {
2348+ 0,
2349+ {
2350+ { -1, 0, 0, 0 },
2351+ { -1, 0, 0, 0 },
2352+ { -1, 0, 0, 0 },
2353+ { GRAIL_TYPE_ETOUCH, 1, 3, PRIO_EDRAG },
2354+ { GRAIL_TYPE_MTOUCH, 1, 4, PRIO_MDRAG },
2355+ { -1, 0, 0, 0 },
2356+ },
2357+ touch_props
2358+};
2359+
2360+static const struct gesture_handler windrag_handler = {
2361+ GRAIL_EXPECT_DRAG_X | GRAIL_EXPECT_DRAG_Y,
2362+ {
2363+ { -1, 0, 0, 0 },
2364+ { -1, 0, 0, 0 },
2365+ { -1, 0, 0, 0 },
2366+ { GRAIL_TYPE_EDRAG, 1, 3, PRIO_EDRAG },
2367+ { GRAIL_TYPE_MDRAG, 1, 4, PRIO_MDRAG },
2368+ { -1, 0, 0, 0 },
2369+ },
2370+ drag_props
2371+};
2372+
2373+static const struct gesture_handler winpinch_handler = {
2374+ GRAIL_EXPECT_SCALE,
2375+ {
2376+ { -1, 0, 0, 0 },
2377+ { -1, 0, 0, 0 },
2378+ { -1, 0, 0, 0 },
2379+ { GRAIL_TYPE_EPINCH, 2, 3, PRIO_EPINCH },
2380+ { GRAIL_TYPE_MPINCH, 2, 4, PRIO_MPINCH },
2381+ { -1, 0, 0, 0 },
2382+ },
2383+ pinch_props
2384+};
2385+
2386+static const struct gesture_handler winrotate_handler = {
2387+ GRAIL_EXPECT_ANGLE,
2388+ {
2389+ { -1, 0, 0, 0 },
2390+ { -1, 0, 0, 0 },
2391+ { -1, 0, 0, 0 },
2392+ { GRAIL_TYPE_EROTATE, 2, 3, PRIO_EROTATE },
2393+ { GRAIL_TYPE_MROTATE, 2, 4, PRIO_MROTATE },
2394+ { -1, 0, 0, 0 },
2395+ },
2396+ rotate_props
2397+};
2398
2399 int gru_init(struct grail *ge)
2400 {
2401@@ -30,8 +201,18 @@
2402 gru = calloc(1, sizeof(struct gesture_recognizer));
2403 if (!gru)
2404 return -ENOMEM;
2405+
2406+ gru->touch.handler = &touch_handler;
2407+ gru->drag.handler = &drag_handler;
2408+ gru->pinch.handler = &pinch_handler;
2409+ gru->rotate.handler = &rotate_handler;
2410+ gru->tapping.handler = &tap_handler;
2411+ gru->wintouch.handler = &wintouch_handler;
2412+ gru->windrag.handler = &windrag_handler;
2413+ gru->winpinch.handler = &winpinch_handler;
2414+ gru->winrotate.handler = &winrotate_handler;
2415+
2416 ge->gru = gru;
2417- gru_init_motion(ge);
2418 return 0;
2419 }
2420
2421@@ -41,18 +222,166 @@
2422 ge->gru = NULL;
2423 }
2424
2425-void gru_recognize(struct grail *ge, const struct utouch_frame *frame)
2426-{
2427- if (!ge->gin || !ge->gru)
2428- return;
2429- gru_motion(ge, frame);
2430- gru_touch(ge, frame);
2431- gru_drag(ge, frame);
2432- gru_pinch(ge, frame);
2433- gru_rotate(ge, frame);
2434- gru_wintouch(ge, frame);
2435- gru_windrag(ge, frame);
2436- gru_winpinch(ge, frame);
2437- gru_winrotate(ge, frame);
2438- gru_tapping(ge, frame);
2439+static void set_props(struct grail *ge,
2440+ struct combo_model *s,
2441+ const struct utouch_frame *frame)
2442+{
2443+ const struct gesture_handler *gh = s->handler;
2444+ gh->set_props(ge->gin, s, ge->gru->move, frame);
2445+ s->nprop += gin_add_contact_props(ge->gin, s->prop + s->nprop, frame);
2446+}
2447+
2448+static int gru_touch_handler(struct grail *ge,
2449+ struct combo_model *state,
2450+ const struct utouch_frame *frame)
2451+{
2452+ struct gesture_recognizer *gru = ge->gru;
2453+ struct gesture_inserter *gin = ge->gin;
2454+ struct grail_element *move = gru->move;
2455+ const struct gesture_handler *gh = state->handler;
2456+ int ntouch = move->num_touches;
2457+ if (frame->slot_revision != frame->prev->slot_revision) {
2458+ if (state->active) {
2459+ gin_gid_end(ge, state->gid, move->center.x,
2460+ move->center.y, ntouch,
2461+ state->prop, state->nprop);
2462+ state->active = 0;
2463+ }
2464+ }
2465+ if (ntouch > MAX_TOUCH_GESTURE)
2466+ return 0;
2467+ if (!state->active) {
2468+ struct gesture_head h = gh->getype[ntouch];
2469+ if (h.type < 0)
2470+ return 0;
2471+ state->gid = gin_gid_begin(ge, h.type, -h.priority, frame);
2472+ state->mintouch = h.mintouch;
2473+ state->maxtouch = h.maxtouch;
2474+ state->active = 1;
2475+ }
2476+ set_props(ge, state, frame);
2477+ gin_gid_event(ge, state->gid, move->center.x, move->center.y,
2478+ ntouch, state->prop, state->nprop, 0);
2479+ return 1;
2480+}
2481+
2482+static int gru_gesture_handler(struct grail *ge,
2483+ struct combo_model *state,
2484+ const struct utouch_frame *frame)
2485+{
2486+ struct gesture_recognizer *gru = ge->gru;
2487+ struct gesture_inserter *gin = ge->gin;
2488+ struct grail_element *move = gru->move;
2489+ const struct gesture_handler *gh = state->handler;
2490+ int expect = move->expect_mask & gh->fm_mask;
2491+ int active = move->active_mask & gh->fm_mask;
2492+ int ntouch = move->num_touches;
2493+ if (state->active &&
2494+ (!expect || ntouch < state->mintouch || ntouch > state->maxtouch)) {
2495+ gin_gid_end(ge, state->gid, move->center.x,
2496+ move->center.y, ntouch,
2497+ state->prop, state->nprop);
2498+ state->active = 0;
2499+ return 0;
2500+ }
2501+ if (!expect || ntouch > MAX_TOUCH_GESTURE)
2502+ return 0;
2503+ if (!state->active) {
2504+ struct gesture_head h = gh->getype[ntouch];
2505+ if (h.type < 0)
2506+ return 0;
2507+ state->gid = gin_gid_begin(ge, h.type, h.priority, frame);
2508+ state->mintouch = h.mintouch;
2509+ state->maxtouch = h.maxtouch;
2510+ state->active = 1;
2511+ }
2512+ if (!active)
2513+ return 0;
2514+ set_props(ge, state, frame);
2515+ gin_gid_event(ge, state->gid, move->center.x, move->center.y,
2516+ ntouch, state->prop, state->nprop, 0);
2517+ return 1;
2518+}
2519+
2520+static int gru_tap_handler(struct grail *ge,
2521+ struct combo_model *state,
2522+ const struct utouch_frame *frame)
2523+{
2524+ const struct grail_control *ctl = ge->impl->ctl;
2525+ struct gesture_recognizer *gru = ge->gru;
2526+ struct grail_element *move = gru->move;
2527+ const struct gesture_handler *gh = state->handler;
2528+ int active = move->active_mask & gh->fm_mask;
2529+ int ntouch = move->num_touches;
2530+ if (frame->num_active && !frame->prev->num_active) {
2531+ state->mintouch = 0;
2532+ state->maxtouch = 0;
2533+ }
2534+ if (ntouch > state->maxtouch) {
2535+ if (state->active) {
2536+ gin_gid_discard(ge, state->gid);
2537+ state->active = 0;
2538+ }
2539+ state->start = frame->time;
2540+ state->maxtouch = ntouch;
2541+ set_props(ge, state, frame);
2542+ if (state->maxtouch <= MAX_TOUCH_GESTURE) {
2543+ struct gesture_head h = gh->getype[ntouch];
2544+ if (h.type < 0)
2545+ return 0;
2546+ state->gid = gin_gid_begin(ge, h.type, h.priority,
2547+ frame);
2548+ state->active = 1;
2549+ }
2550+ return 0;
2551+ }
2552+ if (!state->active) {
2553+ state->mintouch = ntouch;
2554+ return 0;
2555+ }
2556+ if (active || frame->time - state->start > ctl->tap_time_ms) {
2557+ gin_gid_discard(ge, state->gid);
2558+ state->mintouch = ntouch;
2559+ state->maxtouch = ntouch;
2560+ state->active = 0;
2561+ return 0;
2562+ }
2563+ if (ntouch <= state->mintouch) {
2564+ float x = state->prop[GRAIL_PROP_TAP_X];
2565+ float y = state->prop[GRAIL_PROP_TAP_Y];
2566+ float t = frame->time - state->start;
2567+ state->prop[GRAIL_PROP_TAP_DT] = t;
2568+ gin_gid_event(ge, state->gid, x, y, state->maxtouch,
2569+ state->prop, state->nprop, 1);
2570+ state->mintouch = ntouch;
2571+ state->maxtouch = ntouch;
2572+ state->active = 0;
2573+ return 1;
2574+ }
2575+ if (!ntouch)
2576+ return 0;
2577+ state->prop[GRAIL_PROP_TAP_DT] = frame->time - state->start;
2578+ return 0;
2579+}
2580+
2581+void gru_recognize(struct grail *ge,
2582+ const struct grail_frame *frame,
2583+ const struct utouch_frame *touch)
2584+{
2585+ struct gesture_recognizer *gru = ge->gru;
2586+
2587+ if (frame && frame->num_ongoing)
2588+ gru->slot = frame->ongoing[frame->num_ongoing - 1]->slot;
2589+
2590+ gru->move = frame->slots[gru->slot];
2591+
2592+ gru_touch_handler(ge, &gru->touch, touch);
2593+ gru_gesture_handler(ge, &gru->drag, touch);
2594+ gru_gesture_handler(ge, &gru->pinch, touch);
2595+ gru_gesture_handler(ge, &gru->rotate, touch);
2596+ gru_touch_handler(ge, &gru->wintouch, touch);
2597+ gru_gesture_handler(ge, &gru->windrag, touch);
2598+ gru_gesture_handler(ge, &gru->winpinch, touch);
2599+ gru_gesture_handler(ge, &gru->winrotate, touch);
2600+ gru_tap_handler(ge, &gru->tapping, touch);
2601 }
2602
2603=== modified file 'src/grail-recognizer.h'
2604--- src/grail-recognizer.h 2011-04-28 16:53:57 +0000
2605+++ src/grail-recognizer.h 2011-05-05 13:31:23 +0000
2606@@ -22,10 +22,60 @@
2607 #ifndef _GRAIL_RECOGNIZER_H
2608 #define _GRAIL_RECOGNIZER_H
2609
2610-#include "grail-gestures.h"
2611-
2612+#include "grail-inserter.h"
2613+
2614+#define PRIO_POINTER 1
2615+#define PRIO_PINCH 2
2616+#define PRIO_ROTATE 3
2617+#define PRIO_DRAG 3
2618+#define PRIO_EPINCH 4
2619+#define PRIO_EROTATE 5
2620+#define PRIO_EDRAG 5
2621+#define PRIO_MPINCH 6
2622+#define PRIO_MROTATE 7
2623+#define PRIO_MDRAG 7
2624+#define PRIO_TAP 8
2625+
2626+/*
2627+ * struct combo_model - gesture primitive state
2628+ * @start: time this primitive started
2629+ * @active: true if this primitive is active
2630+ * @gid: gesture slot used for this primitive
2631+ * @mintouch: number of touches below this value ends the primitive
2632+ * @maxtouch: number of touches above this value ends the primitive
2633+ * @nprop: number of properties of this primitive
2634+ * @handler: pointer to gesture handler for this primitive
2635+ *
2636+ * This structure keeps track of an individual gesture primitive.
2637+ */
2638+struct combo_model {
2639+ grail_time_t start;
2640+ int active, gid;
2641+ int mintouch, maxtouch;
2642+ int nprop;
2643+ grail_prop_t prop[DIM_GRAIL_PROP];
2644+ const struct gesture_handler *handler;
2645+};
2646+
2647+/*
2648+ * struct gesture_recognizer - gesture recognizer state
2649+ * @slot: touch slot of current touch frame
2650+ * @move: the grail element used for all gestures
2651+ * @touch: touch primitive state
2652+ * @drag: drag primitive state
2653+ * @pinch: pinch primitive state
2654+ * @rotate: rotate primitive state
2655+ * @wintouch: env/meta touch primitive state
2656+ * @windrag: env/meta drag primitive state
2657+ * @winpinch: env/meta pinch primitive state
2658+ * @winrotate: env/meta rotate primitive state
2659+ * @tapping: tapping gesture primitive state
2660+ *
2661+ * This is the state of the gesture recognizer.
2662+ */
2663 struct gesture_recognizer {
2664- struct move_model move;
2665+ int slot;
2666+ struct grail_element *move;
2667 struct combo_model touch;
2668 struct combo_model drag;
2669 struct combo_model pinch;
2670@@ -34,11 +84,45 @@
2671 struct combo_model windrag;
2672 struct combo_model winpinch;
2673 struct combo_model winrotate;
2674- struct tapping_model tapping;
2675+ struct combo_model tapping;
2676+};
2677+
2678+/*
2679+ * struct gesture_head - gesture type handler data
2680+ * @type: gesture type of this primitive
2681+ * @mintouch: minimum number of touches for this primitive
2682+ * @maxtouch: maximum number of touches for this primitive
2683+ * @priority: priority of this primitive
2684+ */
2685+struct gesture_head {
2686+ int type;
2687+ int mintouch;
2688+ int maxtouch;
2689+ int priority;
2690+};
2691+
2692+/*
2693+ * struct gesture_handler - gesture handler state
2694+ * @fm_mask: gesture frame expectation mask used in this handler
2695+ * @getype: array of gesture type data per number of touches
2696+ * @set_props: properties method for this handler
2697+ *
2698+ * This is the state of the gesture handler.
2699+ */
2700+struct gesture_handler {
2701+ int fm_mask;
2702+ struct gesture_head getype[DIM_TOUCH + 1];
2703+
2704+ void (*set_props)(const struct gesture_inserter *gin,
2705+ struct combo_model *state,
2706+ const struct grail_element *element,
2707+ const struct utouch_frame *frame);
2708 };
2709
2710 int gru_init(struct grail *ge);
2711-void gru_recognize(struct grail *ge, const struct utouch_frame *frame);
2712+void gru_recognize(struct grail *ge,
2713+ const struct grail_frame *frame,
2714+ const struct utouch_frame *touch);
2715 void gru_destroy(struct grail *ge);
2716
2717 #endif
2718
2719=== modified file 'test/Makefile.am'
2720--- test/Makefile.am 2011-04-28 16:53:46 +0000
2721+++ test/Makefile.am 2011-05-05 13:31:23 +0000
2722@@ -10,6 +10,7 @@
2723 check_grail_SOURCES = \
2724 check-mapping.c \
2725 check-transform.c \
2726+ check-gestures.c \
2727 check-grail.c
2728
2729 check_grail_CFLAGS = \
2730
2731=== added file 'test/check-gestures.c'
2732--- test/check-gestures.c 1970-01-01 00:00:00 +0000
2733+++ test/check-gestures.c 2011-05-05 13:31:23 +0000
2734@@ -0,0 +1,204 @@
2735+#include <check.h>
2736+#include <grail.h>
2737+#include <string.h>
2738+#include <stdio.h>
2739+#include <unistd.h>
2740+#include <fcntl.h>
2741+#include <stdlib.h>
2742+#include <time.h>
2743+#include <math.h>
2744+
2745+#define TEST_TIME_MS 20000
2746+
2747+struct test_data {
2748+ struct grail ge;
2749+ int fd;
2750+ int begin[DIM_GRAIL_TYPE];
2751+ int update[DIM_GRAIL_TYPE];
2752+ int end[DIM_GRAIL_TYPE];
2753+};
2754+
2755+static int tp_get_clients(struct grail *ge,
2756+ struct grail_client_info *clients, int max_clients,
2757+ const struct grail_coord *coords, int num_coords,
2758+ const grail_mask_t *types, int type_bytes)
2759+{
2760+ memset(&clients[0], 0, sizeof(clients[0]));
2761+ clients[0].mask[0] = 255;
2762+ clients[0].mask[1] = 255;
2763+ clients[0].mask[2] = 255;
2764+ clients[0].mask[3] = 255;
2765+ clients[0].id.client = 345;
2766+ clients[0].id.root = 1;
2767+ clients[0].id.event = 2;
2768+ clients[0].id.child = 3;
2769+ ge = 0;
2770+ types = 0;
2771+ type_bytes = 0;
2772+ max_clients = 0;
2773+ coords = 0;
2774+ num_coords = 0;
2775+ return 1;
2776+}
2777+
2778+static void tp_event(struct grail *ge, const struct input_event *ev)
2779+{
2780+ ge = 0;
2781+ ev = 0;
2782+}
2783+
2784+static void tp_gesture(struct grail *ge, const struct grail_event *ev)
2785+{
2786+ struct test_data *data = ge->priv;
2787+
2788+ switch (ev->status) {
2789+ case GRAIL_STATUS_BEGIN:
2790+ data->begin[ev->type]++;
2791+ break;
2792+ case GRAIL_STATUS_UPDATE:
2793+ data->update[ev->type]++;
2794+ break;
2795+ case GRAIL_STATUS_END:
2796+ data->end[ev->type]++;
2797+ break;
2798+ }
2799+}
2800+
2801+static int init_test_data(struct test_data *data, const char *path)
2802+{
2803+ int ret;
2804+
2805+ memset(data, 0, sizeof(*data));
2806+
2807+ data->ge.get_clients = tp_get_clients;
2808+ data->ge.event = tp_event;
2809+ data->ge.gesture = tp_gesture;
2810+
2811+ data->fd = open(path, O_RDONLY | O_NONBLOCK);
2812+ ret = grail_open(&data->ge, data->fd);
2813+ if(ret)
2814+ return ret;
2815+ return 0;
2816+}
2817+
2818+static void term_test_data(struct test_data *data)
2819+{
2820+ grail_close(&data->ge, data->fd);
2821+ close(data->fd);
2822+}
2823+
2824+static void test_gesture_type(const char *name, int type,
2825+ int nbegin, int nupdate, int nother)
2826+{
2827+ struct test_data data;
2828+ char path[1024];
2829+ int ntype = 0;
2830+ int i;
2831+
2832+ sprintf(path, "io/functional/%s", name);
2833+ fail_if(init_test_data(&data, path));
2834+
2835+ data.ge.priv = &data;
2836+ grail_pull(&data.ge, data.fd);
2837+
2838+ for (i = 0; i < DIM_GRAIL_TYPE; i++) {
2839+ if (data.begin[i] || data.update[i] || data.end[i]) {
2840+ //fprintf(stderr, "type %d %d\n", i, data.begin[i]);
2841+ ntype++;
2842+ }
2843+ }
2844+
2845+ fail_unless(data.begin[type] == nbegin);
2846+ fail_unless(data.update[type] >= nupdate);
2847+ fail_unless(data.end[type] == nbegin);
2848+ fail_unless(ntype == 1 + nother);
2849+
2850+ term_test_data(&data);
2851+}
2852+
2853+
2854+START_TEST(drag_1)
2855+{
2856+ test_gesture_type("drag-1.evemu", GRAIL_TYPE_DRAG1, 4, 4, 0);
2857+}
2858+END_TEST
2859+
2860+START_TEST(drag_2)
2861+{
2862+ test_gesture_type("drag-2.evemu", GRAIL_TYPE_DRAG2, 3, 3, 0);
2863+}
2864+END_TEST
2865+
2866+START_TEST(drag_3)
2867+{
2868+ test_gesture_type("drag-3.evemu", GRAIL_TYPE_EDRAG, 2, 2, 1);
2869+}
2870+END_TEST
2871+
2872+START_TEST(drag_4)
2873+{
2874+ test_gesture_type("drag-4.evemu", GRAIL_TYPE_MDRAG, 4, 4, 0);
2875+}
2876+END_TEST
2877+
2878+START_TEST(hold_1)
2879+{
2880+ test_gesture_type("hold-1.evemu", GRAIL_TYPE_DRAG1, 0, 0, -1);
2881+}
2882+END_TEST
2883+
2884+START_TEST(pinch_2)
2885+{
2886+ test_gesture_type("pinch-2.evemu", GRAIL_TYPE_PINCH2, 2, 2, 0);
2887+}
2888+END_TEST
2889+
2890+START_TEST(pinch_3)
2891+{
2892+ test_gesture_type("pinch-3.evemu", GRAIL_TYPE_EPINCH, 2, 2, 0);
2893+}
2894+END_TEST
2895+
2896+START_TEST(rotate_2)
2897+{
2898+ test_gesture_type("rotate-2.evemu", GRAIL_TYPE_ROTATE2, 4, 4, 0);
2899+}
2900+END_TEST
2901+
2902+START_TEST(tap_1)
2903+{
2904+ test_gesture_type("tap-1.evemu", GRAIL_TYPE_TAP1, 0, 1, 0);
2905+}
2906+END_TEST
2907+
2908+START_TEST(tap_4)
2909+{
2910+ test_gesture_type("tap-4.evemu", GRAIL_TYPE_TAP4, 0, 1, 0);
2911+}
2912+END_TEST
2913+
2914+#define ADD_TEST(suite, name) \
2915+ do { \
2916+ TCase *test = tcase_create(#name); \
2917+ tcase_set_timeout (test, TEST_TIME_MS / 1000); \
2918+ tcase_add_test(test, name); \
2919+ suite_add_tcase(suite, test); \
2920+ } while (0)
2921+
2922+Suite *make_gesture_suite()
2923+{
2924+ Suite *suite = suite_create("grail-gestures");
2925+
2926+ ADD_TEST(suite, drag_1);
2927+ ADD_TEST(suite, drag_2);
2928+ ADD_TEST(suite, drag_3);
2929+ ADD_TEST(suite, drag_4);
2930+ ADD_TEST(suite, hold_1);
2931+ ADD_TEST(suite, pinch_2);
2932+ ADD_TEST(suite, pinch_3);
2933+ ADD_TEST(suite, rotate_2);
2934+ ADD_TEST(suite, tap_1);
2935+ ADD_TEST(suite, tap_4);
2936+
2937+ return suite;
2938+}
2939
2940=== modified file 'test/check-grail.c'
2941--- test/check-grail.c 2011-04-28 16:53:46 +0000
2942+++ test/check-grail.c 2011-05-05 13:31:23 +0000
2943@@ -4,6 +4,7 @@
2944
2945 extern Suite *make_mapping_suite();
2946 extern Suite *make_transform_suite();
2947+extern Suite *make_gesture_suite();
2948
2949 int main(int argc CK_ATTRIBUTE_UNUSED, char* argv[] CK_ATTRIBUTE_UNUSED)
2950 {
2951@@ -13,6 +14,7 @@
2952
2953 srunner_add_suite(sr, make_mapping_suite());
2954 srunner_add_suite(sr, make_transform_suite());
2955+ srunner_add_suite(sr, make_gesture_suite());
2956
2957 srunner_set_log(sr, "check_grail.log");
2958 srunner_set_xml(sr, "check_grail.xml");
2959
2960=== added directory 'test/io/functional'
2961=== added file 'test/io/functional/drag-1.evemu'
2962--- test/io/functional/drag-1.evemu 1970-01-01 00:00:00 +0000
2963+++ test/io/functional/drag-1.evemu 2011-05-05 13:31:23 +0000
2964@@ -0,0 +1,3988 @@
2965+N: 3M-Microtouch
2966+I: 0003 0596 0502 0110
2967+P: 00 00 00 00 00 00 00 00
2968+B: 00 0b 00 00 00 00 00 00 00
2969+B: 01 00 00 00 00 00 00 00 00
2970+B: 01 00 00 00 00 00 00 00 00
2971+B: 01 00 00 00 00 00 00 00 00
2972+B: 01 00 00 00 00 00 00 00 00
2973+B: 01 00 00 00 00 00 00 00 00
2974+B: 01 00 04 00 00 00 00 00 00
2975+B: 01 00 00 00 00 00 00 00 00
2976+B: 01 00 00 00 00 00 00 00 00
2977+B: 01 00 00 00 00 00 00 00 00
2978+B: 01 00 00 00 00 00 00 00 00
2979+B: 01 00 00 00 00 00 00 00 00
2980+B: 01 00 00 00 00 00 00 00 00
2981+B: 02 00 00 00 00 00 00 00 00
2982+B: 03 03 00 00 00 00 80 73 02
2983+B: 04 00 00 00 00 00 00 00 00
2984+B: 05 00 00 00 00 00 00 00 00
2985+B: 11 00 00 00 00 00 00 00 00
2986+B: 12 00 00 00 00 00 00 00 00
2987+B: 15 00 00 00 00 00 00 00 00
2988+B: 15 00 00 00 00 00 00 00 00
2989+A: 00 0 32767 15 0
2990+A: 01 0 32767 15 0
2991+A: 2f 0 59 0 0
2992+A: 30 0 32767 255 0
2993+A: 31 0 32767 255 0
2994+A: 34 0 1 0 0
2995+A: 35 0 32767 15 0
2996+A: 36 0 32767 15 0
2997+A: 39 0 65535 0 0
2998+E: 1304510649.770760 0003 002f 0
2999+E: 1304510649.770775 0003 0039 135
3000+E: 1304510649.770778 0003 0035 16448
3001+E: 1304510649.770779 0003 0036 6505
3002+E: 1304510649.770782 0003 0030 1312
3003+E: 1304510649.770787 0001 014a 1
3004+E: 1304510649.770791 0003 0000 16448
3005+E: 1304510649.770792 0003 0001 6505
3006+E: 1304510649.770794 0000 0000 0
3007+E: 1304510649.775755 0003 0030 1348
3008+E: 1304510649.775775 0000 0000 0
3009+E: 1304510649.801747 0003 0036 6507
3010+E: 1304510649.801769 0000 0000 0
3011+E: 1304510649.806750 0003 0036 6509
3012+E: 1304510649.806771 0000 0000 0
3013+E: 1304510649.811749 0003 0036 6521
3014+E: 1304510649.811769 0003 0001 6513
3015+E: 1304510649.811771 0000 0000 0
3016+E: 1304510649.816750 0003 0036 6529
3017+E: 1304510649.816763 0003 0030 1220
3018+E: 1304510649.816771 0003 0001 6521
3019+E: 1304510649.816773 0000 0000 0
3020+E: 1304510649.821749 0003 0036 6559
3021+E: 1304510649.821762 0003 0030 1188
3022+E: 1304510649.821770 0003 0001 6559
3023+E: 1304510649.821772 0000 0000 0
3024+E: 1304510649.826749 0003 0036 6570
3025+E: 1304510649.826769 0003 0001 6561
3026+E: 1304510649.826771 0000 0000 0
3027+E: 1304510649.831749 0003 0036 6603
3028+E: 1304510649.831769 0003 0001 6603
3029+E: 1304510649.831771 0000 0000 0
3030+E: 1304510649.836750 0003 0036 6617
3031+E: 1304510649.836770 0003 0001 6606
3032+E: 1304510649.836772 0000 0000 0
3033+E: 1304510649.841749 0003 0036 6657
3034+E: 1304510649.841769 0003 0001 6657
3035+E: 1304510649.841771 0000 0000 0
3036+E: 1304510649.847750 0003 0036 6671
3037+E: 1304510649.847763 0003 0030 1322
3038+E: 1304510649.847771 0003 0001 6660
3039+E: 1304510649.847772 0000 0000 0
3040+E: 1304510649.852748 0003 0036 6715
3041+E: 1304510649.852761 0003 0030 1355
3042+E: 1304510649.852769 0003 0001 6715
3043+E: 1304510649.852771 0000 0000 0
3044+E: 1304510649.857749 0003 0036 6729
3045+E: 1304510649.857769 0003 0001 6718
3046+E: 1304510649.857771 0000 0000 0
3047+E: 1304510649.862749 0003 0036 6771
3048+E: 1304510649.862769 0003 0001 6771
3049+E: 1304510649.862771 0000 0000 0
3050+E: 1304510649.867749 0003 0036 6805
3051+E: 1304510649.867770 0003 0001 6805
3052+E: 1304510649.867772 0000 0000 0
3053+E: 1304510649.872746 0003 0035 16445
3054+E: 1304510649.872758 0003 0036 6873
3055+E: 1304510649.872768 0003 0001 6873
3056+E: 1304510649.872770 0000 0000 0
3057+E: 1304510649.877748 0003 0035 16443
3058+E: 1304510649.877761 0003 0036 6887
3059+E: 1304510649.877771 0003 0001 6876
3060+E: 1304510649.877773 0000 0000 0
3061+E: 1304510649.882747 0003 0035 16441
3062+E: 1304510649.882759 0003 0036 6969
3063+E: 1304510649.882768 0003 0000 16446
3064+E: 1304510649.882770 0003 0001 6969
3065+E: 1304510649.882771 0000 0000 0
3066+E: 1304510649.887748 0003 0035 16438
3067+E: 1304510649.887759 0003 0036 7035
3068+E: 1304510649.887769 0003 0000 16444
3069+E: 1304510649.887770 0003 0001 7035
3070+E: 1304510649.887772 0000 0000 0
3071+E: 1304510649.892747 0003 0036 7067
3072+E: 1304510649.892760 0003 0030 1223
3073+E: 1304510649.892769 0003 0001 7067
3074+E: 1304510649.892770 0000 0000 0
3075+E: 1304510649.897747 0003 0035 16436
3076+E: 1304510649.897759 0003 0036 7143
3077+E: 1304510649.897762 0003 0030 1190
3078+E: 1304510649.897769 0003 0000 16442
3079+E: 1304510649.897771 0003 0001 7143
3080+E: 1304510649.897773 0000 0000 0
3081+E: 1304510649.903736 0003 0035 16434
3082+E: 1304510649.903747 0003 0036 7207
3083+E: 1304510649.903756 0003 0000 16440
3084+E: 1304510649.903758 0003 0001 7207
3085+E: 1304510649.903760 0000 0000 0
3086+E: 1304510649.908748 0003 0036 7241
3087+E: 1304510649.908768 0003 0001 7241
3088+E: 1304510649.908770 0000 0000 0
3089+E: 1304510649.913735 0003 0035 16431
3090+E: 1304510649.913746 0003 0036 7311
3091+E: 1304510649.913756 0003 0000 16437
3092+E: 1304510649.913757 0003 0001 7311
3093+E: 1304510649.913759 0000 0000 0
3094+E: 1304510649.918747 0003 0035 16428
3095+E: 1304510649.918759 0003 0036 7383
3096+E: 1304510649.918762 0003 0030 1323
3097+E: 1304510649.918769 0003 0000 16434
3098+E: 1304510649.918771 0003 0001 7383
3099+E: 1304510649.918773 0000 0000 0
3100+E: 1304510649.923734 0003 0035 16426
3101+E: 1304510649.923745 0003 0036 7453
3102+E: 1304510649.923748 0003 0030 1356
3103+E: 1304510649.923756 0003 0000 16432
3104+E: 1304510649.923757 0003 0001 7453
3105+E: 1304510649.923759 0000 0000 0
3106+E: 1304510649.928747 0003 0035 16424
3107+E: 1304510649.928759 0003 0036 7485
3108+E: 1304510649.928768 0003 0000 16430
3109+E: 1304510649.928770 0003 0001 7485
3110+E: 1304510649.928771 0000 0000 0
3111+E: 1304510649.933734 0003 0035 16422
3112+E: 1304510649.933746 0003 0036 7557
3113+E: 1304510649.933755 0003 0000 16428
3114+E: 1304510649.933757 0003 0001 7557
3115+E: 1304510649.933759 0000 0000 0
3116+E: 1304510649.938748 0003 0035 16419
3117+E: 1304510649.938761 0003 0036 7623
3118+E: 1304510649.938770 0003 0000 16425
3119+E: 1304510649.938772 0003 0001 7623
3120+E: 1304510649.938773 0000 0000 0
3121+E: 1304510649.943735 0003 0035 16417
3122+E: 1304510649.943747 0003 0036 7655
3123+E: 1304510649.943756 0003 0000 16423
3124+E: 1304510649.943758 0003 0001 7655
3125+E: 1304510649.943759 0000 0000 0
3126+E: 1304510649.948766 0003 0035 16414
3127+E: 1304510649.948779 0003 0036 7723
3128+E: 1304510649.948788 0003 0000 16420
3129+E: 1304510649.948790 0003 0001 7723
3130+E: 1304510649.948792 0000 0000 0
3131+E: 1304510649.953738 0003 0035 16412
3132+E: 1304510649.953750 0003 0036 7791
3133+E: 1304510649.953753 0003 0030 1224
3134+E: 1304510649.953760 0003 0000 16418
3135+E: 1304510649.953762 0003 0001 7791
3136+E: 1304510649.953763 0000 0000 0
3137+E: 1304510649.958757 0003 0036 7823
3138+E: 1304510649.958771 0003 0030 1191
3139+E: 1304510649.958779 0003 0001 7823
3140+E: 1304510649.958780 0000 0000 0
3141+E: 1304510649.964759 0003 0036 7893
3142+E: 1304510649.964780 0003 0001 7893
3143+E: 1304510649.964782 0000 0000 0
3144+E: 1304510649.969754 0003 0035 16410
3145+E: 1304510649.969765 0003 0036 7965
3146+E: 1304510649.969776 0003 0000 16416
3147+E: 1304510649.969778 0003 0001 7965
3148+E: 1304510649.969779 0000 0000 0
3149+E: 1304510649.974758 0003 0035 16408
3150+E: 1304510649.974770 0003 0036 8037
3151+E: 1304510649.974779 0003 0000 16414
3152+E: 1304510649.974781 0003 0001 8037
3153+E: 1304510649.974783 0000 0000 0
3154+E: 1304510649.979758 0003 0036 8105
3155+E: 1304510649.979771 0003 0030 1323
3156+E: 1304510649.979779 0003 0001 8105
3157+E: 1304510649.979781 0000 0000 0
3158+E: 1304510649.984759 0003 0036 8137
3159+E: 1304510649.984771 0003 0030 1356
3160+E: 1304510649.984780 0003 0001 8137
3161+E: 1304510649.984782 0000 0000 0
3162+E: 1304510649.989751 0003 0036 8211
3163+E: 1304510649.989765 0003 0001 8211
3164+E: 1304510649.989767 0000 0000 0
3165+E: 1304510649.994736 0003 0035 16406
3166+E: 1304510649.994744 0003 0036 8283
3167+E: 1304510649.994757 0003 0000 16412
3168+E: 1304510649.994764 0003 0001 8283
3169+E: 1304510649.994766 0000 0000 0
3170+E: 1304510649.999738 0003 0036 8355
3171+E: 1304510649.999759 0003 0001 8355
3172+E: 1304510649.999764 0000 0000 0
3173+E: 1304510650.004602 0003 0036 8425
3174+E: 1304510650.004613 0003 0001 8425
3175+E: 1304510650.004613 0000 0000 0
3176+E: 1304510650.009715 0003 0035 16404
3177+E: 1304510650.009719 0003 0036 8493
3178+E: 1304510650.009727 0003 0000 16410
3179+E: 1304510650.009728 0003 0001 8493
3180+E: 1304510650.009728 0000 0000 0
3181+E: 1304510650.014589 0003 0036 8525
3182+E: 1304510650.014592 0003 0030 1224
3183+E: 1304510650.014598 0003 0001 8525
3184+E: 1304510650.014599 0000 0000 0
3185+E: 1304510650.020610 0003 0035 16402
3186+E: 1304510650.020619 0003 0036 8597
3187+E: 1304510650.020620 0003 0030 1191
3188+E: 1304510650.020622 0003 0000 16408
3189+E: 1304510650.020623 0003 0001 8597
3190+E: 1304510650.020623 0000 0000 0
3191+E: 1304510650.025601 0003 0036 8671
3192+E: 1304510650.025612 0003 0001 8671
3193+E: 1304510650.025613 0000 0000 0
3194+E: 1304510650.030604 0003 0036 8743
3195+E: 1304510650.030617 0003 0001 8743
3196+E: 1304510650.030617 0000 0000 0
3197+E: 1304510650.035594 0003 0036 8815
3198+E: 1304510650.035601 0003 0030 1323
3199+E: 1304510650.035603 0003 0001 8815
3200+E: 1304510650.035604 0000 0000 0
3201+E: 1304510650.040607 0003 0036 8891
3202+E: 1304510650.040615 0003 0030 1356
3203+E: 1304510650.040619 0003 0001 8891
3204+E: 1304510650.040619 0000 0000 0
3205+E: 1304510650.045605 0003 0036 8961
3206+E: 1304510650.045616 0003 0001 8961
3207+E: 1304510650.045616 0000 0000 0
3208+E: 1304510650.050606 0003 0036 9031
3209+E: 1304510650.050614 0003 0001 9031
3210+E: 1304510650.050618 0000 0000 0
3211+E: 1304510650.055591 0003 0036 9103
3212+E: 1304510650.055601 0003 0001 9103
3213+E: 1304510650.055602 0000 0000 0
3214+E: 1304510650.060606 0003 0036 9135
3215+E: 1304510650.060617 0003 0001 9135
3216+E: 1304510650.060618 0000 0000 0
3217+E: 1304510650.065595 0003 0036 9209
3218+E: 1304510650.065602 0003 0001 9209
3219+E: 1304510650.065605 0000 0000 0
3220+E: 1304510650.070607 0003 0036 9279
3221+E: 1304510650.070615 0003 0030 1224
3222+E: 1304510650.070618 0003 0001 9279
3223+E: 1304510650.070619 0000 0000 0
3224+E: 1304510650.076602 0003 0036 9351
3225+E: 1304510650.076610 0003 0030 1191
3226+E: 1304510650.076613 0003 0001 9351
3227+E: 1304510650.076614 0000 0000 0
3228+E: 1304510650.081604 0003 0036 9419
3229+E: 1304510650.081615 0003 0001 9419
3230+E: 1304510650.081615 0000 0000 0
3231+E: 1304510650.086607 0003 0036 9493
3232+E: 1304510650.086617 0003 0001 9493
3233+E: 1304510650.086618 0000 0000 0
3234+E: 1304510650.091607 0003 0036 9567
3235+E: 1304510650.091616 0003 0030 1323
3236+E: 1304510650.091619 0003 0001 9567
3237+E: 1304510650.091619 0000 0000 0
3238+E: 1304510650.096607 0003 0036 9635
3239+E: 1304510650.096616 0003 0030 1356
3240+E: 1304510650.096619 0003 0001 9635
3241+E: 1304510650.096619 0000 0000 0
3242+E: 1304510650.101602 0003 0036 9701
3243+E: 1304510650.101614 0003 0001 9701
3244+E: 1304510650.101614 0000 0000 0
3245+E: 1304510650.106599 0003 0036 9733
3246+E: 1304510650.106613 0003 0001 9733
3247+E: 1304510650.106614 0000 0000 0
3248+E: 1304510650.111603 0003 0035 16400
3249+E: 1304510650.111607 0003 0036 9801
3250+E: 1304510650.111614 0003 0000 16406
3251+E: 1304510650.111615 0003 0001 9801
3252+E: 1304510650.111615 0000 0000 0
3253+E: 1304510650.116667 0003 0035 16398
3254+E: 1304510650.116671 0003 0036 9833
3255+E: 1304510650.116675 0003 0000 16404
3256+E: 1304510650.116675 0003 0001 9833
3257+E: 1304510650.116676 0000 0000 0
3258+E: 1304510650.121598 0003 0035 16396
3259+E: 1304510650.121604 0003 0036 9903
3260+E: 1304510650.121611 0003 0000 16402
3261+E: 1304510650.121612 0003 0001 9903
3262+E: 1304510650.121612 0000 0000 0
3263+E: 1304510650.126602 0003 0036 9935
3264+E: 1304510650.126613 0003 0001 9935
3265+E: 1304510650.126614 0000 0000 0
3266+E: 1304510650.131602 0003 0035 16394
3267+E: 1304510650.131611 0003 0036 10013
3268+E: 1304510650.131612 0003 0030 1224
3269+E: 1304510650.131615 0003 0000 16400
3270+E: 1304510650.131616 0003 0001 10013
3271+E: 1304510650.131616 0000 0000 0
3272+E: 1304510650.137600 0003 0035 16392
3273+E: 1304510650.137605 0003 0036 10085
3274+E: 1304510650.137605 0003 0030 1191
3275+E: 1304510650.137608 0003 0000 16398
3276+E: 1304510650.137612 0003 0001 10085
3277+E: 1304510650.137613 0000 0000 0
3278+E: 1304510650.142604 0003 0035 16390
3279+E: 1304510650.142607 0003 0036 10161
3280+E: 1304510650.142614 0003 0000 16396
3281+E: 1304510650.142615 0003 0001 10161
3282+E: 1304510650.142616 0000 0000 0
3283+E: 1304510650.147598 0003 0035 16388
3284+E: 1304510650.147602 0003 0036 10233
3285+E: 1304510650.147607 0003 0030 1323
3286+E: 1304510650.147609 0003 0000 16394
3287+E: 1304510650.147610 0003 0001 10233
3288+E: 1304510650.147610 0000 0000 0
3289+E: 1304510650.152604 0003 0036 10301
3290+E: 1304510650.152612 0003 0030 1356
3291+E: 1304510650.152615 0003 0001 10301
3292+E: 1304510650.152616 0000 0000 0
3293+E: 1304510650.157605 0003 0035 16386
3294+E: 1304510650.157616 0003 0036 10333
3295+E: 1304510650.157620 0003 0000 16392
3296+E: 1304510650.157620 0003 0001 10333
3297+E: 1304510650.157621 0000 0000 0
3298+E: 1304510650.162597 0003 0036 10401
3299+E: 1304510650.162610 0003 0001 10401
3300+E: 1304510650.162610 0000 0000 0
3301+E: 1304510650.167601 0003 0035 16383
3302+E: 1304510650.167609 0003 0036 10471
3303+E: 1304510650.167612 0003 0000 16389
3304+E: 1304510650.167613 0003 0001 10471
3305+E: 1304510650.167614 0000 0000 0
3306+E: 1304510650.172601 0003 0035 16380
3307+E: 1304510650.172604 0003 0036 10545
3308+E: 1304510650.172612 0003 0000 16386
3309+E: 1304510650.172612 0003 0001 10545
3310+E: 1304510650.172613 0000 0000 0
3311+E: 1304510650.177599 0003 0035 16377
3312+E: 1304510650.177608 0003 0036 10611
3313+E: 1304510650.177611 0003 0000 16383
3314+E: 1304510650.177612 0003 0001 10611
3315+E: 1304510650.177612 0000 0000 0
3316+E: 1304510650.182604 0003 0035 16375
3317+E: 1304510650.182607 0003 0036 10645
3318+E: 1304510650.182610 0003 0000 16381
3319+E: 1304510650.182611 0003 0001 10645
3320+E: 1304510650.182612 0000 0000 0
3321+E: 1304510650.187606 0003 0035 16373
3322+E: 1304510650.187610 0003 0036 10677
3323+E: 1304510650.187617 0003 0000 16379
3324+E: 1304510650.187618 0003 0001 10677
3325+E: 1304510650.187618 0000 0000 0
3326+E: 1304510650.193603 0003 0035 16370
3327+E: 1304510650.193607 0003 0036 10747
3328+E: 1304510650.193608 0003 0030 1224
3329+E: 1304510650.193610 0003 0000 16376
3330+E: 1304510650.193611 0003 0001 10747
3331+E: 1304510650.193612 0000 0000 0
3332+E: 1304510650.198595 0003 0035 16367
3333+E: 1304510650.198598 0003 0036 10813
3334+E: 1304510650.198603 0003 0030 1191
3335+E: 1304510650.198606 0003 0000 16373
3336+E: 1304510650.198606 0003 0001 10813
3337+E: 1304510650.198607 0000 0000 0
3338+E: 1304510650.203604 0003 0035 16364
3339+E: 1304510650.203607 0003 0036 10883
3340+E: 1304510650.203611 0003 0000 16370
3341+E: 1304510650.203611 0003 0001 10883
3342+E: 1304510650.203612 0000 0000 0
3343+E: 1304510650.208600 0003 0035 16362
3344+E: 1304510650.208604 0003 0036 10955
3345+E: 1304510650.208605 0003 0030 1323
3346+E: 1304510650.208607 0003 0000 16368
3347+E: 1304510650.208608 0003 0001 10955
3348+E: 1304510650.208608 0000 0000 0
3349+E: 1304510650.213594 0003 0035 16359
3350+E: 1304510650.213598 0003 0036 11029
3351+E: 1304510650.213599 0003 0030 1356
3352+E: 1304510650.213601 0003 0000 16365
3353+E: 1304510650.213605 0003 0001 11029
3354+E: 1304510650.213606 0000 0000 0
3355+E: 1304510650.218600 0003 0035 16357
3356+E: 1304510650.218604 0003 0036 11059
3357+E: 1304510650.218609 0003 0000 16363
3358+E: 1304510650.218613 0003 0001 11059
3359+E: 1304510650.218613 0000 0000 0
3360+E: 1304510650.223597 0003 0035 16355
3361+E: 1304510650.223601 0003 0036 11129
3362+E: 1304510650.223604 0003 0000 16361
3363+E: 1304510650.223605 0003 0001 11129
3364+E: 1304510650.223605 0000 0000 0
3365+E: 1304510650.228597 0003 0035 16352
3366+E: 1304510650.228605 0003 0036 11201
3367+E: 1304510650.228606 0003 0031 968
3368+E: 1304510650.228609 0003 0000 16358
3369+E: 1304510650.228609 0003 0001 11201
3370+E: 1304510650.228610 0000 0000 0
3371+E: 1304510650.233596 0003 0035 16349
3372+E: 1304510650.233601 0003 0036 11269
3373+E: 1304510650.233602 0003 0031 1008
3374+E: 1304510650.233604 0003 0000 16355
3375+E: 1304510650.233605 0003 0001 11269
3376+E: 1304510650.233606 0000 0000 0
3377+E: 1304510650.238604 0003 0035 16346
3378+E: 1304510650.238608 0003 0036 11299
3379+E: 1304510650.238615 0003 0000 16352
3380+E: 1304510650.238616 0003 0001 11299
3381+E: 1304510650.238616 0000 0000 0
3382+E: 1304510650.243601 0003 0035 16343
3383+E: 1304510650.243605 0003 0036 11369
3384+E: 1304510650.243608 0003 0000 16349
3385+E: 1304510650.243609 0003 0001 11369
3386+E: 1304510650.243609 0000 0000 0
3387+E: 1304510650.248597 0003 0035 16340
3388+E: 1304510650.248600 0003 0036 11447
3389+E: 1304510650.248605 0003 0034 1
3390+E: 1304510650.248605 0003 0030 1299
3391+E: 1304510650.248608 0003 0000 16346
3392+E: 1304510650.248608 0003 0001 11447
3393+E: 1304510650.248609 0000 0000 0
3394+E: 1304510650.254598 0003 0035 16337
3395+E: 1304510650.254601 0003 0036 11517
3396+E: 1304510650.254606 0003 0030 1256
3397+E: 1304510650.254609 0003 0000 16343
3398+E: 1304510650.254610 0003 0001 11517
3399+E: 1304510650.254610 0000 0000 0
3400+E: 1304510650.259599 0003 0035 16333
3401+E: 1304510650.259608 0003 0036 11595
3402+E: 1304510650.259612 0003 0000 16340
3403+E: 1304510650.259612 0003 0001 11595
3404+E: 1304510650.259613 0000 0000 0
3405+E: 1304510650.264599 0003 0035 16330
3406+E: 1304510650.264608 0003 0036 11663
3407+E: 1304510650.264608 0003 0034 0
3408+E: 1304510650.264609 0003 0030 1306
3409+E: 1304510650.264612 0003 0000 16337
3410+E: 1304510650.264612 0003 0001 11663
3411+E: 1304510650.264613 0000 0000 0
3412+E: 1304510650.269601 0003 0035 16327
3413+E: 1304510650.269604 0003 0036 11731
3414+E: 1304510650.269610 0003 0030 1343
3415+E: 1304510650.269612 0003 0000 16334
3416+E: 1304510650.269613 0003 0001 11731
3417+E: 1304510650.269613 0000 0000 0
3418+E: 1304510650.274602 0003 0035 16324
3419+E: 1304510650.274605 0003 0036 11803
3420+E: 1304510650.274613 0003 0000 16331
3421+E: 1304510650.274613 0003 0001 11803
3422+E: 1304510650.274614 0000 0000 0
3423+E: 1304510650.279591 0003 0036 11877
3424+E: 1304510650.279597 0003 0000 16329
3425+E: 1304510650.279597 0003 0001 11877
3426+E: 1304510650.279598 0000 0000 0
3427+E: 1304510650.284598 0003 0035 16322
3428+E: 1304510650.284602 0003 0036 11947
3429+E: 1304510650.284605 0003 0000 16327
3430+E: 1304510650.284605 0003 0001 11947
3431+E: 1304510650.284606 0000 0000 0
3432+E: 1304510650.289602 0003 0035 16320
3433+E: 1304510650.289607 0003 0036 12025
3434+E: 1304510650.289614 0003 0000 16325
3435+E: 1304510650.289615 0003 0001 12025
3436+E: 1304510650.289615 0000 0000 0
3437+E: 1304510650.294599 0003 0035 16318
3438+E: 1304510650.294602 0003 0036 12097
3439+E: 1304510650.294610 0003 0000 16323
3440+E: 1304510650.294610 0003 0001 12097
3441+E: 1304510650.294611 0000 0000 0
3442+E: 1304510650.299597 0003 0035 16316
3443+E: 1304510650.299601 0003 0036 12169
3444+E: 1304510650.299606 0003 0034 1
3445+E: 1304510650.299606 0003 0030 1289
3446+E: 1304510650.299609 0003 0000 16321
3447+E: 1304510650.299609 0003 0001 12169
3448+E: 1304510650.299610 0000 0000 0
3449+E: 1304510650.304599 0003 0036 12243
3450+E: 1304510650.304604 0003 0030 1249
3451+E: 1304510650.304607 0003 0001 12243
3452+E: 1304510650.304611 0000 0000 0
3453+E: 1304510650.310596 0003 0035 16314
3454+E: 1304510650.310602 0003 0036 12311
3455+E: 1304510650.310610 0003 0000 16319
3456+E: 1304510650.310610 0003 0001 12311
3457+E: 1304510650.310611 0000 0000 0
3458+E: 1304510650.315595 0003 0035 16312
3459+E: 1304510650.315599 0003 0036 12387
3460+E: 1304510650.315604 0003 0034 0
3461+E: 1304510650.315605 0003 0030 1300
3462+E: 1304510650.315607 0003 0000 16317
3463+E: 1304510650.315608 0003 0001 12387
3464+E: 1304510650.315608 0000 0000 0
3465+E: 1304510650.320596 0003 0036 12461
3466+E: 1304510650.320605 0003 0030 1339
3467+E: 1304510650.320608 0003 0001 12461
3468+E: 1304510650.320608 0000 0000 0
3469+E: 1304510650.325597 0003 0036 12535
3470+E: 1304510650.325608 0003 0001 12535
3471+E: 1304510650.325609 0000 0000 0
3472+E: 1304510650.330598 0003 0036 12607
3473+E: 1304510650.330609 0003 0001 12607
3474+E: 1304510650.330610 0000 0000 0
3475+E: 1304510650.335605 0003 0036 12683
3476+E: 1304510650.335616 0003 0001 12683
3477+E: 1304510650.335617 0000 0000 0
3478+E: 1304510650.340583 0003 0036 12761
3479+E: 1304510650.340588 0003 0001 12761
3480+E: 1304510650.340588 0000 0000 0
3481+E: 1304510650.345597 0003 0036 12837
3482+E: 1304510650.345608 0003 0001 12837
3483+E: 1304510650.345609 0000 0000 0
3484+E: 1304510650.350595 0003 0036 12907
3485+E: 1304510650.350603 0003 0034 1
3486+E: 1304510650.350604 0003 0030 1286
3487+E: 1304510650.350607 0003 0001 12907
3488+E: 1304510650.350607 0000 0000 0
3489+E: 1304510650.355599 0003 0036 12977
3490+E: 1304510650.355607 0003 0030 1247
3491+E: 1304510650.355611 0003 0001 12977
3492+E: 1304510650.355611 0000 0000 0
3493+E: 1304510650.360596 0003 0036 13055
3494+E: 1304510650.360605 0003 0034 0
3495+E: 1304510650.360605 0003 0030 1208
3496+E: 1304510650.360609 0003 0001 13055
3497+E: 1304510650.360610 0000 0000 0
3498+E: 1304510650.366588 0003 0036 13133
3499+E: 1304510650.366592 0003 0030 1270
3500+E: 1304510650.366598 0003 0001 13133
3501+E: 1304510650.366598 0000 0000 0
3502+E: 1304510650.371595 0003 0036 13207
3503+E: 1304510650.371603 0003 0030 1316
3504+E: 1304510650.371606 0003 0001 13207
3505+E: 1304510650.371606 0000 0000 0
3506+E: 1304510650.376604 0003 0035 16314
3507+E: 1304510650.376612 0003 0036 13281
3508+E: 1304510650.376614 0003 0030 1351
3509+E: 1304510650.376617 0003 0001 13281
3510+E: 1304510650.376617 0000 0000 0
3511+E: 1304510650.381583 0003 0035 16316
3512+E: 1304510650.381586 0003 0036 13359
3513+E: 1304510650.381592 0003 0001 13359
3514+E: 1304510650.381592 0000 0000 0
3515+E: 1304510650.386599 0003 0035 16318
3516+E: 1304510650.386604 0003 0036 13433
3517+E: 1304510650.386611 0003 0001 13433
3518+E: 1304510650.386612 0000 0000 0
3519+E: 1304510650.391587 0003 0035 16320
3520+E: 1304510650.391589 0003 0036 13511
3521+E: 1304510650.391597 0003 0001 13511
3522+E: 1304510650.391597 0000 0000 0
3523+E: 1304510650.396603 0003 0035 16323
3524+E: 1304510650.396606 0003 0036 13593
3525+E: 1304510650.396611 0003 0030 1221
3526+E: 1304510650.396614 0003 0001 13593
3527+E: 1304510650.396615 0000 0000 0
3528+E: 1304510650.401591 0003 0035 16325
3529+E: 1304510650.401595 0003 0036 13669
3530+E: 1304510650.401600 0003 0030 1188
3531+E: 1304510650.401602 0003 0000 16319
3532+E: 1304510650.401603 0003 0001 13669
3533+E: 1304510650.401604 0000 0000 0
3534+E: 1304510650.406597 0003 0035 16328
3535+E: 1304510650.406601 0003 0036 13751
3536+E: 1304510650.406608 0003 0000 16321
3537+E: 1304510650.406609 0003 0001 13751
3538+E: 1304510650.406609 0000 0000 0
3539+E: 1304510650.411595 0003 0035 16336
3540+E: 1304510650.411603 0003 0036 13831
3541+E: 1304510650.411604 0003 0030 1322
3542+E: 1304510650.411607 0003 0000 16328
3543+E: 1304510650.411607 0003 0001 13831
3544+E: 1304510650.411608 0000 0000 0
3545+E: 1304510650.416593 0003 0035 16339
3546+E: 1304510650.416596 0003 0036 13911
3547+E: 1304510650.416601 0003 0030 1355
3548+E: 1304510650.416603 0003 0000 16330
3549+E: 1304510650.416604 0003 0001 13911
3550+E: 1304510650.416605 0000 0000 0
3551+E: 1304510650.421595 0003 0035 16346
3552+E: 1304510650.421598 0003 0036 13995
3553+E: 1304510650.421605 0003 0000 16338
3554+E: 1304510650.421606 0003 0001 13995
3555+E: 1304510650.421607 0000 0000 0
3556+E: 1304510650.427596 0003 0035 16349
3557+E: 1304510650.427600 0003 0036 14073
3558+E: 1304510650.427608 0003 0000 16340
3559+E: 1304510650.427608 0003 0001 14073
3560+E: 1304510650.427609 0000 0000 0
3561+E: 1304510650.432589 0003 0035 16352
3562+E: 1304510650.432592 0003 0036 14151
3563+E: 1304510650.432599 0003 0000 16343
3564+E: 1304510650.432599 0003 0001 14151
3565+E: 1304510650.432600 0000 0000 0
3566+E: 1304510650.437603 0003 0035 16355
3567+E: 1304510650.437607 0003 0036 14233
3568+E: 1304510650.437614 0003 0000 16346
3569+E: 1304510650.437615 0003 0001 14233
3570+E: 1304510650.437615 0000 0000 0
3571+E: 1304510650.442592 0003 0035 16358
3572+E: 1304510650.442595 0003 0036 14315
3573+E: 1304510650.442600 0003 0030 1223
3574+E: 1304510650.442602 0003 0000 16349
3575+E: 1304510650.442603 0003 0001 14315
3576+E: 1304510650.442604 0000 0000 0
3577+E: 1304510650.447600 0003 0035 16366
3578+E: 1304510650.447604 0003 0036 14395
3579+E: 1304510650.447608 0003 0030 1190
3580+E: 1304510650.447611 0003 0000 16357
3581+E: 1304510650.447612 0003 0001 14395
3582+E: 1304510650.447612 0000 0000 0
3583+E: 1304510650.452590 0003 0035 16369
3584+E: 1304510650.452599 0003 0036 14481
3585+E: 1304510650.452602 0003 0000 16360
3586+E: 1304510650.452603 0003 0001 14481
3587+E: 1304510650.452603 0000 0000 0
3588+E: 1304510650.457599 0003 0035 16372
3589+E: 1304510650.457603 0003 0036 14565
3590+E: 1304510650.457608 0003 0030 1323
3591+E: 1304510650.457611 0003 0000 16363
3592+E: 1304510650.457611 0003 0001 14565
3593+E: 1304510650.457612 0000 0000 0
3594+E: 1304510650.462602 0003 0035 16375
3595+E: 1304510650.462605 0003 0036 14651
3596+E: 1304510650.462611 0003 0030 1356
3597+E: 1304510650.462613 0003 0000 16366
3598+E: 1304510650.462614 0003 0001 14651
3599+E: 1304510650.462615 0000 0000 0
3600+E: 1304510650.467593 0003 0035 16378
3601+E: 1304510650.467597 0003 0036 14741
3602+E: 1304510650.467605 0003 0000 16369
3603+E: 1304510650.467605 0003 0001 14741
3604+E: 1304510650.467606 0000 0000 0
3605+E: 1304510650.472596 0003 0035 16381
3606+E: 1304510650.472604 0003 0036 14823
3607+E: 1304510650.472607 0003 0000 16372
3608+E: 1304510650.472608 0003 0001 14823
3609+E: 1304510650.472608 0000 0000 0
3610+E: 1304510650.477595 0003 0035 16384
3611+E: 1304510650.477599 0003 0036 14909
3612+E: 1304510650.477606 0003 0000 16375
3613+E: 1304510650.477607 0003 0001 14909
3614+E: 1304510650.477607 0000 0000 0
3615+E: 1304510650.482600 0003 0035 16387
3616+E: 1304510650.482603 0003 0036 14993
3617+E: 1304510650.482609 0003 0030 1224
3618+E: 1304510650.482612 0003 0000 16378
3619+E: 1304510650.482612 0003 0001 14993
3620+E: 1304510650.482613 0000 0000 0
3621+E: 1304510650.488595 0003 0035 16389
3622+E: 1304510650.488599 0003 0036 15075
3623+E: 1304510650.488605 0003 0030 1191
3624+E: 1304510650.488607 0003 0000 16380
3625+E: 1304510650.488608 0003 0001 15075
3626+E: 1304510650.488608 0000 0000 0
3627+E: 1304510650.493594 0003 0035 16391
3628+E: 1304510650.493597 0003 0036 15157
3629+E: 1304510650.493601 0003 0000 16382
3630+E: 1304510650.493601 0003 0001 15157
3631+E: 1304510650.493602 0000 0000 0
3632+E: 1304510650.498600 0003 0035 16398
3633+E: 1304510650.498604 0003 0036 15243
3634+E: 1304510650.498609 0003 0030 1323
3635+E: 1304510650.498612 0003 0000 16390
3636+E: 1304510650.498613 0003 0001 15243
3637+E: 1304510650.498614 0000 0000 0
3638+E: 1304510650.503583 0003 0035 16400
3639+E: 1304510650.503586 0003 0036 15329
3640+E: 1304510650.503586 0003 0030 1356
3641+E: 1304510650.503589 0003 0000 16392
3642+E: 1304510650.503589 0003 0001 15329
3643+E: 1304510650.503590 0000 0000 0
3644+E: 1304510650.508595 0003 0035 16402
3645+E: 1304510650.508604 0003 0036 15413
3646+E: 1304510650.508607 0003 0000 16394
3647+E: 1304510650.508608 0003 0001 15413
3648+E: 1304510650.508608 0000 0000 0
3649+E: 1304510650.513590 0003 0035 16404
3650+E: 1304510650.513594 0003 0036 15497
3651+E: 1304510650.513597 0003 0000 16396
3652+E: 1304510650.513604 0003 0001 15497
3653+E: 1304510650.513604 0000 0000 0
3654+E: 1304510650.518591 0003 0035 16406
3655+E: 1304510650.518597 0003 0036 15583
3656+E: 1304510650.518604 0003 0000 16398
3657+E: 1304510650.518604 0003 0001 15583
3658+E: 1304510650.518605 0000 0000 0
3659+E: 1304510650.523595 0003 0035 16408
3660+E: 1304510650.523598 0003 0036 15663
3661+E: 1304510650.523602 0003 0000 16400
3662+E: 1304510650.523602 0003 0001 15663
3663+E: 1304510650.523603 0000 0000 0
3664+E: 1304510650.528592 0003 0035 16410
3665+E: 1304510650.528596 0003 0036 15739
3666+E: 1304510650.528601 0003 0030 1224
3667+E: 1304510650.528603 0003 0000 16402
3668+E: 1304510650.528604 0003 0001 15739
3669+E: 1304510650.528604 0000 0000 0
3670+E: 1304510650.533597 0003 0035 16412
3671+E: 1304510650.533601 0003 0036 15823
3672+E: 1304510650.533602 0003 0030 1191
3673+E: 1304510650.533605 0003 0000 16404
3674+E: 1304510650.533606 0003 0001 15823
3675+E: 1304510650.533606 0000 0000 0
3676+E: 1304510650.538595 0003 0036 15913
3677+E: 1304510650.538606 0003 0000 16406
3678+E: 1304510650.538606 0003 0001 15913
3679+E: 1304510650.538607 0000 0000 0
3680+E: 1304510650.544594 0003 0035 16414
3681+E: 1304510650.544602 0003 0036 15991
3682+E: 1304510650.544603 0003 0030 1323
3683+E: 1304510650.544606 0003 0000 16408
3684+E: 1304510650.544606 0003 0001 15991
3685+E: 1304510650.544607 0000 0000 0
3686+E: 1304510650.549590 0003 0035 16416
3687+E: 1304510650.549596 0003 0036 16069
3688+E: 1304510650.549601 0003 0030 1356
3689+E: 1304510650.549604 0003 0000 16410
3690+E: 1304510650.549604 0003 0001 16069
3691+E: 1304510650.549605 0000 0000 0
3692+E: 1304510650.554589 0003 0036 16143
3693+E: 1304510650.554600 0003 0001 16143
3694+E: 1304510650.554601 0000 0000 0
3695+E: 1304510650.559595 0003 0036 16219
3696+E: 1304510650.559606 0003 0001 16219
3697+E: 1304510650.559607 0000 0000 0
3698+E: 1304510650.564589 0003 0035 16418
3699+E: 1304510650.564592 0003 0036 16299
3700+E: 1304510650.564599 0003 0000 16412
3701+E: 1304510650.564600 0003 0001 16299
3702+E: 1304510650.564600 0000 0000 0
3703+E: 1304510650.569595 0003 0036 16373
3704+E: 1304510650.569607 0003 0001 16373
3705+E: 1304510650.569607 0000 0000 0
3706+E: 1304510650.574584 0003 0036 16445
3707+E: 1304510650.574595 0003 0001 16445
3708+E: 1304510650.574596 0000 0000 0
3709+E: 1304510650.579603 0003 0036 16515
3710+E: 1304510650.579612 0003 0030 1224
3711+E: 1304510650.579616 0003 0001 16515
3712+E: 1304510650.579616 0000 0000 0
3713+E: 1304510650.584585 0003 0036 16585
3714+E: 1304510650.584592 0003 0030 1191
3715+E: 1304510650.584595 0003 0001 16585
3716+E: 1304510650.584595 0000 0000 0
3717+E: 1304510650.589596 0003 0036 16651
3718+E: 1304510650.589607 0003 0001 16651
3719+E: 1304510650.589607 0000 0000 0
3720+E: 1304510650.594594 0003 0035 16420
3721+E: 1304510650.594598 0003 0036 16717
3722+E: 1304510650.594605 0003 0000 16414
3723+E: 1304510650.594606 0003 0001 16717
3724+E: 1304510650.594606 0000 0000 0
3725+E: 1304510650.599594 0003 0035 16422
3726+E: 1304510650.599598 0003 0036 16785
3727+E: 1304510650.599606 0003 0000 16416
3728+E: 1304510650.599606 0003 0001 16785
3729+E: 1304510650.599607 0000 0000 0
3730+E: 1304510650.605591 0003 0036 16799
3731+E: 1304510650.605603 0003 0001 16788
3732+E: 1304510650.605604 0000 0000 0
3733+E: 1304510650.610593 0003 0036 16847
3734+E: 1304510650.610602 0003 0030 1323
3735+E: 1304510650.610605 0003 0001 16847
3736+E: 1304510650.610605 0000 0000 0
3737+E: 1304510650.615590 0003 0035 16424
3738+E: 1304510650.615593 0003 0036 16877
3739+E: 1304510650.615598 0003 0030 1356
3740+E: 1304510650.615600 0003 0000 16418
3741+E: 1304510650.615601 0003 0001 16877
3742+E: 1304510650.615601 0000 0000 0
3743+E: 1304510650.620599 0003 0036 16907
3744+E: 1304510650.620610 0003 0001 16907
3745+E: 1304510650.620611 0000 0000 0
3746+E: 1304510650.625583 0003 0035 16426
3747+E: 1304510650.625587 0003 0036 16939
3748+E: 1304510650.625595 0003 0000 16420
3749+E: 1304510650.625595 0003 0001 16939
3750+E: 1304510650.625596 0000 0000 0
3751+E: 1304510650.630596 0003 0036 16971
3752+E: 1304510650.630609 0003 0001 16971
3753+E: 1304510650.630610 0000 0000 0
3754+E: 1304510650.635591 0003 0036 16985
3755+E: 1304510650.635602 0003 0001 16974
3756+E: 1304510650.635602 0000 0000 0
3757+E: 1304510650.640593 0003 0036 17031
3758+E: 1304510650.640606 0003 0001 17031
3759+E: 1304510650.640606 0000 0000 0
3760+E: 1304510650.645582 0003 0036 17061
3761+E: 1304510650.645592 0003 0001 17061
3762+E: 1304510650.645593 0000 0000 0
3763+E: 1304510650.650594 0003 0036 17131
3764+E: 1304510650.650606 0003 0001 17131
3765+E: 1304510650.650607 0000 0000 0
3766+E: 1304510650.655591 0003 0036 17144
3767+E: 1304510650.655601 0003 0001 17134
3768+E: 1304510650.655602 0000 0000 0
3769+E: 1304510650.661592 0003 0036 17179
3770+E: 1304510650.661604 0003 0001 17179
3771+E: 1304510650.661604 0000 0000 0
3772+E: 1304510650.666588 0003 0036 17190
3773+E: 1304510650.666598 0003 0001 17181
3774+E: 1304510650.666599 0000 0000 0
3775+E: 1304510650.671593 0003 0036 17227
3776+E: 1304510650.671604 0003 0001 17227
3777+E: 1304510650.671605 0000 0000 0
3778+E: 1304510650.676593 0003 0036 17238
3779+E: 1304510650.676606 0003 0001 17229
3780+E: 1304510650.676607 0000 0000 0
3781+E: 1304510650.681593 0003 0036 17269
3782+E: 1304510650.681604 0003 0001 17269
3783+E: 1304510650.681605 0000 0000 0
3784+E: 1304510650.686589 0003 0036 17279
3785+E: 1304510650.686601 0003 0001 17271
3786+E: 1304510650.686601 0000 0000 0
3787+E: 1304510650.691597 0003 0036 17309
3788+E: 1304510650.691610 0003 0001 17309
3789+E: 1304510650.691610 0000 0000 0
3790+E: 1304510650.696585 0003 0036 17319
3791+E: 1304510650.696595 0003 0001 17311
3792+E: 1304510650.696595 0000 0000 0
3793+E: 1304510650.701592 0003 0036 17333
3794+E: 1304510650.701603 0003 0001 17322
3795+E: 1304510650.701604 0000 0000 0
3796+E: 1304510650.706578 0003 0036 17363
3797+E: 1304510650.706587 0003 0001 17363
3798+E: 1304510650.706588 0000 0000 0
3799+E: 1304510650.711595 0003 0036 17372
3800+E: 1304510650.711607 0003 0001 17365
3801+E: 1304510650.711607 0000 0000 0
3802+E: 1304510650.717594 0003 0036 17375
3803+E: 1304510650.717601 0003 0001 17367
3804+E: 1304510650.717602 0000 0000 0
3805+E: 1304510650.722591 0003 0036 17378
3806+E: 1304510650.722598 0003 0001 17369
3807+E: 1304510650.722599 0000 0000 0
3808+E: 1304510650.727591 0003 0036 17386
3809+E: 1304510650.727602 0003 0001 17377
3810+E: 1304510650.727603 0000 0000 0
3811+E: 1304510650.732591 0003 0036 17389
3812+E: 1304510650.732602 0003 0001 17380
3813+E: 1304510650.732603 0000 0000 0
3814+E: 1304510650.737590 0003 0036 17392
3815+E: 1304510650.737601 0003 0001 17383
3816+E: 1304510650.737601 0000 0000 0
3817+E: 1304510650.742591 0003 0036 17395
3818+E: 1304510650.742603 0003 0001 17386
3819+E: 1304510650.742603 0000 0000 0
3820+E: 1304510650.747575 0003 0036 17398
3821+E: 1304510650.747583 0003 0001 17389
3822+E: 1304510650.747583 0000 0000 0
3823+E: 1304510650.752592 0003 0036 17401
3824+E: 1304510650.752603 0003 0001 17392
3825+E: 1304510650.752604 0000 0000 0
3826+E: 1304510650.757587 0003 0036 17404
3827+E: 1304510650.757598 0003 0001 17395
3828+E: 1304510650.757599 0000 0000 0
3829+E: 1304510650.762594 0003 0036 17406
3830+E: 1304510650.762601 0003 0001 17397
3831+E: 1304510650.762602 0000 0000 0
3832+E: 1304510650.767584 0003 0036 17408
3833+E: 1304510650.767591 0003 0001 17399
3834+E: 1304510650.767595 0000 0000 0
3835+E: 1304510650.772601 0003 0036 17410
3836+E: 1304510650.772611 0003 0001 17401
3837+E: 1304510650.772611 0000 0000 0
3838+E: 1304510650.778599 0003 0036 17413
3839+E: 1304510650.778607 0003 0001 17404
3840+E: 1304510650.778608 0000 0000 0
3841+E: 1304510650.783591 0003 0036 17415
3842+E: 1304510650.783600 0003 0001 17406
3843+E: 1304510650.783600 0000 0000 0
3844+E: 1304510650.788598 0003 0036 17417
3845+E: 1304510650.788607 0003 0001 17408
3846+E: 1304510650.788608 0000 0000 0
3847+E: 1304510650.793591 0003 0036 17419
3848+E: 1304510650.793600 0003 0001 17410
3849+E: 1304510650.793601 0000 0000 0
3850+E: 1304510650.798597 0003 0036 17421
3851+E: 1304510650.798606 0003 0001 17412
3852+E: 1304510650.798606 0000 0000 0
3853+E: 1304510650.803590 0003 0036 17423
3854+E: 1304510650.803599 0003 0001 17414
3855+E: 1304510650.803600 0000 0000 0
3856+E: 1304510650.808602 0003 0001 17416
3857+E: 1304510650.808609 0000 0000 0
3858+E: 1304510650.813591 0003 0036 17425
3859+E: 1304510650.813600 0003 0001 17418
3860+E: 1304510650.813600 0000 0000 0
3861+E: 1304510650.818601 0003 0001 17419
3862+E: 1304510650.818607 0000 0000 0
3863+E: 1304510650.854591 0003 0030 1224
3864+E: 1304510650.854596 0000 0000 0
3865+E: 1304510650.859598 0003 0030 1191
3866+E: 1304510650.859607 0000 0000 0
3867+E: 1304510650.864596 0003 0036 17412
3868+E: 1304510650.864604 0003 0001 17417
3869+E: 1304510650.864605 0000 0000 0
3870+E: 1304510650.869597 0003 0036 17377
3871+E: 1304510650.869606 0003 0001 17377
3872+E: 1304510650.869606 0000 0000 0
3873+E: 1304510650.874596 0003 0036 17364
3874+E: 1304510650.874604 0003 0001 17373
3875+E: 1304510650.874605 0000 0000 0
3876+E: 1304510650.879591 0003 0036 17323
3877+E: 1304510650.879600 0003 0030 1323
3878+E: 1304510650.879603 0003 0001 17323
3879+E: 1304510650.879604 0000 0000 0
3880+E: 1304510650.884710 0003 0036 17291
3881+E: 1304510650.884718 0003 0030 1356
3882+E: 1304510650.884729 0003 0001 17291
3883+E: 1304510650.884731 0000 0000 0
3884+E: 1304510650.889723 0003 0036 17277
3885+E: 1304510650.889743 0003 0001 17287
3886+E: 1304510650.889745 0000 0000 0
3887+E: 1304510650.895587 0003 0036 17195
3888+E: 1304510650.895599 0003 0001 17195
3889+E: 1304510650.895600 0000 0000 0
3890+E: 1304510650.900591 0003 0036 17129
3891+E: 1304510650.900602 0003 0001 17129
3892+E: 1304510650.900603 0000 0000 0
3893+E: 1304510650.905585 0003 0036 17059
3894+E: 1304510650.905599 0003 0001 17059
3895+E: 1304510650.905600 0000 0000 0
3896+E: 1304510650.910589 0003 0036 17029
3897+E: 1304510650.910600 0003 0030 1224
3898+E: 1304510650.910603 0003 0001 17029
3899+E: 1304510650.910603 0000 0000 0
3900+E: 1304510650.915584 0003 0036 16961
3901+E: 1304510650.915592 0003 0030 1191
3902+E: 1304510650.915595 0003 0001 16961
3903+E: 1304510650.915596 0000 0000 0
3904+E: 1304510650.920587 0003 0036 16891
3905+E: 1304510650.920597 0003 0001 16891
3906+E: 1304510650.920598 0000 0000 0
3907+E: 1304510650.925587 0003 0036 16821
3908+E: 1304510650.925598 0003 0001 16821
3909+E: 1304510650.925599 0000 0000 0
3910+E: 1304510650.930586 0003 0036 16755
3911+E: 1304510650.930597 0003 0001 16755
3912+E: 1304510650.930598 0000 0000 0
3913+E: 1304510650.935586 0003 0036 16689
3914+E: 1304510650.935599 0003 0001 16689
3915+E: 1304510650.935600 0000 0000 0
3916+E: 1304510650.940588 0003 0036 16621
3917+E: 1304510650.940596 0003 0030 1323
3918+E: 1304510650.940599 0003 0001 16621
3919+E: 1304510650.940600 0000 0000 0
3920+E: 1304510650.945592 0003 0036 16589
3921+E: 1304510650.945598 0003 0030 1356
3922+E: 1304510650.945601 0003 0001 16589
3923+E: 1304510650.945607 0000 0000 0
3924+E: 1304510650.951584 0003 0036 16515
3925+E: 1304510650.951594 0003 0001 16515
3926+E: 1304510650.951595 0000 0000 0
3927+E: 1304510650.956584 0003 0036 16445
3928+E: 1304510650.956595 0003 0001 16445
3929+E: 1304510650.956595 0000 0000 0
3930+E: 1304510650.961588 0003 0036 16373
3931+E: 1304510650.961599 0003 0001 16373
3932+E: 1304510650.961599 0000 0000 0
3933+E: 1304510650.966573 0003 0036 16303
3934+E: 1304510650.966577 0003 0030 1224
3935+E: 1304510650.966583 0003 0001 16303
3936+E: 1304510650.966584 0000 0000 0
3937+E: 1304510650.971589 0003 0036 16233
3938+E: 1304510650.971598 0003 0030 1191
3939+E: 1304510650.971602 0003 0001 16233
3940+E: 1304510650.971602 0000 0000 0
3941+E: 1304510650.976582 0003 0036 16151
3942+E: 1304510650.976593 0003 0001 16151
3943+E: 1304510650.976594 0000 0000 0
3944+E: 1304510650.981590 0003 0036 16071
3945+E: 1304510650.981602 0003 0001 16071
3946+E: 1304510650.981602 0000 0000 0
3947+E: 1304510650.986585 0003 0036 15985
3948+E: 1304510650.986594 0003 0030 1323
3949+E: 1304510650.986597 0003 0001 15985
3950+E: 1304510650.986597 0000 0000 0
3951+E: 1304510650.991582 0003 0036 15903
3952+E: 1304510650.991593 0003 0030 1356
3953+E: 1304510650.991596 0003 0001 15903
3954+E: 1304510650.991597 0000 0000 0
3955+E: 1304510650.996583 0003 0036 15819
3956+E: 1304510650.996594 0003 0001 15819
3957+E: 1304510650.996594 0000 0000 0
3958+E: 1304510651.001590 0003 0036 15733
3959+E: 1304510651.001601 0003 0001 15733
3960+E: 1304510651.001601 0000 0000 0
3961+E: 1304510651.006580 0003 0036 15647
3962+E: 1304510651.006589 0003 0030 1224
3963+E: 1304510651.006592 0003 0001 15647
3964+E: 1304510651.006593 0000 0000 0
3965+E: 1304510651.012590 0003 0036 15567
3966+E: 1304510651.012599 0003 0030 1191
3967+E: 1304510651.012602 0003 0001 15567
3968+E: 1304510651.012603 0000 0000 0
3969+E: 1304510651.017592 0003 0036 15481
3970+E: 1304510651.017604 0003 0001 15481
3971+E: 1304510651.017605 0000 0000 0
3972+E: 1304510651.022587 0003 0036 15397
3973+E: 1304510651.022598 0003 0001 15397
3974+E: 1304510651.022599 0000 0000 0
3975+E: 1304510651.027589 0003 0036 15317
3976+E: 1304510651.027597 0003 0030 1323
3977+E: 1304510651.027600 0003 0001 15317
3978+E: 1304510651.027600 0000 0000 0
3979+E: 1304510651.032586 0003 0036 15233
3980+E: 1304510651.032594 0003 0030 1356
3981+E: 1304510651.032597 0003 0001 15233
3982+E: 1304510651.032597 0000 0000 0
3983+E: 1304510651.037583 0003 0035 16424
3984+E: 1304510651.037589 0003 0036 15155
3985+E: 1304510651.037592 0003 0001 15155
3986+E: 1304510651.037597 0000 0000 0
3987+E: 1304510651.042583 0003 0035 16422
3988+E: 1304510651.042592 0003 0036 15081
3989+E: 1304510651.042596 0003 0001 15081
3990+E: 1304510651.042596 0000 0000 0
3991+E: 1304510651.047582 0003 0035 16420
3992+E: 1304510651.047586 0003 0036 15005
3993+E: 1304510651.047594 0003 0001 15005
3994+E: 1304510651.047594 0000 0000 0
3995+E: 1304510651.052592 0003 0035 16418
3996+E: 1304510651.052600 0003 0036 14933
3997+E: 1304510651.052607 0003 0001 14933
3998+E: 1304510651.052608 0000 0000 0
3999+E: 1304510651.057587 0003 0035 16416
4000+E: 1304510651.057595 0003 0036 14857
4001+E: 1304510651.057596 0003 0030 1224
4002+E: 1304510651.057599 0003 0001 14857
4003+E: 1304510651.057599 0000 0000 0
4004+E: 1304510651.062586 0003 0036 14785
4005+E: 1304510651.062590 0003 0030 1191
4006+E: 1304510651.062593 0003 0001 14785
4007+E: 1304510651.062594 0000 0000 0
4008+E: 1304510651.068589 0003 0036 14703
4009+E: 1304510651.068601 0003 0001 14703
4010+E: 1304510651.068602 0000 0000 0
4011+E: 1304510651.073586 0003 0035 16414
4012+E: 1304510651.073590 0003 0036 14625
4013+E: 1304510651.073594 0003 0001 14625
4014+E: 1304510651.073598 0000 0000 0
4015+E: 1304510651.078582 0003 0036 14543
4016+E: 1304510651.078592 0003 0030 1323
4017+E: 1304510651.078594 0003 0001 14543
4018+E: 1304510651.078595 0000 0000 0
4019+E: 1304510651.083580 0003 0035 16412
4020+E: 1304510651.083584 0003 0036 14455
4021+E: 1304510651.083585 0003 0030 1356
4022+E: 1304510651.083588 0003 0000 16418
4023+E: 1304510651.083588 0003 0001 14455
4024+E: 1304510651.083589 0000 0000 0
4025+E: 1304510651.088582 0003 0035 16410
4026+E: 1304510651.088586 0003 0036 14369
4027+E: 1304510651.088593 0003 0000 16416
4028+E: 1304510651.088594 0003 0001 14369
4029+E: 1304510651.088594 0000 0000 0
4030+E: 1304510651.093585 0003 0035 16407
4031+E: 1304510651.093589 0003 0036 14287
4032+E: 1304510651.093592 0003 0000 16413
4033+E: 1304510651.093592 0003 0001 14287
4034+E: 1304510651.093593 0000 0000 0
4035+E: 1304510651.098568 0003 0035 16404
4036+E: 1304510651.098571 0003 0036 14201
4037+E: 1304510651.098572 0003 0030 1224
4038+E: 1304510651.098577 0003 0000 16410
4039+E: 1304510651.098578 0003 0001 14201
4040+E: 1304510651.098578 0000 0000 0
4041+E: 1304510651.103585 0003 0035 16401
4042+E: 1304510651.103589 0003 0036 14107
4043+E: 1304510651.103590 0003 0030 1191
4044+E: 1304510651.103593 0003 0000 16407
4045+E: 1304510651.103593 0003 0001 14107
4046+E: 1304510651.103594 0000 0000 0
4047+E: 1304510651.108575 0003 0035 16398
4048+E: 1304510651.108578 0003 0036 14011
4049+E: 1304510651.108585 0003 0000 16404
4050+E: 1304510651.108586 0003 0001 14011
4051+E: 1304510651.108586 0000 0000 0
4052+E: 1304510651.113586 0003 0035 16395
4053+E: 1304510651.113591 0003 0036 13921
4054+E: 1304510651.113592 0003 0030 1323
4055+E: 1304510651.113595 0003 0000 16401
4056+E: 1304510651.113595 0003 0001 13921
4057+E: 1304510651.113596 0000 0000 0
4058+E: 1304510651.118584 0003 0035 16391
4059+E: 1304510651.118589 0003 0036 13831
4060+E: 1304510651.118590 0003 0030 1356
4061+E: 1304510651.118592 0003 0000 16398
4062+E: 1304510651.118595 0003 0001 13831
4063+E: 1304510651.118596 0000 0000 0
4064+E: 1304510651.124590 0003 0035 16383
4065+E: 1304510651.124594 0003 0036 13745
4066+E: 1304510651.124597 0003 0000 16390
4067+E: 1304510651.124600 0003 0001 13745
4068+E: 1304510651.124601 0000 0000 0
4069+E: 1304510651.129568 0003 0035 16380
4070+E: 1304510651.129571 0003 0036 13655
4071+E: 1304510651.129578 0003 0000 16387
4072+E: 1304510651.129578 0003 0001 13655
4073+E: 1304510651.129578 0000 0000 0
4074+E: 1304510651.134582 0003 0035 16376
4075+E: 1304510651.134586 0003 0036 13563
4076+E: 1304510651.134593 0003 0000 16384
4077+E: 1304510651.134594 0003 0001 13563
4078+E: 1304510651.134594 0000 0000 0
4079+E: 1304510651.139578 0003 0035 16368
4080+E: 1304510651.139583 0003 0036 13473
4081+E: 1304510651.139588 0003 0034 1
4082+E: 1304510651.139588 0003 0030 1299
4083+E: 1304510651.139591 0003 0000 16376
4084+E: 1304510651.139592 0003 0001 13473
4085+E: 1304510651.139593 0000 0000 0
4086+E: 1304510651.144581 0003 0035 16365
4087+E: 1304510651.144585 0003 0036 13383
4088+E: 1304510651.144590 0003 0030 1256
4089+E: 1304510651.144592 0003 0000 16373
4090+E: 1304510651.144593 0003 0001 13383
4091+E: 1304510651.144594 0000 0000 0
4092+E: 1304510651.149583 0003 0035 16357
4093+E: 1304510651.149587 0003 0036 13291
4094+E: 1304510651.149594 0003 0000 16365
4095+E: 1304510651.149595 0003 0001 13291
4096+E: 1304510651.149596 0000 0000 0
4097+E: 1304510651.154588 0003 0035 16354
4098+E: 1304510651.154598 0003 0036 13195
4099+E: 1304510651.154599 0003 0034 0
4100+E: 1304510651.154600 0003 0030 1306
4101+E: 1304510651.154603 0003 0000 16362
4102+E: 1304510651.154604 0003 0001 13195
4103+E: 1304510651.154604 0000 0000 0
4104+E: 1304510651.159587 0003 0035 16351
4105+E: 1304510651.159591 0003 0036 13107
4106+E: 1304510651.159596 0003 0030 1343
4107+E: 1304510651.159599 0003 0000 16359
4108+E: 1304510651.159599 0003 0001 13107
4109+E: 1304510651.159600 0000 0000 0
4110+E: 1304510651.164588 0003 0035 16348
4111+E: 1304510651.164593 0003 0036 13017
4112+E: 1304510651.164600 0003 0000 16356
4113+E: 1304510651.164601 0003 0001 13017
4114+E: 1304510651.164601 0000 0000 0
4115+E: 1304510651.169570 0003 0035 16344
4116+E: 1304510651.169577 0003 0036 12931
4117+E: 1304510651.169580 0003 0000 16353
4118+E: 1304510651.169580 0003 0001 12931
4119+E: 1304510651.169581 0000 0000 0
4120+E: 1304510651.174584 0003 0035 16340
4121+E: 1304510651.174592 0003 0036 12851
4122+E: 1304510651.174596 0003 0000 16349
4123+E: 1304510651.174596 0003 0001 12851
4124+E: 1304510651.174597 0000 0000 0
4125+E: 1304510651.179581 0003 0035 16336
4126+E: 1304510651.179585 0003 0036 12775
4127+E: 1304510651.179592 0003 0000 16345
4128+E: 1304510651.179593 0003 0001 12775
4129+E: 1304510651.179594 0000 0000 0
4130+E: 1304510651.185588 0003 0035 16328
4131+E: 1304510651.185592 0003 0036 12697
4132+E: 1304510651.185597 0003 0034 1
4133+E: 1304510651.185598 0003 0030 1289
4134+E: 1304510651.185601 0003 0000 16336
4135+E: 1304510651.185601 0003 0001 12697
4136+E: 1304510651.185602 0000 0000 0
4137+E: 1304510651.190567 0003 0035 16325
4138+E: 1304510651.190574 0003 0036 12617
4139+E: 1304510651.190575 0003 0030 1249
4140+E: 1304510651.190577 0003 0000 16333
4141+E: 1304510651.190577 0003 0001 12617
4142+E: 1304510651.190578 0000 0000 0
4143+E: 1304510651.195586 0003 0035 16322
4144+E: 1304510651.195590 0003 0036 12533
4145+E: 1304510651.195597 0003 0000 16330
4146+E: 1304510651.195598 0003 0001 12533
4147+E: 1304510651.195598 0000 0000 0
4148+E: 1304510651.200572 0003 0035 16319
4149+E: 1304510651.200580 0003 0036 12451
4150+E: 1304510651.200583 0003 0000 16327
4151+E: 1304510651.200583 0003 0001 12451
4152+E: 1304510651.200584 0000 0000 0
4153+E: 1304510651.205583 0003 0035 16316
4154+E: 1304510651.205587 0003 0036 12365
4155+E: 1304510651.205587 0003 0034 0
4156+E: 1304510651.205588 0003 0030 1300
4157+E: 1304510651.205591 0003 0000 16324
4158+E: 1304510651.205591 0003 0001 12365
4159+E: 1304510651.205592 0000 0000 0
4160+E: 1304510651.210583 0003 0035 16313
4161+E: 1304510651.210587 0003 0036 12283
4162+E: 1304510651.210593 0003 0030 1339
4163+E: 1304510651.210596 0003 0000 16321
4164+E: 1304510651.210596 0003 0001 12283
4165+E: 1304510651.210597 0000 0000 0
4166+E: 1304510651.215582 0003 0035 16310
4167+E: 1304510651.215586 0003 0036 12199
4168+E: 1304510651.215593 0003 0000 16318
4169+E: 1304510651.215594 0003 0001 12199
4170+E: 1304510651.215595 0000 0000 0
4171+E: 1304510651.220578 0003 0035 16302
4172+E: 1304510651.220581 0003 0036 12109
4173+E: 1304510651.220589 0003 0000 16310
4174+E: 1304510651.220589 0003 0001 12109
4175+E: 1304510651.220590 0000 0000 0
4176+E: 1304510651.225581 0003 0035 16293
4177+E: 1304510651.225585 0003 0036 12015
4178+E: 1304510651.225589 0003 0034 1
4179+E: 1304510651.225590 0003 0030 1286
4180+E: 1304510651.225593 0003 0000 16301
4181+E: 1304510651.225593 0003 0001 12015
4182+E: 1304510651.225594 0000 0000 0
4183+E: 1304510651.230574 0003 0035 16285
4184+E: 1304510651.230582 0003 0036 11921
4185+E: 1304510651.230583 0003 0030 1247
4186+E: 1304510651.230586 0003 0000 16293
4187+E: 1304510651.230587 0003 0001 11921
4188+E: 1304510651.230587 0000 0000 0
4189+E: 1304510651.235581 0003 0035 16282
4190+E: 1304510651.235585 0003 0036 11825
4191+E: 1304510651.235590 0003 0034 0
4192+E: 1304510651.235590 0003 0030 1299
4193+E: 1304510651.235593 0003 0000 16290
4194+E: 1304510651.235593 0003 0001 11825
4195+E: 1304510651.235594 0000 0000 0
4196+E: 1304510651.241581 0003 0035 16280
4197+E: 1304510651.241589 0003 0036 11723
4198+E: 1304510651.241590 0003 0030 1338
4199+E: 1304510651.241593 0003 0000 16287
4200+E: 1304510651.241593 0003 0001 11723
4201+E: 1304510651.241594 0000 0000 0
4202+E: 1304510651.246582 0003 0035 16278
4203+E: 1304510651.246586 0003 0036 11631
4204+E: 1304510651.246590 0003 0000 16284
4205+E: 1304510651.246594 0003 0001 11631
4206+E: 1304510651.246594 0000 0000 0
4207+E: 1304510651.251571 0003 0035 16238
4208+E: 1304510651.251574 0003 0036 11531
4209+E: 1304510651.251576 0003 0000 16238
4210+E: 1304510651.251577 0003 0001 11531
4211+E: 1304510651.251577 0000 0000 0
4212+E: 1304510651.256580 0003 0035 16204
4213+E: 1304510651.256584 0003 0036 11431
4214+E: 1304510651.256589 0003 0034 1
4215+E: 1304510651.256589 0003 0030 1286
4216+E: 1304510651.256592 0003 0000 16204
4217+E: 1304510651.256593 0003 0001 11431
4218+E: 1304510651.256593 0000 0000 0
4219+E: 1304510651.261582 0003 0035 16190
4220+E: 1304510651.261586 0003 0036 11325
4221+E: 1304510651.261587 0003 0030 1247
4222+E: 1304510651.261589 0003 0000 16200
4223+E: 1304510651.261590 0003 0001 11325
4224+E: 1304510651.261597 0000 0000 0
4225+E: 1304510651.266581 0003 0035 16187
4226+E: 1304510651.266584 0003 0036 11223
4227+E: 1304510651.266592 0003 0000 16196
4228+E: 1304510651.266592 0003 0001 11223
4229+E: 1304510651.266593 0000 0000 0
4230+E: 1304510651.271578 0003 0035 16185
4231+E: 1304510651.271585 0003 0036 11121
4232+E: 1304510651.271589 0003 0000 16193
4233+E: 1304510651.271589 0003 0001 11121
4234+E: 1304510651.271590 0000 0000 0
4235+E: 1304510651.276583 0003 0035 16170
4236+E: 1304510651.276587 0003 0036 11029
4237+E: 1304510651.276587 0003 0034 0
4238+E: 1304510651.276588 0003 0030 1299
4239+E: 1304510651.276591 0003 0000 16181
4240+E: 1304510651.276596 0003 0001 11029
4241+E: 1304510651.276597 0000 0000 0
4242+E: 1304510651.281565 0003 0036 10933
4243+E: 1304510651.281573 0003 0030 1338
4244+E: 1304510651.281574 0003 0000 16178
4245+E: 1304510651.281575 0003 0001 10933
4246+E: 1304510651.281575 0000 0000 0
4247+E: 1304510651.286579 0003 0035 16140
4248+E: 1304510651.286582 0003 0036 10831
4249+E: 1304510651.286590 0003 0000 16140
4250+E: 1304510651.286590 0003 0001 10831
4251+E: 1304510651.286591 0000 0000 0
4252+E: 1304510651.291572 0003 0035 16130
4253+E: 1304510651.291580 0003 0036 10735
4254+E: 1304510651.291583 0003 0000 16137
4255+E: 1304510651.291583 0003 0001 10735
4256+E: 1304510651.291584 0000 0000 0
4257+E: 1304510651.296583 0003 0035 16098
4258+E: 1304510651.296587 0003 0036 10639
4259+E: 1304510651.296591 0003 0034 1
4260+E: 1304510651.296592 0003 0030 1286
4261+E: 1304510651.296595 0003 0000 16098
4262+E: 1304510651.296595 0003 0001 10639
4263+E: 1304510651.296596 0000 0000 0
4264+E: 1304510651.302588 0003 0036 10535
4265+E: 1304510651.302593 0003 0030 1247
4266+E: 1304510651.302596 0003 0001 10535
4267+E: 1304510651.302601 0000 0000 0
4268+E: 1304510651.307584 0003 0035 16095
4269+E: 1304510651.307588 0003 0036 10431
4270+E: 1304510651.307596 0003 0001 10431
4271+E: 1304510651.307596 0000 0000 0
4272+E: 1304510651.312577 0003 0036 10327
4273+E: 1304510651.312584 0003 0034 0
4274+E: 1304510651.312585 0003 0030 1299
4275+E: 1304510651.312588 0003 0001 10327
4276+E: 1304510651.312588 0000 0000 0
4277+E: 1304510651.317584 0003 0035 16087
4278+E: 1304510651.317588 0003 0036 10225
4279+E: 1304510651.317593 0003 0030 1338
4280+E: 1304510651.317596 0003 0000 16095
4281+E: 1304510651.317596 0003 0001 10225
4282+E: 1304510651.317597 0000 0000 0
4283+E: 1304510651.322579 0003 0035 16074
4284+E: 1304510651.322587 0003 0036 10123
4285+E: 1304510651.322590 0003 0000 16084
4286+E: 1304510651.322591 0003 0001 10123
4287+E: 1304510651.322591 0000 0000 0
4288+E: 1304510651.327574 0003 0035 16060
4289+E: 1304510651.327578 0003 0036 10017
4290+E: 1304510651.327583 0003 0030 1276
4291+E: 1304510651.327583 0003 0031 843
4292+E: 1304510651.327586 0003 0000 16072
4293+E: 1304510651.327586 0003 0001 10017
4294+E: 1304510651.327587 0000 0000 0
4295+E: 1304510651.332577 0003 0036 9909
4296+E: 1304510651.332585 0003 0030 1230
4297+E: 1304510651.332586 0003 0031 801
4298+E: 1304510651.332588 0003 0000 16069
4299+E: 1304510651.332589 0003 0001 9909
4300+E: 1304510651.332589 0000 0000 0
4301+E: 1304510651.337579 0003 0035 16049
4302+E: 1304510651.337582 0003 0036 9803
4303+E: 1304510651.337588 0003 0030 1195
4304+E: 1304510651.337590 0003 0000 16059
4305+E: 1304510651.337591 0003 0001 9803
4306+E: 1304510651.337591 0000 0000 0
4307+E: 1304510651.342574 0003 0035 16036
4308+E: 1304510651.342578 0003 0036 9695
4309+E: 1304510651.342583 0003 0030 1325
4310+E: 1304510651.342585 0003 0000 16047
4311+E: 1304510651.342586 0003 0001 9695
4312+E: 1304510651.342586 0000 0000 0
4313+E: 1304510651.347579 0003 0035 16025
4314+E: 1304510651.347583 0003 0036 9585
4315+E: 1304510651.347584 0003 0030 1357
4316+E: 1304510651.347585 0003 0031 965
4317+E: 1304510651.347587 0003 0000 16036
4318+E: 1304510651.347588 0003 0001 9585
4319+E: 1304510651.347593 0000 0000 0
4320+E: 1304510651.352581 0003 0036 9477
4321+E: 1304510651.352589 0003 0031 821
4322+E: 1304510651.352592 0003 0000 16033
4323+E: 1304510651.352593 0003 0001 9477
4324+E: 1304510651.352593 0000 0000 0
4325+E: 1304510651.358582 0003 0035 16021
4326+E: 1304510651.358586 0003 0036 9369
4327+E: 1304510651.358591 0003 0031 785
4328+E: 1304510651.358593 0003 0000 16030
4329+E: 1304510651.358594 0003 0001 9369
4330+E: 1304510651.358594 0000 0000 0
4331+E: 1304510651.363574 0003 0035 16010
4332+E: 1304510651.363579 0003 0036 9267
4333+E: 1304510651.363580 0003 0030 1224
4334+E: 1304510651.363582 0003 0000 16020
4335+E: 1304510651.363583 0003 0001 9267
4336+E: 1304510651.363583 0000 0000 0
4337+E: 1304510651.368576 0003 0035 16000
4338+E: 1304510651.368580 0003 0036 9167
4339+E: 1304510651.368584 0003 0030 1191
4340+E: 1304510651.368587 0003 0000 16010
4341+E: 1304510651.368588 0003 0001 9167
4342+E: 1304510651.368588 0000 0000 0
4343+E: 1304510651.373572 0003 0035 15990
4344+E: 1304510651.373576 0003 0036 9067
4345+E: 1304510651.373579 0003 0000 16000
4346+E: 1304510651.373580 0003 0001 9067
4347+E: 1304510651.373580 0000 0000 0
4348+E: 1304510651.378586 0003 0035 15981
4349+E: 1304510651.378591 0003 0036 8957
4350+E: 1304510651.378596 0003 0030 1323
4351+E: 1304510651.378599 0003 0000 15990
4352+E: 1304510651.378599 0003 0001 8957
4353+E: 1304510651.378600 0000 0000 0
4354+E: 1304510651.383563 0003 0036 8855
4355+E: 1304510651.383566 0003 0030 1356
4356+E: 1304510651.383568 0003 0000 15987
4357+E: 1304510651.383568 0003 0001 8855
4358+E: 1304510651.383569 0000 0000 0
4359+E: 1304510651.388579 0003 0035 15990
4360+E: 1304510651.388583 0003 0036 8751
4361+E: 1304510651.388591 0003 0001 8751
4362+E: 1304510651.388591 0000 0000 0
4363+E: 1304510651.393568 0003 0035 15999
4364+E: 1304510651.393571 0003 0036 8647
4365+E: 1304510651.393574 0003 0000 15990
4366+E: 1304510651.393575 0003 0001 8647
4367+E: 1304510651.393575 0000 0000 0
4368+E: 1304510651.398583 0003 0035 16006
4369+E: 1304510651.398586 0003 0036 8547
4370+E: 1304510651.398591 0003 0030 1224
4371+E: 1304510651.398594 0003 0000 15998
4372+E: 1304510651.398595 0003 0001 8547
4373+E: 1304510651.398595 0000 0000 0
4374+E: 1304510651.403573 0003 0035 16004
4375+E: 1304510651.403577 0003 0036 8443
4376+E: 1304510651.403578 0003 0030 1191
4377+E: 1304510651.403580 0003 0001 8443
4378+E: 1304510651.403581 0000 0000 0
4379+E: 1304510651.408581 0003 0036 8337
4380+E: 1304510651.408593 0003 0001 8337
4381+E: 1304510651.408593 0000 0000 0
4382+E: 1304510651.414567 0003 0036 8229
4383+E: 1304510651.414574 0003 0030 1323
4384+E: 1304510651.414577 0003 0001 8229
4385+E: 1304510651.414577 0000 0000 0
4386+E: 1304510651.419580 0003 0035 16002
4387+E: 1304510651.419584 0003 0036 8117
4388+E: 1304510651.419589 0003 0030 1356
4389+E: 1304510651.419592 0003 0001 8117
4390+E: 1304510651.419593 0000 0000 0
4391+E: 1304510651.424575 0003 0036 8013
4392+E: 1304510651.424586 0003 0001 8013
4393+E: 1304510651.424587 0000 0000 0
4394+E: 1304510651.429580 0003 0035 15994
4395+E: 1304510651.429583 0003 0036 7909
4396+E: 1304510651.429591 0003 0001 7909
4397+E: 1304510651.429591 0000 0000 0
4398+E: 1304510651.434574 0003 0036 7805
4399+E: 1304510651.434582 0003 0030 1224
4400+E: 1304510651.434585 0003 0001 7805
4401+E: 1304510651.434586 0000 0000 0
4402+E: 1304510651.439578 0003 0036 7703
4403+E: 1304510651.439586 0003 0030 1191
4404+E: 1304510651.439590 0003 0001 7703
4405+E: 1304510651.439590 0000 0000 0
4406+E: 1304510651.444593 0003 0035 15991
4407+E: 1304510651.444600 0003 0036 7599
4408+E: 1304510651.444607 0003 0000 15996
4409+E: 1304510651.444608 0003 0001 7599
4410+E: 1304510651.444608 0000 0000 0
4411+E: 1304510651.449581 0003 0035 15980
4412+E: 1304510651.449585 0003 0036 7485
4413+E: 1304510651.449590 0003 0030 1323
4414+E: 1304510651.449593 0003 0000 15988
4415+E: 1304510651.449593 0003 0001 7485
4416+E: 1304510651.449594 0000 0000 0
4417+E: 1304510651.454564 0003 0035 15970
4418+E: 1304510651.454567 0003 0036 7379
4419+E: 1304510651.454568 0003 0030 1356
4420+E: 1304510651.454573 0003 0000 15979
4421+E: 1304510651.454574 0003 0001 7379
4422+E: 1304510651.454574 0000 0000 0
4423+E: 1304510651.459579 0003 0035 15959
4424+E: 1304510651.459583 0003 0036 7275
4425+E: 1304510651.459590 0003 0000 15969
4426+E: 1304510651.459591 0003 0001 7275
4427+E: 1304510651.459591 0000 0000 0
4428+E: 1304510651.464572 0003 0036 7171
4429+E: 1304510651.464583 0003 0000 15966
4430+E: 1304510651.464583 0003 0001 7171
4431+E: 1304510651.464584 0000 0000 0
4432+E: 1304510651.469578 0003 0036 7069
4433+E: 1304510651.469589 0003 0000 15964
4434+E: 1304510651.469589 0003 0001 7069
4435+E: 1304510651.469590 0000 0000 0
4436+E: 1304510651.475577 0003 0036 6965
4437+E: 1304510651.475586 0003 0030 1224
4438+E: 1304510651.475589 0003 0001 6965
4439+E: 1304510651.475589 0000 0000 0
4440+E: 1304510651.480588 0003 0036 6855
4441+E: 1304510651.480597 0003 0030 1191
4442+E: 1304510651.480600 0003 0001 6855
4443+E: 1304510651.480601 0000 0000 0
4444+E: 1304510651.485562 0003 0036 6745
4445+E: 1304510651.485565 0003 0030 1323
4446+E: 1304510651.485571 0003 0001 6745
4447+E: 1304510651.485571 0000 0000 0
4448+E: 1304510651.490575 0003 0036 6641
4449+E: 1304510651.490580 0003 0030 1356
4450+E: 1304510651.490582 0003 0001 6641
4451+E: 1304510651.490583 0000 0000 0
4452+E: 1304510651.495575 0003 0035 15949
4453+E: 1304510651.495581 0003 0036 6539
4454+E: 1304510651.495584 0003 0000 15956
4455+E: 1304510651.495585 0003 0001 6539
4456+E: 1304510651.495585 0000 0000 0
4457+E: 1304510651.500579 0003 0035 15941
4458+E: 1304510651.500582 0003 0036 6439
4459+E: 1304510651.500589 0003 0000 15948
4460+E: 1304510651.500590 0003 0001 6439
4461+E: 1304510651.500590 0000 0000 0
4462+E: 1304510651.505572 0003 0035 15937
4463+E: 1304510651.505580 0003 0036 6341
4464+E: 1304510651.505583 0003 0000 15945
4465+E: 1304510651.505583 0003 0001 6341
4466+E: 1304510651.505584 0000 0000 0
4467+E: 1304510651.510574 0003 0035 15926
4468+E: 1304510651.510579 0003 0036 6235
4469+E: 1304510651.510584 0003 0030 1224
4470+E: 1304510651.510586 0003 0000 15935
4471+E: 1304510651.510587 0003 0001 6235
4472+E: 1304510651.510587 0000 0000 0
4473+E: 1304510651.515574 0003 0035 15917
4474+E: 1304510651.515577 0003 0036 6125
4475+E: 1304510651.515582 0003 0030 1191
4476+E: 1304510651.515584 0003 0000 15926
4477+E: 1304510651.515585 0003 0001 6125
4478+E: 1304510651.515585 0000 0000 0
4479+E: 1304510651.520577 0003 0035 15907
4480+E: 1304510651.520583 0003 0036 6015
4481+E: 1304510651.520588 0003 0030 1323
4482+E: 1304510651.520591 0003 0000 15916
4483+E: 1304510651.520591 0003 0001 6015
4484+E: 1304510651.520592 0000 0000 0
4485+E: 1304510651.525567 0003 0035 15897
4486+E: 1304510651.525570 0003 0036 5909
4487+E: 1304510651.525575 0003 0030 1356
4488+E: 1304510651.525578 0003 0000 15906
4489+E: 1304510651.525578 0003 0001 5909
4490+E: 1304510651.525579 0000 0000 0
4491+E: 1304510651.531583 0003 0035 15885
4492+E: 1304510651.531588 0003 0036 5809
4493+E: 1304510651.531591 0003 0000 15895
4494+E: 1304510651.531592 0003 0001 5809
4495+E: 1304510651.531593 0000 0000 0
4496+E: 1304510651.536562 0003 0035 15870
4497+E: 1304510651.536564 0003 0036 5711
4498+E: 1304510651.536571 0003 0000 15882
4499+E: 1304510651.536572 0003 0001 5711
4500+E: 1304510651.536572 0000 0000 0
4501+E: 1304510651.541580 0003 0035 15840
4502+E: 1304510651.541584 0003 0036 5613
4503+E: 1304510651.541591 0003 0000 15840
4504+E: 1304510651.541592 0003 0001 5613
4505+E: 1304510651.541592 0000 0000 0
4506+E: 1304510651.546575 0003 0035 15831
4507+E: 1304510651.546579 0003 0036 5509
4508+E: 1304510651.546584 0003 0030 1224
4509+E: 1304510651.546586 0003 0000 15837
4510+E: 1304510651.546587 0003 0001 5509
4511+E: 1304510651.546587 0000 0000 0
4512+E: 1304510651.551575 0003 0035 15819
4513+E: 1304510651.551585 0003 0036 5405
4514+E: 1304510651.551586 0003 0030 1191
4515+E: 1304510651.551588 0003 0000 15828
4516+E: 1304510651.551589 0003 0001 5405
4517+E: 1304510651.551589 0000 0000 0
4518+E: 1304510651.556571 0003 0035 15805
4519+E: 1304510651.556574 0003 0036 5299
4520+E: 1304510651.556579 0003 0030 1323
4521+E: 1304510651.556582 0003 0000 15816
4522+E: 1304510651.556582 0003 0001 5299
4523+E: 1304510651.556583 0000 0000 0
4524+E: 1304510651.561580 0003 0035 15790
4525+E: 1304510651.561584 0003 0036 5197
4526+E: 1304510651.561585 0003 0030 1356
4527+E: 1304510651.561588 0003 0000 15803
4528+E: 1304510651.561589 0003 0001 5197
4529+E: 1304510651.561589 0000 0000 0
4530+E: 1304510651.566574 0003 0035 15777
4531+E: 1304510651.566577 0003 0036 5097
4532+E: 1304510651.566585 0003 0000 15790
4533+E: 1304510651.566585 0003 0001 5097
4534+E: 1304510651.566586 0000 0000 0
4535+E: 1304510651.571578 0003 0035 15740
4536+E: 1304510651.571586 0003 0036 5003
4537+E: 1304510651.571589 0003 0000 15740
4538+E: 1304510651.571590 0003 0001 5003
4539+E: 1304510651.571590 0000 0000 0
4540+E: 1304510651.576562 0003 0035 15730
4541+E: 1304510651.576565 0003 0036 4909
4542+E: 1304510651.576570 0003 0000 15737
4543+E: 1304510651.576571 0003 0001 4909
4544+E: 1304510651.576571 0000 0000 0
4545+E: 1304510651.581575 0003 0035 15716
4546+E: 1304510651.581584 0003 0036 4813
4547+E: 1304510651.581585 0003 0030 1224
4548+E: 1304510651.581588 0003 0000 15726
4549+E: 1304510651.581589 0003 0001 4813
4550+E: 1304510651.581589 0000 0000 0
4551+E: 1304510651.586564 0003 0035 15684
4552+E: 1304510651.586567 0003 0036 4705
4553+E: 1304510651.586568 0003 0030 1191
4554+E: 1304510651.586570 0003 0000 15684
4555+E: 1304510651.586571 0003 0001 4705
4556+E: 1304510651.586571 0000 0000 0
4557+E: 1304510651.592579 0003 0035 15676
4558+E: 1304510651.592585 0003 0036 4599
4559+E: 1304510651.592590 0003 0030 1323
4560+E: 1304510651.592593 0003 0000 15682
4561+E: 1304510651.592593 0003 0001 4599
4562+E: 1304510651.592594 0000 0000 0
4563+E: 1304510651.597572 0003 0035 15664
4564+E: 1304510651.597576 0003 0036 4493
4565+E: 1304510651.597580 0003 0030 1356
4566+E: 1304510651.597583 0003 0000 15673
4567+E: 1304510651.597583 0003 0001 4493
4568+E: 1304510651.597584 0000 0000 0
4569+E: 1304510651.602577 0003 0035 15626
4570+E: 1304510651.602585 0003 0036 4387
4571+E: 1304510651.602588 0003 0000 15626
4572+E: 1304510651.602589 0003 0001 4387
4573+E: 1304510651.602590 0000 0000 0
4574+E: 1304510651.607614 0003 0035 15616
4575+E: 1304510651.607617 0003 0036 4285
4576+E: 1304510651.607624 0003 0000 15623
4577+E: 1304510651.607625 0003 0001 4285
4578+E: 1304510651.607625 0000 0000 0
4579+E: 1304510651.612575 0003 0035 15584
4580+E: 1304510651.612579 0003 0036 4183
4581+E: 1304510651.612586 0003 0000 15584
4582+E: 1304510651.612587 0003 0001 4183
4583+E: 1304510651.612587 0000 0000 0
4584+E: 1304510651.617565 0003 0035 15573
4585+E: 1304510651.617569 0003 0036 4075
4586+E: 1304510651.617574 0003 0030 1224
4587+E: 1304510651.617576 0003 0000 15581
4588+E: 1304510651.617576 0003 0001 4075
4589+E: 1304510651.617577 0000 0000 0
4590+E: 1304510651.622577 0003 0035 15536
4591+E: 1304510651.622581 0003 0036 3965
4592+E: 1304510651.622585 0003 0030 1191
4593+E: 1304510651.622588 0003 0000 15536
4594+E: 1304510651.622589 0003 0001 3965
4595+E: 1304510651.622589 0000 0000 0
4596+E: 1304510651.627579 0003 0035 15506
4597+E: 1304510651.627583 0003 0036 3853
4598+E: 1304510651.627584 0003 0030 1323
4599+E: 1304510651.627586 0003 0000 15506
4600+E: 1304510651.627586 0003 0001 3853
4601+E: 1304510651.627587 0000 0000 0
4602+E: 1304510651.632578 0003 0035 15472
4603+E: 1304510651.632582 0003 0036 3739
4604+E: 1304510651.632583 0003 0030 1356
4605+E: 1304510651.632586 0003 0000 15472
4606+E: 1304510651.632586 0003 0001 3739
4607+E: 1304510651.632587 0000 0000 0
4608+E: 1304510651.637580 0003 0035 15438
4609+E: 1304510651.637584 0003 0036 3633
4610+E: 1304510651.637592 0003 0000 15438
4611+E: 1304510651.637592 0003 0001 3633
4612+E: 1304510651.637593 0000 0000 0
4613+E: 1304510651.642573 0003 0035 15404
4614+E: 1304510651.642581 0003 0036 3521
4615+E: 1304510651.642585 0003 0000 15404
4616+E: 1304510651.642585 0003 0001 3521
4617+E: 1304510651.642586 0000 0000 0
4618+E: 1304510651.648572 0003 0035 15370
4619+E: 1304510651.648576 0003 0036 3405
4620+E: 1304510651.648581 0003 0030 1224
4621+E: 1304510651.648583 0003 0000 15370
4622+E: 1304510651.648584 0003 0001 3405
4623+E: 1304510651.648585 0000 0000 0
4624+E: 1304510651.653572 0003 0035 15340
4625+E: 1304510651.653577 0003 0036 3287
4626+E: 1304510651.653578 0003 0030 1191
4627+E: 1304510651.653580 0003 0000 15340
4628+E: 1304510651.653581 0003 0001 3287
4629+E: 1304510651.653581 0000 0000 0
4630+E: 1304510651.658578 0003 0035 15326
4631+E: 1304510651.658583 0003 0036 3171
4632+E: 1304510651.658588 0003 0030 1323
4633+E: 1304510651.658591 0003 0000 15336
4634+E: 1304510651.658592 0003 0001 3171
4635+E: 1304510651.658592 0000 0000 0
4636+E: 1304510651.663568 0003 0035 15280
4637+E: 1304510651.663573 0003 0036 3049
4638+E: 1304510651.663574 0003 0030 1356
4639+E: 1304510651.663577 0003 0000 15280
4640+E: 1304510651.663577 0003 0001 3049
4641+E: 1304510651.663578 0000 0000 0
4642+E: 1304510651.668574 0003 0035 15248
4643+E: 1304510651.668583 0003 0036 2927
4644+E: 1304510651.668586 0003 0000 15248
4645+E: 1304510651.668587 0003 0001 2927
4646+E: 1304510651.668587 0000 0000 0
4647+E: 1304510651.673576 0003 0035 15216
4648+E: 1304510651.673580 0003 0036 2805
4649+E: 1304510651.673581 0003 0030 1224
4650+E: 1304510651.673584 0003 0000 15216
4651+E: 1304510651.673585 0003 0001 2805
4652+E: 1304510651.673585 0000 0000 0
4653+E: 1304510651.678565 0003 0035 15172
4654+E: 1304510651.678568 0003 0036 2679
4655+E: 1304510651.678573 0003 0030 1191
4656+E: 1304510651.678575 0003 0000 15172
4657+E: 1304510651.678576 0003 0001 2679
4658+E: 1304510651.678576 0000 0000 0
4659+E: 1304510651.683580 0003 0035 15124
4660+E: 1304510651.683585 0003 0036 2551
4661+E: 1304510651.683588 0003 0000 15124
4662+E: 1304510651.683589 0003 0001 2551
4663+E: 1304510651.683590 0000 0000 0
4664+E: 1304510651.688579 0003 0035 15076
4665+E: 1304510651.688584 0003 0036 2427
4666+E: 1304510651.688585 0003 0030 1323
4667+E: 1304510651.688588 0003 0000 15076
4668+E: 1304510651.688588 0003 0001 2427
4669+E: 1304510651.688589 0000 0000 0
4670+E: 1304510651.693582 0003 0035 15024
4671+E: 1304510651.693615 0003 0036 2309
4672+E: 1304510651.693616 0003 0030 1356
4673+E: 1304510651.693619 0003 0000 15024
4674+E: 1304510651.693623 0003 0001 2309
4675+E: 1304510651.693623 0000 0000 0
4676+E: 1304510651.698609 0003 0035 14968
4677+E: 1304510651.698615 0003 0036 2185
4678+E: 1304510651.698617 0003 0030 1224
4679+E: 1304510651.698625 0003 0000 14968
4680+E: 1304510651.698626 0003 0001 2185
4681+E: 1304510651.698627 0000 0000 0
4682+E: 1304510651.703613 0003 0039 -1
4683+E: 1304510651.703621 0001 014a 0
4684+E: 1304510651.703627 0000 0000 0
4685+E: 1304510652.695704 0003 0039 136
4686+E: 1304510652.695720 0003 0035 16944
4687+E: 1304510652.695722 0003 0036 16837
4688+E: 1304510652.695725 0003 0030 1282
4689+E: 1304510652.695727 0003 0031 957
4690+E: 1304510652.695730 0001 014a 1
4691+E: 1304510652.695734 0003 0000 16944
4692+E: 1304510652.695736 0003 0001 16837
4693+E: 1304510652.695737 0000 0000 0
4694+E: 1304510652.700700 0003 0030 1325
4695+E: 1304510652.700711 0003 0031 1000
4696+E: 1304510652.700720 0000 0000 0
4697+E: 1304510652.706696 0003 0030 1357
4698+E: 1304510652.706708 0003 0031 1032
4699+E: 1304510652.706716 0000 0000 0
4700+E: 1304510652.736695 0003 0036 16835
4701+E: 1304510652.736716 0000 0000 0
4702+E: 1304510652.741695 0003 0036 16833
4703+E: 1304510652.741716 0000 0000 0
4704+E: 1304510652.746694 0003 0036 16830
4705+E: 1304510652.746714 0003 0001 16835
4706+E: 1304510652.746716 0000 0000 0
4707+E: 1304510652.751695 0003 0036 16827
4708+E: 1304510652.751707 0003 0034 1
4709+E: 1304510652.751708 0003 0030 1300
4710+E: 1304510652.751716 0003 0001 16833
4711+E: 1304510652.751718 0000 0000 0
4712+E: 1304510652.756694 0003 0036 16814
4713+E: 1304510652.756707 0003 0030 1257
4714+E: 1304510652.756715 0003 0001 16823
4715+E: 1304510652.756717 0000 0000 0
4716+E: 1304510652.762696 0003 0036 16779
4717+E: 1304510652.762709 0003 0030 1225
4718+E: 1304510652.762717 0003 0001 16779
4719+E: 1304510652.762719 0000 0000 0
4720+E: 1304510652.767696 0003 0036 16769
4721+E: 1304510652.767719 0003 0001 16776
4722+E: 1304510652.767721 0000 0000 0
4723+E: 1304510652.772695 0003 0036 16731
4724+E: 1304510652.772715 0003 0001 16731
4725+E: 1304510652.772717 0000 0000 0
4726+E: 1304510652.777693 0003 0035 16946
4727+E: 1304510652.777705 0003 0036 16718
4728+E: 1304510652.777715 0003 0001 16727
4729+E: 1304510652.777717 0000 0000 0
4730+E: 1304510652.782694 0003 0036 16675
4731+E: 1304510652.782715 0003 0001 16675
4732+E: 1304510652.782717 0000 0000 0
4733+E: 1304510652.787694 0003 0036 16605
4734+E: 1304510652.787706 0003 0034 0
4735+E: 1304510652.787708 0003 0030 1282
4736+E: 1304510652.787716 0003 0001 16605
4737+E: 1304510652.787718 0000 0000 0
4738+E: 1304510652.792702 0003 0036 16575
4739+E: 1304510652.792714 0003 0030 1325
4740+E: 1304510652.792723 0003 0001 16575
4741+E: 1304510652.792724 0000 0000 0
4742+E: 1304510652.797694 0003 0035 16912
4743+E: 1304510652.797706 0003 0036 16495
4744+E: 1304510652.797709 0003 0030 1357
4745+E: 1304510652.797716 0003 0000 16912
4746+E: 1304510652.797718 0003 0001 16495
4747+E: 1304510652.797719 0000 0000 0
4748+E: 1304510652.802692 0003 0035 16878
4749+E: 1304510652.802704 0003 0036 16429
4750+E: 1304510652.802713 0003 0000 16878
4751+E: 1304510652.802714 0003 0001 16429
4752+E: 1304510652.802716 0000 0000 0
4753+E: 1304510652.807684 0003 0035 16874
4754+E: 1304510652.807691 0003 0036 16397
4755+E: 1304510652.807701 0003 0001 16397
4756+E: 1304510652.807703 0000 0000 0
4757+E: 1304510652.812694 0003 0035 16834
4758+E: 1304510652.812706 0003 0036 16327
4759+E: 1304510652.812715 0003 0000 16834
4760+E: 1304510652.812717 0003 0001 16327
4761+E: 1304510652.812719 0000 0000 0
4762+E: 1304510652.817692 0003 0035 16820
4763+E: 1304510652.817703 0003 0036 16243
4764+E: 1304510652.817705 0003 0034 1
4765+E: 1304510652.817707 0003 0030 1300
4766+E: 1304510652.817714 0003 0000 16830
4767+E: 1304510652.817716 0003 0001 16243
4768+E: 1304510652.817718 0000 0000 0
4769+E: 1304510652.823703 0003 0035 16786
4770+E: 1304510652.823715 0003 0036 16167
4771+E: 1304510652.823718 0003 0030 1257
4772+E: 1304510652.823725 0003 0000 16786
4773+E: 1304510652.823726 0003 0001 16167
4774+E: 1304510652.823728 0000 0000 0
4775+E: 1304510652.828691 0003 0035 16776
4776+E: 1304510652.828703 0003 0036 16089
4777+E: 1304510652.828705 0003 0034 0
4778+E: 1304510652.828707 0003 0030 1306
4779+E: 1304510652.828714 0003 0000 16783
4780+E: 1304510652.828715 0003 0001 16089
4781+E: 1304510652.828717 0000 0000 0
4782+E: 1304510652.833696 0003 0035 16762
4783+E: 1304510652.833708 0003 0036 16011
4784+E: 1304510652.833711 0003 0030 1343
4785+E: 1304510652.833718 0003 0000 16772
4786+E: 1304510652.833720 0003 0001 16011
4787+E: 1304510652.833721 0000 0000 0
4788+E: 1304510652.838691 0003 0035 16730
4789+E: 1304510652.838703 0003 0036 15923
4790+E: 1304510652.838712 0003 0000 16730
4791+E: 1304510652.838714 0003 0001 15923
4792+E: 1304510652.838715 0000 0000 0
4793+E: 1304510652.843697 0003 0035 16720
4794+E: 1304510652.843709 0003 0036 15839
4795+E: 1304510652.843713 0003 0031 1000
4796+E: 1304510652.843719 0003 0000 16727
4797+E: 1304510652.843721 0003 0001 15839
4798+E: 1304510652.843723 0000 0000 0
4799+E: 1304510652.848691 0003 0035 16706
4800+E: 1304510652.848703 0003 0036 15761
4801+E: 1304510652.848712 0003 0000 16716
4802+E: 1304510652.848714 0003 0001 15761
4803+E: 1304510652.848716 0000 0000 0
4804+E: 1304510652.853704 0003 0035 16692
4805+E: 1304510652.853716 0003 0036 15679
4806+E: 1304510652.853725 0003 0000 16704
4807+E: 1304510652.853727 0003 0001 15679
4808+E: 1304510652.853729 0000 0000 0
4809+E: 1304510652.858693 0003 0035 16678
4810+E: 1304510652.858705 0003 0036 15603
4811+E: 1304510652.858707 0003 0030 1280
4812+E: 1304510652.858714 0003 0000 16691
4813+E: 1304510652.858716 0003 0001 15603
4814+E: 1304510652.858718 0000 0000 0
4815+E: 1304510652.863708 0003 0035 16648
4816+E: 1304510652.863718 0003 0036 15513
4817+E: 1304510652.863721 0003 0030 1233
4818+E: 1304510652.863729 0003 0000 16648
4819+E: 1304510652.863733 0003 0001 15513
4820+E: 1304510652.863735 0000 0000 0
4821+E: 1304510652.868678 0003 0035 16645
4822+E: 1304510652.868686 0003 0036 15425
4823+E: 1304510652.868692 0003 0030 1288
4824+E: 1304510652.868700 0003 0001 15425
4825+E: 1304510652.868702 0000 0000 0
4826+E: 1304510652.873703 0003 0035 16634
4827+E: 1304510652.873711 0003 0036 15335
4828+E: 1304510652.873714 0003 0030 1330
4829+E: 1304510652.873721 0003 0000 16644
4830+E: 1304510652.873724 0003 0001 15335
4831+E: 1304510652.873726 0000 0000 0
4832+E: 1304510652.879551 0003 0035 16625
4833+E: 1304510652.879554 0003 0036 15251
4834+E: 1304510652.879562 0003 0000 16634
4835+E: 1304510652.879563 0003 0001 15251
4836+E: 1304510652.879563 0000 0000 0
4837+E: 1304510652.884553 0003 0035 16613
4838+E: 1304510652.884557 0003 0036 15161
4839+E: 1304510652.884561 0003 0000 16623
4840+E: 1304510652.884565 0003 0001 15161
4841+E: 1304510652.884565 0000 0000 0
4842+E: 1304510652.889544 0003 0035 16602
4843+E: 1304510652.889548 0003 0036 15071
4844+E: 1304510652.889556 0003 0000 16612
4845+E: 1304510652.889556 0003 0001 15071
4846+E: 1304510652.889557 0000 0000 0
4847+E: 1304510652.894555 0003 0035 16592
4848+E: 1304510652.894560 0003 0036 14989
4849+E: 1304510652.894563 0003 0000 16602
4850+E: 1304510652.894564 0003 0001 14989
4851+E: 1304510652.894564 0000 0000 0
4852+E: 1304510652.899545 0003 0035 16588
4853+E: 1304510652.899548 0003 0036 14901
4854+E: 1304510652.899552 0003 0030 1270
4855+E: 1304510652.899555 0003 0000 16598
4856+E: 1304510652.899555 0003 0001 14901
4857+E: 1304510652.899556 0000 0000 0
4858+E: 1304510652.904552 0003 0035 16580
4859+E: 1304510652.904557 0003 0036 14813
4860+E: 1304510652.904558 0003 0030 1225
4861+E: 1304510652.904561 0003 0000 16589
4862+E: 1304510652.904566 0003 0001 14813
4863+E: 1304510652.904567 0000 0000 0
4864+E: 1304510652.909555 0003 0035 16576
4865+E: 1304510652.909560 0003 0036 14721
4866+E: 1304510652.909565 0003 0030 1282
4867+E: 1304510652.909568 0003 0000 16585
4868+E: 1304510652.909568 0003 0001 14721
4869+E: 1304510652.909569 0000 0000 0
4870+E: 1304510652.914550 0003 0035 16568
4871+E: 1304510652.914554 0003 0036 14627
4872+E: 1304510652.914559 0003 0030 1325
4873+E: 1304510652.914561 0003 0000 16576
4874+E: 1304510652.914562 0003 0001 14627
4875+E: 1304510652.914563 0000 0000 0
4876+E: 1304510652.919544 0003 0035 16565
4877+E: 1304510652.919547 0003 0036 14531
4878+E: 1304510652.919552 0003 0030 1357
4879+E: 1304510652.919555 0003 0000 16573
4880+E: 1304510652.919555 0003 0001 14531
4881+E: 1304510652.919556 0000 0000 0
4882+E: 1304510652.924546 0003 0035 16557
4883+E: 1304510652.924550 0003 0036 14441
4884+E: 1304510652.924558 0003 0000 16565
4885+E: 1304510652.924558 0003 0001 14441
4886+E: 1304510652.924559 0000 0000 0
4887+E: 1304510652.929549 0003 0035 16553
4888+E: 1304510652.929555 0003 0036 14355
4889+E: 1304510652.929562 0003 0000 16562
4890+E: 1304510652.929563 0003 0001 14355
4891+E: 1304510652.929563 0000 0000 0
4892+E: 1304510652.935550 0003 0035 16550
4893+E: 1304510652.935554 0003 0036 14271
4894+E: 1304510652.935561 0003 0000 16559
4895+E: 1304510652.935562 0003 0001 14271
4896+E: 1304510652.935563 0000 0000 0
4897+E: 1304510652.940543 0003 0035 16547
4898+E: 1304510652.940551 0003 0036 14181
4899+E: 1304510652.940552 0003 0030 1224
4900+E: 1304510652.940555 0003 0000 16556
4901+E: 1304510652.940555 0003 0001 14181
4902+E: 1304510652.940556 0000 0000 0
4903+E: 1304510652.945554 0003 0035 16544
4904+E: 1304510652.945562 0003 0036 14093
4905+E: 1304510652.945563 0003 0030 1191
4906+E: 1304510652.945566 0003 0000 16553
4907+E: 1304510652.945567 0003 0001 14093
4908+E: 1304510652.945567 0000 0000 0
4909+E: 1304510652.950541 0003 0036 14003
4910+E: 1304510652.950551 0003 0000 16550
4911+E: 1304510652.950551 0003 0001 14003
4912+E: 1304510652.950552 0000 0000 0
4913+E: 1304510652.955555 0003 0036 13911
4914+E: 1304510652.955564 0003 0030 1323
4915+E: 1304510652.955567 0003 0001 13911
4916+E: 1304510652.955567 0000 0000 0
4917+E: 1304510652.960546 0003 0036 13823
4918+E: 1304510652.960554 0003 0030 1356
4919+E: 1304510652.960557 0003 0001 13823
4920+E: 1304510652.960558 0000 0000 0
4921+E: 1304510652.965555 0003 0035 16541
4922+E: 1304510652.965558 0003 0036 13733
4923+E: 1304510652.965565 0003 0000 16547
4924+E: 1304510652.965566 0003 0001 13733
4925+E: 1304510652.965566 0000 0000 0
4926+E: 1304510652.970549 0003 0035 16537
4927+E: 1304510652.970553 0003 0036 13635
4928+E: 1304510652.970560 0003 0000 16544
4929+E: 1304510652.970561 0003 0001 13635
4930+E: 1304510652.970561 0000 0000 0
4931+E: 1304510652.975555 0003 0035 16533
4932+E: 1304510652.975559 0003 0036 13543
4933+E: 1304510652.975566 0003 0000 16541
4934+E: 1304510652.975567 0003 0001 13543
4935+E: 1304510652.975567 0000 0000 0
4936+E: 1304510652.980543 0003 0035 16529
4937+E: 1304510652.980546 0003 0036 13447
4938+E: 1304510652.980551 0003 0030 1224
4939+E: 1304510652.980554 0003 0000 16538
4940+E: 1304510652.980554 0003 0001 13447
4941+E: 1304510652.980555 0000 0000 0
4942+E: 1304510652.985546 0003 0035 16526
4943+E: 1304510652.985555 0003 0036 13353
4944+E: 1304510652.985556 0003 0030 1191
4945+E: 1304510652.985558 0003 0000 16535
4946+E: 1304510652.985559 0003 0001 13353
4947+E: 1304510652.985560 0000 0000 0
4948+E: 1304510652.990544 0003 0035 16523
4949+E: 1304510652.990552 0003 0036 13251
4950+E: 1304510652.990553 0003 0030 1323
4951+E: 1304510652.990555 0003 0000 16532
4952+E: 1304510652.990556 0003 0001 13251
4953+E: 1304510652.990556 0000 0000 0
4954+E: 1304510652.996550 0003 0035 16519
4955+E: 1304510652.996558 0003 0036 13149
4956+E: 1304510652.996559 0003 0030 1356
4957+E: 1304510652.996561 0003 0000 16528
4958+E: 1304510652.996562 0003 0001 13149
4959+E: 1304510652.996563 0000 0000 0
4960+E: 1304510653.001538 0003 0035 16515
4961+E: 1304510653.001542 0003 0036 13049
4962+E: 1304510653.001545 0003 0000 16524
4963+E: 1304510653.001545 0003 0001 13049
4964+E: 1304510653.001546 0000 0000 0
4965+E: 1304510653.006552 0003 0035 16511
4966+E: 1304510653.006556 0003 0036 12953
4967+E: 1304510653.006563 0003 0000 16520
4968+E: 1304510653.006564 0003 0001 12953
4969+E: 1304510653.006565 0000 0000 0
4970+E: 1304510653.011541 0003 0035 16507
4971+E: 1304510653.011545 0003 0036 12855
4972+E: 1304510653.011550 0003 0030 1224
4973+E: 1304510653.011553 0003 0000 16516
4974+E: 1304510653.011553 0003 0001 12855
4975+E: 1304510653.011554 0000 0000 0
4976+E: 1304510653.016548 0003 0035 16504
4977+E: 1304510653.016551 0003 0036 12757
4978+E: 1304510653.016556 0003 0030 1191
4979+E: 1304510653.016559 0003 0000 16513
4980+E: 1304510653.016560 0003 0001 12757
4981+E: 1304510653.016560 0000 0000 0
4982+E: 1304510653.021544 0003 0035 16501
4983+E: 1304510653.021549 0003 0036 12659
4984+E: 1304510653.021556 0003 0000 16510
4985+E: 1304510653.021556 0003 0001 12659
4986+E: 1304510653.021557 0000 0000 0
4987+E: 1304510653.026552 0003 0035 16498
4988+E: 1304510653.026556 0003 0036 12555
4989+E: 1304510653.026560 0003 0030 1323
4990+E: 1304510653.026563 0003 0000 16507
4991+E: 1304510653.026564 0003 0001 12555
4992+E: 1304510653.026564 0000 0000 0
4993+E: 1304510653.031542 0003 0035 16496
4994+E: 1304510653.031545 0003 0036 12453
4995+E: 1304510653.031550 0003 0030 1356
4996+E: 1304510653.031553 0003 0000 16504
4997+E: 1304510653.031553 0003 0001 12453
4998+E: 1304510653.031554 0000 0000 0
4999+E: 1304510653.036544 0003 0035 16494
5000+E: 1304510653.036552 0003 0036 12345
The diff has been truncated for viewing.

Subscribers

People subscribed via source and target branches

to all changes: