Imports prototype from ansible-network-ui

The ansible-network-ui prototype project builds a standalone Network UI
outside of Tower as its own Django application. The original prototype
code is located here:
https://github.com/benthomasson/ansible-network-ui.

The prototype provides a virtual canvas that supports placing
networking devices onto 2D plane and connecting those devices together
with connections called links.  The point where the link connects
to the network device is called an interface.  The devices, interfaces,
and links may all have their respective names.  This models physical
networking devices is a simple fashion.

The prototype implements a pannable and zoomable 2D canvas in using SVG
elements and AngularJS directives.   This is done by adding event
listeners for mouse and keyboard events to an SVG element that fills the
entire browser window.

Mouse and keyboard events are handled in a processing pipeline where
the processing units are implemented as finite state machines that
provide deterministic behavior to the UI.

The finite state machines are built in a visual way that makes
the states and transitions clearly evident.  The visual tool for
building FSM is located here:
https://github.com/benthomasson/fsm-designer-svg.   This tool
is a fork of this project where the canvas is the same.  The elements
on the page are FSM states and the directional connections are called
transitions.   The bootstrapping of the FSM designer tool and
network-ui happen in parallel.  It was useful to try experiemental
code in FSM designer and then import it into network-ui.

The FSM designer tool provides a YAML description of the design
which can be used to generate skeleton code and check the implementation
against the design for discrepancies.

Events supported:

* Mouse click
* Mouse scroll-wheel
* Keyboard events
* Touch events

Interactions supported:

* Pan canvas by clicking-and-dragging on the background
* Zooming canvas by scrolling mousewheel
* Adding devices and links by using hotkeys
* Selecting devices, interaces, and links by clicking on their icon
* Editing labels on devices, interfaces, and links by double-clicking on
  their icon
* Moving devices around the canvas by clicking-and-dragging on their
  icon

Device types supported:

* router
* switch
* host
* racks

The database schema for the prototype is also developed with a visual
tool that makes the relationships in the snowflake schema for the models
quickly evident.  This tool makes it very easy to build queries across
multiple tables using Django's query builder.

See: https://github.com/benthomasson/db-designer-svg

The client and the server communicate asynchronously over a websocket.
This allows the UI to be very responsive to user interaction since
the full request/response cycle is not needed for every user
interaction.

The server provides persistence of the UI state in the database
using event handlers for events generated in the UI.  The UI
processes mouse and keyboard events, updates the UI, and
generates new types of events that are then sent to the server
to be persisted in the database.

UI elements are tracked by unique ids generated on the client
when an element is first created.  This allows the elements to
be correctly tracked before they are stored in the database.

The history of the UI is stored in the TopologyHistory model
which is useful for tracking which client made which change
and is useful for implementing undo/redo.

Each message is given a unique id per client and has
a known message type.  Message types are pre-populated
in the MessageType model using a database migration.

A History message containing all the change messages for a topology is
sent when the websocket is connected.  This allows for undo/redo work
across sessions.

This prototype provides a server-side test runner for driving
tests in the user interface.  Events are emitted on the server
to drive the UI.  Test code coverage is measured using the
istanbul library which produces instrumented client code.
Code coverage for the server is is measured by the coverage library.

The test code coverage for the Python code is 100%.
This commit is contained in:
Ben Thomasson 2017-07-26 15:38:15 -04:00
parent 1595947ae2
commit 48d801271c
No known key found for this signature in database
GPG Key ID: 5818EF4CC895D5F5
105 changed files with 50273 additions and 0 deletions

View File

@ -6,3 +6,7 @@ channel_routing = [
route("websocket.disconnect", "awx.main.consumers.ws_disconnect", path=r'^/websocket/$'),
route("websocket.receive", "awx.main.consumers.ws_receive", path=r'^/websocket/$'),
]
from awx.network_ui.routing import channel_routing as network_routing
channel_routing += network_routing

13
awx/network_ui/Makefile Normal file
View File

@ -0,0 +1,13 @@
.PHONY: all models admin
all: models admin
models:
jinja2 templates/models.pyt designs/models.yml > models.py
autopep8 -i models.py
admin:
jinja2 templates/admin.pyt designs/models.yml > admin.py
autopep8 -i admin.py

View File

71
awx/network_ui/admin.py Normal file
View File

@ -0,0 +1,71 @@
from django.contrib import admin
from awx.network_ui.models import Device
from awx.network_ui.models import Link
from awx.network_ui.models import Topology
from awx.network_ui.models import Client
from awx.network_ui.models import TopologyHistory
from awx.network_ui.models import MessageType
from awx.network_ui.models import Interface
class DeviceAdmin(admin.ModelAdmin):
fields = ('topology', 'name', 'x', 'y', 'id', 'type',)
raw_id_fields = ('topology',)
admin.site.register(Device, DeviceAdmin)
class LinkAdmin(admin.ModelAdmin):
fields = ('from_device', 'to_device', 'from_interface', 'to_interface', 'id', 'name',)
raw_id_fields = ('from_device', 'to_device', 'from_interface', 'to_interface',)
admin.site.register(Link, LinkAdmin)
class TopologyAdmin(admin.ModelAdmin):
fields = ('name', 'scale', 'panX', 'panY',)
raw_id_fields = ()
admin.site.register(Topology, TopologyAdmin)
class ClientAdmin(admin.ModelAdmin):
fields = ()
raw_id_fields = ()
admin.site.register(Client, ClientAdmin)
class TopologyHistoryAdmin(admin.ModelAdmin):
fields = ('topology', 'client', 'message_type', 'message_id', 'message_data', 'undone',)
raw_id_fields = ('topology', 'client', 'message_type',)
admin.site.register(TopologyHistory, TopologyHistoryAdmin)
class MessageTypeAdmin(admin.ModelAdmin):
fields = ('name',)
raw_id_fields = ()
admin.site.register(MessageType, MessageTypeAdmin)
class InterfaceAdmin(admin.ModelAdmin):
fields = ('device', 'name', 'id',)
raw_id_fields = ('device',)
admin.site.register(Interface, InterfaceAdmin)

View File

@ -0,0 +1 @@
alter table prototype_device add constraint prototype_device_topology_id_unique unique (topology_id, id);

779
awx/network_ui/consumers.py Normal file
View File

@ -0,0 +1,779 @@
# In consumers.py
from channels import Group, Channel
from channels.sessions import channel_session
from awx.network_ui.models import Topology, Device, Link, Client, TopologyHistory, MessageType, Interface
from awx.network_ui.serializers import yaml_serialize_topology
import urlparse
from django.db.models import Q
from collections import defaultdict
from django.conf import settings
import math
import random
from awx.network_ui.utils import transform_dict
from pprint import pprint
import dpath.util
import json
import time
# Connected to websocket.connect
HISTORY_MESSAGE_IGNORE_TYPES = ['DeviceSelected',
'DeviceUnSelected',
'LinkSelected',
'LinkUnSelected',
'Undo',
'Redo',
'MouseEvent',
'MouseWheelEvent',
'KeyEvent']
SPACING = 200
RACK_SPACING = 50
settings.RECORDING = False
def circular_layout(topology_id):
n = Device.objects.filter(topology_id=topology_id).count()
r = 200
if n > 0:
arc_radians = 2 * math.pi / n
else:
arc_radians = 2 * math.pi
for i, device in enumerate(Device.objects.filter(topology_id=topology_id)):
device.x = math.cos(arc_radians * i + math.pi / 4) * r
device.y = math.sin(arc_radians * i + math.pi / 4) * r
device.save()
send_snapshot(Group("topology-%s" % topology_id), topology_id)
def v_distance(graph, grid, device):
d = 0
for edge in graph['edges'][device]:
d += math.sqrt(math.pow(device.x - edge.x, 2) + math.pow(device.y - edge.y, 2))
return d
def reduce_distance(graph, grid):
devices = graph['vertices']
def sum_distances():
distances = {x: v_distance(graph, grid, x) for x in grid.keys()}
return sum(distances.values())
total_distance = sum_distances()
for i in xrange(10000):
a = random.choice(devices)
b = random.choice(devices)
if a == b:
continue
else:
swap(grid, a, b)
place(grid, a)
place(grid, b)
new_total = sum_distances()
if new_total < total_distance:
print "New total", new_total
total_distance = new_total
a.save()
b.save()
else:
swap(grid, a, b)
place(grid, a)
place(grid, b)
def place(grid, device):
device.x = grid[device][1] * SPACING
device.y = grid[device][0] * SPACING
def swap(grid, a, b):
tmp = grid[a]
grid[a] = grid[b]
grid[b] = tmp
def grid_layout(topology_id):
n = Device.objects.filter(topology_id=topology_id).count()
cols = rows = int(math.ceil(math.sqrt(n)))
def device_seq_generator():
for d in Device.objects.filter(topology_id=topology_id):
yield d
device_seq = device_seq_generator()
grid = {}
graph = dict(vertices=[], edges=defaultdict(list))
links = Link.objects.filter(Q(from_device__topology_id=topology_id) |
Q(to_device__topology_id=topology_id))
for l in links:
graph['edges'][l.from_device].append(l.to_device)
graph['edges'][l.to_device].append(l.from_device)
for i in xrange(rows):
for j in xrange(cols):
try:
device = next(device_seq)
graph['vertices'].append(device)
grid[device] = (i, j)
place(grid, device)
device.save()
except StopIteration:
pass
reduce_distance(graph, grid)
send_snapshot(Group("topology-%s" % topology_id), topology_id)
def tier_layout(topology_id):
devices = list(Device.objects.filter(topology_id=topology_id))
device_map = {x.pk: x for x in devices}
links = Link.objects.filter(Q(from_device__topology_id=topology_id) |
Q(to_device__topology_id=topology_id))
def guess_role(devices):
for device in devices:
if getattr(device, "role", None):
continue
if device.type == "host":
device.role = "host"
continue
if device.type == "switch":
if 'leaf' in device.name.lower():
device.role = "leaf"
continue
if 'spine' in device.name.lower():
device.role = "spine"
continue
device.role = "unknown"
guess_role(devices)
edges = defaultdict(set)
racks = []
for l in links:
edges[device_map[l.from_device.pk]].add(device_map[l.to_device.pk])
edges[device_map[l.to_device.pk]].add(device_map[l.from_device.pk])
pprint(devices)
similar_connections = defaultdict(list)
for device, connections in edges.iteritems():
similar_connections[tuple(connections)].append(device)
pprint(dict(**similar_connections))
for connections, from_devices in similar_connections.iteritems():
if len(from_devices) > 0 and from_devices[0].role == "host":
racks.append(from_devices)
pprint(racks)
pprint(devices)
tiers = defaultdict(list)
for device in devices:
if getattr(device, 'tier', None):
pass
elif device.role == "leaf":
device.tier = 1
elif device.role == "spine":
device.tier = 2
elif device.role == "host":
device.tier = 0
else:
device.tier = 3
tiers[device.tier].append(device)
for rack in racks:
rack.sort(key=lambda x: x.name)
racks.sort(key=lambda x: x[0].name)
for tier in tiers.values():
tier.sort(key=lambda x: x.name)
pprint(tiers)
for device in devices:
print device, getattr(device, 'tier', None)
if getattr(device, 'tier', None) is None:
device.y = 0
device.x = 0
else:
device.y = SPACING * 3 - device.tier * SPACING
device.x = 0 - (len(tiers[device.tier]) * SPACING) / 2 + tiers[device.tier].index(device) * SPACING
device.save()
for j, rack in enumerate(racks):
x = 0 - (len(racks) * SPACING) / 2 + j * SPACING
for i, device in enumerate(rack):
device.x = x
device.y = SPACING * 3 + i * RACK_SPACING
device.save()
send_snapshot(Group("topology-%s" % topology_id), topology_id)
def parse_topology_id(data):
topology_id = data.get('topology_id', ['null'])
try:
topology_id = int(topology_id[0])
except ValueError:
topology_id = None
if not topology_id:
topology_id = None
return topology_id
# Persistence
class _Persistence(object):
def handle(self, message):
topology_id = message.get('topology')
assert topology_id is not None, "No topology_id"
client_id = message.get('client')
assert client_id is not None, "No client_id"
data = json.loads(message['text'])
if isinstance(data[1], list):
print "no sender"
return
if isinstance(data[1], dict) and client_id != data[1].get('sender'):
print "client_id mismatch expected:", client_id, "actual:", data[1].get('sender')
return
message_type = data[0]
message_value = data[1]
message_type_id = MessageType.objects.get_or_create(name=message_type)[0].pk
TopologyHistory(topology_id=topology_id,
client_id=client_id,
message_type_id=message_type_id,
message_id=data[1].get('message_id', 0),
message_data=message['text']).save()
handler = self.get_handler(message_type)
if handler is not None:
handler(message_value, topology_id, client_id)
else:
print "Unsupported message ", message_type
def get_handler(self, message_type):
return getattr(self, "on{0}".format(message_type), None)
def onDeviceCreate(self, device, topology_id, client_id):
device = transform_dict(dict(x='x',
y='y',
name='name',
type='type',
id='id'), device)
d, _ = Device.objects.get_or_create(topology_id=topology_id, id=device['id'], defaults=device)
d.x = device['x']
d.y = device['y']
d.type = device['type']
d.save()
def onDeviceDestroy(self, device, topology_id, client_id):
Device.objects.filter(topology_id=topology_id, id=device['id']).delete()
def onDeviceMove(self, device, topology_id, client_id):
Device.objects.filter(topology_id=topology_id, id=device['id']).update(x=device['x'], y=device['y'])
def onDeviceLabelEdit(self, device, topology_id, client_id):
Device.objects.filter(topology_id=topology_id, id=device['id']).update(name=device['name'])
def onInterfaceLabelEdit(self, interface, topology_id, client_id):
(Interface.objects
.filter(device__topology_id=topology_id,
id=interface['id'],
device__id=interface['device_id'])
.update(name=interface['name']))
def onLinkLabelEdit(self, link, topology_id, client_id):
Link.objects.filter(from_device__topology_id=topology_id, id=link['id']).update(name=link['name'])
def onInterfaceCreate(self, interface, topology_id, client_id):
Interface.objects.get_or_create(device_id=Device.objects.get(id=interface['device_id'],
topology_id=topology_id).pk,
id=interface['id'],
defaults=dict(name=interface['name']))
def onLinkCreate(self, link, topology_id, client_id):
device_map = dict(Device.objects
.filter(topology_id=topology_id, id__in=[link['from_device_id'], link['to_device_id']])
.values_list('id', 'pk'))
Link.objects.get_or_create(id=link['id'],
name=link['name'],
from_device_id=device_map[link['from_device_id']],
to_device_id=device_map[link['to_device_id']],
from_interface_id=Interface.objects.get(device_id=device_map[link['from_device_id']],
id=link['from_interface_id']).pk,
to_interface_id=Interface.objects.get(device_id=device_map[link['to_device_id']],
id=link['to_interface_id']).pk)
def onLinkDestroy(self, link, topology_id, client_id):
device_map = dict(Device.objects
.filter(topology_id=topology_id, id__in=[link['from_device_id'], link['to_device_id']])
.values_list('id', 'pk'))
Link.objects.filter(id=link['id'],
from_device_id=device_map[link['from_device_id']],
to_device_id=device_map[link['to_device_id']],
from_interface_id=Interface.objects.get(device_id=device_map[link['from_device_id']],
id=link['from_interface_id']).pk,
to_interface_id=Interface.objects.get(device_id=device_map[link['to_device_id']],
id=link['to_interface_id']).pk).delete()
def onDeviceSelected(self, message_value, topology_id, client_id):
'Ignore DeviceSelected messages'
pass
def onDeviceUnSelected(self, message_value, topology_id, client_id):
'Ignore DeviceSelected messages'
pass
def onLinkSelected(self, message_value, topology_id, client_id):
'Ignore LinkSelected messages'
pass
def onLinkUnSelected(self, message_value, topology_id, client_id):
'Ignore LinkSelected messages'
pass
def onUndo(self, message_value, topology_id, client_id):
undo_persistence.handle(message_value['original_message'], topology_id, client_id)
def onRedo(self, message_value, topology_id, client_id):
redo_persistence.handle(message_value['original_message'], topology_id, client_id)
def onMultipleMessage(self, message_value, topology_id, client_id):
for message in message_value['messages']:
handler = self.get_handler(message['msg_type'])
if handler is not None:
handler(message, topology_id, client_id)
else:
print "Unsupported message ", message['msg_type']
def onDeploy(self, message_value, topology_id, client_id):
Group("workers").send({"text": json.dumps(["Deploy", topology_id, yaml_serialize_topology(topology_id)])})
def onDestroy(self, message_value, topology_id, client_id):
Group("workers").send({"text": json.dumps(["Destroy", topology_id])})
def onDiscover(self, message_value, topology_id, client_id):
Group("workers").send({"text": json.dumps(["Discover", topology_id, yaml_serialize_topology(topology_id)])})
def onLayout(self, message_value, topology_id, client_id):
# circular_layout(topology_id)
# grid_layout(topology_id)
tier_layout(topology_id)
def onCoverageRequest(self, coverage, topology_id, client_id):
pass
def onCoverage(self, coverage, topology_id, client_id):
with open("coverage/coverage{0}.json".format(int(time.time())), "w") as f:
f.write(json.dumps(coverage['coverage']))
def onStartRecording(self, recording, topology_id, client_id):
settings.RECORDING = True
def onStopRecording(self, recording, topology_id, client_id):
settings.RECORDING = False
def write_event(self, event, topology_id, client_id):
if settings.RECORDING and event.get('save', True):
with open("recording.log", "a") as f:
f.write(json.dumps(event))
f.write("\n")
onViewPort = write_event
onMouseEvent = write_event
onTouchEvent = write_event
onMouseWheelEvent = write_event
onKeyEvent = write_event
persistence = _Persistence()
class _UndoPersistence(object):
def handle(self, message, topology_id, client_id):
message_type = message[0]
message_value = message[1]
TopologyHistory.objects.filter(topology_id=topology_id,
client_id=message_value['sender'],
message_id=message_value['message_id']).update(undone=True)
handler = getattr(self, "on{0}".format(message_type), None)
if handler is not None:
handler(message_value, topology_id, client_id)
else:
print "Unsupported undo message ", message_type
def onSnapshot(self, snapshot, topology_id, client_id):
pass
def onDeviceCreate(self, device, topology_id, client_id):
persistence.onDeviceDestroy(device, topology_id, client_id)
def onDeviceDestroy(self, device, topology_id, client_id):
inverted = device.copy()
inverted['type'] = device['previous_type']
inverted['name'] = device['previous_name']
inverted['x'] = device['previous_x']
inverted['y'] = device['previous_y']
persistence.onDeviceCreate(inverted, topology_id, client_id)
def onDeviceMove(self, device, topology_id, client_id):
inverted = device.copy()
inverted['x'] = device['previous_x']
inverted['y'] = device['previous_y']
persistence.onDeviceMove(inverted, topology_id, client_id)
def onDeviceLabelEdit(self, device, topology_id, client_id):
inverted = device.copy()
inverted['name'] = device['previous_name']
persistence.onDeviceLabelEdit(inverted, topology_id, client_id)
def onLinkCreate(self, link, topology_id, client_id):
persistence.onLinkDestroy(link, topology_id, client_id)
def onLinkDestroy(self, link, topology_id, client_id):
persistence.onLinkCreate(link, topology_id, client_id)
def onDeviceSelected(self, message_value, topology_id, client_id):
'Ignore DeviceSelected messages'
pass
def onDeviceUnSelected(self, message_value, topology_id, client_id):
'Ignore DeviceSelected messages'
pass
def onUndo(self, message_value, topology_id, client_id):
pass
undo_persistence = _UndoPersistence()
class _RedoPersistence(object):
def handle(self, message, topology_id, client_id):
message_type = message[0]
message_value = message[1]
TopologyHistory.objects.filter(topology_id=topology_id,
client_id=message_value['sender'],
message_id=message_value['message_id']).update(undone=False)
handler_name = "on{0}".format(message_type)
handler = getattr(self, handler_name, getattr(persistence, handler_name, None))
if handler is not None:
handler(message_value, topology_id, client_id)
else:
print "Unsupported redo message ", message_type
def onDeviceSelected(self, message_value, topology_id, client_id):
'Ignore DeviceSelected messages'
pass
def onDeviceUnSelected(self, message_value, topology_id, client_id):
'Ignore DeviceSelected messages'
pass
def onUndo(self, message_value, topology_id, client_id):
'Ignore Undo messages'
pass
def onRedo(self, message_value, topology_id, client_id):
'Ignore Redo messages'
pass
redo_persistence = _RedoPersistence()
class _Discovery(object):
def handle(self, message):
topology_id = message.get('topology')
data = json.loads(message['text'])
message_type = data[0]
message_value = data[1]
handler = self.get_handler(message_type)
if handler is not None:
handler(message_value, topology_id)
else:
print "Unsupported message ", message_type
def get_handler(self, message_type):
return getattr(self, "on{0}".format(message_type), None)
def onFacts(self, message, topology_id):
send_updates = False
print message['key']
name = message['key']
device, created = Device.objects.get_or_create(topology_id=topology_id,
name=name,
defaults=dict(x=0,
y=0,
type="switch",
id=0))
if created:
device.id = device.pk
device.save()
send_updates = True
print "Created device ", device
interfaces = dpath.util.get(message, '/value/ansible_local/lldp/lldp') or []
for interface in interfaces:
pprint(interface)
for inner_interface in interface.get('interface', []):
name = inner_interface.get('name')
if not name:
continue
interface, created = Interface.objects.get_or_create(device_id=device.pk,
name=name,
defaults=dict(id=0))
if created:
interface.id = interface.pk
interface.save()
send_updates = True
print "Created interface ", interface
connected_interface = None
connected_device = None
for chassis in inner_interface.get('chassis', []):
name = chassis.get('name', [{}])[0].get('value')
if not name:
continue
connected_device, created = Device.objects.get_or_create(topology_id=topology_id,
name=name,
defaults=dict(x=0,
y=0,
type="switch",
id=0))
if created:
connected_device.id = connected_device.pk
connected_device.save()
send_updates = True
print "Created device ", connected_device
break
if connected_device:
for port in inner_interface.get('port', []):
for port_id in port.get('id', []):
if port_id['type'] == 'ifname':
name = port_id['value']
break
connected_interface, created = Interface.objects.get_or_create(device_id=connected_device.pk,
name=name,
defaults=dict(id=0))
if created:
connected_interface.id = connected_interface.pk
connected_interface.save()
print "Created interface ", connected_interface
send_updates = True
if connected_device and connected_interface:
exists = Link.objects.filter(Q(from_device_id=device.pk,
to_device_id=connected_device.pk,
from_interface_id=interface.pk,
to_interface_id=connected_interface.pk) |
Q(from_device_id=connected_device.pk,
to_device_id=device.pk,
from_interface_id=connected_interface.pk,
to_interface_id=interface.pk)).count() > 0
if not exists:
link = Link(from_device_id=device.pk,
to_device_id=connected_device.pk,
from_interface_id=interface.pk,
to_interface_id=connected_interface.pk,
id=0)
link.save()
link.id = link.pk
link.save()
print "Created link ", link
send_updates = True
if send_updates:
send_snapshot(Group("topology-%s" % topology_id), topology_id)
discovery = _Discovery()
# Ansible Connection Events
@channel_session
def ansible_connect(message):
data = urlparse.parse_qs(message.content['query_string'])
topology_id = parse_topology_id(data)
message.channel_session['topology_id'] = topology_id
@channel_session
def ansible_message(message):
# Channel('console_printer').send({"text": message['text']})
Group("topology-%s" % message.channel_session['topology_id']).send({"text": message['text']})
Channel('discovery').send({"text": message['text'],
"topology": message.channel_session['topology_id']})
@channel_session
def ansible_disconnect(message):
pass
# UI Channel Events
@channel_session
def ws_connect(message):
# Accept connection
data = urlparse.parse_qs(message.content['query_string'])
topology_id = parse_topology_id(data)
topology, created = Topology.objects.get_or_create(
topology_id=topology_id, defaults=dict(name="topology", scale=1.0, panX=0, panY=0))
topology_id = topology.topology_id
message.channel_session['topology_id'] = topology_id
Group("topology-%s" % topology_id).add(message.reply_channel)
client = Client()
client.save()
message.channel_session['client_id'] = client.pk
message.reply_channel.send({"text": json.dumps(["id", client.pk])})
message.reply_channel.send({"text": json.dumps(["topology_id", topology_id])})
topology_data = transform_dict(dict(topology_id='topology_id',
name='name',
panX='panX',
panY='panY',
scale='scale'), topology.__dict__)
message.reply_channel.send({"text": json.dumps(["Topology", topology_data])})
send_snapshot(message.reply_channel, topology_id)
send_history(message.reply_channel, topology_id)
def send_snapshot(channel, topology_id):
interfaces = defaultdict(list)
for i in (Interface.objects
.filter(device__topology_id=topology_id)
.values()):
interfaces[i['device_id']].append(i)
devices = list(Device.objects
.filter(topology_id=topology_id).values())
for device in devices:
device['interfaces'] = interfaces[device['device_id']]
links = [dict(id=x['id'],
name=x['name'],
from_device_id=x['from_device__id'],
to_device_id=x['to_device__id'],
from_interface_id=x['from_interface__id'],
to_interface_id=x['to_interface__id'])
for x in list(Link.objects
.filter(Q(from_device__topology_id=topology_id) |
Q(to_device__topology_id=topology_id))
.values('id',
'name',
'from_device__id',
'to_device__id',
'from_interface__id',
'to_interface__id'))]
snapshot = dict(sender=0,
devices=devices,
links=links)
channel.send({"text": json.dumps(["Snapshot", snapshot])})
def send_history(channel, topology_id):
history = list(TopologyHistory.objects
.filter(topology_id=topology_id)
.exclude(message_type__name__in=HISTORY_MESSAGE_IGNORE_TYPES)
.exclude(undone=True)
.order_by('pk')
.values_list('message_data', flat=True)[:1000])
channel.send({"text": json.dumps(["History", history])})
@channel_session
def ws_message(message):
# Send to debug printer
# Channel('console_printer').send({"text": message['text']})
# Send to all clients editing the topology
Group("topology-%s" % message.channel_session['topology_id']).send({"text": message['text']})
# Send to persistence handler
Channel('persistence').send({"text": message['text'],
"topology": message.channel_session['topology_id'],
"client": message.channel_session['client_id']})
@channel_session
def ws_disconnect(message):
Group("topology-%s" % message.channel_session['topology_id']).discard(message.reply_channel)
def console_printer(message):
print message['text'] # pragma: no cover
# Worker channel events
@channel_session
def worker_connect(message):
Group("workers").add(message.reply_channel)
@channel_session
def worker_message(message):
# Channel('console_printer').send({"text": message['text']})
pass
@channel_session
def worker_disconnect(message):
pass
# Tester channel events
@channel_session
def tester_connect(message):
data = urlparse.parse_qs(message.content['query_string'])
topology_id = parse_topology_id(data)
message.channel_session['topology_id'] = topology_id
client = Client()
client.save()
message.channel_session['client_id'] = client.pk
message.reply_channel.send({"text": json.dumps(["id", client.pk])})
message.reply_channel.send({"text": json.dumps(["topology_id", topology_id])})
@channel_session
def tester_message(message):
# Channel('console_printer').send({"text": message['text']})
Group("topology-%s" % message.channel_session['topology_id']).send({"text": message['text']})
Channel('persistence').send({"text": message['text'],
"topology": message.channel_session['topology_id'],
"client": message.channel_session['client_id']})
@channel_session
def tester_disconnect(message):
pass

View File

@ -0,0 +1,142 @@
app: prototype
external_models: []
models:
- display: name
fields:
- name: device_id
pk: true
type: AutoField
- name: topology
ref: Topology
ref_field: topology_id
type: ForeignKey
- len: 200
name: name
type: CharField
- name: x
type: IntegerField
- name: y
type: IntegerField
- name: id
type: IntegerField
- len: 200
name: type
type: CharField
name: Device
x: 348
y: 124
- fields:
- name: link_id
pk: true
type: AutoField
- name: from_device
ref: Device
ref_field: device_id
related_name: from_link
type: ForeignKey
- name: to_device
ref: Device
ref_field: device_id
related_name: to_link
type: ForeignKey
- name: from_interface
ref: Interface
ref_field: interface_id
related_name: from_link
type: ForeignKey
- name: to_interface
ref: Interface
ref_field: interface_id
related_name: to_link
type: ForeignKey
- name: id
type: IntegerField
- len: 200
name: name
type: CharField
name: Link
x: 837
y: 10
- display: name
fields:
- name: topology_id
pk: true
type: AutoField
- len: 200
name: name
type: CharField
- name: scale
type: FloatField
- name: panX
type: FloatField
- name: panY
type: FloatField
name: Topology
x: 111
y: 127
- fields:
- name: client_id
pk: true
type: AutoField
name: Client
x: -455
y: 109
- fields:
- name: topology_history_id
pk: true
type: AutoField
- name: topology
ref: Topology
ref_field: topology_id
type: ForeignKey
- name: client
ref: Client
ref_field: client_id
type: ForeignKey
- name: message_type
ref: MessageType
ref_field: message_type_id
type: ForeignKey
- name: message_id
type: IntegerField
- name: message_data
type: TextField
- default: false
name: undone
type: BooleanField
name: TopologyHistory
x: -205
y: 282
- display: name
fields:
- name: message_type_id
pk: true
type: AutoField
- len: 200
name: name
type: CharField
name: MessageType
x: -509
y: 383
- display: name
fields:
- name: interface_id
pk: true
type: AutoField
- name: device
ref: Device
ref_field: device_id
type: ForeignKey
- len: 200
name: name
type: CharField
- name: id
type: IntegerField
name: Interface
x: 600
y: 243
modules: []
view:
panX: 213.72955551921206
panY: 189.44695909464298
scaleXY: 0.6900000000000002

View File

View File

@ -0,0 +1,147 @@
from django.core.management.base import BaseCommand
from awx.network_ui.models import Topology, Device, Link, Interface
from collections import defaultdict
def natural_numbers():
i = 1
while True:
yield i
i += 1
class Command(BaseCommand):
help = '''Creates a 2 tier clos topology with n nodes in the 1st tier and m nodes
in the 2nd tier and h hosts per pair of switches'''
def add_arguments(self, parser):
parser.add_argument('n', type=int)
parser.add_argument('m', type=int)
parser.add_argument('h', type=int)
def handle(self, *args, **options):
n = options['n']
m = options['m']
h = options['h']
print "n", n
print "m", m
topology = Topology(name="test_{0}".format(n), scale=1.0, panX=0, panY=0)
topology.save()
devices = []
hosts_per_leaf = []
leaves = []
spines = []
id_seq = natural_numbers()
tier2 = 100
tier1 = 500
tier0 = 900
spacing = 200
tier2_centering = ((n - m) * 200) / 2
for i in xrange(n):
device = Device(name="Leaf{0}".format(i),
x=i * spacing,
y=tier1,
id=next(id_seq),
type="switch",
topology_id=topology.pk)
devices.append(device)
leaves.append(device)
for i in xrange(m):
device = Device(name="Spine{0}".format(i),
x=(i * spacing) + tier2_centering,
y=tier2,
id=next(id_seq),
type="switch",
topology_id=topology.pk)
devices.append(device)
spines.append(device)
for i in xrange(n / 2):
hosts = []
for j in xrange(h):
device = Device(name="Host{0}-{1}".format(i, j),
x=(i * 2 * spacing) + spacing / 2,
y=tier0 + (j * 40),
id=next(id_seq),
type="host",
topology_id=topology.pk)
devices.append(device)
hosts.append(device)
hosts_per_leaf.append(hosts)
print "leaves", leaves
print "spines", spines
print "hosts_per_leaf", hosts_per_leaf
Device.objects.bulk_create(devices)
devices = {x.id: x for x in Device.objects.filter(topology_id=topology.pk)}
links = []
interfaces = defaultdict(list)
for leaf in leaves:
for spine in spines:
from_interface = Interface(device=devices[leaf.id],
name="swp" + str(len(interfaces[leaf.id]) + 1),
id=(len(interfaces[leaf.id]) + 1))
from_interface.save()
interfaces[leaf.id].append(from_interface)
to_interface = Interface(device=devices[spine.id],
name="swp" + str(len(interfaces[spine.id]) + 1),
id=(len(interfaces[spine.id]) + 1))
to_interface.save()
interfaces[spine.id].append(to_interface)
link = Link(from_device=devices[leaf.id],
to_device=devices[spine.id],
from_interface=from_interface,
to_interface=to_interface)
links.append(link)
for i, hosts in enumerate(hosts_per_leaf):
leaf1 = leaves[2 * i]
leaf2 = leaves[2 * i + 1]
for j, host in enumerate(hosts):
from_interface = Interface(device=devices[leaf1.id],
name="swp" + str(len(interfaces[leaf1.id]) + 1),
id=(len(interfaces[leaf1.id]) + 1))
from_interface.save()
interfaces[leaf1.id].append(from_interface)
to_interface = Interface(device=devices[host.id],
name="eth" + str(len(interfaces[host.id]) + 1),
id=(len(interfaces[host.id]) + 1))
to_interface.save()
interfaces[host.id].append(to_interface)
link = Link(from_device=devices[leaf1.id],
to_device=devices[host.id],
from_interface=from_interface,
to_interface=to_interface)
links.append(link)
from_interface = Interface(device=devices[leaf2.id],
name="swp" + str(len(interfaces[leaf2.id]) + 1),
id=(len(interfaces[leaf2.id]) + 1))
from_interface.save()
interfaces[leaf2.id].append(from_interface)
to_interface = Interface(device=devices[host.id],
name="eth" + str(len(interfaces[host.id]) + 1),
id=(len(interfaces[host.id]) + 1))
to_interface.save()
interfaces[host.id].append(to_interface)
link = Link(from_device=devices[leaf2.id],
to_device=devices[host.id],
from_interface=from_interface,
to_interface=to_interface)
links.append(link)
Link.objects.bulk_create(links)
print "Topology: ", topology.pk

View File

@ -0,0 +1,54 @@
from django.core.management.base import BaseCommand
from awx.network_ui.models import Topology, Device, Link
import math
class Command(BaseCommand):
help = 'Creates a fully connected topology with n nodes'
def add_arguments(self, parser):
parser.add_argument('n', type=int)
def handle(self, *args, **options):
n = options['n']
topology = Topology(name="test_{0}".format(n), scale=1.0, panX=0, panY=0)
topology.save()
devices = []
r = 1000
if n > 0:
arc_radians = 2 * math.pi / n
else:
arc_radians = 2 * math.pi
for i in xrange(n):
device = Device(name="R{0}".format(i),
x=math.cos(arc_radians*i)*r,
y=math.sin(arc_radians*i)*r,
id=i,
type="router",
topology_id=topology.pk)
devices.append(device)
Device.objects.bulk_create(devices)
devices = {x.id: x for x in Device.objects.filter(topology_id=topology.pk)}
links = []
for i in xrange(n):
for j in xrange(i):
if i == j:
continue
link = Link(from_device=devices[i],
to_device=devices[j])
links.append(link)
Link.objects.bulk_create(links)
print "Topology: ", topology.pk

View File

@ -0,0 +1,16 @@
from django.core.management.base import BaseCommand
from awx.network_ui.serializers import yaml_serialize_topology
class Command(BaseCommand):
help = 'Dumps data of a topology to a yaml file'
def add_arguments(self, parser):
parser.add_argument('topology_id', type=int)
def handle(self, *args, **options):
topology_id = options['topology_id']
print yaml_serialize_topology(topology_id)

View File

@ -0,0 +1,23 @@
from django.core.management.base import BaseCommand
from django.db.models import Count
from awx.network_ui.models import Device
from pprint import pprint
class Command(BaseCommand):
def handle(self, *args, **options):
dups = list(Device.objects
.values('topology_id', 'id')
.annotate(Count('pk'))
.order_by()
.filter(pk__count__gt=1))
pprint(dups)
for dup in dups:
del dup['pk__count']
pprint(list(Device.objects
.filter(**dup)
.values()))

View File

@ -0,0 +1,52 @@
from django.core.management.base import BaseCommand
from websocket import create_connection
from ui_test import MessageHandler, _Time
from awx.network_ui.models import Device, TopologyHistory
import json
time = _Time()
class Command(BaseCommand):
def add_arguments(self, parser):
parser.add_argument('topology_id', type=int)
parser.add_argument('recording')
parser.add_argument('--time-scale', dest="time_scale", default=1.0, type=float)
parser.add_argument('--delete-topology-at-start', dest="delete_topolgy", action="store_true", default=False)
def handle(self, *args, **options):
print options['topology_id']
print options['recording']
topology_id = options['topology_id']
if options['delete_topolgy'] is True:
TopologyHistory.objects.filter(topology_id=topology_id).delete()
Device.objects.filter(topology_id=topology_id).delete()
time.scale = options.get('time_scale', 1.0)
ui = MessageHandler(create_connection("ws://localhost:8001/network_ui/topology?topology_id={0}".format(options['topology_id'])))
ui.recv()
ui.recv()
ui.send('StopRecording')
ui.send('StartReplay')
if options['delete_topolgy'] is True:
ui.send_message(['History', []])
ui.send('Snapshot', sender=ui.client_id, devices=[], links=[])
messages = []
with open(options['recording']) as f:
for line in f.readlines():
messages.append(json.loads(line))
messages = sorted(messages, key=lambda x: x['message_id'])
for message in messages:
message['sender'] = ui.client_id
message['save'] = False
ui.send_message([message['msg_type'], message])
if message['msg_type'] == "ViewPort":
time.sleep(10)
else:
time.sleep(1)
ui.send('StopReplay')
ui.send('CoverageRequest')
ui.close()

View File

@ -0,0 +1,537 @@
from django.core.management.base import BaseCommand
import unittest
from websocket import create_connection
import json
import yaml
import time as real_time
import requests
class _Time(object):
def __init__(self, scale=1.0):
self.scale = scale
def sleep(self, n):
real_time.sleep(n * self.scale)
time = _Time()
class Command(BaseCommand):
def add_arguments(self, parser):
parser.add_argument('--time-scale', dest="time_scale", default=1.0, type=float)
parser.add_argument('--verbose', dest="verbose", action="store_true", default=False)
parser.add_argument('-q', '--quiet', dest="quiet", action="store_true", default=False)
parser.add_argument('-f', '--failfast', dest="failfast", action="store_true", default=False)
parser.add_argument('-b', '--buffer', dest="buffer", action="store_true", default=False)
parser.add_argument('suites', nargs="*")
def handle(self, *args, **options):
time.scale = options.get('time_scale', 1.0)
loader = unittest.TestLoader()
test_suites = [TestUI,
TestUIWebSocket,
TestUndoPersistence,
TestRedoPersistence,
TestPersistence,
TestViews,
TestWorkerWebSocket,
TestAnsibleWebSocket,
TestInvalidValues]
if options.get('suites'):
test_suites = [x for x in test_suites if x.__name__ in options['suites']]
tests = [loader.loadTestsFromTestCase(x) for x in test_suites]
unittest.TextTestRunner(failfast=options.get('failfast'),
verbosity=0 if options.get('quiet') else 2 if options.get('verbose') else 1,
buffer=options.get('buffer')).run(unittest.TestSuite(tests))
ui = MessageHandler(create_connection("ws://localhost:8001/network_ui/topology?topology_id=143"))
ui.recv()
ui.recv()
ui.send('CoverageRequest')
ui.close()
class TestViews(unittest.TestCase):
def test_index(self):
requests.get("http://localhost:8001/network_ui")
class MessageHandler(object):
def __init__(self, ws):
self.ws = ws
self.client_id = None
self.topology_id = None
self.receieved_messages = []
self.message_id = 0
def handle_message(self, message):
message = json.loads(message)
self.receieved_messages.append(message)
if message[0] == "id":
self.client_id = message[1]
if message[0] == "topology_id":
self.topology_id = message[1]
def make_message(self, msg_type, **kwargs):
kwargs['sender'] = self.client_id
kwargs['msg_type'] = msg_type
kwargs['message_id'] = self.message_id
self.message_id += 1
return [msg_type, kwargs]
def send(self, msg_type, **kwargs):
self.ws.send(json.dumps(self.make_message(msg_type, **kwargs)))
def send_message(self, message):
self.ws.send(json.dumps(message))
def send_multiple(self, messages):
self.ws.send(json.dumps(['MultipleMessage', dict(sender=self.client_id, messages=messages)]))
def recv(self):
msg = self.ws.recv()
self.handle_message(msg)
return msg
def close(self):
self.ws.close()
class TestWorkerWebSocket(unittest.TestCase):
def test(self):
self.worker = MessageHandler(create_connection("ws://localhost:8001/network_ui/worker?topology_id=143"))
self.ui = MessageHandler(create_connection("ws://localhost:8001/network_ui/tester?topology_id=143"))
self.ui.recv()
self.ui.recv()
self.ui.send("Deploy")
self.assertTrue(self.worker.recv())
self.ui.send("Destroy")
self.assertTrue(self.worker.recv())
self.worker.send("Hi")
def tearDown(self):
self.worker.close()
self.ui.close()
class TestAnsibleWebSocket(unittest.TestCase):
def test(self):
self.ws = MessageHandler(create_connection("ws://localhost:8001/network_ui/ansible?topology_id=143"))
self.ws.send('Facts', foo=5)
def tearDown(self):
self.ws.close()
class TestPersistence(unittest.TestCase):
def setUp(self):
self.ws = MessageHandler(create_connection("ws://localhost:8001/network_ui/tester?topology_id=143"))
self.ws.recv()
self.ws.recv()
def tearDown(self):
self.ws.close()
def test_DeviceCreate(self):
self.ws.send('DeviceCreate', name="TestSwitch", x=0, y=500, type="switch", id=100)
time.sleep(1)
self.ws.send('DeviceDestroy',
previous_name="TestSwitch",
previous_x=0,
previous_y=500,
previous_type="switch",
id=100)
def test_DeviceLabelEdit(self):
self.ws.send('DeviceCreate', name="TestSwitch", x=0, y=500, type="switch", id=100)
time.sleep(1)
self.ws.send('DeviceLabelEdit', name="Foo", previous_name="TestSwitch", id=100)
self.ws.send('DeviceDestroy',
previous_name="TestSwitch",
previous_x=0,
previous_y=500,
previous_type="switch",
id=100)
def test_DeviceMove(self):
#self.ws.send('DeviceCreate', name="TestSwitch", x=0, y=500, type="switch", id=100)
self.ws.send_multiple([
dict(msg_type='DeviceCreate', name="TestSwitchA", x=100, y=100, type="switch", id=100),
dict(msg_type='DeviceCreate', name="TestSwitchB", x=900, y=100, type="switch", id=101),
dict(msg_type='InterfaceCreate', name="swp1", id=1, device_id=100),
dict(msg_type='InterfaceCreate', name="swp1", id=1, device_id=101),
dict(msg_type='LinkCreate', id=100, name="A to B", from_device_id=100, to_device_id=101, from_interface_id=1, to_interface_id=1)])
time.sleep(1)
for i in xrange(1, 1000):
time.sleep(0.01)
self.ws.send('DeviceMove', x=i, y=500, previous_x=i - 1, previous_y=500, id=100)
time.sleep(1)
self.ws.send('DeviceDestroy',
previous_name="TestSwitch",
previous_x=0,
previous_y=500,
previous_type="switch",
id=100)
def test_LinkEdit_InterfaceEdit_LinkDestroy(self):
self.ws.send_multiple([
dict(msg_type='DeviceCreate', name="TestSwitchA", x=100, y=100, type="switch", id=100),
dict(msg_type='DeviceCreate', name="TestSwitchB", x=900, y=100, type="switch", id=101),
dict(msg_type='InterfaceCreate', name="swp1", id=1, device_id=100),
dict(msg_type='InterfaceCreate', name="swp1", id=1, device_id=101),
dict(msg_type='LinkCreate', id=100, name="A to B", from_device_id=100, to_device_id=101, from_interface_id=1, to_interface_id=1)])
time.sleep(1)
self.ws.send('InterfaceLabelEdit', id=1, device_id=100, name="swp2", previous_name="swp1")
time.sleep(1)
self.ws.send('LinkLabelEdit', id=100, name="B to A", previous_name="A to B")
time.sleep(1)
self.ws.send('LinkDestroy', id=100, from_device_id=100, to_device_id=101, from_interface_id=1, to_interface_id=1)
self.ws.send('DeviceDestroy',
previous_name="TestSwitch",
previous_x=0,
previous_y=500,
previous_type="switch",
id=100)
self.ws.send('DeviceDestroy',
previous_name="TestSwitch",
previous_x=0,
previous_y=500,
previous_type="switch",
id=101)
class TestUndoPersistence(unittest.TestCase):
def setUp(self):
self.ws = MessageHandler(create_connection("ws://localhost:8001/network_ui/tester?topology_id=143"))
self.ws.recv()
self.ws.recv()
def test_unsupported(self):
self.ws.send("Undo", original_message=['NotSupported', dict(sender=0, message_id=-1)])
def test_undo(self):
self.ws.send("Undo", original_message=['Undo', dict(sender=0, message_id=-1)])
def test_redo(self):
self.ws.send("Undo", original_message=['Redo', dict(sender=0, message_id=-1)])
def test_DeviceCreate(self):
msg = self.ws.make_message('DeviceCreate', name="TestSwitch", x=0, y=500, type="switch", id=100)
self.ws.send_message(msg)
self.ws.send("Undo", original_message=msg)
def test_DeviceDestroy(self):
msg = self.ws.make_message('DeviceCreate', name="TestSwitch", x=0, y=500, type="switch", id=100)
self.ws.send_message(msg)
msg = self.ws.make_message('DeviceDestroy',
previous_name="TestSwitch",
previous_x=0,
previous_y=500,
previous_type="switch",
id=100)
self.ws.send_message(msg)
self.ws.send("Undo", original_message=msg)
def test_DeviceMove(self):
msg = self.ws.make_message('DeviceCreate', name="TestSwitch", x=0, y=500, type="switch", id=100)
self.ws.send_message(msg)
msg = self.ws.make_message('DeviceMove', x=100, y=100, previous_x=0, previous_y=500, id=100)
self.ws.send_message(msg)
self.ws.send("Undo", original_message=msg)
def test_DeviceLabelEdit(self):
msg = self.ws.make_message('DeviceCreate', name="TestSwitch", x=0, y=500, type="switch", id=100)
self.ws.send_message(msg)
msg = self.ws.make_message('DeviceLabelEdit', name="Foo", previous_name="TestSwitch", id=100)
self.ws.send_message(msg)
self.ws.send("Undo", original_message=msg)
def test_DeviceSelected_DeviceUnSelected(self):
self.ws.send("Undo", original_message=['DeviceSelected', dict(sender=0, message_id=-1)])
self.ws.send("Undo", original_message=['DeviceUnSelected', dict(sender=0, message_id=-1)])
def test_Snapshot(self):
self.ws.send("Undo", original_message=['Snapshot', dict(sender=0, message_id=-1)])
def tearDown(self):
self.ws.close()
def test_LinkEdit_InterfaceEdit_LinkDestroy(self):
self.ws.send_multiple([
dict(msg_type='DeviceCreate', name="TestSwitchA", x=100, y=100, type="switch", id=100),
dict(msg_type='DeviceCreate', name="TestSwitchB", x=900, y=100, type="switch", id=101),
dict(msg_type='InterfaceCreate', name="swp1", id=1, device_id=100),
dict(msg_type='InterfaceCreate', name="swp1", id=1, device_id=101)])
time.sleep(1)
msg = self.ws.make_message('LinkCreate', id=100, name="A to B", from_device_id=100, to_device_id=101, from_interface_id=1, to_interface_id=1)
self.ws.send_message(msg)
self.ws.send('Undo', original_message=msg)
time.sleep(1)
self.ws.send('Redo', original_message=msg)
time.sleep(1)
msg = self.ws.make_message('LinkDestroy', id=100, name="A to B", from_device_id=100, to_device_id=101, from_interface_id=1, to_interface_id=1)
time.sleep(1)
self.ws.send_message(msg)
self.ws.send('Undo', original_message=msg)
time.sleep(1)
self.ws.send('DeviceDestroy',
previous_name="TestSwitch",
previous_x=0,
previous_y=500,
previous_type="switch",
id=100)
self.ws.send('DeviceDestroy',
previous_name="TestSwitch",
previous_x=0,
previous_y=500,
previous_type="switch",
id=101)
class TestRedoPersistence(unittest.TestCase):
def setUp(self):
self.ws = MessageHandler(create_connection("ws://localhost:8001/network_ui/tester?topology_id=143"))
self.ws.recv()
self.ws.recv()
def test_unsupported(self):
self.ws.send("Redo", original_message=['NotSupported', dict(sender=0, message_id=-1)])
def test_undo(self):
self.ws.send("Redo", original_message=['Undo', dict(sender=0, message_id=-1)])
def test_redo(self):
self.ws.send("Redo", original_message=['Redo', dict(sender=0, message_id=-1)])
def test_DeviceSelected_DeviceUnSelected(self):
self.ws.send("Redo", original_message=['DeviceSelected', dict(sender=0, message_id=-1)])
self.ws.send("Redo", original_message=['DeviceUnSelected', dict(sender=0, message_id=-1)])
def test_Snapshot(self):
self.ws.send("Redo", original_message=['Snapshot', dict(sender=0, message_id=-1)])
def tearDown(self):
self.ws.close()
class TestUIWebSocket(unittest.TestCase):
def test(self):
self.ui = MessageHandler(create_connection("ws://localhost:8001/network_ui/topology?topology_id=143"))
self.ui.recv()
self.ui.recv()
self.ui.send("Hello")
def tearDown(self):
self.ui.close()
class TestUI(unittest.TestCase):
def setUp(self):
self.ws = MessageHandler(create_connection("ws://localhost:8001/network_ui/tester?topology_id=143"))
self.ui = MessageHandler(create_connection("ws://localhost:8001/network_ui/topology?topology_id=143"))
self.ws.recv()
self.ws.recv()
self.ui.recv()
self.ui.recv()
def tearDown(self):
self.ui.close()
self.ws.close()
def test_DeviceStatus(self):
self.ws.send('DeviceCreate', name="TestSwitch", x=0, y=500, type="switch", id=100)
self.ws.send('DeviceMove', x=100, y=100, previous_x=0, previous_y=500, id=100)
self.ws.send('DeviceStatus', name="TestSwitch", working=True, status=None)
time.sleep(1)
self.ws.send('DeviceStatus', name="TestSwitch", working=False, status="pass")
time.sleep(1)
self.ws.send('DeviceDestroy',
previous_name="TestSwitch",
previous_x=0,
previous_y=500,
previous_type="switch",
id=100)
def test_TaskStatus(self):
self.ws.send('DeviceCreate', name="TestSwitch", x=0, y=500, type="switch", id=100)
self.ws.send('DeviceMove', x=100, y=100, previous_x=0, previous_y=500, id=100)
self.ws.send('TaskStatus', device_name="TestSwitch", task_id="1", working=True, status=None)
time.sleep(1)
self.ws.send('TaskStatus', device_name="TestSwitch", task_id="1", working=False, status="pass")
time.sleep(1)
self.ws.send('DeviceDestroy',
previous_name="TestSwitch",
previous_x=0,
previous_y=500,
previous_type="switch",
id=100)
def test_DeviceSelect(self):
self.ws.send('DeviceCreate', name="TestSwitch", x=0, y=500, type="switch", id=100)
self.ws.send('DeviceMove', x=100, y=100, previous_x=0, previous_y=500, id=100)
self.ws.send('DeviceSelected', id=100)
time.sleep(1)
self.ws.send('DeviceUnSelected', id=100)
time.sleep(1)
self.ws.send('DeviceDestroy',
previous_name="TestSwitch",
previous_x=0,
previous_y=500,
previous_type="switch",
id=100)
def test_LinkSelect(self):
self.ws.send('DeviceCreate', name="TestSwitchA", x=100, y=100, type="switch", id=100)
self.ws.send('DeviceCreate', name="TestSwitchB", x=900, y=100, type="switch", id=101)
self.ws.send('InterfaceCreate', name="swp1", id=1, device_id=100)
self.ws.send('InterfaceCreate', name="swp1", id=1, device_id=101)
time.sleep(1)
self.ws.send('LinkCreate', id=100, name="A to B", from_device_id=100, to_device_id=101, from_interface_id=1, to_interface_id=1)
self.ws.send('LinkSelected', id=100)
time.sleep(1)
self.ws.send('LinkUnSelected', id=100)
time.sleep(1)
self.ws.send('DeviceDestroy',
previous_name="TestSwitch",
previous_x=0,
previous_y=500,
previous_type="switch",
id=100)
self.ws.send('DeviceDestroy',
previous_name="TestSwitch",
previous_x=0,
previous_y=500,
previous_type="switch",
id=101)
def test_LinkSelect2(self):
self.ws.send_multiple([
dict(msg_type='DeviceCreate', name="TestSwitchA", x=100, y=100, type="switch", id=100),
dict(msg_type='DeviceCreate', name="TestSwitchB", x=900, y=100, type="switch", id=101),
dict(msg_type='InterfaceCreate', name="swp1", id=1, device_id=100),
dict(msg_type='InterfaceCreate', name="swp1", id=1, device_id=101),
dict(msg_type='LinkCreate', id=100, name="A to B", from_device_id=100, to_device_id=101, from_interface_id=1, to_interface_id=1)])
self.ws.send('LinkSelected', id=100)
time.sleep(1)
self.ws.send('LinkUnSelected', id=100)
time.sleep(1)
self.ws.send('DeviceDestroy',
previous_name="TestSwitch",
previous_x=0,
previous_y=500,
previous_type="switch",
id=100)
self.ws.send('DeviceDestroy',
previous_name="TestSwitch",
previous_x=0,
previous_y=500,
previous_type="switch",
id=101)
def test_Facts(self):
self.ws.send('DeviceCreate', name="TestSwitchA", x=100, y=100, type="switch", id=100)
self.ws.send('DeviceCreate', name="TestSwitchB", x=900, y=100, type="switch", id=101)
self.ws.send('InterfaceCreate', name="swp1", id=1, device_id=100)
self.ws.send('InterfaceCreate', name="swp1", id=1, device_id=101)
time.sleep(1)
self.ws.send('LinkCreate', id=100, name="A to B", from_device_id=100, to_device_id=101, from_interface_id=1, to_interface_id=1)
time.sleep(1)
self.ws.send('Facts', key="TestSwitchA", value=dict(ansible_local=dict(ptm={'port': "swp1", 'cbl status': 'fail'})))
time.sleep(1)
self.ws.send('Facts', key="TestSwitchA", value=dict(ansible_local=dict(ptm={'port': "swp1", 'cbl status': 'pass'})))
time.sleep(1)
self.ws.send('DeviceDestroy',
previous_name="TestSwitch",
previous_x=0,
previous_y=500,
previous_type="switch",
id=100)
self.ws.send('DeviceDestroy',
previous_name="TestSwitch",
previous_x=0,
previous_y=500,
previous_type="switch",
id=101)
def test_Snapshot(self):
self.ws.send('Snapshot', **yaml.load('''
devices:
- id: 116
interfaces:
- id: 1
name: swp1
network: 186105
remote_device_name: Switch2
remote_interface_name: swp1
name: Switch1
type: switch
x: -1969
y: -320
- id: 117
interfaces:
- id: 1
name: swp1
network: 186105
remote_device_name: Switch1
remote_interface_name: swp1
name: Switch2
type: switch
x: -1711
y: -323
links:
- from_device: Switch2
from_device_id: 117
from_interface: swp1
from_interface_id: 1
network: 186105
to_device: Switch1
to_device_id: 116
to_interface: swp1
to_interface_id: 1
name: topology
topology_id: 143
'''))
time.sleep(1)
class TestInvalidValues(unittest.TestCase):
def test_bad_topology_id1(self):
self.ws = MessageHandler(create_connection("ws://localhost:8001/network_ui/tester?topology_id=0"))
self.ws.close()
def test_bad_topology_id2(self):
self.ws = MessageHandler(create_connection("ws://localhost:8001/network_ui/tester?topology_id=foo"))
self.ws.close()
def test_bad_sender(self):
self.ws = MessageHandler(create_connection("ws://localhost:8001/network_ui/tester?topology_id=143"))
self.ws.ws.send(json.dumps(['DeviceCreate', dict(sender=-1, name="TestSwitchA", x=100, y=100, type="switch", id=100)]))
self.ws.ws.send(json.dumps(['DeviceDestroy', dict(sender=-1, previous_name="TestSwitchA",
previous_x=100, previous_y=100, previous_type="switch", id=100)]))
self.ws.close()
def test_unsupported_command(self):
self.ws = MessageHandler(create_connection("ws://localhost:8001/network_ui/tester?topology_id=143"))
self.ws.recv()
self.ws.recv()
self.ws.send("NotSupported")
self.ws.send_multiple([dict(msg_type="NotSupported")])
self.ws.close()

View File

@ -0,0 +1,47 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
]
operations = [
migrations.CreateModel(
name='Device',
fields=[
('device_id', models.AutoField(serialize=False, primary_key=True)),
('name', models.CharField(max_length=200)),
('x', models.IntegerField()),
('y', models.IntegerField()),
('id', models.IntegerField()),
],
),
migrations.CreateModel(
name='Link',
fields=[
('link_id', models.AutoField(serialize=False, primary_key=True)),
('from_device', models.ForeignKey(related_name='+', to='network_ui.Device')),
('to_device', models.ForeignKey(related_name='+', to='network_ui.Device')),
],
),
migrations.CreateModel(
name='Topology',
fields=[
('topology_id', models.AutoField(serialize=False, primary_key=True)),
('name', models.CharField(max_length=200)),
('id', models.IntegerField()),
('scale', models.FloatField()),
('panX', models.FloatField()),
('panY', models.FloatField()),
],
),
migrations.AddField(
model_name='device',
name='topology',
field=models.ForeignKey(to='network_ui.Topology'),
),
]

View File

@ -0,0 +1,18 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('network_ui', '0001_initial'),
]
operations = [
migrations.RemoveField(
model_name='topology',
name='id',
),
]

View File

@ -0,0 +1,20 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('network_ui', '0002_remove_topology_id'),
]
operations = [
migrations.AddField(
model_name='device',
name='type',
field=models.CharField(default='', max_length=200),
preserve_default=False,
),
]

View File

@ -0,0 +1,38 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('network_ui', '0003_device_type'),
]
operations = [
migrations.CreateModel(
name='Client',
fields=[
('client_id', models.AutoField(serialize=False, primary_key=True)),
],
),
migrations.CreateModel(
name='MessageType',
fields=[
('message_type_id', models.AutoField(serialize=False, primary_key=True)),
('name', models.CharField(max_length=200)),
],
),
migrations.CreateModel(
name='TopologyHistory',
fields=[
('topology_history_id', models.AutoField(serialize=False, primary_key=True)),
('message_id', models.IntegerField()),
('message_data', models.TextField()),
('client', models.ForeignKey(to='network_ui.Client')),
('message_type', models.ForeignKey(to='network_ui.MessageType')),
('topology', models.ForeignKey(to='network_ui.Topology')),
],
),
]

View File

@ -0,0 +1,19 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('network_ui', '0004_client_messagetype_topologyhistory'),
]
operations = [
migrations.AddField(
model_name='topologyhistory',
name='undone',
field=models.BooleanField(default=b'False'),
),
]

View File

@ -0,0 +1,19 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('network_ui', '0005_topologyhistory_undone'),
]
operations = [
migrations.AlterField(
model_name='topologyhistory',
name='undone',
field=models.BooleanField(default=False),
),
]

View File

@ -0,0 +1,44 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations, models
def forwards_func(apps, schema_editor):
Topology = apps.get_model("network_ui", "Topology")
Topology.objects.get_or_create(name="Unknown", topology_id=-1, panX=0, panY=0, scale=1.0)
Device = apps.get_model("network_ui", "Device")
Device.objects.get_or_create(name="Unknown", device_id=-1, x=0, y=0, type="unknown", id=-1, topology_id=-1)
Interface = apps.get_model("network_ui", "Interface")
Interface.objects.get_or_create(name="Unknown", device_id=-1, interface_id=-1)
class Migration(migrations.Migration):
dependencies = [
('network_ui', '0006_auto_20170321_1236'),
]
operations = [
migrations.CreateModel(
name='Interface',
fields=[
('interface_id', models.AutoField(serialize=False, primary_key=True)),
('name', models.CharField(max_length=200)),
('device', models.ForeignKey(to='network_ui.Device')),
],
),
migrations.RunPython(forwards_func),
migrations.AddField(
model_name='link',
name='from_interface',
field=models.ForeignKey(related_name='+', default=-1, to='network_ui.Interface'),
preserve_default=False,
),
migrations.AddField(
model_name='link',
name='to_interface',
field=models.ForeignKey(related_name='+', default=-1, to='network_ui.Interface'),
preserve_default=False,
),
]

View File

@ -0,0 +1,20 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('network_ui', '0007_auto_20170328_1655'),
]
operations = [
migrations.AddField(
model_name='interface',
name='id',
field=models.IntegerField(default=0),
preserve_default=False,
),
]

View File

@ -0,0 +1,34 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('network_ui', '0008_interface_id'),
]
operations = [
migrations.AlterField(
model_name='link',
name='from_device',
field=models.ForeignKey(related_name='from_link', to='network_ui.Device'),
),
migrations.AlterField(
model_name='link',
name='from_interface',
field=models.ForeignKey(related_name='from_link', to='network_ui.Interface'),
),
migrations.AlterField(
model_name='link',
name='to_device',
field=models.ForeignKey(related_name='to_link', to='network_ui.Device'),
),
migrations.AlterField(
model_name='link',
name='to_interface',
field=models.ForeignKey(related_name='to_link', to='network_ui.Interface'),
),
]

View File

@ -0,0 +1,20 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('network_ui', '0009_auto_20170403_1912'),
]
operations = [
migrations.AddField(
model_name='link',
name='id',
field=models.IntegerField(default=0),
preserve_default=False,
),
]

View File

@ -0,0 +1,20 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('network_ui', '0010_link_id'),
]
operations = [
migrations.AddField(
model_name='link',
name='name',
field=models.CharField(default='', max_length=200),
preserve_default=False,
),
]

View File

74
awx/network_ui/models.py Normal file
View File

@ -0,0 +1,74 @@
from django.db import models
class Device(models.Model):
device_id = models.AutoField(primary_key=True,)
topology = models.ForeignKey('Topology',)
name = models.CharField(max_length=200, )
x = models.IntegerField()
y = models.IntegerField()
id = models.IntegerField()
type = models.CharField(max_length=200, )
def __unicode__(self):
return self.name
class Link(models.Model):
link_id = models.AutoField(primary_key=True,)
from_device = models.ForeignKey('Device', related_name='from_link', )
to_device = models.ForeignKey('Device', related_name='to_link', )
from_interface = models.ForeignKey('Interface', related_name='from_link', )
to_interface = models.ForeignKey('Interface', related_name='to_link', )
id = models.IntegerField()
name = models.CharField(max_length=200, )
class Topology(models.Model):
topology_id = models.AutoField(primary_key=True,)
name = models.CharField(max_length=200, )
scale = models.FloatField()
panX = models.FloatField()
panY = models.FloatField()
def __unicode__(self):
return self.name
class Client(models.Model):
client_id = models.AutoField(primary_key=True,)
class TopologyHistory(models.Model):
topology_history_id = models.AutoField(primary_key=True,)
topology = models.ForeignKey('Topology',)
client = models.ForeignKey('Client',)
message_type = models.ForeignKey('MessageType',)
message_id = models.IntegerField()
message_data = models.TextField()
undone = models.BooleanField(default=False)
class MessageType(models.Model):
message_type_id = models.AutoField(primary_key=True,)
name = models.CharField(max_length=200, )
def __unicode__(self):
return self.name
class Interface(models.Model):
interface_id = models.AutoField(primary_key=True,)
device = models.ForeignKey('Device',)
name = models.CharField(max_length=200, )
id = models.IntegerField()
def __unicode__(self):
return self.name

23
awx/network_ui/routing.py Normal file
View File

@ -0,0 +1,23 @@
from channels.routing import route
from awx.network_ui.consumers import ws_connect, ws_message, ws_disconnect, console_printer, persistence, discovery
from awx.network_ui.consumers import ansible_connect, ansible_message, ansible_disconnect
from awx.network_ui.consumers import worker_connect, worker_message, worker_disconnect
from awx.network_ui.consumers import tester_connect, tester_message, tester_disconnect
channel_routing = [
route("websocket.connect", ws_connect, path=r"^/network_ui/topology"),
route("websocket.receive", ws_message, path=r"^/network_ui/topology"),
route("websocket.disconnect", ws_disconnect, path=r"^/network_ui/topology"),
route("websocket.connect", ansible_connect, path=r"^/network_ui/ansible"),
route("websocket.receive", ansible_message, path=r"^/network_ui/ansible"),
route("websocket.disconnect", ansible_disconnect, path=r"^/network_ui/ansible"),
route("websocket.connect", worker_connect, path=r"^/network_ui/worker"),
route("websocket.receive", worker_message, path=r"^/network_ui/worker"),
route("websocket.disconnect", worker_disconnect, path=r"^/network_ui/worker"),
route("websocket.connect", tester_connect, path=r"^/network_ui/tester"),
route("websocket.receive", tester_message, path=r"^/network_ui/tester"),
route("websocket.disconnect", tester_disconnect, path=r"^/network_ui/tester"),
route("console_printer", console_printer),
route("persistence", persistence.handle),
route("discovery", discovery.handle),
]

View File

@ -0,0 +1,58 @@
from awx.network_ui.models import Topology, Device, Link, Interface
from django.db.models import Q
import yaml
NetworkAnnotatedInterface = Interface.objects.values('name',
'id',
'from_link__pk',
'to_link__pk',
'from_link__to_device__name',
'to_link__from_device__name',
'from_link__to_interface__name',
'to_link__from_interface__name')
def yaml_serialize_topology(topology_id):
data = dict(devices=[],
links=[])
topology = Topology.objects.get(pk=topology_id)
data['name'] = topology.name
data['topology_id'] = topology_id
links = list(Link.objects
.filter(Q(from_device__topology_id=topology_id) |
Q(to_device__topology_id=topology_id)))
interfaces = Interface.objects.filter(device__topology_id=topology_id)
for device in Device.objects.filter(topology_id=topology_id).order_by('name'):
interfaces = list(NetworkAnnotatedInterface.filter(device_id=device.pk).order_by('name'))
interfaces = [dict(name=x['name'],
network=x['from_link__pk'] or x['to_link__pk'],
remote_device_name=x['from_link__to_device__name'] or x['to_link__from_device__name'],
remote_interface_name=x['from_link__to_interface__name'] or x['to_link__from_interface__name'],
id=x['id'],
) for x in interfaces]
data['devices'].append(dict(name=device.name,
type=device.type,
x=device.x,
y=device.y,
id=device.id,
interfaces=interfaces))
for link in links:
data['links'].append(dict(from_device=link.from_device.name,
to_device=link.to_device.name,
from_interface=link.from_interface.name,
to_interface=link.to_interface.name,
from_device_id=link.from_device.id,
to_device_id=link.to_device.id,
from_interface_id=link.from_interface.id,
to_interface_id=link.to_interface.id,
network=link.pk))
return yaml.safe_dump(data, default_flow_style=False)

View File

@ -0,0 +1,8 @@
/bundle.js
/node_modules
/style.css
/extract.js
/css
/js
/src-instrumented
/index-instrumented.html

View File

@ -0,0 +1,47 @@
{
"browser": true,
"node": true,
"jquery": true,
"esnext": true,
"globalstrict": true,
"curly": true,
"immed": true,
"latedef": "nofunc",
"noarg": true,
"nonew": true,
"maxerr": 10000,
"notypeof": true,
"globals": {
"$ENV": true,
"require": true,
"global": true,
"beforeEach": false,
"inject": false,
"module": false,
"angular":false,
"alert":false,
"$AnsibleConfig":true,
"$basePath":true,
"jsyaml":false,
"_":false,
"d3":false,
"Donut3D":false,
"nv":false,
"it": false,
"xit": false,
"expect": false,
"context": false,
"describe": false,
"moment": false,
"spyOn": false,
"jasmine": false
},
"strict": false,
"quotmark": false,
"trailing": true,
"undef": true,
"unused": true,
"eqeqeq": true,
"indent": 4,
"newcap": false
}

View File

@ -0,0 +1,25 @@
.PHONY: all main lint lessc
all: clean lessc lint main istanbul
clean:
rm -rf src-instrumented
rm -f js/bundle.js
rm -f css/style.css
main:
webpack src/main.js js/bundle.js
cp vendor/*.js js/
lint:
jshint --verbose src/*js
lessc:
lessc src/style.less css/style.css
istanbul:
istanbul instrument --output src-instrumented src
webpack src-instrumented/main.js js/bundle-instrumented.js
cp index.html index-instrumented.html
sed -i "" "s/bundle.js/bundle-instrumented.js/g" index-instrumented.html
cp vendor/*.js js/

View File

@ -0,0 +1 @@
Build directory for css files.

View File

@ -0,0 +1,34 @@
app: button
panX: 53
panY: -52
scaleXY: 1
states:
- label: Start
size: 100
x: 468
y: 170
- label: Ready
size: 100
x: 471
y: 376
- label: Pressed
size: 100
x: 606
y: 563
- label: Clicked
size: 100
x: 331
y: 568
transitions:
- from_state: Start
label: start
to_state: Ready
- from_state: Ready
label: onMouseDown
to_state: Pressed
- from_state: Pressed
label: onMouseUp
to_state: Clicked
- from_state: Clicked
label: start
to_state: Ready

View File

@ -0,0 +1,27 @@
app: buttons
panX: 133
panY: 41
scaleXY: 1
states:
- label: Start
size: 100
x: 392
y: 88
- label: Ready
size: 100
x: 392
y: 281
- label: ButtonPressed
size: 100
x: 394
y: 491
transitions:
- from_state: Start
label: ''
to_state: Ready
- from_state: Ready
label: onMouseDown
to_state: ButtonPressed
- from_state: ButtonPressed
label: onMouseUp
to_state: Ready

View File

@ -0,0 +1,41 @@
app: link
panX: -15
panY: 0
scaleXY: 1
states:
- label: Ready
size: 100
x: 540
y: 307
- label: Start
size: 100
x: 533
y: 96
- label: Selecting
size: 100
x: 780
y: 299
- label: Connecting
size: 100
x: 782
y: 541
- label: Connected
size: 100
x: 546
y: 543
transitions:
- from_state: Start
label: start
to_state: Ready
- from_state: Ready
label: onNewLink
to_state: Selecting
- from_state: Selecting
label: onMouseUp
to_state: Connecting
- from_state: Connecting
label: onMouseUp
to_state: Connected
- from_state: Connected
label: free
to_state: Ready

View File

@ -0,0 +1,64 @@
app: move
panX: 285.92999999999995
panY: -151.52999999999997
scaleXY: 0.8700000000000001
states:
- label: Start
size: 100
x: 533
y: 121
- label: Ready
size: 100
x: 531
y: 320
- label: Selected1
size: 100
x: 226
y: 325
- label: Selected2
size: 100
x: 230
y: 582
- label: Move
size: 100
x: -54
y: 587
- label: EditLabel
size: 100
x: 535.7126436781609
y: 583.367816091954
- label: Selected3
size: 100
x: 231.11494252873567
y: 867.2758620689654
transitions:
- from_state: Start
label: start
to_state: Ready
- from_state: Ready
label: onMouseDown
to_state: Selected1
- from_state: Selected1
label: onMouseUp
to_state: Selected2
- from_state: Selected1
label: onMouseMove
to_state: Move
- from_state: Selected2
label: onMouseDown
to_state: Ready
- from_state: Move
label: onMouseUp
to_state: Selected2
- from_state: EditLabel
label: onMouseDown
to_state: Ready
- from_state: Selected2
label: onMouseDown
to_state: Selected3
- from_state: Selected3
label: onMouseMove
to_state: Move
- from_state: Selected3
label: onMouseUp
to_state: EditLabel

View File

@ -0,0 +1,27 @@
app: time
panX: 0
panY: 0
scaleXY: 1
states:
- label: Start
size: 100
x: 634
y: 117
- label: Present
size: 100
x: 632
y: 379
- label: Past
size: 100
x: 367
y: 369
transitions:
- from_state: Start
label: start
to_state: Present
- from_state: Present
label: onMouseWheel
to_state: Past
- from_state: Past
label: onMouseWheel
to_state: Present

View File

@ -0,0 +1,47 @@
app: view
panX: 1
panY: -67
scaleXY: 1
states:
- label: Start
size: 100
x: 498
y: 175
- label: Ready
size: 100
x: 506
y: 395
- label: Scale
size: 100
x: 310
y: 626
- label: Pan
size: 100
x: 741
y: 631
- label: Pressed
size: 100
x: 739
y: 392
transitions:
- from_state: Start
label: start
to_state: Ready
- from_state: Ready
label: onMouseWheel
to_state: Scale
- from_state: Scale
label: onTimeout
to_state: Ready
- from_state: Ready
label: onMouseDown
to_state: Pressed
- from_state: Pressed
label: onMouseMove
to_state: Pan
- from_state: Pressed
label: onMouseUp
to_state: Ready
- from_state: Pan
label: onMouseUp
to_state: Ready

View File

@ -0,0 +1,111 @@
<!DOCTYPE html>
<html ng-app="triangular">
<head>
<link rel="stylesheet" href="css/style.css" />
<script data-require="angular.js@1.6.2" src="js/angular.js" data-semver="1.6.2"></script>
<script src="js/reconnecting-websocket.js"></script>
<script src="js/bundle.js"></script>
<script src="js/hamster.js"></script>
<script src="js/ngTouch.js"></script>
<script src="js/mousewheel.js"></script>
</head>
<body ng-controller="MainCtrl" id="Main">
<svg id="frame"
ng-attr-height="{{graph.height}}"
ng-attr-width="{{graph.width}}"
ng-mousedown="onMouseDown($event)"
ng-mouseup="onMouseUp($event)"
ng-mouseenter="onMouseEnter($event)"
ng-mouseleave="onMouseLeave($event)"
ng-mousemove="onMouseMove($event)"
ng-mouseover="onMouseOver($event)"
ng-touchstart="onTouchStart($event)"
ng-touchmove="onTouchMove($event)"
ng-touchend="onTouchEnd($event)"
ng-tap="onTap($event)"
msd-wheel="onMouseWheel($event, $delta, $deltaX, $deltaY)">
<defs>
<filter x="0" y="0" width="1" height="1" id="selected">
<feFlood flood-color="#b3d8fd"/>
<feComposite in="SourceGraphic" operator="xor"/>
</filter>
<filter x="0" y="0" width="1" height="1" id="background">
<feFlood flood-color="#ffffff"/>
<feComposite in="SourceGraphic" operator="xor"/>
</filter>
</defs>
<g transform="scale(1.0)" id="frame_g">
<g ng-repeat="link in links">
<g link></g>
</g>
<g ng-repeat="link in links">
<g ng-if="link.selected || link.to_interface.selected || link.from_interface.selected" link></g>
</g>
<g ng-repeat="device in devices"
ng-attr-transform="translate({{device.x}},{{device.y}})"
ng-attr-class="{{device.type}}"
ng-switch on="device.type">
<g ng-switch-when="router"><!-- begin router -->
<g router></g>
</g> <!-- end router -->
<g ng-switch-when="switch"> <!-- begin switch -->
<g switch> </g>
</g> <!-- end switch -->
<g ng-switch-when="host"> <!-- begin host -->
<g host> </g>
</g> <!-- end host -->
<g ng-switch-when="rack"> <!-- begin rack -->
<g rack> </g>
</g> <!-- end rack -->
<g ng-switch-default> <!-- begin default -->
<g default></g>
</g> <!-- end default -->
<g status-light></g>
<g task-status></g>
</g> <!-- end devices -->
<g ng-attr-transform="translate({{scaledX}},{{scaledY}})" ng-attr-class="{{debug.hidden && 'hidden' || ''}} debug-cursor" >
<line x1="-5" y1="0" x2="5" y2="0"/>
<line x1="0" y1="-5" x2="0" y2="5"/>
</g>
<g quadrants>
</g>
</g>
<g ng-if="!hide_buttons">
<g> <!-- buttons -->
<g ng-repeat="button in buttons"
ng-attr-transform="translate({{button.x}},{{button.y}})"
ng-attr-class="{{button.is_pressed ? 'button-pressed' : button.mouse_over ? 'button-hover' : 'button'}}">
<g button></g>
</g>
</g> <!-- end buttons -->
<g> <!-- stencils -->
<g ng-repeat="stencil in stencils"
ng-attr-transform="translate({{stencil.x}},{{stencil.y}})"
class="button">
<g stencil></g>
</g>
</g> <!-- end stencils -->
<g> <!-- layers -->
<g ng-repeat="layer in layers"
ng-attr-transform="translate({{layer.x}},{{layer.y}})"
class="button">
<g layer> </g>
</g>
</g> <!-- end layers -->
</g>
<g debug></g>
<g cursor></g>
<g ng-repeat="touch in touches">
<g touch></g>
</g>
</svg>
</body>
</html>

View File

@ -0,0 +1 @@
Build directory for javascript files

View File

@ -0,0 +1,24 @@
{
"name": "network_ui",
"version": "1.0.0",
"description": "Ansible Tower Networking UI",
"main": "app.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "Ben Thomasson",
"license": "ISC",
"dependencies": {
"webpack": "",
"browserify": "",
"inherits": "",
"require": "",
"jshint": "",
"less": "",
"mathjs": ""
},
"devDependencies": {
"eslint": "^3.17.1",
"eslint-config-google": "^0.7.1"
}
}

View File

@ -0,0 +1,3 @@
#!/bin/bash -ex
python -m SimpleHTTPServer

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,76 @@
var inherits = require('inherits');
var fsm = require('./fsm.js');
function _State () {
}
inherits(_State, fsm._State);
function _Ready () {
this.name = 'Ready';
}
inherits(_Ready, _State);
var Ready = new _Ready();
exports.Ready = Ready;
function _Start () {
this.name = 'Start';
}
inherits(_Start, _State);
var Start = new _Start();
exports.Start = Start;
function _Clicked () {
this.name = 'Clicked';
}
inherits(_Clicked, _State);
var Clicked = new _Clicked();
exports.Clicked = Clicked;
function _Pressed () {
this.name = 'Pressed';
}
inherits(_Pressed, _State);
var Pressed = new _Pressed();
exports.Pressed = Pressed;
_Ready.prototype.onMouseDown = function (controller) {
controller.changeState(Pressed);
};
_Ready.prototype.onMouseDown.transitions = ['Pressed'];
_Ready.prototype.onTouchStart = _Ready.prototype.onMouseDown;
_Start.prototype.start = function (controller) {
controller.changeState(Ready);
};
_Start.prototype.start.transitions = ['Ready'];
_Clicked.prototype.start = function (controller) {
controller.scope.callback(controller.scope);
controller.scope.is_pressed = false;
controller.changeState(Ready);
};
_Clicked.prototype.start.transitions = ['Ready'];
_Pressed.prototype.start = function (controller) {
controller.scope.is_pressed = true;
};
_Pressed.prototype.onMouseUp = function (controller) {
controller.changeState(Clicked);
};
_Pressed.prototype.onMouseUp.transitions = ['Clicked'];
_Pressed.prototype.onTouchEnd = _Pressed.prototype.onMouseUp;

View File

@ -0,0 +1,100 @@
var inherits = require('inherits');
var fsm = require('./fsm.js');
function _State () {
}
inherits(_State, fsm._State);
function _Ready () {
this.name = 'Ready';
}
inherits(_Ready, _State);
var Ready = new _Ready();
exports.Ready = Ready;
function _Start () {
this.name = 'Start';
}
inherits(_Start, _State);
var Start = new _Start();
exports.Start = Start;
function _ButtonPressed () {
this.name = 'ButtonPressed';
}
inherits(_ButtonPressed, _State);
var ButtonPressed = new _ButtonPressed();
exports.ButtonPressed = ButtonPressed;
_Ready.prototype.onMouseDown = function (controller, msg_type, $event) {
var i = 0;
var buttons = controller.scope.buttons;
var button = null;
for (i = 0; i < buttons.length; i++) {
button = buttons[i];
if (button.is_selected(controller.scope.mouseX, controller.scope.mouseY)) {
button.fsm.handle_message(msg_type, $event);
controller.changeState(ButtonPressed);
break;
}
button = null;
}
if (button === null) {
controller.next_controller.handle_message(msg_type, $event);
}
};
_Ready.prototype.onMouseDown.transitions = ['ButtonPressed'];
_Ready.prototype.onTouchStart = _Ready.prototype.onMouseDown;
_Ready.prototype.onMouseMove = function (controller, msg_type, $event) {
if (!controller.scope.hide_buttons) {
var i = 0;
var buttons = controller.scope.buttons;
var button = null;
for (i = 0; i < buttons.length; i++) {
button = buttons[i];
button.mouse_over = false;
if (button.is_selected(controller.scope.mouseX, controller.scope.mouseY)) {
button.mouse_over = true;
}
}
}
controller.next_controller.handle_message(msg_type, $event);
};
_Start.prototype.start = function (controller) {
controller.changeState(Ready);
};
_Start.prototype.start.transitions = ['Ready'];
_ButtonPressed.prototype.onMouseUp = function (controller, msg_type, $event) {
var i = 0;
var buttons = controller.scope.buttons;
var button = null;
for (i = 0; i < buttons.length; i++) {
button = buttons[i];
button.fsm.handle_message(msg_type, $event);
}
controller.changeState(Ready);
};
_ButtonPressed.prototype.onMouseUp.transitions = ['Ready'];
_ButtonPressed.prototype.onTouchEnd = _ButtonPressed.prototype.onMouseUp;

View File

@ -0,0 +1,46 @@
function FSMController (scope, initial_state, next_controller) {
this.scope = scope;
this.state = initial_state;
this.state.start(this);
this.next_controller = next_controller;
}
exports.FSMController = FSMController;
FSMController.prototype.changeState = function (state) {
if(this.state !== null) {
this.state.end(this);
}
this.state = state;
if(state !== null) {
state.start(this);
}
};
FSMController.prototype.handle_message = function(msg_type, message) {
var handler_name = 'on' + msg_type;
if (typeof(this.state[handler_name]) !== "undefined") {
this.state[handler_name](this, msg_type, message);
} else {
this.default_handler(msg_type, message);
}
};
FSMController.prototype.default_handler = function(msg_type, message) {
if (this.next_controller !== null) {
this.next_controller.handle_message(msg_type, message);
}
};
function _State () {
}
_State.prototype.start = function () {
};
_State.prototype.end = function () {
};
var State = new _State();
exports.State = State;
exports._State = _State;

View File

@ -0,0 +1,146 @@
var inherits = require('inherits');
var fsm = require('./fsm.js');
var models = require('./models.js');
var messages = require('./messages.js');
function _State () {
}
inherits(_State, fsm._State);
function _Ready () {
this.name = 'Ready';
}
inherits(_Ready, _State);
var Ready = new _Ready();
exports.Ready = Ready;
function _Start () {
this.name = 'Start';
}
inherits(_Start, _State);
var Start = new _Start();
exports.Start = Start;
function _Connected () {
this.name = 'Connected';
}
inherits(_Connected, _State);
var Connected = new _Connected();
exports.Connected = Connected;
function _Connecting () {
this.name = 'Connecting';
}
inherits(_Connecting, _State);
var Connecting = new _Connecting();
exports.Connecting = Connecting;
function _Selecting () {
this.name = 'Selecting';
}
inherits(_Selecting, _State);
var Selecting = new _Selecting();
exports.Selecting = Selecting;
_Ready.prototype.onKeyDown = function(controller, msg_type, $event) {
if ($event.key === 'l') {
controller.handle_message("NewLink", $event);
}
controller.next_controller.handle_message(msg_type, $event);
};
_Ready.prototype.onNewLink = function (controller) {
controller.scope.clear_selections();
controller.changeState(Selecting);
};
_Start.prototype.start = function (controller) {
controller.changeState(Ready);
};
_Connected.prototype.start = function (controller) {
controller.scope.clear_selections();
controller.changeState(Ready);
};
_Connecting.prototype.onMouseDown = function () {
};
_Connecting.prototype.onMouseUp = function (controller) {
var selected_device = controller.scope.select_items(false).last_selected_device;
var to_device_interface = null;
var from_device_interface = null;
var i = 0;
if (selected_device !== null) {
controller.scope.new_link.to_device = selected_device;
i = controller.scope.new_link.to_device.interface_seq();
to_device_interface = new models.Interface(i, "swp" + i);
controller.scope.new_link.to_device.interfaces.push(to_device_interface);
i = controller.scope.new_link.from_device.interface_seq();
from_device_interface = new models.Interface(i, "swp" + i);
controller.scope.new_link.from_device.interfaces.push(from_device_interface);
to_device_interface.link = controller.scope.new_link;
from_device_interface.link = controller.scope.new_link;
to_device_interface.device = controller.scope.new_link.to_device;
from_device_interface.device = controller.scope.new_link.from_device;
controller.scope.new_link.to_interface = to_device_interface;
controller.scope.new_link.from_interface = from_device_interface;
to_device_interface.dot();
from_device_interface.dot();
controller.scope.send_control_message(new messages.MultipleMessage(controller.scope.client_id, [
new messages.InterfaceCreate(controller.scope.client_id,
controller.scope.new_link.from_device.id,
from_device_interface.id,
from_device_interface.name),
new messages.InterfaceCreate(controller.scope.client_id,
controller.scope.new_link.to_device.id,
to_device_interface.id,
to_device_interface.name),
new messages.LinkCreate(controller.scope.client_id,
controller.scope.new_link.id,
controller.scope.new_link.from_device.id,
controller.scope.new_link.to_device.id,
from_device_interface.id,
to_device_interface.id)]));
controller.scope.new_link = null;
controller.changeState(Connected);
} else {
var index = controller.scope.links.indexOf(controller.scope.new_link);
if (index !== -1) {
controller.scope.links.splice(index, 1);
}
controller.scope.new_link = null;
controller.changeState(Ready);
}
};
_Selecting.prototype.onMouseDown = function () {
};
_Selecting.prototype.onMouseUp = function (controller) {
var selected_device = controller.scope.select_items(false).last_selected_device;
if (selected_device !== null) {
controller.scope.new_link = new models.Link(controller.scope.link_id_seq(), selected_device, null, null, null, true);
controller.scope.links.push(controller.scope.new_link);
controller.changeState(Connecting);
}
};

View File

@ -0,0 +1,2 @@
var app = require('./app.js');
exports.app = app;

View File

@ -0,0 +1,241 @@
function serialize(message) {
return JSON.stringify([message.constructor.name, message]);
}
exports.serialize = serialize;
function DeviceMove(sender, id, x, y, previous_x, previous_y) {
this.msg_type = "DeviceMove";
this.sender = sender;
this.id = id;
this.x = x;
this.y = y;
this.previous_x = previous_x;
this.previous_y = previous_y;
}
exports.DeviceMove = DeviceMove;
function DeviceCreate(sender, id, x, y, name, type) {
this.msg_type = "DeviceCreate";
this.sender = sender;
this.id = id;
this.x = x;
this.y = y;
this.name = name;
this.type = type;
}
exports.DeviceCreate = DeviceCreate;
function DeviceDestroy(sender, id, previous_x, previous_y, previous_name, previous_type) {
this.msg_type = "DeviceDestroy";
this.sender = sender;
this.id = id;
this.previous_x = previous_x;
this.previous_y = previous_y;
this.previous_name = previous_name;
this.previous_type = previous_type;
}
exports.DeviceDestroy = DeviceDestroy;
function DeviceLabelEdit(sender, id, name, previous_name) {
this.msg_type = "DeviceLabelEdit";
this.sender = sender;
this.id = id;
this.name = name;
this.previous_name = previous_name;
}
exports.DeviceLabelEdit = DeviceLabelEdit;
function DeviceSelected(sender, id) {
this.msg_type = "DeviceSelected";
this.sender = sender;
this.id = id;
}
exports.DeviceSelected = DeviceSelected;
function DeviceUnSelected(sender, id) {
this.msg_type = "DeviceUnSelected";
this.sender = sender;
this.id = id;
}
exports.DeviceUnSelected = DeviceUnSelected;
function InterfaceCreate(sender, device_id, id, name) {
this.msg_type = "InterfaceCreate";
this.sender = sender;
this.device_id = device_id;
this.id = id;
this.name = name;
}
exports.InterfaceCreate = InterfaceCreate;
function InterfaceLabelEdit(sender, id, device_id, name, previous_name) {
this.msg_type = "InterfaceLabelEdit";
this.sender = sender;
this.id = id;
this.device_id = device_id;
this.name = name;
this.previous_name = previous_name;
}
exports.InterfaceLabelEdit = InterfaceLabelEdit;
function LinkLabelEdit(sender, id, name, previous_name) {
this.msg_type = "LinkLabelEdit";
this.sender = sender;
this.id = id;
this.name = name;
this.previous_name = previous_name;
}
exports.LinkLabelEdit = LinkLabelEdit;
function LinkCreate(sender, id, from_device_id, to_device_id, from_interface_id, to_interface_id) {
this.msg_type = "LinkCreate";
this.id = id;
this.sender = sender;
this.name = '';
this.from_device_id = from_device_id;
this.to_device_id = to_device_id;
this.from_interface_id = from_interface_id;
this.to_interface_id = to_interface_id;
}
exports.LinkCreate = LinkCreate;
function LinkDestroy(sender, id, from_id, to_id) {
this.msg_type = "LinkDestroy";
this.id = id;
this.sender = sender;
this.from_id = from_id;
this.to_id = to_id;
this.name = '';
}
exports.LinkDestroy = LinkDestroy;
function LinkSelected(sender, id) {
this.msg_type = "LinkSelected";
this.sender = sender;
this.id = id;
}
exports.LinkSelected = LinkSelected;
function LinkUnSelected(sender, id) {
this.msg_type = "LinkUnSelected";
this.sender = sender;
this.id = id;
}
exports.LinkUnSelected = LinkUnSelected;
function Undo(sender, original_message) {
this.msg_type = "Undo";
this.sender = sender;
this.original_message = original_message;
}
exports.Undo = Undo;
function Redo(sender, original_message) {
this.msg_type = "Redo";
this.sender = sender;
this.original_message = original_message;
}
exports.Redo = Redo;
function Deploy(sender) {
this.msg_type = "Deploy";
this.sender = sender;
}
exports.Deploy = Deploy;
function Destroy(sender) {
this.msg_type = "Destroy";
this.sender = sender;
}
exports.Destroy = Destroy;
function Discover(sender) {
this.msg_type = "Discover";
this.sender = sender;
}
exports.Discover = Discover;
function Layout(sender) {
this.msg_type = "Layout";
this.sender = sender;
}
exports.Layout = Layout;
function MultipleMessage(sender, messages) {
this.msg_type = "MultipleMessage";
this.sender = sender;
this.messages = messages;
}
exports.MultipleMessage = MultipleMessage;
function Coverage(sender, coverage) {
this.msg_type = "Coverage";
this.sender = sender;
this.coverage = coverage;
}
exports.Coverage = Coverage;
function MouseEvent(sender, x, y, type) {
this.msg_type = "MouseEvent";
this.sender = sender;
this.x = x;
this.y = y;
this.type = type;
}
exports.MouseEvent = MouseEvent;
function MouseWheelEvent(sender, delta, deltaX, deltaY, type, metaKey) {
this.msg_type = "MouseWheelEvent";
this.sender = sender;
this.delta = delta;
this.deltaX = deltaX;
this.deltaY = deltaY;
this.type = type;
this.originalEvent = {metaKey: metaKey};
}
exports.MouseWheelEvent = MouseWheelEvent;
function KeyEvent(sender, key, keyCode, type, altKey, shiftKey, ctrlKey, metaKey) {
this.msg_type = "KeyEvent";
this.sender = sender;
this.key = key;
this.keyCode = keyCode;
this.type = type;
this.altKey = altKey;
this.shiftKey = shiftKey;
this.ctrlKey = ctrlKey;
this.metaKey = metaKey;
}
exports.KeyEvent = KeyEvent;
function TouchEvent(sender, type, touches) {
this.msg_type = "TouchEvent";
this.sender = sender;
this.type = type;
this.touches = touches;
}
exports.TouchEvent = TouchEvent;
function StartRecording(sender) {
this.msg_type = "StartRecording";
this.sender = sender;
}
exports.StartRecording = StartRecording;
function StopRecording(sender) {
this.msg_type = "StopRecording";
this.sender = sender;
}
exports.StopRecording = StopRecording;
function ViewPort(sender, scale, panX, panY) {
this.msg_type = "ViewPort";
this.sender = sender;
this.scale = scale;
this.panX = panX;
this.panY = panY;
}
exports.ViewPort = ViewPort;

View File

@ -0,0 +1,278 @@
var fsm = require('./fsm.js');
var button = require('./button.js');
var util = require('./util.js');
function Device(id, name, x, y, type) {
this.id = id;
this.name = name;
this.x = x;
this.y = y;
this.height = type === "host" ? 15 : 50;
this.width = 50;
this.size = 50;
this.type = type;
this.selected = false;
this.remote_selected = false;
this.edit_label = false;
this.status = null;
this.working = false;
this.tasks = [];
this.shape = type === "router" ? "circular" : "rectangular";
this.interface_seq = util.natural_numbers(0);
this.interfaces = [];
}
exports.Device = Device;
Device.prototype.is_selected = function (x, y) {
return (x > this.x - this.width &&
x < this.x + this.width &&
y > this.y - this.height &&
y < this.y + this.height);
};
Device.prototype.describeArc = util.describeArc;
function Interface(id, name) {
this.id = id;
this.name = name;
this.link = null;
this.device = null;
this.edit_label = false;
this.dot_x = null;
this.dot_y = null;
}
exports.Interface = Interface;
Interface.prototype.is_selected = function (x, y) {
if (this.link === null || this.device === null) {
return false;
}
var d = Math.sqrt(Math.pow(x - this.device.x, 2) + Math.pow(y - this.device.y, 2));
return this.link.is_selected(x, y) && (d < this.dot_d + 30);
};
Interface.prototype.dot_distance = function () {
this.dot_d = Math.sqrt(Math.pow(this.device.x - this.dot_x, 2) + Math.pow(this.device.y - this.dot_y, 2));
};
Interface.prototype.dot = function () {
if (this.link === null || this.device === null) {
return;
}
var p;
if (this.device.shape === "circular") {
var theta = this.link.slope_rads();
if (this.link.from_interface === this) {
theta = theta + Math.PI;
}
p = {x: this.device.x - this.device.size * Math.cos(theta),
y: this.device.y - this.device.size * Math.sin(theta)};
this.dot_x = p.x;
this.dot_y = p.y;
this.dot_distance();
return;
}
var x1;
var y1;
var x2;
var y2;
var x3;
var y3;
var x4;
var y4;
var param1;
var param2;
x3 = this.link.to_device.x;
y3 = this.link.to_device.y;
x4 = this.link.from_device.x;
y4 = this.link.from_device.y;
x1 = this.device.x - this.device.width;
y1 = this.device.y - this.device.height;
x2 = this.device.x + this.device.width;
y2 = this.device.y - this.device.height;
p = util.intersection(x3, y3, x4, y4, x1, y1, x2, y2);
param1 = util.pCase(p.x, p.y, x1, y1, x2, y2);
param2 = util.pCase(p.x, p.y, x3, y3, x4, y4);
if (param1 >= 0 && param1 <= 1 && param2 >= 0 && param2 <= 1) {
this.dot_x = p.x;
this.dot_y = p.y;
this.dot_distance();
return;
}
x1 = this.device.x - this.device.width;
y1 = this.device.y + this.device.height;
x2 = this.device.x + this.device.width;
y2 = this.device.y + this.device.height;
p = util.intersection(x3, y3, x4, y4, x1, y1, x2, y2);
param1 = util.pCase(p.x, p.y, x1, y1, x2, y2);
param2 = util.pCase(p.x, p.y, x3, y3, x4, y4);
if (param1 >= 0 && param1 <= 1 && param2 >= 0 && param2 <= 1) {
this.dot_x = p.x;
this.dot_y = p.y;
this.dot_distance();
return;
}
x1 = this.device.x + this.device.width;
y1 = this.device.y - this.device.height;
x2 = this.device.x + this.device.width;
y2 = this.device.y + this.device.height;
p = util.intersection(x3, y3, x4, y4, x1, y1, x2, y2);
param1 = util.pCase(p.x, p.y, x1, y1, x2, y2);
param2 = util.pCase(p.x, p.y, x3, y3, x4, y4);
if (param1 >= 0 && param1 <= 1 && param2 >= 0 && param2 <= 1) {
this.dot_x = p.x;
this.dot_y = p.y;
this.dot_distance();
return;
}
x1 = this.device.x - this.device.width;
y1 = this.device.y - this.device.height;
x2 = this.device.x - this.device.width;
y2 = this.device.y + this.device.height;
p = util.intersection(x3, y3, x4, y4, x1, y1, x2, y2);
param1 = util.pCase(p.x, p.y, x1, y1, x2, y2);
param2 = util.pCase(p.x, p.y, x3, y3, x4, y4);
if (param1 >= 0 && param1 <= 1 && param2 >= 0 && param2 <= 1) {
this.dot_x = p.x;
this.dot_y = p.y;
this.dot_distance();
return;
}
};
function Link(id, from_device, to_device, from_interface, to_interface) {
this.id = id;
this.from_device = from_device;
this.to_device = to_device;
this.from_interface = from_interface;
this.to_interface = to_interface;
this.selected = false;
this.remote_selected = false;
this.status = null;
this.edit_label = false;
this.name = "";
}
exports.Link = Link;
Link.prototype.is_selected = function (x, y) {
// Is the distance to the mouse location less than 25 if on the label side
// or 5 on the other from the shortest line to the link?
if (this.to_device === null) {
return false;
}
var d = util.pDistance(x,
y,
this.from_device.x,
this.from_device.y,
this.to_device.x,
this.to_device.y);
if (util.cross_z_pos(x,
y,
this.from_device.x,
this.from_device.y,
this.to_device.x,
this.to_device.y)) {
return d < 10;
} else {
return d < 10;
}
};
Link.prototype.slope_rads = function () {
//Return the slope in degrees for this link.
var x1 = this.from_device.x;
var y1 = this.from_device.y;
var x2 = this.to_device.x;
var y2 = this.to_device.y;
return Math.atan2(y2 - y1, x2 - x1);
};
Link.prototype.slope = function () {
//Return the slope in degrees for this link.
var x1 = this.from_device.x;
var y1 = this.from_device.y;
var x2 = this.to_device.x;
var y2 = this.to_device.y;
return Math.atan2(y2 - y1, x2 - x1) * 180 / Math.PI + 180;
};
Link.prototype.pDistanceLine = function (x, y) {
var x1 = this.from_device.x;
var y1 = this.from_device.y;
var x2 = this.to_device.x;
var y2 = this.to_device.y;
return util.pDistanceLine(x, y, x1, y1, x2, y2);
};
Link.prototype.length = function () {
//Return the length of this link.
var x1 = this.from_device.x;
var y1 = this.from_device.y;
var x2 = this.to_device.x;
var y2 = this.to_device.y;
return Math.sqrt(Math.pow(x1-x2, 2) + Math.pow(y1-y2, 2));
};
Link.prototype.plength = function (x, y) {
//Return the length of this link.
var x1 = this.from_device.x;
var y1 = this.from_device.y;
var x2 = this.to_device.x;
var y2 = this.to_device.y;
return util.pDistance(x, y, x1, y1, x2, y2);
};
function Button(name, x, y, width, height, callback) {
this.name = name;
this.x = x;
this.y = y;
this.width = width;
this.height = height;
this.callback = callback;
this.is_pressed = false;
this.mouse_over = false;
this.fsm = new fsm.FSMController(this, button.Start, null);
}
exports.Button = Button;
Button.prototype.is_selected = function (x, y) {
return (x > this.x &&
x < this.x + this.width &&
y > this.y &&
y < this.y + this.height);
};
function Task(id, name) {
this.id = id;
this.name = name;
this.status = null;
this.working = null;
}
exports.Task = Task;
Task.prototype.describeArc = util.describeArc;

View File

@ -0,0 +1,348 @@
var inherits = require('inherits');
var fsm = require('./fsm.js');
var models = require('./models.js');
var messages = require('./messages.js');
var util = require('./util.js');
function _State () {
}
inherits(_State, fsm._State);
function _Ready () {
this.name = 'Ready';
}
inherits(_Ready, _State);
var Ready = new _Ready();
exports.Ready = Ready;
function _Start () {
this.name = 'Start';
}
inherits(_Start, _State);
var Start = new _Start();
exports.Start = Start;
function _Selected2 () {
this.name = 'Selected2';
}
inherits(_Selected2, _State);
var Selected2 = new _Selected2();
exports.Selected2 = Selected2;
function _Selected3 () {
this.name = 'Selected3';
}
inherits(_Selected3, _State);
var Selected3 = new _Selected3();
exports.Selected3 = Selected3;
function _Move () {
this.name = 'Move';
}
inherits(_Move, _State);
var Move = new _Move();
exports.Move = Move;
function _Selected1 () {
this.name = 'Selected1';
}
inherits(_Selected1, _State);
var Selected1 = new _Selected1();
exports.Selected1 = Selected1;
function _EditLabel () {
this.name = 'EditLabel';
}
inherits(_EditLabel, _State);
var EditLabel = new _EditLabel();
exports.EditLabel = EditLabel;
_Ready.prototype.onMouseDown = function (controller, msg_type, $event) {
var last_selected = controller.scope.select_items($event.shiftKey);
if (last_selected.last_selected_device !== null) {
controller.changeState(Selected1);
} else if (last_selected.last_selected_link !== null) {
controller.changeState(Selected1);
} else if (last_selected.last_selected_interface !== null) {
controller.changeState(Selected1);
} else {
controller.next_controller.handle_message(msg_type, $event);
}
};
_Ready.prototype.onMouseDown.transitions = ['Selected1'];
_Ready.prototype.onTouchStart = _Ready.prototype.onMouseDown;
_Ready.prototype.onKeyDown = function(controller, msg_type, $event) {
var scope = controller.scope;
var device = null;
if ($event.key === 'r') {
device = new models.Device(controller.scope.device_id_seq(),
"Router",
scope.scaledX,
scope.scaledY,
"router");
}
else if ($event.key === 's') {
device = new models.Device(controller.scope.device_id_seq(),
"Switch",
scope.scaledX,
scope.scaledY,
"switch");
}
else if ($event.key === 'a') {
device = new models.Device(controller.scope.device_id_seq(),
"Rack",
scope.scaledX,
scope.scaledY,
"rack");
}
else if ($event.key === 'h') {
device = new models.Device(controller.scope.device_id_seq(),
"Host",
scope.scaledX,
scope.scaledY,
"host");
}
if (device !== null) {
scope.devices.push(device);
scope.send_control_message(new messages.DeviceCreate(scope.client_id,
device.id,
device.x,
device.y,
device.name,
device.type));
}
controller.next_controller.handle_message(msg_type, $event);
};
_Start.prototype.start = function (controller) {
controller.changeState(Ready);
};
_Start.prototype.start.transitions = ['Ready'];
_Selected2.prototype.onMouseDown = function (controller, msg_type, $event) {
var last_selected = null;
if (controller.scope.selected_devices.length === 1) {
var current_selected_device = controller.scope.selected_devices[0];
var last_selected_device = controller.scope.select_items($event.shiftKey).last_selected_device;
if (current_selected_device === last_selected_device) {
controller.changeState(Selected3);
return;
}
}
if (controller.scope.selected_links.length === 1) {
var current_selected_link = controller.scope.selected_links[0];
last_selected = controller.scope.select_items($event.shiftKey);
if (current_selected_link === last_selected.last_selected_link) {
controller.changeState(Selected3);
return;
}
}
if (controller.scope.selected_interfaces.length === 1) {
var current_selected_interface = controller.scope.selected_interfaces[0];
last_selected = controller.scope.select_items($event.shiftKey);
if (current_selected_interface === last_selected.last_selected_interface) {
controller.changeState(Selected3);
return;
}
}
controller.changeState(Ready);
controller.handle_message(msg_type, $event);
};
_Selected2.prototype.onMouseDown.transitions = ['Ready', 'Selected3'];
_Selected2.prototype.onTouchStart = _Selected2.prototype.onMouseDown;
_Selected2.prototype.onKeyDown = function (controller, msg_type, $event) {
if ($event.keyCode === 8) {
//Delete
controller.changeState(Ready);
var i = 0;
var j = 0;
var index = -1;
var devices = controller.scope.selected_devices;
var all_links = controller.scope.links.slice();
controller.scope.selected_devices = [];
controller.scope.selected_links = [];
for (i = 0; i < devices.length; i++) {
index = controller.scope.devices.indexOf(devices[i]);
if (index !== -1) {
controller.scope.devices.splice(index, 1);
controller.scope.send_control_message(new messages.DeviceDestroy(controller.scope.client_id,
devices[i].id,
devices[i].x,
devices[i].y,
devices[i].name,
devices[i].type));
}
for (j = 0; j < all_links.length; j++) {
if (all_links[j].to_device === devices[i] ||
all_links[j].from_device === devices[i]) {
index = controller.scope.links.indexOf(all_links[j]);
if (index !== -1) {
controller.scope.links.splice(index, 1);
}
}
}
}
}
};
_Selected2.prototype.onKeyDown.transitions = ['Ready'];
_Selected1.prototype.onMouseMove = function (controller) {
controller.changeState(Move);
};
_Selected1.prototype.onMouseMove.transitions = ['Move'];
_Selected1.prototype.onTouchMove = _Selected1.prototype.onMouseMove;
_Selected1.prototype.onMouseUp = function (controller) {
controller.changeState(Selected2);
};
_Selected1.prototype.onMouseUp.transitions = ['Selected2'];
_Selected1.prototype.onTouchEnd = _Selected1.prototype.onMouseUp;
_Selected1.prototype.onMouseDown = util.noop;
_Move.prototype.onMouseMove = function (controller) {
var devices = controller.scope.selected_devices;
var diffX = controller.scope.scaledX - controller.scope.pressedScaledX;
var diffY = controller.scope.scaledY - controller.scope.pressedScaledY;
var i = 0;
var j = 0;
var previous_x, previous_y;
for (i = 0; i < devices.length; i++) {
previous_x = devices[i].x;
previous_y = devices[i].y;
devices[i].x = devices[i].x + diffX;
devices[i].y = devices[i].y + diffY;
for (j = 0; j < devices[i].interfaces.length; j++) {
devices[i].interfaces[j].dot();
if (devices[i].interfaces[j].link !== null) {
devices[i].interfaces[j].link.to_interface.dot();
devices[i].interfaces[j].link.from_interface.dot();
}
}
controller.scope.send_control_message(new messages.DeviceMove(controller.scope.client_id,
devices[i].id,
devices[i].x,
devices[i].y,
previous_x,
previous_y));
}
controller.scope.pressedScaledX = controller.scope.scaledX;
controller.scope.pressedScaledY = controller.scope.scaledY;
};
_Move.prototype.onTouchMove = _Move.prototype.onMouseMove;
_Move.prototype.onMouseUp = function (controller, msg_type, $event) {
controller.changeState(Selected2);
controller.handle_message(msg_type, $event);
};
_Move.prototype.onMouseUp.transitions = ['Selected2'];
_Move.prototype.onTouchEnd = _Move.prototype.onMouseUp;
_Selected3.prototype.onMouseUp = function (controller) {
controller.changeState(EditLabel);
};
_Selected3.prototype.onMouseUp.transitions = ['EditLabel'];
_Selected3.prototype.onTouchEnd = function (controller) {
controller.changeState(Selected2);
};
_Selected3.prototype.onTouchEnd.transitions = ['Selected2'];
_Selected3.prototype.onMouseMove = function (controller) {
controller.changeState(Move);
};
_Selected3.prototype.onMouseMove.transitions = ['Move'];
_Selected3.prototype.onTouchMove = _Selected3.prototype.onMouseMove;
_EditLabel.prototype.start = function (controller) {
controller.scope.selected_items[0].edit_label = true;
};
_EditLabel.prototype.end = function (controller) {
controller.scope.selected_items[0].edit_label = false;
};
_EditLabel.prototype.onMouseDown = function (controller, msg_type, $event) {
controller.changeState(Ready);
controller.handle_message(msg_type, $event);
};
_EditLabel.prototype.onMouseDown.transitions = ['Ready'];
_EditLabel.prototype.onKeyDown = function (controller, msg_type, $event) {
//Key codes found here:
//https://www.cambiaresearch.com/articles/15/javascript-char-codes-key-codes
var item = controller.scope.selected_items[0];
var previous_name = item.name;
if ($event.keyCode === 8 || $event.keyCode === 46) { //Delete
item.name = item.name.slice(0, -1);
} else if ($event.keyCode >= 48 && $event.keyCode <=90) { //Alphanumeric
item.name += $event.key;
} else if ($event.keyCode >= 186 && $event.keyCode <=222) { //Punctuation
item.name += $event.key;
} else if ($event.keyCode === 13) { //Enter
controller.changeState(Selected2);
}
if (item.constructor.name === "Device") {
controller.scope.send_control_message(new messages.DeviceLabelEdit(controller.scope.client_id,
item.id,
item.name,
previous_name));
}
if (item.constructor.name === "Interface") {
controller.scope.send_control_message(new messages.InterfaceLabelEdit(controller.scope.client_id,
item.id,
item.device.id,
item.name,
previous_name));
}
if (item.constructor.name === "Link") {
controller.scope.send_control_message(new messages.LinkLabelEdit(controller.scope.client_id,
item.id,
item.name,
previous_name));
}
};
_EditLabel.prototype.onKeyDown.transitions = ['Selected2'];

View File

@ -0,0 +1,315 @@
/* Put your css in here */
@selected-red: #c9232c;
@selected-mango: #ff5850;
@selected-blue: #5bbddf;
@light-background: #ffffff;
@light-widget-detail: #ffffff;
@dark-widget-detail: #707070;
@widget-body: #D7D7D7;
@link: #D7D7D7;
@debug-copynot: rgb(77,200,242);
@button-body: #f6f6f6;
@button-text: #707070;
@button-outline: #b4b6b4;
@button-body-hover: #dfdfdf;
@button-body-pressed: #d5d5d5;
@green: #5CB85C;
@red: #D9534F;
html {
overflow: hidden;
}
body {
background-color: yellow;
padding: 0;
margin: 0;
height: 100%;
width: 100%;
overflow: hidden;
}
svg {
background-color: @light-background;
cursor: none;
}
svg text {
fill: @button-text;
}
.debug text {
fill: @debug-copynot;
}
line.selected {
stroke: @selected-blue;
stroke-width: 6;
}
line.remote-selected {
stroke: @selected-mango;
stroke-width: 6;
}
line.selected-conflict {
stroke: @selected-red;
stroke-width: 6;
}
svg rect.debug {
fill-opacity: 0;
stroke: @debug-copynot;
stroke-width: 1;
}
svg line.link {
stroke: @link;
stroke-width: 2;
}
svg line.link-pass {
stroke: @green;
stroke-width: 2;
}
svg line.link-fail {
stroke: @red;
stroke-width: 2;
}
svg line.cursor {
stroke: @dark-widget-detail;
stroke-width: 2;
}
svg line.debug {
stroke: @debug-copynot;
stroke-width: 1;
}
.debug-cursor line {
stroke: @debug-copynot;
stroke-width: 4;
}
.hidden {
display: none;
}
.router circle {
fill: @widget-body;
stroke: @dark-widget-detail;
stroke-width: 2;
}
.router circle.selected {
stroke: @selected-blue;
stroke-width: 4;
}
.router circle.remote-selected {
stroke: @selected-mango;
stroke-width: 4;
}
.router circle.selected-conflict {
stroke: @selected-red;
stroke-width: 4;
}
.router line {
stroke: @light-widget-detail;
stroke-width: 20;
}
.router polygon {
fill: @light-widget-detail;
}
.switch rect {
fill: @widget-body;
stroke: @dark-widget-detail;
stroke-width: 2;
}
.switch rect.selected {
stroke: @selected-blue;
stroke-width: 10;
}
.switch rect.remote-selected {
stroke: @selected-mango;
stroke-width: 10;
}
.switch rect.selected-conflict {
stroke: @selected-red;
stroke-width: 10;
}
.switch line {
stroke: @light-widget-detail;
stroke-width: 20;
}
.switch polygon {
fill: @light-widget-detail;
}
.rack rect {
fill: @widget-body;
stroke: @dark-widget-detail;
stroke-width: 2;
}
.rack rect.background {
fill: @light-background;
stroke: @light-background;
stroke-width: 2;
}
.rack rect.selected {
fill: @selected-blue;
stroke: @selected-blue;
stroke-width: 10;
}
.rack rect.remote-selected {
fill: @selected-mango;
stroke: @selected-mango;
stroke-width: 10;
}
.rack rect.selected-conflict {
fill: @selected-red;
stroke: @selected-red;
stroke-width: 10;
}
.rack line {
stroke: @light-widget-detail;
stroke-width: 20;
}
.rack circle {
fill: @light-widget-detail;
}
.button rect {
fill: @button-body;
stroke: @button-outline;
stroke-width: 1;
}
.button text {
fill: @button-text;
}
.button-pressed rect {
fill: @button-body-pressed;
stroke: @button-outline;
stroke-width: 1;
}
.button-pressed text {
fill: @button-text;
}
.button-hover rect {
fill: @button-body-hover;
stroke: @button-outline;
stroke-width: 1;
}
.button-hover text {
fill: @button-text;
}
.host rect {
fill: @widget-body;
stroke: @dark-widget-detail;
stroke-width: 2;
}
.host rect.background {
fill: @light-background;
stroke: @light-background;
stroke-width: 2;
}
.host rect.selected {
fill: @selected-blue;
stroke: @selected-blue;
stroke-width: 10;
}
.host rect.remote-selected {
fill: @selected-mango;
stroke: @selected-mango;
stroke-width: 10;
}
.host rect.selected-conflict {
fill: @selected-red;
stroke: @selected-red;
stroke-width: 10;
}
.host line {
stroke: @light-widget-detail;
stroke-width: 20;
}
.host circle {
fill: @light-widget-detail;
}
circle.status {
fill: @widget-body;
stroke: @dark-widget-detail;
stroke-width: 2;
}
circle.pass {
fill: @green;
stroke: @dark-widget-detail;
stroke-width: 2;
}
circle.fail {
fill: @red;
stroke: @dark-widget-detail;
stroke-width: 2;
}
path.status {
fill: none;
stroke: @dark-widget-detail;
stroke-width: 2;
}
circle.debug {
fill: @debug-copynot;
}
circle.interface {
fill: @dark-widget-detail;
}
circle.selected {
fill: @selected-blue;
}
text.interface {
font-size: 8px;
}
.touch circle {
stroke: @debug-copynot;
fill: none;
}

View File

@ -0,0 +1,521 @@
var inherits = require('inherits');
var fsm = require('./fsm.js');
var messages = require('./messages.js');
var util = require('./util.js');
function _State () {
}
inherits(_State, fsm._State);
function _Past () {
this.name = 'Past';
}
inherits(_Past, _State);
var Past = new _Past();
exports.Past = Past;
function _Start () {
this.name = 'Start';
}
inherits(_Start, _State);
var Start = new _Start();
exports.Start = Start;
function _Present () {
this.name = 'Present';
}
inherits(_Present, _State);
var Present = new _Present();
exports.Present = Present;
_Past.prototype.start = function (controller) {
controller.scope.time_pointer = controller.scope.history.length - 1;
};
_Past.prototype.onMessage = function(controller, msg_type, message) {
//console.log(message.data);
var type_data = JSON.parse(message.data);
var type = type_data[0];
var data = type_data[1];
if (['DeviceCreate',
'DeviceDestroy',
'DeviceMove',
'DeviceLabelEdit',
'LinkLabelEdit',
'InterfaceLabelEdit',
'InterfaceCreate',
'LinkCreate',
'LinkDestroy'].indexOf(type) !== -1) {
controller.changeState(Present);
controller.scope.history.splice(controller.scope.time_pointer);
if (data.sender !== controller.scope.client_id) {
controller.handle_message(msg_type, message);
} else {
controller.scope.history.push(message.data);
}
} else {
controller.handle_message(type, data);
}
};
_Past.prototype.onMultipleMessage = function(controller, msg_type, message) {
var i = 0;
console.log(['MultipleMessage', message]);
if (message.sender !== controller.scope.client_id) {
for (i=0; i< message.messages.length; i++) {
controller.handle_message(message.messages[i].msg_type, message.messages[i]);
}
}
};
_Past.prototype.onDeviceSelected = function(controller, msg_type, message) {
if (message.sender !== controller.scope.client_id) {
controller.scope.onDeviceSelected(message);
}
};
_Past.prototype.onDeviceUnSelected = function(controller, msg_type, message) {
if (message.sender !== controller.scope.client_id) {
controller.scope.onDeviceUnSelected(message);
}
};
_Past.prototype.onUndo = function(controller, msg_type, message) {
if (message.sender !== controller.scope.client_id) {
controller.scope.time_pointer = Math.max(0, controller.scope.time_pointer - 1);
controller.scope.undo(message.original_message);
}
};
_Past.prototype.onRedo = function(controller, msg_type, message) {
if (message.sender !== controller.scope.client_id) {
controller.scope.time_pointer = Math.min(controller.scope.history.length, controller.scope.time_pointer + 1);
controller.scope.redo(message.original_message);
if (controller.scope.time_pointer === controller.scope.history.length) {
controller.changeState(Present);
}
}
};
_Past.prototype.onCoverageRequest = function(controller) {
controller.scope.send_coverage();
};
_Past.prototype.onStopRecording = function(controller) {
controller.scope.recording = false;
};
_Past.prototype.onStartReplay = function(controller) {
controller.scope.replay = true;
};
_Past.prototype.onStopReplay = function(controller) {
controller.scope.replay = false;
};
_Past.prototype.onViewPort = function(controller, msg_type, message) {
if (message.sender === controller.scope.client_id) {
return;
}
controller.scope.current_scale = message.scale;
controller.scope.panX = message.panX;
controller.scope.panY = message.panY;
controller.scope.updateScaledXY();
controller.scope.updatePanAndScale();
};
_Past.prototype.onTouchEvent = function(controller, msg_type, message) {
if (message.sender === controller.scope.client_id) {
return;
}
message.preventDefault = util.noop;
if (message.type === "touchstart") {
controller.scope.onTouchStart(message);
}
if (message.type === "touchend") {
controller.scope.onTouchEnd(message);
}
if (message.type === "touchmove") {
controller.scope.onTouchMove(message);
}
};
_Past.prototype.onMouseEvent = function(controller, msg_type, message) {
if (message.sender === controller.scope.client_id) {
return;
}
message.preventDefault = util.noop;
//console.log(message);
if (message.type === "mousemove") {
controller.scope.onMouseMove(message);
}
if (message.type === "mouseup") {
controller.scope.onMouseUp(message);
}
if (message.type === "mousedown") {
controller.scope.onMouseDown(message);
}
if (message.type === "mouseover") {
controller.scope.onMouseOver(message);
}
if (message.type === "mouseout") {
controller.scope.onMouseOver(message);
}
};
_Past.prototype.onMouseWheelEvent = function(controller, msg_type, message) {
console.log(message);
if (message.sender === controller.scope.client_id) {
return;
}
message.preventDefault = util.noop;
message.stopPropagation = util.noop;
controller.scope.onMouseWheel(message, message.delta, message.deltaX, message.deltaY);
};
_Past.prototype.onKeyEvent = function(controller, msg_type, message) {
if (message.sender === controller.scope.client_id) {
return;
}
message.preventDefault = util.noop;
//console.log(message);
if (message.type === "keydown") {
controller.scope.onKeyDown(message);
}
};
_Past.prototype.onMouseWheel = function (controller, msg_type, message) {
var $event = message[0];
var delta = message[1];
if ($event.originalEvent.metaKey) {
//console.log(delta);
if (delta < 0) {
this.undo(controller);
} else if (delta > 0) {
this.redo(controller);
}
} else {
controller.next_controller.handle_message(msg_type, message);
}
};
_Past.prototype.onMouseWheel.transitions = ['Past'];
_Past.prototype.onKeyDown = function(controller, msg_type, $event) {
//console.log($event);
if ($event.key === 'z' && $event.metaKey && ! $event.shiftKey) {
this.undo(controller);
return;
} else if ($event.key === 'z' && $event.ctrlKey && ! $event.shiftKey) {
this.undo(controller);
return;
} else if ($event.key === 'Z' && $event.metaKey && $event.shiftKey) {
this.redo(controller);
return;
} else if ($event.key === 'Z' && $event.ctrlKey && $event.shiftKey) {
this.redo(controller);
return;
} else {
controller.next_controller.handle_message(msg_type, $event);
}
};
_Past.prototype.onKeyDown.transitions = ['Past'];
_Past.prototype.undo = function(controller) {
//controller.changeState(Past);
controller.scope.time_pointer = Math.max(0, controller.scope.time_pointer - 1);
if (controller.scope.time_pointer >= 0) {
var change = controller.scope.history[controller.scope.time_pointer];
var type_data = JSON.parse(change);
controller.scope.send_control_message(new messages.Undo(controller.scope.client_id,
type_data));
controller.scope.undo(type_data);
}
};
_Past.prototype.redo = function(controller) {
if (controller.scope.time_pointer < controller.scope.history.length) {
var change = controller.scope.history[controller.scope.time_pointer];
var type_data = JSON.parse(change);
controller.scope.send_control_message(new messages.Redo(controller.scope.client_id,
type_data));
controller.scope.redo(type_data);
controller.scope.time_pointer = Math.min(controller.scope.history.length, controller.scope.time_pointer + 1);
if (controller.scope.time_pointer === controller.scope.history.length) {
controller.changeState(Present);
}
} else {
controller.changeState(Present);
}
};
_Start.prototype.start = function (controller) {
controller.changeState(Present);
};
_Start.prototype.start.transitions = ['Present'];
_Present.prototype.onMessage = function(controller, msg_type, message) {
//console.log(message.data);
var type_data = JSON.parse(message.data);
var type = type_data[0];
var data = type_data[1];
if (['DeviceCreate',
'DeviceDestroy',
'DeviceMove',
'DeviceLabelEdit',
'LinkLabelEdit',
'InterfaceLabelEdit',
'InterfaceCreate',
'LinkCreate',
'LinkDestroy',
'Snapshot'].indexOf(type) !== -1) {
controller.scope.history.push(message.data);
}
controller.handle_message(type, data);
};
_Present.prototype.onMessage.transitions = ['Past'];
_Present.prototype.onMultipleMessage = function(controller, msg_type, message) {
var i = 0;
console.log(['MultipleMessage', message]);
if (message.sender !== controller.scope.client_id) {
for (i = 0; i< message.messages.length; i++) {
controller.handle_message(message.messages[i].msg_type, message.messages[i]);
}
}
};
_Present.prototype.onDeviceStatus = function(controller, msg_type, message) {
controller.scope.onDeviceStatus(message);
};
_Present.prototype.onTaskStatus = function(controller, msg_type, message) {
controller.scope.onTaskStatus(message);
};
_Present.prototype.onFacts = function(controller, msg_type, message) {
controller.scope.onFacts(message);
};
_Present.prototype.onDeviceCreate = function(controller, msg_type, message) {
if (message.sender !== controller.scope.client_id) {
controller.scope.onDeviceCreate(message);
}
};
_Present.prototype.onInterfaceCreate = function(controller, msg_type, message) {
if (message.sender !== controller.scope.client_id) {
controller.scope.onInterfaceCreate(message);
}
};
_Present.prototype.onLinkCreate = function(controller, msg_type, message) {
if (message.sender !== controller.scope.client_id) {
controller.scope.onLinkCreate(message);
}
};
_Present.prototype.onDeviceMove = function(controller, msg_type, message) {
if (message.sender !== controller.scope.client_id) {
controller.scope.onDeviceMove(message);
}
};
_Present.prototype.onDeviceDestroy = function(controller, msg_type, message) {
if (message.sender !== controller.scope.client_id) {
controller.scope.onDeviceDestroy(message);
}
};
_Present.prototype.onLinkDestroy = function(controller, msg_type, message) {
if (message.sender !== controller.scope.client_id) {
controller.scope.onLinkDestroy(message);
}
};
_Present.prototype.onDeviceLabelEdit = function(controller, msg_type, message) {
if (message.sender !== controller.scope.client_id) {
controller.scope.onDeviceLabelEdit(message);
}
};
_Present.prototype.onLinkLabelEdit = function(controller, msg_type, message) {
if (message.sender !== controller.scope.client_id) {
controller.scope.onLinkLabelEdit(message);
}
};
_Present.prototype.onInterfaceLabelEdit = function(controller, msg_type, message) {
if (message.sender !== controller.scope.client_id) {
controller.scope.onInterfaceLabelEdit(message);
}
};
_Present.prototype.onDeviceSelected = function(controller, msg_type, message) {
if (message.sender !== controller.scope.client_id) {
controller.scope.onDeviceSelected(message);
}
};
_Present.prototype.onDeviceUnSelected = function(controller, msg_type, message) {
if (message.sender !== controller.scope.client_id) {
controller.scope.onDeviceUnSelected(message);
}
};
_Present.prototype.onUndo = function(controller, msg_type, message) {
if (message.sender !== controller.scope.client_id) {
controller.scope.time_pointer = Math.max(0, controller.scope.time_pointer - 1);
controller.scope.undo(message.original_message);
controller.changeState(Past);
}
};
_Present.prototype.onSnapshot = function(controller, msg_type, message) {
if (message.sender !== controller.scope.client_id) {
controller.scope.onSnapshot(message);
}
};
_Present.prototype.onid = function(controller, msg_type, message) {
controller.scope.onClientId(message);
};
_Present.prototype.onTopology = function(controller, msg_type, message) {
controller.scope.onTopology(message);
};
_Present.prototype.onHistory = function(controller, msg_type, message) {
controller.scope.onHistory(message);
};
_Present.prototype.onCoverageRequest = function(controller) {
controller.scope.send_coverage();
};
_Present.prototype.onStopRecording = function(controller) {
controller.scope.recording = false;
};
_Present.prototype.onStartReplay = function(controller) {
controller.scope.replay = true;
};
_Present.prototype.onStopReplay = function(controller) {
controller.scope.replay = false;
};
_Present.prototype.onViewPort = function(controller, msg_type, message) {
if (message.sender === controller.scope.client_id) {
return;
}
controller.scope.current_scale = message.scale;
controller.scope.panX = message.panX;
controller.scope.panY = message.panY;
controller.scope.updateScaledXY();
controller.scope.updatePanAndScale();
};
_Present.prototype.onTouchEvent = function(controller, msg_type, message) {
if (!controller.scope.replay) {
return;
}
if (message.sender === controller.scope.client_id) {
return;
}
message.preventDefault = util.noop;
if (message.type === "touchstart") {
controller.scope.onTouchStart(message);
}
if (message.type === "touchend") {
controller.scope.onTouchEnd(message);
}
if (message.type === "touchmove") {
controller.scope.onTouchMove(message);
}
};
_Present.prototype.onMouseEvent = function(controller, msg_type, message) {
if (!controller.scope.replay) {
return;
}
if (message.sender === controller.scope.client_id) {
return;
}
message.preventDefault = util.noop;
//console.log(message);
if (message.type === "mousemove") {
controller.scope.onMouseMove(message);
}
if (message.type === "mouseup") {
controller.scope.onMouseUp(message);
}
if (message.type === "mousedown") {
controller.scope.onMouseDown(message);
}
if (message.type === "mouseover") {
controller.scope.onMouseOver(message);
}
};
_Present.prototype.onMouseWheelEvent = function(controller, msg_type, message) {
if (!controller.scope.replay) {
return;
}
console.log(message);
if (message.sender === controller.scope.client_id) {
return;
}
message.preventDefault = util.noop;
message.stopPropagation = util.noop;
controller.scope.onMouseWheel(message, message.delta, message.deltaX, message.deltaY);
};
_Present.prototype.onKeyEvent = function(controller, msg_type, message) {
if (!controller.scope.replay) {
return;
}
if (message.sender === controller.scope.client_id) {
return;
}
message.preventDefault = util.noop;
//console.log(message);
if (message.type === "keydown") {
controller.scope.onKeyDown(message);
}
};
_Present.prototype.onMessage.transitions = ['Past'];
_Present.prototype.onMouseWheel = function (controller, msg_type, message) {
var $event = message[0];
var delta = message[1];
if ($event.originalEvent.metaKey) {
//console.log(delta);
if (delta < 0) {
this.undo(controller);
}
} else {
controller.next_controller.handle_message(msg_type, message);
}
};
_Present.prototype.onMouseWheel.transitions = ['Past'];
_Present.prototype.onKeyDown = function(controller, msg_type, $event) {
//console.log($event);
if ($event.key === 'z' && $event.metaKey && ! $event.shiftKey) {
this.undo(controller);
return;
} else if ($event.key === 'z' && $event.ctrlKey && ! $event.shiftKey) {
this.undo(controller);
return;
} else {
controller.next_controller.handle_message(msg_type, $event);
}
};
_Present.prototype.onKeyDown.transitions = ['Past'];
_Present.prototype.undo = function(controller) {
controller.scope.time_pointer = controller.scope.history.length - 1;
if (controller.scope.time_pointer >= 0) {
var change = controller.scope.history[controller.scope.time_pointer];
var type_data = JSON.parse(change);
controller.scope.send_control_message(new messages.Undo(controller.scope.client_id,
type_data));
controller.scope.undo(type_data);
controller.changeState(Past);
}
};

View File

@ -0,0 +1,205 @@
var math = require('mathjs');
function noop () {
}
exports.noop = noop;
function natural_numbers (start) {
var counter = start;
return function () {return counter += 1;};
}
exports.natural_numbers = natural_numbers;
// polarToCartesian
// @wdebeaum, @opsb
// from http://stackoverflow.com/questions/5736398/how-to-calculate-the-svg-path-for-an-arc-of-a-circle
function polarToCartesian(centerX, centerY, radius, angleInDegrees) {
var angleInRadians = (angleInDegrees-90) * Math.PI / 180.0;
return {
x: centerX + (radius * Math.cos(angleInRadians)),
y: centerY + (radius * Math.sin(angleInRadians))
};
}
// describeArc
// @wdebeaum, @opsb
// from http://stackoverflow.com/questions/5736398/how-to-calculate-the-svg-path-for-an-arc-of-a-circle
function describeArc(x, y, radius, startAngle, endAngle){
var start = polarToCartesian(x, y, radius, endAngle);
var end = polarToCartesian(x, y, radius, startAngle);
var largeArcFlag = endAngle - startAngle <= 180 ? "0" : "1";
var d = [
"M", start.x, start.y,
"A", radius, radius, 0, largeArcFlag, 0, end.x, end.y
].join(" ");
return d;
}
exports.describeArc = describeArc;
function pDistanceLine(x, y, x1, y1, x2, y2) {
//Code from http://stackoverflow.com/questions/849211/shortest-distance-between-a-point-and-a-line-segment
//Joshua
// Find the dot product of two vectors <A, B>, <C, D>
// Divide by the length squared of <C, D>
// Use scalar project to find param
//
var A = x - x1;
var B = y - y1;
var C = x2 - x1;
var D = y2 - y1;
var dot = A * C + B * D;
var len_sq = C * C + D * D;
var param = -1;
if (len_sq !== 0) {
//in case of 0 length line
param = dot / len_sq;
}
var xx, yy;
//Find a point xx, yy where the projection and the <C, D> vector intersect.
//If less than 0 use x1, y1 as the closest point.
//If less than 1 use x2, y2 as the closest point.
//If between 0 and 1 use the projection intersection xx, yy
if (param < 0) {
xx = x1;
yy = y1;
}
else if (param > 1) {
xx = x2;
yy = y2;
}
else {
xx = x1 + param * C;
yy = y1 + param * D;
}
return {x1:x, y1:y, x2: xx, y2: yy};
}
exports.pDistanceLine = pDistanceLine;
function pDistance(x, y, x1, y1, x2, y2) {
//Code from http://stackoverflow.com/questions/849211/shortest-distance-between-a-point-and-a-line-segment
//Joshua
// Find the dot product of two vectors <A, B>, <C, D>
// Divide by the length squared of <C, D>
// Use scalar project to find param
//
var A = x - x1;
var B = y - y1;
var C = x2 - x1;
var D = y2 - y1;
var dot = A * C + B * D;
var len_sq = C * C + D * D;
var param = -1;
if (len_sq !== 0) {
//in case of 0 length line
param = dot / len_sq;
}
var xx, yy;
//Find a point xx, yy where the projection and the <C, D> vector intersect.
//If less than 0 use x1, y1 as the closest point.
//If less than 1 use x2, y2 as the closest point.
//If between 0 and 1 use the projection intersection xx, yy
if (param < 0) {
xx = x1;
yy = y1;
}
else if (param > 1) {
xx = x2;
yy = y2;
}
else {
xx = x1 + param * C;
yy = y1 + param * D;
}
var dx = x - xx;
var dy = y - yy;
return Math.sqrt(dx * dx + dy * dy);
}
exports.pDistance = pDistance;
function cross_z_pos(x, y, x1, y1, x2, y2) {
var A = x - x1;
var B = y - y1;
var C = x2 - x1;
var D = y2 - y1;
return math.cross([A, B, 0], [C, D, 0])[2] > 0;
}
exports.cross_z_pos = cross_z_pos;
function intersection (x1, y1, x2, y2, x3, y3, x4, y4) {
//Find the point where lines through x1, y1, x2, y2 and x3, y3, x4, y4 intersect.
//
var Aslope;
var Aintercept;
var Bslope;
var Bintercept;
if ((x2 - x1) !== 0 && (x4 - x3) !== 0) {
Aslope = (y2 - y1)/(x2 - x1);
Aintercept = y1 - Aslope * x1;
Bslope = (y4 - y3)/(x4 - x3);
Bintercept = y3 - Bslope * x3;
var xi = (Bintercept - Aintercept) / (Aslope - Bslope);
var yi = Bslope * xi + Bintercept;
return {x: xi, y: yi};
}
if ((x2 - x1) === 0 && (x4 - x3) === 0) {
return {x: null, y: null};
}
if ((x2 - x1) === 0) {
Bslope = (y4 - y3)/(x4 - x3);
Bintercept = y3 - Bslope * x3;
return {x: x1, y: Bslope * x1 + Bintercept};
}
if ((x4 - x3) === 0) {
Aslope = (y2 - y1)/(x2 - x1);
Aintercept = y1 - Aslope * x1;
return {x: x3, y: Aslope * x3 + Aintercept};
}
}
exports.intersection = intersection;
function pCase(x, y, x1, y1, x2, y2) {
//Code from http://stackoverflow.com/questions/849211/shortest-distance-between-a-point-and-a-line-segment
//Joshua
// Find the dot product of two vectors <A, B>, <C, D>
// Divide by the length squared of <C, D>
// Use scalar project to find param
//
var A = x - x1;
var B = y - y1;
var C = x2 - x1;
var D = y2 - y1;
var dot = A * C + B * D;
var len_sq = C * C + D * D;
var param = -1;
if (len_sq !== 0) {
//in case of 0 length line
param = dot / len_sq;
}
return param;
}
exports.pCase = pCase;

View File

@ -0,0 +1,190 @@
var inherits = require('inherits');
var fsm = require('./fsm.js');
function _State () {
}
inherits(_State, fsm._State);
function _Ready () {
this.name = 'Ready';
}
inherits(_Ready, _State);
var Ready = new _Ready();
exports.Ready = Ready;
function _Start () {
this.name = 'Start';
}
inherits(_Start, _State);
var Start = new _Start();
exports.Start = Start;
function _Scale () {
this.name = 'Scale';
}
inherits(_Scale, _State);
var Scale = new _Scale();
exports.Scale = Scale;
function _Pressed () {
this.name = 'Pressed';
}
inherits(_Pressed, _State);
var Pressed = new _Pressed();
exports.Pressed = Pressed;
function _Pan () {
this.name = 'Pan';
}
inherits(_Pan, _State);
var Pan = new _Pan();
exports.Pan = Pan;
_Ready.prototype.onMouseDown = function (controller) {
controller.scope.pressedX = controller.scope.mouseX;
controller.scope.pressedY = controller.scope.mouseY;
controller.scope.lastPanX = controller.scope.panX;
controller.scope.lastPanY = controller.scope.panY;
controller.changeState(Pressed);
};
_Ready.prototype.onTouchStart = function (controller, msg_type, event) {
if (event.touches.length === 2) {
controller.scope.lastPanX = controller.scope.panX;
controller.scope.lastPanY = controller.scope.panY;
controller.scope.lastScale = controller.scope.current_scale;
var x1 = event.touches[0].screenX;
var y1 = event.touches[0].screenY;
var x2 = event.touches[1].screenX;
var y2 = event.touches[1].screenY;
var d = Math.sqrt(Math.pow(x2 - x1, 2) + Math.pow(y2 - y1, 2));
var xb = (x2 + x1) / 2;
var yb = (y2 + y1) / 2;
controller.scope.touch_data = {x1: x1,
y1: y1,
x2: x2,
y2: y2,
d: d,
xb: xb,
yb: yb};
controller.changeState(Pressed);
}
};
_Ready.prototype.onMouseWheel = function (controller, msg_type, $event) {
controller.changeState(Scale);
controller.handle_message(msg_type, $event);
};
_Ready.prototype.onKeyDown = function(controller, msg_type, $event) {
var scope = controller.scope;
if ($event.key === 'd') {
scope.debug.hidden = !scope.debug.hidden;
return;
}
if ($event.key === 'p') {
scope.cursor.hidden = !scope.cursor.hidden;
return;
}
if ($event.key === 'b') {
scope.hide_buttons = !scope.hide_buttons;
return;
}
if ($event.key === 'i') {
scope.hide_interfaces = !scope.hide_interfaces;
return;
}
};
_Start.prototype.start = function (controller) {
controller.changeState(Ready);
};
_Scale.prototype.onMouseWheel = function (controller, msg_type, message) {
var delta = message[1];
var new_scale = Math.max(0.1, Math.min(10, (controller.scope.current_scale + delta / 100)));
var new_panX = controller.scope.mouseX - new_scale * ((controller.scope.mouseX - controller.scope.panX) / controller.scope.current_scale);
var new_panY = controller.scope.mouseY - new_scale * ((controller.scope.mouseY - controller.scope.panY) / controller.scope.current_scale);
controller.scope.updateScaledXY();
controller.scope.current_scale = new_scale;
controller.scope.panX = new_panX;
controller.scope.panY = new_panY;
controller.scope.updatePanAndScale();
controller.changeState(Ready);
};
_Pressed.prototype.onMouseUp = function (controller) {
controller.changeState(Ready);
};
_Pressed.prototype.onTouchEnd = _Pressed.prototype.onMouseUp;
_Pressed.prototype.onMouseMove = function (controller, msg_type, $event) {
controller.changeState(Pan);
controller.handle_message(msg_type, $event);
};
_Pressed.prototype.onTouchMove = _Pressed.prototype.onMouseMove;
_Pan.prototype.onMouseMove = function (controller) {
controller.scope.panX = (controller.scope.mouseX - controller.scope.pressedX) + controller.scope.lastPanX;
controller.scope.panY = (controller.scope.mouseY - controller.scope.pressedY) + controller.scope.lastPanY;
controller.scope.updateScaledXY();
controller.scope.updatePanAndScale();
};
_Pan.prototype.onTouchMove = function (controller, msg_type, event) {
if (event.touches.length === 2) {
var x1 = event.touches[0].screenX;
var y1 = event.touches[0].screenY;
var x2 = event.touches[1].screenX;
var y2 = event.touches[1].screenY;
var d = Math.sqrt(Math.pow(x2 - x1, 2) + Math.pow(y2 - y1, 2));
var xb = (x2 + x1) / 2;
var yb = (y2 + y1) / 2;
var delta = d - controller.scope.touch_data.d;
controller.scope.panX = (xb - controller.scope.touch_data.xb) + controller.scope.lastPanX;
controller.scope.panY = (yb - controller.scope.touch_data.yb) + controller.scope.lastPanY;
controller.scope.updateScaledXY();
var new_scale = Math.max(0.1, Math.min(10, (controller.scope.lastScale + delta / 100)));
var new_panX = xb - new_scale * ((xb - controller.scope.panX) / controller.scope.lastScale);
var new_panY = yb - new_scale * ((yb - controller.scope.panY) / controller.scope.lastScale);
controller.scope.current_scale = new_scale;
controller.scope.panX = new_panX;
controller.scope.panY = new_panY;
controller.scope.updatePanAndScale();
}
};
_Pan.prototype.onMouseUp = function (controller) {
controller.changeState(Ready);
};
_Pan.prototype.onTouchEnd = _Pan.prototype.onMouseUp;

View File

@ -0,0 +1,26 @@
var inherits = require('inherits');
var fsm = require('./fsm.js');
function _State () {
}
inherits(_State, fsm._State);
{%for state, functions in states%}
function _{{state}} () {
this.name = '{{state}}';
}
inherits(_{{state}}, _State);
var {{state}} = new _{{state}}();
exports.{{state}} = {{state}};
{%endfor%}
{%for state, functions in states%}
{%for fn, transitions in functions%}
_{{state}}.prototype.{{fn}} = function (controller) {
{%for tn in transitions %}
controller.changeState({{tn.to_state}});
{%endfor%}
};
_{{state}}.prototype.{{fn}}.transitions = [{%for t in transitions%}'{{t.to_state}}'{% if not loop.last%}, {%endif%}{%endfor%}];
{%endfor%}
{%endfor%}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,327 @@
/*
* Hamster.js v1.1.2
* (c) 2013 Monospaced http://monospaced.com
* License: MIT
*/
(function(window, document){
'use strict';
/**
* Hamster
* use this to create instances
* @returns {Hamster.Instance}
* @constructor
*/
var Hamster = function(element) {
return new Hamster.Instance(element);
};
// default event name
Hamster.SUPPORT = 'wheel';
// default DOM methods
Hamster.ADD_EVENT = 'addEventListener';
Hamster.REMOVE_EVENT = 'removeEventListener';
Hamster.PREFIX = '';
// until browser inconsistencies have been fixed...
Hamster.READY = false;
Hamster.Instance = function(element){
if (!Hamster.READY) {
// fix browser inconsistencies
Hamster.normalise.browser();
// Hamster is ready...!
Hamster.READY = true;
}
this.element = element;
// store attached event handlers
this.handlers = [];
// return instance
return this;
};
/**
* create new hamster instance
* all methods should return the instance itself, so it is chainable.
* @param {HTMLElement} element
* @returns {Hamster.Instance}
* @constructor
*/
Hamster.Instance.prototype = {
/**
* bind events to the instance
* @param {Function} handler
* @param {Boolean} useCapture
* @returns {Hamster.Instance}
*/
wheel: function onEvent(handler, useCapture){
Hamster.event.add(this, Hamster.SUPPORT, handler, useCapture);
// handle MozMousePixelScroll in older Firefox
if (Hamster.SUPPORT === 'DOMMouseScroll') {
Hamster.event.add(this, 'MozMousePixelScroll', handler, useCapture);
}
return this;
},
/**
* unbind events to the instance
* @param {Function} handler
* @param {Boolean} useCapture
* @returns {Hamster.Instance}
*/
unwheel: function offEvent(handler, useCapture){
// if no handler argument,
// unbind the last bound handler (if exists)
if (handler === undefined && (handler = this.handlers.slice(-1)[0])) {
handler = handler.original;
}
Hamster.event.remove(this, Hamster.SUPPORT, handler, useCapture);
// handle MozMousePixelScroll in older Firefox
if (Hamster.SUPPORT === 'DOMMouseScroll') {
Hamster.event.remove(this, 'MozMousePixelScroll', handler, useCapture);
}
return this;
}
};
Hamster.event = {
/**
* cross-browser 'addWheelListener'
* @param {Instance} hamster
* @param {String} eventName
* @param {Function} handler
* @param {Boolean} useCapture
*/
add: function add(hamster, eventName, handler, useCapture){
// store the original handler
var originalHandler = handler;
// redefine the handler
handler = function(originalEvent){
if (!originalEvent) {
originalEvent = window.event;
}
// create a normalised event object,
// and normalise "deltas" of the mouse wheel
var event = Hamster.normalise.event(originalEvent),
delta = Hamster.normalise.delta(originalEvent);
// fire the original handler with normalised arguments
return originalHandler(event, delta[0], delta[1], delta[2]);
};
// cross-browser addEventListener
hamster.element[Hamster.ADD_EVENT](Hamster.PREFIX + eventName, handler, useCapture || false);
// store original and normalised handlers on the instance
hamster.handlers.push({
original: originalHandler,
normalised: handler
});
},
/**
* removeWheelListener
* @param {Instance} hamster
* @param {String} eventName
* @param {Function} handler
* @param {Boolean} useCapture
*/
remove: function remove(hamster, eventName, handler, useCapture){
// find the normalised handler on the instance
var originalHandler = handler,
lookup = {},
handlers;
for (var i = 0, len = hamster.handlers.length; i < len; ++i) {
lookup[hamster.handlers[i].original] = hamster.handlers[i];
}
handlers = lookup[originalHandler];
handler = handlers.normalised;
// cross-browser removeEventListener
hamster.element[Hamster.REMOVE_EVENT](Hamster.PREFIX + eventName, handler, useCapture || false);
// remove original and normalised handlers from the instance
for (var h in hamster.handlers) {
if (hamster.handlers[h] === handlers) {
hamster.handlers.splice(h, 1);
break;
}
}
}
};
/**
* these hold the lowest deltas,
* used to normalise the delta values
* @type {Number}
*/
var lowestDelta,
lowestDeltaXY;
Hamster.normalise = {
/**
* fix browser inconsistencies
*/
browser: function normaliseBrowser(){
// detect deprecated wheel events
if (!('onwheel' in document || document.documentMode >= 9)) {
Hamster.SUPPORT = document.onmousewheel !== undefined ?
'mousewheel' : // webkit and IE < 9 support at least "mousewheel"
'DOMMouseScroll'; // assume remaining browsers are older Firefox
}
// detect deprecated event model
if (!window.addEventListener) {
// assume IE < 9
Hamster.ADD_EVENT = 'attachEvent';
Hamster.REMOVE_EVENT = 'detachEvent';
Hamster.PREFIX = 'on';
}
},
/**
* create a normalised event object
* @param {Function} originalEvent
* @returns {Object} event
*/
event: function normaliseEvent(originalEvent){
var event = {
// keep a reference to the original event object
originalEvent: originalEvent,
target: originalEvent.target || originalEvent.srcElement,
type: 'wheel',
deltaMode: originalEvent.type === 'MozMousePixelScroll' ? 0 : 1,
deltaX: 0,
delatZ: 0,
preventDefault: function(){
if (originalEvent.preventDefault) {
originalEvent.preventDefault();
} else {
originalEvent.returnValue = false;
}
},
stopPropagation: function(){
if (originalEvent.stopPropagation) {
originalEvent.stopPropagation();
} else {
originalEvent.cancelBubble = false;
}
}
};
// calculate deltaY (and deltaX) according to the event
// 'mousewheel'
if (originalEvent.wheelDelta) {
event.deltaY = - 1/40 * originalEvent.wheelDelta;
}
// webkit
if (originalEvent.wheelDeltaX) {
event.deltaX = - 1/40 * originalEvent.wheelDeltaX;
}
// 'DomMouseScroll'
if (originalEvent.detail) {
event.deltaY = originalEvent.detail;
}
return event;
},
/**
* normalise 'deltas' of the mouse wheel
* @param {Function} originalEvent
* @returns {Array} deltas
*/
delta: function normaliseDelta(originalEvent){
var delta = 0,
deltaX = 0,
deltaY = 0,
absDelta = 0,
absDeltaXY = 0,
fn;
// normalise deltas according to the event
// 'wheel' event
if (originalEvent.deltaY) {
deltaY = originalEvent.deltaY * -1;
delta = deltaY;
}
if (originalEvent.deltaX) {
deltaX = originalEvent.deltaX;
delta = deltaX * -1;
}
// 'mousewheel' event
if (originalEvent.wheelDelta) {
delta = originalEvent.wheelDelta;
}
// webkit
if (originalEvent.wheelDeltaY) {
deltaY = originalEvent.wheelDeltaY;
}
if (originalEvent.wheelDeltaX) {
deltaX = originalEvent.wheelDeltaX * -1;
}
// 'DomMouseScroll' event
if (originalEvent.detail) {
delta = originalEvent.detail * -1;
}
// Don't return NaN
if (delta === 0) {
return [0, 0, 0];
}
// look for lowest delta to normalize the delta values
absDelta = Math.abs(delta);
if (!lowestDelta || absDelta < lowestDelta) {
lowestDelta = absDelta;
}
absDeltaXY = Math.max(Math.abs(deltaY), Math.abs(deltaX));
if (!lowestDeltaXY || absDeltaXY < lowestDeltaXY) {
lowestDeltaXY = absDeltaXY;
}
// convert deltas to whole numbers
fn = delta > 0 ? 'floor' : 'ceil';
delta = Math[fn](delta / lowestDelta);
deltaX = Math[fn](deltaX / lowestDeltaXY);
deltaY = Math[fn](deltaY / lowestDeltaXY);
return [delta, deltaX, deltaY];
}
};
if (typeof window.define === 'function' && window.define.amd) {
// AMD
window.define('hamster', [], function(){
return Hamster;
});
} else if (typeof exports === 'object') {
// CommonJS
module.exports = Hamster;
} else {
// Browser global
window.Hamster = Hamster;
}
})(window, window.document);

View File

@ -0,0 +1,52 @@
/*
* angular-mousewheel v1.0.5
* (c) 2013 Monospaced http://monospaced.com
* License: MIT
*/
angular.module('monospaced.mousewheel', [])
.directive('msdWheel', ['$parse', function($parse){
return {
restrict: 'A, C',
link: function(scope, element, attr) {
var expr = $parse(attr['msdWheel']),
fn = function(event, delta, deltaX, deltaY){
scope.$apply(function(){
expr(scope, {
$event: event,
$delta: delta,
$deltaX: deltaX,
$deltaY: deltaY
});
});
},
hamster;
if (typeof Hamster === 'undefined') {
// fallback to standard wheel event
element.bind('wheel', function(event){
scope.$apply(function() {
expr(scope, {
$event: event
});
});
});
return;
}
// don't create multiple Hamster instances per element
if (!(hamster = element.data('hamster'))) {
hamster = Hamster(element[0]);
element.data('hamster', hamster);
}
// bind Hamster wheel event
hamster.wheel(fn);
// unbind Hamster wheel event
scope.$on('$destroy', function(){
hamster.unwheel(fn);
});
}
};
}]);

View File

@ -0,0 +1,87 @@
/*
* ngTouch.js v1.0.2
* (c) 2015 Mark Topper
* License: MIT
*/
"use strict";
angular.module("ngTouch", [])
.directive("ngTouchstart", function () {
return {
controller: ["$scope", "$element", function ($scope, $element) {
$element.bind("touchstart", onTouchStart);
function onTouchStart(event) {
var method = $element.attr("ng-touchstart");
$scope.$event = event;
$scope.$apply(method);
}
}]
}
})
.directive("ngTouchmove", function () {
return {
controller: ["$scope", "$element", function ($scope, $element) {
$element.bind("touchstart", onTouchStart);
function onTouchStart(event) {
event.preventDefault();
$element.bind("touchmove", onTouchMove);
$element.bind("touchend", onTouchEnd);
}
function onTouchMove(event) {
var method = $element.attr("ng-touchmove");
$scope.$event = event;
$scope.$apply(method);
}
function onTouchEnd(event) {
event.preventDefault();
$element.unbind("touchmove", onTouchMove);
$element.unbind("touchend", onTouchEnd);
}
}]
}
})
.directive("ngTouchend", function () {
return {
controller: ["$scope", "$element", function ($scope, $element) {
$element.bind("touchend", onTouchEnd);
function onTouchEnd(event) {
var method = $element.attr("ng-touchend");
$scope.$event = event;
$scope.$apply(method);
}
}]
}
})
.directive("ngTap", function () {
return {
controller: ["$scope", "$element", function ($scope, $element) {
var moved = false;
$element.bind("touchstart", onTouchStart);
function onTouchStart(event) {
$element.bind("touchmove", onTouchMove);
$element.bind("touchend", onTouchEnd);
}
function onTouchMove(event) {
moved = true;
}
function onTouchEnd(event) {
$element.unbind("touchmove", onTouchMove);
$element.unbind("touchend", onTouchEnd);
if (!moved) {
var method = $element.attr("ng-tap");
$scope.$apply(method);
}
}
}]
}
});

View File

@ -0,0 +1,365 @@
// MIT License:
//
// Copyright (c) 2010-2012, Joe Walnes
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
// THE SOFTWARE.
/**
* This behaves like a WebSocket in every way, except if it fails to connect,
* or it gets disconnected, it will repeatedly poll until it successfully connects
* again.
*
* It is API compatible, so when you have:
* ws = new WebSocket('ws://....');
* you can replace with:
* ws = new ReconnectingWebSocket('ws://....');
*
* The event stream will typically look like:
* onconnecting
* onopen
* onmessage
* onmessage
* onclose // lost connection
* onconnecting
* onopen // sometime later...
* onmessage
* onmessage
* etc...
*
* It is API compatible with the standard WebSocket API, apart from the following members:
*
* - `bufferedAmount`
* - `extensions`
* - `binaryType`
*
* Latest version: https://github.com/joewalnes/reconnecting-websocket/
* - Joe Walnes
*
* Syntax
* ======
* var socket = new ReconnectingWebSocket(url, protocols, options);
*
* Parameters
* ==========
* url - The url you are connecting to.
* protocols - Optional string or array of protocols.
* options - See below
*
* Options
* =======
* Options can either be passed upon instantiation or set after instantiation:
*
* var socket = new ReconnectingWebSocket(url, null, { debug: true, reconnectInterval: 4000 });
*
* or
*
* var socket = new ReconnectingWebSocket(url);
* socket.debug = true;
* socket.reconnectInterval = 4000;
*
* debug
* - Whether this instance should log debug messages. Accepts true or false. Default: false.
*
* automaticOpen
* - Whether or not the websocket should attempt to connect immediately upon instantiation. The socket can be manually opened or closed at any time using ws.open() and ws.close().
*
* reconnectInterval
* - The number of milliseconds to delay before attempting to reconnect. Accepts integer. Default: 1000.
*
* maxReconnectInterval
* - The maximum number of milliseconds to delay a reconnection attempt. Accepts integer. Default: 30000.
*
* reconnectDecay
* - The rate of increase of the reconnect delay. Allows reconnect attempts to back off when problems persist. Accepts integer or float. Default: 1.5.
*
* timeoutInterval
* - The maximum time in milliseconds to wait for a connection to succeed before closing and retrying. Accepts integer. Default: 2000.
*
*/
(function (global, factory) {
if (typeof define === 'function' && define.amd) {
define([], factory);
} else if (typeof module !== 'undefined' && module.exports){
module.exports = factory();
} else {
global.ReconnectingWebSocket = factory();
}
})(this, function () {
if (!('WebSocket' in window)) {
return;
}
function ReconnectingWebSocket(url, protocols, options) {
// Default settings
var settings = {
/** Whether this instance should log debug messages. */
debug: false,
/** Whether or not the websocket should attempt to connect immediately upon instantiation. */
automaticOpen: true,
/** The number of milliseconds to delay before attempting to reconnect. */
reconnectInterval: 1000,
/** The maximum number of milliseconds to delay a reconnection attempt. */
maxReconnectInterval: 30000,
/** The rate of increase of the reconnect delay. Allows reconnect attempts to back off when problems persist. */
reconnectDecay: 1.5,
/** The maximum time in milliseconds to wait for a connection to succeed before closing and retrying. */
timeoutInterval: 2000,
/** The maximum number of reconnection attempts to make. Unlimited if null. */
maxReconnectAttempts: null,
/** The binary type, possible values 'blob' or 'arraybuffer', default 'blob'. */
binaryType: 'blob'
}
if (!options) { options = {}; }
// Overwrite and define settings with options if they exist.
for (var key in settings) {
if (typeof options[key] !== 'undefined') {
this[key] = options[key];
} else {
this[key] = settings[key];
}
}
// These should be treated as read-only properties
/** The URL as resolved by the constructor. This is always an absolute URL. Read only. */
this.url = url;
/** The number of attempted reconnects since starting, or the last successful connection. Read only. */
this.reconnectAttempts = 0;
/**
* The current state of the connection.
* Can be one of: WebSocket.CONNECTING, WebSocket.OPEN, WebSocket.CLOSING, WebSocket.CLOSED
* Read only.
*/
this.readyState = WebSocket.CONNECTING;
/**
* A string indicating the name of the sub-protocol the server selected; this will be one of
* the strings specified in the protocols parameter when creating the WebSocket object.
* Read only.
*/
this.protocol = null;
// Private state variables
var self = this;
var ws;
var forcedClose = false;
var timedOut = false;
var eventTarget = document.createElement('div');
// Wire up "on*" properties as event handlers
eventTarget.addEventListener('open', function(event) { self.onopen(event); });
eventTarget.addEventListener('close', function(event) { self.onclose(event); });
eventTarget.addEventListener('connecting', function(event) { self.onconnecting(event); });
eventTarget.addEventListener('message', function(event) { self.onmessage(event); });
eventTarget.addEventListener('error', function(event) { self.onerror(event); });
// Expose the API required by EventTarget
this.addEventListener = eventTarget.addEventListener.bind(eventTarget);
this.removeEventListener = eventTarget.removeEventListener.bind(eventTarget);
this.dispatchEvent = eventTarget.dispatchEvent.bind(eventTarget);
/**
* This function generates an event that is compatible with standard
* compliant browsers and IE9 - IE11
*
* This will prevent the error:
* Object doesn't support this action
*
* http://stackoverflow.com/questions/19345392/why-arent-my-parameters-getting-passed-through-to-a-dispatched-event/19345563#19345563
* @param s String The name that the event should use
* @param args Object an optional object that the event will use
*/
function generateEvent(s, args) {
var evt = document.createEvent("CustomEvent");
evt.initCustomEvent(s, false, false, args);
return evt;
};
this.open = function (reconnectAttempt) {
ws = new WebSocket(self.url, protocols || []);
ws.binaryType = this.binaryType;
if (reconnectAttempt) {
if (this.maxReconnectAttempts && this.reconnectAttempts > this.maxReconnectAttempts) {
return;
}
} else {
eventTarget.dispatchEvent(generateEvent('connecting'));
this.reconnectAttempts = 0;
}
if (self.debug || ReconnectingWebSocket.debugAll) {
console.debug('ReconnectingWebSocket', 'attempt-connect', self.url);
}
var localWs = ws;
var timeout = setTimeout(function() {
if (self.debug || ReconnectingWebSocket.debugAll) {
console.debug('ReconnectingWebSocket', 'connection-timeout', self.url);
}
timedOut = true;
localWs.close();
timedOut = false;
}, self.timeoutInterval);
ws.onopen = function(event) {
clearTimeout(timeout);
if (self.debug || ReconnectingWebSocket.debugAll) {
console.debug('ReconnectingWebSocket', 'onopen', self.url);
}
self.protocol = ws.protocol;
self.readyState = WebSocket.OPEN;
self.reconnectAttempts = 0;
var e = generateEvent('open');
e.isReconnect = reconnectAttempt;
reconnectAttempt = false;
eventTarget.dispatchEvent(e);
};
ws.onclose = function(event) {
clearTimeout(timeout);
ws = null;
if (forcedClose) {
self.readyState = WebSocket.CLOSED;
eventTarget.dispatchEvent(generateEvent('close'));
} else {
self.readyState = WebSocket.CONNECTING;
var e = generateEvent('connecting');
e.code = event.code;
e.reason = event.reason;
e.wasClean = event.wasClean;
eventTarget.dispatchEvent(e);
if (!reconnectAttempt && !timedOut) {
if (self.debug || ReconnectingWebSocket.debugAll) {
console.debug('ReconnectingWebSocket', 'onclose', self.url);
}
eventTarget.dispatchEvent(generateEvent('close'));
}
var timeout = self.reconnectInterval * Math.pow(self.reconnectDecay, self.reconnectAttempts);
setTimeout(function() {
self.reconnectAttempts++;
self.open(true);
}, timeout > self.maxReconnectInterval ? self.maxReconnectInterval : timeout);
}
};
ws.onmessage = function(event) {
if (self.debug || ReconnectingWebSocket.debugAll) {
console.debug('ReconnectingWebSocket', 'onmessage', self.url, event.data);
}
var e = generateEvent('message');
e.data = event.data;
eventTarget.dispatchEvent(e);
};
ws.onerror = function(event) {
if (self.debug || ReconnectingWebSocket.debugAll) {
console.debug('ReconnectingWebSocket', 'onerror', self.url, event);
}
eventTarget.dispatchEvent(generateEvent('error'));
};
}
// Whether or not to create a websocket upon instantiation
if (this.automaticOpen == true) {
this.open(false);
}
/**
* Transmits data to the server over the WebSocket connection.
*
* @param data a text string, ArrayBuffer or Blob to send to the server.
*/
this.send = function(data) {
if (ws) {
if (self.debug || ReconnectingWebSocket.debugAll) {
console.debug('ReconnectingWebSocket', 'send', self.url, data);
}
return ws.send(data);
} else {
throw 'INVALID_STATE_ERR : Pausing to reconnect websocket';
}
};
/**
* Closes the WebSocket connection or connection attempt, if any.
* If the connection is already CLOSED, this method does nothing.
*/
this.close = function(code, reason) {
// Default CLOSE_NORMAL code
if (typeof code == 'undefined') {
code = 1000;
}
forcedClose = true;
if (ws) {
ws.close(code, reason);
}
};
/**
* Additional public API method to refresh the connection if still open (close, re-open).
* For example, if the app suspects bad data / missed heart beats, it can try to refresh.
*/
this.refresh = function() {
if (ws) {
ws.close();
}
};
}
/**
* An event listener to be called when the WebSocket connection's readyState changes to OPEN;
* this indicates that the connection is ready to send and receive data.
*/
ReconnectingWebSocket.prototype.onopen = function(event) {};
/** An event listener to be called when the WebSocket connection's readyState changes to CLOSED. */
ReconnectingWebSocket.prototype.onclose = function(event) {};
/** An event listener to be called when a connection begins being attempted. */
ReconnectingWebSocket.prototype.onconnecting = function(event) {};
/** An event listener to be called when a message is received from the server. */
ReconnectingWebSocket.prototype.onmessage = function(event) {};
/** An event listener to be called when an error occurs. */
ReconnectingWebSocket.prototype.onerror = function(event) {};
/**
* Whether all instances of ReconnectingWebSocket should log debug messages.
* Setting this to true is the equivalent of setting all instances of ReconnectingWebSocket.debug to true.
*/
ReconnectingWebSocket.debugAll = false;
ReconnectingWebSocket.CONNECTING = WebSocket.CONNECTING;
ReconnectingWebSocket.OPEN = WebSocket.OPEN;
ReconnectingWebSocket.CLOSING = WebSocket.CLOSING;
ReconnectingWebSocket.CLOSED = WebSocket.CLOSED;
return ReconnectingWebSocket;
});

View File

@ -0,0 +1,250 @@
/**
* @license svg-crowbar
* (c) 2013 The New York Times
* License: MIT
*/
function svg_crowbar () {
var doctype = '<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">';
window.URL = (window.URL || window.webkitURL);
var body = document.body;
var prefix = {
xmlns: "http://www.w3.org/2000/xmlns/",
xlink: "http://www.w3.org/1999/xlink",
svg: "http://www.w3.org/2000/svg"
}
initialize();
function initialize() {
var documents = [window.document],
SVGSources = [];
iframes = document.querySelectorAll("iframe"),
objects = document.querySelectorAll("object");
[].forEach.call(iframes, function(el) {
try {
if (el.contentDocument) {
documents.push(el.contentDocument);
}
} catch(err) {
console.log(err)
}
});
[].forEach.call(objects, function(el) {
try {
if (el.contentDocument) {
documents.push(el.contentDocument);
}
} catch(err) {
console.log(err)
}
});
documents.forEach(function(doc) {
var styles = getStyles(doc);
var newSources = getSources(doc, styles);
// because of prototype on NYT pages
for (var i = 0; i < newSources.length; i++) {
SVGSources.push(newSources[i]);
};
})
if (SVGSources.length > 1) {
createPopover(SVGSources);
} else if (SVGSources.length > 0) {
download(SVGSources[0]);
} else {
alert("The Crowbar couldnt find any SVG nodes.");
}
}
function createPopover(sources) {
cleanup();
sources.forEach(function(s1) {
sources.forEach(function(s2) {
if (s1 !== s2) {
if ((Math.abs(s1.top - s2.top) < 38) && (Math.abs(s1.left - s2.left) < 38)) {
s2.top += 38;
s2.left += 38;
}
}
})
});
var buttonsContainer = document.createElement("div");
body.appendChild(buttonsContainer);
buttonsContainer.setAttribute("class", "svg-crowbar");
buttonsContainer.style["z-index"] = 1e7;
buttonsContainer.style["position"] = "absolute";
buttonsContainer.style["top"] = 0;
buttonsContainer.style["left"] = 0;
var background = document.createElement("div");
body.appendChild(background);
background.setAttribute("class", "svg-crowbar");
background.style["background"] = "rgba(255, 255, 255, 0.7)";
background.style["position"] = "fixed";
background.style["left"] = 0;
background.style["top"] = 0;
background.style["width"] = "100%";
background.style["height"] = "100%";
sources.forEach(function(d, i) {
var buttonWrapper = document.createElement("div");
buttonsContainer.appendChild(buttonWrapper);
buttonWrapper.setAttribute("class", "svg-crowbar");
buttonWrapper.style["position"] = "absolute";
buttonWrapper.style["top"] = (d.top + document.body.scrollTop) + "px";
buttonWrapper.style["left"] = (document.body.scrollLeft + d.left) + "px";
buttonWrapper.style["padding"] = "4px";
buttonWrapper.style["border-radius"] = "3px";
buttonWrapper.style["color"] = "white";
buttonWrapper.style["text-align"] = "center";
buttonWrapper.style["font-family"] = "'Helvetica Neue'";
buttonWrapper.style["background"] = "rgba(0, 0, 0, 0.8)";
buttonWrapper.style["box-shadow"] = "0px 4px 18px rgba(0, 0, 0, 0.4)";
buttonWrapper.style["cursor"] = "move";
buttonWrapper.textContent = "SVG #" + i + ": " + (d.id ? "#" + d.id : "") + (d.class ? "." + d.class : "");
var button = document.createElement("button");
buttonWrapper.appendChild(button);
button.setAttribute("data-source-id", i)
button.style["width"] = "150px";
button.style["font-size"] = "12px";
button.style["line-height"] = "1.4em";
button.style["margin"] = "5px 0 0 0";
button.textContent = "Download";
button.onclick = function(el) {
// console.log(el, d, i, sources)
download(d);
};
});
}
function cleanup() {
var crowbarElements = document.querySelectorAll(".svg-crowbar");
[].forEach.call(crowbarElements, function(el) {
el.parentNode.removeChild(el);
});
}
function getSources(doc, styles) {
var svgInfo = [],
svgs = doc.querySelectorAll("svg");
styles = (styles === undefined) ? "" : styles;
[].forEach.call(svgs, function (svg) {
svg.setAttribute("version", "1.1");
var defsEl = document.createElement("defs");
svg.insertBefore(defsEl, svg.firstChild); //TODO .insert("defs", ":first-child")
// defsEl.setAttribute("class", "svg-crowbar");
var styleEl = document.createElement("style")
defsEl.appendChild(styleEl);
styleEl.setAttribute("type", "text/css");
// removing attributes so they aren't doubled up
svg.removeAttribute("xmlns");
svg.removeAttribute("xlink");
// These are needed for the svg
if (!svg.hasAttributeNS(prefix.xmlns, "xmlns")) {
svg.setAttributeNS(prefix.xmlns, "xmlns", prefix.svg);
}
if (!svg.hasAttributeNS(prefix.xmlns, "xmlns:xlink")) {
svg.setAttributeNS(prefix.xmlns, "xmlns:xlink", prefix.xlink);
}
var source = (new XMLSerializer()).serializeToString(svg).replace('</style>', '<![CDATA[' + styles + ']]></style>');
var rect = svg.getBoundingClientRect();
svgInfo.push({
top: rect.top,
left: rect.left,
width: rect.width,
height: rect.height,
class: svg.getAttribute("class"),
id: svg.getAttribute("id"),
childElementCount: svg.childElementCount,
source: [doctype + source]
});
});
return svgInfo;
}
function download(source) {
var filename = "untitled";
if (source.id) {
filename = source.id;
} else if (source.class) {
filename = source.class;
} else if (window.document.title) {
filename = window.document.title.replace(/[^a-z0-9]/gi, '-').toLowerCase();
}
var url = window.URL.createObjectURL(new Blob(source.source, { "type" : "text\/xml" }));
var a = document.createElement("a");
body.appendChild(a);
a.setAttribute("class", "svg-crowbar");
a.setAttribute("download", filename + ".svg");
a.setAttribute("href", url);
a.style["display"] = "none";
a.click();
setTimeout(function() {
window.URL.revokeObjectURL(url);
}, 10);
}
function getStyles(doc) {
var styles = "",
styleSheets = doc.styleSheets;
if (styleSheets) {
for (var i = 0; i < styleSheets.length; i++) {
processStyleSheet(styleSheets[i]);
}
}
function processStyleSheet(ss) {
if (ss.cssRules) {
for (var i = 0; i < ss.cssRules.length; i++) {
var rule = ss.cssRules[i];
if (rule.type === 3) {
// Import Rule
processStyleSheet(rule.styleSheet);
} else {
// hack for illustrator crashing on descendent selectors
if (rule.selectorText) {
if (rule.selectorText.indexOf(">") === -1) {
styles += "\n" + rule.cssText;
}
}
}
}
}
}
return styles;
}
}
exports.svg_crowbar = svg_crowbar;

View File

@ -0,0 +1,11 @@
<rect x=0
y=0
ng-attr-width={{button.width}}
ng-attr-height={{button.height}}
rx=3></rect>
<text ng-attr-x="{{button.width/2}}"
ng-attr-y="{{button.height/2}}"
dy=".3em"
text-anchor="middle">{{button.name}}</text>

View File

@ -0,0 +1,4 @@
<g ng-attr-transform="translate({{cursor.x}},{{cursor.y}})" ng-attr-class="{{cursor.hidden && 'hidden' || ''}}" >
<line x1="-15" y1="0" x2="15" y2="0" class="cursor"/>
<line x1="0" y1="-15" x2="0" y2="15" class="cursor"/>
</g>

View File

@ -0,0 +1,32 @@
<g ng-attr-class="{{debug.hidden && 'hidden' || ''}} debug">
<text ng-attr-x="{{graph.right_column}}" y="15">width: {{graph.width}}</text>
<text ng-attr-x="{{graph.right_column}}" y="35">height: {{graph.height}}</text>
<text ng-attr-x="{{graph.right_column}}" y="55">rc: {{graph.right_column}}</text>
<text ng-attr-x="{{graph.right_column}}" y="75">Mouse down: {{onMouseDownResult}}</text>
<text ng-attr-x="{{graph.right_column}}" y="95">Mouse up: {{onMouseUpResult}}</text>
<text ng-attr-x="{{graph.right_column}}" y="115">Mouse move: {{onMouseMoveResult}}</text>
<text ng-attr-x="{{graph.right_column}}" y="135">Mouse over: {{onMouseOverResult}}</text>
<text ng-attr-x="{{graph.right_column}}" y="155">Mouse enter: {{onMouseEnterResult}}</text>
<text ng-attr-x="{{graph.right_column}}" y="175">Mouse leave: {{onMouseLeaveResult}}</text>
<text ng-attr-x="{{graph.right_column}}" y="195">Current scale: {{current_scale.toFixed(2)}}</text>
<text ng-attr-x="{{graph.right_column}}" y="215">Pan X: {{panX.toFixed(2)}}</text>
<text ng-attr-x="{{graph.right_column}}" y="235">Pan Y: {{panY.toFixed(2)}}</text>
<text ng-attr-x="{{graph.right_column}}" y="255">View State: {{view_controller.state.name}}</text>
<text ng-attr-x="{{graph.right_column}}" y="275">Mouse X: {{mouseX.toFixed(2)}}</text>
<text ng-attr-x="{{graph.right_column}}" y="295">Mouse Y: {{mouseY.toFixed(2)}}</text>
<text ng-attr-x="{{graph.right_column}}" y="315">Scaled X: {{scaledX.toFixed(2)}}</text>
<text ng-attr-x="{{graph.right_column}}" y="335">Scaled Y: {{scaledY.toFixed(2)}}</text>
<text ng-attr-x="{{graph.right_column}}" y="355">Key: {{last_key}}</text>
<text ng-attr-x="{{graph.right_column}}" y="375">Key Code: {{last_key_code}}</text>
<text ng-attr-x="{{graph.right_column}}" y="395">Move State: {{move_controller.state.name}}</text>
<text ng-attr-x="{{graph.right_column}}" y="415">Selected devices: {{selected_devices.length}}</text>
<text ng-attr-x="{{graph.right_column}}" y="435">Selected links: {{selected_links.length}}</text>
<text ng-attr-x="{{graph.right_column}}" y="455">Link State: {{link_controller.state.name}}</text>
<text ng-attr-x="{{graph.right_column}}" y="475">Buttons State: {{buttons_controller.state.name}}</text>
<text ng-attr-x="{{graph.right_column}}" y="495">Time State: {{time_controller.state.name}}</text>
<text ng-attr-x="{{graph.right_column}}" y="515">Time Pointer: {{time_pointer}}</text>
<text ng-attr-x="{{graph.right_column}}" y="535">History: {{history.length}}</text>
<text ng-attr-x="{{graph.right_column}}" y="555">Touch Data: {{touch_data.xb}} {{touch_data.yb}} {{touch_data.d}}</text>
</g>

View File

@ -0,0 +1,36 @@
<line ng-attr-x1="{{-50 - 10}}"
ng-attr-y1="0"
ng-attr-x2="{{50 + 10}}"
ng-attr-y2="0"
ng-attr-class="{{debug.hidden && 'hidden' || ''}} debug" />
<line ng-attr-x1="0"
ng-attr-y1="{{-50 - 10}}"
ng-attr-x2="0"
ng-attr-y2="{{50 + 10}}"
ng-attr-class="{{debug.hidden && 'hidden' || ''}} debug" />
<rect ng-attr-x="{{-50}}"
ng-attr-y="{{-50}}"
ng-attr-width="{{50 * 2}}"
ng-attr-height="{{50 * 2}}"
ng-attr-class="{{debug.hidden && 'hidden' || ''}} debug" />
<circle
cx="0"
cy="0"
ng-attr-r="{{50 + 2}}"
ng-attr-class="{{device.selected || device.remote_selected ? device.selected && device.remote_selected ? 'selected-conflict' : device.selected ? 'selected' : 'remote-selected' : 'hidden'}}">
</circle>
<circle
cx="0"
cy="0"
ng-attr-r="{{50}}">
</circle>
<g ng-show="current_scale > 0.5">
<text ng-attr-class="{{device.selected && ! device.edit_label ? 'selected' : 'hidden'}}"
filter="url(#selected)"
text-anchor="middle"
x="0"
y="75"> {{device.name}} </text>
<text text-anchor="middle" x="0" y="75">{{device.name}}{{device.edit_label?'_':''}}</text>
</g>

View File

@ -0,0 +1,42 @@
<line ng-attr-x1="{{-50 - 10}}"
ng-attr-y1="0"
ng-attr-x2="{{50 + 10}}"
ng-attr-y2="0"
ng-attr-class="{{debug.hidden && 'hidden' || ''}} debug" />
<line ng-attr-x1="0"
ng-attr-y1="{{-15 - 10}}"
ng-attr-x2="0"
ng-attr-y2="{{15 + 10}}"
ng-attr-class="{{debug.hidden && 'hidden' || ''}} debug" />
<rect ng-attr-x="{{-50}}"
ng-attr-y="{{-15}}"
ng-attr-width="{{50 * 2}}"
ng-attr-height="{{15 * 2}}"
ng-attr-class="{{debug.hidden && 'hidden' || ''}} debug" />
<rect
x="-52"
y="-17"
ng-attr-width="{{100 + 4}}"
ng-attr-height="{{30 + 4}}"
ng-attr-class="{{device.selected || device.remote_selected ? device.selected && device.remote_selected ? 'selected-conflict' : device.selected ? 'selected' : 'remote-selected' : 'hidden'}}"
rx=10>
</rect>
<rect
x="-50"
y="-15"
ng-attr-width="{{100}}"
ng-attr-height="{{30}}"
rx=10>
</rect>
<circle cx="30" cy="0" r=7 />
</circle>
<g ng-show="current_scale > 0.5">
<text ng-attr-class="{{device.selected && ! device.edit_label ? 'selected' : 'hidden'}}"
filter="url(#selected)"
text-anchor="middle"
x="0"
y="5"> {{device.name}} </text>
<text text-anchor="middle" x="0" y="5">{{device.name}}{{device.edit_label?'_':''}}</text>
</g>

View File

@ -0,0 +1,11 @@
<rect x=0
y=0
ng-attr-width={{layer.size}}
ng-attr-height={{layer.size}}
rx=3></rect>
<text ng-attr-x="{{layer.size/2}}"
ng-attr-y="{{layer.size/2}}"
dy=".3em"
text-anchor="middle">{{layer.name}}</text>

View File

@ -0,0 +1,125 @@
<line ng-attr-x1="{{link.from_device.x}}"
ng-attr-y1="{{link.from_device.y}}"
ng-attr-x2="{{link.to_device !== null ? link.to_device.x : scaledX}}"
ng-attr-y2="{{link.to_device !== null ? link.to_device.y : scaledY}}"
ng-attr-class="{{link.selected && 'selected' || 'hidden'}}"/>
<line ng-attr-x1="{{link.from_device.x}}"
ng-attr-y1="{{link.from_device.y}}"
ng-attr-x2="{{link.to_device !== null ? link.to_device.x : scaledX}}"
ng-attr-y2="{{link.to_device !== null ? link.to_device.y : scaledY}}"
class="{{link.status === null ? 'link' : link.status ? 'link-pass' : 'link-fail'}}"/>
<g ng-if="!debug.hidden && current_scale > 0.5">
<line ng-if="link.to_device !== null && link.plength(scaledX, scaledY) < 100"
ng-attr-x1="{{link.pDistanceLine(scaledX, scaledY).x2}}"
ng-attr-y1="{{link.pDistanceLine(scaledX, scaledY).y2}}"
ng-attr-x2="{{scaledX}}"
ng-attr-y2="{{scaledY}}"
ng-attr-class="debug" />
<g ng-if="link.to_device !== null" ng-attr-transform="translate({{link.to_device.x}},
{{link.to_device.y}})
rotate({{link.slope()}})
translate({{link.length()/2}}, 0)">
<circle ng-attr-cx="0"
ng-attr-cy="0"
r=10
class="debug" ></circle>
</g>
<g ng-if="link.to_device !== null" ng-attr-transform="translate({{link.to_device.x}},
{{link.to_device.y}})
rotate({{link.slope()}})
translate({{link.length()/2}}, 0)">
<line x1="0" y1=-20 x2=0 y2=20 class="debug"/>
</g>
<g ng-if="link.to_device !== null" ng-attr-transform="translate({{link.to_device.x}},
{{link.to_device.y}})
rotate({{link.slope()}})
translate({{link.to_device.size}}, 0)">
<circle ng-attr-cx="0"
ng-attr-cy="0"
r=10
class="debug" ></circle>
</g>
<g ng-if="link.to_device !== null" ng-attr-transform="translate({{link.from_device.x}},
{{link.from_device.y}})
rotate({{link.slope()}})
translate({{-link.from_device.size}}, 0)">
<circle ng-attr-cx="0"
ng-attr-cy="0"
r=10
class="debug" ></circle>
</g>
</g>
<g ng-if="link.to_device !== null" ng-attr-transform="translate({{link.to_device.x}},
{{link.to_device.y}})
rotate({{link.slope()}})
translate({{link.to_device.size}}, 0)
rotate(180)
translate(-19, -9)
">
</g>
<g ng-if="(!hide_interfaces && selected_links.length === 0 && selected_interfaces.length === 0) || link.selected || link.to_interface.selected || link.from_interface.selected">
<g ng-if="current_scale > 1.0 && link.to_device !== null"
ng-attr-transform="translate({{link.from_device.x}},
{{link.from_device.y}})
rotate({{link.slope()}})
translate({{-link.length()/2}}, 0)
rotate({{-link.slope()}})
translate(0, -5)
">
<text ng-attr-class="{{link.selected && ! link.edit_label ? 'selected' : 'hidden'}}"
filter="url(#selected)"
text-anchor="middle"
x="0"
y="0"> {{link.name}}</text>
<text text-anchor="middle" x="0" y="0">{{link.name}}{{link.edit_label?'_':''}}</text>
</g>
<g ng-if="current_scale > 1.0 && link.to_device !== null"
ng-attr-transform="translate({{link.from_device.x}},
{{link.from_device.y}})
rotate({{link.slope()}})
translate({{-link.from_interface.dot_d - 20}}, 0)
rotate({{-link.slope()}})
">
<text ng-attr-class="interface {{link.from_interface.selected && ! link.from_interface.edit_label ? 'selected' : 'hidden'}}"
filter="url(#selected)"
text-anchor="middle"
x="0"
y="0"> {{link.from_interface.name}}</text>
<text class="interface" text-anchor="middle" x="0" y="0">{{link.from_interface.name}}{{link.from_interface.edit_label ?'_':''}}</text>
</g>
<g ng-if="current_scale > 1.0 && link.to_device !== null"
ng-attr-transform="translate({{link.from_device.x}},
{{link.from_device.y}})
rotate({{link.slope()}})
translate({{-link.length() + link.to_interface.dot_d + 20}}, 0)
rotate({{-link.slope()}})
">
<text ng-attr-class="interface {{link.to_interface.selected && ! link.to_interface.edit_label ? 'selected' : 'hidden'}}"
filter="url(#selected)"
text-anchor="middle"
x="0"
y="0"> {{link.to_interface.name}}</text>
<text class="interface" text-anchor="middle" x="0" y="0">{{link.to_interface.name}}{{link.to_interface.edit_label?'_':''}}</text>
</g>
<g ng-if="current_scale > 1.0 && link.to_device !== null">
<circle ng-attr-cx="{{link.from_interface.dot_x}}"
ng-attr-cy="{{link.from_interface.dot_y}}"
r=14
ng-attr-class="{{link.from_interface.selected && ! link.from_interface.edit_label ? 'selected' : 'hidden'}}" ></circle>
<circle ng-attr-cx="{{link.from_interface.dot_x}}"
ng-attr-cy="{{link.from_interface.dot_y}}"
r=10
class="interface" ></circle>
<circle ng-attr-cx="{{link.to_interface.dot_x}}"
ng-attr-cy="{{link.to_interface.dot_y}}"
r=14
ng-attr-class="{{link.to_interface.selected && ! link.to_interface.edit_label ? 'selected' : 'hidden'}}" ></circle>
<circle ng-attr-cx="{{link.to_interface.dot_x}}"
ng-attr-cy="{{link.to_interface.dot_y}}"
r=10
class="interface" ></circle>
</g>
</g> <!-- end hide_interfaces -->

View File

@ -0,0 +1,10 @@
<line ng-attr-x1="-100000"
ng-attr-y1="0"
ng-attr-x2="100000"
ng-attr-y2="0"
ng-attr-class="{{debug.hidden && 'hidden' || ''}} debug" />
<line ng-attr-x1="0"
ng-attr-y1="-100000"
ng-attr-x2="0"
ng-attr-y2="100000"
ng-attr-class="{{debug.hidden && 'hidden' || ''}} debug" />

View File

@ -0,0 +1,67 @@
<line ng-attr-x1="{{-50 - 10}}"
ng-attr-y1="0"
ng-attr-x2="{{50 + 10}}"
ng-attr-y2="0"
ng-attr-class="{{debug.hidden && 'hidden' || ''}} debug" />
<line ng-attr-x1="0"
ng-attr-y1="{{-50 - 10}}"
ng-attr-x2="0"
ng-attr-y2="{{50 + 10}}"
ng-attr-class="{{debug.hidden && 'hidden' || ''}} debug" />
<rect ng-attr-x="{{-50}}"
ng-attr-y="{{-50}}"
ng-attr-width="{{50 * 2}}"
ng-attr-height="{{50 * 2}}"
ng-attr-class="{{debug.hidden && 'hidden' || ''}} debug" />
<rect
x="-52"
y="-52"
ng-attr-width="{{100 + 4}}"
ng-attr-height="{{100 + 4}}"
ng-attr-class="{{device.selected || device.remote_selected ? device.selected && device.remote_selected ? 'selected-conflict' : device.selected ? 'selected' : 'remote-selected' : 'hidden'}}"
rx=10>
</rect>
<rect
x="-50"
y="-50"
ng-attr-width="{{100}}"
ng-attr-height="{{100}}"
rx=10
class="background">
</rect>
<rect
x="-50"
y="-50"
ng-attr-width="{{100}}"
ng-attr-height="{{30}}"
rx=10>
</rect>
<rect
x="-50"
y="-15"
ng-attr-width="{{100}}"
ng-attr-height="{{30}}"
rx=10>
</rect>
<rect
x="-50"
y="20"
ng-attr-width="{{100}}"
ng-attr-height="{{30}}"
rx=10>
</rect>
<circle cx="30" cy="-35" r=7 />
<circle cx="30" cy="0" r=7 />
<circle cx="30" cy="35" r=7 />
</circle>
<g ng-show="current_scale > 0.5">
<text ng-attr-class="{{device.selected && ! device.edit_label ? 'selected' : 'hidden'}}"
filter="url(#selected)"
text-anchor="middle"
x="0"
y="75"> {{device.name}} </text>
<text text-anchor="middle" x="0" y="75">{{device.name}}{{device.edit_label?'_':''}}</text>
</g>

View File

@ -0,0 +1,59 @@
<line ng-attr-x1="{{-50 - 10}}"
ng-attr-y1="0"
ng-attr-x2="{{50 + 10}}"
ng-attr-y2="0"
ng-attr-class="{{debug.hidden && 'hidden' || ''}} debug" />
<line ng-attr-x1="0"
ng-attr-y1="{{-50 - 10}}"
ng-attr-x2="0"
ng-attr-y2="{{50 + 10}}"
ng-attr-class="{{debug.hidden && 'hidden' || ''}} debug" />
<rect ng-attr-x="{{-50}}"
ng-attr-y="{{-50}}"
ng-attr-width="{{50 * 2}}"
ng-attr-height="{{50 * 2}}"
ng-attr-class="{{debug.hidden && 'hidden' || ''}} debug" />
<circle
cx="0"
cy="0"
ng-attr-r="{{50 + 2}}"
ng-attr-class="{{device.selected || device.remote_selected ? device.selected && device.remote_selected ? 'selected-conflict' : device.selected ? 'selected' : 'remote-selected' : 'hidden'}}">
</circle>
<circle
cx="0"
cy="0"
ng-attr-r="{{50}}">
</circle>
<g transform="rotate(45)">
<line ng-attr-x1="12"
ng-attr-y1="0"
ng-attr-x2="{{50-18}}"
ng-attr-y2="0"/>
<line ng-attr-x1="-12"
ng-attr-y1="0"
ng-attr-x2="{{-50+18}}"
ng-attr-y2="0"/>
<polygon points="0 0, 10 10, 0 20" ng-attr-transform="rotate(0) translate({{50-22}}, -20) scale(2.0)"/>
<polygon points="0 0, 10 10, 0 20" ng-attr-transform="rotate(180) translate({{50-22}}, -20) scale(2.0)"/>
<line ng-attr-x1="0"
ng-attr-y1="17"
ng-attr-x2="0"
ng-attr-y2="{{50-5}}"/>
<line ng-attr-x1="0"
ng-attr-y1="-17"
ng-attr-x2="0"
ng-attr-y2="{{-50+5}}"/>
<polygon points="0 0, 10 10, 0 20" ng-attr-transform="rotate(90) translate(-22, -20) scale(2.0)" />
<polygon points="0 0, 10 10, 0 20" ng-attr-transform="rotate(270) translate(-22, -20) scale(2.0)"/>
</g>
<g ng-show="current_scale > 0.5">
<text ng-attr-class="{{device.selected && ! device.edit_label ? 'selected' : 'hidden'}}"
filter="url(#selected)"
text-anchor="middle"
x="0"
y="0"> {{device.name}}</text>
<text text-anchor="middle" x="0" y="0">{{device.name}}{{device.edit_label?'_':''}}</text>
</g>

View File

@ -0,0 +1,10 @@
<g ng-if="device.working">
<path ng-attr-transform="translate({{-device.width}}, {{-device.height}}) rotate({{frame/3}})" class="status" ng-attr-d="{{device.describeArc(0, 0, 10, 0, 270)}}"/>
</g>
<g ng-if="!device.working">
<circle ng-attr-cx="{{-device.width}}"
ng-attr-cy="{{-device.height}}"
r=10
ng-attr-class="{{device.status === null ? 'hidden' : device.status ? 'pass': 'fail'}} status">
</circle>
</g>

View File

@ -0,0 +1,11 @@
<rect x=0
y=0
ng-attr-width={{stencil.size}}
ng-attr-height={{stencil.size}}
rx=3></rect>
<text ng-attr-x="{{stencil.size/2}}"
ng-attr-y="{{stencil.size/2}}"
dy=".3em"
text-anchor="middle">{{stencil.name}}</text>

View File

@ -0,0 +1,61 @@
<line ng-attr-x1="{{-50 - 10}}"
ng-attr-y1="0"
ng-attr-x2="{{50 + 10}}"
ng-attr-y2="0"
ng-attr-class="{{debug.hidden && 'hidden' || ''}} debug" />
<line ng-attr-x1="0"
ng-attr-y1="{{-50 - 10}}"
ng-attr-x2="0"
ng-attr-y2="{{50 + 10}}"
ng-attr-class="{{debug.hidden && 'hidden' || ''}} debug" />
<rect ng-attr-x="{{-50}}"
ng-attr-y="{{-50}}"
ng-attr-width="{{50 * 2}}"
ng-attr-height="{{50 * 2}}"
ng-attr-class="{{debug.hidden && 'hidden' || ''}} debug" />
<rect
x="-52"
y="-52"
ng-attr-width="{{100 + 4}}"
ng-attr-height="{{100 + 4}}"
ng-attr-class="{{device.selected || device.remote_selected ? device.selected && device.remote_selected ? 'selected-conflict' : device.selected ? 'selected' : 'remote-selected' : 'hidden'}}"
rx=10>
</rect>
<rect
x="-50"
y="-50"
ng-attr-width="{{100}}"
ng-attr-height="{{100}}"
rx=10>
</rect>
<line ng-attr-x1="2"
ng-attr-y1="-28"
ng-attr-x2="38"
ng-attr-y2="-28"/>
<polygon points="0 0, 10 10, 0 20" ng-attr-transform="rotate(0) translate(28, -48) scale(2.0)"/>
<line ng-attr-x1="2"
ng-attr-y1="14"
ng-attr-x2="38"
ng-attr-y2="14"/>
<polygon points="0 0, 10 10, 0 20" ng-attr-transform="rotate(0) translate(28, -6) scale(2.0)"/>
<line ng-attr-x1="-2"
ng-attr-y1="28"
ng-attr-x2="-38"
ng-attr-y2="28"/>
<polygon points="0 0, 10 10, 0 20" ng-attr-transform="rotate(180) translate(28, -48) scale(2.0)"/>
<line ng-attr-x1="-2"
ng-attr-y1="-14"
ng-attr-x2="-38"
ng-attr-y2="-14"/>
<polygon points="0 0, 10 10, 0 20" ng-attr-transform="rotate(180) translate(28, -6) scale(2.0)"/>
<g ng-show="current_scale > 0.5">
<text ng-attr-class="{{device.selected && ! device.edit_label ? 'selected' : 'hidden'}}"
filter="url(#selected)"
text-anchor="middle"
x="0"
y="0"> {{device.name}} </text>
<text text-anchor="middle" x="0" y="0">{{device.name}}{{device.edit_label?'_':''}}</text>
</g>

View File

@ -0,0 +1,15 @@
<g ng-attr-transform="translate({{-device.width}}, {{-device.height}})">
<g ng-repeat="task in device.tasks | limitTo: -7">
<g ng-if="task.working && current_scale > 0.5">
<path ng-attr-transform="translate({{$index * 12 + 17}}, -5 ) rotate({{frame/3}})" class="status" ng-attr-d="{{task.describeArc(0, 0, 5, 0, 270)}}"/>
</g>
<g ng-if="!task.working && current_scale > 0.5">
<circle ng-attr-cx="{{$index * 12 + 17}}"
ng-attr-cy="-5"
r=5
ng-attr-class="{{task.status === null ? 'hidden' : task.status ? 'pass': 'fail'}} status"
</circle>
</g>
</g>
</g>

View File

@ -0,0 +1,3 @@
<g ng-attr-transform="translate({{touch.screenX}},{{touch.screenY}})" ng-attr-class="touch {{touch.hidden && 'hidden' || ''}}" >
<circle cx=0 cy=0 r=40></circle>
</g>

View File

@ -0,0 +1,12 @@
from django.contrib import admin
{%for model in models%}
from {{app}}.models import {{model.name}}
{%endfor%}
{%for model in models%}
class {{model.name}}Admin(admin.ModelAdmin):
fields = ({%for field in model.fields%}{%if not field.pk%}'{{field.name}}',{%endif%}{%endfor%})
raw_id_fields = ({%for field in model.fields%}{%if field.ref%}'{{field.name}}',{%endif%}{%endfor%})
admin.site.register({{model.name}}, {{model.name}}Admin)
{%endfor%}

View File

@ -0,0 +1,15 @@
from django.db import models
{%for model in models%}
class {{model.name}}(models.Model):
{%for field in model.fields%}{{field.name}} = models.{{field.type}}( {%if field.ref%}'{{field.ref}}', {%endif%}{%if field.pk%}primary_key=True, {%endif%} {%if field.len%}max_length={{field.len}}, {%endif%}{%if field.related_name%}related_name='{{field.related_name}}', {%endif%}{%if field.default is defined%}default={{field.default}}{%endif%})
{%endfor%}
{%if model.display%}
def __unicode__(self):
return self.{{model.display}}
{%endif%}
{%endfor%}

View File

@ -0,0 +1,11 @@
<ul>
<li><a href="/static/prototype/index.html">New</a></li>
{%for o in topologies%}
<li>
<a href="/static/prototype/index.html#!?topology_id={{o.pk}}">{{o.pk}} {{o}}</a>
{%for device in o.device_set.all%}
{{device}}
{%endfor%}
</li>
{%endfor%}
</ul>

15
awx/network_ui/tests.py Normal file
View File

@ -0,0 +1,15 @@
from django.test import TestCase
# Create your tests here.
from awx.network_ui.models import Topology, Device, Interface, MessageType, Link
class TestToString(TestCase):
def test(self):
print str(Topology(name='foo'))
print str(Device(name='foo'))
print str(Device(name='foo'))
print str(Interface(name='foo'))
print str(MessageType(name='foo'))

11
awx/network_ui/urls.py Normal file
View File

@ -0,0 +1,11 @@
from django.conf.urls import include, url
import sys
from . import views
import awx.network_ui.routing
app_name = 'network_ui'
urlpatterns = [
url(r'^$', views.index, name='index'),
]

4
awx/network_ui/utils.py Normal file
View File

@ -0,0 +1,4 @@
def transform_dict(dict_map, d):
return {to_key: d[from_key] for from_key, to_key in dict_map.iteritems()}

8
awx/network_ui/views.py Normal file
View File

@ -0,0 +1,8 @@
from django.shortcuts import render
# Create your views here.
from .models import Topology
def index(request):
return render(request, "network_ui/index.html", dict(topologies=Topology.objects.all().order_by('-pk')))

View File

@ -279,6 +279,7 @@ INSTALLED_APPS = (
'awx.ui',
'awx.sso',
'solo',
'awx.network_ui',
)
INTERNAL_IPS = ('127.0.0.1',)

View File

@ -0,0 +1,272 @@
{"panX": 0, "panY": 0, "scale": 1, "sender": 3692, "msg_type": "ViewPort", "message_id": 0}
{"sender": 3692, "msg_type": "MouseEvent", "y": 44, "x": 195, "type": "mousemove", "message_id": 2}
{"sender": 3692, "msg_type": "MouseEvent", "y": 44, "x": 195, "type": "mousemove", "message_id": 3}
{"sender": 3692, "msg_type": "MouseEvent", "y": 44, "x": 195, "type": "mousemove", "message_id": 4}
{"sender": 3692, "msg_type": "MouseEvent", "y": 45, "x": 195, "type": "mousemove", "message_id": 5}
{"sender": 3692, "msg_type": "MouseEvent", "y": 46, "x": 196, "type": "mousemove", "message_id": 6}
{"sender": 3692, "msg_type": "MouseEvent", "y": 48, "x": 197, "type": "mousemove", "message_id": 7}
{"sender": 3692, "msg_type": "MouseEvent", "y": 50, "x": 199, "type": "mouseover", "message_id": 8}
{"sender": 3692, "msg_type": "MouseEvent", "y": 50, "x": 199, "type": "mouseover", "message_id": 9}
{"sender": 3692, "msg_type": "MouseEvent", "y": 53, "x": 201, "type": "mousemove", "message_id": 11}
{"sender": 3692, "msg_type": "MouseEvent", "y": 50, "x": 199, "type": "mousemove", "message_id": 10}
{"sender": 3692, "msg_type": "MouseEvent", "y": 57, "x": 203, "type": "mousemove", "message_id": 12}
{"sender": 3692, "msg_type": "MouseEvent", "y": 62, "x": 205, "type": "mouseover", "message_id": 13}
{"sender": 3692, "msg_type": "MouseEvent", "y": 62, "x": 205, "type": "mousemove", "message_id": 15}
{"sender": 3692, "msg_type": "MouseEvent", "y": 62, "x": 205, "type": "mouseover", "message_id": 14}
{"sender": 3692, "msg_type": "MouseEvent", "y": 71, "x": 206, "type": "mouseover", "message_id": 16}
{"sender": 3692, "msg_type": "MouseEvent", "y": 71, "x": 206, "type": "mouseover", "message_id": 17}
{"sender": 3692, "msg_type": "MouseEvent", "y": 71, "x": 206, "type": "mousemove", "message_id": 18}
{"sender": 3692, "msg_type": "MouseEvent", "y": 84, "x": 209, "type": "mouseover", "message_id": 20}
{"sender": 3692, "msg_type": "MouseEvent", "y": 84, "x": 209, "type": "mouseover", "message_id": 19}
{"sender": 3692, "msg_type": "MouseEvent", "y": 84, "x": 209, "type": "mousemove", "message_id": 21}
{"sender": 3692, "msg_type": "MouseEvent", "y": 101, "x": 212, "type": "mousemove", "message_id": 22}
{"sender": 3692, "msg_type": "MouseEvent", "y": 122, "x": 214, "type": "mousemove", "message_id": 23}
{"sender": 3692, "msg_type": "MouseEvent", "y": 144, "x": 218, "type": "mousemove", "message_id": 24}
{"sender": 3692, "msg_type": "MouseEvent", "y": 165, "x": 221, "type": "mousemove", "message_id": 25}
{"sender": 3692, "msg_type": "MouseEvent", "y": 184, "x": 224, "type": "mousemove", "message_id": 26}
{"sender": 3692, "msg_type": "MouseEvent", "y": 195, "x": 225, "type": "mouseover", "message_id": 27}
{"sender": 3692, "msg_type": "MouseEvent", "y": 195, "x": 225, "type": "mouseover", "message_id": 28}
{"sender": 3692, "msg_type": "MouseEvent", "y": 195, "x": 225, "type": "mousemove", "message_id": 29}
{"sender": 3692, "msg_type": "MouseEvent", "y": 207, "x": 225, "type": "mousemove", "message_id": 30}
{"sender": 3692, "msg_type": "MouseEvent", "y": 217, "x": 224, "type": "mousemove", "message_id": 31}
{"sender": 3692, "msg_type": "MouseEvent", "y": 225, "x": 221, "type": "mouseover", "message_id": 32}
{"sender": 3692, "msg_type": "MouseEvent", "y": 225, "x": 221, "type": "mouseover", "message_id": 33}
{"sender": 3692, "msg_type": "MouseEvent", "y": 225, "x": 221, "type": "mousemove", "message_id": 34}
{"sender": 3692, "msg_type": "MouseEvent", "y": 233, "x": 218, "type": "mousemove", "message_id": 35}
{"sender": 3692, "msg_type": "MouseEvent", "y": 242, "x": 214, "type": "mousemove", "message_id": 36}
{"sender": 3692, "msg_type": "MouseEvent", "y": 249, "x": 211, "type": "mousemove", "message_id": 37}
{"sender": 3692, "msg_type": "MouseEvent", "y": 256, "x": 207, "type": "mousemove", "message_id": 38}
{"sender": 3692, "msg_type": "MouseEvent", "y": 261, "x": 205, "type": "mousemove", "message_id": 39}
{"sender": 3692, "msg_type": "MouseEvent", "y": 265, "x": 202, "type": "mousemove", "message_id": 40}
{"sender": 3692, "msg_type": "MouseEvent", "y": 268, "x": 200, "type": "mousemove", "message_id": 41}
{"sender": 3692, "msg_type": "MouseEvent", "y": 269, "x": 198, "type": "mouseover", "message_id": 42}
{"sender": 3692, "msg_type": "MouseEvent", "y": 269, "x": 198, "type": "mouseover", "message_id": 43}
{"sender": 3692, "msg_type": "MouseEvent", "y": 270, "x": 198, "type": "mouseover", "message_id": 45}
{"sender": 3692, "msg_type": "MouseEvent", "y": 269, "x": 198, "type": "mousemove", "message_id": 44}
{"sender": 3692, "msg_type": "MouseEvent", "y": 270, "x": 198, "type": "mousemove", "message_id": 47}
{"sender": 3692, "msg_type": "MouseEvent", "y": 270, "x": 198, "type": "mouseover", "message_id": 46}
{"sender": 3692, "msg_type": "MouseEvent", "y": 271, "x": 198, "type": "mousemove", "message_id": 48}
{"sender": 3692, "msg_type": "MouseEvent", "y": 272, "x": 198, "type": "mousemove", "message_id": 49}
{"sender": 3692, "msg_type": "MouseEvent", "y": 273, "x": 198, "type": "mousemove", "message_id": 50}
{"sender": 3692, "msg_type": "MouseEvent", "y": 274, "x": 198, "type": "mousemove", "message_id": 51}
{"sender": 3692, "msg_type": "MouseEvent", "y": 275, "x": 199, "type": "mousemove", "message_id": 52}
{"sender": 3692, "msg_type": "MouseEvent", "y": 276, "x": 199, "type": "mousemove", "message_id": 53}
{"sender": 3692, "msg_type": "MouseEvent", "y": 276, "x": 199, "type": "mousemove", "message_id": 54}
{"sender": 3692, "msg_type": "MouseEvent", "y": 276, "x": 199, "type": "mousemove", "message_id": 55}
{"sender": 3692, "msg_type": "MouseEvent", "y": 276, "x": 199, "type": "mousemove", "message_id": 56}
{"sender": 3692, "msg_type": "MouseEvent", "y": 276, "x": 199, "type": "mousemove", "message_id": 57}
{"sender": 3692, "msg_type": "MouseEvent", "y": 277, "x": 199, "type": "mousemove", "message_id": 58}
{"sender": 3692, "msg_type": "MouseEvent", "y": 277, "x": 199, "type": "mousemove", "message_id": 59}
{"sender": 3692, "msg_type": "MouseEvent", "y": 278, "x": 199, "type": "mousemove", "message_id": 60}
{"sender": 3692, "msg_type": "MouseEvent", "y": 278, "x": 199, "type": "mousemove", "message_id": 61}
{"sender": 3692, "msg_type": "MouseEvent", "y": 278, "x": 199, "type": "mousemove", "message_id": 62}
{"sender": 3692, "msg_type": "MouseEvent", "y": 278, "x": 199, "type": "mousemove", "message_id": 63}
{"sender": 3692, "msg_type": "MouseEvent", "y": 279, "x": 199, "type": "mousemove", "message_id": 64}
{"sender": 3692, "msg_type": "MouseEvent", "y": 279, "x": 199, "type": "mousemove", "message_id": 65}
{"sender": 3692, "msg_type": "MouseEvent", "y": 279, "x": 199, "type": "mousemove", "message_id": 66}
{"sender": 3692, "msg_type": "MouseEvent", "y": 279, "x": 199, "type": "mousemove", "message_id": 67}
{"sender": 3692, "msg_type": "MouseEvent", "y": 279, "x": 199, "type": "mousedown", "message_id": 68}
{"sender": 3692, "msg_type": "MouseEvent", "y": 279, "x": 199, "type": "mouseup", "message_id": 69}
{"sender": 3692, "msg_type": "MouseEvent", "y": 279, "x": 199, "type": "mousemove", "message_id": 70}
{"sender": 3692, "msg_type": "MouseEvent", "y": 278, "x": 199, "type": "mousemove", "message_id": 71}
{"sender": 3692, "msg_type": "MouseEvent", "y": 278, "x": 199, "type": "mousemove", "message_id": 72}
{"sender": 3692, "msg_type": "MouseEvent", "y": 278, "x": 199, "type": "mousemove", "message_id": 73}
{"sender": 3692, "msg_type": "MouseEvent", "y": 278, "x": 199, "type": "mousemove", "message_id": 74}
{"sender": 3692, "msg_type": "KeyEvent", "shiftKey": false, "message_id": 75, "altKey": false, "metaKey": false, "key": "s", "ctrlKey": false, "type": "keydown", "keyCode": 83}
{"sender": 3692, "msg_type": "MouseEvent", "y": 278, "x": 199, "type": "mousemove", "message_id": 77}
{"sender": 3692, "msg_type": "MouseEvent", "y": 278, "x": 199, "type": "mousemove", "message_id": 78}
{"sender": 3692, "msg_type": "MouseEvent", "y": 278, "x": 201, "type": "mouseover", "message_id": 79}
{"sender": 3692, "msg_type": "MouseEvent", "y": 278, "x": 201, "type": "mouseover", "message_id": 80}
{"sender": 3692, "msg_type": "MouseEvent", "y": 278, "x": 201, "type": "mousemove", "message_id": 81}
{"sender": 3692, "msg_type": "MouseEvent", "y": 278, "x": 206, "type": "mousemove", "message_id": 82}
{"sender": 3692, "msg_type": "MouseEvent", "y": 278, "x": 215, "type": "mousemove", "message_id": 83}
{"sender": 3692, "msg_type": "MouseEvent", "y": 278, "x": 226, "type": "mousemove", "message_id": 84}
{"sender": 3692, "msg_type": "MouseEvent", "y": 279, "x": 241, "type": "mousemove", "message_id": 85}
{"sender": 3692, "msg_type": "MouseEvent", "y": 279, "x": 259, "type": "mouseover", "message_id": 87}
{"sender": 3692, "msg_type": "MouseEvent", "y": 279, "x": 259, "type": "mouseover", "message_id": 86}
{"sender": 3692, "msg_type": "MouseEvent", "y": 279, "x": 259, "type": "mousemove", "message_id": 88}
{"sender": 3692, "msg_type": "MouseEvent", "y": 278, "x": 278, "type": "mousemove", "message_id": 89}
{"sender": 3692, "msg_type": "MouseEvent", "y": 277, "x": 298, "type": "mousemove", "message_id": 90}
{"sender": 3692, "msg_type": "MouseEvent", "y": 277, "x": 320, "type": "mousemove", "message_id": 91}
{"sender": 3692, "msg_type": "MouseEvent", "y": 277, "x": 335, "type": "mouseover", "message_id": 92}
{"sender": 3692, "msg_type": "MouseEvent", "y": 277, "x": 335, "type": "mouseover", "message_id": 93}
{"sender": 3692, "msg_type": "MouseEvent", "y": 277, "x": 335, "type": "mousemove", "message_id": 94}
{"sender": 3692, "msg_type": "MouseEvent", "y": 276, "x": 355, "type": "mouseover", "message_id": 95}
{"sender": 3692, "msg_type": "MouseEvent", "y": 276, "x": 355, "type": "mousemove", "message_id": 97}
{"sender": 3692, "msg_type": "MouseEvent", "y": 276, "x": 355, "type": "mouseover", "message_id": 96}
{"sender": 3692, "msg_type": "MouseEvent", "y": 276, "x": 371, "type": "mousemove", "message_id": 98}
{"sender": 3692, "msg_type": "MouseEvent", "y": 276, "x": 384, "type": "mouseover", "message_id": 99}
{"sender": 3692, "msg_type": "MouseEvent", "y": 276, "x": 384, "type": "mouseover", "message_id": 100}
{"sender": 3692, "msg_type": "MouseEvent", "y": 276, "x": 384, "type": "mousemove", "message_id": 101}
{"sender": 3692, "msg_type": "MouseEvent", "y": 275, "x": 395, "type": "mousemove", "message_id": 102}
{"sender": 3692, "msg_type": "MouseEvent", "y": 275, "x": 403, "type": "mousemove", "message_id": 103}
{"sender": 3692, "msg_type": "MouseEvent", "y": 274, "x": 410, "type": "mousemove", "message_id": 104}
{"sender": 3692, "msg_type": "MouseEvent", "y": 274, "x": 416, "type": "mousemove", "message_id": 105}
{"sender": 3692, "msg_type": "MouseEvent", "y": 273, "x": 420, "type": "mousemove", "message_id": 106}
{"sender": 3692, "msg_type": "MouseEvent", "y": 273, "x": 423, "type": "mousemove", "message_id": 107}
{"sender": 3692, "msg_type": "MouseEvent", "y": 273, "x": 425, "type": "mousemove", "message_id": 108}
{"sender": 3692, "msg_type": "MouseEvent", "y": 273, "x": 426, "type": "mouseover", "message_id": 109}
{"sender": 3692, "msg_type": "MouseEvent", "y": 273, "x": 426, "type": "mousemove", "message_id": 111}
{"sender": 3692, "msg_type": "MouseEvent", "y": 273, "x": 426, "type": "mouseover", "message_id": 110}
{"sender": 3692, "msg_type": "MouseEvent", "y": 273, "x": 426, "type": "mousemove", "message_id": 112}
{"sender": 3692, "msg_type": "MouseEvent", "y": 273, "x": 426, "type": "mousemove", "message_id": 113}
{"sender": 3692, "msg_type": "MouseEvent", "y": 273, "x": 426, "type": "mousemove", "message_id": 114}
{"sender": 3692, "msg_type": "MouseEvent", "y": 273, "x": 428, "type": "mouseover", "message_id": 115}
{"sender": 3692, "msg_type": "MouseEvent", "y": 273, "x": 428, "type": "mouseover", "message_id": 116}
{"sender": 3692, "msg_type": "MouseEvent", "y": 273, "x": 428, "type": "mousemove", "message_id": 117}
{"sender": 3692, "msg_type": "MouseEvent", "y": 273, "x": 429, "type": "mouseover", "message_id": 118}
{"sender": 3692, "msg_type": "MouseEvent", "y": 273, "x": 429, "type": "mousemove", "message_id": 120}
{"sender": 3692, "msg_type": "MouseEvent", "y": 273, "x": 429, "type": "mouseover", "message_id": 119}
{"sender": 3692, "msg_type": "MouseEvent", "y": 274, "x": 431, "type": "mouseover", "message_id": 122}
{"sender": 3692, "msg_type": "MouseEvent", "y": 274, "x": 431, "type": "mouseover", "message_id": 121}
{"sender": 3692, "msg_type": "MouseEvent", "y": 274, "x": 431, "type": "mousemove", "message_id": 123}
{"sender": 3692, "msg_type": "MouseEvent", "y": 274, "x": 432, "type": "mouseover", "message_id": 124}
{"sender": 3692, "msg_type": "MouseEvent", "y": 274, "x": 432, "type": "mouseover", "message_id": 125}
{"sender": 3692, "msg_type": "MouseEvent", "y": 274, "x": 432, "type": "mousemove", "message_id": 126}
{"sender": 3692, "msg_type": "MouseEvent", "y": 274, "x": 433, "type": "mousemove", "message_id": 127}
{"sender": 3692, "msg_type": "MouseEvent", "y": 274, "x": 434, "type": "mousemove", "message_id": 128}
{"sender": 3692, "msg_type": "MouseEvent", "y": 274, "x": 435, "type": "mousemove", "message_id": 129}
{"sender": 3692, "msg_type": "MouseEvent", "y": 274, "x": 436, "type": "mousemove", "message_id": 130}
{"sender": 3692, "msg_type": "MouseEvent", "y": 274, "x": 436, "type": "mousemove", "message_id": 131}
{"sender": 3692, "msg_type": "MouseEvent", "y": 274, "x": 436, "type": "mousemove", "message_id": 132}
{"sender": 3692, "msg_type": "MouseEvent", "y": 274, "x": 437, "type": "mousemove", "message_id": 133}
{"sender": 3692, "msg_type": "MouseEvent", "y": 274, "x": 438, "type": "mousemove", "message_id": 134}
{"sender": 3692, "msg_type": "MouseEvent", "y": 275, "x": 438, "type": "mousemove", "message_id": 135}
{"sender": 3692, "msg_type": "MouseEvent", "y": 275, "x": 439, "type": "mousemove", "message_id": 136}
{"sender": 3692, "msg_type": "MouseEvent", "y": 275, "x": 439, "type": "mousemove", "message_id": 137}
{"sender": 3692, "msg_type": "KeyEvent", "shiftKey": false, "message_id": 138, "altKey": false, "metaKey": false, "key": "s", "ctrlKey": false, "type": "keydown", "keyCode": 83}
{"sender": 3692, "msg_type": "KeyEvent", "shiftKey": false, "message_id": 140, "altKey": false, "metaKey": false, "key": "l", "ctrlKey": false, "type": "keydown", "keyCode": 76}
{"sender": 3692, "msg_type": "MouseEvent", "y": 275, "x": 439, "type": "mousedown", "message_id": 141}
{"sender": 3692, "msg_type": "MouseEvent", "y": 275, "x": 439, "type": "mouseup", "message_id": 142}
{"sender": 3692, "msg_type": "MouseEvent", "y": 275, "x": 439, "type": "mousemove", "message_id": 144}
{"sender": 3692, "msg_type": "MouseEvent", "y": 275, "x": 434, "type": "mouseover", "message_id": 145}
{"sender": 3692, "msg_type": "MouseEvent", "y": 275, "x": 434, "type": "mouseover", "message_id": 146}
{"sender": 3692, "msg_type": "MouseEvent", "y": 275, "x": 434, "type": "mousemove", "message_id": 147}
{"sender": 3692, "msg_type": "MouseEvent", "y": 275, "x": 429, "type": "mousemove", "message_id": 148}
{"sender": 3692, "msg_type": "MouseEvent", "y": 275, "x": 420, "type": "mousemove", "message_id": 149}
{"sender": 3692, "msg_type": "MouseEvent", "y": 274, "x": 410, "type": "mousemove", "message_id": 150}
{"sender": 3692, "msg_type": "MouseEvent", "y": 274, "x": 400, "type": "mousemove", "message_id": 151}
{"sender": 3692, "msg_type": "MouseEvent", "y": 274, "x": 393, "type": "mousemove", "message_id": 152}
{"sender": 3692, "msg_type": "MouseEvent", "y": 274, "x": 385, "type": "mousemove", "message_id": 153}
{"sender": 3692, "msg_type": "MouseEvent", "y": 274, "x": 375, "type": "mousemove", "message_id": 154}
{"sender": 3692, "msg_type": "MouseEvent", "y": 275, "x": 365, "type": "mousemove", "message_id": 155}
{"sender": 3692, "msg_type": "MouseEvent", "y": 275, "x": 355, "type": "mousemove", "message_id": 156}
{"sender": 3692, "msg_type": "MouseEvent", "y": 275, "x": 339, "type": "mouseover", "message_id": 157}
{"sender": 3692, "msg_type": "MouseEvent", "y": 275, "x": 339, "type": "mouseover", "message_id": 158}
{"sender": 3692, "msg_type": "MouseEvent", "y": 275, "x": 339, "type": "mousemove", "message_id": 159}
{"sender": 3692, "msg_type": "MouseEvent", "y": 275, "x": 320, "type": "mousemove", "message_id": 160}
{"sender": 3692, "msg_type": "MouseEvent", "y": 274, "x": 301, "type": "mousemove", "message_id": 161}
{"sender": 3692, "msg_type": "MouseEvent", "y": 274, "x": 290, "type": "mouseover", "message_id": 162}
{"sender": 3692, "msg_type": "MouseEvent", "y": 274, "x": 290, "type": "mouseover", "message_id": 163}
{"sender": 3692, "msg_type": "MouseEvent", "y": 274, "x": 290, "type": "mousemove", "message_id": 164}
{"sender": 3692, "msg_type": "MouseEvent", "y": 273, "x": 277, "type": "mousemove", "message_id": 165}
{"sender": 3692, "msg_type": "MouseEvent", "y": 273, "x": 267, "type": "mousemove", "message_id": 166}
{"sender": 3692, "msg_type": "MouseEvent", "y": 273, "x": 261, "type": "mousemove", "message_id": 167}
{"sender": 3692, "msg_type": "MouseEvent", "y": 272, "x": 253, "type": "mousemove", "message_id": 168}
{"sender": 3692, "msg_type": "MouseEvent", "y": 272, "x": 247, "type": "mousemove", "message_id": 169}
{"sender": 3692, "msg_type": "MouseEvent", "y": 272, "x": 241, "type": "mousemove", "message_id": 170}
{"sender": 3692, "msg_type": "MouseEvent", "y": 272, "x": 237, "type": "mousemove", "message_id": 171}
{"sender": 3692, "msg_type": "MouseEvent", "y": 272, "x": 233, "type": "mousemove", "message_id": 172}
{"sender": 3692, "msg_type": "MouseEvent", "y": 272, "x": 230, "type": "mousemove", "message_id": 173}
{"sender": 3692, "msg_type": "MouseEvent", "y": 272, "x": 228, "type": "mousemove", "message_id": 174}
{"sender": 3692, "msg_type": "MouseEvent", "y": 272, "x": 227, "type": "mouseover", "message_id": 175}
{"sender": 3692, "msg_type": "MouseEvent", "y": 272, "x": 227, "type": "mouseover", "message_id": 176}
{"sender": 3692, "msg_type": "MouseEvent", "y": 272, "x": 227, "type": "mousemove", "message_id": 177}
{"sender": 3692, "msg_type": "MouseEvent", "y": 272, "x": 225, "type": "mouseover", "message_id": 178}
{"sender": 3692, "msg_type": "MouseEvent", "y": 272, "x": 225, "type": "mouseover", "message_id": 179}
{"sender": 3692, "msg_type": "MouseEvent", "y": 272, "x": 225, "type": "mousemove", "message_id": 180}
{"sender": 3692, "msg_type": "MouseEvent", "y": 272, "x": 223, "type": "mousemove", "message_id": 181}
{"sender": 3692, "msg_type": "MouseEvent", "y": 272, "x": 222, "type": "mouseover", "message_id": 182}
{"sender": 3692, "msg_type": "MouseEvent", "y": 272, "x": 222, "type": "mouseover", "message_id": 183}
{"sender": 3692, "msg_type": "MouseEvent", "y": 272, "x": 222, "type": "mousemove", "message_id": 184}
{"sender": 3692, "msg_type": "MouseEvent", "y": 272, "x": 221, "type": "mousemove", "message_id": 185}
{"sender": 3692, "msg_type": "MouseEvent", "y": 272, "x": 220, "type": "mousemove", "message_id": 186}
{"sender": 3692, "msg_type": "MouseEvent", "y": 272, "x": 220, "type": "mousemove", "message_id": 187}
{"sender": 3692, "msg_type": "MouseEvent", "y": 272, "x": 220, "type": "mousedown", "message_id": 188}
{"sender": 3692, "msg_type": "MouseEvent", "y": 272, "x": 220, "type": "mouseup", "message_id": 189}
{"sender": 3692, "msg_type": "MouseEvent", "y": 273, "x": 220, "type": "mousemove", "message_id": 194}
{"sender": 3692, "msg_type": "MouseEvent", "y": 274, "x": 222, "type": "mouseover", "message_id": 195}
{"sender": 3692, "msg_type": "MouseEvent", "y": 274, "x": 222, "type": "mousemove", "message_id": 197}
{"sender": 3692, "msg_type": "MouseEvent", "y": 274, "x": 222, "type": "mouseover", "message_id": 196}
{"sender": 3692, "msg_type": "MouseEvent", "y": 275, "x": 223, "type": "mouseover", "message_id": 199}
{"sender": 3692, "msg_type": "MouseEvent", "y": 275, "x": 223, "type": "mousemove", "message_id": 200}
{"sender": 3692, "msg_type": "MouseEvent", "y": 275, "x": 223, "type": "mouseover", "message_id": 198}
{"sender": 3692, "msg_type": "MouseEvent", "y": 278, "x": 225, "type": "mouseover", "message_id": 201}
{"sender": 3692, "msg_type": "MouseEvent", "y": 278, "x": 225, "type": "mouseover", "message_id": 202}
{"sender": 3692, "msg_type": "MouseEvent", "y": 278, "x": 225, "type": "mousemove", "message_id": 203}
{"sender": 3692, "msg_type": "MouseEvent", "y": 281, "x": 226, "type": "mouseover", "message_id": 204}
{"sender": 3692, "msg_type": "MouseEvent", "y": 281, "x": 226, "type": "mouseover", "message_id": 205}
{"sender": 3692, "msg_type": "MouseEvent", "y": 283, "x": 228, "type": "mouseover", "message_id": 207}
{"sender": 3692, "msg_type": "MouseEvent", "y": 281, "x": 226, "type": "mousemove", "message_id": 206}
{"sender": 3692, "msg_type": "MouseEvent", "y": 283, "x": 228, "type": "mouseover", "message_id": 208}
{"sender": 3692, "msg_type": "MouseEvent", "y": 283, "x": 228, "type": "mousemove", "message_id": 209}
{"sender": 3692, "msg_type": "MouseEvent", "y": 283, "x": 230, "type": "mouseover", "message_id": 210}
{"sender": 3692, "msg_type": "MouseEvent", "y": 283, "x": 230, "type": "mouseover", "message_id": 211}
{"sender": 3692, "msg_type": "MouseEvent", "y": 283, "x": 230, "type": "mousemove", "message_id": 212}
{"sender": 3692, "msg_type": "MouseEvent", "y": 283, "x": 232, "type": "mousemove", "message_id": 213}
{"sender": 3692, "msg_type": "MouseEvent", "y": 283, "x": 233, "type": "mouseover", "message_id": 214}
{"sender": 3692, "msg_type": "MouseEvent", "y": 283, "x": 233, "type": "mouseover", "message_id": 215}
{"sender": 3692, "msg_type": "MouseEvent", "y": 283, "x": 233, "type": "mousemove", "message_id": 216}
{"sender": 3692, "msg_type": "MouseEvent", "y": 283, "x": 233, "type": "mousemove", "message_id": 217}
{"sender": 3692, "msg_type": "MouseEvent", "y": 282, "x": 233, "type": "mousemove", "message_id": 218}
{"sender": 3692, "msg_type": "MouseEvent", "y": 282, "x": 233, "type": "mousemove", "message_id": 219}
{"sender": 3692, "msg_type": "MouseEvent", "y": 281, "x": 234, "type": "mousemove", "message_id": 220}
{"sender": 3692, "msg_type": "MouseEvent", "y": 278, "x": 235, "type": "mousemove", "message_id": 221}
{"sender": 3692, "msg_type": "MouseEvent", "y": 274, "x": 237, "type": "mouseover", "message_id": 222}
{"sender": 3692, "msg_type": "MouseEvent", "y": 274, "x": 237, "type": "mouseover", "message_id": 223}
{"sender": 3692, "msg_type": "MouseEvent", "y": 274, "x": 237, "type": "mousemove", "message_id": 224}
{"sender": 3692, "msg_type": "MouseEvent", "y": 268, "x": 241, "type": "mousemove", "message_id": 225}
{"sender": 3692, "msg_type": "MouseEvent", "y": 252, "x": 250, "type": "mousemove", "message_id": 227}
{"sender": 3692, "msg_type": "MouseEvent", "y": 261, "x": 246, "type": "mousemove", "message_id": 226}
{"sender": 3692, "msg_type": "MouseEvent", "y": 242, "x": 255, "type": "mouseover", "message_id": 229}
{"sender": 3692, "msg_type": "MouseEvent", "y": 242, "x": 255, "type": "mouseover", "message_id": 228}
{"sender": 3692, "msg_type": "MouseEvent", "y": 242, "x": 255, "type": "mousemove", "message_id": 230}
{"sender": 3692, "msg_type": "MouseEvent", "y": 231, "x": 258, "type": "mousemove", "message_id": 231}
{"sender": 3692, "msg_type": "MouseEvent", "y": 219, "x": 260, "type": "mousemove", "message_id": 232}
{"sender": 3692, "msg_type": "MouseEvent", "y": 206, "x": 260, "type": "mouseover", "message_id": 233}
{"sender": 3692, "msg_type": "MouseEvent", "y": 206, "x": 260, "type": "mouseover", "message_id": 234}
{"sender": 3692, "msg_type": "MouseEvent", "y": 206, "x": 260, "type": "mousemove", "message_id": 235}
{"sender": 3692, "msg_type": "MouseEvent", "y": 193, "x": 259, "type": "mousemove", "message_id": 236}
{"sender": 3692, "msg_type": "MouseEvent", "y": 179, "x": 257, "type": "mouseover", "message_id": 237}
{"sender": 3692, "msg_type": "MouseEvent", "y": 179, "x": 257, "type": "mouseover", "message_id": 238}
{"sender": 3692, "msg_type": "MouseEvent", "y": 165, "x": 253, "type": "mousemove", "message_id": 240}
{"sender": 3692, "msg_type": "MouseEvent", "y": 179, "x": 257, "type": "mousemove", "message_id": 239}
{"sender": 3692, "msg_type": "MouseEvent", "y": 149, "x": 245, "type": "mousemove", "message_id": 241}
{"sender": 3692, "msg_type": "MouseEvent", "y": 129, "x": 235, "type": "mousemove", "message_id": 242}
{"sender": 3692, "msg_type": "MouseEvent", "y": 112, "x": 227, "type": "mousemove", "message_id": 243}
{"sender": 3692, "msg_type": "MouseEvent", "y": 87, "x": 218, "type": "mousemove", "message_id": 244}
{"sender": 3692, "msg_type": "MouseEvent", "y": 65, "x": 213, "type": "mousemove", "message_id": 245}
{"sender": 3692, "msg_type": "MouseEvent", "y": 47, "x": 211, "type": "mousemove", "message_id": 246}
{"sender": 3692, "msg_type": "MouseEvent", "y": 33, "x": 211, "type": "mouseover", "message_id": 247}
{"sender": 3692, "msg_type": "MouseEvent", "y": 33, "x": 211, "type": "mouseover", "message_id": 248}
{"sender": 3692, "msg_type": "MouseEvent", "y": 33, "x": 211, "type": "mousemove", "message_id": 249}
{"sender": 3692, "msg_type": "MouseEvent", "y": 24, "x": 211, "type": "mousemove", "message_id": 250}
{"sender": 3692, "msg_type": "MouseEvent", "y": 18, "x": 211, "type": "mousemove", "message_id": 251}
{"sender": 3692, "msg_type": "MouseEvent", "y": 15, "x": 210, "type": "mousemove", "message_id": 252}
{"sender": 3692, "msg_type": "MouseEvent", "y": 13, "x": 210, "type": "mousemove", "message_id": 253}
{"sender": 3692, "msg_type": "MouseEvent", "y": 13, "x": 210, "type": "mousemove", "message_id": 254}
{"sender": 3692, "msg_type": "MouseEvent", "y": 13, "x": 209, "type": "mousemove", "message_id": 255}
{"sender": 3692, "msg_type": "MouseEvent", "y": 14, "x": 209, "type": "mousemove", "message_id": 256}
{"sender": 3692, "msg_type": "MouseEvent", "y": 15, "x": 208, "type": "mousemove", "message_id": 257}
{"sender": 3692, "msg_type": "MouseEvent", "y": 17, "x": 208, "type": "mousemove", "message_id": 258}
{"sender": 3692, "msg_type": "MouseEvent", "y": 18, "x": 208, "type": "mousemove", "message_id": 259}
{"sender": 3692, "msg_type": "MouseEvent", "y": 19, "x": 208, "type": "mousemove", "message_id": 260}
{"sender": 3692, "msg_type": "MouseEvent", "y": 19, "x": 208, "type": "mousemove", "message_id": 261}
{"sender": 3692, "msg_type": "MouseEvent", "y": 20, "x": 208, "type": "mousemove", "message_id": 262}
{"sender": 3692, "msg_type": "MouseEvent", "y": 21, "x": 207, "type": "mousemove", "message_id": 263}
{"sender": 3692, "msg_type": "MouseEvent", "y": 22, "x": 207, "type": "mousemove", "message_id": 264}
{"sender": 3692, "msg_type": "MouseEvent", "y": 23, "x": 207, "type": "mousemove", "message_id": 265}
{"sender": 3692, "msg_type": "MouseEvent", "y": 24, "x": 207, "type": "mousemove", "message_id": 266}
{"sender": 3692, "msg_type": "MouseEvent", "y": 25, "x": 206, "type": "mousemove", "message_id": 267}
{"sender": 3692, "msg_type": "MouseEvent", "y": 27, "x": 204, "type": "mouseover", "message_id": 268}
{"sender": 3692, "msg_type": "MouseEvent", "y": 27, "x": 204, "type": "mouseover", "message_id": 269}
{"sender": 3692, "msg_type": "MouseEvent", "y": 27, "x": 204, "type": "mousemove", "message_id": 270}
{"sender": 3692, "msg_type": "MouseEvent", "y": 30, "x": 203, "type": "mouseover", "message_id": 271}
{"sender": 3692, "msg_type": "MouseEvent", "y": 30, "x": 203, "type": "mousemove", "message_id": 273}
{"sender": 3692, "msg_type": "MouseEvent", "y": 30, "x": 203, "type": "mouseover", "message_id": 272}
{"sender": 3692, "msg_type": "MouseEvent", "y": 32, "x": 200, "type": "mouseover", "message_id": 274}
{"sender": 3692, "msg_type": "MouseEvent", "y": 32, "x": 200, "type": "mouseover", "message_id": 275}
{"sender": 3692, "msg_type": "MouseEvent", "y": 32, "x": 200, "type": "mousemove", "message_id": 276}
{"sender": 3692, "msg_type": "MouseEvent", "y": 34, "x": 198, "type": "mousemove", "message_id": 277}
{"sender": 3692, "msg_type": "MouseEvent", "y": 36, "x": 196, "type": "mousemove", "message_id": 278}
{"sender": 3692, "msg_type": "MouseEvent", "y": 37, "x": 195, "type": "mouseover", "message_id": 279}

View File

@ -0,0 +1,962 @@
{"panX": -409.47752934156085, "panY": -220.16629034286456, "scale": 2.609999999999994, "sender": 3699, "msg_type": "ViewPort", "message_id": 0}
{"sender": 3699, "msg_type": "MouseEvent", "y": 48, "x": 183, "type": "mousemove", "message_id": 1222}
{"sender": 3699, "msg_type": "MouseEvent", "y": 48, "x": 184, "type": "mousemove", "message_id": 1223}
{"sender": 3699, "msg_type": "MouseEvent", "y": 49, "x": 186, "type": "mouseover", "message_id": 1224}
{"sender": 3699, "msg_type": "MouseEvent", "y": 49, "x": 186, "type": "mouseover", "message_id": 1225}
{"sender": 3699, "msg_type": "MouseEvent", "y": 49, "x": 188, "type": "mousemove", "message_id": 1227}
{"sender": 3699, "msg_type": "MouseEvent", "y": 49, "x": 186, "type": "mousemove", "message_id": 1226}
{"sender": 3699, "msg_type": "MouseEvent", "y": 50, "x": 189, "type": "mouseover", "message_id": 1228}
{"sender": 3699, "msg_type": "MouseEvent", "y": 50, "x": 189, "type": "mouseover", "message_id": 1229}
{"sender": 3699, "msg_type": "MouseEvent", "y": 50, "x": 189, "type": "mousemove", "message_id": 1230}
{"sender": 3699, "msg_type": "MouseEvent", "y": 50, "x": 190, "type": "mousemove", "message_id": 1231}
{"sender": 3699, "msg_type": "MouseEvent", "y": 50, "x": 191, "type": "mousemove", "message_id": 1232}
{"sender": 3699, "msg_type": "MouseEvent", "y": 51, "x": 191, "type": "mousemove", "message_id": 1233}
{"sender": 3699, "msg_type": "MouseEvent", "y": 51, "x": 191, "type": "mousemove", "message_id": 1234}
{"sender": 3699, "msg_type": "MouseEvent", "y": 53, "x": 191, "type": "mousemove", "message_id": 1235}
{"sender": 3699, "msg_type": "MouseEvent", "y": 55, "x": 191, "type": "mousemove", "message_id": 1236}
{"sender": 3699, "msg_type": "MouseEvent", "y": 59, "x": 191, "type": "mousemove", "message_id": 1237}
{"sender": 3699, "msg_type": "MouseEvent", "y": 64, "x": 191, "type": "mousemove", "message_id": 1238}
{"sender": 3699, "msg_type": "MouseEvent", "y": 69, "x": 192, "type": "mousemove", "message_id": 1239}
{"sender": 3699, "msg_type": "MouseEvent", "y": 77, "x": 194, "type": "mouseover", "message_id": 1240}
{"sender": 3699, "msg_type": "MouseEvent", "y": 77, "x": 194, "type": "mouseover", "message_id": 1241}
{"sender": 3699, "msg_type": "MouseEvent", "y": 77, "x": 194, "type": "mousemove", "message_id": 1242}
{"sender": 3699, "msg_type": "MouseEvent", "y": 84, "x": 197, "type": "mousemove", "message_id": 1243}
{"sender": 3699, "msg_type": "MouseEvent", "y": 97, "x": 205, "type": "mousemove", "message_id": 1244}
{"sender": 3699, "msg_type": "MouseEvent", "y": 111, "x": 216, "type": "mousemove", "message_id": 1245}
{"sender": 3699, "msg_type": "MouseEvent", "y": 127, "x": 229, "type": "mousemove", "message_id": 1246}
{"sender": 3699, "msg_type": "MouseEvent", "y": 144, "x": 241, "type": "mousemove", "message_id": 1247}
{"sender": 3699, "msg_type": "MouseEvent", "y": 161, "x": 250, "type": "mousemove", "message_id": 1248}
{"sender": 3699, "msg_type": "MouseEvent", "y": 176, "x": 254, "type": "mousemove", "message_id": 1249}
{"sender": 3699, "msg_type": "MouseEvent", "y": 188, "x": 254, "type": "mouseover", "message_id": 1251}
{"sender": 3699, "msg_type": "MouseEvent", "y": 188, "x": 254, "type": "mouseover", "message_id": 1250}
{"sender": 3699, "msg_type": "MouseEvent", "y": 188, "x": 254, "type": "mousemove", "message_id": 1252}
{"sender": 3699, "msg_type": "MouseEvent", "y": 200, "x": 253, "type": "mousemove", "message_id": 1253}
{"sender": 3699, "msg_type": "MouseEvent", "y": 213, "x": 249, "type": "mouseover", "message_id": 1254}
{"sender": 3699, "msg_type": "MouseEvent", "y": 213, "x": 249, "type": "mouseover", "message_id": 1255}
{"sender": 3699, "msg_type": "MouseEvent", "y": 213, "x": 249, "type": "mousemove", "message_id": 1256}
{"sender": 3699, "msg_type": "MouseEvent", "y": 224, "x": 245, "type": "mousemove", "message_id": 1257}
{"sender": 3699, "msg_type": "MouseEvent", "y": 239, "x": 238, "type": "mousemove", "message_id": 1258}
{"sender": 3699, "msg_type": "MouseEvent", "y": 252, "x": 232, "type": "mousemove", "message_id": 1259}
{"sender": 3699, "msg_type": "MouseEvent", "y": 262, "x": 226, "type": "mousemove", "message_id": 1260}
{"sender": 3699, "msg_type": "MouseEvent", "y": 271, "x": 220, "type": "mousemove", "message_id": 1261}
{"sender": 3699, "msg_type": "MouseEvent", "y": 281, "x": 214, "type": "mousemove", "message_id": 1262}
{"sender": 3699, "msg_type": "MouseEvent", "y": 289, "x": 209, "type": "mousemove", "message_id": 1263}
{"sender": 3699, "msg_type": "MouseEvent", "y": 294, "x": 206, "type": "mousemove", "message_id": 1264}
{"sender": 3699, "msg_type": "MouseEvent", "y": 296, "x": 205, "type": "mouseover", "message_id": 1265}
{"sender": 3699, "msg_type": "MouseEvent", "y": 296, "x": 205, "type": "mouseover", "message_id": 1266}
{"sender": 3699, "msg_type": "MouseEvent", "y": 296, "x": 205, "type": "mousemove", "message_id": 1267}
{"sender": 3699, "msg_type": "MouseEvent", "y": 296, "x": 205, "type": "mousemove", "message_id": 1268}
{"sender": 3699, "msg_type": "MouseEvent", "y": 295, "x": 205, "type": "mousemove", "message_id": 1269}
{"sender": 3699, "msg_type": "MouseEvent", "y": 293, "x": 205, "type": "mousemove", "message_id": 1270}
{"sender": 3699, "msg_type": "MouseEvent", "y": 290, "x": 205, "type": "mousemove", "message_id": 1271}
{"sender": 3699, "msg_type": "MouseEvent", "y": 286, "x": 204, "type": "mousemove", "message_id": 1272}
{"sender": 3699, "msg_type": "MouseEvent", "y": 283, "x": 204, "type": "mousemove", "message_id": 1273}
{"sender": 3699, "msg_type": "MouseEvent", "y": 280, "x": 203, "type": "mousemove", "message_id": 1274}
{"sender": 3699, "msg_type": "MouseEvent", "y": 278, "x": 203, "type": "mousemove", "message_id": 1275}
{"sender": 3699, "msg_type": "MouseEvent", "y": 277, "x": 203, "type": "mousemove", "message_id": 1276}
{"originalEvent": {"metaKey": false}, "sender": 3699, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": -1, "delta": -1, "type": "wheel", "message_id": 1277}
{"originalEvent": {"metaKey": false}, "sender": 3699, "msg_type": "MouseWheelEvent", "deltaX": -1, "deltaY": -1, "delta": -1, "type": "wheel", "message_id": 1278}
{"sender": 3699, "msg_type": "MouseEvent", "y": 277, "x": 203, "type": "mousedown", "message_id": 1279}
{"originalEvent": {"metaKey": false}, "sender": 3699, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": -1, "delta": -1, "type": "wheel", "message_id": 1280}
{"originalEvent": {"metaKey": false}, "sender": 3699, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": -2, "delta": -2, "type": "wheel", "message_id": 1281}
{"sender": 3699, "msg_type": "MouseEvent", "y": 277, "x": 203, "type": "mouseup", "message_id": 1282}
{"originalEvent": {"metaKey": false}, "sender": 3699, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": 2, "delta": 2, "type": "wheel", "message_id": 1283}
{"sender": 3699, "msg_type": "MouseEvent", "y": 278, "x": 202, "type": "mousemove", "message_id": 1284}
{"sender": 3699, "msg_type": "MouseEvent", "y": 280, "x": 201, "type": "mousemove", "message_id": 1285}
{"sender": 3699, "msg_type": "MouseEvent", "y": 283, "x": 200, "type": "mousemove", "message_id": 1286}
{"sender": 3699, "msg_type": "MouseEvent", "y": 284, "x": 200, "type": "mousemove", "message_id": 1287}
{"sender": 3699, "msg_type": "MouseEvent", "y": 284, "x": 200, "type": "mousemove", "message_id": 1288}
{"sender": 3699, "msg_type": "MouseEvent", "y": 285, "x": 200, "type": "mousemove", "message_id": 1289}
{"sender": 3699, "msg_type": "MouseEvent", "y": 285, "x": 200, "type": "mousemove", "message_id": 1290}
{"sender": 3699, "msg_type": "MouseEvent", "y": 285, "x": 200, "type": "mousemove", "message_id": 1291}
{"sender": 3699, "msg_type": "MouseEvent", "y": 286, "x": 200, "type": "mousemove", "message_id": 1292}
{"sender": 3699, "msg_type": "MouseEvent", "y": 286, "x": 200, "type": "mousemove", "message_id": 1293}
{"sender": 3699, "msg_type": "MouseEvent", "y": 286, "x": 200, "type": "mousemove", "message_id": 1295}
{"sender": 3699, "msg_type": "MouseEvent", "y": 286, "x": 200, "type": "mousemove", "message_id": 1294}
{"sender": 3699, "msg_type": "MouseEvent", "y": 286, "x": 200, "type": "mousemove", "message_id": 1296}
{"sender": 3699, "msg_type": "KeyEvent", "shiftKey": false, "message_id": 1297, "altKey": false, "metaKey": false, "key": "s", "ctrlKey": false, "type": "keydown", "keyCode": 83}
{"sender": 3699, "msg_type": "MouseEvent", "y": 286, "x": 200, "type": "mousemove", "message_id": 1299}
{"sender": 3699, "msg_type": "MouseEvent", "y": 287, "x": 200, "type": "mousemove", "message_id": 1300}
{"sender": 3699, "msg_type": "MouseEvent", "y": 287, "x": 203, "type": "mouseover", "message_id": 1301}
{"sender": 3699, "msg_type": "MouseEvent", "y": 287, "x": 203, "type": "mousemove", "message_id": 1303}
{"sender": 3699, "msg_type": "MouseEvent", "y": 287, "x": 203, "type": "mouseover", "message_id": 1302}
{"sender": 3699, "msg_type": "MouseEvent", "y": 288, "x": 209, "type": "mousemove", "message_id": 1304}
{"sender": 3699, "msg_type": "MouseEvent", "y": 290, "x": 222, "type": "mouseover", "message_id": 1305}
{"sender": 3699, "msg_type": "MouseEvent", "y": 290, "x": 222, "type": "mouseover", "message_id": 1306}
{"sender": 3699, "msg_type": "MouseEvent", "y": 291, "x": 241, "type": "mousemove", "message_id": 1308}
{"sender": 3699, "msg_type": "MouseEvent", "y": 290, "x": 222, "type": "mousemove", "message_id": 1307}
{"sender": 3699, "msg_type": "MouseEvent", "y": 291, "x": 270, "type": "mouseover", "message_id": 1309}
{"sender": 3699, "msg_type": "MouseEvent", "y": 291, "x": 270, "type": "mouseover", "message_id": 1310}
{"sender": 3699, "msg_type": "MouseEvent", "y": 290, "x": 312, "type": "mousemove", "message_id": 1312}
{"sender": 3699, "msg_type": "MouseEvent", "y": 290, "x": 353, "type": "mouseover", "message_id": 1313}
{"sender": 3699, "msg_type": "MouseEvent", "y": 291, "x": 270, "type": "mousemove", "message_id": 1311}
{"sender": 3699, "msg_type": "MouseEvent", "y": 290, "x": 353, "type": "mouseover", "message_id": 1314}
{"sender": 3699, "msg_type": "MouseEvent", "y": 290, "x": 353, "type": "mousemove", "message_id": 1315}
{"sender": 3699, "msg_type": "MouseEvent", "y": 287, "x": 440, "type": "mousemove", "message_id": 1317}
{"sender": 3699, "msg_type": "MouseEvent", "y": 288, "x": 404, "type": "mousemove", "message_id": 1316}
{"sender": 3699, "msg_type": "MouseEvent", "y": 285, "x": 489, "type": "mousemove", "message_id": 1318}
{"sender": 3699, "msg_type": "MouseEvent", "y": 284, "x": 526, "type": "mousemove", "message_id": 1319}
{"sender": 3699, "msg_type": "MouseEvent", "y": 284, "x": 545, "type": "mousemove", "message_id": 1320}
{"sender": 3699, "msg_type": "MouseEvent", "y": 284, "x": 568, "type": "mousemove", "message_id": 1321}
{"sender": 3699, "msg_type": "MouseEvent", "y": 285, "x": 584, "type": "mousemove", "message_id": 1322}
{"sender": 3699, "msg_type": "MouseEvent", "y": 285, "x": 594, "type": "mouseover", "message_id": 1323}
{"sender": 3699, "msg_type": "MouseEvent", "y": 285, "x": 594, "type": "mouseover", "message_id": 1324}
{"sender": 3699, "msg_type": "MouseEvent", "y": 285, "x": 594, "type": "mousemove", "message_id": 1325}
{"sender": 3699, "msg_type": "MouseEvent", "y": 285, "x": 598, "type": "mousemove", "message_id": 1326}
{"sender": 3699, "msg_type": "MouseEvent", "y": 285, "x": 601, "type": "mousemove", "message_id": 1327}
{"sender": 3699, "msg_type": "MouseEvent", "y": 285, "x": 602, "type": "mouseover", "message_id": 1329}
{"sender": 3699, "msg_type": "MouseEvent", "y": 285, "x": 602, "type": "mouseover", "message_id": 1328}
{"sender": 3699, "msg_type": "MouseEvent", "y": 285, "x": 602, "type": "mousemove", "message_id": 1330}
{"sender": 3699, "msg_type": "MouseEvent", "y": 285, "x": 603, "type": "mousemove", "message_id": 1331}
{"sender": 3699, "msg_type": "MouseEvent", "y": 285, "x": 605, "type": "mouseover", "message_id": 1332}
{"sender": 3699, "msg_type": "MouseEvent", "y": 285, "x": 605, "type": "mouseover", "message_id": 1333}
{"sender": 3699, "msg_type": "MouseEvent", "y": 285, "x": 605, "type": "mousemove", "message_id": 1334}
{"sender": 3699, "msg_type": "MouseEvent", "y": 285, "x": 609, "type": "mousemove", "message_id": 1335}
{"sender": 3699, "msg_type": "MouseEvent", "y": 285, "x": 617, "type": "mousemove", "message_id": 1336}
{"sender": 3699, "msg_type": "MouseEvent", "y": 285, "x": 624, "type": "mousemove", "message_id": 1337}
{"sender": 3699, "msg_type": "MouseEvent", "y": 285, "x": 635, "type": "mousemove", "message_id": 1338}
{"sender": 3699, "msg_type": "MouseEvent", "y": 285, "x": 645, "type": "mousemove", "message_id": 1339}
{"sender": 3699, "msg_type": "MouseEvent", "y": 285, "x": 652, "type": "mousemove", "message_id": 1340}
{"sender": 3699, "msg_type": "MouseEvent", "y": 285, "x": 655, "type": "mousemove", "message_id": 1341}
{"sender": 3699, "msg_type": "MouseEvent", "y": 285, "x": 656, "type": "mouseover", "message_id": 1342}
{"sender": 3699, "msg_type": "MouseEvent", "y": 285, "x": 656, "type": "mousemove", "message_id": 1344}
{"sender": 3699, "msg_type": "MouseEvent", "y": 285, "x": 656, "type": "mouseover", "message_id": 1343}
{"sender": 3699, "msg_type": "MouseEvent", "y": 285, "x": 656, "type": "mousedown", "message_id": 1345}
{"sender": 3699, "msg_type": "MouseEvent", "y": 285, "x": 656, "type": "mouseup", "message_id": 1346}
{"sender": 3699, "msg_type": "MouseEvent", "y": 285, "x": 655, "type": "mousemove", "message_id": 1347}
{"sender": 3699, "msg_type": "MouseEvent", "y": 285, "x": 655, "type": "mousemove", "message_id": 1348}
{"sender": 3699, "msg_type": "MouseEvent", "y": 285, "x": 655, "type": "mousemove", "message_id": 1349}
{"sender": 3699, "msg_type": "MouseEvent", "y": 285, "x": 654, "type": "mousemove", "message_id": 1350}
{"sender": 3699, "msg_type": "MouseEvent", "y": 285, "x": 654, "type": "mousemove", "message_id": 1351}
{"sender": 3699, "msg_type": "MouseEvent", "y": 285, "x": 654, "type": "mousemove", "message_id": 1352}
{"sender": 3699, "msg_type": "MouseEvent", "y": 285, "x": 654, "type": "mousemove", "message_id": 1353}
{"sender": 3699, "msg_type": "MouseEvent", "y": 284, "x": 653, "type": "mousemove", "message_id": 1354}
{"sender": 3699, "msg_type": "MouseEvent", "y": 284, "x": 653, "type": "mousemove", "message_id": 1355}
{"sender": 3699, "msg_type": "MouseEvent", "y": 284, "x": 653, "type": "mousemove", "message_id": 1356}
{"sender": 3699, "msg_type": "MouseEvent", "y": 283, "x": 653, "type": "mousemove", "message_id": 1357}
{"sender": 3699, "msg_type": "KeyEvent", "shiftKey": false, "message_id": 1358, "altKey": false, "metaKey": false, "key": "s", "ctrlKey": false, "type": "keydown", "keyCode": 83}
{"sender": 3699, "msg_type": "KeyEvent", "shiftKey": false, "message_id": 1360, "altKey": false, "metaKey": false, "key": "l", "ctrlKey": false, "type": "keydown", "keyCode": 76}
{"sender": 3699, "msg_type": "MouseEvent", "y": 283, "x": 653, "type": "mousedown", "message_id": 1361}
{"sender": 3699, "msg_type": "MouseEvent", "y": 283, "x": 653, "type": "mouseup", "message_id": 1362}
{"sender": 3699, "msg_type": "MouseEvent", "y": 283, "x": 648, "type": "mouseover", "message_id": 1364}
{"sender": 3699, "msg_type": "MouseEvent", "y": 283, "x": 648, "type": "mouseover", "message_id": 1365}
{"sender": 3699, "msg_type": "MouseEvent", "y": 283, "x": 648, "type": "mousemove", "message_id": 1366}
{"sender": 3699, "msg_type": "MouseEvent", "y": 283, "x": 635, "type": "mousemove", "message_id": 1367}
{"sender": 3699, "msg_type": "MouseEvent", "y": 282, "x": 610, "type": "mouseover", "message_id": 1369}
{"sender": 3699, "msg_type": "MouseEvent", "y": 282, "x": 610, "type": "mouseover", "message_id": 1368}
{"sender": 3699, "msg_type": "MouseEvent", "y": 282, "x": 610, "type": "mousemove", "message_id": 1370}
{"sender": 3699, "msg_type": "MouseEvent", "y": 281, "x": 580, "type": "mouseover", "message_id": 1371}
{"sender": 3699, "msg_type": "MouseEvent", "y": 281, "x": 580, "type": "mouseover", "message_id": 1372}
{"sender": 3699, "msg_type": "MouseEvent", "y": 281, "x": 580, "type": "mousemove", "message_id": 1373}
{"sender": 3699, "msg_type": "MouseEvent", "y": 279, "x": 546, "type": "mousemove", "message_id": 1374}
{"sender": 3699, "msg_type": "MouseEvent", "y": 276, "x": 521, "type": "mousemove", "message_id": 1375}
{"sender": 3699, "msg_type": "MouseEvent", "y": 273, "x": 487, "type": "mouseover", "message_id": 1376}
{"sender": 3699, "msg_type": "MouseEvent", "y": 273, "x": 487, "type": "mouseover", "message_id": 1377}
{"sender": 3699, "msg_type": "MouseEvent", "y": 273, "x": 487, "type": "mousemove", "message_id": 1378}
{"sender": 3699, "msg_type": "MouseEvent", "y": 272, "x": 459, "type": "mousemove", "message_id": 1379}
{"sender": 3699, "msg_type": "MouseEvent", "y": 271, "x": 433, "type": "mousemove", "message_id": 1380}
{"sender": 3699, "msg_type": "MouseEvent", "y": 270, "x": 418, "type": "mouseover", "message_id": 1381}
{"sender": 3699, "msg_type": "MouseEvent", "y": 270, "x": 418, "type": "mouseover", "message_id": 1382}
{"sender": 3699, "msg_type": "MouseEvent", "y": 270, "x": 418, "type": "mousemove", "message_id": 1383}
{"sender": 3699, "msg_type": "MouseEvent", "y": 270, "x": 403, "type": "mousemove", "message_id": 1384}
{"sender": 3699, "msg_type": "MouseEvent", "y": 269, "x": 395, "type": "mousemove", "message_id": 1385}
{"sender": 3699, "msg_type": "MouseEvent", "y": 269, "x": 392, "type": "mousemove", "message_id": 1386}
{"sender": 3699, "msg_type": "MouseEvent", "y": 269, "x": 390, "type": "mousemove", "message_id": 1387}
{"sender": 3699, "msg_type": "MouseEvent", "y": 270, "x": 389, "type": "mouseover", "message_id": 1388}
{"sender": 3699, "msg_type": "MouseEvent", "y": 270, "x": 389, "type": "mouseover", "message_id": 1389}
{"sender": 3699, "msg_type": "MouseEvent", "y": 270, "x": 389, "type": "mousemove", "message_id": 1390}
{"sender": 3699, "msg_type": "MouseEvent", "y": 270, "x": 389, "type": "mousemove", "message_id": 1391}
{"sender": 3699, "msg_type": "MouseEvent", "y": 271, "x": 387, "type": "mouseover", "message_id": 1392}
{"sender": 3699, "msg_type": "MouseEvent", "y": 271, "x": 387, "type": "mouseover", "message_id": 1393}
{"sender": 3699, "msg_type": "MouseEvent", "y": 271, "x": 387, "type": "mousemove", "message_id": 1394}
{"sender": 3699, "msg_type": "MouseEvent", "y": 272, "x": 384, "type": "mousemove", "message_id": 1395}
{"sender": 3699, "msg_type": "MouseEvent", "y": 272, "x": 380, "type": "mousemove", "message_id": 1396}
{"sender": 3699, "msg_type": "MouseEvent", "y": 273, "x": 376, "type": "mousemove", "message_id": 1397}
{"sender": 3699, "msg_type": "MouseEvent", "y": 274, "x": 373, "type": "mousemove", "message_id": 1398}
{"sender": 3699, "msg_type": "MouseEvent", "y": 274, "x": 371, "type": "mousemove", "message_id": 1399}
{"sender": 3699, "msg_type": "MouseEvent", "y": 275, "x": 367, "type": "mousemove", "message_id": 1400}
{"sender": 3699, "msg_type": "MouseEvent", "y": 276, "x": 363, "type": "mousemove", "message_id": 1401}
{"sender": 3699, "msg_type": "MouseEvent", "y": 277, "x": 357, "type": "mousemove", "message_id": 1402}
{"sender": 3699, "msg_type": "MouseEvent", "y": 277, "x": 351, "type": "mousemove", "message_id": 1403}
{"sender": 3699, "msg_type": "MouseEvent", "y": 278, "x": 344, "type": "mousemove", "message_id": 1404}
{"sender": 3699, "msg_type": "MouseEvent", "y": 278, "x": 337, "type": "mousemove", "message_id": 1405}
{"sender": 3699, "msg_type": "MouseEvent", "y": 278, "x": 332, "type": "mousemove", "message_id": 1406}
{"sender": 3699, "msg_type": "MouseEvent", "y": 278, "x": 329, "type": "mousemove", "message_id": 1407}
{"sender": 3699, "msg_type": "MouseEvent", "y": 278, "x": 327, "type": "mousemove", "message_id": 1408}
{"sender": 3699, "msg_type": "MouseEvent", "y": 278, "x": 326, "type": "mouseover", "message_id": 1409}
{"sender": 3699, "msg_type": "MouseEvent", "y": 278, "x": 326, "type": "mouseover", "message_id": 1410}
{"sender": 3699, "msg_type": "MouseEvent", "y": 278, "x": 326, "type": "mousemove", "message_id": 1411}
{"sender": 3699, "msg_type": "MouseEvent", "y": 278, "x": 325, "type": "mousemove", "message_id": 1412}
{"sender": 3699, "msg_type": "MouseEvent", "y": 278, "x": 324, "type": "mousemove", "message_id": 1413}
{"sender": 3699, "msg_type": "MouseEvent", "y": 278, "x": 323, "type": "mousemove", "message_id": 1414}
{"sender": 3699, "msg_type": "MouseEvent", "y": 278, "x": 321, "type": "mouseover", "message_id": 1415}
{"sender": 3699, "msg_type": "MouseEvent", "y": 278, "x": 321, "type": "mouseover", "message_id": 1416}
{"sender": 3699, "msg_type": "MouseEvent", "y": 278, "x": 321, "type": "mousemove", "message_id": 1417}
{"sender": 3699, "msg_type": "MouseEvent", "y": 278, "x": 320, "type": "mouseover", "message_id": 1418}
{"sender": 3699, "msg_type": "MouseEvent", "y": 278, "x": 320, "type": "mouseover", "message_id": 1419}
{"sender": 3699, "msg_type": "MouseEvent", "y": 278, "x": 320, "type": "mousemove", "message_id": 1420}
{"sender": 3699, "msg_type": "MouseEvent", "y": 278, "x": 318, "type": "mouseover", "message_id": 1421}
{"sender": 3699, "msg_type": "MouseEvent", "y": 278, "x": 318, "type": "mouseover", "message_id": 1422}
{"sender": 3699, "msg_type": "MouseEvent", "y": 278, "x": 318, "type": "mousemove", "message_id": 1423}
{"sender": 3699, "msg_type": "MouseEvent", "y": 278, "x": 317, "type": "mouseover", "message_id": 1424}
{"sender": 3699, "msg_type": "MouseEvent", "y": 278, "x": 317, "type": "mouseover", "message_id": 1425}
{"sender": 3699, "msg_type": "MouseEvent", "y": 278, "x": 317, "type": "mousemove", "message_id": 1426}
{"sender": 3699, "msg_type": "MouseEvent", "y": 278, "x": 317, "type": "mousedown", "message_id": 1427}
{"sender": 3699, "msg_type": "MouseEvent", "y": 278, "x": 316, "type": "mousemove", "message_id": 1428}
{"sender": 3699, "msg_type": "MouseEvent", "y": 278, "x": 316, "type": "mouseup", "message_id": 1429}
{"sender": 3699, "msg_type": "MouseEvent", "y": 279, "x": 316, "type": "mousemove", "message_id": 1434}
{"sender": 3699, "msg_type": "MouseEvent", "y": 279, "x": 315, "type": "mousemove", "message_id": 1435}
{"sender": 3699, "msg_type": "MouseEvent", "y": 279, "x": 313, "type": "mouseover", "message_id": 1436}
{"sender": 3699, "msg_type": "MouseEvent", "y": 279, "x": 313, "type": "mouseover", "message_id": 1437}
{"sender": 3699, "msg_type": "MouseEvent", "y": 279, "x": 313, "type": "mousemove", "message_id": 1438}
{"sender": 3699, "msg_type": "MouseEvent", "y": 280, "x": 311, "type": "mousemove", "message_id": 1439}
{"sender": 3699, "msg_type": "MouseEvent", "y": 280, "x": 310, "type": "mouseover", "message_id": 1440}
{"sender": 3699, "msg_type": "MouseEvent", "y": 280, "x": 310, "type": "mouseover", "message_id": 1441}
{"sender": 3699, "msg_type": "MouseEvent", "y": 280, "x": 310, "type": "mousemove", "message_id": 1442}
{"sender": 3699, "msg_type": "MouseEvent", "y": 280, "x": 309, "type": "mousemove", "message_id": 1443}
{"sender": 3699, "msg_type": "MouseEvent", "y": 281, "x": 308, "type": "mousemove", "message_id": 1444}
{"sender": 3699, "msg_type": "MouseEvent", "y": 281, "x": 307, "type": "mousemove", "message_id": 1445}
{"sender": 3699, "msg_type": "MouseEvent", "y": 282, "x": 304, "type": "mouseover", "message_id": 1446}
{"sender": 3699, "msg_type": "MouseEvent", "y": 282, "x": 304, "type": "mouseover", "message_id": 1447}
{"sender": 3699, "msg_type": "MouseEvent", "y": 282, "x": 304, "type": "mousemove", "message_id": 1448}
{"sender": 3699, "msg_type": "MouseEvent", "y": 282, "x": 300, "type": "mousemove", "message_id": 1449}
{"sender": 3699, "msg_type": "MouseEvent", "y": 283, "x": 296, "type": "mousemove", "message_id": 1450}
{"sender": 3699, "msg_type": "MouseEvent", "y": 283, "x": 291, "type": "mousemove", "message_id": 1451}
{"sender": 3699, "msg_type": "MouseEvent", "y": 283, "x": 288, "type": "mousemove", "message_id": 1452}
{"sender": 3699, "msg_type": "MouseEvent", "y": 283, "x": 287, "type": "mouseover", "message_id": 1453}
{"sender": 3699, "msg_type": "MouseEvent", "y": 283, "x": 287, "type": "mouseover", "message_id": 1454}
{"sender": 3699, "msg_type": "MouseEvent", "y": 283, "x": 287, "type": "mousemove", "message_id": 1455}
{"sender": 3699, "msg_type": "MouseEvent", "y": 283, "x": 286, "type": "mousemove", "message_id": 1456}
{"sender": 3699, "msg_type": "MouseEvent", "y": 283, "x": 284, "type": "mouseover", "message_id": 1457}
{"sender": 3699, "msg_type": "MouseEvent", "y": 283, "x": 284, "type": "mouseover", "message_id": 1458}
{"sender": 3699, "msg_type": "MouseEvent", "y": 283, "x": 284, "type": "mousemove", "message_id": 1459}
{"sender": 3699, "msg_type": "MouseEvent", "y": 283, "x": 283, "type": "mouseover", "message_id": 1460}
{"sender": 3699, "msg_type": "MouseEvent", "y": 283, "x": 283, "type": "mouseover", "message_id": 1461}
{"sender": 3699, "msg_type": "MouseEvent", "y": 283, "x": 283, "type": "mousemove", "message_id": 1462}
{"sender": 3699, "msg_type": "MouseEvent", "y": 284, "x": 280, "type": "mouseover", "message_id": 1463}
{"sender": 3699, "msg_type": "MouseEvent", "y": 284, "x": 280, "type": "mouseover", "message_id": 1464}
{"sender": 3699, "msg_type": "MouseEvent", "y": 284, "x": 280, "type": "mousemove", "message_id": 1465}
{"sender": 3699, "msg_type": "MouseEvent", "y": 284, "x": 274, "type": "mousemove", "message_id": 1467}
{"sender": 3699, "msg_type": "MouseEvent", "y": 284, "x": 277, "type": "mousemove", "message_id": 1466}
{"sender": 3699, "msg_type": "MouseEvent", "y": 284, "x": 272, "type": "mousemove", "message_id": 1468}
{"sender": 3699, "msg_type": "MouseEvent", "y": 284, "x": 270, "type": "mousemove", "message_id": 1469}
{"sender": 3699, "msg_type": "MouseEvent", "y": 284, "x": 269, "type": "mouseover", "message_id": 1470}
{"sender": 3699, "msg_type": "MouseEvent", "y": 284, "x": 269, "type": "mouseover", "message_id": 1471}
{"sender": 3699, "msg_type": "MouseEvent", "y": 284, "x": 269, "type": "mousemove", "message_id": 1472}
{"sender": 3699, "msg_type": "MouseEvent", "y": 284, "x": 268, "type": "mousemove", "message_id": 1473}
{"sender": 3699, "msg_type": "MouseEvent", "y": 284, "x": 268, "type": "mousemove", "message_id": 1474}
{"sender": 3699, "msg_type": "MouseEvent", "y": 284, "x": 268, "type": "mousemove", "message_id": 1475}
{"sender": 3699, "msg_type": "MouseEvent", "y": 283, "x": 268, "type": "mousemove", "message_id": 1476}
{"sender": 3699, "msg_type": "MouseEvent", "y": 283, "x": 268, "type": "mousemove", "message_id": 1477}
{"sender": 3699, "msg_type": "MouseEvent", "y": 283, "x": 268, "type": "mousemove", "message_id": 1478}
{"sender": 3699, "msg_type": "MouseEvent", "y": 282, "x": 268, "type": "mousemove", "message_id": 1479}
{"sender": 3699, "msg_type": "MouseEvent", "y": 281, "x": 268, "type": "mousemove", "message_id": 1480}
{"sender": 3699, "msg_type": "MouseEvent", "y": 281, "x": 268, "type": "mousemove", "message_id": 1481}
{"sender": 3699, "msg_type": "MouseEvent", "y": 280, "x": 268, "type": "mousemove", "message_id": 1482}
{"sender": 3699, "msg_type": "MouseEvent", "y": 280, "x": 268, "type": "mousemove", "message_id": 1483}
{"sender": 3699, "msg_type": "MouseEvent", "y": 280, "x": 268, "type": "mousedown", "message_id": 1484}
{"sender": 3699, "msg_type": "MouseEvent", "y": 280, "x": 268, "type": "mouseup", "message_id": 1486}
{"sender": 3699, "msg_type": "MouseEvent", "y": 280, "x": 269, "type": "mousemove", "message_id": 1487}
{"sender": 3699, "msg_type": "MouseEvent", "y": 280, "x": 270, "type": "mousemove", "message_id": 1488}
{"sender": 3699, "msg_type": "MouseEvent", "y": 280, "x": 270, "type": "mousemove", "message_id": 1489}
{"sender": 3699, "msg_type": "MouseEvent", "y": 280, "x": 271, "type": "mousemove", "message_id": 1490}
{"sender": 3699, "msg_type": "MouseEvent", "y": 280, "x": 271, "type": "mousemove", "message_id": 1491}
{"sender": 3699, "msg_type": "MouseEvent", "y": 280, "x": 271, "type": "mousemove", "message_id": 1492}
{"sender": 3699, "msg_type": "MouseEvent", "y": 280, "x": 271, "type": "mousemove", "message_id": 1493}
{"sender": 3699, "msg_type": "MouseEvent", "y": 280, "x": 271, "type": "mousedown", "message_id": 1494}
{"sender": 3699, "msg_type": "MouseEvent", "y": 280, "x": 271, "type": "mouseup", "message_id": 1497}
{"sender": 3699, "msg_type": "KeyEvent", "shiftKey": false, "message_id": 1498, "altKey": false, "metaKey": false, "key": "1", "ctrlKey": false, "type": "keydown", "keyCode": 49}
{"sender": 3699, "msg_type": "MouseEvent", "y": 280, "x": 271, "type": "mousemove", "message_id": 1500}
{"sender": 3699, "msg_type": "MouseEvent", "y": 280, "x": 273, "type": "mouseover", "message_id": 1501}
{"sender": 3699, "msg_type": "MouseEvent", "y": 280, "x": 273, "type": "mousemove", "message_id": 1503}
{"sender": 3699, "msg_type": "MouseEvent", "y": 280, "x": 273, "type": "mouseover", "message_id": 1502}
{"sender": 3699, "msg_type": "MouseEvent", "y": 280, "x": 276, "type": "mousemove", "message_id": 1504}
{"sender": 3699, "msg_type": "MouseEvent", "y": 279, "x": 278, "type": "mousemove", "message_id": 1505}
{"sender": 3699, "msg_type": "MouseEvent", "y": 279, "x": 281, "type": "mousemove", "message_id": 1506}
{"sender": 3699, "msg_type": "MouseEvent", "y": 279, "x": 283, "type": "mousemove", "message_id": 1507}
{"sender": 3699, "msg_type": "MouseEvent", "y": 279, "x": 287, "type": "mousemove", "message_id": 1508}
{"sender": 3699, "msg_type": "MouseEvent", "y": 279, "x": 294, "type": "mousemove", "message_id": 1509}
{"sender": 3699, "msg_type": "MouseEvent", "y": 278, "x": 306, "type": "mousemove", "message_id": 1510}
{"sender": 3699, "msg_type": "MouseEvent", "y": 277, "x": 326, "type": "mouseover", "message_id": 1511}
{"sender": 3699, "msg_type": "MouseEvent", "y": 277, "x": 326, "type": "mouseover", "message_id": 1512}
{"sender": 3699, "msg_type": "MouseEvent", "y": 277, "x": 326, "type": "mousemove", "message_id": 1513}
{"sender": 3699, "msg_type": "MouseEvent", "y": 275, "x": 355, "type": "mouseover", "message_id": 1515}
{"sender": 3699, "msg_type": "MouseEvent", "y": 275, "x": 355, "type": "mouseover", "message_id": 1514}
{"sender": 3699, "msg_type": "MouseEvent", "y": 275, "x": 355, "type": "mousemove", "message_id": 1516}
{"sender": 3699, "msg_type": "MouseEvent", "y": 271, "x": 395, "type": "mousemove", "message_id": 1517}
{"sender": 3699, "msg_type": "MouseEvent", "y": 265, "x": 443, "type": "mousemove", "message_id": 1518}
{"sender": 3699, "msg_type": "MouseEvent", "y": 262, "x": 475, "type": "mousemove", "message_id": 1519}
{"sender": 3699, "msg_type": "MouseEvent", "y": 259, "x": 521, "type": "mouseover", "message_id": 1520}
{"sender": 3699, "msg_type": "MouseEvent", "y": 259, "x": 521, "type": "mouseover", "message_id": 1521}
{"sender": 3699, "msg_type": "MouseEvent", "y": 259, "x": 521, "type": "mousemove", "message_id": 1522}
{"sender": 3699, "msg_type": "MouseEvent", "y": 255, "x": 565, "type": "mouseover", "message_id": 1523}
{"sender": 3699, "msg_type": "MouseEvent", "y": 255, "x": 565, "type": "mouseover", "message_id": 1524}
{"sender": 3699, "msg_type": "MouseEvent", "y": 255, "x": 565, "type": "mousemove", "message_id": 1525}
{"sender": 3699, "msg_type": "MouseEvent", "y": 252, "x": 603, "type": "mouseover", "message_id": 1526}
{"sender": 3699, "msg_type": "MouseEvent", "y": 252, "x": 603, "type": "mousemove", "message_id": 1528}
{"sender": 3699, "msg_type": "MouseEvent", "y": 252, "x": 603, "type": "mouseover", "message_id": 1527}
{"sender": 3699, "msg_type": "MouseEvent", "y": 251, "x": 626, "type": "mousemove", "message_id": 1529}
{"sender": 3699, "msg_type": "MouseEvent", "y": 251, "x": 650, "type": "mousemove", "message_id": 1530}
{"sender": 3699, "msg_type": "MouseEvent", "y": 251, "x": 664, "type": "mouseover", "message_id": 1531}
{"sender": 3699, "msg_type": "MouseEvent", "y": 251, "x": 664, "type": "mouseover", "message_id": 1532}
{"sender": 3699, "msg_type": "MouseEvent", "y": 251, "x": 664, "type": "mousemove", "message_id": 1533}
{"sender": 3699, "msg_type": "MouseEvent", "y": 251, "x": 671, "type": "mousemove", "message_id": 1534}
{"sender": 3699, "msg_type": "MouseEvent", "y": 251, "x": 675, "type": "mousemove", "message_id": 1535}
{"sender": 3699, "msg_type": "MouseEvent", "y": 251, "x": 678, "type": "mousemove", "message_id": 1536}
{"sender": 3699, "msg_type": "MouseEvent", "y": 251, "x": 679, "type": "mouseover", "message_id": 1537}
{"sender": 3699, "msg_type": "MouseEvent", "y": 251, "x": 679, "type": "mouseover", "message_id": 1538}
{"sender": 3699, "msg_type": "MouseEvent", "y": 251, "x": 679, "type": "mousemove", "message_id": 1539}
{"sender": 3699, "msg_type": "MouseEvent", "y": 251, "x": 680, "type": "mousemove", "message_id": 1540}
{"sender": 3699, "msg_type": "MouseEvent", "y": 251, "x": 681, "type": "mousemove", "message_id": 1541}
{"sender": 3699, "msg_type": "MouseEvent", "y": 251, "x": 681, "type": "mousemove", "message_id": 1542}
{"sender": 3699, "msg_type": "MouseEvent", "y": 251, "x": 682, "type": "mousemove", "message_id": 1543}
{"sender": 3699, "msg_type": "MouseEvent", "y": 251, "x": 682, "type": "mousedown", "message_id": 1544}
{"sender": 3699, "msg_type": "MouseEvent", "y": 251, "x": 682, "type": "mouseup", "message_id": 1547}
{"sender": 3699, "msg_type": "MouseEvent", "y": 251, "x": 682, "type": "mousedown", "message_id": 1548}
{"sender": 3699, "msg_type": "MouseEvent", "y": 251, "x": 682, "type": "mouseup", "message_id": 1551}
{"sender": 3699, "msg_type": "KeyEvent", "shiftKey": false, "message_id": 1552, "altKey": false, "metaKey": false, "key": "2", "ctrlKey": false, "type": "keydown", "keyCode": 50}
{"sender": 3699, "msg_type": "MouseEvent", "y": 251, "x": 681, "type": "mousemove", "message_id": 1554}
{"sender": 3699, "msg_type": "MouseEvent", "y": 251, "x": 680, "type": "mousemove", "message_id": 1555}
{"sender": 3699, "msg_type": "MouseEvent", "y": 251, "x": 678, "type": "mouseover", "message_id": 1556}
{"sender": 3699, "msg_type": "MouseEvent", "y": 251, "x": 678, "type": "mouseover", "message_id": 1557}
{"sender": 3699, "msg_type": "MouseEvent", "y": 251, "x": 678, "type": "mousemove", "message_id": 1558}
{"sender": 3699, "msg_type": "MouseEvent", "y": 252, "x": 674, "type": "mousemove", "message_id": 1559}
{"sender": 3699, "msg_type": "MouseEvent", "y": 254, "x": 669, "type": "mouseover", "message_id": 1560}
{"sender": 3699, "msg_type": "MouseEvent", "y": 254, "x": 669, "type": "mouseover", "message_id": 1561}
{"sender": 3699, "msg_type": "MouseEvent", "y": 254, "x": 669, "type": "mousemove", "message_id": 1562}
{"sender": 3699, "msg_type": "MouseEvent", "y": 255, "x": 664, "type": "mouseover", "message_id": 1563}
{"sender": 3699, "msg_type": "MouseEvent", "y": 255, "x": 664, "type": "mouseover", "message_id": 1564}
{"sender": 3699, "msg_type": "MouseEvent", "y": 255, "x": 664, "type": "mousemove", "message_id": 1565}
{"sender": 3699, "msg_type": "MouseEvent", "y": 255, "x": 655, "type": "mousemove", "message_id": 1566}
{"sender": 3699, "msg_type": "MouseEvent", "y": 255, "x": 643, "type": "mousemove", "message_id": 1567}
{"sender": 3699, "msg_type": "MouseEvent", "y": 255, "x": 626, "type": "mouseover", "message_id": 1568}
{"sender": 3699, "msg_type": "MouseEvent", "y": 255, "x": 626, "type": "mouseover", "message_id": 1569}
{"sender": 3699, "msg_type": "MouseEvent", "y": 255, "x": 611, "type": "mouseover", "message_id": 1571}
{"sender": 3699, "msg_type": "MouseEvent", "y": 255, "x": 626, "type": "mousemove", "message_id": 1570}
{"sender": 3699, "msg_type": "MouseEvent", "y": 255, "x": 611, "type": "mouseover", "message_id": 1572}
{"sender": 3699, "msg_type": "MouseEvent", "y": 255, "x": 611, "type": "mousemove", "message_id": 1573}
{"sender": 3699, "msg_type": "MouseEvent", "y": 254, "x": 598, "type": "mousemove", "message_id": 1574}
{"sender": 3699, "msg_type": "MouseEvent", "y": 254, "x": 590, "type": "mousemove", "message_id": 1575}
{"sender": 3699, "msg_type": "MouseEvent", "y": 254, "x": 584, "type": "mousemove", "message_id": 1576}
{"sender": 3699, "msg_type": "MouseEvent", "y": 254, "x": 580, "type": "mousemove", "message_id": 1577}
{"sender": 3699, "msg_type": "MouseEvent", "y": 254, "x": 574, "type": "mousemove", "message_id": 1578}
{"sender": 3699, "msg_type": "MouseEvent", "y": 253, "x": 566, "type": "mousemove", "message_id": 1579}
{"sender": 3699, "msg_type": "MouseEvent", "y": 251, "x": 555, "type": "mouseover", "message_id": 1580}
{"sender": 3699, "msg_type": "MouseEvent", "y": 251, "x": 555, "type": "mouseover", "message_id": 1581}
{"sender": 3699, "msg_type": "MouseEvent", "y": 251, "x": 555, "type": "mousemove", "message_id": 1582}
{"sender": 3699, "msg_type": "MouseEvent", "y": 247, "x": 542, "type": "mousemove", "message_id": 1583}
{"sender": 3699, "msg_type": "MouseEvent", "y": 244, "x": 529, "type": "mouseover", "message_id": 1584}
{"sender": 3699, "msg_type": "MouseEvent", "y": 244, "x": 529, "type": "mouseover", "message_id": 1585}
{"sender": 3699, "msg_type": "MouseEvent", "y": 244, "x": 529, "type": "mousemove", "message_id": 1586}
{"sender": 3699, "msg_type": "MouseEvent", "y": 241, "x": 516, "type": "mouseover", "message_id": 1587}
{"sender": 3699, "msg_type": "MouseEvent", "y": 241, "x": 516, "type": "mouseover", "message_id": 1588}
{"sender": 3699, "msg_type": "MouseEvent", "y": 241, "x": 516, "type": "mousemove", "message_id": 1589}
{"sender": 3699, "msg_type": "MouseEvent", "y": 238, "x": 503, "type": "mouseover", "message_id": 1590}
{"sender": 3699, "msg_type": "MouseEvent", "y": 238, "x": 503, "type": "mouseover", "message_id": 1591}
{"sender": 3699, "msg_type": "MouseEvent", "y": 238, "x": 503, "type": "mousemove", "message_id": 1592}
{"sender": 3699, "msg_type": "MouseEvent", "y": 237, "x": 493, "type": "mouseover", "message_id": 1593}
{"sender": 3699, "msg_type": "MouseEvent", "y": 237, "x": 493, "type": "mouseover", "message_id": 1594}
{"sender": 3699, "msg_type": "MouseEvent", "y": 237, "x": 493, "type": "mousemove", "message_id": 1595}
{"sender": 3699, "msg_type": "MouseEvent", "y": 236, "x": 486, "type": "mousemove", "message_id": 1596}
{"sender": 3699, "msg_type": "MouseEvent", "y": 235, "x": 484, "type": "mousemove", "message_id": 1597}
{"sender": 3699, "msg_type": "MouseEvent", "y": 234, "x": 482, "type": "mousemove", "message_id": 1598}
{"sender": 3699, "msg_type": "MouseEvent", "y": 233, "x": 481, "type": "mouseover", "message_id": 1599}
{"sender": 3699, "msg_type": "MouseEvent", "y": 233, "x": 481, "type": "mouseover", "message_id": 1600}
{"sender": 3699, "msg_type": "MouseEvent", "y": 233, "x": 481, "type": "mousemove", "message_id": 1601}
{"sender": 3699, "msg_type": "MouseEvent", "y": 233, "x": 481, "type": "mousemove", "message_id": 1602}
{"sender": 3699, "msg_type": "MouseEvent", "y": 233, "x": 481, "type": "mousemove", "message_id": 1603}
{"sender": 3699, "msg_type": "MouseEvent", "y": 233, "x": 481, "type": "mousedown", "message_id": 1604}
{"sender": 3699, "msg_type": "MouseEvent", "y": 233, "x": 481, "type": "mouseup", "message_id": 1606}
{"sender": 3699, "msg_type": "MouseEvent", "y": 233, "x": 481, "type": "mousemove", "message_id": 1607}
{"sender": 3699, "msg_type": "MouseEvent", "y": 234, "x": 481, "type": "mousemove", "message_id": 1608}
{"sender": 3699, "msg_type": "MouseEvent", "y": 234, "x": 481, "type": "mousemove", "message_id": 1609}
{"sender": 3699, "msg_type": "MouseEvent", "y": 235, "x": 481, "type": "mousemove", "message_id": 1610}
{"sender": 3699, "msg_type": "MouseEvent", "y": 236, "x": 481, "type": "mousemove", "message_id": 1611}
{"sender": 3699, "msg_type": "MouseEvent", "y": 238, "x": 479, "type": "mouseover", "message_id": 1612}
{"sender": 3699, "msg_type": "MouseEvent", "y": 238, "x": 479, "type": "mouseover", "message_id": 1613}
{"sender": 3699, "msg_type": "MouseEvent", "y": 240, "x": 476, "type": "mousemove", "message_id": 1615}
{"sender": 3699, "msg_type": "MouseEvent", "y": 238, "x": 479, "type": "mousemove", "message_id": 1614}
{"sender": 3699, "msg_type": "MouseEvent", "y": 243, "x": 473, "type": "mousemove", "message_id": 1616}
{"sender": 3699, "msg_type": "MouseEvent", "y": 246, "x": 469, "type": "mousemove", "message_id": 1617}
{"sender": 3699, "msg_type": "MouseEvent", "y": 250, "x": 464, "type": "mousemove", "message_id": 1618}
{"sender": 3699, "msg_type": "MouseEvent", "y": 256, "x": 459, "type": "mousemove", "message_id": 1619}
{"sender": 3699, "msg_type": "MouseEvent", "y": 261, "x": 454, "type": "mousemove", "message_id": 1620}
{"sender": 3699, "msg_type": "MouseEvent", "y": 266, "x": 449, "type": "mousemove", "message_id": 1621}
{"sender": 3699, "msg_type": "MouseEvent", "y": 270, "x": 445, "type": "mousemove", "message_id": 1622}
{"sender": 3699, "msg_type": "MouseEvent", "y": 272, "x": 442, "type": "mousemove", "message_id": 1623}
{"sender": 3699, "msg_type": "MouseEvent", "y": 273, "x": 440, "type": "mouseover", "message_id": 1624}
{"sender": 3699, "msg_type": "MouseEvent", "y": 273, "x": 440, "type": "mouseover", "message_id": 1625}
{"sender": 3699, "msg_type": "MouseEvent", "y": 274, "x": 440, "type": "mouseover", "message_id": 1627}
{"sender": 3699, "msg_type": "MouseEvent", "y": 273, "x": 440, "type": "mousemove", "message_id": 1626}
{"sender": 3699, "msg_type": "MouseEvent", "y": 274, "x": 440, "type": "mouseover", "message_id": 1628}
{"sender": 3699, "msg_type": "MouseEvent", "y": 274, "x": 440, "type": "mousemove", "message_id": 1629}
{"sender": 3699, "msg_type": "MouseEvent", "y": 274, "x": 440, "type": "mousemove", "message_id": 1630}
{"sender": 3699, "msg_type": "MouseEvent", "y": 274, "x": 440, "type": "mousemove", "message_id": 1631}
{"sender": 3699, "msg_type": "MouseEvent", "y": 273, "x": 440, "type": "mousemove", "message_id": 1632}
{"sender": 3699, "msg_type": "MouseEvent", "y": 272, "x": 439, "type": "mousemove", "message_id": 1633}
{"sender": 3699, "msg_type": "MouseEvent", "y": 271, "x": 439, "type": "mousemove", "message_id": 1634}
{"sender": 3699, "msg_type": "MouseEvent", "y": 270, "x": 439, "type": "mousemove", "message_id": 1635}
{"sender": 3699, "msg_type": "MouseEvent", "y": 268, "x": 439, "type": "mousemove", "message_id": 1636}
{"sender": 3699, "msg_type": "MouseEvent", "y": 267, "x": 440, "type": "mousemove", "message_id": 1637}
{"sender": 3699, "msg_type": "MouseEvent", "y": 265, "x": 440, "type": "mousemove", "message_id": 1638}
{"sender": 3699, "msg_type": "MouseEvent", "y": 264, "x": 440, "type": "mousemove", "message_id": 1639}
{"sender": 3699, "msg_type": "MouseEvent", "y": 264, "x": 440, "type": "mousemove", "message_id": 1640}
{"sender": 3699, "msg_type": "MouseEvent", "y": 263, "x": 440, "type": "mousemove", "message_id": 1641}
{"sender": 3699, "msg_type": "MouseEvent", "y": 263, "x": 440, "type": "mousemove", "message_id": 1642}
{"originalEvent": {"metaKey": false}, "sender": 3699, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": -1, "delta": -1, "type": "wheel", "message_id": 1643}
{"originalEvent": {"metaKey": false}, "sender": 3699, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": -5, "delta": -5, "type": "wheel", "message_id": 1644}
{"originalEvent": {"metaKey": false}, "sender": 3699, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": -6, "delta": -6, "type": "wheel", "message_id": 1645}
{"originalEvent": {"metaKey": false}, "sender": 3699, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": -6, "delta": -6, "type": "wheel", "message_id": 1646}
{"originalEvent": {"metaKey": false}, "sender": 3699, "msg_type": "MouseWheelEvent", "deltaX": -3, "deltaY": -7, "delta": -7, "type": "wheel", "message_id": 1647}
{"originalEvent": {"metaKey": false}, "sender": 3699, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": -6, "delta": -6, "type": "wheel", "message_id": 1648}
{"originalEvent": {"metaKey": false}, "sender": 3699, "msg_type": "MouseWheelEvent", "deltaX": -3, "deltaY": -4, "delta": -4, "type": "wheel", "message_id": 1649}
{"originalEvent": {"metaKey": false}, "sender": 3699, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": -2, "delta": -2, "type": "wheel", "message_id": 1650}
{"originalEvent": {"metaKey": false}, "sender": 3699, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": -6, "delta": -6, "type": "wheel", "message_id": 1651}
{"originalEvent": {"metaKey": false}, "sender": 3699, "msg_type": "MouseWheelEvent", "deltaX": -2, "deltaY": -5, "delta": -5, "type": "wheel", "message_id": 1652}
{"originalEvent": {"metaKey": false}, "sender": 3699, "msg_type": "MouseWheelEvent", "deltaX": -2, "deltaY": -3, "delta": -3, "type": "wheel", "message_id": 1653}
{"originalEvent": {"metaKey": false}, "sender": 3699, "msg_type": "MouseWheelEvent", "deltaX": -1, "deltaY": -3, "delta": -3, "type": "wheel", "message_id": 1654}
{"originalEvent": {"metaKey": false}, "sender": 3699, "msg_type": "MouseWheelEvent", "deltaX": -1, "deltaY": -2, "delta": -2, "type": "wheel", "message_id": 1655}
{"originalEvent": {"metaKey": false}, "sender": 3699, "msg_type": "MouseWheelEvent", "deltaX": -1, "deltaY": -1, "delta": -1, "type": "wheel", "message_id": 1656}
{"originalEvent": {"metaKey": false}, "sender": 3699, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": -1, "delta": -1, "type": "wheel", "message_id": 1657}
{"sender": 3699, "msg_type": "MouseEvent", "y": 263, "x": 440, "type": "mousemove", "message_id": 1658}
{"originalEvent": {"metaKey": false}, "sender": 3699, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": -1, "delta": -1, "type": "wheel", "message_id": 1659}
{"originalEvent": {"metaKey": false}, "sender": 3699, "msg_type": "MouseWheelEvent", "deltaX": -1, "deltaY": 0, "delta": 1, "type": "wheel", "message_id": 1660}
{"originalEvent": {"metaKey": false}, "sender": 3699, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": -1, "delta": -1, "type": "wheel", "message_id": 1661}
{"originalEvent": {"metaKey": false}, "sender": 3699, "msg_type": "MouseWheelEvent", "deltaX": -1, "deltaY": -1, "delta": -1, "type": "wheel", "message_id": 1663}
{"originalEvent": {"metaKey": false}, "sender": 3699, "msg_type": "MouseWheelEvent", "deltaX": -1, "deltaY": -1, "delta": -1, "type": "wheel", "message_id": 1662}
{"originalEvent": {"metaKey": false}, "sender": 3699, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": -2, "delta": -2, "type": "wheel", "message_id": 1664}
{"sender": 3699, "msg_type": "MouseEvent", "y": 263, "x": 439, "type": "mousemove", "message_id": 1665}
{"originalEvent": {"metaKey": false}, "sender": 3699, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": -1, "delta": -1, "type": "wheel", "message_id": 1666}
{"sender": 3699, "msg_type": "MouseEvent", "y": 264, "x": 439, "type": "mousemove", "message_id": 1667}
{"sender": 3699, "msg_type": "MouseEvent", "y": 264, "x": 439, "type": "mousemove", "message_id": 1668}
{"originalEvent": {"metaKey": false}, "sender": 3699, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": -1, "delta": -1, "type": "wheel", "message_id": 1669}
{"originalEvent": {"metaKey": false}, "sender": 3699, "msg_type": "MouseWheelEvent", "deltaX": -1, "deltaY": 0, "delta": 1, "type": "wheel", "message_id": 1670}
{"originalEvent": {"metaKey": false}, "sender": 3699, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": -1, "delta": -1, "type": "wheel", "message_id": 1671}
{"originalEvent": {"metaKey": false}, "sender": 3699, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": -1, "delta": -1, "type": "wheel", "message_id": 1672}
{"originalEvent": {"metaKey": false}, "sender": 3699, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": -1, "delta": -1, "type": "wheel", "message_id": 1673}
{"originalEvent": {"metaKey": false}, "sender": 3699, "msg_type": "MouseWheelEvent", "deltaX": -1, "deltaY": -1, "delta": -1, "type": "wheel", "message_id": 1674}
{"originalEvent": {"metaKey": false}, "sender": 3699, "msg_type": "MouseWheelEvent", "deltaX": -1, "deltaY": -1, "delta": -1, "type": "wheel", "message_id": 1675}
{"sender": 3699, "msg_type": "MouseEvent", "y": 264, "x": 439, "type": "mousemove", "message_id": 1676}
{"originalEvent": {"metaKey": false}, "sender": 3699, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": -2, "delta": -2, "type": "wheel", "message_id": 1677}
{"sender": 3699, "msg_type": "MouseEvent", "y": 264, "x": 439, "type": "mousemove", "message_id": 1678}
{"originalEvent": {"metaKey": false}, "sender": 3699, "msg_type": "MouseWheelEvent", "deltaX": -1, "deltaY": -1, "delta": -1, "type": "wheel", "message_id": 1679}
{"sender": 3699, "msg_type": "MouseEvent", "y": 264, "x": 439, "type": "mousemove", "message_id": 1680}
{"originalEvent": {"metaKey": false}, "sender": 3699, "msg_type": "MouseWheelEvent", "deltaX": -1, "deltaY": -3, "delta": -3, "type": "wheel", "message_id": 1681}
{"originalEvent": {"metaKey": false}, "sender": 3699, "msg_type": "MouseWheelEvent", "deltaX": -2, "deltaY": -2, "delta": -2, "type": "wheel", "message_id": 1682}
{"originalEvent": {"metaKey": false}, "sender": 3699, "msg_type": "MouseWheelEvent", "deltaX": -1, "deltaY": -3, "delta": -3, "type": "wheel", "message_id": 1683}
{"originalEvent": {"metaKey": false}, "sender": 3699, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": -3, "delta": -3, "type": "wheel", "message_id": 1684}
{"originalEvent": {"metaKey": false}, "sender": 3699, "msg_type": "MouseWheelEvent", "deltaX": -2, "deltaY": -3, "delta": -3, "type": "wheel", "message_id": 1685}
{"originalEvent": {"metaKey": false}, "sender": 3699, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": -3, "delta": -3, "type": "wheel", "message_id": 1686}
{"originalEvent": {"metaKey": false}, "sender": 3699, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": -3, "delta": -3, "type": "wheel", "message_id": 1687}
{"sender": 3699, "msg_type": "MouseEvent", "y": 264, "x": 440, "type": "mousemove", "message_id": 1688}
{"sender": 3699, "msg_type": "MouseEvent", "y": 264, "x": 443, "type": "mouseover", "message_id": 1689}
{"sender": 3699, "msg_type": "MouseEvent", "y": 264, "x": 443, "type": "mouseover", "message_id": 1690}
{"sender": 3699, "msg_type": "MouseEvent", "y": 264, "x": 443, "type": "mousemove", "message_id": 1691}
{"sender": 3699, "msg_type": "MouseEvent", "y": 264, "x": 448, "type": "mousemove", "message_id": 1692}
{"sender": 3699, "msg_type": "MouseEvent", "y": 265, "x": 454, "type": "mousemove", "message_id": 1693}
{"sender": 3699, "msg_type": "MouseEvent", "y": 266, "x": 460, "type": "mousemove", "message_id": 1694}
{"sender": 3699, "msg_type": "MouseEvent", "y": 266, "x": 468, "type": "mousemove", "message_id": 1695}
{"sender": 3699, "msg_type": "MouseEvent", "y": 266, "x": 478, "type": "mousemove", "message_id": 1696}
{"sender": 3699, "msg_type": "MouseEvent", "y": 265, "x": 492, "type": "mousemove", "message_id": 1697}
{"sender": 3699, "msg_type": "MouseEvent", "y": 265, "x": 510, "type": "mouseover", "message_id": 1698}
{"sender": 3699, "msg_type": "MouseEvent", "y": 265, "x": 510, "type": "mousemove", "message_id": 1700}
{"sender": 3699, "msg_type": "MouseEvent", "y": 265, "x": 510, "type": "mouseover", "message_id": 1699}
{"sender": 3699, "msg_type": "MouseEvent", "y": 265, "x": 523, "type": "mouseover", "message_id": 1701}
{"sender": 3699, "msg_type": "MouseEvent", "y": 265, "x": 523, "type": "mouseover", "message_id": 1702}
{"sender": 3699, "msg_type": "MouseEvent", "y": 265, "x": 523, "type": "mousemove", "message_id": 1703}
{"sender": 3699, "msg_type": "MouseEvent", "y": 265, "x": 535, "type": "mousemove", "message_id": 1704}
{"sender": 3699, "msg_type": "MouseEvent", "y": 266, "x": 542, "type": "mousemove", "message_id": 1705}
{"sender": 3699, "msg_type": "MouseEvent", "y": 267, "x": 546, "type": "mousemove", "message_id": 1706}
{"sender": 3699, "msg_type": "MouseEvent", "y": 267, "x": 549, "type": "mousemove", "message_id": 1707}
{"sender": 3699, "msg_type": "MouseEvent", "y": 267, "x": 549, "type": "mouseover", "message_id": 1708}
{"sender": 3699, "msg_type": "MouseEvent", "y": 267, "x": 549, "type": "mouseover", "message_id": 1709}
{"sender": 3699, "msg_type": "MouseEvent", "y": 267, "x": 549, "type": "mousemove", "message_id": 1710}
{"sender": 3699, "msg_type": "MouseEvent", "y": 267, "x": 550, "type": "mousemove", "message_id": 1711}
{"sender": 3699, "msg_type": "MouseEvent", "y": 268, "x": 550, "type": "mousemove", "message_id": 1712}
{"sender": 3699, "msg_type": "MouseEvent", "y": 268, "x": 550, "type": "mousemove", "message_id": 1713}
{"sender": 3699, "msg_type": "MouseEvent", "y": 268, "x": 551, "type": "mousemove", "message_id": 1714}
{"sender": 3699, "msg_type": "MouseEvent", "y": 268, "x": 552, "type": "mousemove", "message_id": 1715}
{"sender": 3699, "msg_type": "MouseEvent", "y": 269, "x": 555, "type": "mouseover", "message_id": 1716}
{"sender": 3699, "msg_type": "MouseEvent", "y": 269, "x": 555, "type": "mouseover", "message_id": 1717}
{"sender": 3699, "msg_type": "MouseEvent", "y": 269, "x": 555, "type": "mousemove", "message_id": 1718}
{"sender": 3699, "msg_type": "MouseEvent", "y": 269, "x": 555, "type": "mouseover", "message_id": 1719}
{"sender": 3699, "msg_type": "MouseEvent", "y": 269, "x": 555, "type": "mouseover", "message_id": 1720}
{"sender": 3699, "msg_type": "MouseEvent", "y": 269, "x": 555, "type": "mousedown", "message_id": 1721}
{"sender": 3699, "msg_type": "MouseEvent", "y": 269, "x": 561, "type": "mouseover", "message_id": 1723}
{"sender": 3699, "msg_type": "MouseEvent", "y": 269, "x": 561, "type": "mouseover", "message_id": 1724}
{"sender": 3699, "msg_type": "MouseEvent", "y": 269, "x": 561, "type": "mousemove", "message_id": 1725}
{"sender": 3699, "msg_type": "MouseEvent", "y": 270, "x": 569, "type": "mousemove", "message_id": 1726}
{"sender": 3699, "msg_type": "MouseEvent", "y": 270, "x": 578, "type": "mousemove", "message_id": 1728}
{"sender": 3699, "msg_type": "MouseEvent", "y": 271, "x": 589, "type": "mousemove", "message_id": 1730}
{"sender": 3699, "msg_type": "MouseEvent", "y": 272, "x": 602, "type": "mousemove", "message_id": 1732}
{"sender": 3699, "msg_type": "MouseEvent", "y": 272, "x": 613, "type": "mousemove", "message_id": 1734}
{"sender": 3699, "msg_type": "MouseEvent", "y": 273, "x": 624, "type": "mousemove", "message_id": 1736}
{"sender": 3699, "msg_type": "MouseEvent", "y": 273, "x": 633, "type": "mousemove", "message_id": 1738}
{"sender": 3699, "msg_type": "MouseEvent", "y": 273, "x": 642, "type": "mousemove", "message_id": 1740}
{"sender": 3699, "msg_type": "MouseEvent", "y": 273, "x": 649, "type": "mousemove", "message_id": 1742}
{"sender": 3699, "msg_type": "MouseEvent", "y": 273, "x": 653, "type": "mousemove", "message_id": 1744}
{"sender": 3699, "msg_type": "MouseEvent", "y": 273, "x": 655, "type": "mousemove", "message_id": 1746}
{"sender": 3699, "msg_type": "MouseEvent", "y": 273, "x": 656, "type": "mouseover", "message_id": 1748}
{"sender": 3699, "msg_type": "MouseEvent", "y": 273, "x": 656, "type": "mouseover", "message_id": 1749}
{"sender": 3699, "msg_type": "MouseEvent", "y": 273, "x": 656, "type": "mousemove", "message_id": 1750}
{"sender": 3699, "msg_type": "MouseEvent", "y": 273, "x": 657, "type": "mousemove", "message_id": 1752}
{"sender": 3699, "msg_type": "MouseEvent", "y": 273, "x": 657, "type": "mousemove", "message_id": 1754}
{"sender": 3699, "msg_type": "MouseEvent", "y": 273, "x": 658, "type": "mousemove", "message_id": 1756}
{"sender": 3699, "msg_type": "MouseEvent", "y": 273, "x": 659, "type": "mousemove", "message_id": 1758}
{"sender": 3699, "msg_type": "MouseEvent", "y": 273, "x": 660, "type": "mousemove", "message_id": 1760}
{"sender": 3699, "msg_type": "MouseEvent", "y": 273, "x": 661, "type": "mousemove", "message_id": 1762}
{"sender": 3699, "msg_type": "MouseEvent", "y": 273, "x": 662, "type": "mousemove", "message_id": 1764}
{"sender": 3699, "msg_type": "MouseEvent", "y": 273, "x": 662, "type": "mousemove", "message_id": 1766}
{"sender": 3699, "msg_type": "MouseEvent", "y": 273, "x": 662, "type": "mouseup", "message_id": 1768}
{"sender": 3699, "msg_type": "MouseEvent", "y": 273, "x": 662, "type": "mousemove", "message_id": 1769}
{"sender": 3699, "msg_type": "MouseEvent", "y": 273, "x": 661, "type": "mousemove", "message_id": 1770}
{"sender": 3699, "msg_type": "MouseEvent", "y": 273, "x": 658, "type": "mouseover", "message_id": 1771}
{"sender": 3699, "msg_type": "MouseEvent", "y": 273, "x": 658, "type": "mouseover", "message_id": 1772}
{"sender": 3699, "msg_type": "MouseEvent", "y": 273, "x": 658, "type": "mousemove", "message_id": 1773}
{"sender": 3699, "msg_type": "MouseEvent", "y": 273, "x": 655, "type": "mousemove", "message_id": 1774}
{"sender": 3699, "msg_type": "MouseEvent", "y": 272, "x": 651, "type": "mousemove", "message_id": 1775}
{"sender": 3699, "msg_type": "MouseEvent", "y": 271, "x": 642, "type": "mousemove", "message_id": 1776}
{"sender": 3699, "msg_type": "MouseEvent", "y": 268, "x": 627, "type": "mousemove", "message_id": 1779}
{"sender": 3699, "msg_type": "MouseEvent", "y": 268, "x": 627, "type": "mouseover", "message_id": 1777}
{"sender": 3699, "msg_type": "MouseEvent", "y": 268, "x": 627, "type": "mouseover", "message_id": 1778}
{"sender": 3699, "msg_type": "MouseEvent", "y": 265, "x": 612, "type": "mouseover", "message_id": 1780}
{"sender": 3699, "msg_type": "MouseEvent", "y": 265, "x": 612, "type": "mouseover", "message_id": 1781}
{"sender": 3699, "msg_type": "MouseEvent", "y": 265, "x": 612, "type": "mousemove", "message_id": 1782}
{"sender": 3699, "msg_type": "MouseEvent", "y": 260, "x": 593, "type": "mouseover", "message_id": 1783}
{"sender": 3699, "msg_type": "MouseEvent", "y": 260, "x": 593, "type": "mouseover", "message_id": 1784}
{"sender": 3699, "msg_type": "MouseEvent", "y": 260, "x": 593, "type": "mousemove", "message_id": 1785}
{"sender": 3699, "msg_type": "MouseEvent", "y": 254, "x": 574, "type": "mouseover", "message_id": 1786}
{"sender": 3699, "msg_type": "MouseEvent", "y": 254, "x": 574, "type": "mouseover", "message_id": 1787}
{"sender": 3699, "msg_type": "MouseEvent", "y": 254, "x": 574, "type": "mousemove", "message_id": 1788}
{"sender": 3699, "msg_type": "MouseEvent", "y": 242, "x": 549, "type": "mousemove", "message_id": 1790}
{"sender": 3699, "msg_type": "MouseEvent", "y": 248, "x": 559, "type": "mousemove", "message_id": 1789}
{"sender": 3699, "msg_type": "MouseEvent", "y": 238, "x": 542, "type": "mousemove", "message_id": 1791}
{"sender": 3699, "msg_type": "MouseEvent", "y": 234, "x": 537, "type": "mousemove", "message_id": 1792}
{"sender": 3699, "msg_type": "MouseEvent", "y": 230, "x": 531, "type": "mousemove", "message_id": 1793}
{"sender": 3699, "msg_type": "MouseEvent", "y": 226, "x": 526, "type": "mousemove", "message_id": 1794}
{"sender": 3699, "msg_type": "MouseEvent", "y": 223, "x": 521, "type": "mousemove", "message_id": 1795}
{"sender": 3699, "msg_type": "MouseEvent", "y": 221, "x": 520, "type": "mouseover", "message_id": 1796}
{"sender": 3699, "msg_type": "MouseEvent", "y": 221, "x": 520, "type": "mouseover", "message_id": 1797}
{"sender": 3699, "msg_type": "MouseEvent", "y": 221, "x": 520, "type": "mousemove", "message_id": 1798}
{"sender": 3699, "msg_type": "MouseEvent", "y": 220, "x": 519, "type": "mousemove", "message_id": 1799}
{"sender": 3699, "msg_type": "MouseEvent", "y": 219, "x": 519, "type": "mousemove", "message_id": 1800}
{"sender": 3699, "msg_type": "MouseEvent", "y": 219, "x": 519, "type": "mousemove", "message_id": 1801}
{"sender": 3699, "msg_type": "MouseEvent", "y": 219, "x": 519, "type": "mousemove", "message_id": 1802}
{"sender": 3699, "msg_type": "MouseEvent", "y": 219, "x": 519, "type": "mousedown", "message_id": 1803}
{"sender": 3699, "msg_type": "MouseEvent", "y": 219, "x": 519, "type": "mouseup", "message_id": 1805}
{"sender": 3699, "msg_type": "MouseEvent", "y": 219, "x": 519, "type": "mousemove", "message_id": 1806}
{"sender": 3699, "msg_type": "MouseEvent", "y": 219, "x": 518, "type": "mousemove", "message_id": 1807}
{"sender": 3699, "msg_type": "MouseEvent", "y": 219, "x": 518, "type": "mousemove", "message_id": 1808}
{"sender": 3699, "msg_type": "MouseEvent", "y": 219, "x": 518, "type": "mousemove", "message_id": 1809}
{"sender": 3699, "msg_type": "MouseEvent", "y": 219, "x": 518, "type": "mousemove", "message_id": 1810}
{"sender": 3699, "msg_type": "MouseEvent", "y": 219, "x": 518, "type": "mousemove", "message_id": 1811}
{"sender": 3699, "msg_type": "MouseEvent", "y": 218, "x": 517, "type": "mousemove", "message_id": 1812}
{"sender": 3699, "msg_type": "MouseEvent", "y": 217, "x": 516, "type": "mousemove", "message_id": 1813}
{"sender": 3699, "msg_type": "MouseEvent", "y": 215, "x": 514, "type": "mouseover", "message_id": 1814}
{"sender": 3699, "msg_type": "MouseEvent", "y": 215, "x": 514, "type": "mouseover", "message_id": 1815}
{"sender": 3699, "msg_type": "MouseEvent", "y": 214, "x": 513, "type": "mouseover", "message_id": 1817}
{"sender": 3699, "msg_type": "MouseEvent", "y": 215, "x": 514, "type": "mousemove", "message_id": 1816}
{"sender": 3699, "msg_type": "MouseEvent", "y": 214, "x": 513, "type": "mouseover", "message_id": 1818}
{"sender": 3699, "msg_type": "MouseEvent", "y": 214, "x": 513, "type": "mousemove", "message_id": 1819}
{"sender": 3699, "msg_type": "MouseEvent", "y": 212, "x": 511, "type": "mouseover", "message_id": 1820}
{"sender": 3699, "msg_type": "MouseEvent", "y": 212, "x": 511, "type": "mouseover", "message_id": 1821}
{"sender": 3699, "msg_type": "MouseEvent", "y": 212, "x": 511, "type": "mousemove", "message_id": 1822}
{"sender": 3699, "msg_type": "MouseEvent", "y": 211, "x": 508, "type": "mouseover", "message_id": 1823}
{"sender": 3699, "msg_type": "MouseEvent", "y": 211, "x": 508, "type": "mouseover", "message_id": 1824}
{"sender": 3699, "msg_type": "MouseEvent", "y": 211, "x": 508, "type": "mousemove", "message_id": 1825}
{"sender": 3699, "msg_type": "MouseEvent", "y": 209, "x": 507, "type": "mouseover", "message_id": 1826}
{"sender": 3699, "msg_type": "MouseEvent", "y": 209, "x": 507, "type": "mouseover", "message_id": 1827}
{"sender": 3699, "msg_type": "MouseEvent", "y": 209, "x": 507, "type": "mousemove", "message_id": 1828}
{"sender": 3699, "msg_type": "MouseEvent", "y": 208, "x": 506, "type": "mousemove", "message_id": 1829}
{"sender": 3699, "msg_type": "MouseEvent", "y": 208, "x": 505, "type": "mousemove", "message_id": 1830}
{"sender": 3699, "msg_type": "MouseEvent", "y": 207, "x": 505, "type": "mousemove", "message_id": 1831}
{"sender": 3699, "msg_type": "MouseEvent", "y": 206, "x": 505, "type": "mousemove", "message_id": 1832}
{"sender": 3699, "msg_type": "MouseEvent", "y": 205, "x": 505, "type": "mousemove", "message_id": 1833}
{"sender": 3699, "msg_type": "MouseEvent", "y": 205, "x": 505, "type": "mousemove", "message_id": 1834}
{"sender": 3699, "msg_type": "MouseEvent", "y": 204, "x": 505, "type": "mousemove", "message_id": 1835}
{"sender": 3699, "msg_type": "MouseEvent", "y": 204, "x": 504, "type": "mousemove", "message_id": 1836}
{"sender": 3699, "msg_type": "MouseEvent", "y": 204, "x": 504, "type": "mousemove", "message_id": 1837}
{"sender": 3699, "msg_type": "MouseEvent", "y": 205, "x": 504, "type": "mousemove", "message_id": 1838}
{"sender": 3699, "msg_type": "MouseEvent", "y": 205, "x": 504, "type": "mousedown", "message_id": 1839}
{"sender": 3699, "msg_type": "MouseEvent", "y": 206, "x": 502, "type": "mouseover", "message_id": 1840}
{"sender": 3699, "msg_type": "MouseEvent", "y": 206, "x": 502, "type": "mouseover", "message_id": 1841}
{"sender": 3699, "msg_type": "MouseEvent", "y": 206, "x": 502, "type": "mousemove", "message_id": 1842}
{"sender": 3699, "msg_type": "MouseEvent", "y": 209, "x": 500, "type": "mouseover", "message_id": 1843}
{"sender": 3699, "msg_type": "MouseEvent", "y": 209, "x": 500, "type": "mouseover", "message_id": 1844}
{"sender": 3699, "msg_type": "MouseEvent", "y": 209, "x": 500, "type": "mousemove", "message_id": 1845}
{"sender": 3699, "msg_type": "MouseEvent", "y": 217, "x": 493, "type": "mousemove", "message_id": 1847}
{"sender": 3699, "msg_type": "MouseEvent", "y": 212, "x": 497, "type": "mousemove", "message_id": 1846}
{"sender": 3699, "msg_type": "MouseEvent", "y": 222, "x": 487, "type": "mousemove", "message_id": 1848}
{"sender": 3699, "msg_type": "MouseEvent", "y": 229, "x": 480, "type": "mousemove", "message_id": 1849}
{"sender": 3699, "msg_type": "MouseEvent", "y": 235, "x": 475, "type": "mousemove", "message_id": 1850}
{"sender": 3699, "msg_type": "MouseEvent", "y": 241, "x": 470, "type": "mousemove", "message_id": 1851}
{"sender": 3699, "msg_type": "MouseEvent", "y": 248, "x": 466, "type": "mousemove", "message_id": 1852}
{"sender": 3699, "msg_type": "MouseEvent", "y": 255, "x": 462, "type": "mousemove", "message_id": 1853}
{"sender": 3699, "msg_type": "MouseEvent", "y": 262, "x": 458, "type": "mousemove", "message_id": 1854}
{"sender": 3699, "msg_type": "MouseEvent", "y": 266, "x": 454, "type": "mousemove", "message_id": 1855}
{"sender": 3699, "msg_type": "MouseEvent", "y": 270, "x": 451, "type": "mousemove", "message_id": 1856}
{"sender": 3699, "msg_type": "MouseEvent", "y": 271, "x": 449, "type": "mouseover", "message_id": 1857}
{"sender": 3699, "msg_type": "MouseEvent", "y": 271, "x": 449, "type": "mousemove", "message_id": 1859}
{"sender": 3699, "msg_type": "MouseEvent", "y": 271, "x": 449, "type": "mouseover", "message_id": 1858}
{"sender": 3699, "msg_type": "MouseEvent", "y": 272, "x": 449, "type": "mouseover", "message_id": 1860}
{"sender": 3699, "msg_type": "MouseEvent", "y": 272, "x": 449, "type": "mouseover", "message_id": 1861}
{"sender": 3699, "msg_type": "MouseEvent", "y": 272, "x": 449, "type": "mousemove", "message_id": 1862}
{"sender": 3699, "msg_type": "MouseEvent", "y": 272, "x": 449, "type": "mousemove", "message_id": 1863}
{"sender": 3699, "msg_type": "MouseEvent", "y": 272, "x": 449, "type": "mouseup", "message_id": 1864}
{"sender": 3699, "msg_type": "MouseEvent", "y": 272, "x": 449, "type": "mousemove", "message_id": 1865}
{"sender": 3699, "msg_type": "MouseEvent", "y": 272, "x": 449, "type": "mousemove", "message_id": 1866}
{"sender": 3699, "msg_type": "MouseEvent", "y": 271, "x": 448, "type": "mousemove", "message_id": 1867}
{"sender": 3699, "msg_type": "MouseEvent", "y": 270, "x": 447, "type": "mousemove", "message_id": 1868}
{"sender": 3699, "msg_type": "MouseEvent", "y": 270, "x": 445, "type": "mouseover", "message_id": 1869}
{"sender": 3699, "msg_type": "MouseEvent", "y": 270, "x": 445, "type": "mouseover", "message_id": 1870}
{"sender": 3699, "msg_type": "MouseEvent", "y": 270, "x": 445, "type": "mousemove", "message_id": 1871}
{"sender": 3699, "msg_type": "MouseEvent", "y": 269, "x": 443, "type": "mousemove", "message_id": 1872}
{"sender": 3699, "msg_type": "MouseEvent", "y": 268, "x": 439, "type": "mousemove", "message_id": 1873}
{"sender": 3699, "msg_type": "MouseEvent", "y": 266, "x": 433, "type": "mouseover", "message_id": 1874}
{"sender": 3699, "msg_type": "MouseEvent", "y": 266, "x": 433, "type": "mouseover", "message_id": 1875}
{"sender": 3699, "msg_type": "MouseEvent", "y": 266, "x": 433, "type": "mousemove", "message_id": 1876}
{"sender": 3699, "msg_type": "MouseEvent", "y": 265, "x": 426, "type": "mouseover", "message_id": 1877}
{"sender": 3699, "msg_type": "MouseEvent", "y": 265, "x": 426, "type": "mouseover", "message_id": 1878}
{"sender": 3699, "msg_type": "MouseEvent", "y": 265, "x": 426, "type": "mousemove", "message_id": 1879}
{"sender": 3699, "msg_type": "MouseEvent", "y": 264, "x": 417, "type": "mousemove", "message_id": 1880}
{"sender": 3699, "msg_type": "MouseEvent", "y": 262, "x": 411, "type": "mouseover", "message_id": 1881}
{"sender": 3699, "msg_type": "MouseEvent", "y": 262, "x": 411, "type": "mouseover", "message_id": 1882}
{"sender": 3699, "msg_type": "MouseEvent", "y": 262, "x": 411, "type": "mousemove", "message_id": 1883}
{"sender": 3699, "msg_type": "MouseEvent", "y": 261, "x": 407, "type": "mouseover", "message_id": 1884}
{"sender": 3699, "msg_type": "MouseEvent", "y": 261, "x": 407, "type": "mouseover", "message_id": 1885}
{"sender": 3699, "msg_type": "MouseEvent", "y": 261, "x": 407, "type": "mousemove", "message_id": 1886}
{"sender": 3699, "msg_type": "MouseEvent", "y": 260, "x": 406, "type": "mouseover", "message_id": 1887}
{"sender": 3699, "msg_type": "MouseEvent", "y": 260, "x": 406, "type": "mouseover", "message_id": 1888}
{"sender": 3699, "msg_type": "MouseEvent", "y": 260, "x": 406, "type": "mousemove", "message_id": 1889}
{"sender": 3699, "msg_type": "MouseEvent", "y": 260, "x": 407, "type": "mousemove", "message_id": 1890}
{"sender": 3699, "msg_type": "MouseEvent", "y": 260, "x": 407, "type": "mousemove", "message_id": 1891}
{"sender": 3699, "msg_type": "MouseEvent", "y": 260, "x": 407, "type": "mousemove", "message_id": 1892}
{"sender": 3699, "msg_type": "MouseEvent", "y": 260, "x": 408, "type": "mousemove", "message_id": 1893}
{"sender": 3699, "msg_type": "MouseEvent", "y": 260, "x": 408, "type": "mousemove", "message_id": 1894}
{"sender": 3699, "msg_type": "MouseEvent", "y": 260, "x": 409, "type": "mousemove", "message_id": 1895}
{"sender": 3699, "msg_type": "MouseEvent", "y": 260, "x": 409, "type": "mousemove", "message_id": 1896}
{"sender": 3699, "msg_type": "MouseEvent", "y": 259, "x": 409, "type": "mousemove", "message_id": 1897}
{"sender": 3699, "msg_type": "MouseEvent", "y": 258, "x": 409, "type": "mousemove", "message_id": 1898}
{"sender": 3699, "msg_type": "MouseEvent", "y": 257, "x": 409, "type": "mousemove", "message_id": 1899}
{"sender": 3699, "msg_type": "MouseEvent", "y": 255, "x": 408, "type": "mousemove", "message_id": 1900}
{"sender": 3699, "msg_type": "MouseEvent", "y": 254, "x": 407, "type": "mousemove", "message_id": 1901}
{"sender": 3699, "msg_type": "MouseEvent", "y": 252, "x": 405, "type": "mouseover", "message_id": 1902}
{"sender": 3699, "msg_type": "MouseEvent", "y": 252, "x": 405, "type": "mouseover", "message_id": 1903}
{"sender": 3699, "msg_type": "MouseEvent", "y": 252, "x": 405, "type": "mousemove", "message_id": 1904}
{"sender": 3699, "msg_type": "MouseEvent", "y": 250, "x": 404, "type": "mouseover", "message_id": 1906}
{"sender": 3699, "msg_type": "MouseEvent", "y": 250, "x": 404, "type": "mouseover", "message_id": 1905}
{"sender": 3699, "msg_type": "MouseEvent", "y": 250, "x": 404, "type": "mousemove", "message_id": 1907}
{"sender": 3699, "msg_type": "MouseEvent", "y": 248, "x": 402, "type": "mouseover", "message_id": 1908}
{"sender": 3699, "msg_type": "MouseEvent", "y": 248, "x": 402, "type": "mouseover", "message_id": 1909}
{"sender": 3699, "msg_type": "MouseEvent", "y": 248, "x": 402, "type": "mousemove", "message_id": 1910}
{"sender": 3699, "msg_type": "MouseEvent", "y": 247, "x": 401, "type": "mouseover", "message_id": 1911}
{"sender": 3699, "msg_type": "MouseEvent", "y": 247, "x": 401, "type": "mouseover", "message_id": 1912}
{"sender": 3699, "msg_type": "MouseEvent", "y": 247, "x": 401, "type": "mousemove", "message_id": 1913}
{"sender": 3699, "msg_type": "MouseEvent", "y": 246, "x": 400, "type": "mousemove", "message_id": 1914}
{"sender": 3699, "msg_type": "MouseEvent", "y": 244, "x": 399, "type": "mousemove", "message_id": 1915}
{"sender": 3699, "msg_type": "MouseEvent", "y": 243, "x": 398, "type": "mousemove", "message_id": 1916}
{"sender": 3699, "msg_type": "MouseEvent", "y": 243, "x": 398, "type": "mousemove", "message_id": 1917}
{"sender": 3699, "msg_type": "MouseEvent", "y": 243, "x": 397, "type": "mousemove", "message_id": 1918}
{"sender": 3699, "msg_type": "MouseEvent", "y": 241, "x": 396, "type": "mousemove", "message_id": 1919}
{"sender": 3699, "msg_type": "MouseEvent", "y": 238, "x": 392, "type": "mouseover", "message_id": 1920}
{"sender": 3699, "msg_type": "MouseEvent", "y": 238, "x": 392, "type": "mouseover", "message_id": 1921}
{"sender": 3699, "msg_type": "MouseEvent", "y": 238, "x": 392, "type": "mousemove", "message_id": 1922}
{"sender": 3699, "msg_type": "MouseEvent", "y": 233, "x": 387, "type": "mousemove", "message_id": 1923}
{"sender": 3699, "msg_type": "MouseEvent", "y": 226, "x": 379, "type": "mousemove", "message_id": 1924}
{"sender": 3699, "msg_type": "MouseEvent", "y": 216, "x": 366, "type": "mousemove", "message_id": 1925}
{"sender": 3699, "msg_type": "MouseEvent", "y": 204, "x": 347, "type": "mousemove", "message_id": 1926}
{"sender": 3699, "msg_type": "MouseEvent", "y": 193, "x": 329, "type": "mousemove", "message_id": 1927}
{"sender": 3699, "msg_type": "MouseEvent", "y": 178, "x": 301, "type": "mousemove", "message_id": 1928}
{"sender": 3699, "msg_type": "MouseEvent", "y": 161, "x": 270, "type": "mousemove", "message_id": 1929}
{"sender": 3699, "msg_type": "MouseEvent", "y": 147, "x": 239, "type": "mousemove", "message_id": 1930}
{"sender": 3699, "msg_type": "MouseEvent", "y": 132, "x": 206, "type": "mousemove", "message_id": 1931}
{"sender": 3699, "msg_type": "MouseEvent", "y": 119, "x": 177, "type": "mousemove", "message_id": 1932}
{"sender": 3699, "msg_type": "MouseEvent", "y": 106, "x": 149, "type": "mousemove", "message_id": 1933}
{"sender": 3699, "msg_type": "MouseEvent", "y": 93, "x": 126, "type": "mousemove", "message_id": 1934}
{"sender": 3699, "msg_type": "MouseEvent", "y": 82, "x": 109, "type": "mousemove", "message_id": 1935}
{"sender": 3699, "msg_type": "MouseEvent", "y": 73, "x": 96, "type": "mousemove", "message_id": 1936}
{"sender": 3699, "msg_type": "MouseEvent", "y": 68, "x": 91, "type": "mousemove", "message_id": 1937}
{"sender": 3699, "msg_type": "MouseEvent", "y": 63, "x": 87, "type": "mousemove", "message_id": 1938}
{"sender": 3699, "msg_type": "MouseEvent", "y": 59, "x": 85, "type": "mouseover", "message_id": 1939}
{"sender": 3699, "msg_type": "MouseEvent", "y": 59, "x": 85, "type": "mouseover", "message_id": 1940}
{"sender": 3699, "msg_type": "MouseEvent", "y": 59, "x": 85, "type": "mousemove", "message_id": 1941}
{"sender": 3699, "msg_type": "MouseEvent", "y": 57, "x": 84, "type": "mouseover", "message_id": 1943}
{"sender": 3699, "msg_type": "MouseEvent", "y": 57, "x": 84, "type": "mouseover", "message_id": 1942}
{"sender": 3699, "msg_type": "MouseEvent", "y": 57, "x": 84, "type": "mousemove", "message_id": 1944}
{"sender": 3699, "msg_type": "MouseEvent", "y": 54, "x": 82, "type": "mousemove", "message_id": 1946}
{"sender": 3699, "msg_type": "MouseEvent", "y": 55, "x": 83, "type": "mousemove", "message_id": 1945}
{"sender": 3699, "msg_type": "MouseEvent", "y": 53, "x": 80, "type": "mouseover", "message_id": 1948}
{"sender": 3699, "msg_type": "MouseEvent", "y": 53, "x": 80, "type": "mouseover", "message_id": 1947}
{"sender": 3699, "msg_type": "MouseEvent", "y": 53, "x": 80, "type": "mousemove", "message_id": 1949}
{"sender": 3699, "msg_type": "MouseEvent", "y": 52, "x": 79, "type": "mouseover", "message_id": 1951}
{"sender": 3699, "msg_type": "MouseEvent", "y": 52, "x": 79, "type": "mouseover", "message_id": 1950}
{"sender": 3699, "msg_type": "MouseEvent", "y": 52, "x": 79, "type": "mousemove", "message_id": 1952}
{"sender": 3699, "msg_type": "MouseEvent", "y": 52, "x": 78, "type": "mousemove", "message_id": 1953}
{"sender": 3699, "msg_type": "MouseEvent", "y": 52, "x": 78, "type": "mousemove", "message_id": 1954}
{"sender": 3699, "msg_type": "MouseEvent", "y": 52, "x": 79, "type": "mousemove", "message_id": 1955}
{"sender": 3699, "msg_type": "MouseEvent", "y": 52, "x": 79, "type": "mousemove", "message_id": 1956}
{"sender": 3699, "msg_type": "MouseEvent", "y": 52, "x": 79, "type": "mousemove", "message_id": 1957}
{"sender": 3699, "msg_type": "MouseEvent", "y": 52, "x": 78, "type": "mousemove", "message_id": 1958}
{"sender": 3699, "msg_type": "MouseEvent", "y": 52, "x": 75, "type": "mouseover", "message_id": 1959}
{"sender": 3699, "msg_type": "MouseEvent", "y": 52, "x": 75, "type": "mouseover", "message_id": 1960}
{"sender": 3699, "msg_type": "MouseEvent", "y": 52, "x": 75, "type": "mousemove", "message_id": 1961}
{"sender": 3699, "msg_type": "MouseEvent", "y": 52, "x": 71, "type": "mousemove", "message_id": 1962}
{"sender": 3699, "msg_type": "MouseEvent", "y": 52, "x": 66, "type": "mousemove", "message_id": 1963}
{"sender": 3699, "msg_type": "MouseEvent", "y": 52, "x": 63, "type": "mousemove", "message_id": 1964}
{"sender": 3699, "msg_type": "MouseEvent", "y": 51, "x": 61, "type": "mousemove", "message_id": 1965}
{"sender": 3699, "msg_type": "MouseEvent", "y": 51, "x": 60, "type": "mouseover", "message_id": 1966}
{"sender": 3699, "msg_type": "MouseEvent", "y": 51, "x": 60, "type": "mouseover", "message_id": 1967}
{"sender": 3699, "msg_type": "MouseEvent", "y": 51, "x": 60, "type": "mousemove", "message_id": 1968}
{"sender": 3699, "msg_type": "MouseEvent", "y": 51, "x": 60, "type": "mousemove", "message_id": 1969}
{"sender": 3699, "msg_type": "MouseEvent", "y": 51, "x": 59, "type": "mousemove", "message_id": 1970}
{"sender": 3699, "msg_type": "MouseEvent", "y": 51, "x": 58, "type": "mousemove", "message_id": 1971}
{"sender": 3699, "msg_type": "MouseEvent", "y": 50, "x": 58, "type": "mousemove", "message_id": 1972}
{"sender": 3699, "msg_type": "MouseEvent", "y": 50, "x": 57, "type": "mousemove", "message_id": 1973}
{"sender": 3699, "msg_type": "MouseEvent", "y": 49, "x": 56, "type": "mousemove", "message_id": 1974}
{"sender": 3699, "msg_type": "MouseEvent", "y": 49, "x": 55, "type": "mousemove", "message_id": 1975}
{"sender": 3699, "msg_type": "MouseEvent", "y": 48, "x": 54, "type": "mousemove", "message_id": 1976}
{"sender": 3699, "msg_type": "MouseEvent", "y": 48, "x": 53, "type": "mousemove", "message_id": 1977}
{"sender": 3699, "msg_type": "MouseEvent", "y": 47, "x": 52, "type": "mousemove", "message_id": 1978}
{"sender": 3699, "msg_type": "MouseEvent", "y": 47, "x": 51, "type": "mousemove", "message_id": 1979}
{"sender": 3699, "msg_type": "MouseEvent", "y": 46, "x": 50, "type": "mousemove", "message_id": 1980}
{"sender": 3699, "msg_type": "MouseEvent", "y": 46, "x": 50, "type": "mousemove", "message_id": 1981}
{"sender": 3699, "msg_type": "MouseEvent", "y": 46, "x": 50, "type": "mousemove", "message_id": 1982}
{"sender": 3699, "msg_type": "MouseEvent", "y": 46, "x": 50, "type": "mousemove", "message_id": 1983}
{"sender": 3699, "msg_type": "MouseEvent", "y": 46, "x": 49, "type": "mousemove", "message_id": 1984}
{"sender": 3699, "msg_type": "MouseEvent", "y": 45, "x": 48, "type": "mousemove", "message_id": 1985}
{"sender": 3699, "msg_type": "MouseEvent", "y": 45, "x": 48, "type": "mousemove", "message_id": 1986}
{"sender": 3699, "msg_type": "MouseEvent", "y": 45, "x": 48, "type": "mousemove", "message_id": 1987}
{"sender": 3699, "msg_type": "MouseEvent", "y": 45, "x": 47, "type": "mousemove", "message_id": 1988}
{"sender": 3699, "msg_type": "MouseEvent", "y": 45, "x": 47, "type": "mousedown", "message_id": 1989}
{"sender": 3699, "msg_type": "MouseEvent", "y": 44, "x": 47, "type": "mousemove", "message_id": 1990}
{"sender": 3699, "msg_type": "MouseEvent", "y": 44, "x": 47, "type": "mouseup", "message_id": 1991}
{"sender": 3699, "msg_type": "MouseEvent", "y": 43, "x": 46, "type": "mousemove", "message_id": 1993}
{"sender": 3699, "msg_type": "MouseEvent", "y": 42, "x": 45, "type": "mousemove", "message_id": 1994}
{"sender": 3699, "msg_type": "MouseEvent", "y": 42, "x": 45, "type": "mousemove", "message_id": 1995}
{"sender": 3699, "msg_type": "MouseEvent", "y": 42, "x": 45, "type": "mousemove", "message_id": 1996}
{"sender": 3699, "msg_type": "MouseEvent", "y": 42, "x": 46, "type": "mousemove", "message_id": 1997}
{"sender": 3699, "msg_type": "MouseEvent", "y": 42, "x": 46, "type": "mousemove", "message_id": 1998}
{"sender": 3699, "msg_type": "MouseEvent", "y": 42, "x": 46, "type": "mousemove", "message_id": 1999}
{"sender": 3699, "msg_type": "MouseEvent", "y": 43, "x": 47, "type": "mousemove", "message_id": 2000}
{"sender": 3699, "msg_type": "MouseEvent", "y": 43, "x": 48, "type": "mousemove", "message_id": 2001}
{"sender": 3699, "msg_type": "MouseEvent", "y": 43, "x": 48, "type": "mousemove", "message_id": 2002}
{"sender": 3699, "msg_type": "MouseEvent", "y": 43, "x": 49, "type": "mousemove", "message_id": 2003}
{"sender": 3699, "msg_type": "MouseEvent", "y": 43, "x": 49, "type": "mousemove", "message_id": 2004}
{"sender": 3699, "msg_type": "MouseEvent", "y": 44, "x": 50, "type": "mousemove", "message_id": 2005}
{"sender": 3699, "msg_type": "MouseEvent", "y": 44, "x": 51, "type": "mousemove", "message_id": 2006}
{"sender": 3699, "msg_type": "MouseEvent", "y": 44, "x": 52, "type": "mousemove", "message_id": 2007}
{"sender": 3699, "msg_type": "MouseEvent", "y": 45, "x": 54, "type": "mouseover", "message_id": 2008}
{"sender": 3699, "msg_type": "MouseEvent", "y": 45, "x": 54, "type": "mouseover", "message_id": 2009}
{"sender": 3699, "msg_type": "MouseEvent", "y": 45, "x": 54, "type": "mousemove", "message_id": 2010}
{"sender": 3699, "msg_type": "MouseEvent", "y": 47, "x": 60, "type": "mousemove", "message_id": 2012}
{"sender": 3699, "msg_type": "MouseEvent", "y": 46, "x": 57, "type": "mousemove", "message_id": 2011}
{"sender": 3699, "msg_type": "MouseEvent", "y": 48, "x": 62, "type": "mousemove", "message_id": 2013}
{"sender": 3699, "msg_type": "MouseEvent", "y": 48, "x": 62, "type": "mouseover", "message_id": 2014}
{"sender": 3699, "msg_type": "MouseEvent", "y": 48, "x": 62, "type": "mousemove", "message_id": 2016}
{"sender": 3699, "msg_type": "MouseEvent", "y": 48, "x": 62, "type": "mouseover", "message_id": 2015}
{"sender": 3699, "msg_type": "MouseEvent", "y": 48, "x": 63, "type": "mousemove", "message_id": 2017}
{"sender": 3699, "msg_type": "MouseEvent", "y": 49, "x": 63, "type": "mousemove", "message_id": 2018}
{"sender": 3699, "msg_type": "MouseEvent", "y": 49, "x": 64, "type": "mousemove", "message_id": 2019}
{"sender": 3699, "msg_type": "MouseEvent", "y": 49, "x": 64, "type": "mousemove", "message_id": 2020}
{"sender": 3699, "msg_type": "MouseEvent", "y": 50, "x": 65, "type": "mousemove", "message_id": 2021}
{"sender": 3699, "msg_type": "MouseEvent", "y": 50, "x": 65, "type": "mousemove", "message_id": 2022}
{"sender": 3699, "msg_type": "MouseEvent", "y": 50, "x": 65, "type": "mousemove", "message_id": 2023}
{"sender": 3699, "msg_type": "MouseEvent", "y": 50, "x": 65, "type": "mousemove", "message_id": 2024}
{"sender": 3699, "msg_type": "MouseEvent", "y": 51, "x": 65, "type": "mousemove", "message_id": 2025}
{"sender": 3699, "msg_type": "MouseEvent", "y": 51, "x": 65, "type": "mousemove", "message_id": 2026}
{"sender": 3699, "msg_type": "MouseEvent", "y": 52, "x": 65, "type": "mousemove", "message_id": 2027}
{"sender": 3699, "msg_type": "MouseEvent", "y": 53, "x": 66, "type": "mousemove", "message_id": 2028}
{"sender": 3699, "msg_type": "MouseEvent", "y": 54, "x": 67, "type": "mousemove", "message_id": 2029}
{"sender": 3699, "msg_type": "MouseEvent", "y": 56, "x": 69, "type": "mouseover", "message_id": 2030}
{"sender": 3699, "msg_type": "MouseEvent", "y": 56, "x": 69, "type": "mouseover", "message_id": 2031}
{"sender": 3699, "msg_type": "MouseEvent", "y": 56, "x": 69, "type": "mousemove", "message_id": 2032}
{"sender": 3699, "msg_type": "MouseEvent", "y": 57, "x": 72, "type": "mouseover", "message_id": 2033}
{"sender": 3699, "msg_type": "MouseEvent", "y": 57, "x": 72, "type": "mouseover", "message_id": 2034}
{"sender": 3699, "msg_type": "MouseEvent", "y": 57, "x": 72, "type": "mousemove", "message_id": 2035}
{"sender": 3699, "msg_type": "MouseEvent", "y": 60, "x": 76, "type": "mouseover", "message_id": 2036}
{"sender": 3699, "msg_type": "MouseEvent", "y": 60, "x": 76, "type": "mouseover", "message_id": 2037}
{"sender": 3699, "msg_type": "MouseEvent", "y": 60, "x": 76, "type": "mousemove", "message_id": 2038}
{"sender": 3699, "msg_type": "MouseEvent", "y": 64, "x": 81, "type": "mousemove", "message_id": 2039}
{"sender": 3699, "msg_type": "MouseEvent", "y": 70, "x": 92, "type": "mousemove", "message_id": 2040}
{"sender": 3699, "msg_type": "MouseEvent", "y": 77, "x": 106, "type": "mousemove", "message_id": 2041}
{"sender": 3699, "msg_type": "MouseEvent", "y": 85, "x": 127, "type": "mousemove", "message_id": 2042}
{"sender": 3699, "msg_type": "MouseEvent", "y": 94, "x": 150, "type": "mousemove", "message_id": 2043}
{"sender": 3699, "msg_type": "MouseEvent", "y": 100, "x": 171, "type": "mousemove", "message_id": 2044}
{"sender": 3699, "msg_type": "MouseEvent", "y": 104, "x": 188, "type": "mousemove", "message_id": 2045}
{"sender": 3699, "msg_type": "MouseEvent", "y": 107, "x": 200, "type": "mousemove", "message_id": 2046}
{"sender": 3699, "msg_type": "MouseEvent", "y": 108, "x": 208, "type": "mouseover", "message_id": 2047}
{"sender": 3699, "msg_type": "MouseEvent", "y": 108, "x": 208, "type": "mouseover", "message_id": 2048}
{"sender": 3699, "msg_type": "MouseEvent", "y": 108, "x": 208, "type": "mousemove", "message_id": 2049}
{"sender": 3699, "msg_type": "MouseEvent", "y": 110, "x": 216, "type": "mouseover", "message_id": 2050}
{"sender": 3699, "msg_type": "MouseEvent", "y": 110, "x": 216, "type": "mouseover", "message_id": 2051}
{"sender": 3699, "msg_type": "MouseEvent", "y": 110, "x": 216, "type": "mousemove", "message_id": 2052}
{"sender": 3699, "msg_type": "MouseEvent", "y": 111, "x": 222, "type": "mouseover", "message_id": 2053}
{"sender": 3699, "msg_type": "MouseEvent", "y": 111, "x": 222, "type": "mouseover", "message_id": 2054}
{"sender": 3699, "msg_type": "MouseEvent", "y": 111, "x": 222, "type": "mousemove", "message_id": 2055}
{"sender": 3699, "msg_type": "MouseEvent", "y": 111, "x": 226, "type": "mousemove", "message_id": 2056}
{"sender": 3699, "msg_type": "MouseEvent", "y": 111, "x": 228, "type": "mousemove", "message_id": 2057}
{"sender": 3699, "msg_type": "MouseEvent", "y": 112, "x": 229, "type": "mouseover", "message_id": 2058}
{"sender": 3699, "msg_type": "MouseEvent", "y": 112, "x": 229, "type": "mouseover", "message_id": 2059}
{"sender": 3699, "msg_type": "MouseEvent", "y": 112, "x": 229, "type": "mousemove", "message_id": 2060}
{"sender": 3699, "msg_type": "MouseEvent", "y": 112, "x": 229, "type": "mousemove", "message_id": 2061}
{"sender": 3699, "msg_type": "MouseEvent", "y": 112, "x": 229, "type": "mousemove", "message_id": 2062}
{"sender": 3699, "msg_type": "MouseEvent", "y": 112, "x": 229, "type": "mousedown", "message_id": 2063}
{"sender": 3699, "msg_type": "MouseEvent", "y": 112, "x": 229, "type": "mouseup", "message_id": 2064}
{"sender": 3699, "msg_type": "MouseEvent", "y": 112, "x": 229, "type": "mousemove", "message_id": 2065}
{"sender": 3699, "msg_type": "MouseEvent", "y": 111, "x": 227, "type": "mouseover", "message_id": 2066}
{"sender": 3699, "msg_type": "MouseEvent", "y": 111, "x": 227, "type": "mousemove", "message_id": 2068}
{"sender": 3699, "msg_type": "MouseEvent", "y": 111, "x": 227, "type": "mouseover", "message_id": 2067}
{"sender": 3699, "msg_type": "MouseEvent", "y": 110, "x": 223, "type": "mousemove", "message_id": 2069}
{"sender": 3699, "msg_type": "MouseEvent", "y": 108, "x": 216, "type": "mouseover", "message_id": 2070}
{"sender": 3699, "msg_type": "MouseEvent", "y": 108, "x": 216, "type": "mouseover", "message_id": 2071}
{"sender": 3699, "msg_type": "MouseEvent", "y": 108, "x": 216, "type": "mousemove", "message_id": 2072}
{"sender": 3699, "msg_type": "MouseEvent", "y": 103, "x": 203, "type": "mousemove", "message_id": 2074}
{"sender": 3699, "msg_type": "MouseEvent", "y": 105, "x": 209, "type": "mousemove", "message_id": 2073}
{"sender": 3699, "msg_type": "MouseEvent", "y": 100, "x": 196, "type": "mousemove", "message_id": 2075}
{"sender": 3699, "msg_type": "MouseEvent", "y": 96, "x": 188, "type": "mousemove", "message_id": 2076}
{"sender": 3699, "msg_type": "MouseEvent", "y": 93, "x": 180, "type": "mousemove", "message_id": 2077}
{"sender": 3699, "msg_type": "MouseEvent", "y": 91, "x": 175, "type": "mousemove", "message_id": 2078}
{"sender": 3699, "msg_type": "MouseEvent", "y": 87, "x": 169, "type": "mousemove", "message_id": 2079}
{"sender": 3699, "msg_type": "MouseEvent", "y": 84, "x": 162, "type": "mousemove", "message_id": 2080}
{"sender": 3699, "msg_type": "MouseEvent", "y": 81, "x": 157, "type": "mousemove", "message_id": 2081}
{"sender": 3699, "msg_type": "MouseEvent", "y": 78, "x": 152, "type": "mousemove", "message_id": 2082}
{"sender": 3699, "msg_type": "MouseEvent", "y": 75, "x": 146, "type": "mousemove", "message_id": 2083}
{"sender": 3699, "msg_type": "MouseEvent", "y": 72, "x": 142, "type": "mousemove", "message_id": 2084}
{"sender": 3699, "msg_type": "MouseEvent", "y": 68, "x": 138, "type": "mousemove", "message_id": 2086}
{"sender": 3699, "msg_type": "MouseEvent", "y": 70, "x": 140, "type": "mousemove", "message_id": 2085}
{"sender": 3699, "msg_type": "MouseEvent", "y": 66, "x": 137, "type": "mouseover", "message_id": 2087}
{"sender": 3699, "msg_type": "MouseEvent", "y": 66, "x": 137, "type": "mousemove", "message_id": 2089}
{"sender": 3699, "msg_type": "MouseEvent", "y": 66, "x": 137, "type": "mouseover", "message_id": 2088}
{"sender": 3699, "msg_type": "MouseEvent", "y": 63, "x": 136, "type": "mousemove", "message_id": 2090}
{"sender": 3699, "msg_type": "MouseEvent", "y": 62, "x": 136, "type": "mousemove", "message_id": 2091}
{"sender": 3699, "msg_type": "MouseEvent", "y": 59, "x": 135, "type": "mousemove", "message_id": 2092}
{"sender": 3699, "msg_type": "MouseEvent", "y": 58, "x": 135, "type": "mousemove", "message_id": 2093}
{"sender": 3699, "msg_type": "MouseEvent", "y": 56, "x": 134, "type": "mousemove", "message_id": 2094}
{"sender": 3699, "msg_type": "MouseEvent", "y": 56, "x": 134, "type": "mousemove", "message_id": 2095}
{"sender": 3699, "msg_type": "MouseEvent", "y": 55, "x": 134, "type": "mousemove", "message_id": 2096}
{"sender": 3699, "msg_type": "MouseEvent", "y": 54, "x": 133, "type": "mousemove", "message_id": 2097}
{"sender": 3699, "msg_type": "MouseEvent", "y": 53, "x": 132, "type": "mousemove", "message_id": 2098}
{"sender": 3699, "msg_type": "MouseEvent", "y": 52, "x": 131, "type": "mousemove", "message_id": 2099}
{"sender": 3699, "msg_type": "MouseEvent", "y": 52, "x": 130, "type": "mousemove", "message_id": 2100}
{"sender": 3699, "msg_type": "MouseEvent", "y": 52, "x": 130, "type": "mousemove", "message_id": 2101}
{"sender": 3699, "msg_type": "MouseEvent", "y": 52, "x": 129, "type": "mousemove", "message_id": 2102}
{"sender": 3699, "msg_type": "MouseEvent", "y": 52, "x": 129, "type": "mousemove", "message_id": 2103}
{"sender": 3699, "msg_type": "MouseEvent", "y": 52, "x": 129, "type": "mousemove", "message_id": 2104}
{"sender": 3699, "msg_type": "MouseEvent", "y": 52, "x": 129, "type": "mousemove", "message_id": 2105}
{"sender": 3699, "msg_type": "MouseEvent", "y": 52, "x": 129, "type": "mousemove", "message_id": 2106}
{"sender": 3699, "msg_type": "MouseEvent", "y": 52, "x": 129, "type": "mousedown", "message_id": 2107}
{"sender": 3699, "msg_type": "MouseEvent", "y": 52, "x": 129, "type": "mouseup", "message_id": 2108}
{"sender": 3699, "msg_type": "MouseEvent", "y": 52, "x": 129, "type": "mousemove", "message_id": 2110}
{"sender": 3699, "msg_type": "MouseEvent", "y": 52, "x": 129, "type": "mousemove", "message_id": 2111}
{"sender": 3699, "msg_type": "MouseEvent", "y": 52, "x": 129, "type": "mousemove", "message_id": 2112}
{"sender": 3699, "msg_type": "MouseEvent", "y": 52, "x": 130, "type": "mousemove", "message_id": 2113}
{"sender": 3699, "msg_type": "MouseEvent", "y": 53, "x": 131, "type": "mousemove", "message_id": 2114}
{"sender": 3699, "msg_type": "MouseEvent", "y": 53, "x": 132, "type": "mousemove", "message_id": 2115}
{"sender": 3699, "msg_type": "MouseEvent", "y": 53, "x": 132, "type": "mousemove", "message_id": 2116}
{"sender": 3699, "msg_type": "MouseEvent", "y": 53, "x": 132, "type": "mousemove", "message_id": 2117}
{"sender": 3699, "msg_type": "MouseEvent", "y": 53, "x": 132, "type": "mousemove", "message_id": 2118}
{"sender": 3699, "msg_type": "MouseEvent", "y": 54, "x": 133, "type": "mousemove", "message_id": 2119}
{"sender": 3699, "msg_type": "MouseEvent", "y": 54, "x": 133, "type": "mousemove", "message_id": 2120}
{"sender": 3699, "msg_type": "MouseEvent", "y": 55, "x": 134, "type": "mousemove", "message_id": 2121}
{"sender": 3699, "msg_type": "MouseEvent", "y": 55, "x": 136, "type": "mousemove", "message_id": 2124}
{"sender": 3699, "msg_type": "MouseEvent", "y": 55, "x": 136, "type": "mouseover", "message_id": 2123}
{"sender": 3699, "msg_type": "MouseEvent", "y": 55, "x": 136, "type": "mouseover", "message_id": 2122}
{"sender": 3699, "msg_type": "MouseEvent", "y": 56, "x": 137, "type": "mouseover", "message_id": 2125}
{"sender": 3699, "msg_type": "MouseEvent", "y": 56, "x": 137, "type": "mouseover", "message_id": 2126}
{"sender": 3699, "msg_type": "MouseEvent", "y": 56, "x": 137, "type": "mousemove", "message_id": 2127}
{"sender": 3699, "msg_type": "MouseEvent", "y": 56, "x": 137, "type": "mousemove", "message_id": 2128}
{"sender": 3699, "msg_type": "MouseEvent", "y": 56, "x": 137, "type": "mousemove", "message_id": 2129}
{"sender": 3699, "msg_type": "MouseEvent", "y": 56, "x": 137, "type": "mousemove", "message_id": 2130}
{"sender": 3699, "msg_type": "MouseEvent", "y": 56, "x": 138, "type": "mousemove", "message_id": 2131}
{"sender": 3699, "msg_type": "MouseEvent", "y": 56, "x": 139, "type": "mousemove", "message_id": 2132}
{"sender": 3699, "msg_type": "MouseEvent", "y": 57, "x": 141, "type": "mouseover", "message_id": 2133}
{"sender": 3699, "msg_type": "MouseEvent", "y": 57, "x": 141, "type": "mouseover", "message_id": 2134}
{"sender": 3699, "msg_type": "MouseEvent", "y": 58, "x": 143, "type": "mousemove", "message_id": 2136}
{"sender": 3699, "msg_type": "MouseEvent", "y": 57, "x": 141, "type": "mousemove", "message_id": 2135}
{"sender": 3699, "msg_type": "MouseEvent", "y": 60, "x": 147, "type": "mouseover", "message_id": 2137}
{"sender": 3699, "msg_type": "MouseEvent", "y": 60, "x": 147, "type": "mouseover", "message_id": 2138}
{"sender": 3699, "msg_type": "MouseEvent", "y": 60, "x": 147, "type": "mousemove", "message_id": 2139}
{"sender": 3699, "msg_type": "MouseEvent", "y": 62, "x": 151, "type": "mousemove", "message_id": 2140}
{"sender": 3699, "msg_type": "MouseEvent", "y": 65, "x": 156, "type": "mousemove", "message_id": 2141}
{"sender": 3699, "msg_type": "MouseEvent", "y": 67, "x": 161, "type": "mousemove", "message_id": 2142}
{"sender": 3699, "msg_type": "MouseEvent", "y": 69, "x": 165, "type": "mousemove", "message_id": 2143}
{"sender": 3699, "msg_type": "MouseEvent", "y": 71, "x": 168, "type": "mousemove", "message_id": 2144}
{"sender": 3699, "msg_type": "MouseEvent", "y": 73, "x": 173, "type": "mousemove", "message_id": 2145}
{"sender": 3699, "msg_type": "MouseEvent", "y": 76, "x": 178, "type": "mousemove", "message_id": 2146}
{"sender": 3699, "msg_type": "MouseEvent", "y": 80, "x": 185, "type": "mousemove", "message_id": 2147}
{"sender": 3699, "msg_type": "MouseEvent", "y": 84, "x": 194, "type": "mousemove", "message_id": 2148}
{"sender": 3699, "msg_type": "MouseEvent", "y": 87, "x": 201, "type": "mousemove", "message_id": 2149}
{"sender": 3699, "msg_type": "MouseEvent", "y": 91, "x": 209, "type": "mousemove", "message_id": 2150}
{"sender": 3699, "msg_type": "MouseEvent", "y": 93, "x": 215, "type": "mousemove", "message_id": 2151}
{"sender": 3699, "msg_type": "MouseEvent", "y": 95, "x": 218, "type": "mousemove", "message_id": 2152}
{"sender": 3699, "msg_type": "MouseEvent", "y": 97, "x": 221, "type": "mousemove", "message_id": 2153}
{"sender": 3699, "msg_type": "MouseEvent", "y": 99, "x": 224, "type": "mousemove", "message_id": 2154}
{"sender": 3699, "msg_type": "MouseEvent", "y": 100, "x": 227, "type": "mouseover", "message_id": 2155}
{"sender": 3699, "msg_type": "MouseEvent", "y": 100, "x": 227, "type": "mouseover", "message_id": 2156}
{"sender": 3699, "msg_type": "MouseEvent", "y": 100, "x": 227, "type": "mousemove", "message_id": 2157}
{"sender": 3699, "msg_type": "MouseEvent", "y": 103, "x": 231, "type": "mouseover", "message_id": 2158}
{"sender": 3699, "msg_type": "MouseEvent", "y": 103, "x": 231, "type": "mouseover", "message_id": 2159}
{"sender": 3699, "msg_type": "MouseEvent", "y": 103, "x": 231, "type": "mousemove", "message_id": 2160}
{"sender": 3699, "msg_type": "MouseEvent", "y": 105, "x": 235, "type": "mousemove", "message_id": 2161}
{"sender": 3699, "msg_type": "MouseEvent", "y": 107, "x": 240, "type": "mousemove", "message_id": 2162}
{"sender": 3699, "msg_type": "MouseEvent", "y": 109, "x": 244, "type": "mousemove", "message_id": 2163}
{"sender": 3699, "msg_type": "MouseEvent", "y": 111, "x": 247, "type": "mousemove", "message_id": 2164}
{"sender": 3699, "msg_type": "MouseEvent", "y": 112, "x": 249, "type": "mouseover", "message_id": 2165}
{"sender": 3699, "msg_type": "MouseEvent", "y": 112, "x": 249, "type": "mouseover", "message_id": 2166}
{"sender": 3699, "msg_type": "MouseEvent", "y": 112, "x": 249, "type": "mousemove", "message_id": 2167}
{"sender": 3699, "msg_type": "MouseEvent", "y": 112, "x": 251, "type": "mousemove", "message_id": 2168}
{"sender": 3699, "msg_type": "MouseEvent", "y": 113, "x": 251, "type": "mouseover", "message_id": 2169}
{"sender": 3699, "msg_type": "MouseEvent", "y": 113, "x": 251, "type": "mouseover", "message_id": 2170}
{"sender": 3699, "msg_type": "MouseEvent", "y": 113, "x": 251, "type": "mousemove", "message_id": 2171}
{"sender": 3699, "msg_type": "MouseEvent", "y": 113, "x": 252, "type": "mousemove", "message_id": 2172}
{"sender": 3699, "msg_type": "MouseEvent", "y": 113, "x": 252, "type": "mousemove", "message_id": 2173}
{"sender": 3699, "msg_type": "MouseEvent", "y": 113, "x": 252, "type": "mousemove", "message_id": 2174}
{"sender": 3699, "msg_type": "MouseEvent", "y": 113, "x": 252, "type": "mousemove", "message_id": 2175}
{"sender": 3699, "msg_type": "MouseEvent", "y": 113, "x": 252, "type": "mousemove", "message_id": 2176}
{"sender": 3699, "msg_type": "MouseEvent", "y": 113, "x": 252, "type": "mousemove", "message_id": 2177}
{"sender": 3699, "msg_type": "MouseEvent", "y": 113, "x": 252, "type": "mousedown", "message_id": 2178}
{"sender": 3699, "msg_type": "MouseEvent", "y": 113, "x": 252, "type": "mouseup", "message_id": 2179}
{"sender": 3699, "msg_type": "MouseEvent", "y": 113, "x": 252, "type": "mousemove", "message_id": 2180}
{"sender": 3699, "msg_type": "MouseEvent", "y": 113, "x": 251, "type": "mousemove", "message_id": 2181}
{"sender": 3699, "msg_type": "MouseEvent", "y": 112, "x": 250, "type": "mousemove", "message_id": 2182}
{"sender": 3699, "msg_type": "MouseEvent", "y": 112, "x": 248, "type": "mouseover", "message_id": 2183}
{"sender": 3699, "msg_type": "MouseEvent", "y": 112, "x": 248, "type": "mouseover", "message_id": 2184}
{"sender": 3699, "msg_type": "MouseEvent", "y": 112, "x": 248, "type": "mousemove", "message_id": 2185}
{"sender": 3699, "msg_type": "MouseEvent", "y": 111, "x": 247, "type": "mouseover", "message_id": 2186}
{"sender": 3699, "msg_type": "MouseEvent", "y": 111, "x": 247, "type": "mousemove", "message_id": 2188}
{"sender": 3699, "msg_type": "MouseEvent", "y": 111, "x": 247, "type": "mouseover", "message_id": 2187}
{"sender": 3699, "msg_type": "MouseEvent", "y": 110, "x": 245, "type": "mouseover", "message_id": 2189}
{"sender": 3699, "msg_type": "MouseEvent", "y": 110, "x": 245, "type": "mouseover", "message_id": 2190}
{"sender": 3699, "msg_type": "MouseEvent", "y": 110, "x": 245, "type": "mousemove", "message_id": 2191}
{"sender": 3699, "msg_type": "MouseEvent", "y": 110, "x": 244, "type": "mouseover", "message_id": 2192}
{"sender": 3699, "msg_type": "MouseEvent", "y": 110, "x": 244, "type": "mouseover", "message_id": 2193}
{"sender": 3699, "msg_type": "MouseEvent", "y": 110, "x": 244, "type": "mousemove", "message_id": 2194}
{"sender": 3699, "msg_type": "MouseEvent", "y": 109, "x": 242, "type": "mouseover", "message_id": 2195}
{"sender": 3699, "msg_type": "MouseEvent", "y": 109, "x": 242, "type": "mouseover", "message_id": 2196}
{"sender": 3699, "msg_type": "MouseEvent", "y": 109, "x": 242, "type": "mousemove", "message_id": 2197}
{"sender": 3699, "msg_type": "MouseEvent", "y": 108, "x": 239, "type": "mousemove", "message_id": 2198}
{"sender": 3699, "msg_type": "MouseEvent", "y": 106, "x": 235, "type": "mouseover", "message_id": 2199}
{"sender": 3699, "msg_type": "MouseEvent", "y": 106, "x": 235, "type": "mouseover", "message_id": 2200}
{"sender": 3699, "msg_type": "MouseEvent", "y": 106, "x": 235, "type": "mousemove", "message_id": 2201}
{"sender": 3699, "msg_type": "MouseEvent", "y": 104, "x": 230, "type": "mousemove", "message_id": 2202}
{"sender": 3699, "msg_type": "MouseEvent", "y": 101, "x": 226, "type": "mousemove", "message_id": 2203}
{"sender": 3699, "msg_type": "MouseEvent", "y": 98, "x": 221, "type": "mousemove", "message_id": 2204}
{"sender": 3699, "msg_type": "MouseEvent", "y": 94, "x": 217, "type": "mousemove", "message_id": 2205}
{"sender": 3699, "msg_type": "MouseEvent", "y": 90, "x": 212, "type": "mousemove", "message_id": 2206}
{"sender": 3699, "msg_type": "MouseEvent", "y": 85, "x": 207, "type": "mousemove", "message_id": 2207}
{"sender": 3699, "msg_type": "MouseEvent", "y": 81, "x": 202, "type": "mousemove", "message_id": 2208}
{"sender": 3699, "msg_type": "MouseEvent", "y": 78, "x": 199, "type": "mousemove", "message_id": 2209}
{"sender": 3699, "msg_type": "MouseEvent", "y": 74, "x": 196, "type": "mousemove", "message_id": 2210}
{"sender": 3699, "msg_type": "MouseEvent", "y": 70, "x": 193, "type": "mousemove", "message_id": 2211}
{"sender": 3699, "msg_type": "MouseEvent", "y": 66, "x": 191, "type": "mousemove", "message_id": 2212}
{"sender": 3699, "msg_type": "MouseEvent", "y": 63, "x": 189, "type": "mousemove", "message_id": 2213}
{"sender": 3699, "msg_type": "MouseEvent", "y": 59, "x": 186, "type": "mouseover", "message_id": 2214}
{"sender": 3699, "msg_type": "MouseEvent", "y": 59, "x": 186, "type": "mousemove", "message_id": 2216}
{"sender": 3699, "msg_type": "MouseEvent", "y": 59, "x": 186, "type": "mouseover", "message_id": 2215}
{"sender": 3699, "msg_type": "MouseEvent", "y": 55, "x": 183, "type": "mousemove", "message_id": 2217}
{"sender": 3699, "msg_type": "MouseEvent", "y": 52, "x": 182, "type": "mousemove", "message_id": 2220}
{"sender": 3699, "msg_type": "MouseEvent", "y": 52, "x": 182, "type": "mouseover", "message_id": 2219}
{"sender": 3699, "msg_type": "MouseEvent", "y": 52, "x": 182, "type": "mouseover", "message_id": 2218}
{"sender": 3699, "msg_type": "MouseEvent", "y": 50, "x": 181, "type": "mousemove", "message_id": 2221}
{"sender": 3699, "msg_type": "MouseEvent", "y": 49, "x": 180, "type": "mousemove", "message_id": 2222}
{"sender": 3699, "msg_type": "MouseEvent", "y": 49, "x": 180, "type": "mousemove", "message_id": 2223}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,899 @@
{"panX": 106.34787515973903, "panY": 282.9020124082514, "scale": 0.5800000000000001, "sender": 3914, "msg_type": "ViewPort", "message_id": 0}
{"sender": 3914, "msg_type": "MouseEvent", "y": 46, "x": 187, "type": "mousemove", "message_id": 702}
{"sender": 3914, "msg_type": "MouseEvent", "y": 48, "x": 187, "type": "mousemove", "message_id": 703}
{"sender": 3914, "msg_type": "MouseEvent", "y": 51, "x": 187, "type": "mousemove", "message_id": 704}
{"sender": 3914, "msg_type": "MouseEvent", "y": 53, "x": 188, "type": "mousemove", "message_id": 705}
{"sender": 3914, "msg_type": "MouseEvent", "y": 57, "x": 190, "type": "mouseover", "message_id": 706}
{"sender": 3914, "msg_type": "MouseEvent", "y": 57, "x": 190, "type": "mouseover", "message_id": 707}
{"sender": 3914, "msg_type": "MouseEvent", "y": 57, "x": 190, "type": "mousemove", "message_id": 708}
{"sender": 3914, "msg_type": "MouseEvent", "y": 61, "x": 193, "type": "mouseover", "message_id": 709}
{"sender": 3914, "msg_type": "MouseEvent", "y": 61, "x": 193, "type": "mouseover", "message_id": 710}
{"sender": 3914, "msg_type": "MouseEvent", "y": 61, "x": 193, "type": "mousemove", "message_id": 711}
{"sender": 3914, "msg_type": "MouseEvent", "y": 65, "x": 196, "type": "mousemove", "message_id": 712}
{"sender": 3914, "msg_type": "MouseEvent", "y": 70, "x": 198, "type": "mousemove", "message_id": 713}
{"sender": 3914, "msg_type": "MouseEvent", "y": 73, "x": 200, "type": "mousemove", "message_id": 714}
{"sender": 3914, "msg_type": "MouseEvent", "y": 80, "x": 203, "type": "mousemove", "message_id": 715}
{"sender": 3914, "msg_type": "MouseEvent", "y": 87, "x": 204, "type": "mouseover", "message_id": 716}
{"sender": 3914, "msg_type": "MouseEvent", "y": 87, "x": 204, "type": "mouseover", "message_id": 717}
{"sender": 3914, "msg_type": "MouseEvent", "y": 87, "x": 204, "type": "mousemove", "message_id": 718}
{"sender": 3914, "msg_type": "MouseEvent", "y": 95, "x": 205, "type": "mousemove", "message_id": 719}
{"sender": 3914, "msg_type": "MouseEvent", "y": 104, "x": 207, "type": "mouseover", "message_id": 720}
{"sender": 3914, "msg_type": "MouseEvent", "y": 104, "x": 207, "type": "mouseover", "message_id": 721}
{"sender": 3914, "msg_type": "MouseEvent", "y": 104, "x": 207, "type": "mousemove", "message_id": 722}
{"sender": 3914, "msg_type": "MouseEvent", "y": 109, "x": 209, "type": "mousemove", "message_id": 723}
{"sender": 3914, "msg_type": "MouseEvent", "y": 117, "x": 211, "type": "mousemove", "message_id": 724}
{"sender": 3914, "msg_type": "MouseEvent", "y": 123, "x": 214, "type": "mousemove", "message_id": 725}
{"sender": 3914, "msg_type": "MouseEvent", "y": 130, "x": 217, "type": "mousemove", "message_id": 726}
{"sender": 3914, "msg_type": "MouseEvent", "y": 138, "x": 219, "type": "mousemove", "message_id": 727}
{"sender": 3914, "msg_type": "MouseEvent", "y": 144, "x": 220, "type": "mouseover", "message_id": 728}
{"sender": 3914, "msg_type": "MouseEvent", "y": 144, "x": 220, "type": "mouseover", "message_id": 729}
{"sender": 3914, "msg_type": "MouseEvent", "y": 144, "x": 220, "type": "mousemove", "message_id": 730}
{"sender": 3914, "msg_type": "MouseEvent", "y": 151, "x": 220, "type": "mousemove", "message_id": 731}
{"sender": 3914, "msg_type": "MouseEvent", "y": 158, "x": 220, "type": "mousemove", "message_id": 732}
{"sender": 3914, "msg_type": "MouseEvent", "y": 165, "x": 220, "type": "mousemove", "message_id": 733}
{"sender": 3914, "msg_type": "MouseEvent", "y": 173, "x": 220, "type": "mousemove", "message_id": 734}
{"sender": 3914, "msg_type": "MouseEvent", "y": 179, "x": 220, "type": "mousemove", "message_id": 735}
{"sender": 3914, "msg_type": "MouseEvent", "y": 187, "x": 220, "type": "mousemove", "message_id": 736}
{"sender": 3914, "msg_type": "MouseEvent", "y": 195, "x": 220, "type": "mousemove", "message_id": 737}
{"sender": 3914, "msg_type": "MouseEvent", "y": 202, "x": 218, "type": "mouseover", "message_id": 738}
{"sender": 3914, "msg_type": "MouseEvent", "y": 202, "x": 218, "type": "mouseover", "message_id": 739}
{"sender": 3914, "msg_type": "MouseEvent", "y": 202, "x": 218, "type": "mousemove", "message_id": 740}
{"sender": 3914, "msg_type": "MouseEvent", "y": 210, "x": 216, "type": "mousemove", "message_id": 741}
{"sender": 3914, "msg_type": "MouseEvent", "y": 216, "x": 214, "type": "mousemove", "message_id": 742}
{"sender": 3914, "msg_type": "MouseEvent", "y": 224, "x": 212, "type": "mousemove", "message_id": 743}
{"sender": 3914, "msg_type": "MouseEvent", "y": 233, "x": 210, "type": "mousemove", "message_id": 744}
{"sender": 3914, "msg_type": "MouseEvent", "y": 240, "x": 208, "type": "mousemove", "message_id": 745}
{"sender": 3914, "msg_type": "MouseEvent", "y": 247, "x": 208, "type": "mouseover", "message_id": 746}
{"sender": 3914, "msg_type": "MouseEvent", "y": 247, "x": 208, "type": "mouseover", "message_id": 747}
{"sender": 3914, "msg_type": "MouseEvent", "y": 247, "x": 208, "type": "mousemove", "message_id": 748}
{"sender": 3914, "msg_type": "MouseEvent", "y": 251, "x": 207, "type": "mousemove", "message_id": 749}
{"sender": 3914, "msg_type": "MouseEvent", "y": 256, "x": 207, "type": "mousemove", "message_id": 750}
{"sender": 3914, "msg_type": "MouseEvent", "y": 260, "x": 207, "type": "mousemove", "message_id": 751}
{"sender": 3914, "msg_type": "MouseEvent", "y": 263, "x": 207, "type": "mousemove", "message_id": 752}
{"sender": 3914, "msg_type": "MouseEvent", "y": 266, "x": 207, "type": "mousemove", "message_id": 753}
{"sender": 3914, "msg_type": "MouseEvent", "y": 268, "x": 207, "type": "mousemove", "message_id": 754}
{"sender": 3914, "msg_type": "MouseEvent", "y": 269, "x": 207, "type": "mousemove", "message_id": 755}
{"sender": 3914, "msg_type": "MouseEvent", "y": 272, "x": 206, "type": "mousemove", "message_id": 756}
{"sender": 3914, "msg_type": "MouseEvent", "y": 274, "x": 206, "type": "mousemove", "message_id": 757}
{"sender": 3914, "msg_type": "MouseEvent", "y": 276, "x": 205, "type": "mousemove", "message_id": 758}
{"sender": 3914, "msg_type": "MouseEvent", "y": 277, "x": 204, "type": "mousemove", "message_id": 759}
{"sender": 3914, "msg_type": "MouseEvent", "y": 279, "x": 204, "type": "mousemove", "message_id": 760}
{"sender": 3914, "msg_type": "MouseEvent", "y": 281, "x": 203, "type": "mousemove", "message_id": 761}
{"sender": 3914, "msg_type": "MouseEvent", "y": 284, "x": 202, "type": "mousemove", "message_id": 762}
{"sender": 3914, "msg_type": "MouseEvent", "y": 287, "x": 201, "type": "mousemove", "message_id": 763}
{"sender": 3914, "msg_type": "MouseEvent", "y": 290, "x": 200, "type": "mousemove", "message_id": 764}
{"sender": 3914, "msg_type": "MouseEvent", "y": 294, "x": 199, "type": "mousemove", "message_id": 765}
{"sender": 3914, "msg_type": "MouseEvent", "y": 297, "x": 199, "type": "mousemove", "message_id": 766}
{"sender": 3914, "msg_type": "MouseEvent", "y": 300, "x": 199, "type": "mousemove", "message_id": 767}
{"sender": 3914, "msg_type": "MouseEvent", "y": 302, "x": 199, "type": "mousemove", "message_id": 768}
{"sender": 3914, "msg_type": "MouseEvent", "y": 303, "x": 199, "type": "mousemove", "message_id": 769}
{"sender": 3914, "msg_type": "MouseEvent", "y": 303, "x": 199, "type": "mousemove", "message_id": 770}
{"sender": 3914, "msg_type": "MouseEvent", "y": 303, "x": 198, "type": "mousemove", "message_id": 771}
{"sender": 3914, "msg_type": "MouseEvent", "y": 303, "x": 196, "type": "mouseover", "message_id": 772}
{"sender": 3914, "msg_type": "MouseEvent", "y": 303, "x": 196, "type": "mouseover", "message_id": 773}
{"sender": 3914, "msg_type": "MouseEvent", "y": 303, "x": 196, "type": "mousemove", "message_id": 774}
{"sender": 3914, "msg_type": "MouseEvent", "y": 303, "x": 192, "type": "mousemove", "message_id": 775}
{"sender": 3914, "msg_type": "MouseEvent", "y": 303, "x": 189, "type": "mousemove", "message_id": 776}
{"sender": 3914, "msg_type": "MouseEvent", "y": 303, "x": 187, "type": "mousemove", "message_id": 777}
{"sender": 3914, "msg_type": "MouseEvent", "y": 303, "x": 185, "type": "mousemove", "message_id": 778}
{"sender": 3914, "msg_type": "MouseEvent", "y": 303, "x": 184, "type": "mouseover", "message_id": 779}
{"sender": 3914, "msg_type": "MouseEvent", "y": 303, "x": 184, "type": "mouseover", "message_id": 780}
{"sender": 3914, "msg_type": "MouseEvent", "y": 303, "x": 184, "type": "mousemove", "message_id": 781}
{"sender": 3914, "msg_type": "MouseEvent", "y": 303, "x": 183, "type": "mousemove", "message_id": 782}
{"sender": 3914, "msg_type": "MouseEvent", "y": 303, "x": 182, "type": "mousemove", "message_id": 783}
{"sender": 3914, "msg_type": "MouseEvent", "y": 303, "x": 181, "type": "mousemove", "message_id": 784}
{"sender": 3914, "msg_type": "MouseEvent", "y": 303, "x": 181, "type": "mousemove", "message_id": 785}
{"sender": 3914, "msg_type": "MouseEvent", "y": 303, "x": 181, "type": "mousemove", "message_id": 786}
{"sender": 3914, "msg_type": "MouseEvent", "y": 303, "x": 181, "type": "mousedown", "message_id": 787}
{"sender": 3914, "msg_type": "MouseEvent", "y": 303, "x": 181, "type": "mouseup", "message_id": 788}
{"sender": 3914, "msg_type": "KeyEvent", "shiftKey": false, "message_id": 789, "altKey": false, "metaKey": false, "key": "s", "ctrlKey": false, "type": "keydown", "keyCode": 83}
{"sender": 3914, "msg_type": "MouseEvent", "y": 303, "x": 182, "type": "mousemove", "message_id": 791}
{"sender": 3914, "msg_type": "MouseEvent", "y": 303, "x": 185, "type": "mouseover", "message_id": 792}
{"sender": 3914, "msg_type": "MouseEvent", "y": 303, "x": 185, "type": "mouseover", "message_id": 793}
{"sender": 3914, "msg_type": "MouseEvent", "y": 303, "x": 185, "type": "mousemove", "message_id": 794}
{"sender": 3914, "msg_type": "MouseEvent", "y": 303, "x": 190, "type": "mousemove", "message_id": 795}
{"sender": 3914, "msg_type": "MouseEvent", "y": 303, "x": 198, "type": "mousemove", "message_id": 796}
{"sender": 3914, "msg_type": "MouseEvent", "y": 303, "x": 207, "type": "mousemove", "message_id": 797}
{"sender": 3914, "msg_type": "MouseEvent", "y": 303, "x": 225, "type": "mouseover", "message_id": 798}
{"sender": 3914, "msg_type": "MouseEvent", "y": 303, "x": 225, "type": "mouseover", "message_id": 799}
{"sender": 3914, "msg_type": "MouseEvent", "y": 303, "x": 225, "type": "mousemove", "message_id": 800}
{"sender": 3914, "msg_type": "MouseEvent", "y": 304, "x": 249, "type": "mousemove", "message_id": 801}
{"sender": 3914, "msg_type": "MouseEvent", "y": 304, "x": 279, "type": "mousemove", "message_id": 802}
{"sender": 3914, "msg_type": "MouseEvent", "y": 304, "x": 311, "type": "mousemove", "message_id": 803}
{"sender": 3914, "msg_type": "MouseEvent", "y": 303, "x": 331, "type": "mousemove", "message_id": 804}
{"sender": 3914, "msg_type": "MouseEvent", "y": 301, "x": 354, "type": "mousemove", "message_id": 805}
{"sender": 3914, "msg_type": "MouseEvent", "y": 300, "x": 370, "type": "mousemove", "message_id": 806}
{"sender": 3914, "msg_type": "MouseEvent", "y": 299, "x": 383, "type": "mouseover", "message_id": 807}
{"sender": 3914, "msg_type": "MouseEvent", "y": 299, "x": 383, "type": "mousemove", "message_id": 809}
{"sender": 3914, "msg_type": "MouseEvent", "y": 299, "x": 383, "type": "mouseover", "message_id": 808}
{"sender": 3914, "msg_type": "MouseEvent", "y": 298, "x": 392, "type": "mousemove", "message_id": 810}
{"sender": 3914, "msg_type": "MouseEvent", "y": 298, "x": 397, "type": "mousemove", "message_id": 811}
{"sender": 3914, "msg_type": "MouseEvent", "y": 297, "x": 402, "type": "mousemove", "message_id": 812}
{"sender": 3914, "msg_type": "MouseEvent", "y": 297, "x": 405, "type": "mousemove", "message_id": 813}
{"sender": 3914, "msg_type": "MouseEvent", "y": 297, "x": 407, "type": "mousemove", "message_id": 814}
{"sender": 3914, "msg_type": "MouseEvent", "y": 297, "x": 408, "type": "mouseover", "message_id": 815}
{"sender": 3914, "msg_type": "MouseEvent", "y": 297, "x": 408, "type": "mouseover", "message_id": 816}
{"sender": 3914, "msg_type": "MouseEvent", "y": 297, "x": 408, "type": "mousemove", "message_id": 817}
{"sender": 3914, "msg_type": "MouseEvent", "y": 297, "x": 408, "type": "mousemove", "message_id": 818}
{"sender": 3914, "msg_type": "MouseEvent", "y": 297, "x": 408, "type": "mousemove", "message_id": 819}
{"sender": 3914, "msg_type": "MouseEvent", "y": 297, "x": 408, "type": "mousemove", "message_id": 820}
{"sender": 3914, "msg_type": "MouseEvent", "y": 297, "x": 408, "type": "mousemove", "message_id": 821}
{"sender": 3914, "msg_type": "MouseEvent", "y": 297, "x": 409, "type": "mousemove", "message_id": 822}
{"sender": 3914, "msg_type": "MouseEvent", "y": 297, "x": 409, "type": "mousemove", "message_id": 823}
{"sender": 3914, "msg_type": "MouseEvent", "y": 297, "x": 409, "type": "mousemove", "message_id": 824}
{"sender": 3914, "msg_type": "MouseEvent", "y": 297, "x": 410, "type": "mousemove", "message_id": 825}
{"sender": 3914, "msg_type": "MouseEvent", "y": 297, "x": 410, "type": "mousemove", "message_id": 826}
{"sender": 3914, "msg_type": "MouseEvent", "y": 297, "x": 410, "type": "mousemove", "message_id": 827}
{"sender": 3914, "msg_type": "MouseEvent", "y": 297, "x": 410, "type": "mousemove", "message_id": 829}
{"sender": 3914, "msg_type": "MouseEvent", "y": 297, "x": 410, "type": "mousemove", "message_id": 828}
{"sender": 3914, "msg_type": "MouseEvent", "y": 298, "x": 409, "type": "mousemove", "message_id": 830}
{"sender": 3914, "msg_type": "MouseEvent", "y": 298, "x": 408, "type": "mousemove", "message_id": 831}
{"sender": 3914, "msg_type": "MouseEvent", "y": 299, "x": 407, "type": "mousemove", "message_id": 832}
{"sender": 3914, "msg_type": "MouseEvent", "y": 299, "x": 407, "type": "mousemove", "message_id": 833}
{"sender": 3914, "msg_type": "MouseEvent", "y": 299, "x": 406, "type": "mousemove", "message_id": 834}
{"sender": 3914, "msg_type": "MouseEvent", "y": 299, "x": 406, "type": "mousemove", "message_id": 835}
{"sender": 3914, "msg_type": "MouseEvent", "y": 299, "x": 406, "type": "mousemove", "message_id": 836}
{"sender": 3914, "msg_type": "MouseEvent", "y": 299, "x": 405, "type": "mousemove", "message_id": 837}
{"sender": 3914, "msg_type": "MouseEvent", "y": 300, "x": 403, "type": "mouseover", "message_id": 838}
{"sender": 3914, "msg_type": "MouseEvent", "y": 300, "x": 403, "type": "mouseover", "message_id": 839}
{"sender": 3914, "msg_type": "MouseEvent", "y": 300, "x": 403, "type": "mousemove", "message_id": 840}
{"sender": 3914, "msg_type": "MouseEvent", "y": 300, "x": 402, "type": "mouseover", "message_id": 841}
{"sender": 3914, "msg_type": "MouseEvent", "y": 300, "x": 402, "type": "mouseover", "message_id": 842}
{"sender": 3914, "msg_type": "MouseEvent", "y": 300, "x": 402, "type": "mousemove", "message_id": 843}
{"sender": 3914, "msg_type": "MouseEvent", "y": 300, "x": 400, "type": "mouseover", "message_id": 844}
{"sender": 3914, "msg_type": "MouseEvent", "y": 300, "x": 400, "type": "mouseover", "message_id": 845}
{"sender": 3914, "msg_type": "MouseEvent", "y": 300, "x": 400, "type": "mousemove", "message_id": 846}
{"sender": 3914, "msg_type": "MouseEvent", "y": 300, "x": 399, "type": "mouseover", "message_id": 847}
{"sender": 3914, "msg_type": "MouseEvent", "y": 300, "x": 399, "type": "mousemove", "message_id": 849}
{"sender": 3914, "msg_type": "MouseEvent", "y": 300, "x": 399, "type": "mouseover", "message_id": 848}
{"sender": 3914, "msg_type": "MouseEvent", "y": 300, "x": 398, "type": "mousemove", "message_id": 850}
{"sender": 3914, "msg_type": "MouseEvent", "y": 300, "x": 398, "type": "mousemove", "message_id": 851}
{"sender": 3914, "msg_type": "MouseEvent", "y": 301, "x": 398, "type": "mousemove", "message_id": 852}
{"sender": 3914, "msg_type": "MouseEvent", "y": 301, "x": 397, "type": "mousemove", "message_id": 853}
{"sender": 3914, "msg_type": "KeyEvent", "shiftKey": false, "message_id": 854, "altKey": false, "metaKey": false, "key": "s", "ctrlKey": false, "type": "keydown", "keyCode": 83}
{"sender": 3914, "msg_type": "MouseEvent", "y": 301, "x": 397, "type": "mousemove", "message_id": 856}
{"sender": 3914, "msg_type": "MouseEvent", "y": 300, "x": 396, "type": "mousemove", "message_id": 857}
{"sender": 3914, "msg_type": "MouseEvent", "y": 300, "x": 394, "type": "mouseover", "message_id": 858}
{"sender": 3914, "msg_type": "MouseEvent", "y": 300, "x": 394, "type": "mouseover", "message_id": 859}
{"sender": 3914, "msg_type": "MouseEvent", "y": 300, "x": 394, "type": "mousemove", "message_id": 860}
{"sender": 3914, "msg_type": "MouseEvent", "y": 300, "x": 391, "type": "mousemove", "message_id": 861}
{"sender": 3914, "msg_type": "MouseEvent", "y": 300, "x": 386, "type": "mousemove", "message_id": 862}
{"sender": 3914, "msg_type": "MouseEvent", "y": 300, "x": 380, "type": "mousemove", "message_id": 863}
{"sender": 3914, "msg_type": "MouseEvent", "y": 299, "x": 372, "type": "mousemove", "message_id": 864}
{"sender": 3914, "msg_type": "MouseEvent", "y": 298, "x": 365, "type": "mousemove", "message_id": 865}
{"sender": 3914, "msg_type": "MouseEvent", "y": 297, "x": 358, "type": "mousemove", "message_id": 866}
{"sender": 3914, "msg_type": "MouseEvent", "y": 297, "x": 354, "type": "mousemove", "message_id": 867}
{"sender": 3914, "msg_type": "MouseEvent", "y": 297, "x": 351, "type": "mousemove", "message_id": 868}
{"sender": 3914, "msg_type": "MouseEvent", "y": 297, "x": 349, "type": "mousemove", "message_id": 869}
{"sender": 3914, "msg_type": "MouseEvent", "y": 298, "x": 347, "type": "mousemove", "message_id": 870}
{"sender": 3914, "msg_type": "MouseEvent", "y": 298, "x": 345, "type": "mousemove", "message_id": 871}
{"sender": 3914, "msg_type": "MouseEvent", "y": 298, "x": 344, "type": "mouseover", "message_id": 872}
{"sender": 3914, "msg_type": "MouseEvent", "y": 298, "x": 344, "type": "mouseover", "message_id": 873}
{"sender": 3914, "msg_type": "MouseEvent", "y": 298, "x": 344, "type": "mousemove", "message_id": 874}
{"sender": 3914, "msg_type": "MouseEvent", "y": 298, "x": 343, "type": "mousemove", "message_id": 875}
{"sender": 3914, "msg_type": "MouseEvent", "y": 298, "x": 343, "type": "mousemove", "message_id": 876}
{"sender": 3914, "msg_type": "MouseEvent", "y": 298, "x": 342, "type": "mousemove", "message_id": 877}
{"sender": 3914, "msg_type": "MouseEvent", "y": 298, "x": 342, "type": "mousemove", "message_id": 878}
{"sender": 3914, "msg_type": "MouseEvent", "y": 298, "x": 342, "type": "mousemove", "message_id": 879}
{"sender": 3914, "msg_type": "MouseEvent", "y": 297, "x": 342, "type": "mousemove", "message_id": 880}
{"sender": 3914, "msg_type": "MouseEvent", "y": 297, "x": 342, "type": "mousemove", "message_id": 881}
{"sender": 3914, "msg_type": "MouseEvent", "y": 297, "x": 342, "type": "mousemove", "message_id": 882}
{"sender": 3914, "msg_type": "MouseEvent", "y": 297, "x": 342, "type": "mousemove", "message_id": 883}
{"sender": 3914, "msg_type": "MouseEvent", "y": 297, "x": 342, "type": "mousemove", "message_id": 884}
{"sender": 3914, "msg_type": "KeyEvent", "shiftKey": false, "message_id": 885, "altKey": false, "metaKey": false, "key": "l", "ctrlKey": false, "type": "keydown", "keyCode": 76}
{"sender": 3914, "msg_type": "MouseEvent", "y": 297, "x": 341, "type": "mousemove", "message_id": 886}
{"sender": 3914, "msg_type": "MouseEvent", "y": 297, "x": 340, "type": "mousemove", "message_id": 887}
{"sender": 3914, "msg_type": "MouseEvent", "y": 297, "x": 338, "type": "mouseover", "message_id": 888}
{"sender": 3914, "msg_type": "MouseEvent", "y": 297, "x": 338, "type": "mouseover", "message_id": 889}
{"sender": 3914, "msg_type": "MouseEvent", "y": 297, "x": 338, "type": "mousemove", "message_id": 890}
{"sender": 3914, "msg_type": "MouseEvent", "y": 297, "x": 334, "type": "mousemove", "message_id": 891}
{"sender": 3914, "msg_type": "MouseEvent", "y": 297, "x": 328, "type": "mousemove", "message_id": 892}
{"sender": 3914, "msg_type": "MouseEvent", "y": 297, "x": 321, "type": "mousemove", "message_id": 893}
{"sender": 3914, "msg_type": "MouseEvent", "y": 297, "x": 311, "type": "mousemove", "message_id": 894}
{"sender": 3914, "msg_type": "MouseEvent", "y": 298, "x": 298, "type": "mousemove", "message_id": 895}
{"sender": 3914, "msg_type": "MouseEvent", "y": 300, "x": 283, "type": "mouseover", "message_id": 896}
{"sender": 3914, "msg_type": "MouseEvent", "y": 300, "x": 283, "type": "mouseover", "message_id": 897}
{"sender": 3914, "msg_type": "MouseEvent", "y": 300, "x": 283, "type": "mousemove", "message_id": 898}
{"sender": 3914, "msg_type": "MouseEvent", "y": 301, "x": 270, "type": "mouseover", "message_id": 899}
{"sender": 3914, "msg_type": "MouseEvent", "y": 301, "x": 270, "type": "mouseover", "message_id": 900}
{"sender": 3914, "msg_type": "MouseEvent", "y": 301, "x": 270, "type": "mousemove", "message_id": 901}
{"sender": 3914, "msg_type": "MouseEvent", "y": 303, "x": 260, "type": "mouseover", "message_id": 902}
{"sender": 3914, "msg_type": "MouseEvent", "y": 303, "x": 260, "type": "mouseover", "message_id": 903}
{"sender": 3914, "msg_type": "MouseEvent", "y": 303, "x": 260, "type": "mousemove", "message_id": 904}
{"sender": 3914, "msg_type": "MouseEvent", "y": 304, "x": 252, "type": "mouseover", "message_id": 905}
{"sender": 3914, "msg_type": "MouseEvent", "y": 304, "x": 252, "type": "mouseover", "message_id": 906}
{"sender": 3914, "msg_type": "MouseEvent", "y": 304, "x": 246, "type": "mousemove", "message_id": 908}
{"sender": 3914, "msg_type": "MouseEvent", "y": 304, "x": 252, "type": "mousemove", "message_id": 907}
{"sender": 3914, "msg_type": "MouseEvent", "y": 305, "x": 242, "type": "mousemove", "message_id": 909}
{"sender": 3914, "msg_type": "MouseEvent", "y": 305, "x": 238, "type": "mousemove", "message_id": 910}
{"sender": 3914, "msg_type": "MouseEvent", "y": 305, "x": 234, "type": "mousemove", "message_id": 911}
{"sender": 3914, "msg_type": "MouseEvent", "y": 304, "x": 231, "type": "mousemove", "message_id": 912}
{"sender": 3914, "msg_type": "MouseEvent", "y": 304, "x": 227, "type": "mousemove", "message_id": 913}
{"sender": 3914, "msg_type": "MouseEvent", "y": 304, "x": 224, "type": "mousemove", "message_id": 914}
{"sender": 3914, "msg_type": "MouseEvent", "y": 304, "x": 220, "type": "mousemove", "message_id": 915}
{"sender": 3914, "msg_type": "MouseEvent", "y": 304, "x": 218, "type": "mousemove", "message_id": 916}
{"sender": 3914, "msg_type": "MouseEvent", "y": 304, "x": 215, "type": "mousemove", "message_id": 917}
{"sender": 3914, "msg_type": "MouseEvent", "y": 304, "x": 214, "type": "mouseover", "message_id": 918}
{"sender": 3914, "msg_type": "MouseEvent", "y": 304, "x": 214, "type": "mouseover", "message_id": 919}
{"sender": 3914, "msg_type": "MouseEvent", "y": 304, "x": 214, "type": "mousemove", "message_id": 920}
{"sender": 3914, "msg_type": "MouseEvent", "y": 304, "x": 211, "type": "mouseover", "message_id": 921}
{"sender": 3914, "msg_type": "MouseEvent", "y": 304, "x": 211, "type": "mouseover", "message_id": 922}
{"sender": 3914, "msg_type": "MouseEvent", "y": 304, "x": 211, "type": "mousemove", "message_id": 923}
{"sender": 3914, "msg_type": "MouseEvent", "y": 303, "x": 209, "type": "mousemove", "message_id": 924}
{"sender": 3914, "msg_type": "MouseEvent", "y": 302, "x": 203, "type": "mousemove", "message_id": 926}
{"sender": 3914, "msg_type": "MouseEvent", "y": 302, "x": 206, "type": "mousemove", "message_id": 925}
{"sender": 3914, "msg_type": "MouseEvent", "y": 301, "x": 200, "type": "mousemove", "message_id": 927}
{"sender": 3914, "msg_type": "MouseEvent", "y": 301, "x": 197, "type": "mousemove", "message_id": 928}
{"sender": 3914, "msg_type": "MouseEvent", "y": 300, "x": 193, "type": "mousemove", "message_id": 929}
{"sender": 3914, "msg_type": "MouseEvent", "y": 299, "x": 190, "type": "mousemove", "message_id": 930}
{"sender": 3914, "msg_type": "MouseEvent", "y": 299, "x": 189, "type": "mouseover", "message_id": 931}
{"sender": 3914, "msg_type": "MouseEvent", "y": 299, "x": 189, "type": "mouseover", "message_id": 932}
{"sender": 3914, "msg_type": "MouseEvent", "y": 299, "x": 189, "type": "mousemove", "message_id": 933}
{"sender": 3914, "msg_type": "MouseEvent", "y": 299, "x": 188, "type": "mousemove", "message_id": 934}
{"sender": 3914, "msg_type": "MouseEvent", "y": 299, "x": 187, "type": "mousemove", "message_id": 935}
{"sender": 3914, "msg_type": "MouseEvent", "y": 299, "x": 187, "type": "mousemove", "message_id": 936}
{"sender": 3914, "msg_type": "MouseEvent", "y": 299, "x": 187, "type": "mousemove", "message_id": 937}
{"sender": 3914, "msg_type": "MouseEvent", "y": 299, "x": 186, "type": "mousemove", "message_id": 938}
{"sender": 3914, "msg_type": "MouseEvent", "y": 299, "x": 186, "type": "mousemove", "message_id": 939}
{"sender": 3914, "msg_type": "MouseEvent", "y": 299, "x": 186, "type": "mousedown", "message_id": 940}
{"sender": 3914, "msg_type": "MouseEvent", "y": 299, "x": 186, "type": "mouseup", "message_id": 941}
{"sender": 3914, "msg_type": "MouseEvent", "y": 299, "x": 186, "type": "mousemove", "message_id": 943}
{"sender": 3914, "msg_type": "MouseEvent", "y": 299, "x": 187, "type": "mousemove", "message_id": 944}
{"sender": 3914, "msg_type": "MouseEvent", "y": 299, "x": 189, "type": "mouseover", "message_id": 945}
{"sender": 3914, "msg_type": "MouseEvent", "y": 299, "x": 189, "type": "mouseover", "message_id": 946}
{"sender": 3914, "msg_type": "MouseEvent", "y": 299, "x": 189, "type": "mousemove", "message_id": 947}
{"sender": 3914, "msg_type": "MouseEvent", "y": 299, "x": 191, "type": "mousemove", "message_id": 948}
{"sender": 3914, "msg_type": "MouseEvent", "y": 299, "x": 195, "type": "mousemove", "message_id": 949}
{"sender": 3914, "msg_type": "MouseEvent", "y": 299, "x": 200, "type": "mousemove", "message_id": 950}
{"sender": 3914, "msg_type": "MouseEvent", "y": 299, "x": 208, "type": "mousemove", "message_id": 951}
{"sender": 3914, "msg_type": "MouseEvent", "y": 299, "x": 219, "type": "mousemove", "message_id": 952}
{"sender": 3914, "msg_type": "MouseEvent", "y": 299, "x": 232, "type": "mousemove", "message_id": 953}
{"sender": 3914, "msg_type": "MouseEvent", "y": 300, "x": 244, "type": "mousemove", "message_id": 954}
{"sender": 3914, "msg_type": "MouseEvent", "y": 300, "x": 255, "type": "mousemove", "message_id": 955}
{"sender": 3914, "msg_type": "MouseEvent", "y": 299, "x": 264, "type": "mousemove", "message_id": 956}
{"sender": 3914, "msg_type": "MouseEvent", "y": 299, "x": 272, "type": "mousemove", "message_id": 957}
{"sender": 3914, "msg_type": "MouseEvent", "y": 299, "x": 280, "type": "mousemove", "message_id": 958}
{"sender": 3914, "msg_type": "MouseEvent", "y": 299, "x": 290, "type": "mousemove", "message_id": 959}
{"sender": 3914, "msg_type": "MouseEvent", "y": 299, "x": 300, "type": "mousemove", "message_id": 960}
{"sender": 3914, "msg_type": "MouseEvent", "y": 299, "x": 311, "type": "mousemove", "message_id": 961}
{"sender": 3914, "msg_type": "MouseEvent", "y": 299, "x": 322, "type": "mousemove", "message_id": 962}
{"sender": 3914, "msg_type": "MouseEvent", "y": 299, "x": 331, "type": "mousemove", "message_id": 963}
{"sender": 3914, "msg_type": "MouseEvent", "y": 299, "x": 339, "type": "mousemove", "message_id": 964}
{"sender": 3914, "msg_type": "MouseEvent", "y": 298, "x": 347, "type": "mousemove", "message_id": 965}
{"sender": 3914, "msg_type": "MouseEvent", "y": 298, "x": 354, "type": "mousemove", "message_id": 966}
{"sender": 3914, "msg_type": "MouseEvent", "y": 298, "x": 359, "type": "mousemove", "message_id": 967}
{"sender": 3914, "msg_type": "MouseEvent", "y": 298, "x": 363, "type": "mousemove", "message_id": 968}
{"sender": 3914, "msg_type": "MouseEvent", "y": 298, "x": 367, "type": "mousemove", "message_id": 969}
{"sender": 3914, "msg_type": "MouseEvent", "y": 298, "x": 370, "type": "mousemove", "message_id": 970}
{"sender": 3914, "msg_type": "MouseEvent", "y": 298, "x": 373, "type": "mousemove", "message_id": 971}
{"sender": 3914, "msg_type": "MouseEvent", "y": 298, "x": 375, "type": "mousemove", "message_id": 972}
{"sender": 3914, "msg_type": "MouseEvent", "y": 298, "x": 377, "type": "mousemove", "message_id": 973}
{"sender": 3914, "msg_type": "MouseEvent", "y": 298, "x": 378, "type": "mousemove", "message_id": 976}
{"sender": 3914, "msg_type": "MouseEvent", "y": 298, "x": 378, "type": "mouseover", "message_id": 974}
{"sender": 3914, "msg_type": "MouseEvent", "y": 298, "x": 378, "type": "mouseover", "message_id": 975}
{"sender": 3914, "msg_type": "MouseEvent", "y": 298, "x": 379, "type": "mousemove", "message_id": 977}
{"sender": 3914, "msg_type": "MouseEvent", "y": 298, "x": 381, "type": "mouseover", "message_id": 978}
{"sender": 3914, "msg_type": "MouseEvent", "y": 298, "x": 381, "type": "mouseover", "message_id": 979}
{"sender": 3914, "msg_type": "MouseEvent", "y": 298, "x": 381, "type": "mousemove", "message_id": 980}
{"sender": 3914, "msg_type": "MouseEvent", "y": 298, "x": 382, "type": "mouseover", "message_id": 981}
{"sender": 3914, "msg_type": "MouseEvent", "y": 298, "x": 382, "type": "mouseover", "message_id": 982}
{"sender": 3914, "msg_type": "MouseEvent", "y": 298, "x": 382, "type": "mousemove", "message_id": 983}
{"sender": 3914, "msg_type": "MouseEvent", "y": 298, "x": 383, "type": "mousemove", "message_id": 984}
{"sender": 3914, "msg_type": "MouseEvent", "y": 298, "x": 384, "type": "mousemove", "message_id": 985}
{"sender": 3914, "msg_type": "MouseEvent", "y": 298, "x": 385, "type": "mousemove", "message_id": 986}
{"sender": 3914, "msg_type": "MouseEvent", "y": 298, "x": 386, "type": "mousemove", "message_id": 987}
{"sender": 3914, "msg_type": "MouseEvent", "y": 298, "x": 386, "type": "mousemove", "message_id": 988}
{"sender": 3914, "msg_type": "MouseEvent", "y": 298, "x": 387, "type": "mousemove", "message_id": 989}
{"sender": 3914, "msg_type": "MouseEvent", "y": 298, "x": 387, "type": "mousemove", "message_id": 990}
{"sender": 3914, "msg_type": "MouseEvent", "y": 298, "x": 387, "type": "mousemove", "message_id": 991}
{"sender": 3914, "msg_type": "MouseEvent", "y": 298, "x": 388, "type": "mousemove", "message_id": 992}
{"sender": 3914, "msg_type": "MouseEvent", "y": 298, "x": 389, "type": "mousemove", "message_id": 993}
{"sender": 3914, "msg_type": "MouseEvent", "y": 298, "x": 391, "type": "mouseover", "message_id": 995}
{"sender": 3914, "msg_type": "MouseEvent", "y": 298, "x": 391, "type": "mouseover", "message_id": 994}
{"sender": 3914, "msg_type": "MouseEvent", "y": 298, "x": 391, "type": "mousemove", "message_id": 996}
{"sender": 3914, "msg_type": "MouseEvent", "y": 298, "x": 393, "type": "mousemove", "message_id": 997}
{"sender": 3914, "msg_type": "MouseEvent", "y": 298, "x": 394, "type": "mouseover", "message_id": 998}
{"sender": 3914, "msg_type": "MouseEvent", "y": 298, "x": 394, "type": "mouseover", "message_id": 999}
{"sender": 3914, "msg_type": "MouseEvent", "y": 298, "x": 394, "type": "mousemove", "message_id": 1000}
{"sender": 3914, "msg_type": "MouseEvent", "y": 298, "x": 395, "type": "mousemove", "message_id": 1001}
{"sender": 3914, "msg_type": "MouseEvent", "y": 298, "x": 396, "type": "mousemove", "message_id": 1002}
{"sender": 3914, "msg_type": "MouseEvent", "y": 298, "x": 396, "type": "mousemove", "message_id": 1003}
{"sender": 3914, "msg_type": "MouseEvent", "y": 298, "x": 396, "type": "mousedown", "message_id": 1004}
{"sender": 3914, "msg_type": "MouseEvent", "y": 298, "x": 396, "type": "mouseup", "message_id": 1005}
{"sender": 3914, "msg_type": "MouseEvent", "y": 298, "x": 396, "type": "mousemove", "message_id": 1010}
{"sender": 3914, "msg_type": "MouseEvent", "y": 298, "x": 395, "type": "mousemove", "message_id": 1011}
{"sender": 3914, "msg_type": "MouseEvent", "y": 298, "x": 394, "type": "mousemove", "message_id": 1012}
{"sender": 3914, "msg_type": "MouseEvent", "y": 298, "x": 393, "type": "mousemove", "message_id": 1013}
{"sender": 3914, "msg_type": "MouseEvent", "y": 298, "x": 391, "type": "mouseover", "message_id": 1014}
{"sender": 3914, "msg_type": "MouseEvent", "y": 298, "x": 391, "type": "mouseover", "message_id": 1015}
{"sender": 3914, "msg_type": "MouseEvent", "y": 298, "x": 391, "type": "mousemove", "message_id": 1016}
{"sender": 3914, "msg_type": "MouseEvent", "y": 298, "x": 388, "type": "mousemove", "message_id": 1017}
{"sender": 3914, "msg_type": "MouseEvent", "y": 298, "x": 381, "type": "mousemove", "message_id": 1019}
{"sender": 3914, "msg_type": "MouseEvent", "y": 298, "x": 385, "type": "mousemove", "message_id": 1018}
{"sender": 3914, "msg_type": "MouseEvent", "y": 299, "x": 376, "type": "mousemove", "message_id": 1020}
{"sender": 3914, "msg_type": "MouseEvent", "y": 299, "x": 370, "type": "mousemove", "message_id": 1021}
{"sender": 3914, "msg_type": "MouseEvent", "y": 299, "x": 365, "type": "mousemove", "message_id": 1022}
{"sender": 3914, "msg_type": "MouseEvent", "y": 300, "x": 360, "type": "mousemove", "message_id": 1023}
{"sender": 3914, "msg_type": "MouseEvent", "y": 300, "x": 356, "type": "mousemove", "message_id": 1024}
{"sender": 3914, "msg_type": "MouseEvent", "y": 300, "x": 353, "type": "mousemove", "message_id": 1025}
{"sender": 3914, "msg_type": "MouseEvent", "y": 300, "x": 350, "type": "mousemove", "message_id": 1026}
{"sender": 3914, "msg_type": "MouseEvent", "y": 300, "x": 348, "type": "mousemove", "message_id": 1027}
{"sender": 3914, "msg_type": "MouseEvent", "y": 300, "x": 346, "type": "mousemove", "message_id": 1028}
{"sender": 3914, "msg_type": "MouseEvent", "y": 300, "x": 344, "type": "mousemove", "message_id": 1029}
{"sender": 3914, "msg_type": "MouseEvent", "y": 299, "x": 341, "type": "mousemove", "message_id": 1030}
{"sender": 3914, "msg_type": "MouseEvent", "y": 299, "x": 339, "type": "mousemove", "message_id": 1031}
{"sender": 3914, "msg_type": "MouseEvent", "y": 298, "x": 337, "type": "mousemove", "message_id": 1032}
{"sender": 3914, "msg_type": "MouseEvent", "y": 298, "x": 335, "type": "mousemove", "message_id": 1033}
{"sender": 3914, "msg_type": "MouseEvent", "y": 297, "x": 332, "type": "mousemove", "message_id": 1034}
{"sender": 3914, "msg_type": "MouseEvent", "y": 296, "x": 331, "type": "mouseover", "message_id": 1035}
{"sender": 3914, "msg_type": "MouseEvent", "y": 296, "x": 331, "type": "mouseover", "message_id": 1036}
{"sender": 3914, "msg_type": "MouseEvent", "y": 296, "x": 331, "type": "mousemove", "message_id": 1037}
{"sender": 3914, "msg_type": "MouseEvent", "y": 295, "x": 329, "type": "mouseover", "message_id": 1038}
{"sender": 3914, "msg_type": "MouseEvent", "y": 295, "x": 329, "type": "mouseover", "message_id": 1039}
{"sender": 3914, "msg_type": "MouseEvent", "y": 295, "x": 329, "type": "mousemove", "message_id": 1040}
{"sender": 3914, "msg_type": "MouseEvent", "y": 293, "x": 325, "type": "mousemove", "message_id": 1042}
{"sender": 3914, "msg_type": "MouseEvent", "y": 294, "x": 327, "type": "mousemove", "message_id": 1041}
{"sender": 3914, "msg_type": "MouseEvent", "y": 291, "x": 324, "type": "mouseover", "message_id": 1043}
{"sender": 3914, "msg_type": "MouseEvent", "y": 291, "x": 324, "type": "mouseover", "message_id": 1044}
{"sender": 3914, "msg_type": "MouseEvent", "y": 291, "x": 324, "type": "mousemove", "message_id": 1045}
{"sender": 3914, "msg_type": "MouseEvent", "y": 289, "x": 323, "type": "mousemove", "message_id": 1046}
{"sender": 3914, "msg_type": "MouseEvent", "y": 286, "x": 321, "type": "mouseover", "message_id": 1047}
{"sender": 3914, "msg_type": "MouseEvent", "y": 286, "x": 321, "type": "mouseover", "message_id": 1048}
{"sender": 3914, "msg_type": "MouseEvent", "y": 286, "x": 321, "type": "mousemove", "message_id": 1049}
{"sender": 3914, "msg_type": "MouseEvent", "y": 284, "x": 319, "type": "mousemove", "message_id": 1050}
{"sender": 3914, "msg_type": "MouseEvent", "y": 281, "x": 317, "type": "mousemove", "message_id": 1051}
{"sender": 3914, "msg_type": "MouseEvent", "y": 278, "x": 314, "type": "mousemove", "message_id": 1052}
{"sender": 3914, "msg_type": "MouseEvent", "y": 276, "x": 313, "type": "mouseover", "message_id": 1053}
{"sender": 3914, "msg_type": "MouseEvent", "y": 276, "x": 313, "type": "mouseover", "message_id": 1054}
{"sender": 3914, "msg_type": "MouseEvent", "y": 276, "x": 313, "type": "mousemove", "message_id": 1055}
{"sender": 3914, "msg_type": "MouseEvent", "y": 275, "x": 312, "type": "mousemove", "message_id": 1056}
{"sender": 3914, "msg_type": "MouseEvent", "y": 274, "x": 312, "type": "mousemove", "message_id": 1057}
{"sender": 3914, "msg_type": "MouseEvent", "y": 274, "x": 312, "type": "mousemove", "message_id": 1058}
{"sender": 3914, "msg_type": "MouseEvent", "y": 275, "x": 312, "type": "mousemove", "message_id": 1059}
{"sender": 3914, "msg_type": "MouseEvent", "y": 275, "x": 312, "type": "mousemove", "message_id": 1060}
{"sender": 3914, "msg_type": "MouseEvent", "y": 275, "x": 311, "type": "mousemove", "message_id": 1061}
{"sender": 3914, "msg_type": "MouseEvent", "y": 276, "x": 311, "type": "mousemove", "message_id": 1062}
{"sender": 3914, "msg_type": "MouseEvent", "y": 276, "x": 310, "type": "mousemove", "message_id": 1063}
{"sender": 3914, "msg_type": "MouseEvent", "y": 277, "x": 309, "type": "mousemove", "message_id": 1064}
{"sender": 3914, "msg_type": "MouseEvent", "y": 278, "x": 308, "type": "mousemove", "message_id": 1065}
{"sender": 3914, "msg_type": "MouseEvent", "y": 278, "x": 306, "type": "mouseover", "message_id": 1066}
{"sender": 3914, "msg_type": "MouseEvent", "y": 278, "x": 306, "type": "mouseover", "message_id": 1067}
{"sender": 3914, "msg_type": "MouseEvent", "y": 278, "x": 306, "type": "mousemove", "message_id": 1068}
{"sender": 3914, "msg_type": "MouseEvent", "y": 279, "x": 305, "type": "mouseover", "message_id": 1069}
{"sender": 3914, "msg_type": "MouseEvent", "y": 279, "x": 305, "type": "mouseover", "message_id": 1070}
{"sender": 3914, "msg_type": "MouseEvent", "y": 279, "x": 305, "type": "mousemove", "message_id": 1071}
{"sender": 3914, "msg_type": "MouseEvent", "y": 280, "x": 303, "type": "mouseover", "message_id": 1072}
{"sender": 3914, "msg_type": "MouseEvent", "y": 280, "x": 303, "type": "mouseover", "message_id": 1073}
{"sender": 3914, "msg_type": "MouseEvent", "y": 280, "x": 303, "type": "mousemove", "message_id": 1074}
{"sender": 3914, "msg_type": "MouseEvent", "y": 280, "x": 302, "type": "mouseover", "message_id": 1075}
{"sender": 3914, "msg_type": "MouseEvent", "y": 280, "x": 302, "type": "mouseover", "message_id": 1076}
{"sender": 3914, "msg_type": "MouseEvent", "y": 280, "x": 302, "type": "mousemove", "message_id": 1077}
{"sender": 3914, "msg_type": "MouseEvent", "y": 280, "x": 301, "type": "mousemove", "message_id": 1078}
{"sender": 3914, "msg_type": "MouseEvent", "y": 281, "x": 301, "type": "mousemove", "message_id": 1079}
{"sender": 3914, "msg_type": "MouseEvent", "y": 281, "x": 300, "type": "mousemove", "message_id": 1081}
{"sender": 3914, "msg_type": "MouseEvent", "y": 281, "x": 300, "type": "mousemove", "message_id": 1080}
{"sender": 3914, "msg_type": "MouseEvent", "y": 281, "x": 300, "type": "mousemove", "message_id": 1082}
{"sender": 3914, "msg_type": "MouseEvent", "y": 281, "x": 299, "type": "mousemove", "message_id": 1083}
{"sender": 3914, "msg_type": "MouseEvent", "y": 281, "x": 299, "type": "mousemove", "message_id": 1084}
{"sender": 3914, "msg_type": "MouseEvent", "y": 281, "x": 299, "type": "mousemove", "message_id": 1085}
{"originalEvent": {"metaKey": false}, "sender": 3914, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": 1, "delta": 1, "type": "wheel", "message_id": 1086}
{"originalEvent": {"metaKey": false}, "sender": 3914, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": 4, "delta": 4, "type": "wheel", "message_id": 1087}
{"originalEvent": {"metaKey": false}, "sender": 3914, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": 4, "delta": 4, "type": "wheel", "message_id": 1088}
{"originalEvent": {"metaKey": false}, "sender": 3914, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": 6, "delta": 6, "type": "wheel", "message_id": 1089}
{"originalEvent": {"metaKey": false}, "sender": 3914, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": 2, "delta": 2, "type": "wheel", "message_id": 1090}
{"originalEvent": {"metaKey": false}, "sender": 3914, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": 3, "delta": 3, "type": "wheel", "message_id": 1091}
{"originalEvent": {"metaKey": false}, "sender": 3914, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": 7, "delta": 7, "type": "wheel", "message_id": 1092}
{"originalEvent": {"metaKey": false}, "sender": 3914, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": 2, "delta": 2, "type": "wheel", "message_id": 1093}
{"originalEvent": {"metaKey": false}, "sender": 3914, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": 7, "delta": 7, "type": "wheel", "message_id": 1094}
{"originalEvent": {"metaKey": false}, "sender": 3914, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": 5, "delta": 5, "type": "wheel", "message_id": 1095}
{"originalEvent": {"metaKey": false}, "sender": 3914, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": 5, "delta": 5, "type": "wheel", "message_id": 1096}
{"originalEvent": {"metaKey": false}, "sender": 3914, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": 3, "delta": 3, "type": "wheel", "message_id": 1097}
{"originalEvent": {"metaKey": false}, "sender": 3914, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": 6, "delta": 6, "type": "wheel", "message_id": 1098}
{"originalEvent": {"metaKey": false}, "sender": 3914, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": 3, "delta": 3, "type": "wheel", "message_id": 1099}
{"originalEvent": {"metaKey": false}, "sender": 3914, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": 5, "delta": 5, "type": "wheel", "message_id": 1100}
{"originalEvent": {"metaKey": false}, "sender": 3914, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": 3, "delta": 3, "type": "wheel", "message_id": 1101}
{"originalEvent": {"metaKey": false}, "sender": 3914, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": 4, "delta": 4, "type": "wheel", "message_id": 1102}
{"originalEvent": {"metaKey": false}, "sender": 3914, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": 3, "delta": 3, "type": "wheel", "message_id": 1103}
{"originalEvent": {"metaKey": false}, "sender": 3914, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": 2, "delta": 2, "type": "wheel", "message_id": 1104}
{"originalEvent": {"metaKey": false}, "sender": 3914, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": 2, "delta": 2, "type": "wheel", "message_id": 1105}
{"originalEvent": {"metaKey": false}, "sender": 3914, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": 1, "delta": 1, "type": "wheel", "message_id": 1106}
{"originalEvent": {"metaKey": false}, "sender": 3914, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": 2, "delta": 2, "type": "wheel", "message_id": 1107}
{"originalEvent": {"metaKey": false}, "sender": 3914, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": 1, "delta": 1, "type": "wheel", "message_id": 1108}
{"sender": 3914, "msg_type": "MouseEvent", "y": 281, "x": 299, "type": "mousemove", "message_id": 1109}
{"originalEvent": {"metaKey": false}, "sender": 3914, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": 1, "delta": 1, "type": "wheel", "message_id": 1110}
{"sender": 3914, "msg_type": "KeyEvent", "shiftKey": false, "message_id": 1111, "altKey": false, "metaKey": false, "key": "i", "ctrlKey": false, "type": "keydown", "keyCode": 73}
{"sender": 3914, "msg_type": "MouseEvent", "y": 282, "x": 298, "type": "mousemove", "message_id": 1112}
{"sender": 3914, "msg_type": "MouseEvent", "y": 283, "x": 295, "type": "mouseover", "message_id": 1113}
{"sender": 3914, "msg_type": "MouseEvent", "y": 283, "x": 295, "type": "mouseover", "message_id": 1114}
{"sender": 3914, "msg_type": "MouseEvent", "y": 283, "x": 295, "type": "mousemove", "message_id": 1115}
{"sender": 3914, "msg_type": "MouseEvent", "y": 284, "x": 290, "type": "mousemove", "message_id": 1116}
{"sender": 3914, "msg_type": "MouseEvent", "y": 285, "x": 286, "type": "mousemove", "message_id": 1117}
{"sender": 3914, "msg_type": "MouseEvent", "y": 287, "x": 278, "type": "mouseover", "message_id": 1118}
{"sender": 3914, "msg_type": "MouseEvent", "y": 287, "x": 278, "type": "mouseover", "message_id": 1119}
{"sender": 3914, "msg_type": "MouseEvent", "y": 287, "x": 278, "type": "mousemove", "message_id": 1120}
{"sender": 3914, "msg_type": "MouseEvent", "y": 289, "x": 269, "type": "mousemove", "message_id": 1121}
{"sender": 3914, "msg_type": "MouseEvent", "y": 291, "x": 260, "type": "mousemove", "message_id": 1122}
{"sender": 3914, "msg_type": "MouseEvent", "y": 293, "x": 249, "type": "mousemove", "message_id": 1123}
{"sender": 3914, "msg_type": "MouseEvent", "y": 295, "x": 242, "type": "mouseover", "message_id": 1124}
{"sender": 3914, "msg_type": "MouseEvent", "y": 295, "x": 242, "type": "mouseover", "message_id": 1125}
{"sender": 3914, "msg_type": "MouseEvent", "y": 295, "x": 242, "type": "mousemove", "message_id": 1126}
{"sender": 3914, "msg_type": "MouseEvent", "y": 298, "x": 232, "type": "mouseover", "message_id": 1127}
{"sender": 3914, "msg_type": "MouseEvent", "y": 298, "x": 232, "type": "mouseover", "message_id": 1128}
{"sender": 3914, "msg_type": "MouseEvent", "y": 298, "x": 232, "type": "mousemove", "message_id": 1129}
{"sender": 3914, "msg_type": "MouseEvent", "y": 301, "x": 223, "type": "mousemove", "message_id": 1130}
{"sender": 3914, "msg_type": "MouseEvent", "y": 303, "x": 216, "type": "mouseover", "message_id": 1131}
{"sender": 3914, "msg_type": "MouseEvent", "y": 303, "x": 216, "type": "mouseover", "message_id": 1132}
{"sender": 3914, "msg_type": "MouseEvent", "y": 303, "x": 216, "type": "mousemove", "message_id": 1133}
{"sender": 3914, "msg_type": "MouseEvent", "y": 305, "x": 211, "type": "mousemove", "message_id": 1134}
{"sender": 3914, "msg_type": "MouseEvent", "y": 306, "x": 209, "type": "mouseover", "message_id": 1135}
{"sender": 3914, "msg_type": "MouseEvent", "y": 306, "x": 209, "type": "mouseover", "message_id": 1136}
{"sender": 3914, "msg_type": "MouseEvent", "y": 306, "x": 209, "type": "mousemove", "message_id": 1137}
{"sender": 3914, "msg_type": "MouseEvent", "y": 307, "x": 206, "type": "mousemove", "message_id": 1138}
{"sender": 3914, "msg_type": "MouseEvent", "y": 308, "x": 203, "type": "mousemove", "message_id": 1139}
{"sender": 3914, "msg_type": "MouseEvent", "y": 308, "x": 201, "type": "mousemove", "message_id": 1140}
{"sender": 3914, "msg_type": "MouseEvent", "y": 309, "x": 200, "type": "mouseover", "message_id": 1141}
{"sender": 3914, "msg_type": "MouseEvent", "y": 309, "x": 200, "type": "mouseover", "message_id": 1142}
{"sender": 3914, "msg_type": "MouseEvent", "y": 309, "x": 200, "type": "mousemove", "message_id": 1143}
{"sender": 3914, "msg_type": "MouseEvent", "y": 310, "x": 198, "type": "mouseover", "message_id": 1144}
{"sender": 3914, "msg_type": "MouseEvent", "y": 310, "x": 198, "type": "mouseover", "message_id": 1145}
{"sender": 3914, "msg_type": "MouseEvent", "y": 310, "x": 198, "type": "mousemove", "message_id": 1146}
{"sender": 3914, "msg_type": "MouseEvent", "y": 311, "x": 195, "type": "mousemove", "message_id": 1147}
{"sender": 3914, "msg_type": "MouseEvent", "y": 312, "x": 192, "type": "mousemove", "message_id": 1148}
{"sender": 3914, "msg_type": "MouseEvent", "y": 313, "x": 189, "type": "mousemove", "message_id": 1149}
{"sender": 3914, "msg_type": "MouseEvent", "y": 314, "x": 186, "type": "mousemove", "message_id": 1150}
{"sender": 3914, "msg_type": "MouseEvent", "y": 314, "x": 182, "type": "mousemove", "message_id": 1151}
{"sender": 3914, "msg_type": "MouseEvent", "y": 315, "x": 177, "type": "mousemove", "message_id": 1152}
{"sender": 3914, "msg_type": "MouseEvent", "y": 316, "x": 173, "type": "mousemove", "message_id": 1153}
{"sender": 3914, "msg_type": "MouseEvent", "y": 317, "x": 169, "type": "mousemove", "message_id": 1154}
{"sender": 3914, "msg_type": "MouseEvent", "y": 317, "x": 166, "type": "mousemove", "message_id": 1155}
{"sender": 3914, "msg_type": "MouseEvent", "y": 318, "x": 163, "type": "mousemove", "message_id": 1156}
{"sender": 3914, "msg_type": "MouseEvent", "y": 319, "x": 160, "type": "mousemove", "message_id": 1157}
{"sender": 3914, "msg_type": "MouseEvent", "y": 319, "x": 158, "type": "mousemove", "message_id": 1158}
{"sender": 3914, "msg_type": "MouseEvent", "y": 320, "x": 157, "type": "mouseover", "message_id": 1159}
{"sender": 3914, "msg_type": "MouseEvent", "y": 320, "x": 157, "type": "mouseover", "message_id": 1160}
{"sender": 3914, "msg_type": "MouseEvent", "y": 320, "x": 157, "type": "mousemove", "message_id": 1161}
{"sender": 3914, "msg_type": "MouseEvent", "y": 320, "x": 155, "type": "mouseover", "message_id": 1162}
{"sender": 3914, "msg_type": "MouseEvent", "y": 320, "x": 155, "type": "mouseover", "message_id": 1163}
{"sender": 3914, "msg_type": "MouseEvent", "y": 320, "x": 155, "type": "mousemove", "message_id": 1164}
{"sender": 3914, "msg_type": "MouseEvent", "y": 320, "x": 153, "type": "mousemove", "message_id": 1165}
{"sender": 3914, "msg_type": "MouseEvent", "y": 321, "x": 149, "type": "mousemove", "message_id": 1166}
{"sender": 3914, "msg_type": "MouseEvent", "y": 321, "x": 146, "type": "mousemove", "message_id": 1167}
{"sender": 3914, "msg_type": "MouseEvent", "y": 321, "x": 143, "type": "mousemove", "message_id": 1168}
{"sender": 3914, "msg_type": "MouseEvent", "y": 322, "x": 141, "type": "mousemove", "message_id": 1169}
{"sender": 3914, "msg_type": "MouseEvent", "y": 322, "x": 140, "type": "mouseover", "message_id": 1170}
{"sender": 3914, "msg_type": "MouseEvent", "y": 322, "x": 140, "type": "mouseover", "message_id": 1171}
{"sender": 3914, "msg_type": "MouseEvent", "y": 322, "x": 140, "type": "mousemove", "message_id": 1172}
{"sender": 3914, "msg_type": "MouseEvent", "y": 322, "x": 138, "type": "mouseover", "message_id": 1173}
{"sender": 3914, "msg_type": "MouseEvent", "y": 322, "x": 138, "type": "mousemove", "message_id": 1175}
{"sender": 3914, "msg_type": "MouseEvent", "y": 322, "x": 138, "type": "mouseover", "message_id": 1174}
{"sender": 3914, "msg_type": "MouseEvent", "y": 322, "x": 137, "type": "mouseover", "message_id": 1176}
{"sender": 3914, "msg_type": "MouseEvent", "y": 322, "x": 137, "type": "mouseover", "message_id": 1177}
{"sender": 3914, "msg_type": "MouseEvent", "y": 322, "x": 137, "type": "mousemove", "message_id": 1178}
{"sender": 3914, "msg_type": "MouseEvent", "y": 322, "x": 136, "type": "mousemove", "message_id": 1179}
{"sender": 3914, "msg_type": "MouseEvent", "y": 323, "x": 135, "type": "mousemove", "message_id": 1180}
{"sender": 3914, "msg_type": "MouseEvent", "y": 323, "x": 133, "type": "mouseover", "message_id": 1181}
{"sender": 3914, "msg_type": "MouseEvent", "y": 323, "x": 133, "type": "mouseover", "message_id": 1182}
{"sender": 3914, "msg_type": "MouseEvent", "y": 323, "x": 133, "type": "mousemove", "message_id": 1183}
{"sender": 3914, "msg_type": "MouseEvent", "y": 323, "x": 131, "type": "mousemove", "message_id": 1184}
{"sender": 3914, "msg_type": "MouseEvent", "y": 324, "x": 130, "type": "mouseover", "message_id": 1185}
{"sender": 3914, "msg_type": "MouseEvent", "y": 324, "x": 130, "type": "mouseover", "message_id": 1186}
{"sender": 3914, "msg_type": "MouseEvent", "y": 324, "x": 130, "type": "mousemove", "message_id": 1187}
{"sender": 3914, "msg_type": "MouseEvent", "y": 325, "x": 129, "type": "mousemove", "message_id": 1188}
{"sender": 3914, "msg_type": "MouseEvent", "y": 325, "x": 128, "type": "mousemove", "message_id": 1189}
{"sender": 3914, "msg_type": "MouseEvent", "y": 326, "x": 127, "type": "mousemove", "message_id": 1190}
{"sender": 3914, "msg_type": "MouseEvent", "y": 327, "x": 126, "type": "mousemove", "message_id": 1191}
{"sender": 3914, "msg_type": "MouseEvent", "y": 329, "x": 125, "type": "mousemove", "message_id": 1192}
{"sender": 3914, "msg_type": "MouseEvent", "y": 330, "x": 124, "type": "mousemove", "message_id": 1193}
{"sender": 3914, "msg_type": "MouseEvent", "y": 332, "x": 122, "type": "mouseover", "message_id": 1194}
{"sender": 3914, "msg_type": "MouseEvent", "y": 332, "x": 122, "type": "mouseover", "message_id": 1195}
{"sender": 3914, "msg_type": "MouseEvent", "y": 332, "x": 122, "type": "mousemove", "message_id": 1196}
{"sender": 3914, "msg_type": "MouseEvent", "y": 333, "x": 121, "type": "mouseover", "message_id": 1197}
{"sender": 3914, "msg_type": "MouseEvent", "y": 333, "x": 121, "type": "mouseover", "message_id": 1198}
{"sender": 3914, "msg_type": "MouseEvent", "y": 333, "x": 121, "type": "mousemove", "message_id": 1199}
{"sender": 3914, "msg_type": "MouseEvent", "y": 334, "x": 120, "type": "mousemove", "message_id": 1200}
{"sender": 3914, "msg_type": "MouseEvent", "y": 334, "x": 120, "type": "mousemove", "message_id": 1201}
{"sender": 3914, "msg_type": "MouseEvent", "y": 335, "x": 120, "type": "mousemove", "message_id": 1202}
{"sender": 3914, "msg_type": "MouseEvent", "y": 335, "x": 120, "type": "mousemove", "message_id": 1203}
{"sender": 3914, "msg_type": "MouseEvent", "y": 334, "x": 120, "type": "mousemove", "message_id": 1204}
{"sender": 3914, "msg_type": "MouseEvent", "y": 334, "x": 120, "type": "mousemove", "message_id": 1205}
{"sender": 3914, "msg_type": "MouseEvent", "y": 334, "x": 119, "type": "mousemove", "message_id": 1206}
{"sender": 3914, "msg_type": "MouseEvent", "y": 334, "x": 119, "type": "mousemove", "message_id": 1207}
{"sender": 3914, "msg_type": "MouseEvent", "y": 334, "x": 117, "type": "mouseover", "message_id": 1208}
{"sender": 3914, "msg_type": "MouseEvent", "y": 334, "x": 117, "type": "mousemove", "message_id": 1210}
{"sender": 3914, "msg_type": "MouseEvent", "y": 334, "x": 117, "type": "mouseover", "message_id": 1209}
{"sender": 3914, "msg_type": "MouseEvent", "y": 334, "x": 116, "type": "mouseover", "message_id": 1211}
{"sender": 3914, "msg_type": "MouseEvent", "y": 334, "x": 116, "type": "mouseover", "message_id": 1212}
{"sender": 3914, "msg_type": "MouseEvent", "y": 334, "x": 116, "type": "mousemove", "message_id": 1213}
{"sender": 3914, "msg_type": "MouseEvent", "y": 334, "x": 115, "type": "mousemove", "message_id": 1214}
{"sender": 3914, "msg_type": "MouseEvent", "y": 334, "x": 114, "type": "mousemove", "message_id": 1215}
{"sender": 3914, "msg_type": "MouseEvent", "y": 334, "x": 114, "type": "mousemove", "message_id": 1216}
{"sender": 3914, "msg_type": "MouseEvent", "y": 334, "x": 113, "type": "mousemove", "message_id": 1217}
{"sender": 3914, "msg_type": "MouseEvent", "y": 334, "x": 113, "type": "mousemove", "message_id": 1218}
{"sender": 3914, "msg_type": "MouseEvent", "y": 334, "x": 112, "type": "mousemove", "message_id": 1219}
{"sender": 3914, "msg_type": "MouseEvent", "y": 334, "x": 111, "type": "mousemove", "message_id": 1220}
{"sender": 3914, "msg_type": "MouseEvent", "y": 334, "x": 110, "type": "mousemove", "message_id": 1221}
{"sender": 3914, "msg_type": "MouseEvent", "y": 334, "x": 109, "type": "mousemove", "message_id": 1222}
{"sender": 3914, "msg_type": "MouseEvent", "y": 334, "x": 109, "type": "mousemove", "message_id": 1223}
{"sender": 3914, "msg_type": "MouseEvent", "y": 334, "x": 108, "type": "mousemove", "message_id": 1224}
{"sender": 3914, "msg_type": "MouseEvent", "y": 334, "x": 108, "type": "mousemove", "message_id": 1225}
{"sender": 3914, "msg_type": "MouseEvent", "y": 334, "x": 108, "type": "mousemove", "message_id": 1226}
{"sender": 3914, "msg_type": "MouseEvent", "y": 334, "x": 108, "type": "mousemove", "message_id": 1227}
{"sender": 3914, "msg_type": "MouseEvent", "y": 334, "x": 107, "type": "mousemove", "message_id": 1228}
{"sender": 3914, "msg_type": "MouseEvent", "y": 334, "x": 107, "type": "mousemove", "message_id": 1229}
{"sender": 3914, "msg_type": "MouseEvent", "y": 334, "x": 106, "type": "mousemove", "message_id": 1230}
{"sender": 3914, "msg_type": "MouseEvent", "y": 334, "x": 104, "type": "mouseover", "message_id": 1231}
{"sender": 3914, "msg_type": "MouseEvent", "y": 334, "x": 104, "type": "mouseover", "message_id": 1232}
{"sender": 3914, "msg_type": "MouseEvent", "y": 334, "x": 104, "type": "mousemove", "message_id": 1233}
{"sender": 3914, "msg_type": "MouseEvent", "y": 334, "x": 103, "type": "mouseover", "message_id": 1234}
{"sender": 3914, "msg_type": "MouseEvent", "y": 334, "x": 103, "type": "mouseover", "message_id": 1235}
{"sender": 3914, "msg_type": "MouseEvent", "y": 334, "x": 103, "type": "mousemove", "message_id": 1236}
{"sender": 3914, "msg_type": "MouseEvent", "y": 334, "x": 102, "type": "mousemove", "message_id": 1237}
{"sender": 3914, "msg_type": "MouseEvent", "y": 333, "x": 101, "type": "mousemove", "message_id": 1238}
{"sender": 3914, "msg_type": "MouseEvent", "y": 333, "x": 100, "type": "mousemove", "message_id": 1239}
{"sender": 3914, "msg_type": "MouseEvent", "y": 333, "x": 98, "type": "mouseover", "message_id": 1240}
{"sender": 3914, "msg_type": "MouseEvent", "y": 333, "x": 98, "type": "mouseover", "message_id": 1241}
{"sender": 3914, "msg_type": "MouseEvent", "y": 333, "x": 98, "type": "mousemove", "message_id": 1242}
{"sender": 3914, "msg_type": "MouseEvent", "y": 333, "x": 97, "type": "mouseover", "message_id": 1243}
{"sender": 3914, "msg_type": "MouseEvent", "y": 333, "x": 97, "type": "mouseover", "message_id": 1244}
{"sender": 3914, "msg_type": "MouseEvent", "y": 333, "x": 97, "type": "mousemove", "message_id": 1245}
{"sender": 3914, "msg_type": "MouseEvent", "y": 333, "x": 97, "type": "mousemove", "message_id": 1246}
{"sender": 3914, "msg_type": "MouseEvent", "y": 333, "x": 97, "type": "mousemove", "message_id": 1247}
{"sender": 3914, "msg_type": "MouseEvent", "y": 333, "x": 97, "type": "mousedown", "message_id": 1248}
{"sender": 3914, "msg_type": "MouseEvent", "y": 333, "x": 97, "type": "mouseup", "message_id": 1249}
{"sender": 3914, "msg_type": "MouseEvent", "y": 333, "x": 97, "type": "mousedown", "message_id": 1250}
{"sender": 3914, "msg_type": "MouseEvent", "y": 333, "x": 97, "type": "mouseup", "message_id": 1251}
{"sender": 3914, "msg_type": "KeyEvent", "shiftKey": false, "message_id": 1252, "altKey": false, "metaKey": false, "key": "1", "ctrlKey": false, "type": "keydown", "keyCode": 49}
{"sender": 3914, "msg_type": "MouseEvent", "y": 333, "x": 99, "type": "mouseover", "message_id": 1255}
{"sender": 3914, "msg_type": "MouseEvent", "y": 333, "x": 99, "type": "mouseover", "message_id": 1254}
{"sender": 3914, "msg_type": "MouseEvent", "y": 333, "x": 99, "type": "mousemove", "message_id": 1256}
{"sender": 3914, "msg_type": "MouseEvent", "y": 330, "x": 106, "type": "mouseover", "message_id": 1257}
{"sender": 3914, "msg_type": "MouseEvent", "y": 330, "x": 106, "type": "mouseover", "message_id": 1258}
{"sender": 3914, "msg_type": "MouseEvent", "y": 330, "x": 106, "type": "mousemove", "message_id": 1259}
{"sender": 3914, "msg_type": "MouseEvent", "y": 326, "x": 119, "type": "mousemove", "message_id": 1260}
{"sender": 3914, "msg_type": "MouseEvent", "y": 321, "x": 130, "type": "mouseover", "message_id": 1261}
{"sender": 3914, "msg_type": "MouseEvent", "y": 321, "x": 130, "type": "mouseover", "message_id": 1262}
{"sender": 3914, "msg_type": "MouseEvent", "y": 321, "x": 130, "type": "mousemove", "message_id": 1263}
{"sender": 3914, "msg_type": "MouseEvent", "y": 310, "x": 148, "type": "mousemove", "message_id": 1264}
{"sender": 3914, "msg_type": "MouseEvent", "y": 300, "x": 165, "type": "mousemove", "message_id": 1265}
{"sender": 3914, "msg_type": "MouseEvent", "y": 289, "x": 179, "type": "mousemove", "message_id": 1266}
{"sender": 3914, "msg_type": "MouseEvent", "y": 282, "x": 189, "type": "mousemove", "message_id": 1267}
{"sender": 3914, "msg_type": "MouseEvent", "y": 278, "x": 193, "type": "mousemove", "message_id": 1268}
{"sender": 3914, "msg_type": "MouseEvent", "y": 277, "x": 195, "type": "mouseover", "message_id": 1270}
{"sender": 3914, "msg_type": "MouseEvent", "y": 277, "x": 195, "type": "mouseover", "message_id": 1269}
{"sender": 3914, "msg_type": "MouseEvent", "y": 277, "x": 195, "type": "mousemove", "message_id": 1271}
{"sender": 3914, "msg_type": "MouseEvent", "y": 276, "x": 195, "type": "mouseover", "message_id": 1272}
{"sender": 3914, "msg_type": "MouseEvent", "y": 276, "x": 195, "type": "mouseover", "message_id": 1273}
{"sender": 3914, "msg_type": "MouseEvent", "y": 276, "x": 195, "type": "mousemove", "message_id": 1274}
{"sender": 3914, "msg_type": "MouseEvent", "y": 276, "x": 195, "type": "mousedown", "message_id": 1275}
{"sender": 3914, "msg_type": "MouseEvent", "y": 276, "x": 195, "type": "mouseup", "message_id": 1276}
{"sender": 3914, "msg_type": "MouseEvent", "y": 276, "x": 196, "type": "mousemove", "message_id": 1277}
{"sender": 3914, "msg_type": "MouseEvent", "y": 277, "x": 197, "type": "mousemove", "message_id": 1278}
{"sender": 3914, "msg_type": "MouseEvent", "y": 277, "x": 200, "type": "mouseover", "message_id": 1279}
{"sender": 3914, "msg_type": "MouseEvent", "y": 277, "x": 200, "type": "mouseover", "message_id": 1280}
{"sender": 3914, "msg_type": "MouseEvent", "y": 277, "x": 200, "type": "mousemove", "message_id": 1281}
{"sender": 3914, "msg_type": "MouseEvent", "y": 278, "x": 203, "type": "mousemove", "message_id": 1282}
{"sender": 3914, "msg_type": "MouseEvent", "y": 279, "x": 209, "type": "mousemove", "message_id": 1283}
{"sender": 3914, "msg_type": "MouseEvent", "y": 281, "x": 217, "type": "mouseover", "message_id": 1284}
{"sender": 3914, "msg_type": "MouseEvent", "y": 281, "x": 217, "type": "mouseover", "message_id": 1285}
{"sender": 3914, "msg_type": "MouseEvent", "y": 281, "x": 217, "type": "mousemove", "message_id": 1286}
{"sender": 3914, "msg_type": "MouseEvent", "y": 283, "x": 227, "type": "mousemove", "message_id": 1287}
{"sender": 3914, "msg_type": "MouseEvent", "y": 287, "x": 241, "type": "mousemove", "message_id": 1288}
{"sender": 3914, "msg_type": "MouseEvent", "y": 290, "x": 256, "type": "mousemove", "message_id": 1289}
{"sender": 3914, "msg_type": "MouseEvent", "y": 293, "x": 273, "type": "mousemove", "message_id": 1290}
{"sender": 3914, "msg_type": "MouseEvent", "y": 296, "x": 290, "type": "mousemove", "message_id": 1291}
{"sender": 3914, "msg_type": "MouseEvent", "y": 299, "x": 307, "type": "mousemove", "message_id": 1292}
{"sender": 3914, "msg_type": "MouseEvent", "y": 302, "x": 321, "type": "mousemove", "message_id": 1293}
{"sender": 3914, "msg_type": "MouseEvent", "y": 303, "x": 329, "type": "mouseover", "message_id": 1294}
{"sender": 3914, "msg_type": "MouseEvent", "y": 303, "x": 329, "type": "mouseover", "message_id": 1295}
{"sender": 3914, "msg_type": "MouseEvent", "y": 303, "x": 329, "type": "mousemove", "message_id": 1296}
{"sender": 3914, "msg_type": "MouseEvent", "y": 305, "x": 336, "type": "mousemove", "message_id": 1298}
{"sender": 3914, "msg_type": "MouseEvent", "y": 304, "x": 333, "type": "mousemove", "message_id": 1297}
{"sender": 3914, "msg_type": "MouseEvent", "y": 305, "x": 338, "type": "mousemove", "message_id": 1299}
{"sender": 3914, "msg_type": "MouseEvent", "y": 305, "x": 339, "type": "mouseover", "message_id": 1300}
{"sender": 3914, "msg_type": "MouseEvent", "y": 305, "x": 339, "type": "mousemove", "message_id": 1302}
{"sender": 3914, "msg_type": "MouseEvent", "y": 305, "x": 339, "type": "mouseover", "message_id": 1301}
{"sender": 3914, "msg_type": "MouseEvent", "y": 306, "x": 339, "type": "mousemove", "message_id": 1303}
{"sender": 3914, "msg_type": "MouseEvent", "y": 306, "x": 340, "type": "mousemove", "message_id": 1304}
{"sender": 3914, "msg_type": "MouseEvent", "y": 307, "x": 341, "type": "mousemove", "message_id": 1305}
{"sender": 3914, "msg_type": "MouseEvent", "y": 308, "x": 342, "type": "mousemove", "message_id": 1306}
{"sender": 3914, "msg_type": "MouseEvent", "y": 309, "x": 343, "type": "mousemove", "message_id": 1307}
{"sender": 3914, "msg_type": "MouseEvent", "y": 310, "x": 344, "type": "mousemove", "message_id": 1308}
{"sender": 3914, "msg_type": "MouseEvent", "y": 311, "x": 346, "type": "mouseover", "message_id": 1309}
{"sender": 3914, "msg_type": "MouseEvent", "y": 311, "x": 346, "type": "mouseover", "message_id": 1310}
{"sender": 3914, "msg_type": "MouseEvent", "y": 311, "x": 346, "type": "mousemove", "message_id": 1311}
{"sender": 3914, "msg_type": "MouseEvent", "y": 312, "x": 348, "type": "mousemove", "message_id": 1312}
{"sender": 3914, "msg_type": "MouseEvent", "y": 314, "x": 351, "type": "mouseover", "message_id": 1313}
{"sender": 3914, "msg_type": "MouseEvent", "y": 314, "x": 351, "type": "mouseover", "message_id": 1314}
{"sender": 3914, "msg_type": "MouseEvent", "y": 314, "x": 351, "type": "mousemove", "message_id": 1315}
{"sender": 3914, "msg_type": "MouseEvent", "y": 316, "x": 356, "type": "mousemove", "message_id": 1316}
{"sender": 3914, "msg_type": "MouseEvent", "y": 319, "x": 362, "type": "mouseover", "message_id": 1317}
{"sender": 3914, "msg_type": "MouseEvent", "y": 319, "x": 362, "type": "mouseover", "message_id": 1318}
{"sender": 3914, "msg_type": "MouseEvent", "y": 319, "x": 362, "type": "mousemove", "message_id": 1319}
{"sender": 3914, "msg_type": "MouseEvent", "y": 321, "x": 369, "type": "mouseover", "message_id": 1320}
{"sender": 3914, "msg_type": "MouseEvent", "y": 321, "x": 369, "type": "mouseover", "message_id": 1321}
{"sender": 3914, "msg_type": "MouseEvent", "y": 321, "x": 369, "type": "mousemove", "message_id": 1322}
{"sender": 3914, "msg_type": "MouseEvent", "y": 324, "x": 376, "type": "mouseover", "message_id": 1323}
{"sender": 3914, "msg_type": "MouseEvent", "y": 324, "x": 376, "type": "mouseover", "message_id": 1324}
{"sender": 3914, "msg_type": "MouseEvent", "y": 324, "x": 376, "type": "mousemove", "message_id": 1325}
{"sender": 3914, "msg_type": "MouseEvent", "y": 326, "x": 382, "type": "mouseover", "message_id": 1327}
{"sender": 3914, "msg_type": "MouseEvent", "y": 326, "x": 382, "type": "mouseover", "message_id": 1326}
{"sender": 3914, "msg_type": "MouseEvent", "y": 327, "x": 386, "type": "mouseover", "message_id": 1329}
{"sender": 3914, "msg_type": "MouseEvent", "y": 326, "x": 382, "type": "mousemove", "message_id": 1328}
{"sender": 3914, "msg_type": "MouseEvent", "y": 327, "x": 386, "type": "mouseover", "message_id": 1330}
{"sender": 3914, "msg_type": "MouseEvent", "y": 327, "x": 386, "type": "mousemove", "message_id": 1331}
{"sender": 3914, "msg_type": "MouseEvent", "y": 327, "x": 389, "type": "mousemove", "message_id": 1332}
{"sender": 3914, "msg_type": "MouseEvent", "y": 327, "x": 390, "type": "mouseover", "message_id": 1333}
{"sender": 3914, "msg_type": "MouseEvent", "y": 327, "x": 390, "type": "mouseover", "message_id": 1334}
{"sender": 3914, "msg_type": "MouseEvent", "y": 327, "x": 390, "type": "mousemove", "message_id": 1335}
{"sender": 3914, "msg_type": "MouseEvent", "y": 328, "x": 393, "type": "mouseover", "message_id": 1336}
{"sender": 3914, "msg_type": "MouseEvent", "y": 328, "x": 393, "type": "mouseover", "message_id": 1337}
{"sender": 3914, "msg_type": "MouseEvent", "y": 328, "x": 393, "type": "mousemove", "message_id": 1338}
{"sender": 3914, "msg_type": "MouseEvent", "y": 329, "x": 397, "type": "mousemove", "message_id": 1339}
{"sender": 3914, "msg_type": "MouseEvent", "y": 329, "x": 401, "type": "mousemove", "message_id": 1340}
{"sender": 3914, "msg_type": "MouseEvent", "y": 329, "x": 404, "type": "mousemove", "message_id": 1341}
{"sender": 3914, "msg_type": "MouseEvent", "y": 330, "x": 408, "type": "mousemove", "message_id": 1342}
{"sender": 3914, "msg_type": "MouseEvent", "y": 330, "x": 410, "type": "mousemove", "message_id": 1343}
{"sender": 3914, "msg_type": "MouseEvent", "y": 330, "x": 412, "type": "mousemove", "message_id": 1344}
{"sender": 3914, "msg_type": "MouseEvent", "y": 330, "x": 415, "type": "mousemove", "message_id": 1345}
{"sender": 3914, "msg_type": "MouseEvent", "y": 330, "x": 419, "type": "mousemove", "message_id": 1346}
{"sender": 3914, "msg_type": "MouseEvent", "y": 330, "x": 423, "type": "mousemove", "message_id": 1347}
{"sender": 3914, "msg_type": "MouseEvent", "y": 331, "x": 428, "type": "mousemove", "message_id": 1348}
{"sender": 3914, "msg_type": "MouseEvent", "y": 331, "x": 435, "type": "mousemove", "message_id": 1349}
{"sender": 3914, "msg_type": "MouseEvent", "y": 332, "x": 442, "type": "mousemove", "message_id": 1350}
{"sender": 3914, "msg_type": "MouseEvent", "y": 332, "x": 447, "type": "mousemove", "message_id": 1351}
{"sender": 3914, "msg_type": "MouseEvent", "y": 331, "x": 450, "type": "mousemove", "message_id": 1352}
{"sender": 3914, "msg_type": "MouseEvent", "y": 331, "x": 451, "type": "mouseover", "message_id": 1353}
{"sender": 3914, "msg_type": "MouseEvent", "y": 331, "x": 451, "type": "mouseover", "message_id": 1354}
{"sender": 3914, "msg_type": "MouseEvent", "y": 331, "x": 451, "type": "mousemove", "message_id": 1355}
{"sender": 3914, "msg_type": "MouseEvent", "y": 331, "x": 453, "type": "mouseover", "message_id": 1356}
{"sender": 3914, "msg_type": "MouseEvent", "y": 331, "x": 453, "type": "mouseover", "message_id": 1357}
{"sender": 3914, "msg_type": "MouseEvent", "y": 331, "x": 453, "type": "mousemove", "message_id": 1358}
{"sender": 3914, "msg_type": "MouseEvent", "y": 331, "x": 454, "type": "mouseover", "message_id": 1359}
{"sender": 3914, "msg_type": "MouseEvent", "y": 331, "x": 454, "type": "mousemove", "message_id": 1361}
{"sender": 3914, "msg_type": "MouseEvent", "y": 331, "x": 454, "type": "mouseover", "message_id": 1360}
{"sender": 3914, "msg_type": "MouseEvent", "y": 331, "x": 455, "type": "mousemove", "message_id": 1362}
{"sender": 3914, "msg_type": "MouseEvent", "y": 331, "x": 456, "type": "mousemove", "message_id": 1363}
{"sender": 3914, "msg_type": "MouseEvent", "y": 331, "x": 458, "type": "mouseover", "message_id": 1364}
{"sender": 3914, "msg_type": "MouseEvent", "y": 331, "x": 458, "type": "mouseover", "message_id": 1365}
{"sender": 3914, "msg_type": "MouseEvent", "y": 331, "x": 460, "type": "mousemove", "message_id": 1367}
{"sender": 3914, "msg_type": "MouseEvent", "y": 331, "x": 458, "type": "mousemove", "message_id": 1366}
{"sender": 3914, "msg_type": "MouseEvent", "y": 331, "x": 463, "type": "mousemove", "message_id": 1368}
{"sender": 3914, "msg_type": "MouseEvent", "y": 331, "x": 464, "type": "mouseover", "message_id": 1369}
{"sender": 3914, "msg_type": "MouseEvent", "y": 331, "x": 464, "type": "mouseover", "message_id": 1370}
{"sender": 3914, "msg_type": "MouseEvent", "y": 331, "x": 464, "type": "mousemove", "message_id": 1371}
{"sender": 3914, "msg_type": "MouseEvent", "y": 331, "x": 465, "type": "mousemove", "message_id": 1372}
{"sender": 3914, "msg_type": "MouseEvent", "y": 331, "x": 465, "type": "mousemove", "message_id": 1373}
{"sender": 3914, "msg_type": "MouseEvent", "y": 331, "x": 465, "type": "mousemove", "message_id": 1374}
{"sender": 3914, "msg_type": "MouseEvent", "y": 331, "x": 465, "type": "mousemove", "message_id": 1375}
{"sender": 3914, "msg_type": "MouseEvent", "y": 331, "x": 464, "type": "mousemove", "message_id": 1376}
{"sender": 3914, "msg_type": "MouseEvent", "y": 331, "x": 462, "type": "mouseover", "message_id": 1377}
{"sender": 3914, "msg_type": "MouseEvent", "y": 331, "x": 462, "type": "mouseover", "message_id": 1378}
{"sender": 3914, "msg_type": "MouseEvent", "y": 331, "x": 462, "type": "mousemove", "message_id": 1379}
{"sender": 3914, "msg_type": "MouseEvent", "y": 331, "x": 459, "type": "mousemove", "message_id": 1380}
{"sender": 3914, "msg_type": "MouseEvent", "y": 331, "x": 457, "type": "mousemove", "message_id": 1381}
{"sender": 3914, "msg_type": "MouseEvent", "y": 331, "x": 455, "type": "mousemove", "message_id": 1382}
{"sender": 3914, "msg_type": "MouseEvent", "y": 331, "x": 454, "type": "mouseover", "message_id": 1383}
{"sender": 3914, "msg_type": "MouseEvent", "y": 331, "x": 454, "type": "mouseover", "message_id": 1384}
{"sender": 3914, "msg_type": "MouseEvent", "y": 331, "x": 454, "type": "mousemove", "message_id": 1385}
{"sender": 3914, "msg_type": "MouseEvent", "y": 331, "x": 453, "type": "mousemove", "message_id": 1386}
{"sender": 3914, "msg_type": "MouseEvent", "y": 331, "x": 453, "type": "mousemove", "message_id": 1387}
{"sender": 3914, "msg_type": "MouseEvent", "y": 331, "x": 453, "type": "mousemove", "message_id": 1388}
{"sender": 3914, "msg_type": "MouseEvent", "y": 331, "x": 453, "type": "mousedown", "message_id": 1389}
{"sender": 3914, "msg_type": "MouseEvent", "y": 331, "x": 453, "type": "mouseup", "message_id": 1390}
{"sender": 3914, "msg_type": "MouseEvent", "y": 331, "x": 453, "type": "mousedown", "message_id": 1391}
{"sender": 3914, "msg_type": "MouseEvent", "y": 331, "x": 453, "type": "mouseup", "message_id": 1392}
{"sender": 3914, "msg_type": "KeyEvent", "shiftKey": false, "message_id": 1393, "altKey": false, "metaKey": false, "key": "2", "ctrlKey": false, "type": "keydown", "keyCode": 50}
{"sender": 3914, "msg_type": "MouseEvent", "y": 331, "x": 452, "type": "mousemove", "message_id": 1395}
{"sender": 3914, "msg_type": "MouseEvent", "y": 331, "x": 451, "type": "mousemove", "message_id": 1396}
{"sender": 3914, "msg_type": "MouseEvent", "y": 330, "x": 449, "type": "mouseover", "message_id": 1397}
{"sender": 3914, "msg_type": "MouseEvent", "y": 330, "x": 449, "type": "mouseover", "message_id": 1398}
{"sender": 3914, "msg_type": "MouseEvent", "y": 330, "x": 449, "type": "mousemove", "message_id": 1399}
{"sender": 3914, "msg_type": "MouseEvent", "y": 330, "x": 447, "type": "mousemove", "message_id": 1400}
{"sender": 3914, "msg_type": "MouseEvent", "y": 329, "x": 443, "type": "mousemove", "message_id": 1401}
{"sender": 3914, "msg_type": "MouseEvent", "y": 327, "x": 438, "type": "mouseover", "message_id": 1402}
{"sender": 3914, "msg_type": "MouseEvent", "y": 327, "x": 438, "type": "mouseover", "message_id": 1403}
{"sender": 3914, "msg_type": "MouseEvent", "y": 327, "x": 438, "type": "mousemove", "message_id": 1404}
{"sender": 3914, "msg_type": "MouseEvent", "y": 323, "x": 431, "type": "mousemove", "message_id": 1405}
{"sender": 3914, "msg_type": "MouseEvent", "y": 319, "x": 422, "type": "mouseover", "message_id": 1406}
{"sender": 3914, "msg_type": "MouseEvent", "y": 319, "x": 422, "type": "mouseover", "message_id": 1407}
{"sender": 3914, "msg_type": "MouseEvent", "y": 319, "x": 422, "type": "mousemove", "message_id": 1408}
{"sender": 3914, "msg_type": "MouseEvent", "y": 315, "x": 414, "type": "mousemove", "message_id": 1409}
{"sender": 3914, "msg_type": "MouseEvent", "y": 310, "x": 406, "type": "mousemove", "message_id": 1410}
{"sender": 3914, "msg_type": "MouseEvent", "y": 304, "x": 399, "type": "mousemove", "message_id": 1411}
{"sender": 3914, "msg_type": "MouseEvent", "y": 298, "x": 391, "type": "mousemove", "message_id": 1412}
{"sender": 3914, "msg_type": "MouseEvent", "y": 290, "x": 383, "type": "mousemove", "message_id": 1413}
{"sender": 3914, "msg_type": "MouseEvent", "y": 283, "x": 375, "type": "mousemove", "message_id": 1414}
{"sender": 3914, "msg_type": "MouseEvent", "y": 276, "x": 369, "type": "mousemove", "message_id": 1415}
{"sender": 3914, "msg_type": "MouseEvent", "y": 271, "x": 365, "type": "mousemove", "message_id": 1416}
{"sender": 3914, "msg_type": "MouseEvent", "y": 267, "x": 361, "type": "mousemove", "message_id": 1417}
{"sender": 3914, "msg_type": "MouseEvent", "y": 263, "x": 358, "type": "mousemove", "message_id": 1418}
{"sender": 3914, "msg_type": "MouseEvent", "y": 259, "x": 355, "type": "mousemove", "message_id": 1419}
{"sender": 3914, "msg_type": "MouseEvent", "y": 256, "x": 352, "type": "mousemove", "message_id": 1420}
{"sender": 3914, "msg_type": "MouseEvent", "y": 254, "x": 349, "type": "mouseover", "message_id": 1421}
{"sender": 3914, "msg_type": "MouseEvent", "y": 254, "x": 349, "type": "mouseover", "message_id": 1422}
{"sender": 3914, "msg_type": "MouseEvent", "y": 254, "x": 349, "type": "mousemove", "message_id": 1423}
{"sender": 3914, "msg_type": "MouseEvent", "y": 253, "x": 348, "type": "mouseover", "message_id": 1424}
{"sender": 3914, "msg_type": "MouseEvent", "y": 253, "x": 348, "type": "mouseover", "message_id": 1425}
{"sender": 3914, "msg_type": "MouseEvent", "y": 253, "x": 348, "type": "mousemove", "message_id": 1426}
{"sender": 3914, "msg_type": "MouseEvent", "y": 252, "x": 348, "type": "mousemove", "message_id": 1427}
{"sender": 3914, "msg_type": "MouseEvent", "y": 252, "x": 348, "type": "mousemove", "message_id": 1428}
{"sender": 3914, "msg_type": "MouseEvent", "y": 252, "x": 348, "type": "mousemove", "message_id": 1429}
{"sender": 3914, "msg_type": "MouseEvent", "y": 252, "x": 348, "type": "mousemove", "message_id": 1430}
{"sender": 3914, "msg_type": "MouseEvent", "y": 252, "x": 348, "type": "mousemove", "message_id": 1431}
{"sender": 3914, "msg_type": "MouseEvent", "y": 252, "x": 348, "type": "mousedown", "message_id": 1432}
{"sender": 3914, "msg_type": "MouseEvent", "y": 252, "x": 348, "type": "mousemove", "message_id": 1434}
{"sender": 3914, "msg_type": "MouseEvent", "y": 252, "x": 348, "type": "mouseup", "message_id": 1433}
{"sender": 3914, "msg_type": "MouseEvent", "y": 252, "x": 348, "type": "mousemove", "message_id": 1435}
{"sender": 3914, "msg_type": "MouseEvent", "y": 252, "x": 348, "type": "mousemove", "message_id": 1436}
{"sender": 3914, "msg_type": "MouseEvent", "y": 253, "x": 348, "type": "mousemove", "message_id": 1437}
{"sender": 3914, "msg_type": "MouseEvent", "y": 254, "x": 348, "type": "mousemove", "message_id": 1438}
{"sender": 3914, "msg_type": "MouseEvent", "y": 256, "x": 347, "type": "mousemove", "message_id": 1439}
{"sender": 3914, "msg_type": "MouseEvent", "y": 258, "x": 346, "type": "mousemove", "message_id": 1440}
{"sender": 3914, "msg_type": "MouseEvent", "y": 262, "x": 343, "type": "mouseover", "message_id": 1441}
{"sender": 3914, "msg_type": "MouseEvent", "y": 262, "x": 343, "type": "mouseover", "message_id": 1442}
{"sender": 3914, "msg_type": "MouseEvent", "y": 262, "x": 343, "type": "mousemove", "message_id": 1443}
{"sender": 3914, "msg_type": "MouseEvent", "y": 269, "x": 337, "type": "mousemove", "message_id": 1445}
{"sender": 3914, "msg_type": "MouseEvent", "y": 265, "x": 340, "type": "mousemove", "message_id": 1444}
{"sender": 3914, "msg_type": "MouseEvent", "y": 273, "x": 334, "type": "mousemove", "message_id": 1446}
{"sender": 3914, "msg_type": "MouseEvent", "y": 276, "x": 331, "type": "mousemove", "message_id": 1447}
{"sender": 3914, "msg_type": "MouseEvent", "y": 280, "x": 327, "type": "mousemove", "message_id": 1448}
{"sender": 3914, "msg_type": "MouseEvent", "y": 283, "x": 323, "type": "mousemove", "message_id": 1449}
{"sender": 3914, "msg_type": "MouseEvent", "y": 287, "x": 319, "type": "mousemove", "message_id": 1450}
{"sender": 3914, "msg_type": "MouseEvent", "y": 291, "x": 316, "type": "mousemove", "message_id": 1451}
{"sender": 3914, "msg_type": "MouseEvent", "y": 294, "x": 313, "type": "mousemove", "message_id": 1452}
{"sender": 3914, "msg_type": "MouseEvent", "y": 297, "x": 310, "type": "mousemove", "message_id": 1453}
{"sender": 3914, "msg_type": "MouseEvent", "y": 300, "x": 307, "type": "mousemove", "message_id": 1454}
{"sender": 3914, "msg_type": "MouseEvent", "y": 303, "x": 303, "type": "mousemove", "message_id": 1455}
{"sender": 3914, "msg_type": "MouseEvent", "y": 306, "x": 300, "type": "mousemove", "message_id": 1456}
{"sender": 3914, "msg_type": "MouseEvent", "y": 309, "x": 297, "type": "mousemove", "message_id": 1457}
{"sender": 3914, "msg_type": "MouseEvent", "y": 311, "x": 295, "type": "mouseover", "message_id": 1458}
{"sender": 3914, "msg_type": "MouseEvent", "y": 311, "x": 295, "type": "mouseover", "message_id": 1459}
{"sender": 3914, "msg_type": "MouseEvent", "y": 311, "x": 295, "type": "mousemove", "message_id": 1460}
{"sender": 3914, "msg_type": "MouseEvent", "y": 312, "x": 294, "type": "mouseover", "message_id": 1461}
{"sender": 3914, "msg_type": "MouseEvent", "y": 312, "x": 294, "type": "mouseover", "message_id": 1462}
{"sender": 3914, "msg_type": "MouseEvent", "y": 312, "x": 294, "type": "mousemove", "message_id": 1463}
{"sender": 3914, "msg_type": "MouseEvent", "y": 313, "x": 293, "type": "mousemove", "message_id": 1464}
{"sender": 3914, "msg_type": "MouseEvent", "y": 314, "x": 292, "type": "mousemove", "message_id": 1465}
{"sender": 3914, "msg_type": "MouseEvent", "y": 314, "x": 292, "type": "mousemove", "message_id": 1466}
{"sender": 3914, "msg_type": "MouseEvent", "y": 314, "x": 292, "type": "mousemove", "message_id": 1467}
{"sender": 3914, "msg_type": "MouseEvent", "y": 314, "x": 292, "type": "mousemove", "message_id": 1468}
{"sender": 3914, "msg_type": "MouseEvent", "y": 314, "x": 292, "type": "mousemove", "message_id": 1469}
{"sender": 3914, "msg_type": "MouseEvent", "y": 315, "x": 292, "type": "mousemove", "message_id": 1470}
{"sender": 3914, "msg_type": "MouseEvent", "y": 315, "x": 292, "type": "mousemove", "message_id": 1471}
{"sender": 3914, "msg_type": "MouseEvent", "y": 316, "x": 292, "type": "mousemove", "message_id": 1472}
{"sender": 3914, "msg_type": "MouseEvent", "y": 316, "x": 292, "type": "mousemove", "message_id": 1473}
{"sender": 3914, "msg_type": "MouseEvent", "y": 317, "x": 292, "type": "mousemove", "message_id": 1474}
{"sender": 3914, "msg_type": "MouseEvent", "y": 319, "x": 292, "type": "mousemove", "message_id": 1475}
{"sender": 3914, "msg_type": "MouseEvent", "y": 320, "x": 293, "type": "mousemove", "message_id": 1476}
{"sender": 3914, "msg_type": "MouseEvent", "y": 322, "x": 293, "type": "mousemove", "message_id": 1477}
{"sender": 3914, "msg_type": "MouseEvent", "y": 324, "x": 294, "type": "mousemove", "message_id": 1478}
{"sender": 3914, "msg_type": "MouseEvent", "y": 325, "x": 295, "type": "mousemove", "message_id": 1479}
{"sender": 3914, "msg_type": "MouseEvent", "y": 326, "x": 295, "type": "mousemove", "message_id": 1480}
{"sender": 3914, "msg_type": "MouseEvent", "y": 326, "x": 296, "type": "mousemove", "message_id": 1481}
{"sender": 3914, "msg_type": "MouseEvent", "y": 327, "x": 297, "type": "mousemove", "message_id": 1482}
{"sender": 3914, "msg_type": "MouseEvent", "y": 327, "x": 299, "type": "mouseover", "message_id": 1483}
{"sender": 3914, "msg_type": "MouseEvent", "y": 327, "x": 299, "type": "mouseover", "message_id": 1484}
{"sender": 3914, "msg_type": "MouseEvent", "y": 327, "x": 299, "type": "mousemove", "message_id": 1485}
{"sender": 3914, "msg_type": "MouseEvent", "y": 327, "x": 300, "type": "mouseover", "message_id": 1486}
{"sender": 3914, "msg_type": "MouseEvent", "y": 327, "x": 300, "type": "mouseover", "message_id": 1487}
{"sender": 3914, "msg_type": "MouseEvent", "y": 327, "x": 302, "type": "mouseover", "message_id": 1489}
{"sender": 3914, "msg_type": "MouseEvent", "y": 327, "x": 302, "type": "mouseover", "message_id": 1490}
{"sender": 3914, "msg_type": "MouseEvent", "y": 327, "x": 300, "type": "mousemove", "message_id": 1488}
{"sender": 3914, "msg_type": "MouseEvent", "y": 327, "x": 302, "type": "mousemove", "message_id": 1491}
{"sender": 3914, "msg_type": "MouseEvent", "y": 327, "x": 304, "type": "mousemove", "message_id": 1492}
{"sender": 3914, "msg_type": "MouseEvent", "y": 327, "x": 306, "type": "mousemove", "message_id": 1493}
{"sender": 3914, "msg_type": "MouseEvent", "y": 327, "x": 308, "type": "mousemove", "message_id": 1494}
{"sender": 3914, "msg_type": "MouseEvent", "y": 326, "x": 309, "type": "mouseover", "message_id": 1495}
{"sender": 3914, "msg_type": "MouseEvent", "y": 326, "x": 309, "type": "mouseover", "message_id": 1496}
{"sender": 3914, "msg_type": "MouseEvent", "y": 326, "x": 309, "type": "mousemove", "message_id": 1497}
{"sender": 3914, "msg_type": "MouseEvent", "y": 326, "x": 309, "type": "mousemove", "message_id": 1498}
{"sender": 3914, "msg_type": "MouseEvent", "y": 326, "x": 310, "type": "mousemove", "message_id": 1499}
{"sender": 3914, "msg_type": "MouseEvent", "y": 326, "x": 310, "type": "mousemove", "message_id": 1500}
{"sender": 3914, "msg_type": "MouseEvent", "y": 326, "x": 310, "type": "mousedown", "message_id": 1501}
{"sender": 3914, "msg_type": "MouseEvent", "y": 326, "x": 310, "type": "mouseup", "message_id": 1503}
{"sender": 3914, "msg_type": "MouseEvent", "y": 326, "x": 310, "type": "mousedown", "message_id": 1504}
{"sender": 3914, "msg_type": "MouseEvent", "y": 326, "x": 310, "type": "mouseup", "message_id": 1507}
{"sender": 3914, "msg_type": "KeyEvent", "shiftKey": false, "message_id": 1508, "altKey": false, "metaKey": false, "key": "1", "ctrlKey": false, "type": "keydown", "keyCode": 49}
{"sender": 3914, "msg_type": "KeyEvent", "shiftKey": false, "message_id": 1510, "altKey": false, "metaKey": false, "key": "-", "ctrlKey": false, "type": "keydown", "keyCode": 189}
{"sender": 3914, "msg_type": "KeyEvent", "shiftKey": false, "message_id": 1512, "altKey": false, "metaKey": false, "key": "2", "ctrlKey": false, "type": "keydown", "keyCode": 50}
{"sender": 3914, "msg_type": "MouseEvent", "y": 326, "x": 310, "type": "mousemove", "message_id": 1514}
{"sender": 3914, "msg_type": "MouseEvent", "y": 285, "x": 312, "type": "mouseover", "message_id": 1515}
{"sender": 3914, "msg_type": "MouseEvent", "y": 285, "x": 312, "type": "mouseover", "message_id": 1516}
{"sender": 3914, "msg_type": "MouseEvent", "y": 285, "x": 312, "type": "mousemove", "message_id": 1517}
{"sender": 3914, "msg_type": "MouseEvent", "y": 269, "x": 311, "type": "mouseover", "message_id": 1518}
{"sender": 3914, "msg_type": "MouseEvent", "y": 269, "x": 311, "type": "mouseover", "message_id": 1519}
{"sender": 3914, "msg_type": "MouseEvent", "y": 269, "x": 311, "type": "mousemove", "message_id": 1520}
{"sender": 3914, "msg_type": "MouseEvent", "y": 262, "x": 311, "type": "mouseover", "message_id": 1521}
{"sender": 3914, "msg_type": "MouseEvent", "y": 262, "x": 311, "type": "mouseover", "message_id": 1522}
{"sender": 3914, "msg_type": "MouseEvent", "y": 262, "x": 311, "type": "mousemove", "message_id": 1523}
{"sender": 3914, "msg_type": "MouseEvent", "y": 253, "x": 311, "type": "mousemove", "message_id": 1524}
{"sender": 3914, "msg_type": "MouseEvent", "y": 246, "x": 310, "type": "mousemove", "message_id": 1525}
{"sender": 3914, "msg_type": "MouseEvent", "y": 237, "x": 310, "type": "mousemove", "message_id": 1526}
{"sender": 3914, "msg_type": "MouseEvent", "y": 229, "x": 310, "type": "mousemove", "message_id": 1527}
{"sender": 3914, "msg_type": "MouseEvent", "y": 223, "x": 310, "type": "mousemove", "message_id": 1528}
{"sender": 3914, "msg_type": "MouseEvent", "y": 218, "x": 310, "type": "mousemove", "message_id": 1529}
{"sender": 3914, "msg_type": "MouseEvent", "y": 215, "x": 310, "type": "mousemove", "message_id": 1530}
{"sender": 3914, "msg_type": "MouseEvent", "y": 211, "x": 310, "type": "mousemove", "message_id": 1531}
{"sender": 3914, "msg_type": "MouseEvent", "y": 208, "x": 309, "type": "mousemove", "message_id": 1532}
{"sender": 3914, "msg_type": "MouseEvent", "y": 206, "x": 309, "type": "mousemove", "message_id": 1533}
{"sender": 3914, "msg_type": "MouseEvent", "y": 203, "x": 309, "type": "mousemove", "message_id": 1534}
{"sender": 3914, "msg_type": "MouseEvent", "y": 202, "x": 308, "type": "mousemove", "message_id": 1535}
{"sender": 3914, "msg_type": "MouseEvent", "y": 201, "x": 308, "type": "mousemove", "message_id": 1536}
{"sender": 3914, "msg_type": "MouseEvent", "y": 200, "x": 308, "type": "mousemove", "message_id": 1537}
{"sender": 3914, "msg_type": "MouseEvent", "y": 199, "x": 308, "type": "mousemove", "message_id": 1538}
{"sender": 3914, "msg_type": "MouseEvent", "y": 198, "x": 308, "type": "mousemove", "message_id": 1539}
{"sender": 3914, "msg_type": "MouseEvent", "y": 198, "x": 308, "type": "mousemove", "message_id": 1540}
{"sender": 3914, "msg_type": "MouseEvent", "y": 197, "x": 308, "type": "mousemove", "message_id": 1541}
{"sender": 3914, "msg_type": "MouseEvent", "y": 197, "x": 308, "type": "mousemove", "message_id": 1542}
{"sender": 3914, "msg_type": "MouseEvent", "y": 197, "x": 308, "type": "mousedown", "message_id": 1543}
{"sender": 3914, "msg_type": "MouseEvent", "y": 197, "x": 308, "type": "mouseup", "message_id": 1545}
{"sender": 3914, "msg_type": "MouseEvent", "y": 197, "x": 308, "type": "mousemove", "message_id": 1546}
{"sender": 3914, "msg_type": "MouseEvent", "y": 196, "x": 308, "type": "mousemove", "message_id": 1547}
{"sender": 3914, "msg_type": "MouseEvent", "y": 195, "x": 308, "type": "mousemove", "message_id": 1548}
{"sender": 3914, "msg_type": "MouseEvent", "y": 192, "x": 307, "type": "mousemove", "message_id": 1549}
{"sender": 3914, "msg_type": "MouseEvent", "y": 187, "x": 305, "type": "mouseover", "message_id": 1550}
{"sender": 3914, "msg_type": "MouseEvent", "y": 187, "x": 305, "type": "mouseover", "message_id": 1551}
{"sender": 3914, "msg_type": "MouseEvent", "y": 180, "x": 300, "type": "mouseover", "message_id": 1553}
{"sender": 3914, "msg_type": "MouseEvent", "y": 187, "x": 305, "type": "mousemove", "message_id": 1552}
{"sender": 3914, "msg_type": "MouseEvent", "y": 180, "x": 300, "type": "mouseover", "message_id": 1554}
{"sender": 3914, "msg_type": "MouseEvent", "y": 180, "x": 300, "type": "mousemove", "message_id": 1555}
{"sender": 3914, "msg_type": "MouseEvent", "y": 166, "x": 289, "type": "mousemove", "message_id": 1557}
{"sender": 3914, "msg_type": "MouseEvent", "y": 173, "x": 294, "type": "mousemove", "message_id": 1556}
{"sender": 3914, "msg_type": "MouseEvent", "y": 158, "x": 282, "type": "mousemove", "message_id": 1558}
{"sender": 3914, "msg_type": "MouseEvent", "y": 150, "x": 275, "type": "mousemove", "message_id": 1559}
{"sender": 3914, "msg_type": "MouseEvent", "y": 142, "x": 267, "type": "mousemove", "message_id": 1560}
{"sender": 3914, "msg_type": "MouseEvent", "y": 133, "x": 259, "type": "mousemove", "message_id": 1561}
{"sender": 3914, "msg_type": "MouseEvent", "y": 125, "x": 250, "type": "mousemove", "message_id": 1562}
{"sender": 3914, "msg_type": "MouseEvent", "y": 116, "x": 242, "type": "mousemove", "message_id": 1563}
{"sender": 3914, "msg_type": "MouseEvent", "y": 108, "x": 235, "type": "mousemove", "message_id": 1564}
{"sender": 3914, "msg_type": "MouseEvent", "y": 101, "x": 229, "type": "mousemove", "message_id": 1565}
{"sender": 3914, "msg_type": "MouseEvent", "y": 97, "x": 224, "type": "mousemove", "message_id": 1566}
{"sender": 3914, "msg_type": "MouseEvent", "y": 93, "x": 220, "type": "mousemove", "message_id": 1567}
{"sender": 3914, "msg_type": "MouseEvent", "y": 90, "x": 218, "type": "mouseover", "message_id": 1569}
{"sender": 3914, "msg_type": "MouseEvent", "y": 90, "x": 218, "type": "mouseover", "message_id": 1568}
{"sender": 3914, "msg_type": "MouseEvent", "y": 90, "x": 218, "type": "mousemove", "message_id": 1570}
{"sender": 3914, "msg_type": "MouseEvent", "y": 88, "x": 217, "type": "mouseover", "message_id": 1571}
{"sender": 3914, "msg_type": "MouseEvent", "y": 88, "x": 217, "type": "mouseover", "message_id": 1572}
{"sender": 3914, "msg_type": "MouseEvent", "y": 88, "x": 217, "type": "mousemove", "message_id": 1573}
{"sender": 3914, "msg_type": "MouseEvent", "y": 87, "x": 215, "type": "mouseover", "message_id": 1574}
{"sender": 3914, "msg_type": "MouseEvent", "y": 87, "x": 215, "type": "mouseover", "message_id": 1575}
{"sender": 3914, "msg_type": "MouseEvent", "y": 87, "x": 215, "type": "mousemove", "message_id": 1576}
{"sender": 3914, "msg_type": "MouseEvent", "y": 85, "x": 214, "type": "mouseover", "message_id": 1577}
{"sender": 3914, "msg_type": "MouseEvent", "y": 85, "x": 214, "type": "mousemove", "message_id": 1579}
{"sender": 3914, "msg_type": "MouseEvent", "y": 85, "x": 214, "type": "mouseover", "message_id": 1578}
{"sender": 3914, "msg_type": "MouseEvent", "y": 84, "x": 213, "type": "mousemove", "message_id": 1580}
{"sender": 3914, "msg_type": "MouseEvent", "y": 83, "x": 212, "type": "mousemove", "message_id": 1581}
{"sender": 3914, "msg_type": "MouseEvent", "y": 82, "x": 211, "type": "mousemove", "message_id": 1582}
{"sender": 3914, "msg_type": "MouseEvent", "y": 81, "x": 211, "type": "mousemove", "message_id": 1583}
{"sender": 3914, "msg_type": "MouseEvent", "y": 80, "x": 210, "type": "mousemove", "message_id": 1584}
{"sender": 3914, "msg_type": "MouseEvent", "y": 79, "x": 209, "type": "mousemove", "message_id": 1585}
{"sender": 3914, "msg_type": "MouseEvent", "y": 77, "x": 208, "type": "mousemove", "message_id": 1586}
{"sender": 3914, "msg_type": "MouseEvent", "y": 75, "x": 205, "type": "mouseover", "message_id": 1587}
{"sender": 3914, "msg_type": "MouseEvent", "y": 75, "x": 205, "type": "mousemove", "message_id": 1589}
{"sender": 3914, "msg_type": "MouseEvent", "y": 75, "x": 205, "type": "mouseover", "message_id": 1588}
{"sender": 3914, "msg_type": "MouseEvent", "y": 72, "x": 203, "type": "mouseover", "message_id": 1590}
{"sender": 3914, "msg_type": "MouseEvent", "y": 72, "x": 203, "type": "mouseover", "message_id": 1591}
{"sender": 3914, "msg_type": "MouseEvent", "y": 72, "x": 203, "type": "mousemove", "message_id": 1592}
{"sender": 3914, "msg_type": "MouseEvent", "y": 70, "x": 200, "type": "mouseover", "message_id": 1593}
{"sender": 3914, "msg_type": "MouseEvent", "y": 70, "x": 200, "type": "mouseover", "message_id": 1594}
{"sender": 3914, "msg_type": "MouseEvent", "y": 70, "x": 200, "type": "mousemove", "message_id": 1595}
{"sender": 3914, "msg_type": "MouseEvent", "y": 68, "x": 199, "type": "mouseover", "message_id": 1596}
{"sender": 3914, "msg_type": "MouseEvent", "y": 68, "x": 199, "type": "mouseover", "message_id": 1597}
{"sender": 3914, "msg_type": "MouseEvent", "y": 68, "x": 199, "type": "mousemove", "message_id": 1598}
{"sender": 3914, "msg_type": "MouseEvent", "y": 67, "x": 198, "type": "mousemove", "message_id": 1599}
{"sender": 3914, "msg_type": "MouseEvent", "y": 66, "x": 197, "type": "mousemove", "message_id": 1600}
{"sender": 3914, "msg_type": "MouseEvent", "y": 64, "x": 196, "type": "mousemove", "message_id": 1601}
{"sender": 3914, "msg_type": "MouseEvent", "y": 62, "x": 195, "type": "mousemove", "message_id": 1602}
{"sender": 3914, "msg_type": "MouseEvent", "y": 61, "x": 195, "type": "mousemove", "message_id": 1603}
{"sender": 3914, "msg_type": "MouseEvent", "y": 60, "x": 194, "type": "mousemove", "message_id": 1604}
{"sender": 3914, "msg_type": "MouseEvent", "y": 59, "x": 194, "type": "mousemove", "message_id": 1605}
{"sender": 3914, "msg_type": "MouseEvent", "y": 58, "x": 194, "type": "mousemove", "message_id": 1606}
{"sender": 3914, "msg_type": "MouseEvent", "y": 56, "x": 193, "type": "mousemove", "message_id": 1607}
{"sender": 3914, "msg_type": "MouseEvent", "y": 55, "x": 192, "type": "mousemove", "message_id": 1608}
{"sender": 3914, "msg_type": "MouseEvent", "y": 54, "x": 191, "type": "mousemove", "message_id": 1609}
{"sender": 3914, "msg_type": "MouseEvent", "y": 53, "x": 191, "type": "mousemove", "message_id": 1610}
{"sender": 3914, "msg_type": "MouseEvent", "y": 52, "x": 191, "type": "mousemove", "message_id": 1611}
{"sender": 3914, "msg_type": "MouseEvent", "y": 52, "x": 191, "type": "mousemove", "message_id": 1612}
{"sender": 3914, "msg_type": "MouseEvent", "y": 52, "x": 191, "type": "mousemove", "message_id": 1613}
{"sender": 3914, "msg_type": "MouseEvent", "y": 52, "x": 191, "type": "mousemove", "message_id": 1614}
{"sender": 3914, "msg_type": "MouseEvent", "y": 51, "x": 191, "type": "mousemove", "message_id": 1615}

View File

@ -0,0 +1,167 @@
{"scale": 0.9299999999999995, "sender": 4637, "msg_type": "ViewPort", "panY": 60.64999999999975, "panX": 49.97999999999968, "message_id": 627}
{"sender": 4637, "msg_type": "MouseEvent", "y": 46, "x": 176, "type": "mousemove", "message_id": 628}
{"sender": 4637, "msg_type": "MouseEvent", "y": 46, "x": 176, "type": "mousemove", "message_id": 629}
{"sender": 4637, "msg_type": "MouseEvent", "y": 46, "x": 176, "type": "mousemove", "message_id": 630}
{"sender": 4637, "msg_type": "MouseEvent", "y": 46, "x": 176, "type": "mousemove", "message_id": 631}
{"sender": 4637, "msg_type": "MouseEvent", "y": 47, "x": 176, "type": "mousemove", "message_id": 632}
{"sender": 4637, "msg_type": "MouseEvent", "y": 49, "x": 176, "type": "mousemove", "message_id": 633}
{"sender": 4637, "msg_type": "MouseEvent", "y": 52, "x": 176, "type": "mousemove", "message_id": 634}
{"sender": 4637, "msg_type": "MouseEvent", "y": 55, "x": 175, "type": "mousemove", "message_id": 635}
{"sender": 4637, "msg_type": "MouseEvent", "y": 59, "x": 175, "type": "mousemove", "message_id": 636}
{"sender": 4637, "msg_type": "MouseEvent", "y": 64, "x": 173, "type": "mouseover", "message_id": 637}
{"sender": 4637, "msg_type": "MouseEvent", "y": 64, "x": 173, "type": "mousemove", "message_id": 639}
{"sender": 4637, "msg_type": "MouseEvent", "y": 70, "x": 172, "type": "mouseover", "message_id": 640}
{"sender": 4637, "msg_type": "MouseEvent", "y": 64, "x": 173, "type": "mouseover", "message_id": 638}
{"sender": 4637, "msg_type": "MouseEvent", "y": 70, "x": 172, "type": "mouseover", "message_id": 641}
{"sender": 4637, "msg_type": "MouseEvent", "y": 70, "x": 172, "type": "mousemove", "message_id": 642}
{"sender": 4637, "msg_type": "MouseEvent", "y": 76, "x": 171, "type": "mousemove", "message_id": 643}
{"sender": 4637, "msg_type": "MouseEvent", "y": 81, "x": 170, "type": "mousemove", "message_id": 644}
{"sender": 4637, "msg_type": "MouseEvent", "y": 88, "x": 170, "type": "mousemove", "message_id": 645}
{"sender": 4637, "msg_type": "MouseEvent", "y": 96, "x": 170, "type": "mousemove", "message_id": 646}
{"sender": 4637, "msg_type": "MouseEvent", "y": 101, "x": 170, "type": "mousemove", "message_id": 647}
{"sender": 4637, "msg_type": "MouseEvent", "y": 109, "x": 170, "type": "mousemove", "message_id": 648}
{"sender": 4637, "msg_type": "MouseEvent", "y": 116, "x": 170, "type": "mousemove", "message_id": 649}
{"sender": 4637, "msg_type": "MouseEvent", "y": 123, "x": 171, "type": "mousemove", "message_id": 650}
{"sender": 4637, "msg_type": "MouseEvent", "y": 129, "x": 172, "type": "mousemove", "message_id": 651}
{"sender": 4637, "msg_type": "MouseEvent", "y": 134, "x": 174, "type": "mouseover", "message_id": 652}
{"sender": 4637, "msg_type": "MouseEvent", "y": 134, "x": 174, "type": "mouseover", "message_id": 653}
{"sender": 4637, "msg_type": "MouseEvent", "y": 134, "x": 174, "type": "mousemove", "message_id": 654}
{"sender": 4637, "msg_type": "MouseEvent", "y": 138, "x": 176, "type": "mousemove", "message_id": 655}
{"sender": 4637, "msg_type": "MouseEvent", "y": 143, "x": 179, "type": "mousemove", "message_id": 656}
{"sender": 4637, "msg_type": "MouseEvent", "y": 147, "x": 182, "type": "mousemove", "message_id": 657}
{"sender": 4637, "msg_type": "MouseEvent", "y": 151, "x": 187, "type": "mousemove", "message_id": 658}
{"sender": 4637, "msg_type": "MouseEvent", "y": 154, "x": 193, "type": "mousemove", "message_id": 659}
{"sender": 4637, "msg_type": "MouseEvent", "y": 157, "x": 200, "type": "mousemove", "message_id": 660}
{"sender": 4637, "msg_type": "MouseEvent", "y": 159, "x": 209, "type": "mousemove", "message_id": 661}
{"sender": 4637, "msg_type": "MouseEvent", "y": 160, "x": 217, "type": "mouseover", "message_id": 662}
{"sender": 4637, "msg_type": "MouseEvent", "y": 160, "x": 217, "type": "mouseover", "message_id": 663}
{"sender": 4637, "msg_type": "MouseEvent", "y": 160, "x": 217, "type": "mousemove", "message_id": 664}
{"sender": 4637, "msg_type": "MouseEvent", "y": 161, "x": 230, "type": "mousemove", "message_id": 665}
{"sender": 4637, "msg_type": "MouseEvent", "y": 161, "x": 245, "type": "mousemove", "message_id": 666}
{"sender": 4637, "msg_type": "MouseEvent", "y": 161, "x": 260, "type": "mousemove", "message_id": 667}
{"sender": 4637, "msg_type": "MouseEvent", "y": 159, "x": 276, "type": "mouseover", "message_id": 668}
{"sender": 4637, "msg_type": "MouseEvent", "y": 159, "x": 276, "type": "mouseover", "message_id": 669}
{"sender": 4637, "msg_type": "MouseEvent", "y": 159, "x": 276, "type": "mousemove", "message_id": 670}
{"sender": 4637, "msg_type": "MouseEvent", "y": 156, "x": 292, "type": "mousemove", "message_id": 671}
{"sender": 4637, "msg_type": "MouseEvent", "y": 151, "x": 307, "type": "mousemove", "message_id": 672}
{"sender": 4637, "msg_type": "MouseEvent", "y": 143, "x": 319, "type": "mousemove", "message_id": 673}
{"sender": 4637, "msg_type": "MouseEvent", "y": 134, "x": 329, "type": "mousemove", "message_id": 674}
{"sender": 4637, "msg_type": "MouseEvent", "y": 122, "x": 338, "type": "mousemove", "message_id": 675}
{"sender": 4637, "msg_type": "MouseEvent", "y": 111, "x": 344, "type": "mousemove", "message_id": 676}
{"sender": 4637, "msg_type": "MouseEvent", "y": 102, "x": 349, "type": "mousemove", "message_id": 677}
{"sender": 4637, "msg_type": "MouseEvent", "y": 93, "x": 351, "type": "mousemove", "message_id": 678}
{"sender": 4637, "msg_type": "MouseEvent", "y": 88, "x": 352, "type": "mouseover", "message_id": 679}
{"sender": 4637, "msg_type": "MouseEvent", "y": 88, "x": 352, "type": "mouseover", "message_id": 680}
{"sender": 4637, "msg_type": "MouseEvent", "y": 88, "x": 352, "type": "mousemove", "message_id": 681}
{"sender": 4637, "msg_type": "MouseEvent", "y": 80, "x": 352, "type": "mousemove", "message_id": 682}
{"sender": 4637, "msg_type": "MouseEvent", "y": 73, "x": 351, "type": "mousemove", "message_id": 683}
{"sender": 4637, "msg_type": "MouseEvent", "y": 64, "x": 349, "type": "mouseover", "message_id": 684}
{"sender": 4637, "msg_type": "MouseEvent", "y": 64, "x": 349, "type": "mouseover", "message_id": 685}
{"sender": 4637, "msg_type": "MouseEvent", "y": 64, "x": 349, "type": "mousemove", "message_id": 686}
{"sender": 4637, "msg_type": "MouseEvent", "y": 55, "x": 344, "type": "mousemove", "message_id": 687}
{"sender": 4637, "msg_type": "MouseEvent", "y": 48, "x": 339, "type": "mousemove", "message_id": 688}
{"sender": 4637, "msg_type": "MouseEvent", "y": 42, "x": 333, "type": "mousemove", "message_id": 689}
{"sender": 4637, "msg_type": "MouseEvent", "y": 39, "x": 328, "type": "mousemove", "message_id": 690}
{"sender": 4637, "msg_type": "MouseEvent", "y": 36, "x": 323, "type": "mousemove", "message_id": 691}
{"sender": 4637, "msg_type": "MouseEvent", "y": 34, "x": 320, "type": "mousemove", "message_id": 692}
{"sender": 4637, "msg_type": "MouseEvent", "y": 33, "x": 317, "type": "mouseover", "message_id": 693}
{"sender": 4637, "msg_type": "MouseEvent", "y": 33, "x": 317, "type": "mouseover", "message_id": 694}
{"sender": 4637, "msg_type": "MouseEvent", "y": 33, "x": 317, "type": "mousemove", "message_id": 695}
{"sender": 4637, "msg_type": "MouseEvent", "y": 32, "x": 315, "type": "mousemove", "message_id": 696}
{"sender": 4637, "msg_type": "MouseEvent", "y": 32, "x": 313, "type": "mousemove", "message_id": 697}
{"sender": 4637, "msg_type": "MouseEvent", "y": 31, "x": 311, "type": "mousemove", "message_id": 698}
{"sender": 4637, "msg_type": "MouseEvent", "y": 31, "x": 307, "type": "mousemove", "message_id": 699}
{"sender": 4637, "msg_type": "MouseEvent", "y": 31, "x": 303, "type": "mousemove", "message_id": 700}
{"sender": 4637, "msg_type": "MouseEvent", "y": 31, "x": 300, "type": "mousemove", "message_id": 701}
{"sender": 4637, "msg_type": "MouseEvent", "y": 31, "x": 296, "type": "mousemove", "message_id": 702}
{"sender": 4637, "msg_type": "MouseEvent", "y": 31, "x": 292, "type": "mousemove", "message_id": 703}
{"sender": 4637, "msg_type": "MouseEvent", "y": 31, "x": 287, "type": "mousemove", "message_id": 704}
{"sender": 4637, "msg_type": "MouseEvent", "y": 31, "x": 281, "type": "mousemove", "message_id": 705}
{"sender": 4637, "msg_type": "MouseEvent", "y": 31, "x": 274, "type": "mousemove", "message_id": 706}
{"sender": 4637, "msg_type": "MouseEvent", "y": 31, "x": 266, "type": "mousemove", "message_id": 707}
{"sender": 4637, "msg_type": "MouseEvent", "y": 30, "x": 260, "type": "mousemove", "message_id": 708}
{"sender": 4637, "msg_type": "MouseEvent", "y": 30, "x": 255, "type": "mousemove", "message_id": 709}
{"sender": 4637, "msg_type": "MouseEvent", "y": 30, "x": 253, "type": "mousemove", "message_id": 710}
{"sender": 4637, "msg_type": "MouseEvent", "y": 30, "x": 252, "type": "mouseover", "message_id": 711}
{"sender": 4637, "msg_type": "MouseEvent", "y": 30, "x": 252, "type": "mouseover", "message_id": 712}
{"sender": 4637, "msg_type": "MouseEvent", "y": 30, "x": 252, "type": "mousemove", "message_id": 713}
{"sender": 4637, "msg_type": "MouseEvent", "y": 30, "x": 252, "type": "mousemove", "message_id": 714}
{"sender": 4637, "msg_type": "MouseEvent", "y": 30, "x": 252, "type": "mousemove", "message_id": 715}
{"sender": 4637, "msg_type": "MouseEvent", "y": 30, "x": 252, "type": "mousemove", "message_id": 716}
{"sender": 4637, "msg_type": "MouseEvent", "y": 30, "x": 252, "type": "mousemove", "message_id": 717}
{"sender": 4637, "msg_type": "MouseEvent", "y": 30, "x": 252, "type": "mousemove", "message_id": 718}
{"sender": 4637, "msg_type": "MouseEvent", "y": 30, "x": 252, "type": "mousemove", "message_id": 719}
{"sender": 4637, "msg_type": "MouseEvent", "y": 30, "x": 252, "type": "mousedown", "message_id": 720}
{"sender": 4637, "msg_type": "MouseEvent", "y": 30, "x": 252, "type": "mousemove", "message_id": 721}
{"sender": 4637, "msg_type": "MouseEvent", "y": 30, "x": 252, "type": "mouseup", "message_id": 722}
{"sender": 4637, "msg_type": "MouseEvent", "y": 30, "x": 252, "type": "mouseover", "message_id": 723}
{"sender": 4637, "msg_type": "MouseEvent", "y": 30, "x": 252, "type": "mouseover", "message_id": 724}
{"sender": 4637, "msg_type": "MouseEvent", "y": 30, "x": 252, "type": "mousemove", "message_id": 725}
{"sender": 4637, "msg_type": "MouseEvent", "y": 30, "x": 252, "type": "mouseover", "message_id": 726}
{"sender": 4637, "msg_type": "MouseEvent", "y": 30, "x": 252, "type": "mouseover", "message_id": 727}
{"sender": 4637, "msg_type": "MouseEvent", "y": 30, "x": 252, "type": "mousemove", "message_id": 728}
{"sender": 4637, "msg_type": "MouseEvent", "y": 30, "x": 252, "type": "mousemove", "message_id": 729}
{"sender": 4637, "msg_type": "MouseEvent", "y": 31, "x": 252, "type": "mousemove", "message_id": 730}
{"sender": 4637, "msg_type": "MouseEvent", "y": 31, "x": 252, "type": "mousemove", "message_id": 731}
{"sender": 4637, "msg_type": "MouseEvent", "y": 33, "x": 253, "type": "mousemove", "message_id": 732}
{"sender": 4637, "msg_type": "MouseEvent", "y": 36, "x": 255, "type": "mouseover", "message_id": 733}
{"sender": 4637, "msg_type": "MouseEvent", "y": 36, "x": 255, "type": "mouseover", "message_id": 734}
{"sender": 4637, "msg_type": "MouseEvent", "y": 36, "x": 255, "type": "mousemove", "message_id": 735}
{"sender": 4637, "msg_type": "MouseEvent", "y": 42, "x": 256, "type": "mouseover", "message_id": 736}
{"sender": 4637, "msg_type": "MouseEvent", "y": 42, "x": 256, "type": "mouseover", "message_id": 737}
{"sender": 4637, "msg_type": "MouseEvent", "y": 42, "x": 256, "type": "mousemove", "message_id": 738}
{"sender": 4637, "msg_type": "MouseEvent", "y": 47, "x": 257, "type": "mousemove", "message_id": 739}
{"sender": 4637, "msg_type": "MouseEvent", "y": 55, "x": 257, "type": "mousemove", "message_id": 740}
{"sender": 4637, "msg_type": "MouseEvent", "y": 64, "x": 256, "type": "mousemove", "message_id": 741}
{"sender": 4637, "msg_type": "MouseEvent", "y": 71, "x": 253, "type": "mouseover", "message_id": 742}
{"sender": 4637, "msg_type": "MouseEvent", "y": 71, "x": 253, "type": "mousemove", "message_id": 744}
{"sender": 4637, "msg_type": "MouseEvent", "y": 71, "x": 253, "type": "mouseover", "message_id": 743}
{"sender": 4637, "msg_type": "MouseEvent", "y": 76, "x": 251, "type": "mousemove", "message_id": 745}
{"sender": 4637, "msg_type": "MouseEvent", "y": 81, "x": 248, "type": "mousemove", "message_id": 746}
{"sender": 4637, "msg_type": "MouseEvent", "y": 85, "x": 244, "type": "mousemove", "message_id": 747}
{"sender": 4637, "msg_type": "MouseEvent", "y": 89, "x": 240, "type": "mousemove", "message_id": 748}
{"sender": 4637, "msg_type": "MouseEvent", "y": 91, "x": 237, "type": "mousemove", "message_id": 749}
{"sender": 4637, "msg_type": "MouseEvent", "y": 93, "x": 234, "type": "mousemove", "message_id": 750}
{"sender": 4637, "msg_type": "MouseEvent", "y": 94, "x": 231, "type": "mouseover", "message_id": 751}
{"sender": 4637, "msg_type": "MouseEvent", "y": 94, "x": 231, "type": "mouseover", "message_id": 752}
{"sender": 4637, "msg_type": "MouseEvent", "y": 94, "x": 231, "type": "mousemove", "message_id": 753}
{"sender": 4637, "msg_type": "MouseEvent", "y": 94, "x": 228, "type": "mousemove", "message_id": 754}
{"sender": 4637, "msg_type": "MouseEvent", "y": 94, "x": 225, "type": "mousemove", "message_id": 755}
{"sender": 4637, "msg_type": "MouseEvent", "y": 94, "x": 221, "type": "mousemove", "message_id": 756}
{"sender": 4637, "msg_type": "MouseEvent", "y": 94, "x": 217, "type": "mousemove", "message_id": 757}
{"sender": 4637, "msg_type": "MouseEvent", "y": 93, "x": 214, "type": "mousemove", "message_id": 758}
{"sender": 4637, "msg_type": "MouseEvent", "y": 93, "x": 211, "type": "mousemove", "message_id": 759}
{"sender": 4637, "msg_type": "MouseEvent", "y": 92, "x": 209, "type": "mousemove", "message_id": 760}
{"sender": 4637, "msg_type": "MouseEvent", "y": 92, "x": 207, "type": "mousemove", "message_id": 761}
{"sender": 4637, "msg_type": "MouseEvent", "y": 91, "x": 206, "type": "mouseover", "message_id": 762}
{"sender": 4637, "msg_type": "MouseEvent", "y": 91, "x": 206, "type": "mousemove", "message_id": 764}
{"sender": 4637, "msg_type": "MouseEvent", "y": 91, "x": 206, "type": "mouseover", "message_id": 763}
{"sender": 4637, "msg_type": "MouseEvent", "y": 90, "x": 204, "type": "mouseover", "message_id": 765}
{"sender": 4637, "msg_type": "MouseEvent", "y": 90, "x": 204, "type": "mouseover", "message_id": 766}
{"sender": 4637, "msg_type": "MouseEvent", "y": 90, "x": 204, "type": "mousemove", "message_id": 767}
{"sender": 4637, "msg_type": "MouseEvent", "y": 88, "x": 201, "type": "mouseover", "message_id": 768}
{"sender": 4637, "msg_type": "MouseEvent", "y": 88, "x": 201, "type": "mouseover", "message_id": 769}
{"sender": 4637, "msg_type": "MouseEvent", "y": 85, "x": 198, "type": "mousemove", "message_id": 771}
{"sender": 4637, "msg_type": "MouseEvent", "y": 88, "x": 201, "type": "mousemove", "message_id": 770}
{"sender": 4637, "msg_type": "MouseEvent", "y": 83, "x": 196, "type": "mousemove", "message_id": 772}
{"sender": 4637, "msg_type": "MouseEvent", "y": 80, "x": 193, "type": "mousemove", "message_id": 773}
{"sender": 4637, "msg_type": "MouseEvent", "y": 77, "x": 192, "type": "mouseover", "message_id": 774}
{"sender": 4637, "msg_type": "MouseEvent", "y": 77, "x": 192, "type": "mouseover", "message_id": 775}
{"sender": 4637, "msg_type": "MouseEvent", "y": 77, "x": 192, "type": "mousemove", "message_id": 776}
{"sender": 4637, "msg_type": "MouseEvent", "y": 74, "x": 191, "type": "mousemove", "message_id": 777}
{"sender": 4637, "msg_type": "MouseEvent", "y": 71, "x": 190, "type": "mousemove", "message_id": 778}
{"sender": 4637, "msg_type": "MouseEvent", "y": 67, "x": 189, "type": "mousemove", "message_id": 779}
{"sender": 4637, "msg_type": "MouseEvent", "y": 64, "x": 188, "type": "mousemove", "message_id": 780}
{"sender": 4637, "msg_type": "MouseEvent", "y": 60, "x": 187, "type": "mousemove", "message_id": 781}
{"sender": 4637, "msg_type": "MouseEvent", "y": 59, "x": 187, "type": "mousemove", "message_id": 782}
{"sender": 4637, "msg_type": "MouseEvent", "y": 57, "x": 186, "type": "mousemove", "message_id": 783}
{"sender": 4637, "msg_type": "MouseEvent", "y": 55, "x": 186, "type": "mousemove", "message_id": 784}
{"sender": 4637, "msg_type": "MouseEvent", "y": 52, "x": 186, "type": "mousemove", "message_id": 786}
{"sender": 4637, "msg_type": "MouseEvent", "y": 53, "x": 186, "type": "mousemove", "message_id": 785}
{"sender": 4637, "msg_type": "MouseEvent", "y": 51, "x": 186, "type": "mousemove", "message_id": 787}
{"sender": 4637, "msg_type": "MouseEvent", "y": 50, "x": 186, "type": "mousemove", "message_id": 788}
{"sender": 4637, "msg_type": "MouseEvent", "y": 49, "x": 187, "type": "mousemove", "message_id": 789}
{"sender": 4637, "msg_type": "MouseEvent", "y": 49, "x": 187, "type": "mousemove", "message_id": 790}
{"sender": 4637, "msg_type": "MouseEvent", "y": 48, "x": 187, "type": "mousemove", "message_id": 791}
{"sender": 4637, "msg_type": "MouseEvent", "y": 48, "x": 187, "type": "mousemove", "message_id": 792}
{"sender": 4637, "msg_type": "MouseEvent", "y": 48, "x": 187, "type": "mousemove", "message_id": 793}

View File

@ -0,0 +1,180 @@
{"panX": 88.50231573279976, "panY": 87.7890649686315, "scale": 0.7399999999999998, "sender": 4115, "msg_type": "ViewPort", "message_id": 0}
{"sender": 4115, "msg_type": "MouseEvent", "y": 46, "x": 189, "type": "mousemove", "message_id": 2099}
{"sender": 4115, "msg_type": "MouseEvent", "y": 57, "x": 191, "type": "mouseover", "message_id": 2100}
{"sender": 4115, "msg_type": "MouseEvent", "y": 57, "x": 191, "type": "mouseover", "message_id": 2101}
{"sender": 4115, "msg_type": "MouseEvent", "y": 57, "x": 191, "type": "mousemove", "message_id": 2102}
{"sender": 4115, "msg_type": "MouseEvent", "y": 74, "x": 193, "type": "mouseover", "message_id": 2103}
{"sender": 4115, "msg_type": "MouseEvent", "y": 74, "x": 193, "type": "mouseover", "message_id": 2104}
{"sender": 4115, "msg_type": "MouseEvent", "y": 74, "x": 193, "type": "mousemove", "message_id": 2105}
{"sender": 4115, "msg_type": "MouseEvent", "y": 91, "x": 197, "type": "mousemove", "message_id": 2106}
{"sender": 4115, "msg_type": "MouseEvent", "y": 110, "x": 200, "type": "mousemove", "message_id": 2107}
{"sender": 4115, "msg_type": "MouseEvent", "y": 130, "x": 206, "type": "mousemove", "message_id": 2108}
{"sender": 4115, "msg_type": "MouseEvent", "y": 150, "x": 210, "type": "mousemove", "message_id": 2109}
{"sender": 4115, "msg_type": "MouseEvent", "y": 170, "x": 215, "type": "mousemove", "message_id": 2110}
{"sender": 4115, "msg_type": "MouseEvent", "y": 186, "x": 220, "type": "mousemove", "message_id": 2111}
{"sender": 4115, "msg_type": "MouseEvent", "y": 205, "x": 225, "type": "mousemove", "message_id": 2112}
{"sender": 4115, "msg_type": "MouseEvent", "y": 220, "x": 230, "type": "mousemove", "message_id": 2113}
{"sender": 4115, "msg_type": "MouseEvent", "y": 237, "x": 235, "type": "mousemove", "message_id": 2114}
{"sender": 4115, "msg_type": "MouseEvent", "y": 243, "x": 237, "type": "mousemove", "message_id": 2115}
{"sender": 4115, "msg_type": "MouseEvent", "y": 256, "x": 241, "type": "mousemove", "message_id": 2116}
{"sender": 4115, "msg_type": "MouseEvent", "y": 267, "x": 246, "type": "mousemove", "message_id": 2117}
{"sender": 4115, "msg_type": "MouseEvent", "y": 275, "x": 249, "type": "mousemove", "message_id": 2118}
{"sender": 4115, "msg_type": "MouseEvent", "y": 278, "x": 249, "type": "mouseover", "message_id": 2120}
{"sender": 4115, "msg_type": "MouseEvent", "y": 278, "x": 249, "type": "mouseover", "message_id": 2119}
{"sender": 4115, "msg_type": "MouseEvent", "y": 278, "x": 249, "type": "mousemove", "message_id": 2121}
{"sender": 4115, "msg_type": "MouseEvent", "y": 288, "x": 254, "type": "mouseover", "message_id": 2122}
{"sender": 4115, "msg_type": "MouseEvent", "y": 288, "x": 254, "type": "mouseover", "message_id": 2123}
{"sender": 4115, "msg_type": "MouseEvent", "y": 288, "x": 254, "type": "mousemove", "message_id": 2124}
{"sender": 4115, "msg_type": "MouseEvent", "y": 292, "x": 255, "type": "mouseover", "message_id": 2125}
{"sender": 4115, "msg_type": "MouseEvent", "y": 292, "x": 255, "type": "mouseover", "message_id": 2126}
{"sender": 4115, "msg_type": "MouseEvent", "y": 292, "x": 255, "type": "mousemove", "message_id": 2127}
{"sender": 4115, "msg_type": "MouseEvent", "y": 294, "x": 256, "type": "mousemove", "message_id": 2128}
{"sender": 4115, "msg_type": "MouseEvent", "y": 299, "x": 258, "type": "mouseover", "message_id": 2129}
{"sender": 4115, "msg_type": "MouseEvent", "y": 299, "x": 258, "type": "mouseover", "message_id": 2130}
{"sender": 4115, "msg_type": "MouseEvent", "y": 299, "x": 258, "type": "mousemove", "message_id": 2131}
{"sender": 4115, "msg_type": "MouseEvent", "y": 301, "x": 259, "type": "mouseover", "message_id": 2132}
{"sender": 4115, "msg_type": "MouseEvent", "y": 301, "x": 259, "type": "mouseover", "message_id": 2133}
{"sender": 4115, "msg_type": "MouseEvent", "y": 301, "x": 259, "type": "mousemove", "message_id": 2134}
{"sender": 4115, "msg_type": "MouseEvent", "y": 304, "x": 260, "type": "mousemove", "message_id": 2135}
{"sender": 4115, "msg_type": "MouseEvent", "y": 306, "x": 260, "type": "mousemove", "message_id": 2136}
{"sender": 4115, "msg_type": "MouseEvent", "y": 309, "x": 261, "type": "mousemove", "message_id": 2137}
{"sender": 4115, "msg_type": "MouseEvent", "y": 310, "x": 262, "type": "mousemove", "message_id": 2138}
{"sender": 4115, "msg_type": "MouseEvent", "y": 312, "x": 262, "type": "mousemove", "message_id": 2139}
{"sender": 4115, "msg_type": "MouseEvent", "y": 313, "x": 262, "type": "mousemove", "message_id": 2140}
{"sender": 4115, "msg_type": "MouseEvent", "y": 315, "x": 263, "type": "mousemove", "message_id": 2142}
{"sender": 4115, "msg_type": "MouseEvent", "y": 314, "x": 263, "type": "mousemove", "message_id": 2141}
{"sender": 4115, "msg_type": "MouseEvent", "y": 315, "x": 263, "type": "mousemove", "message_id": 2143}
{"sender": 4115, "msg_type": "MouseEvent", "y": 315, "x": 263, "type": "mousemove", "message_id": 2144}
{"sender": 4115, "msg_type": "MouseEvent", "y": 315, "x": 263, "type": "mousedown", "message_id": 2145}
{"sender": 4115, "msg_type": "MouseEvent", "y": 315, "x": 263, "type": "mouseup", "message_id": 2146}
{"sender": 4115, "msg_type": "KeyEvent", "shiftKey": false, "message_id": 2147, "altKey": false, "metaKey": false, "key": "s", "ctrlKey": false, "type": "keydown", "keyCode": 83}
{"sender": 4115, "msg_type": "KeyEvent", "shiftKey": false, "message_id": 2149, "altKey": false, "metaKey": false, "key": "l", "ctrlKey": false, "type": "keydown", "keyCode": 76}
{"sender": 4115, "msg_type": "MouseEvent", "y": 315, "x": 263, "type": "mousedown", "message_id": 2150}
{"sender": 4115, "msg_type": "MouseEvent", "y": 315, "x": 263, "type": "mouseup", "message_id": 2151}
{"sender": 4115, "msg_type": "MouseEvent", "y": 315, "x": 264, "type": "mousemove", "message_id": 2153}
{"sender": 4115, "msg_type": "MouseEvent", "y": 314, "x": 267, "type": "mouseover", "message_id": 2154}
{"sender": 4115, "msg_type": "MouseEvent", "y": 314, "x": 267, "type": "mouseover", "message_id": 2155}
{"sender": 4115, "msg_type": "MouseEvent", "y": 314, "x": 267, "type": "mousemove", "message_id": 2156}
{"sender": 4115, "msg_type": "MouseEvent", "y": 311, "x": 272, "type": "mouseover", "message_id": 2157}
{"sender": 4115, "msg_type": "MouseEvent", "y": 311, "x": 272, "type": "mouseover", "message_id": 2158}
{"sender": 4115, "msg_type": "MouseEvent", "y": 311, "x": 272, "type": "mousemove", "message_id": 2159}
{"sender": 4115, "msg_type": "MouseEvent", "y": 309, "x": 277, "type": "mousemove", "message_id": 2160}
{"sender": 4115, "msg_type": "MouseEvent", "y": 307, "x": 283, "type": "mouseover", "message_id": 2161}
{"sender": 4115, "msg_type": "MouseEvent", "y": 307, "x": 283, "type": "mouseover", "message_id": 2162}
{"sender": 4115, "msg_type": "MouseEvent", "y": 307, "x": 283, "type": "mousemove", "message_id": 2163}
{"sender": 4115, "msg_type": "MouseEvent", "y": 305, "x": 291, "type": "mousemove", "message_id": 2164}
{"sender": 4115, "msg_type": "MouseEvent", "y": 297, "x": 311, "type": "mouseover", "message_id": 2165}
{"sender": 4115, "msg_type": "MouseEvent", "y": 297, "x": 311, "type": "mouseover", "message_id": 2166}
{"sender": 4115, "msg_type": "MouseEvent", "y": 297, "x": 311, "type": "mousemove", "message_id": 2167}
{"sender": 4115, "msg_type": "MouseEvent", "y": 291, "x": 330, "type": "mousemove", "message_id": 2168}
{"sender": 4115, "msg_type": "MouseEvent", "y": 290, "x": 340, "type": "mouseover", "message_id": 2169}
{"sender": 4115, "msg_type": "MouseEvent", "y": 290, "x": 340, "type": "mouseover", "message_id": 2170}
{"sender": 4115, "msg_type": "MouseEvent", "y": 290, "x": 340, "type": "mousemove", "message_id": 2171}
{"sender": 4115, "msg_type": "MouseEvent", "y": 287, "x": 360, "type": "mouseover", "message_id": 2172}
{"sender": 4115, "msg_type": "MouseEvent", "y": 287, "x": 360, "type": "mouseover", "message_id": 2173}
{"sender": 4115, "msg_type": "MouseEvent", "y": 287, "x": 360, "type": "mousemove", "message_id": 2174}
{"sender": 4115, "msg_type": "MouseEvent", "y": 286, "x": 378, "type": "mousemove", "message_id": 2175}
{"sender": 4115, "msg_type": "MouseEvent", "y": 285, "x": 392, "type": "mouseover", "message_id": 2176}
{"sender": 4115, "msg_type": "MouseEvent", "y": 285, "x": 392, "type": "mouseover", "message_id": 2177}
{"sender": 4115, "msg_type": "MouseEvent", "y": 285, "x": 392, "type": "mousemove", "message_id": 2178}
{"sender": 4115, "msg_type": "MouseEvent", "y": 285, "x": 399, "type": "mousemove", "message_id": 2179}
{"sender": 4115, "msg_type": "MouseEvent", "y": 285, "x": 410, "type": "mousemove", "message_id": 2180}
{"sender": 4115, "msg_type": "MouseEvent", "y": 285, "x": 420, "type": "mousemove", "message_id": 2181}
{"sender": 4115, "msg_type": "MouseEvent", "y": 285, "x": 423, "type": "mousemove", "message_id": 2182}
{"sender": 4115, "msg_type": "MouseEvent", "y": 285, "x": 428, "type": "mousemove", "message_id": 2183}
{"sender": 4115, "msg_type": "MouseEvent", "y": 285, "x": 433, "type": "mousemove", "message_id": 2184}
{"sender": 4115, "msg_type": "MouseEvent", "y": 285, "x": 438, "type": "mousemove", "message_id": 2186}
{"sender": 4115, "msg_type": "MouseEvent", "y": 285, "x": 436, "type": "mousemove", "message_id": 2185}
{"sender": 4115, "msg_type": "MouseEvent", "y": 285, "x": 440, "type": "mousemove", "message_id": 2187}
{"sender": 4115, "msg_type": "MouseEvent", "y": 285, "x": 440, "type": "mouseover", "message_id": 2188}
{"sender": 4115, "msg_type": "MouseEvent", "y": 285, "x": 440, "type": "mouseover", "message_id": 2189}
{"sender": 4115, "msg_type": "MouseEvent", "y": 285, "x": 440, "type": "mousemove", "message_id": 2190}
{"sender": 4115, "msg_type": "MouseEvent", "y": 285, "x": 441, "type": "mousemove", "message_id": 2191}
{"sender": 4115, "msg_type": "MouseEvent", "y": 285, "x": 441, "type": "mousemove", "message_id": 2192}
{"sender": 4115, "msg_type": "MouseEvent", "y": 285, "x": 442, "type": "mousemove", "message_id": 2193}
{"sender": 4115, "msg_type": "MouseEvent", "y": 285, "x": 442, "type": "mousemove", "message_id": 2194}
{"sender": 4115, "msg_type": "MouseEvent", "y": 286, "x": 442, "type": "mousemove", "message_id": 2195}
{"sender": 4115, "msg_type": "MouseEvent", "y": 286, "x": 442, "type": "mousemove", "message_id": 2196}
{"sender": 4115, "msg_type": "MouseEvent", "y": 286, "x": 441, "type": "mousemove", "message_id": 2197}
{"sender": 4115, "msg_type": "MouseEvent", "y": 286, "x": 441, "type": "mousemove", "message_id": 2198}
{"sender": 4115, "msg_type": "MouseEvent", "y": 286, "x": 440, "type": "mousemove", "message_id": 2199}
{"sender": 4115, "msg_type": "MouseEvent", "y": 286, "x": 440, "type": "mousemove", "message_id": 2200}
{"sender": 4115, "msg_type": "MouseEvent", "y": 286, "x": 439, "type": "mousemove", "message_id": 2201}
{"sender": 4115, "msg_type": "MouseEvent", "y": 286, "x": 439, "type": "mousemove", "message_id": 2202}
{"sender": 4115, "msg_type": "MouseEvent", "y": 286, "x": 439, "type": "mousemove", "message_id": 2203}
{"sender": 4115, "msg_type": "MouseEvent", "y": 286, "x": 439, "type": "mousemove", "message_id": 2204}
{"sender": 4115, "msg_type": "MouseEvent", "y": 286, "x": 438, "type": "mousemove", "message_id": 2205}
{"sender": 4115, "msg_type": "MouseEvent", "y": 286, "x": 438, "type": "mousedown", "message_id": 2206}
{"sender": 4115, "msg_type": "MouseEvent", "y": 286, "x": 438, "type": "mouseup", "message_id": 2207}
{"sender": 4115, "msg_type": "MouseEvent", "y": 286, "x": 438, "type": "mousemove", "message_id": 2209}
{"sender": 4115, "msg_type": "MouseEvent", "y": 284, "x": 436, "type": "mouseover", "message_id": 2211}
{"sender": 4115, "msg_type": "MouseEvent", "y": 284, "x": 436, "type": "mouseover", "message_id": 2210}
{"sender": 4115, "msg_type": "MouseEvent", "y": 281, "x": 433, "type": "mousemove", "message_id": 2213}
{"sender": 4115, "msg_type": "MouseEvent", "y": 284, "x": 436, "type": "mousemove", "message_id": 2212}
{"sender": 4115, "msg_type": "MouseEvent", "y": 278, "x": 430, "type": "mousemove", "message_id": 2214}
{"sender": 4115, "msg_type": "MouseEvent", "y": 274, "x": 425, "type": "mousemove", "message_id": 2215}
{"sender": 4115, "msg_type": "MouseEvent", "y": 270, "x": 421, "type": "mousemove", "message_id": 2216}
{"sender": 4115, "msg_type": "MouseEvent", "y": 264, "x": 415, "type": "mousemove", "message_id": 2217}
{"sender": 4115, "msg_type": "MouseEvent", "y": 258, "x": 407, "type": "mousemove", "message_id": 2218}
{"sender": 4115, "msg_type": "MouseEvent", "y": 226, "x": 375, "type": "mousemove", "message_id": 2220}
{"sender": 4115, "msg_type": "MouseEvent", "y": 244, "x": 392, "type": "mousemove", "message_id": 2219}
{"sender": 4115, "msg_type": "MouseEvent", "y": 207, "x": 357, "type": "mousemove", "message_id": 2221}
{"sender": 4115, "msg_type": "MouseEvent", "y": 185, "x": 336, "type": "mousemove", "message_id": 2222}
{"sender": 4115, "msg_type": "MouseEvent", "y": 163, "x": 314, "type": "mousemove", "message_id": 2223}
{"sender": 4115, "msg_type": "MouseEvent", "y": 142, "x": 293, "type": "mousemove", "message_id": 2224}
{"sender": 4115, "msg_type": "MouseEvent", "y": 135, "x": 287, "type": "mousemove", "message_id": 2225}
{"sender": 4115, "msg_type": "MouseEvent", "y": 117, "x": 269, "type": "mousemove", "message_id": 2226}
{"sender": 4115, "msg_type": "MouseEvent", "y": 104, "x": 256, "type": "mousemove", "message_id": 2227}
{"sender": 4115, "msg_type": "MouseEvent", "y": 98, "x": 250, "type": "mousemove", "message_id": 2228}
{"sender": 4115, "msg_type": "MouseEvent", "y": 88, "x": 238, "type": "mouseover", "message_id": 2229}
{"sender": 4115, "msg_type": "MouseEvent", "y": 88, "x": 238, "type": "mouseover", "message_id": 2230}
{"sender": 4115, "msg_type": "MouseEvent", "y": 88, "x": 238, "type": "mousemove", "message_id": 2231}
{"sender": 4115, "msg_type": "MouseEvent", "y": 80, "x": 229, "type": "mouseover", "message_id": 2232}
{"sender": 4115, "msg_type": "MouseEvent", "y": 80, "x": 229, "type": "mouseover", "message_id": 2233}
{"sender": 4115, "msg_type": "MouseEvent", "y": 80, "x": 229, "type": "mousemove", "message_id": 2234}
{"sender": 4115, "msg_type": "MouseEvent", "y": 73, "x": 222, "type": "mousemove", "message_id": 2235}
{"sender": 4115, "msg_type": "MouseEvent", "y": 67, "x": 216, "type": "mousemove", "message_id": 2236}
{"sender": 4115, "msg_type": "MouseEvent", "y": 64, "x": 211, "type": "mousemove", "message_id": 2237}
{"sender": 4115, "msg_type": "MouseEvent", "y": 62, "x": 209, "type": "mousemove", "message_id": 2238}
{"sender": 4115, "msg_type": "MouseEvent", "y": 59, "x": 205, "type": "mouseover", "message_id": 2239}
{"sender": 4115, "msg_type": "MouseEvent", "y": 59, "x": 205, "type": "mouseover", "message_id": 2240}
{"sender": 4115, "msg_type": "MouseEvent", "y": 59, "x": 205, "type": "mousemove", "message_id": 2241}
{"sender": 4115, "msg_type": "MouseEvent", "y": 55, "x": 200, "type": "mousemove", "message_id": 2242}
{"sender": 4115, "msg_type": "MouseEvent", "y": 54, "x": 199, "type": "mouseover", "message_id": 2243}
{"sender": 4115, "msg_type": "MouseEvent", "y": 54, "x": 199, "type": "mouseover", "message_id": 2244}
{"sender": 4115, "msg_type": "MouseEvent", "y": 54, "x": 199, "type": "mousemove", "message_id": 2245}
{"sender": 4115, "msg_type": "MouseEvent", "y": 52, "x": 196, "type": "mouseover", "message_id": 2246}
{"sender": 4115, "msg_type": "MouseEvent", "y": 52, "x": 196, "type": "mouseover", "message_id": 2247}
{"sender": 4115, "msg_type": "MouseEvent", "y": 52, "x": 196, "type": "mousemove", "message_id": 2248}
{"sender": 4115, "msg_type": "MouseEvent", "y": 51, "x": 194, "type": "mouseover", "message_id": 2249}
{"sender": 4115, "msg_type": "MouseEvent", "y": 51, "x": 194, "type": "mouseover", "message_id": 2250}
{"sender": 4115, "msg_type": "MouseEvent", "y": 51, "x": 194, "type": "mousemove", "message_id": 2251}
{"sender": 4115, "msg_type": "MouseEvent", "y": 50, "x": 193, "type": "mouseover", "message_id": 2252}
{"sender": 4115, "msg_type": "MouseEvent", "y": 50, "x": 193, "type": "mouseover", "message_id": 2253}
{"sender": 4115, "msg_type": "MouseEvent", "y": 50, "x": 193, "type": "mousemove", "message_id": 2254}
{"sender": 4115, "msg_type": "MouseEvent", "y": 48, "x": 191, "type": "mouseover", "message_id": 2255}
{"sender": 4115, "msg_type": "MouseEvent", "y": 48, "x": 191, "type": "mouseover", "message_id": 2256}
{"sender": 4115, "msg_type": "MouseEvent", "y": 48, "x": 191, "type": "mousemove", "message_id": 2257}
{"sender": 4115, "msg_type": "MouseEvent", "y": 47, "x": 190, "type": "mouseover", "message_id": 2258}
{"sender": 4115, "msg_type": "MouseEvent", "y": 47, "x": 190, "type": "mouseover", "message_id": 2259}
{"sender": 4115, "msg_type": "MouseEvent", "y": 47, "x": 190, "type": "mousemove", "message_id": 2260}
{"sender": 4115, "msg_type": "MouseEvent", "y": 46, "x": 189, "type": "mousemove", "message_id": 2261}
{"sender": 4115, "msg_type": "MouseEvent", "y": 45, "x": 187, "type": "mouseover", "message_id": 2262}
{"sender": 4115, "msg_type": "MouseEvent", "y": 45, "x": 187, "type": "mouseover", "message_id": 2263}
{"sender": 4115, "msg_type": "MouseEvent", "y": 45, "x": 187, "type": "mousemove", "message_id": 2264}
{"sender": 4115, "msg_type": "MouseEvent", "y": 44, "x": 186, "type": "mouseover", "message_id": 2265}
{"sender": 4115, "msg_type": "MouseEvent", "y": 44, "x": 186, "type": "mouseover", "message_id": 2266}
{"sender": 4115, "msg_type": "MouseEvent", "y": 44, "x": 186, "type": "mousemove", "message_id": 2267}
{"sender": 4115, "msg_type": "MouseEvent", "y": 43, "x": 185, "type": "mousemove", "message_id": 2268}
{"sender": 4115, "msg_type": "MouseEvent", "y": 42, "x": 183, "type": "mouseover", "message_id": 2269}
{"sender": 4115, "msg_type": "MouseEvent", "y": 42, "x": 183, "type": "mouseover", "message_id": 2270}
{"sender": 4115, "msg_type": "MouseEvent", "y": 42, "x": 183, "type": "mousemove", "message_id": 2271}
{"sender": 4115, "msg_type": "MouseEvent", "y": 41, "x": 182, "type": "mouseover", "message_id": 2272}
{"sender": 4115, "msg_type": "MouseEvent", "y": 41, "x": 182, "type": "mouseover", "message_id": 2273}
{"sender": 4115, "msg_type": "MouseEvent", "y": 41, "x": 182, "type": "mousemove", "message_id": 2274}
{"sender": 4115, "msg_type": "MouseEvent", "y": 40, "x": 180, "type": "mouseover", "message_id": 2275}
{"sender": 4115, "msg_type": "MouseEvent", "y": 40, "x": 180, "type": "mouseover", "message_id": 2276}
{"sender": 4115, "msg_type": "MouseEvent", "y": 40, "x": 180, "type": "mousemove", "message_id": 2277}
{"sender": 4115, "msg_type": "MouseEvent", "y": 39, "x": 179, "type": "mouseover", "message_id": 2278}
{"sender": 4115, "msg_type": "MouseEvent", "y": 39, "x": 179, "type": "mouseover", "message_id": 2279}
{"sender": 4115, "msg_type": "MouseEvent", "y": 39, "x": 179, "type": "mousemove", "message_id": 2280}

View File

@ -0,0 +1,536 @@
{"panX": 156.0005645513574, "panY": 143.5339218357422, "scale": 0.510765027322404, "sender": 3914, "msg_type": "ViewPort", "message_id": 0}
{"sender": 3914, "msg_type": "MouseEvent", "y": 49, "x": 172, "type": "mousemove", "message_id": 121}
{"sender": 3914, "msg_type": "MouseEvent", "y": 49, "x": 172, "type": "mousemove", "message_id": 122}
{"sender": 3914, "msg_type": "MouseEvent", "y": 49, "x": 173, "type": "mousemove", "message_id": 123}
{"sender": 3914, "msg_type": "MouseEvent", "y": 50, "x": 174, "type": "mousemove", "message_id": 124}
{"sender": 3914, "msg_type": "MouseEvent", "y": 50, "x": 175, "type": "mousemove", "message_id": 125}
{"sender": 3914, "msg_type": "MouseEvent", "y": 51, "x": 176, "type": "mousemove", "message_id": 126}
{"sender": 3914, "msg_type": "MouseEvent", "y": 51, "x": 178, "type": "mouseover", "message_id": 127}
{"sender": 3914, "msg_type": "MouseEvent", "y": 51, "x": 178, "type": "mouseover", "message_id": 128}
{"sender": 3914, "msg_type": "MouseEvent", "y": 51, "x": 178, "type": "mousemove", "message_id": 129}
{"sender": 3914, "msg_type": "MouseEvent", "y": 52, "x": 179, "type": "mouseover", "message_id": 130}
{"sender": 3914, "msg_type": "MouseEvent", "y": 52, "x": 179, "type": "mouseover", "message_id": 131}
{"sender": 3914, "msg_type": "MouseEvent", "y": 52, "x": 179, "type": "mousemove", "message_id": 132}
{"sender": 3914, "msg_type": "MouseEvent", "y": 52, "x": 179, "type": "mousemove", "message_id": 133}
{"sender": 3914, "msg_type": "MouseEvent", "y": 52, "x": 179, "type": "mousemove", "message_id": 134}
{"sender": 3914, "msg_type": "MouseEvent", "y": 52, "x": 180, "type": "mousemove", "message_id": 135}
{"sender": 3914, "msg_type": "MouseEvent", "y": 52, "x": 181, "type": "mousemove", "message_id": 136}
{"sender": 3914, "msg_type": "MouseEvent", "y": 53, "x": 181, "type": "mousemove", "message_id": 137}
{"sender": 3914, "msg_type": "MouseEvent", "y": 53, "x": 182, "type": "mousemove", "message_id": 138}
{"sender": 3914, "msg_type": "MouseEvent", "y": 53, "x": 183, "type": "mousemove", "message_id": 139}
{"sender": 3914, "msg_type": "MouseEvent", "y": 53, "x": 183, "type": "mousemove", "message_id": 140}
{"sender": 3914, "msg_type": "MouseEvent", "y": 53, "x": 184, "type": "mousemove", "message_id": 141}
{"sender": 3914, "msg_type": "MouseEvent", "y": 53, "x": 184, "type": "mousemove", "message_id": 142}
{"sender": 3914, "msg_type": "MouseEvent", "y": 53, "x": 184, "type": "mousemove", "message_id": 143}
{"sender": 3914, "msg_type": "MouseEvent", "y": 53, "x": 182, "type": "mouseover", "message_id": 144}
{"sender": 3914, "msg_type": "MouseEvent", "y": 53, "x": 182, "type": "mouseover", "message_id": 145}
{"sender": 3914, "msg_type": "MouseEvent", "y": 53, "x": 182, "type": "mousemove", "message_id": 146}
{"sender": 3914, "msg_type": "MouseEvent", "y": 53, "x": 178, "type": "mousemove", "message_id": 147}
{"sender": 3914, "msg_type": "MouseEvent", "y": 53, "x": 170, "type": "mousemove", "message_id": 148}
{"sender": 3914, "msg_type": "MouseEvent", "y": 53, "x": 158, "type": "mousemove", "message_id": 149}
{"sender": 3914, "msg_type": "MouseEvent", "y": 54, "x": 141, "type": "mouseover", "message_id": 150}
{"sender": 3914, "msg_type": "MouseEvent", "y": 54, "x": 141, "type": "mouseover", "message_id": 151}
{"sender": 3914, "msg_type": "MouseEvent", "y": 54, "x": 141, "type": "mousemove", "message_id": 152}
{"sender": 3914, "msg_type": "MouseEvent", "y": 56, "x": 120, "type": "mouseover", "message_id": 153}
{"sender": 3914, "msg_type": "MouseEvent", "y": 56, "x": 120, "type": "mouseover", "message_id": 154}
{"sender": 3914, "msg_type": "MouseEvent", "y": 56, "x": 120, "type": "mousemove", "message_id": 155}
{"sender": 3914, "msg_type": "MouseEvent", "y": 58, "x": 98, "type": "mousemove", "message_id": 156}
{"sender": 3914, "msg_type": "MouseEvent", "y": 59, "x": 74, "type": "mouseover", "message_id": 157}
{"sender": 3914, "msg_type": "MouseEvent", "y": 59, "x": 74, "type": "mouseover", "message_id": 158}
{"sender": 3914, "msg_type": "MouseEvent", "y": 59, "x": 74, "type": "mousemove", "message_id": 159}
{"sender": 3914, "msg_type": "MouseEvent", "y": 60, "x": 52, "type": "mouseover", "message_id": 160}
{"sender": 3914, "msg_type": "MouseEvent", "y": 60, "x": 52, "type": "mouseover", "message_id": 161}
{"sender": 3914, "msg_type": "MouseEvent", "y": 60, "x": 52, "type": "mousemove", "message_id": 162}
{"sender": 3914, "msg_type": "MouseEvent", "y": 61, "x": 33, "type": "mouseover", "message_id": 163}
{"sender": 3914, "msg_type": "MouseEvent", "y": 61, "x": 33, "type": "mousemove", "message_id": 165}
{"sender": 3914, "msg_type": "MouseEvent", "y": 61, "x": 33, "type": "mouseover", "message_id": 164}
{"sender": 3914, "msg_type": "MouseEvent", "y": 61, "x": 19, "type": "mouseover", "message_id": 166}
{"sender": 3914, "msg_type": "MouseEvent", "y": 61, "x": 19, "type": "mouseover", "message_id": 167}
{"sender": 3914, "msg_type": "MouseEvent", "y": 61, "x": 19, "type": "mousemove", "message_id": 168}
{"sender": 3914, "msg_type": "MouseEvent", "y": 62, "x": 10, "type": "mousemove", "message_id": 169}
{"sender": 3914, "msg_type": "MouseEvent", "y": 62, "x": 4, "type": "mousemove", "message_id": 170}
{"sender": 3914, "msg_type": "MouseEvent", "y": 62, "x": 0, "type": "mousemove", "message_id": 171}
{"sender": 3914, "msg_type": "MouseEvent", "y": 62, "x": -1, "type": "mouseout", "message_id": 172}
{"sender": 3914, "msg_type": "MouseEvent", "y": 59, "x": 2, "type": "mouseover", "message_id": 174}
{"sender": 3914, "msg_type": "MouseEvent", "y": 59, "x": 2, "type": "mouseover", "message_id": 173}
{"sender": 3914, "msg_type": "MouseEvent", "y": 59, "x": 2, "type": "mousemove", "message_id": 175}
{"sender": 3914, "msg_type": "MouseEvent", "y": 59, "x": 2, "type": "mouseover", "message_id": 176}
{"sender": 3914, "msg_type": "MouseEvent", "y": 59, "x": 2, "type": "mouseover", "message_id": 177}
{"sender": 3914, "msg_type": "MouseEvent", "y": 59, "x": 2, "type": "mousemove", "message_id": 178}
{"sender": 3914, "msg_type": "MouseEvent", "y": 58, "x": 7, "type": "mouseover", "message_id": 179}
{"sender": 3914, "msg_type": "MouseEvent", "y": 58, "x": 7, "type": "mouseover", "message_id": 180}
{"sender": 3914, "msg_type": "MouseEvent", "y": 58, "x": 7, "type": "mousemove", "message_id": 181}
{"sender": 3914, "msg_type": "MouseEvent", "y": 57, "x": 12, "type": "mousemove", "message_id": 182}
{"sender": 3914, "msg_type": "MouseEvent", "y": 56, "x": 17, "type": "mousemove", "message_id": 183}
{"sender": 3914, "msg_type": "MouseEvent", "y": 55, "x": 22, "type": "mousemove", "message_id": 184}
{"sender": 3914, "msg_type": "MouseEvent", "y": 54, "x": 26, "type": "mousemove", "message_id": 185}
{"sender": 3914, "msg_type": "MouseEvent", "y": 53, "x": 29, "type": "mousemove", "message_id": 186}
{"sender": 3914, "msg_type": "MouseEvent", "y": 52, "x": 31, "type": "mousemove", "message_id": 187}
{"sender": 3914, "msg_type": "MouseEvent", "y": 52, "x": 32, "type": "mouseover", "message_id": 188}
{"sender": 3914, "msg_type": "MouseEvent", "y": 52, "x": 32, "type": "mouseover", "message_id": 189}
{"sender": 3914, "msg_type": "MouseEvent", "y": 52, "x": 32, "type": "mousemove", "message_id": 190}
{"sender": 3914, "msg_type": "MouseEvent", "y": 52, "x": 31, "type": "mousemove", "message_id": 191}
{"sender": 3914, "msg_type": "MouseEvent", "y": 52, "x": 31, "type": "mousemove", "message_id": 192}
{"sender": 3914, "msg_type": "MouseEvent", "y": 52, "x": 29, "type": "mouseover", "message_id": 193}
{"sender": 3914, "msg_type": "MouseEvent", "y": 52, "x": 29, "type": "mouseover", "message_id": 194}
{"sender": 3914, "msg_type": "MouseEvent", "y": 52, "x": 29, "type": "mousemove", "message_id": 195}
{"sender": 3914, "msg_type": "MouseEvent", "y": 52, "x": 28, "type": "mouseover", "message_id": 196}
{"sender": 3914, "msg_type": "MouseEvent", "y": 52, "x": 28, "type": "mouseover", "message_id": 197}
{"sender": 3914, "msg_type": "MouseEvent", "y": 52, "x": 28, "type": "mousemove", "message_id": 198}
{"sender": 3914, "msg_type": "MouseEvent", "y": 53, "x": 27, "type": "mousemove", "message_id": 199}
{"sender": 3914, "msg_type": "MouseEvent", "y": 53, "x": 26, "type": "mousemove", "message_id": 200}
{"sender": 3914, "msg_type": "MouseEvent", "y": 53, "x": 25, "type": "mousemove", "message_id": 201}
{"sender": 3914, "msg_type": "MouseEvent", "y": 53, "x": 25, "type": "mousemove", "message_id": 202}
{"sender": 3914, "msg_type": "MouseEvent", "y": 53, "x": 25, "type": "mousemove", "message_id": 203}
{"sender": 3914, "msg_type": "MouseEvent", "y": 53, "x": 25, "type": "mousemove", "message_id": 204}
{"sender": 3914, "msg_type": "MouseEvent", "y": 53, "x": 26, "type": "mousemove", "message_id": 205}
{"sender": 3914, "msg_type": "MouseEvent", "y": 54, "x": 28, "type": "mouseover", "message_id": 206}
{"sender": 3914, "msg_type": "MouseEvent", "y": 54, "x": 28, "type": "mouseover", "message_id": 207}
{"sender": 3914, "msg_type": "MouseEvent", "y": 54, "x": 28, "type": "mousemove", "message_id": 208}
{"sender": 3914, "msg_type": "MouseEvent", "y": 54, "x": 32, "type": "mousemove", "message_id": 209}
{"sender": 3914, "msg_type": "MouseEvent", "y": 54, "x": 39, "type": "mousemove", "message_id": 210}
{"sender": 3914, "msg_type": "MouseEvent", "y": 54, "x": 49, "type": "mousemove", "message_id": 211}
{"sender": 3914, "msg_type": "MouseEvent", "y": 55, "x": 65, "type": "mouseover", "message_id": 212}
{"sender": 3914, "msg_type": "MouseEvent", "y": 55, "x": 65, "type": "mouseover", "message_id": 213}
{"sender": 3914, "msg_type": "MouseEvent", "y": 55, "x": 65, "type": "mousemove", "message_id": 214}
{"sender": 3914, "msg_type": "MouseEvent", "y": 56, "x": 83, "type": "mouseover", "message_id": 215}
{"sender": 3914, "msg_type": "MouseEvent", "y": 56, "x": 83, "type": "mouseover", "message_id": 216}
{"sender": 3914, "msg_type": "MouseEvent", "y": 56, "x": 83, "type": "mousemove", "message_id": 217}
{"sender": 3914, "msg_type": "MouseEvent", "y": 58, "x": 106, "type": "mousemove", "message_id": 218}
{"sender": 3914, "msg_type": "MouseEvent", "y": 59, "x": 131, "type": "mousemove", "message_id": 219}
{"sender": 3914, "msg_type": "MouseEvent", "y": 62, "x": 160, "type": "mouseover", "message_id": 220}
{"sender": 3914, "msg_type": "MouseEvent", "y": 62, "x": 160, "type": "mouseover", "message_id": 221}
{"sender": 3914, "msg_type": "MouseEvent", "y": 62, "x": 160, "type": "mousemove", "message_id": 222}
{"sender": 3914, "msg_type": "MouseEvent", "y": 63, "x": 191, "type": "mousemove", "message_id": 223}
{"sender": 3914, "msg_type": "MouseEvent", "y": 66, "x": 224, "type": "mousemove", "message_id": 224}
{"sender": 3914, "msg_type": "MouseEvent", "y": 69, "x": 257, "type": "mousemove", "message_id": 225}
{"sender": 3914, "msg_type": "MouseEvent", "y": 70, "x": 292, "type": "mousemove", "message_id": 226}
{"sender": 3914, "msg_type": "MouseEvent", "y": 72, "x": 326, "type": "mousemove", "message_id": 227}
{"sender": 3914, "msg_type": "MouseEvent", "y": 74, "x": 357, "type": "mousemove", "message_id": 228}
{"sender": 3914, "msg_type": "MouseEvent", "y": 76, "x": 386, "type": "mousemove", "message_id": 229}
{"sender": 3914, "msg_type": "MouseEvent", "y": 77, "x": 413, "type": "mousemove", "message_id": 230}
{"sender": 3914, "msg_type": "MouseEvent", "y": 78, "x": 438, "type": "mouseover", "message_id": 231}
{"sender": 3914, "msg_type": "MouseEvent", "y": 78, "x": 438, "type": "mouseover", "message_id": 232}
{"sender": 3914, "msg_type": "MouseEvent", "y": 78, "x": 438, "type": "mousemove", "message_id": 233}
{"sender": 3914, "msg_type": "MouseEvent", "y": 79, "x": 455, "type": "mouseover", "message_id": 234}
{"sender": 3914, "msg_type": "MouseEvent", "y": 79, "x": 455, "type": "mouseover", "message_id": 235}
{"sender": 3914, "msg_type": "MouseEvent", "y": 79, "x": 455, "type": "mousemove", "message_id": 236}
{"sender": 3914, "msg_type": "MouseEvent", "y": 81, "x": 474, "type": "mouseover", "message_id": 237}
{"sender": 3914, "msg_type": "MouseEvent", "y": 81, "x": 474, "type": "mouseover", "message_id": 238}
{"sender": 3914, "msg_type": "MouseEvent", "y": 81, "x": 474, "type": "mousemove", "message_id": 239}
{"sender": 3914, "msg_type": "MouseEvent", "y": 82, "x": 493, "type": "mousemove", "message_id": 240}
{"sender": 3914, "msg_type": "MouseEvent", "y": 83, "x": 506, "type": "mouseover", "message_id": 241}
{"sender": 3914, "msg_type": "MouseEvent", "y": 83, "x": 506, "type": "mouseover", "message_id": 242}
{"sender": 3914, "msg_type": "MouseEvent", "y": 83, "x": 506, "type": "mousemove", "message_id": 243}
{"sender": 3914, "msg_type": "MouseEvent", "y": 83, "x": 515, "type": "mousemove", "message_id": 244}
{"sender": 3914, "msg_type": "MouseEvent", "y": 84, "x": 519, "type": "mousemove", "message_id": 245}
{"sender": 3914, "msg_type": "MouseEvent", "y": 84, "x": 521, "type": "mousemove", "message_id": 246}
{"sender": 3914, "msg_type": "MouseEvent", "y": 84, "x": 523, "type": "mousemove", "message_id": 247}
{"sender": 3914, "msg_type": "MouseEvent", "y": 84, "x": 525, "type": "mousemove", "message_id": 248}
{"sender": 3914, "msg_type": "MouseEvent", "y": 84, "x": 526, "type": "mouseover", "message_id": 249}
{"sender": 3914, "msg_type": "MouseEvent", "y": 84, "x": 526, "type": "mouseover", "message_id": 250}
{"sender": 3914, "msg_type": "MouseEvent", "y": 84, "x": 526, "type": "mousemove", "message_id": 251}
{"sender": 3914, "msg_type": "MouseEvent", "y": 84, "x": 527, "type": "mousemove", "message_id": 252}
{"sender": 3914, "msg_type": "MouseEvent", "y": 84, "x": 527, "type": "mousemove", "message_id": 253}
{"sender": 3914, "msg_type": "MouseEvent", "y": 84, "x": 527, "type": "mousemove", "message_id": 255}
{"sender": 3914, "msg_type": "MouseEvent", "y": 84, "x": 527, "type": "mousemove", "message_id": 254}
{"sender": 3914, "msg_type": "MouseEvent", "y": 84, "x": 528, "type": "mousemove", "message_id": 256}
{"sender": 3914, "msg_type": "MouseEvent", "y": 84, "x": 530, "type": "mouseover", "message_id": 257}
{"sender": 3914, "msg_type": "MouseEvent", "y": 84, "x": 530, "type": "mouseover", "message_id": 258}
{"sender": 3914, "msg_type": "MouseEvent", "y": 84, "x": 530, "type": "mousemove", "message_id": 259}
{"sender": 3914, "msg_type": "MouseEvent", "y": 84, "x": 533, "type": "mousemove", "message_id": 260}
{"sender": 3914, "msg_type": "MouseEvent", "y": 84, "x": 537, "type": "mousemove", "message_id": 261}
{"sender": 3914, "msg_type": "MouseEvent", "y": 85, "x": 544, "type": "mousemove", "message_id": 262}
{"sender": 3914, "msg_type": "MouseEvent", "y": 85, "x": 553, "type": "mousemove", "message_id": 263}
{"sender": 3914, "msg_type": "MouseEvent", "y": 86, "x": 566, "type": "mousemove", "message_id": 264}
{"sender": 3914, "msg_type": "MouseEvent", "y": 87, "x": 581, "type": "mousemove", "message_id": 265}
{"sender": 3914, "msg_type": "MouseEvent", "y": 87, "x": 596, "type": "mousemove", "message_id": 266}
{"sender": 3914, "msg_type": "MouseEvent", "y": 87, "x": 607, "type": "mousemove", "message_id": 267}
{"sender": 3914, "msg_type": "MouseEvent", "y": 87, "x": 614, "type": "mousemove", "message_id": 268}
{"sender": 3914, "msg_type": "MouseEvent", "y": 87, "x": 620, "type": "mousemove", "message_id": 269}
{"sender": 3914, "msg_type": "MouseEvent", "y": 87, "x": 624, "type": "mousemove", "message_id": 270}
{"sender": 3914, "msg_type": "MouseEvent", "y": 87, "x": 627, "type": "mousemove", "message_id": 271}
{"sender": 3914, "msg_type": "MouseEvent", "y": 87, "x": 629, "type": "mousemove", "message_id": 272}
{"sender": 3914, "msg_type": "MouseEvent", "y": 87, "x": 631, "type": "mousemove", "message_id": 273}
{"sender": 3914, "msg_type": "MouseEvent", "y": 87, "x": 631, "type": "mouseover", "message_id": 274}
{"sender": 3914, "msg_type": "MouseEvent", "y": 87, "x": 631, "type": "mouseover", "message_id": 275}
{"sender": 3914, "msg_type": "MouseEvent", "y": 87, "x": 631, "type": "mousemove", "message_id": 276}
{"sender": 3914, "msg_type": "MouseEvent", "y": 87, "x": 632, "type": "mousemove", "message_id": 277}
{"sender": 3914, "msg_type": "MouseEvent", "y": 86, "x": 632, "type": "mousemove", "message_id": 279}
{"sender": 3914, "msg_type": "MouseEvent", "y": 86, "x": 633, "type": "mousemove", "message_id": 280}
{"sender": 3914, "msg_type": "MouseEvent", "y": 86, "x": 632, "type": "mousemove", "message_id": 278}
{"sender": 3914, "msg_type": "MouseEvent", "y": 86, "x": 634, "type": "mousemove", "message_id": 281}
{"sender": 3914, "msg_type": "MouseEvent", "y": 85, "x": 635, "type": "mousemove", "message_id": 282}
{"sender": 3914, "msg_type": "MouseEvent", "y": 85, "x": 636, "type": "mousemove", "message_id": 283}
{"sender": 3914, "msg_type": "MouseEvent", "y": 85, "x": 636, "type": "mousemove", "message_id": 284}
{"sender": 3914, "msg_type": "MouseEvent", "y": 85, "x": 637, "type": "mousemove", "message_id": 285}
{"sender": 3914, "msg_type": "MouseEvent", "y": 85, "x": 637, "type": "mousemove", "message_id": 286}
{"sender": 3914, "msg_type": "MouseEvent", "y": 84, "x": 637, "type": "mousemove", "message_id": 287}
{"sender": 3914, "msg_type": "MouseEvent", "y": 85, "x": 637, "type": "mousemove", "message_id": 288}
{"sender": 3914, "msg_type": "MouseEvent", "y": 85, "x": 637, "type": "mousemove", "message_id": 289}
{"sender": 3914, "msg_type": "MouseEvent", "y": 86, "x": 637, "type": "mousemove", "message_id": 290}
{"sender": 3914, "msg_type": "MouseEvent", "y": 89, "x": 638, "type": "mousemove", "message_id": 291}
{"sender": 3914, "msg_type": "MouseEvent", "y": 92, "x": 638, "type": "mousemove", "message_id": 292}
{"sender": 3914, "msg_type": "MouseEvent", "y": 98, "x": 638, "type": "mousemove", "message_id": 293}
{"sender": 3914, "msg_type": "MouseEvent", "y": 107, "x": 640, "type": "mouseover", "message_id": 294}
{"sender": 3914, "msg_type": "MouseEvent", "y": 107, "x": 640, "type": "mouseover", "message_id": 295}
{"sender": 3914, "msg_type": "MouseEvent", "y": 107, "x": 640, "type": "mousemove", "message_id": 296}
{"sender": 3914, "msg_type": "MouseEvent", "y": 121, "x": 643, "type": "mousemove", "message_id": 297}
{"sender": 3914, "msg_type": "MouseEvent", "y": 139, "x": 648, "type": "mousemove", "message_id": 298}
{"sender": 3914, "msg_type": "MouseEvent", "y": 159, "x": 653, "type": "mousemove", "message_id": 299}
{"sender": 3914, "msg_type": "MouseEvent", "y": 181, "x": 655, "type": "mousemove", "message_id": 300}
{"sender": 3914, "msg_type": "MouseEvent", "y": 205, "x": 655, "type": "mousemove", "message_id": 301}
{"sender": 3914, "msg_type": "MouseEvent", "y": 231, "x": 655, "type": "mousemove", "message_id": 302}
{"sender": 3914, "msg_type": "MouseEvent", "y": 256, "x": 656, "type": "mousemove", "message_id": 303}
{"sender": 3914, "msg_type": "MouseEvent", "y": 284, "x": 657, "type": "mousemove", "message_id": 304}
{"sender": 3914, "msg_type": "MouseEvent", "y": 316, "x": 658, "type": "mousemove", "message_id": 305}
{"sender": 3914, "msg_type": "MouseEvent", "y": 352, "x": 658, "type": "mousemove", "message_id": 306}
{"sender": 3914, "msg_type": "MouseEvent", "y": 391, "x": 657, "type": "mousemove", "message_id": 307}
{"sender": 3914, "msg_type": "MouseEvent", "y": 430, "x": 656, "type": "mousemove", "message_id": 308}
{"sender": 3914, "msg_type": "MouseEvent", "y": 469, "x": 655, "type": "mousemove", "message_id": 309}
{"sender": 3914, "msg_type": "MouseEvent", "y": 507, "x": 652, "type": "mousemove", "message_id": 310}
{"sender": 3914, "msg_type": "MouseEvent", "y": 543, "x": 649, "type": "mousemove", "message_id": 311}
{"sender": 3914, "msg_type": "MouseEvent", "y": 573, "x": 644, "type": "mousemove", "message_id": 312}
{"sender": 3914, "msg_type": "MouseEvent", "y": 599, "x": 641, "type": "mousemove", "message_id": 313}
{"sender": 3914, "msg_type": "MouseEvent", "y": 623, "x": 639, "type": "mousemove", "message_id": 314}
{"sender": 3914, "msg_type": "MouseEvent", "y": 644, "x": 639, "type": "mousemove", "message_id": 315}
{"sender": 3914, "msg_type": "MouseEvent", "y": 663, "x": 640, "type": "mousemove", "message_id": 316}
{"sender": 3914, "msg_type": "MouseEvent", "y": 679, "x": 641, "type": "mousemove", "message_id": 317}
{"sender": 3914, "msg_type": "MouseEvent", "y": 693, "x": 642, "type": "mouseover", "message_id": 318}
{"sender": 3914, "msg_type": "MouseEvent", "y": 693, "x": 642, "type": "mouseover", "message_id": 319}
{"sender": 3914, "msg_type": "MouseEvent", "y": 693, "x": 642, "type": "mousemove", "message_id": 320}
{"sender": 3914, "msg_type": "MouseEvent", "y": 703, "x": 643, "type": "mousemove", "message_id": 321}
{"sender": 3914, "msg_type": "MouseEvent", "y": 710, "x": 644, "type": "mousemove", "message_id": 322}
{"sender": 3914, "msg_type": "MouseEvent", "y": 713, "x": 644, "type": "mousemove", "message_id": 323}
{"sender": 3914, "msg_type": "MouseEvent", "y": 714, "x": 644, "type": "mousemove", "message_id": 324}
{"sender": 3914, "msg_type": "MouseEvent", "y": 715, "x": 644, "type": "mousemove", "message_id": 325}
{"sender": 3914, "msg_type": "MouseEvent", "y": 715, "x": 644, "type": "mousemove", "message_id": 326}
{"sender": 3914, "msg_type": "MouseEvent", "y": 715, "x": 644, "type": "mousemove", "message_id": 327}
{"sender": 3914, "msg_type": "MouseEvent", "y": 715, "x": 644, "type": "mousemove", "message_id": 328}
{"sender": 3914, "msg_type": "MouseEvent", "y": 715, "x": 643, "type": "mousemove", "message_id": 329}
{"sender": 3914, "msg_type": "MouseEvent", "y": 716, "x": 643, "type": "mousemove", "message_id": 330}
{"sender": 3914, "msg_type": "MouseEvent", "y": 716, "x": 643, "type": "mousemove", "message_id": 331}
{"sender": 3914, "msg_type": "MouseEvent", "y": 717, "x": 643, "type": "mousemove", "message_id": 332}
{"sender": 3914, "msg_type": "MouseEvent", "y": 718, "x": 643, "type": "mousemove", "message_id": 333}
{"sender": 3914, "msg_type": "MouseEvent", "y": 718, "x": 643, "type": "mousemove", "message_id": 334}
{"sender": 3914, "msg_type": "MouseEvent", "y": 718, "x": 642, "type": "mousemove", "message_id": 335}
{"sender": 3914, "msg_type": "MouseEvent", "y": 718, "x": 642, "type": "mousemove", "message_id": 336}
{"sender": 3914, "msg_type": "MouseEvent", "y": 718, "x": 640, "type": "mouseover", "message_id": 338}
{"sender": 3914, "msg_type": "MouseEvent", "y": 718, "x": 640, "type": "mouseover", "message_id": 337}
{"sender": 3914, "msg_type": "MouseEvent", "y": 718, "x": 640, "type": "mousemove", "message_id": 339}
{"sender": 3914, "msg_type": "MouseEvent", "y": 718, "x": 637, "type": "mousemove", "message_id": 340}
{"sender": 3914, "msg_type": "MouseEvent", "y": 718, "x": 632, "type": "mousemove", "message_id": 341}
{"sender": 3914, "msg_type": "MouseEvent", "y": 718, "x": 623, "type": "mousemove", "message_id": 342}
{"sender": 3914, "msg_type": "MouseEvent", "y": 718, "x": 611, "type": "mousemove", "message_id": 343}
{"sender": 3914, "msg_type": "MouseEvent", "y": 717, "x": 594, "type": "mouseover", "message_id": 344}
{"sender": 3914, "msg_type": "MouseEvent", "y": 717, "x": 594, "type": "mouseover", "message_id": 345}
{"sender": 3914, "msg_type": "MouseEvent", "y": 717, "x": 594, "type": "mousemove", "message_id": 346}
{"sender": 3914, "msg_type": "MouseEvent", "y": 717, "x": 574, "type": "mousemove", "message_id": 347}
{"sender": 3914, "msg_type": "MouseEvent", "y": 717, "x": 553, "type": "mousemove", "message_id": 348}
{"sender": 3914, "msg_type": "MouseEvent", "y": 717, "x": 528, "type": "mousemove", "message_id": 349}
{"sender": 3914, "msg_type": "MouseEvent", "y": 717, "x": 495, "type": "mousemove", "message_id": 350}
{"sender": 3914, "msg_type": "MouseEvent", "y": 716, "x": 456, "type": "mousemove", "message_id": 351}
{"sender": 3914, "msg_type": "MouseEvent", "y": 714, "x": 394, "type": "mousemove", "message_id": 352}
{"sender": 3914, "msg_type": "MouseEvent", "y": 712, "x": 338, "type": "mousemove", "message_id": 353}
{"sender": 3914, "msg_type": "MouseEvent", "y": 710, "x": 301, "type": "mousemove", "message_id": 354}
{"sender": 3914, "msg_type": "MouseEvent", "y": 708, "x": 251, "type": "mousemove", "message_id": 355}
{"sender": 3914, "msg_type": "MouseEvent", "y": 708, "x": 210, "type": "mousemove", "message_id": 356}
{"sender": 3914, "msg_type": "MouseEvent", "y": 709, "x": 179, "type": "mousemove", "message_id": 357}
{"sender": 3914, "msg_type": "MouseEvent", "y": 710, "x": 162, "type": "mousemove", "message_id": 358}
{"sender": 3914, "msg_type": "MouseEvent", "y": 712, "x": 141, "type": "mousemove", "message_id": 359}
{"sender": 3914, "msg_type": "MouseEvent", "y": 712, "x": 124, "type": "mousemove", "message_id": 360}
{"sender": 3914, "msg_type": "MouseEvent", "y": 713, "x": 110, "type": "mouseover", "message_id": 361}
{"sender": 3914, "msg_type": "MouseEvent", "y": 713, "x": 110, "type": "mouseover", "message_id": 362}
{"sender": 3914, "msg_type": "MouseEvent", "y": 713, "x": 110, "type": "mousemove", "message_id": 363}
{"sender": 3914, "msg_type": "MouseEvent", "y": 714, "x": 100, "type": "mousemove", "message_id": 364}
{"sender": 3914, "msg_type": "MouseEvent", "y": 714, "x": 95, "type": "mousemove", "message_id": 365}
{"sender": 3914, "msg_type": "MouseEvent", "y": 715, "x": 91, "type": "mousemove", "message_id": 366}
{"sender": 3914, "msg_type": "MouseEvent", "y": 716, "x": 90, "type": "mouseover", "message_id": 368}
{"sender": 3914, "msg_type": "MouseEvent", "y": 716, "x": 90, "type": "mouseover", "message_id": 367}
{"sender": 3914, "msg_type": "MouseEvent", "y": 716, "x": 90, "type": "mousemove", "message_id": 369}
{"sender": 3914, "msg_type": "MouseEvent", "y": 716, "x": 89, "type": "mousemove", "message_id": 370}
{"sender": 3914, "msg_type": "MouseEvent", "y": 716, "x": 89, "type": "mousemove", "message_id": 371}
{"sender": 3914, "msg_type": "MouseEvent", "y": 717, "x": 88, "type": "mousemove", "message_id": 372}
{"sender": 3914, "msg_type": "MouseEvent", "y": 717, "x": 87, "type": "mousemove", "message_id": 373}
{"sender": 3914, "msg_type": "MouseEvent", "y": 717, "x": 86, "type": "mousemove", "message_id": 374}
{"sender": 3914, "msg_type": "MouseEvent", "y": 717, "x": 84, "type": "mouseover", "message_id": 375}
{"sender": 3914, "msg_type": "MouseEvent", "y": 717, "x": 84, "type": "mouseover", "message_id": 376}
{"sender": 3914, "msg_type": "MouseEvent", "y": 717, "x": 84, "type": "mousemove", "message_id": 377}
{"sender": 3914, "msg_type": "MouseEvent", "y": 717, "x": 83, "type": "mouseover", "message_id": 378}
{"sender": 3914, "msg_type": "MouseEvent", "y": 717, "x": 83, "type": "mouseover", "message_id": 379}
{"sender": 3914, "msg_type": "MouseEvent", "y": 717, "x": 83, "type": "mousemove", "message_id": 380}
{"sender": 3914, "msg_type": "MouseEvent", "y": 717, "x": 81, "type": "mouseover", "message_id": 381}
{"sender": 3914, "msg_type": "MouseEvent", "y": 717, "x": 81, "type": "mouseover", "message_id": 382}
{"sender": 3914, "msg_type": "MouseEvent", "y": 717, "x": 81, "type": "mousemove", "message_id": 383}
{"sender": 3914, "msg_type": "MouseEvent", "y": 717, "x": 80, "type": "mouseover", "message_id": 384}
{"sender": 3914, "msg_type": "MouseEvent", "y": 717, "x": 80, "type": "mouseover", "message_id": 385}
{"sender": 3914, "msg_type": "MouseEvent", "y": 717, "x": 80, "type": "mousemove", "message_id": 386}
{"sender": 3914, "msg_type": "MouseEvent", "y": 717, "x": 80, "type": "mousemove", "message_id": 387}
{"sender": 3914, "msg_type": "MouseEvent", "y": 717, "x": 80, "type": "mousemove", "message_id": 388}
{"sender": 3914, "msg_type": "MouseEvent", "y": 717, "x": 80, "type": "mousemove", "message_id": 389}
{"sender": 3914, "msg_type": "MouseEvent", "y": 717, "x": 80, "type": "mousemove", "message_id": 390}
{"sender": 3914, "msg_type": "MouseEvent", "y": 717, "x": 80, "type": "mousemove", "message_id": 391}
{"sender": 3914, "msg_type": "MouseEvent", "y": 717, "x": 80, "type": "mousemove", "message_id": 392}
{"sender": 3914, "msg_type": "MouseEvent", "y": 717, "x": 80, "type": "mousemove", "message_id": 393}
{"sender": 3914, "msg_type": "MouseEvent", "y": 717, "x": 80, "type": "mousemove", "message_id": 394}
{"sender": 3914, "msg_type": "MouseEvent", "y": 716, "x": 80, "type": "mousemove", "message_id": 395}
{"sender": 3914, "msg_type": "MouseEvent", "y": 716, "x": 79, "type": "mousemove", "message_id": 396}
{"sender": 3914, "msg_type": "MouseEvent", "y": 715, "x": 79, "type": "mousemove", "message_id": 397}
{"sender": 3914, "msg_type": "MouseEvent", "y": 714, "x": 78, "type": "mousemove", "message_id": 398}
{"sender": 3914, "msg_type": "MouseEvent", "y": 712, "x": 78, "type": "mousemove", "message_id": 399}
{"sender": 3914, "msg_type": "MouseEvent", "y": 709, "x": 77, "type": "mousemove", "message_id": 400}
{"sender": 3914, "msg_type": "MouseEvent", "y": 704, "x": 77, "type": "mousemove", "message_id": 401}
{"sender": 3914, "msg_type": "MouseEvent", "y": 697, "x": 76, "type": "mousemove", "message_id": 402}
{"sender": 3914, "msg_type": "MouseEvent", "y": 687, "x": 75, "type": "mousemove", "message_id": 403}
{"sender": 3914, "msg_type": "MouseEvent", "y": 660, "x": 76, "type": "mousemove", "message_id": 405}
{"sender": 3914, "msg_type": "MouseEvent", "y": 675, "x": 75, "type": "mousemove", "message_id": 404}
{"sender": 3914, "msg_type": "MouseEvent", "y": 644, "x": 79, "type": "mouseover", "message_id": 406}
{"sender": 3914, "msg_type": "MouseEvent", "y": 644, "x": 79, "type": "mouseover", "message_id": 407}
{"sender": 3914, "msg_type": "MouseEvent", "y": 644, "x": 79, "type": "mousemove", "message_id": 408}
{"sender": 3914, "msg_type": "MouseEvent", "y": 623, "x": 83, "type": "mousemove", "message_id": 409}
{"sender": 3914, "msg_type": "MouseEvent", "y": 599, "x": 88, "type": "mousemove", "message_id": 410}
{"sender": 3914, "msg_type": "MouseEvent", "y": 570, "x": 94, "type": "mousemove", "message_id": 411}
{"sender": 3914, "msg_type": "MouseEvent", "y": 538, "x": 101, "type": "mousemove", "message_id": 412}
{"sender": 3914, "msg_type": "MouseEvent", "y": 503, "x": 108, "type": "mousemove", "message_id": 413}
{"sender": 3914, "msg_type": "MouseEvent", "y": 467, "x": 114, "type": "mousemove", "message_id": 414}
{"sender": 3914, "msg_type": "MouseEvent", "y": 432, "x": 121, "type": "mousemove", "message_id": 415}
{"sender": 3914, "msg_type": "MouseEvent", "y": 400, "x": 126, "type": "mousemove", "message_id": 416}
{"sender": 3914, "msg_type": "MouseEvent", "y": 367, "x": 133, "type": "mousemove", "message_id": 417}
{"sender": 3914, "msg_type": "MouseEvent", "y": 336, "x": 139, "type": "mousemove", "message_id": 418}
{"sender": 3914, "msg_type": "MouseEvent", "y": 305, "x": 145, "type": "mousemove", "message_id": 419}
{"sender": 3914, "msg_type": "MouseEvent", "y": 276, "x": 150, "type": "mousemove", "message_id": 420}
{"sender": 3914, "msg_type": "MouseEvent", "y": 251, "x": 154, "type": "mousemove", "message_id": 421}
{"sender": 3914, "msg_type": "MouseEvent", "y": 228, "x": 156, "type": "mouseover", "message_id": 422}
{"sender": 3914, "msg_type": "MouseEvent", "y": 228, "x": 156, "type": "mouseover", "message_id": 423}
{"sender": 3914, "msg_type": "MouseEvent", "y": 228, "x": 156, "type": "mousemove", "message_id": 424}
{"sender": 3914, "msg_type": "MouseEvent", "y": 208, "x": 157, "type": "mouseover", "message_id": 425}
{"sender": 3914, "msg_type": "MouseEvent", "y": 208, "x": 157, "type": "mouseover", "message_id": 426}
{"sender": 3914, "msg_type": "MouseEvent", "y": 208, "x": 157, "type": "mousemove", "message_id": 427}
{"sender": 3914, "msg_type": "MouseEvent", "y": 191, "x": 156, "type": "mouseover", "message_id": 428}
{"sender": 3914, "msg_type": "MouseEvent", "y": 191, "x": 156, "type": "mouseover", "message_id": 429}
{"sender": 3914, "msg_type": "MouseEvent", "y": 191, "x": 156, "type": "mousemove", "message_id": 430}
{"sender": 3914, "msg_type": "MouseEvent", "y": 176, "x": 155, "type": "mouseover", "message_id": 431}
{"sender": 3914, "msg_type": "MouseEvent", "y": 176, "x": 155, "type": "mouseover", "message_id": 432}
{"sender": 3914, "msg_type": "MouseEvent", "y": 176, "x": 155, "type": "mousemove", "message_id": 433}
{"sender": 3914, "msg_type": "MouseEvent", "y": 163, "x": 153, "type": "mouseover", "message_id": 434}
{"sender": 3914, "msg_type": "MouseEvent", "y": 152, "x": 150, "type": "mousemove", "message_id": 437}
{"sender": 3914, "msg_type": "MouseEvent", "y": 163, "x": 153, "type": "mouseover", "message_id": 435}
{"sender": 3914, "msg_type": "MouseEvent", "y": 163, "x": 153, "type": "mousemove", "message_id": 436}
{"sender": 3914, "msg_type": "MouseEvent", "y": 141, "x": 146, "type": "mousemove", "message_id": 438}
{"sender": 3914, "msg_type": "MouseEvent", "y": 132, "x": 141, "type": "mousemove", "message_id": 439}
{"sender": 3914, "msg_type": "MouseEvent", "y": 125, "x": 137, "type": "mousemove", "message_id": 440}
{"sender": 3914, "msg_type": "MouseEvent", "y": 115, "x": 131, "type": "mousemove", "message_id": 442}
{"sender": 3914, "msg_type": "MouseEvent", "y": 119, "x": 134, "type": "mousemove", "message_id": 441}
{"sender": 3914, "msg_type": "MouseEvent", "y": 114, "x": 130, "type": "mouseover", "message_id": 443}
{"sender": 3914, "msg_type": "MouseEvent", "y": 114, "x": 130, "type": "mouseover", "message_id": 444}
{"sender": 3914, "msg_type": "MouseEvent", "y": 114, "x": 130, "type": "mousemove", "message_id": 445}
{"sender": 3914, "msg_type": "MouseEvent", "y": 114, "x": 130, "type": "mousemove", "message_id": 446}
{"sender": 3914, "msg_type": "MouseEvent", "y": 114, "x": 130, "type": "mousemove", "message_id": 447}
{"sender": 3914, "msg_type": "MouseEvent", "y": 114, "x": 129, "type": "mousemove", "message_id": 448}
{"sender": 3914, "msg_type": "MouseEvent", "y": 113, "x": 129, "type": "mousemove", "message_id": 449}
{"sender": 3914, "msg_type": "MouseEvent", "y": 113, "x": 128, "type": "mousemove", "message_id": 450}
{"sender": 3914, "msg_type": "MouseEvent", "y": 113, "x": 128, "type": "mousemove", "message_id": 451}
{"sender": 3914, "msg_type": "MouseEvent", "y": 113, "x": 128, "type": "mousemove", "message_id": 452}
{"sender": 3914, "msg_type": "MouseEvent", "y": 113, "x": 127, "type": "mousemove", "message_id": 453}
{"sender": 3914, "msg_type": "MouseEvent", "y": 113, "x": 128, "type": "mousemove", "message_id": 454}
{"sender": 3914, "msg_type": "MouseEvent", "y": 114, "x": 130, "type": "mouseover", "message_id": 455}
{"sender": 3914, "msg_type": "MouseEvent", "y": 114, "x": 130, "type": "mouseover", "message_id": 456}
{"sender": 3914, "msg_type": "MouseEvent", "y": 114, "x": 130, "type": "mousemove", "message_id": 457}
{"sender": 3914, "msg_type": "MouseEvent", "y": 115, "x": 136, "type": "mousemove", "message_id": 458}
{"sender": 3914, "msg_type": "MouseEvent", "y": 116, "x": 144, "type": "mousemove", "message_id": 459}
{"sender": 3914, "msg_type": "MouseEvent", "y": 118, "x": 155, "type": "mouseover", "message_id": 460}
{"sender": 3914, "msg_type": "MouseEvent", "y": 118, "x": 155, "type": "mouseover", "message_id": 461}
{"sender": 3914, "msg_type": "MouseEvent", "y": 118, "x": 155, "type": "mousemove", "message_id": 462}
{"sender": 3914, "msg_type": "MouseEvent", "y": 121, "x": 169, "type": "mousemove", "message_id": 463}
{"sender": 3914, "msg_type": "MouseEvent", "y": 124, "x": 184, "type": "mousemove", "message_id": 464}
{"sender": 3914, "msg_type": "MouseEvent", "y": 127, "x": 198, "type": "mousemove", "message_id": 465}
{"sender": 3914, "msg_type": "MouseEvent", "y": 131, "x": 216, "type": "mousemove", "message_id": 466}
{"sender": 3914, "msg_type": "MouseEvent", "y": 135, "x": 234, "type": "mousemove", "message_id": 467}
{"sender": 3914, "msg_type": "MouseEvent", "y": 140, "x": 249, "type": "mousemove", "message_id": 468}
{"sender": 3914, "msg_type": "MouseEvent", "y": 144, "x": 261, "type": "mousemove", "message_id": 469}
{"sender": 3914, "msg_type": "MouseEvent", "y": 148, "x": 270, "type": "mousemove", "message_id": 470}
{"sender": 3914, "msg_type": "MouseEvent", "y": 151, "x": 275, "type": "mousemove", "message_id": 471}
{"sender": 3914, "msg_type": "MouseEvent", "y": 153, "x": 277, "type": "mousemove", "message_id": 472}
{"sender": 3914, "msg_type": "MouseEvent", "y": 155, "x": 278, "type": "mouseover", "message_id": 473}
{"sender": 3914, "msg_type": "MouseEvent", "y": 155, "x": 278, "type": "mouseover", "message_id": 474}
{"sender": 3914, "msg_type": "MouseEvent", "y": 155, "x": 278, "type": "mousemove", "message_id": 475}
{"sender": 3914, "msg_type": "MouseEvent", "y": 156, "x": 278, "type": "mousemove", "message_id": 476}
{"sender": 3914, "msg_type": "MouseEvent", "y": 159, "x": 278, "type": "mousemove", "message_id": 477}
{"sender": 3914, "msg_type": "MouseEvent", "y": 161, "x": 278, "type": "mousemove", "message_id": 478}
{"sender": 3914, "msg_type": "MouseEvent", "y": 164, "x": 278, "type": "mousemove", "message_id": 479}
{"sender": 3914, "msg_type": "MouseEvent", "y": 167, "x": 279, "type": "mousemove", "message_id": 480}
{"sender": 3914, "msg_type": "MouseEvent", "y": 170, "x": 280, "type": "mousemove", "message_id": 481}
{"sender": 3914, "msg_type": "MouseEvent", "y": 173, "x": 280, "type": "mousemove", "message_id": 482}
{"sender": 3914, "msg_type": "MouseEvent", "y": 174, "x": 280, "type": "mousemove", "message_id": 483}
{"sender": 3914, "msg_type": "MouseEvent", "y": 176, "x": 280, "type": "mousemove", "message_id": 484}
{"sender": 3914, "msg_type": "MouseEvent", "y": 177, "x": 280, "type": "mousemove", "message_id": 485}
{"sender": 3914, "msg_type": "MouseEvent", "y": 178, "x": 281, "type": "mousemove", "message_id": 486}
{"sender": 3914, "msg_type": "MouseEvent", "y": 180, "x": 281, "type": "mousemove", "message_id": 487}
{"sender": 3914, "msg_type": "MouseEvent", "y": 182, "x": 282, "type": "mousemove", "message_id": 488}
{"sender": 3914, "msg_type": "MouseEvent", "y": 183, "x": 282, "type": "mousemove", "message_id": 489}
{"sender": 3914, "msg_type": "MouseEvent", "y": 184, "x": 282, "type": "mousemove", "message_id": 490}
{"sender": 3914, "msg_type": "MouseEvent", "y": 185, "x": 282, "type": "mousemove", "message_id": 491}
{"sender": 3914, "msg_type": "MouseEvent", "y": 185, "x": 282, "type": "mousemove", "message_id": 492}
{"sender": 3914, "msg_type": "MouseEvent", "y": 185, "x": 282, "type": "mousemove", "message_id": 493}
{"sender": 3914, "msg_type": "MouseEvent", "y": 186, "x": 282, "type": "mousemove", "message_id": 494}
{"sender": 3914, "msg_type": "MouseEvent", "y": 186, "x": 283, "type": "mousemove", "message_id": 495}
{"sender": 3914, "msg_type": "MouseEvent", "y": 186, "x": 283, "type": "mousemove", "message_id": 496}
{"sender": 3914, "msg_type": "MouseEvent", "y": 187, "x": 283, "type": "mousemove", "message_id": 497}
{"sender": 3914, "msg_type": "MouseEvent", "y": 188, "x": 283, "type": "mousemove", "message_id": 498}
{"sender": 3914, "msg_type": "MouseEvent", "y": 188, "x": 283, "type": "mousemove", "message_id": 499}
{"sender": 3914, "msg_type": "MouseEvent", "y": 189, "x": 283, "type": "mousemove", "message_id": 500}
{"sender": 3914, "msg_type": "MouseEvent", "y": 189, "x": 283, "type": "mousemove", "message_id": 501}
{"sender": 3914, "msg_type": "MouseEvent", "y": 189, "x": 283, "type": "mousemove", "message_id": 502}
{"originalEvent": {"metaKey": false}, "sender": 3914, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": -1, "delta": -1, "type": "wheel", "message_id": 503}
{"originalEvent": {"metaKey": false}, "sender": 3914, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": -4, "delta": -4, "type": "wheel", "message_id": 504}
{"originalEvent": {"metaKey": false}, "sender": 3914, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": -6, "delta": -6, "type": "wheel", "message_id": 506}
{"sender": 3914, "msg_type": "MouseEvent", "y": 190, "x": 283, "type": "mousemove", "message_id": 505}
{"sender": 3914, "msg_type": "MouseEvent", "y": 190, "x": 283, "type": "mousemove", "message_id": 507}
{"originalEvent": {"metaKey": false}, "sender": 3914, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": -7, "delta": -7, "type": "wheel", "message_id": 508}
{"sender": 3914, "msg_type": "MouseEvent", "y": 190, "x": 283, "type": "mousemove", "message_id": 509}
{"originalEvent": {"metaKey": false}, "sender": 3914, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": -10, "delta": -10, "type": "wheel", "message_id": 510}
{"sender": 3914, "msg_type": "MouseEvent", "y": 190, "x": 283, "type": "mousemove", "message_id": 511}
{"originalEvent": {"metaKey": false}, "sender": 3914, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": -11, "delta": -11, "type": "wheel", "message_id": 512}
{"sender": 3914, "msg_type": "MouseEvent", "y": 190, "x": 283, "type": "mousemove", "message_id": 513}
{"originalEvent": {"metaKey": false}, "sender": 3914, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": -7, "delta": -7, "type": "wheel", "message_id": 514}
{"sender": 3914, "msg_type": "MouseEvent", "y": 190, "x": 283, "type": "mousemove", "message_id": 515}
{"originalEvent": {"metaKey": false}, "sender": 3914, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": -14, "delta": -14, "type": "wheel", "message_id": 516}
{"sender": 3914, "msg_type": "MouseEvent", "y": 191, "x": 283, "type": "mousemove", "message_id": 517}
{"originalEvent": {"metaKey": false}, "sender": 3914, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": -12, "delta": -12, "type": "wheel", "message_id": 518}
{"sender": 3914, "msg_type": "MouseEvent", "y": 191, "x": 283, "type": "mousemove", "message_id": 519}
{"originalEvent": {"metaKey": false}, "sender": 3914, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": -11, "delta": -11, "type": "wheel", "message_id": 520}
{"sender": 3914, "msg_type": "MouseEvent", "y": 191, "x": 283, "type": "mousemove", "message_id": 521}
{"originalEvent": {"metaKey": false}, "sender": 3914, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": -10, "delta": -10, "type": "wheel", "message_id": 522}
{"sender": 3914, "msg_type": "MouseEvent", "y": 191, "x": 283, "type": "mousemove", "message_id": 523}
{"originalEvent": {"metaKey": false}, "sender": 3914, "msg_type": "MouseWheelEvent", "deltaX": -2, "deltaY": -6, "delta": -6, "type": "wheel", "message_id": 524}
{"sender": 3914, "msg_type": "MouseEvent", "y": 192, "x": 283, "type": "mousemove", "message_id": 525}
{"originalEvent": {"metaKey": false}, "sender": 3914, "msg_type": "MouseWheelEvent", "deltaX": -3, "deltaY": -9, "delta": -9, "type": "wheel", "message_id": 526}
{"sender": 3914, "msg_type": "MouseEvent", "y": 192, "x": 283, "type": "mousemove", "message_id": 527}
{"originalEvent": {"metaKey": false}, "sender": 3914, "msg_type": "MouseWheelEvent", "deltaX": -3, "deltaY": -7, "delta": -7, "type": "wheel", "message_id": 528}
{"sender": 3914, "msg_type": "MouseEvent", "y": 192, "x": 283, "type": "mousemove", "message_id": 529}
{"originalEvent": {"metaKey": false}, "sender": 3914, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": -4, "delta": -4, "type": "wheel", "message_id": 530}
{"sender": 3914, "msg_type": "MouseEvent", "y": 192, "x": 283, "type": "mousemove", "message_id": 531}
{"originalEvent": {"metaKey": false}, "sender": 3914, "msg_type": "MouseWheelEvent", "deltaX": -1, "deltaY": -2, "delta": -2, "type": "wheel", "message_id": 532}
{"sender": 3914, "msg_type": "MouseEvent", "y": 192, "x": 283, "type": "mousemove", "message_id": 533}
{"originalEvent": {"metaKey": false}, "sender": 3914, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": -1, "delta": -1, "type": "wheel", "message_id": 534}
{"originalEvent": {"metaKey": false}, "sender": 3914, "msg_type": "MouseWheelEvent", "deltaX": -1, "deltaY": -2, "delta": -2, "type": "wheel", "message_id": 535}
{"originalEvent": {"metaKey": false}, "sender": 3914, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": -2, "delta": -2, "type": "wheel", "message_id": 536}
{"originalEvent": {"metaKey": false}, "sender": 3914, "msg_type": "MouseWheelEvent", "deltaX": -1, "deltaY": -2, "delta": -2, "type": "wheel", "message_id": 537}
{"originalEvent": {"metaKey": false}, "sender": 3914, "msg_type": "MouseWheelEvent", "deltaX": -1, "deltaY": -2, "delta": -2, "type": "wheel", "message_id": 538}
{"originalEvent": {"metaKey": false}, "sender": 3914, "msg_type": "MouseWheelEvent", "deltaX": -1, "deltaY": -2, "delta": -2, "type": "wheel", "message_id": 539}
{"originalEvent": {"metaKey": false}, "sender": 3914, "msg_type": "MouseWheelEvent", "deltaX": -1, "deltaY": -1, "delta": -1, "type": "wheel", "message_id": 540}
{"originalEvent": {"metaKey": false}, "sender": 3914, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": -2, "delta": -2, "type": "wheel", "message_id": 541}
{"originalEvent": {"metaKey": false}, "sender": 3914, "msg_type": "MouseWheelEvent", "deltaX": -1, "deltaY": -1, "delta": -1, "type": "wheel", "message_id": 542}
{"originalEvent": {"metaKey": false}, "sender": 3914, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": 2, "delta": 2, "type": "wheel", "message_id": 543}
{"originalEvent": {"metaKey": false}, "sender": 3914, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": 5, "delta": 5, "type": "wheel", "message_id": 544}
{"originalEvent": {"metaKey": false}, "sender": 3914, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": 4, "delta": 4, "type": "wheel", "message_id": 545}
{"originalEvent": {"metaKey": false}, "sender": 3914, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": 7, "delta": 7, "type": "wheel", "message_id": 546}
{"originalEvent": {"metaKey": false}, "sender": 3914, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": 14, "delta": 14, "type": "wheel", "message_id": 547}
{"originalEvent": {"metaKey": false}, "sender": 3914, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": 13, "delta": 13, "type": "wheel", "message_id": 548}
{"originalEvent": {"metaKey": false}, "sender": 3914, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": 15, "delta": 15, "type": "wheel", "message_id": 549}
{"originalEvent": {"metaKey": false}, "sender": 3914, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": 17, "delta": 17, "type": "wheel", "message_id": 550}
{"originalEvent": {"metaKey": false}, "sender": 3914, "msg_type": "MouseWheelEvent", "deltaX": 3, "deltaY": 12, "delta": 12, "type": "wheel", "message_id": 551}
{"originalEvent": {"metaKey": false}, "sender": 3914, "msg_type": "MouseWheelEvent", "deltaX": 3, "deltaY": 9, "delta": 9, "type": "wheel", "message_id": 552}
{"originalEvent": {"metaKey": false}, "sender": 3914, "msg_type": "MouseWheelEvent", "deltaX": 5, "deltaY": 17, "delta": 17, "type": "wheel", "message_id": 553}
{"originalEvent": {"metaKey": false}, "sender": 3914, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": 10, "delta": 10, "type": "wheel", "message_id": 554}
{"originalEvent": {"metaKey": false}, "sender": 3914, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": 12, "delta": 12, "type": "wheel", "message_id": 555}
{"originalEvent": {"metaKey": false}, "sender": 3914, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": 11, "delta": 11, "type": "wheel", "message_id": 556}
{"originalEvent": {"metaKey": false}, "sender": 3914, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": 10, "delta": 10, "type": "wheel", "message_id": 557}
{"originalEvent": {"metaKey": false}, "sender": 3914, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": 7, "delta": 7, "type": "wheel", "message_id": 558}
{"originalEvent": {"metaKey": false}, "sender": 3914, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": 5, "delta": 5, "type": "wheel", "message_id": 559}
{"originalEvent": {"metaKey": false}, "sender": 3914, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": 4, "delta": 4, "type": "wheel", "message_id": 560}
{"originalEvent": {"metaKey": false}, "sender": 3914, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": 3, "delta": 3, "type": "wheel", "message_id": 561}
{"originalEvent": {"metaKey": false}, "sender": 3914, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": 2, "delta": 2, "type": "wheel", "message_id": 562}
{"originalEvent": {"metaKey": false}, "sender": 3914, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": 1, "delta": 1, "type": "wheel", "message_id": 563}
{"originalEvent": {"metaKey": false}, "sender": 3914, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": 1, "delta": 1, "type": "wheel", "message_id": 564}
{"originalEvent": {"metaKey": false}, "sender": 3914, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": 1, "delta": 1, "type": "wheel", "message_id": 565}
{"originalEvent": {"metaKey": false}, "sender": 3914, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": -2, "delta": -2, "type": "wheel", "message_id": 567}
{"originalEvent": {"metaKey": false}, "sender": 3914, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": -1, "delta": -1, "type": "wheel", "message_id": 566}
{"originalEvent": {"metaKey": false}, "sender": 3914, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": -4, "delta": -4, "type": "wheel", "message_id": 568}
{"originalEvent": {"metaKey": false}, "sender": 3914, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": -4, "delta": -4, "type": "wheel", "message_id": 569}
{"originalEvent": {"metaKey": false}, "sender": 3914, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": -5, "delta": -5, "type": "wheel", "message_id": 570}
{"originalEvent": {"metaKey": false}, "sender": 3914, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": -7, "delta": -7, "type": "wheel", "message_id": 571}
{"originalEvent": {"metaKey": false}, "sender": 3914, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": -9, "delta": -9, "type": "wheel", "message_id": 572}
{"originalEvent": {"metaKey": false}, "sender": 3914, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": -8, "delta": -8, "type": "wheel", "message_id": 573}
{"originalEvent": {"metaKey": false}, "sender": 3914, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": -9, "delta": -9, "type": "wheel", "message_id": 574}
{"originalEvent": {"metaKey": false}, "sender": 3914, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": -11, "delta": -11, "type": "wheel", "message_id": 575}
{"originalEvent": {"metaKey": false}, "sender": 3914, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": -11, "delta": -11, "type": "wheel", "message_id": 576}
{"originalEvent": {"metaKey": false}, "sender": 3914, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": -11, "delta": -11, "type": "wheel", "message_id": 577}
{"originalEvent": {"metaKey": false}, "sender": 3914, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": -13, "delta": -13, "type": "wheel", "message_id": 578}
{"originalEvent": {"metaKey": false}, "sender": 3914, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": -10, "delta": -10, "type": "wheel", "message_id": 579}
{"originalEvent": {"metaKey": false}, "sender": 3914, "msg_type": "MouseWheelEvent", "deltaX": -2, "deltaY": -7, "delta": -7, "type": "wheel", "message_id": 580}
{"originalEvent": {"metaKey": false}, "sender": 3914, "msg_type": "MouseWheelEvent", "deltaX": -2, "deltaY": -6, "delta": -6, "type": "wheel", "message_id": 581}
{"originalEvent": {"metaKey": false}, "sender": 3914, "msg_type": "MouseWheelEvent", "deltaX": -4, "deltaY": -8, "delta": -8, "type": "wheel", "message_id": 582}
{"originalEvent": {"metaKey": false}, "sender": 3914, "msg_type": "MouseWheelEvent", "deltaX": -3, "deltaY": -6, "delta": -6, "type": "wheel", "message_id": 583}
{"originalEvent": {"metaKey": false}, "sender": 3914, "msg_type": "MouseWheelEvent", "deltaX": -2, "deltaY": -4, "delta": -4, "type": "wheel", "message_id": 584}
{"originalEvent": {"metaKey": false}, "sender": 3914, "msg_type": "MouseWheelEvent", "deltaX": -2, "deltaY": -3, "delta": -3, "type": "wheel", "message_id": 585}
{"originalEvent": {"metaKey": false}, "sender": 3914, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": 1, "delta": 1, "type": "wheel", "message_id": 586}
{"originalEvent": {"metaKey": false}, "sender": 3914, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": 1, "delta": 1, "type": "wheel", "message_id": 587}
{"originalEvent": {"metaKey": false}, "sender": 3914, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": 1, "delta": 1, "type": "wheel", "message_id": 588}
{"originalEvent": {"metaKey": false}, "sender": 3914, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": 1, "delta": 1, "type": "wheel", "message_id": 589}
{"originalEvent": {"metaKey": false}, "sender": 3914, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": 1, "delta": 1, "type": "wheel", "message_id": 590}
{"originalEvent": {"metaKey": false}, "sender": 3914, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": 1, "delta": 1, "type": "wheel", "message_id": 591}
{"originalEvent": {"metaKey": false}, "sender": 3914, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": 1, "delta": 1, "type": "wheel", "message_id": 592}
{"originalEvent": {"metaKey": false}, "sender": 3914, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": 1, "delta": 1, "type": "wheel", "message_id": 593}
{"originalEvent": {"metaKey": false}, "sender": 3914, "msg_type": "MouseWheelEvent", "deltaX": 1, "deltaY": 0, "delta": -1, "type": "wheel", "message_id": 594}
{"sender": 3914, "msg_type": "MouseEvent", "y": 192, "x": 283, "type": "mousemove", "message_id": 595}
{"sender": 3914, "msg_type": "MouseEvent", "y": 190, "x": 283, "type": "mousemove", "message_id": 596}
{"sender": 3914, "msg_type": "MouseEvent", "y": 187, "x": 281, "type": "mouseover", "message_id": 597}
{"sender": 3914, "msg_type": "MouseEvent", "y": 187, "x": 281, "type": "mouseover", "message_id": 598}
{"sender": 3914, "msg_type": "MouseEvent", "y": 187, "x": 281, "type": "mousemove", "message_id": 599}
{"sender": 3914, "msg_type": "MouseEvent", "y": 183, "x": 280, "type": "mouseover", "message_id": 600}
{"sender": 3914, "msg_type": "MouseEvent", "y": 183, "x": 280, "type": "mouseover", "message_id": 601}
{"sender": 3914, "msg_type": "MouseEvent", "y": 183, "x": 280, "type": "mousemove", "message_id": 602}
{"sender": 3914, "msg_type": "MouseEvent", "y": 178, "x": 277, "type": "mouseover", "message_id": 603}
{"sender": 3914, "msg_type": "MouseEvent", "y": 178, "x": 277, "type": "mouseover", "message_id": 604}
{"sender": 3914, "msg_type": "MouseEvent", "y": 178, "x": 277, "type": "mousemove", "message_id": 605}
{"sender": 3914, "msg_type": "MouseEvent", "y": 172, "x": 272, "type": "mousemove", "message_id": 606}
{"sender": 3914, "msg_type": "MouseEvent", "y": 165, "x": 267, "type": "mousemove", "message_id": 607}
{"sender": 3914, "msg_type": "MouseEvent", "y": 158, "x": 260, "type": "mousemove", "message_id": 608}
{"sender": 3914, "msg_type": "MouseEvent", "y": 150, "x": 253, "type": "mousemove", "message_id": 609}
{"sender": 3914, "msg_type": "MouseEvent", "y": 143, "x": 246, "type": "mousemove", "message_id": 610}
{"sender": 3914, "msg_type": "MouseEvent", "y": 136, "x": 239, "type": "mousemove", "message_id": 611}
{"sender": 3914, "msg_type": "MouseEvent", "y": 127, "x": 229, "type": "mousemove", "message_id": 612}
{"sender": 3914, "msg_type": "MouseEvent", "y": 120, "x": 221, "type": "mousemove", "message_id": 613}
{"sender": 3914, "msg_type": "MouseEvent", "y": 111, "x": 213, "type": "mousemove", "message_id": 614}
{"sender": 3914, "msg_type": "MouseEvent", "y": 104, "x": 206, "type": "mousemove", "message_id": 615}
{"sender": 3914, "msg_type": "MouseEvent", "y": 99, "x": 202, "type": "mousemove", "message_id": 616}
{"sender": 3914, "msg_type": "MouseEvent", "y": 94, "x": 199, "type": "mousemove", "message_id": 617}
{"sender": 3914, "msg_type": "MouseEvent", "y": 91, "x": 197, "type": "mousemove", "message_id": 618}
{"sender": 3914, "msg_type": "MouseEvent", "y": 88, "x": 196, "type": "mouseover", "message_id": 619}
{"sender": 3914, "msg_type": "MouseEvent", "y": 88, "x": 196, "type": "mouseover", "message_id": 620}
{"sender": 3914, "msg_type": "MouseEvent", "y": 88, "x": 196, "type": "mousemove", "message_id": 621}
{"sender": 3914, "msg_type": "MouseEvent", "y": 85, "x": 195, "type": "mousemove", "message_id": 622}
{"sender": 3914, "msg_type": "MouseEvent", "y": 83, "x": 194, "type": "mousemove", "message_id": 623}
{"sender": 3914, "msg_type": "MouseEvent", "y": 81, "x": 194, "type": "mousemove", "message_id": 624}
{"sender": 3914, "msg_type": "MouseEvent", "y": 79, "x": 194, "type": "mousemove", "message_id": 625}
{"sender": 3914, "msg_type": "MouseEvent", "y": 77, "x": 194, "type": "mousemove", "message_id": 626}
{"sender": 3914, "msg_type": "MouseEvent", "y": 76, "x": 195, "type": "mousemove", "message_id": 627}
{"sender": 3914, "msg_type": "MouseEvent", "y": 75, "x": 195, "type": "mousemove", "message_id": 628}
{"sender": 3914, "msg_type": "MouseEvent", "y": 75, "x": 196, "type": "mousemove", "message_id": 629}
{"sender": 3914, "msg_type": "MouseEvent", "y": 74, "x": 196, "type": "mousemove", "message_id": 630}
{"sender": 3914, "msg_type": "MouseEvent", "y": 74, "x": 196, "type": "mousemove", "message_id": 631}
{"sender": 3914, "msg_type": "MouseEvent", "y": 73, "x": 196, "type": "mousemove", "message_id": 632}
{"sender": 3914, "msg_type": "MouseEvent", "y": 72, "x": 197, "type": "mousemove", "message_id": 633}
{"sender": 3914, "msg_type": "MouseEvent", "y": 71, "x": 197, "type": "mousemove", "message_id": 634}
{"sender": 3914, "msg_type": "MouseEvent", "y": 70, "x": 197, "type": "mousemove", "message_id": 635}
{"sender": 3914, "msg_type": "MouseEvent", "y": 69, "x": 197, "type": "mousemove", "message_id": 636}
{"sender": 3914, "msg_type": "MouseEvent", "y": 68, "x": 197, "type": "mousemove", "message_id": 637}
{"sender": 3914, "msg_type": "MouseEvent", "y": 68, "x": 197, "type": "mousemove", "message_id": 638}
{"sender": 3914, "msg_type": "MouseEvent", "y": 67, "x": 197, "type": "mousemove", "message_id": 639}
{"sender": 3914, "msg_type": "MouseEvent", "y": 66, "x": 197, "type": "mousemove", "message_id": 640}
{"sender": 3914, "msg_type": "MouseEvent", "y": 64, "x": 197, "type": "mousemove", "message_id": 641}
{"sender": 3914, "msg_type": "MouseEvent", "y": 63, "x": 196, "type": "mousemove", "message_id": 642}
{"sender": 3914, "msg_type": "MouseEvent", "y": 62, "x": 196, "type": "mousemove", "message_id": 643}
{"sender": 3914, "msg_type": "MouseEvent", "y": 61, "x": 196, "type": "mousemove", "message_id": 644}
{"sender": 3914, "msg_type": "MouseEvent", "y": 60, "x": 196, "type": "mousemove", "message_id": 645}
{"sender": 3914, "msg_type": "MouseEvent", "y": 59, "x": 195, "type": "mousemove", "message_id": 646}
{"sender": 3914, "msg_type": "MouseEvent", "y": 58, "x": 195, "type": "mousemove", "message_id": 647}
{"sender": 3914, "msg_type": "MouseEvent", "y": 57, "x": 195, "type": "mousemove", "message_id": 648}
{"sender": 3914, "msg_type": "MouseEvent", "y": 56, "x": 194, "type": "mousemove", "message_id": 649}
{"sender": 3914, "msg_type": "MouseEvent", "y": 55, "x": 194, "type": "mousemove", "message_id": 650}
{"sender": 3914, "msg_type": "MouseEvent", "y": 55, "x": 194, "type": "mousemove", "message_id": 651}
{"sender": 3914, "msg_type": "MouseEvent", "y": 54, "x": 194, "type": "mousemove", "message_id": 652}
{"sender": 3914, "msg_type": "MouseEvent", "y": 54, "x": 194, "type": "mousemove", "message_id": 653}
{"sender": 3914, "msg_type": "MouseEvent", "y": 54, "x": 194, "type": "mousemove", "message_id": 654}
{"sender": 3914, "msg_type": "MouseEvent", "y": 53, "x": 194, "type": "mousemove", "message_id": 655}

View File

@ -0,0 +1,423 @@
{"scale": 1, "sender": 5777, "msg_type": "ViewPort", "panY": 0, "panX": 0, "message_id": 3}
{"sender": 5777, "msg_type": "MouseEvent", "y": 52, "x": 178, "type": "mousemove", "message_id": 4}
{"sender": 5777, "msg_type": "MouseEvent", "y": 53, "x": 178, "type": "mousemove", "message_id": 5}
{"sender": 5777, "msg_type": "MouseEvent", "y": 54, "x": 178, "type": "mousemove", "message_id": 6}
{"sender": 5777, "msg_type": "MouseEvent", "y": 55, "x": 178, "type": "mousemove", "message_id": 7}
{"sender": 5777, "msg_type": "MouseEvent", "y": 56, "x": 178, "type": "mousemove", "message_id": 8}
{"sender": 5777, "msg_type": "MouseEvent", "y": 57, "x": 178, "type": "mousemove", "message_id": 9}
{"sender": 5777, "msg_type": "MouseEvent", "y": 60, "x": 178, "type": "mousemove", "message_id": 10}
{"sender": 5777, "msg_type": "MouseEvent", "y": 61, "x": 178, "type": "mousemove", "message_id": 11}
{"sender": 5777, "msg_type": "MouseEvent", "y": 64, "x": 178, "type": "mousemove", "message_id": 12}
{"sender": 5777, "msg_type": "MouseEvent", "y": 66, "x": 179, "type": "mousemove", "message_id": 13}
{"sender": 5777, "msg_type": "MouseEvent", "y": 69, "x": 180, "type": "mousemove", "message_id": 14}
{"sender": 5777, "msg_type": "MouseEvent", "y": 72, "x": 182, "type": "mouseover", "message_id": 15}
{"sender": 5777, "msg_type": "MouseEvent", "y": 72, "x": 182, "type": "mouseover", "message_id": 16}
{"sender": 5777, "msg_type": "MouseEvent", "y": 75, "x": 184, "type": "mousemove", "message_id": 18}
{"sender": 5777, "msg_type": "MouseEvent", "y": 72, "x": 182, "type": "mousemove", "message_id": 17}
{"sender": 5777, "msg_type": "MouseEvent", "y": 78, "x": 186, "type": "mousemove", "message_id": 19}
{"sender": 5777, "msg_type": "MouseEvent", "y": 81, "x": 188, "type": "mousemove", "message_id": 20}
{"sender": 5777, "msg_type": "MouseEvent", "y": 84, "x": 191, "type": "mouseover", "message_id": 21}
{"sender": 5777, "msg_type": "MouseEvent", "y": 84, "x": 191, "type": "mouseover", "message_id": 22}
{"sender": 5777, "msg_type": "MouseEvent", "y": 87, "x": 194, "type": "mousemove", "message_id": 24}
{"sender": 5777, "msg_type": "MouseEvent", "y": 84, "x": 191, "type": "mousemove", "message_id": 23}
{"sender": 5777, "msg_type": "MouseEvent", "y": 90, "x": 197, "type": "mousemove", "message_id": 25}
{"sender": 5777, "msg_type": "MouseEvent", "y": 96, "x": 203, "type": "mousemove", "message_id": 27}
{"sender": 5777, "msg_type": "MouseEvent", "y": 99, "x": 208, "type": "mousemove", "message_id": 28}
{"sender": 5777, "msg_type": "MouseEvent", "y": 93, "x": 200, "type": "mousemove", "message_id": 26}
{"sender": 5777, "msg_type": "MouseEvent", "y": 102, "x": 211, "type": "mousemove", "message_id": 29}
{"sender": 5777, "msg_type": "MouseEvent", "y": 105, "x": 215, "type": "mousemove", "message_id": 30}
{"sender": 5777, "msg_type": "MouseEvent", "y": 108, "x": 219, "type": "mousemove", "message_id": 31}
{"sender": 5777, "msg_type": "MouseEvent", "y": 111, "x": 222, "type": "mousemove", "message_id": 32}
{"sender": 5777, "msg_type": "MouseEvent", "y": 113, "x": 226, "type": "mouseover", "message_id": 33}
{"sender": 5777, "msg_type": "MouseEvent", "y": 113, "x": 226, "type": "mouseover", "message_id": 34}
{"sender": 5777, "msg_type": "MouseEvent", "y": 113, "x": 226, "type": "mousemove", "message_id": 35}
{"sender": 5777, "msg_type": "MouseEvent", "y": 115, "x": 229, "type": "mousemove", "message_id": 36}
{"sender": 5777, "msg_type": "MouseEvent", "y": 117, "x": 232, "type": "mousemove", "message_id": 37}
{"sender": 5777, "msg_type": "MouseEvent", "y": 118, "x": 234, "type": "mouseover", "message_id": 38}
{"sender": 5777, "msg_type": "MouseEvent", "y": 118, "x": 234, "type": "mousemove", "message_id": 40}
{"sender": 5777, "msg_type": "MouseEvent", "y": 118, "x": 234, "type": "mouseover", "message_id": 39}
{"sender": 5777, "msg_type": "MouseEvent", "y": 121, "x": 238, "type": "mouseover", "message_id": 41}
{"sender": 5777, "msg_type": "MouseEvent", "y": 121, "x": 238, "type": "mouseover", "message_id": 42}
{"sender": 5777, "msg_type": "MouseEvent", "y": 121, "x": 238, "type": "mousemove", "message_id": 43}
{"sender": 5777, "msg_type": "MouseEvent", "y": 123, "x": 241, "type": "mouseover", "message_id": 44}
{"sender": 5777, "msg_type": "MouseEvent", "y": 123, "x": 241, "type": "mouseover", "message_id": 45}
{"sender": 5777, "msg_type": "MouseEvent", "y": 123, "x": 241, "type": "mousemove", "message_id": 46}
{"sender": 5777, "msg_type": "MouseEvent", "y": 125, "x": 244, "type": "mousemove", "message_id": 47}
{"sender": 5777, "msg_type": "MouseEvent", "y": 126, "x": 247, "type": "mouseover", "message_id": 48}
{"sender": 5777, "msg_type": "MouseEvent", "y": 126, "x": 247, "type": "mousemove", "message_id": 50}
{"sender": 5777, "msg_type": "MouseEvent", "y": 126, "x": 247, "type": "mouseover", "message_id": 49}
{"sender": 5777, "msg_type": "MouseEvent", "y": 128, "x": 250, "type": "mouseover", "message_id": 52}
{"sender": 5777, "msg_type": "MouseEvent", "y": 128, "x": 250, "type": "mouseover", "message_id": 51}
{"sender": 5777, "msg_type": "MouseEvent", "y": 128, "x": 250, "type": "mousemove", "message_id": 53}
{"sender": 5777, "msg_type": "MouseEvent", "y": 129, "x": 254, "type": "mouseover", "message_id": 54}
{"sender": 5777, "msg_type": "MouseEvent", "y": 129, "x": 254, "type": "mouseover", "message_id": 55}
{"sender": 5777, "msg_type": "MouseEvent", "y": 129, "x": 254, "type": "mousemove", "message_id": 56}
{"sender": 5777, "msg_type": "MouseEvent", "y": 130, "x": 257, "type": "mousemove", "message_id": 57}
{"sender": 5777, "msg_type": "MouseEvent", "y": 132, "x": 260, "type": "mouseover", "message_id": 59}
{"sender": 5777, "msg_type": "MouseEvent", "y": 132, "x": 260, "type": "mouseover", "message_id": 58}
{"sender": 5777, "msg_type": "MouseEvent", "y": 133, "x": 264, "type": "mouseover", "message_id": 61}
{"sender": 5777, "msg_type": "MouseEvent", "y": 132, "x": 260, "type": "mousemove", "message_id": 60}
{"sender": 5777, "msg_type": "MouseEvent", "y": 133, "x": 264, "type": "mouseover", "message_id": 62}
{"sender": 5777, "msg_type": "MouseEvent", "y": 133, "x": 264, "type": "mousemove", "message_id": 63}
{"sender": 5777, "msg_type": "MouseEvent", "y": 135, "x": 267, "type": "mouseover", "message_id": 64}
{"sender": 5777, "msg_type": "MouseEvent", "y": 135, "x": 267, "type": "mouseover", "message_id": 65}
{"sender": 5777, "msg_type": "MouseEvent", "y": 135, "x": 267, "type": "mousemove", "message_id": 66}
{"sender": 5777, "msg_type": "MouseEvent", "y": 136, "x": 272, "type": "mouseover", "message_id": 67}
{"sender": 5777, "msg_type": "MouseEvent", "y": 136, "x": 272, "type": "mouseover", "message_id": 68}
{"sender": 5777, "msg_type": "MouseEvent", "y": 136, "x": 272, "type": "mousemove", "message_id": 69}
{"sender": 5777, "msg_type": "MouseEvent", "y": 138, "x": 275, "type": "mouseover", "message_id": 70}
{"sender": 5777, "msg_type": "MouseEvent", "y": 138, "x": 275, "type": "mouseover", "message_id": 71}
{"sender": 5777, "msg_type": "MouseEvent", "y": 138, "x": 275, "type": "mousemove", "message_id": 72}
{"sender": 5777, "msg_type": "MouseEvent", "y": 139, "x": 280, "type": "mouseover", "message_id": 73}
{"sender": 5777, "msg_type": "MouseEvent", "y": 139, "x": 280, "type": "mouseover", "message_id": 74}
{"sender": 5777, "msg_type": "MouseEvent", "y": 139, "x": 280, "type": "mousemove", "message_id": 75}
{"sender": 5777, "msg_type": "MouseEvent", "y": 141, "x": 285, "type": "mouseover", "message_id": 76}
{"sender": 5777, "msg_type": "MouseEvent", "y": 141, "x": 285, "type": "mouseover", "message_id": 77}
{"sender": 5777, "msg_type": "MouseEvent", "y": 141, "x": 285, "type": "mousemove", "message_id": 78}
{"sender": 5777, "msg_type": "MouseEvent", "y": 143, "x": 290, "type": "mousemove", "message_id": 79}
{"sender": 5777, "msg_type": "MouseEvent", "y": 145, "x": 295, "type": "mousemove", "message_id": 80}
{"sender": 5777, "msg_type": "MouseEvent", "y": 148, "x": 301, "type": "mouseover", "message_id": 81}
{"sender": 5777, "msg_type": "MouseEvent", "y": 148, "x": 301, "type": "mouseover", "message_id": 82}
{"sender": 5777, "msg_type": "MouseEvent", "y": 148, "x": 301, "type": "mousemove", "message_id": 83}
{"sender": 5777, "msg_type": "MouseEvent", "y": 151, "x": 307, "type": "mousemove", "message_id": 84}
{"sender": 5777, "msg_type": "MouseEvent", "y": 156, "x": 318, "type": "mousemove", "message_id": 85}
{"sender": 5777, "msg_type": "MouseEvent", "y": 159, "x": 326, "type": "mousemove", "message_id": 86}
{"sender": 5777, "msg_type": "MouseEvent", "y": 164, "x": 336, "type": "mousemove", "message_id": 87}
{"sender": 5777, "msg_type": "MouseEvent", "y": 168, "x": 346, "type": "mousemove", "message_id": 88}
{"sender": 5777, "msg_type": "MouseEvent", "y": 173, "x": 359, "type": "mousemove", "message_id": 89}
{"sender": 5777, "msg_type": "MouseEvent", "y": 177, "x": 372, "type": "mousemove", "message_id": 90}
{"sender": 5777, "msg_type": "MouseEvent", "y": 182, "x": 386, "type": "mousemove", "message_id": 91}
{"sender": 5777, "msg_type": "MouseEvent", "y": 187, "x": 402, "type": "mousemove", "message_id": 92}
{"sender": 5777, "msg_type": "MouseEvent", "y": 191, "x": 417, "type": "mousemove", "message_id": 93}
{"sender": 5777, "msg_type": "MouseEvent", "y": 195, "x": 432, "type": "mouseover", "message_id": 94}
{"sender": 5777, "msg_type": "MouseEvent", "y": 195, "x": 432, "type": "mouseover", "message_id": 95}
{"sender": 5777, "msg_type": "MouseEvent", "y": 195, "x": 432, "type": "mousemove", "message_id": 96}
{"sender": 5777, "msg_type": "MouseEvent", "y": 198, "x": 445, "type": "mousemove", "message_id": 97}
{"sender": 5777, "msg_type": "MouseEvent", "y": 200, "x": 451, "type": "mouseover", "message_id": 98}
{"sender": 5777, "msg_type": "MouseEvent", "y": 200, "x": 451, "type": "mouseover", "message_id": 99}
{"sender": 5777, "msg_type": "MouseEvent", "y": 200, "x": 451, "type": "mousemove", "message_id": 100}
{"sender": 5777, "msg_type": "MouseEvent", "y": 203, "x": 462, "type": "mouseover", "message_id": 101}
{"sender": 5777, "msg_type": "MouseEvent", "y": 203, "x": 462, "type": "mouseover", "message_id": 102}
{"sender": 5777, "msg_type": "MouseEvent", "y": 203, "x": 462, "type": "mousemove", "message_id": 103}
{"sender": 5777, "msg_type": "MouseEvent", "y": 205, "x": 471, "type": "mousemove", "message_id": 104}
{"sender": 5777, "msg_type": "MouseEvent", "y": 205, "x": 471, "type": "mouseover", "message_id": 105}
{"sender": 5777, "msg_type": "MouseEvent", "y": 205, "x": 471, "type": "mouseover", "message_id": 106}
{"sender": 5777, "msg_type": "MouseEvent", "y": 205, "x": 471, "type": "mousemove", "message_id": 107}
{"sender": 5777, "msg_type": "MouseEvent", "y": 205, "x": 474, "type": "mouseover", "message_id": 108}
{"sender": 5777, "msg_type": "MouseEvent", "y": 205, "x": 474, "type": "mouseover", "message_id": 109}
{"sender": 5777, "msg_type": "MouseEvent", "y": 207, "x": 476, "type": "mouseover", "message_id": 111}
{"sender": 5777, "msg_type": "MouseEvent", "y": 205, "x": 474, "type": "mousemove", "message_id": 110}
{"sender": 5777, "msg_type": "MouseEvent", "y": 207, "x": 476, "type": "mouseover", "message_id": 112}
{"sender": 5777, "msg_type": "MouseEvent", "y": 207, "x": 476, "type": "mousemove", "message_id": 113}
{"sender": 5777, "msg_type": "MouseEvent", "y": 208, "x": 479, "type": "mouseover", "message_id": 114}
{"sender": 5777, "msg_type": "MouseEvent", "y": 208, "x": 479, "type": "mouseover", "message_id": 115}
{"sender": 5777, "msg_type": "MouseEvent", "y": 208, "x": 479, "type": "mousemove", "message_id": 116}
{"sender": 5777, "msg_type": "MouseEvent", "y": 210, "x": 482, "type": "mouseover", "message_id": 118}
{"sender": 5777, "msg_type": "MouseEvent", "y": 210, "x": 482, "type": "mouseover", "message_id": 117}
{"sender": 5777, "msg_type": "MouseEvent", "y": 210, "x": 482, "type": "mousemove", "message_id": 119}
{"sender": 5777, "msg_type": "MouseEvent", "y": 214, "x": 491, "type": "mousemove", "message_id": 121}
{"sender": 5777, "msg_type": "MouseEvent", "y": 212, "x": 486, "type": "mousemove", "message_id": 120}
{"sender": 5777, "msg_type": "MouseEvent", "y": 216, "x": 497, "type": "mouseover", "message_id": 122}
{"sender": 5777, "msg_type": "MouseEvent", "y": 216, "x": 497, "type": "mouseover", "message_id": 123}
{"sender": 5777, "msg_type": "MouseEvent", "y": 216, "x": 497, "type": "mousemove", "message_id": 124}
{"sender": 5777, "msg_type": "MouseEvent", "y": 218, "x": 502, "type": "mouseover", "message_id": 126}
{"sender": 5777, "msg_type": "MouseEvent", "y": 218, "x": 502, "type": "mouseover", "message_id": 125}
{"sender": 5777, "msg_type": "MouseEvent", "y": 218, "x": 502, "type": "mousemove", "message_id": 127}
{"sender": 5777, "msg_type": "MouseEvent", "y": 219, "x": 507, "type": "mouseover", "message_id": 128}
{"sender": 5777, "msg_type": "MouseEvent", "y": 219, "x": 507, "type": "mousemove", "message_id": 130}
{"sender": 5777, "msg_type": "MouseEvent", "y": 219, "x": 507, "type": "mouseover", "message_id": 129}
{"sender": 5777, "msg_type": "MouseEvent", "y": 220, "x": 513, "type": "mousemove", "message_id": 131}
{"sender": 5777, "msg_type": "MouseEvent", "y": 222, "x": 523, "type": "mousemove", "message_id": 133}
{"sender": 5777, "msg_type": "MouseEvent", "y": 221, "x": 518, "type": "mousemove", "message_id": 132}
{"sender": 5777, "msg_type": "MouseEvent", "y": 224, "x": 539, "type": "mousemove", "message_id": 136}
{"sender": 5777, "msg_type": "MouseEvent", "y": 222, "x": 528, "type": "mousemove", "message_id": 134}
{"sender": 5777, "msg_type": "MouseEvent", "y": 223, "x": 533, "type": "mousemove", "message_id": 135}
{"sender": 5777, "msg_type": "MouseEvent", "y": 224, "x": 545, "type": "mousemove", "message_id": 137}
{"sender": 5777, "msg_type": "MouseEvent", "y": 224, "x": 550, "type": "mousemove", "message_id": 138}
{"sender": 5777, "msg_type": "MouseEvent", "y": 225, "x": 555, "type": "mousemove", "message_id": 139}
{"sender": 5777, "msg_type": "MouseEvent", "y": 225, "x": 559, "type": "mousemove", "message_id": 140}
{"sender": 5777, "msg_type": "MouseEvent", "y": 225, "x": 564, "type": "mousemove", "message_id": 141}
{"sender": 5777, "msg_type": "MouseEvent", "y": 225, "x": 568, "type": "mousemove", "message_id": 142}
{"sender": 5777, "msg_type": "MouseEvent", "y": 226, "x": 572, "type": "mousemove", "message_id": 143}
{"sender": 5777, "msg_type": "MouseEvent", "y": 226, "x": 576, "type": "mousemove", "message_id": 144}
{"sender": 5777, "msg_type": "MouseEvent", "y": 227, "x": 583, "type": "mousemove", "message_id": 146}
{"sender": 5777, "msg_type": "MouseEvent", "y": 227, "x": 579, "type": "mousemove", "message_id": 145}
{"sender": 5777, "msg_type": "MouseEvent", "y": 228, "x": 587, "type": "mousemove", "message_id": 147}
{"sender": 5777, "msg_type": "MouseEvent", "y": 229, "x": 595, "type": "mousemove", "message_id": 149}
{"sender": 5777, "msg_type": "MouseEvent", "y": 228, "x": 590, "type": "mousemove", "message_id": 148}
{"sender": 5777, "msg_type": "MouseEvent", "y": 231, "x": 599, "type": "mouseover", "message_id": 150}
{"sender": 5777, "msg_type": "MouseEvent", "y": 231, "x": 599, "type": "mouseover", "message_id": 151}
{"sender": 5777, "msg_type": "MouseEvent", "y": 231, "x": 599, "type": "mousemove", "message_id": 152}
{"sender": 5777, "msg_type": "MouseEvent", "y": 232, "x": 603, "type": "mouseover", "message_id": 153}
{"sender": 5777, "msg_type": "MouseEvent", "y": 232, "x": 603, "type": "mouseover", "message_id": 154}
{"sender": 5777, "msg_type": "MouseEvent", "y": 232, "x": 603, "type": "mousemove", "message_id": 155}
{"sender": 5777, "msg_type": "MouseEvent", "y": 234, "x": 608, "type": "mouseover", "message_id": 156}
{"sender": 5777, "msg_type": "MouseEvent", "y": 234, "x": 608, "type": "mouseover", "message_id": 157}
{"sender": 5777, "msg_type": "MouseEvent", "y": 234, "x": 608, "type": "mousemove", "message_id": 158}
{"sender": 5777, "msg_type": "MouseEvent", "y": 236, "x": 613, "type": "mousemove", "message_id": 159}
{"sender": 5777, "msg_type": "MouseEvent", "y": 237, "x": 617, "type": "mouseover", "message_id": 160}
{"sender": 5777, "msg_type": "MouseEvent", "y": 237, "x": 617, "type": "mouseover", "message_id": 161}
{"sender": 5777, "msg_type": "MouseEvent", "y": 237, "x": 617, "type": "mousemove", "message_id": 162}
{"sender": 5777, "msg_type": "MouseEvent", "y": 239, "x": 620, "type": "mouseover", "message_id": 164}
{"sender": 5777, "msg_type": "MouseEvent", "y": 239, "x": 620, "type": "mouseover", "message_id": 163}
{"sender": 5777, "msg_type": "MouseEvent", "y": 239, "x": 620, "type": "mousemove", "message_id": 165}
{"sender": 5777, "msg_type": "MouseEvent", "y": 240, "x": 625, "type": "mouseover", "message_id": 166}
{"sender": 5777, "msg_type": "MouseEvent", "y": 240, "x": 625, "type": "mouseover", "message_id": 167}
{"sender": 5777, "msg_type": "MouseEvent", "y": 240, "x": 625, "type": "mousemove", "message_id": 168}
{"sender": 5777, "msg_type": "MouseEvent", "y": 241, "x": 628, "type": "mousemove", "message_id": 169}
{"sender": 5777, "msg_type": "MouseEvent", "y": 243, "x": 633, "type": "mouseover", "message_id": 170}
{"sender": 5777, "msg_type": "MouseEvent", "y": 243, "x": 633, "type": "mouseover", "message_id": 171}
{"sender": 5777, "msg_type": "MouseEvent", "y": 243, "x": 633, "type": "mousemove", "message_id": 172}
{"sender": 5777, "msg_type": "MouseEvent", "y": 243, "x": 636, "type": "mouseover", "message_id": 173}
{"sender": 5777, "msg_type": "MouseEvent", "y": 243, "x": 636, "type": "mouseover", "message_id": 174}
{"sender": 5777, "msg_type": "MouseEvent", "y": 243, "x": 636, "type": "mousemove", "message_id": 175}
{"sender": 5777, "msg_type": "MouseEvent", "y": 244, "x": 641, "type": "mousemove", "message_id": 176}
{"sender": 5777, "msg_type": "MouseEvent", "y": 246, "x": 649, "type": "mousemove", "message_id": 178}
{"sender": 5777, "msg_type": "MouseEvent", "y": 245, "x": 645, "type": "mousemove", "message_id": 177}
{"sender": 5777, "msg_type": "MouseEvent", "y": 247, "x": 654, "type": "mousemove", "message_id": 179}
{"sender": 5777, "msg_type": "MouseEvent", "y": 247, "x": 659, "type": "mousemove", "message_id": 180}
{"sender": 5777, "msg_type": "MouseEvent", "y": 248, "x": 664, "type": "mousemove", "message_id": 181}
{"sender": 5777, "msg_type": "MouseEvent", "y": 249, "x": 670, "type": "mousemove", "message_id": 182}
{"sender": 5777, "msg_type": "MouseEvent", "y": 250, "x": 677, "type": "mousemove", "message_id": 183}
{"sender": 5777, "msg_type": "MouseEvent", "y": 251, "x": 683, "type": "mousemove", "message_id": 184}
{"sender": 5777, "msg_type": "MouseEvent", "y": 252, "x": 688, "type": "mousemove", "message_id": 185}
{"sender": 5777, "msg_type": "MouseEvent", "y": 254, "x": 700, "type": "mousemove", "message_id": 187}
{"sender": 5777, "msg_type": "MouseEvent", "y": 253, "x": 695, "type": "mousemove", "message_id": 186}
{"sender": 5777, "msg_type": "MouseEvent", "y": 254, "x": 706, "type": "mousemove", "message_id": 188}
{"sender": 5777, "msg_type": "MouseEvent", "y": 255, "x": 711, "type": "mousemove", "message_id": 189}
{"sender": 5777, "msg_type": "MouseEvent", "y": 255, "x": 716, "type": "mousemove", "message_id": 190}
{"sender": 5777, "msg_type": "MouseEvent", "y": 256, "x": 720, "type": "mouseout", "message_id": 191}
{"sender": 5777, "msg_type": "MouseEvent", "y": 406, "x": 718, "type": "mouseover", "message_id": 192}
{"sender": 5777, "msg_type": "MouseEvent", "y": 406, "x": 718, "type": "mouseover", "message_id": 193}
{"sender": 5777, "msg_type": "MouseEvent", "y": 406, "x": 718, "type": "mousemove", "message_id": 194}
{"sender": 5777, "msg_type": "MouseEvent", "y": 406, "x": 718, "type": "mouseover", "message_id": 195}
{"sender": 5777, "msg_type": "MouseEvent", "y": 406, "x": 718, "type": "mouseover", "message_id": 196}
{"sender": 5777, "msg_type": "MouseEvent", "y": 406, "x": 718, "type": "mousemove", "message_id": 197}
{"sender": 5777, "msg_type": "MouseEvent", "y": 408, "x": 714, "type": "mouseover", "message_id": 198}
{"sender": 5777, "msg_type": "MouseEvent", "y": 408, "x": 714, "type": "mouseover", "message_id": 199}
{"sender": 5777, "msg_type": "MouseEvent", "y": 408, "x": 714, "type": "mousemove", "message_id": 200}
{"sender": 5777, "msg_type": "MouseEvent", "y": 410, "x": 710, "type": "mousemove", "message_id": 201}
{"sender": 5777, "msg_type": "MouseEvent", "y": 412, "x": 705, "type": "mousemove", "message_id": 202}
{"sender": 5777, "msg_type": "MouseEvent", "y": 413, "x": 701, "type": "mouseover", "message_id": 203}
{"sender": 5777, "msg_type": "MouseEvent", "y": 413, "x": 701, "type": "mouseover", "message_id": 204}
{"sender": 5777, "msg_type": "MouseEvent", "y": 413, "x": 701, "type": "mousemove", "message_id": 205}
{"sender": 5777, "msg_type": "MouseEvent", "y": 415, "x": 697, "type": "mouseover", "message_id": 206}
{"sender": 5777, "msg_type": "MouseEvent", "y": 415, "x": 697, "type": "mouseover", "message_id": 207}
{"sender": 5777, "msg_type": "MouseEvent", "y": 415, "x": 697, "type": "mousemove", "message_id": 208}
{"sender": 5777, "msg_type": "MouseEvent", "y": 415, "x": 695, "type": "mouseover", "message_id": 209}
{"sender": 5777, "msg_type": "MouseEvent", "y": 415, "x": 695, "type": "mouseover", "message_id": 210}
{"sender": 5777, "msg_type": "MouseEvent", "y": 415, "x": 695, "type": "mousemove", "message_id": 211}
{"sender": 5777, "msg_type": "MouseEvent", "y": 417, "x": 691, "type": "mouseover", "message_id": 212}
{"sender": 5777, "msg_type": "MouseEvent", "y": 417, "x": 691, "type": "mouseover", "message_id": 213}
{"sender": 5777, "msg_type": "MouseEvent", "y": 417, "x": 691, "type": "mousemove", "message_id": 214}
{"sender": 5777, "msg_type": "MouseEvent", "y": 418, "x": 688, "type": "mouseover", "message_id": 215}
{"sender": 5777, "msg_type": "MouseEvent", "y": 418, "x": 688, "type": "mouseover", "message_id": 216}
{"sender": 5777, "msg_type": "MouseEvent", "y": 418, "x": 688, "type": "mousemove", "message_id": 217}
{"sender": 5777, "msg_type": "MouseEvent", "y": 418, "x": 685, "type": "mousemove", "message_id": 218}
{"sender": 5777, "msg_type": "MouseEvent", "y": 419, "x": 682, "type": "mousemove", "message_id": 219}
{"sender": 5777, "msg_type": "MouseEvent", "y": 420, "x": 680, "type": "mousemove", "message_id": 220}
{"sender": 5777, "msg_type": "MouseEvent", "y": 421, "x": 678, "type": "mousemove", "message_id": 221}
{"sender": 5777, "msg_type": "MouseEvent", "y": 423, "x": 674, "type": "mouseover", "message_id": 222}
{"sender": 5777, "msg_type": "MouseEvent", "y": 423, "x": 674, "type": "mouseover", "message_id": 223}
{"sender": 5777, "msg_type": "MouseEvent", "y": 423, "x": 674, "type": "mousemove", "message_id": 224}
{"sender": 5777, "msg_type": "MouseEvent", "y": 423, "x": 672, "type": "mouseover", "message_id": 225}
{"sender": 5777, "msg_type": "MouseEvent", "y": 423, "x": 672, "type": "mouseover", "message_id": 226}
{"sender": 5777, "msg_type": "MouseEvent", "y": 423, "x": 672, "type": "mousemove", "message_id": 227}
{"sender": 5777, "msg_type": "MouseEvent", "y": 425, "x": 669, "type": "mouseover", "message_id": 228}
{"sender": 5777, "msg_type": "MouseEvent", "y": 425, "x": 669, "type": "mouseover", "message_id": 229}
{"sender": 5777, "msg_type": "MouseEvent", "y": 425, "x": 669, "type": "mousemove", "message_id": 230}
{"sender": 5777, "msg_type": "MouseEvent", "y": 426, "x": 666, "type": "mouseover", "message_id": 232}
{"sender": 5777, "msg_type": "MouseEvent", "y": 426, "x": 666, "type": "mouseover", "message_id": 231}
{"sender": 5777, "msg_type": "MouseEvent", "y": 426, "x": 666, "type": "mousemove", "message_id": 233}
{"sender": 5777, "msg_type": "MouseEvent", "y": 427, "x": 663, "type": "mousemove", "message_id": 234}
{"sender": 5777, "msg_type": "MouseEvent", "y": 428, "x": 660, "type": "mousemove", "message_id": 235}
{"sender": 5777, "msg_type": "MouseEvent", "y": 429, "x": 659, "type": "mouseover", "message_id": 236}
{"sender": 5777, "msg_type": "MouseEvent", "y": 429, "x": 659, "type": "mouseover", "message_id": 237}
{"sender": 5777, "msg_type": "MouseEvent", "y": 429, "x": 659, "type": "mousemove", "message_id": 238}
{"sender": 5777, "msg_type": "MouseEvent", "y": 430, "x": 654, "type": "mouseover", "message_id": 239}
{"sender": 5777, "msg_type": "MouseEvent", "y": 430, "x": 654, "type": "mouseover", "message_id": 240}
{"sender": 5777, "msg_type": "MouseEvent", "y": 430, "x": 654, "type": "mousemove", "message_id": 241}
{"sender": 5777, "msg_type": "MouseEvent", "y": 431, "x": 651, "type": "mousemove", "message_id": 242}
{"sender": 5777, "msg_type": "MouseEvent", "y": 432, "x": 649, "type": "mousemove", "message_id": 243}
{"sender": 5777, "msg_type": "MouseEvent", "y": 433, "x": 647, "type": "mousemove", "message_id": 244}
{"sender": 5777, "msg_type": "MouseEvent", "y": 434, "x": 644, "type": "mousemove", "message_id": 245}
{"sender": 5777, "msg_type": "MouseEvent", "y": 435, "x": 640, "type": "mousemove", "message_id": 246}
{"sender": 5777, "msg_type": "MouseEvent", "y": 436, "x": 637, "type": "mousemove", "message_id": 247}
{"sender": 5777, "msg_type": "MouseEvent", "y": 437, "x": 634, "type": "mousemove", "message_id": 248}
{"sender": 5777, "msg_type": "MouseEvent", "y": 438, "x": 631, "type": "mousemove", "message_id": 249}
{"sender": 5777, "msg_type": "MouseEvent", "y": 439, "x": 627, "type": "mousemove", "message_id": 250}
{"sender": 5777, "msg_type": "MouseEvent", "y": 439, "x": 624, "type": "mousemove", "message_id": 251}
{"sender": 5777, "msg_type": "MouseEvent", "y": 440, "x": 616, "type": "mousemove", "message_id": 253}
{"sender": 5777, "msg_type": "MouseEvent", "y": 439, "x": 620, "type": "mousemove", "message_id": 252}
{"sender": 5777, "msg_type": "MouseEvent", "y": 440, "x": 611, "type": "mousemove", "message_id": 254}
{"sender": 5777, "msg_type": "MouseEvent", "y": 441, "x": 607, "type": "mousemove", "message_id": 255}
{"sender": 5777, "msg_type": "MouseEvent", "y": 441, "x": 603, "type": "mousemove", "message_id": 256}
{"sender": 5777, "msg_type": "MouseEvent", "y": 441, "x": 593, "type": "mousemove", "message_id": 258}
{"sender": 5777, "msg_type": "MouseEvent", "y": 441, "x": 598, "type": "mousemove", "message_id": 257}
{"sender": 5777, "msg_type": "MouseEvent", "y": 441, "x": 588, "type": "mousemove", "message_id": 259}
{"sender": 5777, "msg_type": "MouseEvent", "y": 441, "x": 583, "type": "mousemove", "message_id": 260}
{"sender": 5777, "msg_type": "MouseEvent", "y": 441, "x": 578, "type": "mousemove", "message_id": 261}
{"sender": 5777, "msg_type": "MouseEvent", "y": 441, "x": 573, "type": "mousemove", "message_id": 262}
{"sender": 5777, "msg_type": "MouseEvent", "y": 441, "x": 568, "type": "mousemove", "message_id": 263}
{"sender": 5777, "msg_type": "MouseEvent", "y": 441, "x": 563, "type": "mousemove", "message_id": 264}
{"sender": 5777, "msg_type": "MouseEvent", "y": 440, "x": 559, "type": "mousemove", "message_id": 265}
{"sender": 5777, "msg_type": "MouseEvent", "y": 438, "x": 555, "type": "mouseover", "message_id": 267}
{"sender": 5777, "msg_type": "MouseEvent", "y": 438, "x": 555, "type": "mouseover", "message_id": 266}
{"sender": 5777, "msg_type": "MouseEvent", "y": 438, "x": 555, "type": "mousemove", "message_id": 268}
{"sender": 5777, "msg_type": "MouseEvent", "y": 438, "x": 554, "type": "mouseover", "message_id": 269}
{"sender": 5777, "msg_type": "MouseEvent", "y": 438, "x": 554, "type": "mouseover", "message_id": 270}
{"sender": 5777, "msg_type": "MouseEvent", "y": 438, "x": 554, "type": "mousemove", "message_id": 271}
{"sender": 5777, "msg_type": "MouseEvent", "y": 439, "x": 551, "type": "mouseover", "message_id": 272}
{"sender": 5777, "msg_type": "MouseEvent", "y": 439, "x": 551, "type": "mouseover", "message_id": 273}
{"sender": 5777, "msg_type": "MouseEvent", "y": 439, "x": 551, "type": "mousemove", "message_id": 274}
{"sender": 5777, "msg_type": "MouseEvent", "y": 440, "x": 548, "type": "mousemove", "message_id": 275}
{"sender": 5777, "msg_type": "MouseEvent", "y": 442, "x": 543, "type": "mouseover", "message_id": 276}
{"sender": 5777, "msg_type": "MouseEvent", "y": 442, "x": 543, "type": "mouseover", "message_id": 277}
{"sender": 5777, "msg_type": "MouseEvent", "y": 442, "x": 543, "type": "mousemove", "message_id": 278}
{"sender": 5777, "msg_type": "MouseEvent", "y": 443, "x": 538, "type": "mouseover", "message_id": 279}
{"sender": 5777, "msg_type": "MouseEvent", "y": 443, "x": 538, "type": "mouseover", "message_id": 280}
{"sender": 5777, "msg_type": "MouseEvent", "y": 443, "x": 538, "type": "mousemove", "message_id": 281}
{"sender": 5777, "msg_type": "MouseEvent", "y": 445, "x": 534, "type": "mouseover", "message_id": 282}
{"sender": 5777, "msg_type": "MouseEvent", "y": 445, "x": 534, "type": "mouseover", "message_id": 283}
{"sender": 5777, "msg_type": "MouseEvent", "y": 446, "x": 528, "type": "mouseover", "message_id": 285}
{"sender": 5777, "msg_type": "MouseEvent", "y": 445, "x": 534, "type": "mousemove", "message_id": 284}
{"sender": 5777, "msg_type": "MouseEvent", "y": 446, "x": 528, "type": "mouseover", "message_id": 286}
{"sender": 5777, "msg_type": "MouseEvent", "y": 446, "x": 528, "type": "mousemove", "message_id": 287}
{"sender": 5777, "msg_type": "MouseEvent", "y": 448, "x": 518, "type": "mouseover", "message_id": 289}
{"sender": 5777, "msg_type": "MouseEvent", "y": 448, "x": 518, "type": "mouseover", "message_id": 288}
{"sender": 5777, "msg_type": "MouseEvent", "y": 448, "x": 518, "type": "mousemove", "message_id": 290}
{"sender": 5777, "msg_type": "MouseEvent", "y": 450, "x": 507, "type": "mousemove", "message_id": 291}
{"sender": 5777, "msg_type": "MouseEvent", "y": 451, "x": 494, "type": "mouseover", "message_id": 292}
{"sender": 5777, "msg_type": "MouseEvent", "y": 451, "x": 494, "type": "mouseover", "message_id": 293}
{"sender": 5777, "msg_type": "MouseEvent", "y": 451, "x": 494, "type": "mousemove", "message_id": 294}
{"sender": 5777, "msg_type": "MouseEvent", "y": 452, "x": 482, "type": "mousemove", "message_id": 295}
{"sender": 5777, "msg_type": "MouseEvent", "y": 452, "x": 468, "type": "mousemove", "message_id": 296}
{"sender": 5777, "msg_type": "MouseEvent", "y": 452, "x": 455, "type": "mousemove", "message_id": 297}
{"sender": 5777, "msg_type": "MouseEvent", "y": 452, "x": 442, "type": "mousemove", "message_id": 298}
{"sender": 5777, "msg_type": "MouseEvent", "y": 452, "x": 430, "type": "mousemove", "message_id": 299}
{"sender": 5777, "msg_type": "MouseEvent", "y": 449, "x": 418, "type": "mouseover", "message_id": 300}
{"sender": 5777, "msg_type": "MouseEvent", "y": 449, "x": 418, "type": "mouseover", "message_id": 301}
{"sender": 5777, "msg_type": "MouseEvent", "y": 449, "x": 418, "type": "mousemove", "message_id": 302}
{"sender": 5777, "msg_type": "MouseEvent", "y": 446, "x": 406, "type": "mousemove", "message_id": 303}
{"sender": 5777, "msg_type": "MouseEvent", "y": 443, "x": 394, "type": "mousemove", "message_id": 304}
{"sender": 5777, "msg_type": "MouseEvent", "y": 440, "x": 382, "type": "mousemove", "message_id": 305}
{"sender": 5777, "msg_type": "MouseEvent", "y": 436, "x": 371, "type": "mousemove", "message_id": 306}
{"sender": 5777, "msg_type": "MouseEvent", "y": 426, "x": 337, "type": "mousemove", "message_id": 309}
{"sender": 5777, "msg_type": "MouseEvent", "y": 434, "x": 359, "type": "mousemove", "message_id": 307}
{"sender": 5777, "msg_type": "MouseEvent", "y": 430, "x": 349, "type": "mousemove", "message_id": 308}
{"sender": 5777, "msg_type": "MouseEvent", "y": 422, "x": 325, "type": "mousemove", "message_id": 310}
{"sender": 5777, "msg_type": "MouseEvent", "y": 417, "x": 312, "type": "mousemove", "message_id": 311}
{"sender": 5777, "msg_type": "MouseEvent", "y": 411, "x": 301, "type": "mousemove", "message_id": 312}
{"sender": 5777, "msg_type": "MouseEvent", "y": 396, "x": 279, "type": "mousemove", "message_id": 314}
{"sender": 5777, "msg_type": "MouseEvent", "y": 404, "x": 290, "type": "mousemove", "message_id": 313}
{"sender": 5777, "msg_type": "MouseEvent", "y": 388, "x": 269, "type": "mousemove", "message_id": 315}
{"sender": 5777, "msg_type": "MouseEvent", "y": 379, "x": 260, "type": "mousemove", "message_id": 316}
{"sender": 5777, "msg_type": "MouseEvent", "y": 374, "x": 257, "type": "mousemove", "message_id": 317}
{"sender": 5777, "msg_type": "MouseEvent", "y": 366, "x": 250, "type": "mousemove", "message_id": 318}
{"sender": 5777, "msg_type": "MouseEvent", "y": 357, "x": 245, "type": "mousemove", "message_id": 319}
{"sender": 5777, "msg_type": "MouseEvent", "y": 340, "x": 239, "type": "mousemove", "message_id": 321}
{"sender": 5777, "msg_type": "MouseEvent", "y": 349, "x": 241, "type": "mousemove", "message_id": 320}
{"sender": 5777, "msg_type": "MouseEvent", "y": 333, "x": 237, "type": "mousemove", "message_id": 322}
{"sender": 5777, "msg_type": "MouseEvent", "y": 326, "x": 236, "type": "mouseover", "message_id": 323}
{"sender": 5777, "msg_type": "MouseEvent", "y": 326, "x": 236, "type": "mouseover", "message_id": 324}
{"sender": 5777, "msg_type": "MouseEvent", "y": 326, "x": 236, "type": "mousemove", "message_id": 325}
{"sender": 5777, "msg_type": "MouseEvent", "y": 324, "x": 235, "type": "mousemove", "message_id": 326}
{"sender": 5777, "msg_type": "MouseEvent", "y": 319, "x": 235, "type": "mousemove", "message_id": 327}
{"sender": 5777, "msg_type": "MouseEvent", "y": 313, "x": 235, "type": "mousemove", "message_id": 329}
{"sender": 5777, "msg_type": "MouseEvent", "y": 316, "x": 235, "type": "mousemove", "message_id": 328}
{"sender": 5777, "msg_type": "MouseEvent", "y": 313, "x": 235, "type": "mousemove", "message_id": 330}
{"sender": 5777, "msg_type": "MouseEvent", "y": 312, "x": 233, "type": "mouseover", "message_id": 331}
{"sender": 5777, "msg_type": "MouseEvent", "y": 312, "x": 233, "type": "mouseover", "message_id": 332}
{"sender": 5777, "msg_type": "MouseEvent", "y": 312, "x": 233, "type": "mousemove", "message_id": 333}
{"sender": 5777, "msg_type": "MouseEvent", "y": 310, "x": 232, "type": "mouseover", "message_id": 334}
{"sender": 5777, "msg_type": "MouseEvent", "y": 310, "x": 232, "type": "mouseover", "message_id": 335}
{"sender": 5777, "msg_type": "MouseEvent", "y": 310, "x": 232, "type": "mousemove", "message_id": 336}
{"sender": 5777, "msg_type": "MouseEvent", "y": 308, "x": 231, "type": "mousemove", "message_id": 337}
{"sender": 5777, "msg_type": "MouseEvent", "y": 306, "x": 229, "type": "mouseover", "message_id": 338}
{"sender": 5777, "msg_type": "MouseEvent", "y": 306, "x": 229, "type": "mouseover", "message_id": 339}
{"sender": 5777, "msg_type": "MouseEvent", "y": 306, "x": 229, "type": "mousemove", "message_id": 340}
{"sender": 5777, "msg_type": "MouseEvent", "y": 304, "x": 228, "type": "mouseover", "message_id": 341}
{"sender": 5777, "msg_type": "MouseEvent", "y": 304, "x": 228, "type": "mouseover", "message_id": 342}
{"sender": 5777, "msg_type": "MouseEvent", "y": 304, "x": 228, "type": "mousemove", "message_id": 343}
{"sender": 5777, "msg_type": "MouseEvent", "y": 302, "x": 227, "type": "mousemove", "message_id": 344}
{"sender": 5777, "msg_type": "MouseEvent", "y": 294, "x": 223, "type": "mouseover", "message_id": 345}
{"sender": 5777, "msg_type": "MouseEvent", "y": 294, "x": 223, "type": "mouseover", "message_id": 346}
{"sender": 5777, "msg_type": "MouseEvent", "y": 294, "x": 223, "type": "mousemove", "message_id": 347}
{"sender": 5777, "msg_type": "MouseEvent", "y": 286, "x": 220, "type": "mousemove", "message_id": 348}
{"sender": 5777, "msg_type": "MouseEvent", "y": 277, "x": 217, "type": "mousemove", "message_id": 349}
{"sender": 5777, "msg_type": "MouseEvent", "y": 268, "x": 215, "type": "mousemove", "message_id": 350}
{"sender": 5777, "msg_type": "MouseEvent", "y": 257, "x": 211, "type": "mousemove", "message_id": 351}
{"sender": 5777, "msg_type": "MouseEvent", "y": 245, "x": 208, "type": "mousemove", "message_id": 352}
{"sender": 5777, "msg_type": "MouseEvent", "y": 233, "x": 205, "type": "mousemove", "message_id": 353}
{"sender": 5777, "msg_type": "MouseEvent", "y": 221, "x": 202, "type": "mousemove", "message_id": 354}
{"sender": 5777, "msg_type": "MouseEvent", "y": 215, "x": 201, "type": "mouseover", "message_id": 355}
{"sender": 5777, "msg_type": "MouseEvent", "y": 215, "x": 201, "type": "mouseover", "message_id": 356}
{"sender": 5777, "msg_type": "MouseEvent", "y": 215, "x": 201, "type": "mousemove", "message_id": 357}
{"sender": 5777, "msg_type": "MouseEvent", "y": 205, "x": 199, "type": "mouseover", "message_id": 358}
{"sender": 5777, "msg_type": "MouseEvent", "y": 205, "x": 199, "type": "mouseover", "message_id": 359}
{"sender": 5777, "msg_type": "MouseEvent", "y": 205, "x": 199, "type": "mousemove", "message_id": 360}
{"sender": 5777, "msg_type": "MouseEvent", "y": 195, "x": 197, "type": "mousemove", "message_id": 361}
{"sender": 5777, "msg_type": "MouseEvent", "y": 186, "x": 195, "type": "mousemove", "message_id": 362}
{"sender": 5777, "msg_type": "MouseEvent", "y": 178, "x": 194, "type": "mouseover", "message_id": 363}
{"sender": 5777, "msg_type": "MouseEvent", "y": 178, "x": 194, "type": "mouseover", "message_id": 364}
{"sender": 5777, "msg_type": "MouseEvent", "y": 178, "x": 194, "type": "mousemove", "message_id": 365}
{"sender": 5777, "msg_type": "MouseEvent", "y": 170, "x": 192, "type": "mouseover", "message_id": 366}
{"sender": 5777, "msg_type": "MouseEvent", "y": 170, "x": 192, "type": "mouseover", "message_id": 367}
{"sender": 5777, "msg_type": "MouseEvent", "y": 170, "x": 192, "type": "mousemove", "message_id": 368}
{"sender": 5777, "msg_type": "MouseEvent", "y": 162, "x": 192, "type": "mouseover", "message_id": 369}
{"sender": 5777, "msg_type": "MouseEvent", "y": 162, "x": 192, "type": "mousemove", "message_id": 371}
{"sender": 5777, "msg_type": "MouseEvent", "y": 162, "x": 192, "type": "mouseover", "message_id": 370}
{"sender": 5777, "msg_type": "MouseEvent", "y": 157, "x": 191, "type": "mousemove", "message_id": 372}
{"sender": 5777, "msg_type": "MouseEvent", "y": 150, "x": 190, "type": "mousemove", "message_id": 373}
{"sender": 5777, "msg_type": "MouseEvent", "y": 144, "x": 190, "type": "mousemove", "message_id": 374}
{"sender": 5777, "msg_type": "MouseEvent", "y": 139, "x": 190, "type": "mousemove", "message_id": 375}
{"sender": 5777, "msg_type": "MouseEvent", "y": 134, "x": 189, "type": "mousemove", "message_id": 376}
{"sender": 5777, "msg_type": "MouseEvent", "y": 129, "x": 189, "type": "mousemove", "message_id": 377}
{"sender": 5777, "msg_type": "MouseEvent", "y": 125, "x": 189, "type": "mousemove", "message_id": 378}
{"sender": 5777, "msg_type": "MouseEvent", "y": 121, "x": 189, "type": "mousemove", "message_id": 379}
{"sender": 5777, "msg_type": "MouseEvent", "y": 119, "x": 189, "type": "mousemove", "message_id": 380}
{"sender": 5777, "msg_type": "MouseEvent", "y": 116, "x": 189, "type": "mousemove", "message_id": 381}
{"sender": 5777, "msg_type": "MouseEvent", "y": 113, "x": 189, "type": "mousemove", "message_id": 382}
{"sender": 5777, "msg_type": "MouseEvent", "y": 107, "x": 189, "type": "mousemove", "message_id": 384}
{"sender": 5777, "msg_type": "MouseEvent", "y": 104, "x": 189, "type": "mousemove", "message_id": 385}
{"sender": 5777, "msg_type": "MouseEvent", "y": 109, "x": 189, "type": "mousemove", "message_id": 383}
{"sender": 5777, "msg_type": "MouseEvent", "y": 102, "x": 189, "type": "mousemove", "message_id": 386}
{"sender": 5777, "msg_type": "MouseEvent", "y": 100, "x": 189, "type": "mousemove", "message_id": 387}
{"sender": 5777, "msg_type": "MouseEvent", "y": 98, "x": 189, "type": "mousemove", "message_id": 388}
{"sender": 5777, "msg_type": "MouseEvent", "y": 95, "x": 189, "type": "mousemove", "message_id": 389}
{"sender": 5777, "msg_type": "MouseEvent", "y": 93, "x": 189, "type": "mousemove", "message_id": 390}
{"sender": 5777, "msg_type": "MouseEvent", "y": 91, "x": 189, "type": "mousemove", "message_id": 391}
{"sender": 5777, "msg_type": "MouseEvent", "y": 87, "x": 189, "type": "mousemove", "message_id": 392}
{"sender": 5777, "msg_type": "MouseEvent", "y": 86, "x": 189, "type": "mousemove", "message_id": 393}
{"sender": 5777, "msg_type": "MouseEvent", "y": 82, "x": 189, "type": "mousemove", "message_id": 394}
{"sender": 5777, "msg_type": "MouseEvent", "y": 81, "x": 189, "type": "mousemove", "message_id": 395}
{"sender": 5777, "msg_type": "MouseEvent", "y": 78, "x": 189, "type": "mousemove", "message_id": 396}
{"sender": 5777, "msg_type": "MouseEvent", "y": 75, "x": 189, "type": "mousemove", "message_id": 397}
{"sender": 5777, "msg_type": "MouseEvent", "y": 73, "x": 189, "type": "mousemove", "message_id": 398}
{"sender": 5777, "msg_type": "MouseEvent", "y": 71, "x": 189, "type": "mousemove", "message_id": 399}
{"sender": 5777, "msg_type": "MouseEvent", "y": 69, "x": 189, "type": "mousemove", "message_id": 400}
{"sender": 5777, "msg_type": "MouseEvent", "y": 67, "x": 189, "type": "mousemove", "message_id": 401}
{"sender": 5777, "msg_type": "MouseEvent", "y": 64, "x": 189, "type": "mousemove", "message_id": 403}
{"sender": 5777, "msg_type": "MouseEvent", "y": 63, "x": 189, "type": "mousemove", "message_id": 404}
{"sender": 5777, "msg_type": "MouseEvent", "y": 66, "x": 189, "type": "mousemove", "message_id": 402}
{"sender": 5777, "msg_type": "MouseEvent", "y": 62, "x": 189, "type": "mousemove", "message_id": 405}
{"sender": 5777, "msg_type": "MouseEvent", "y": 61, "x": 189, "type": "mousemove", "message_id": 406}
{"sender": 5777, "msg_type": "MouseEvent", "y": 60, "x": 188, "type": "mousemove", "message_id": 407}
{"sender": 5777, "msg_type": "MouseEvent", "y": 59, "x": 188, "type": "mousemove", "message_id": 408}
{"sender": 5777, "msg_type": "MouseEvent", "y": 58, "x": 188, "type": "mousemove", "message_id": 409}
{"sender": 5777, "msg_type": "MouseEvent", "y": 58, "x": 188, "type": "mousemove", "message_id": 410}
{"sender": 5777, "msg_type": "MouseEvent", "y": 58, "x": 188, "type": "mousemove", "message_id": 411}
{"sender": 5777, "msg_type": "MouseEvent", "y": 57, "x": 187, "type": "mousemove", "message_id": 412}
{"sender": 5777, "msg_type": "MouseEvent", "y": 56, "x": 187, "type": "mousemove", "message_id": 413}
{"sender": 5777, "msg_type": "MouseEvent", "y": 56, "x": 187, "type": "mousemove", "message_id": 414}
{"sender": 5777, "msg_type": "MouseEvent", "y": 56, "x": 187, "type": "mousemove", "message_id": 415}
{"sender": 5777, "msg_type": "MouseEvent", "y": 55, "x": 187, "type": "mousemove", "message_id": 416}
{"sender": 5777, "msg_type": "MouseEvent", "y": 55, "x": 187, "type": "mousemove", "message_id": 417}
{"sender": 5777, "msg_type": "MouseEvent", "y": 54, "x": 187, "type": "mousemove", "message_id": 418}
{"sender": 5777, "msg_type": "MouseEvent", "y": 54, "x": 187, "type": "mousemove", "message_id": 419}
{"sender": 5777, "msg_type": "MouseEvent", "y": 53, "x": 187, "type": "mousemove", "message_id": 420}
{"sender": 5777, "msg_type": "MouseEvent", "y": 53, "x": 187, "type": "mousemove", "message_id": 421}
{"sender": 5777, "msg_type": "MouseEvent", "y": 53, "x": 186, "type": "mousemove", "message_id": 422}
{"sender": 5777, "msg_type": "MouseEvent", "y": 52, "x": 186, "type": "mousemove", "message_id": 423}
{"sender": 5777, "msg_type": "MouseEvent", "y": 52, "x": 186, "type": "mousemove", "message_id": 424}
{"sender": 5777, "msg_type": "MouseEvent", "y": 51, "x": 186, "type": "mousemove", "message_id": 426}

View File

@ -0,0 +1,826 @@
{"panX": -172.02262700582662, "panY": -71.0005701449295, "scale": 1.9541018766756038, "sender": 3718, "msg_type": "ViewPort", "message_id": 0}
{"sender": 3718, "msg_type": "MouseEvent", "y": 37, "x": 201, "type": "mousemove", "message_id": 511}
{"sender": 3718, "msg_type": "MouseEvent", "y": 38, "x": 201, "type": "mousemove", "message_id": 512}
{"sender": 3718, "msg_type": "MouseEvent", "y": 40, "x": 201, "type": "mousemove", "message_id": 513}
{"sender": 3718, "msg_type": "MouseEvent", "y": 42, "x": 201, "type": "mousemove", "message_id": 514}
{"sender": 3718, "msg_type": "MouseEvent", "y": 45, "x": 202, "type": "mousemove", "message_id": 515}
{"sender": 3718, "msg_type": "MouseEvent", "y": 48, "x": 202, "type": "mousemove", "message_id": 516}
{"sender": 3718, "msg_type": "MouseEvent", "y": 51, "x": 202, "type": "mousemove", "message_id": 517}
{"sender": 3718, "msg_type": "MouseEvent", "y": 56, "x": 202, "type": "mousemove", "message_id": 518}
{"sender": 3718, "msg_type": "MouseEvent", "y": 62, "x": 203, "type": "mousemove", "message_id": 519}
{"sender": 3718, "msg_type": "MouseEvent", "y": 71, "x": 203, "type": "mousemove", "message_id": 520}
{"sender": 3718, "msg_type": "MouseEvent", "y": 82, "x": 204, "type": "mousemove", "message_id": 521}
{"sender": 3718, "msg_type": "MouseEvent", "y": 98, "x": 204, "type": "mouseover", "message_id": 522}
{"sender": 3718, "msg_type": "MouseEvent", "y": 98, "x": 204, "type": "mouseover", "message_id": 523}
{"sender": 3718, "msg_type": "MouseEvent", "y": 98, "x": 204, "type": "mousemove", "message_id": 524}
{"sender": 3718, "msg_type": "MouseEvent", "y": 118, "x": 206, "type": "mousemove", "message_id": 525}
{"sender": 3718, "msg_type": "MouseEvent", "y": 140, "x": 206, "type": "mousemove", "message_id": 526}
{"sender": 3718, "msg_type": "MouseEvent", "y": 162, "x": 204, "type": "mousemove", "message_id": 527}
{"sender": 3718, "msg_type": "MouseEvent", "y": 177, "x": 200, "type": "mousemove", "message_id": 528}
{"sender": 3718, "msg_type": "MouseEvent", "y": 197, "x": 193, "type": "mousemove", "message_id": 529}
{"sender": 3718, "msg_type": "MouseEvent", "y": 217, "x": 186, "type": "mousemove", "message_id": 530}
{"sender": 3718, "msg_type": "MouseEvent", "y": 235, "x": 178, "type": "mousemove", "message_id": 531}
{"sender": 3718, "msg_type": "MouseEvent", "y": 253, "x": 169, "type": "mousemove", "message_id": 532}
{"sender": 3718, "msg_type": "MouseEvent", "y": 269, "x": 160, "type": "mousemove", "message_id": 533}
{"sender": 3718, "msg_type": "MouseEvent", "y": 282, "x": 152, "type": "mousemove", "message_id": 534}
{"sender": 3718, "msg_type": "MouseEvent", "y": 294, "x": 144, "type": "mousemove", "message_id": 535}
{"sender": 3718, "msg_type": "MouseEvent", "y": 304, "x": 138, "type": "mousemove", "message_id": 536}
{"sender": 3718, "msg_type": "MouseEvent", "y": 312, "x": 133, "type": "mousemove", "message_id": 537}
{"sender": 3718, "msg_type": "MouseEvent", "y": 318, "x": 130, "type": "mouseover", "message_id": 538}
{"sender": 3718, "msg_type": "MouseEvent", "y": 318, "x": 130, "type": "mouseover", "message_id": 539}
{"sender": 3718, "msg_type": "MouseEvent", "y": 318, "x": 130, "type": "mousemove", "message_id": 540}
{"sender": 3718, "msg_type": "MouseEvent", "y": 324, "x": 127, "type": "mousemove", "message_id": 541}
{"sender": 3718, "msg_type": "MouseEvent", "y": 327, "x": 126, "type": "mouseover", "message_id": 542}
{"sender": 3718, "msg_type": "MouseEvent", "y": 327, "x": 126, "type": "mouseover", "message_id": 543}
{"sender": 3718, "msg_type": "MouseEvent", "y": 327, "x": 126, "type": "mousemove", "message_id": 544}
{"sender": 3718, "msg_type": "MouseEvent", "y": 329, "x": 125, "type": "mousemove", "message_id": 545}
{"sender": 3718, "msg_type": "MouseEvent", "y": 330, "x": 125, "type": "mousemove", "message_id": 546}
{"sender": 3718, "msg_type": "MouseEvent", "y": 330, "x": 125, "type": "mousemove", "message_id": 547}
{"sender": 3718, "msg_type": "MouseEvent", "y": 330, "x": 125, "type": "mousemove", "message_id": 548}
{"sender": 3718, "msg_type": "MouseEvent", "y": 330, "x": 124, "type": "mousemove", "message_id": 549}
{"sender": 3718, "msg_type": "MouseEvent", "y": 330, "x": 124, "type": "mousemove", "message_id": 550}
{"sender": 3718, "msg_type": "MouseEvent", "y": 330, "x": 124, "type": "mousemove", "message_id": 551}
{"sender": 3718, "msg_type": "MouseEvent", "y": 330, "x": 124, "type": "mousedown", "message_id": 552}
{"sender": 3718, "msg_type": "MouseEvent", "y": 330, "x": 124, "type": "mouseup", "message_id": 553}
{"sender": 3718, "msg_type": "KeyEvent", "shiftKey": false, "message_id": 554, "altKey": false, "metaKey": false, "key": "s", "ctrlKey": false, "type": "keydown", "keyCode": 83}
{"sender": 3718, "msg_type": "MouseEvent", "y": 331, "x": 125, "type": "mousemove", "message_id": 556}
{"sender": 3718, "msg_type": "MouseEvent", "y": 331, "x": 127, "type": "mouseover", "message_id": 557}
{"sender": 3718, "msg_type": "MouseEvent", "y": 331, "x": 127, "type": "mousemove", "message_id": 559}
{"sender": 3718, "msg_type": "MouseEvent", "y": 331, "x": 127, "type": "mouseover", "message_id": 558}
{"sender": 3718, "msg_type": "MouseEvent", "y": 331, "x": 130, "type": "mousemove", "message_id": 560}
{"sender": 3718, "msg_type": "MouseEvent", "y": 332, "x": 136, "type": "mousemove", "message_id": 561}
{"sender": 3718, "msg_type": "MouseEvent", "y": 332, "x": 142, "type": "mousemove", "message_id": 562}
{"sender": 3718, "msg_type": "MouseEvent", "y": 333, "x": 153, "type": "mousemove", "message_id": 563}
{"sender": 3718, "msg_type": "MouseEvent", "y": 334, "x": 169, "type": "mouseover", "message_id": 564}
{"sender": 3718, "msg_type": "MouseEvent", "y": 334, "x": 169, "type": "mouseover", "message_id": 565}
{"sender": 3718, "msg_type": "MouseEvent", "y": 334, "x": 169, "type": "mousemove", "message_id": 566}
{"sender": 3718, "msg_type": "MouseEvent", "y": 334, "x": 194, "type": "mouseover", "message_id": 567}
{"sender": 3718, "msg_type": "MouseEvent", "y": 334, "x": 194, "type": "mouseover", "message_id": 568}
{"sender": 3718, "msg_type": "MouseEvent", "y": 334, "x": 194, "type": "mousemove", "message_id": 569}
{"sender": 3718, "msg_type": "MouseEvent", "y": 334, "x": 231, "type": "mouseover", "message_id": 570}
{"sender": 3718, "msg_type": "MouseEvent", "y": 334, "x": 231, "type": "mouseover", "message_id": 571}
{"sender": 3718, "msg_type": "MouseEvent", "y": 334, "x": 231, "type": "mousemove", "message_id": 572}
{"sender": 3718, "msg_type": "MouseEvent", "y": 333, "x": 277, "type": "mousemove", "message_id": 573}
{"sender": 3718, "msg_type": "MouseEvent", "y": 334, "x": 321, "type": "mousemove", "message_id": 574}
{"sender": 3718, "msg_type": "MouseEvent", "y": 334, "x": 360, "type": "mousemove", "message_id": 575}
{"sender": 3718, "msg_type": "MouseEvent", "y": 337, "x": 396, "type": "mousemove", "message_id": 576}
{"sender": 3718, "msg_type": "MouseEvent", "y": 338, "x": 429, "type": "mouseover", "message_id": 577}
{"sender": 3718, "msg_type": "MouseEvent", "y": 338, "x": 429, "type": "mouseover", "message_id": 578}
{"sender": 3718, "msg_type": "MouseEvent", "y": 338, "x": 429, "type": "mousemove", "message_id": 579}
{"sender": 3718, "msg_type": "MouseEvent", "y": 340, "x": 455, "type": "mouseover", "message_id": 580}
{"sender": 3718, "msg_type": "MouseEvent", "y": 340, "x": 455, "type": "mouseover", "message_id": 581}
{"sender": 3718, "msg_type": "MouseEvent", "y": 343, "x": 487, "type": "mousemove", "message_id": 583}
{"sender": 3718, "msg_type": "MouseEvent", "y": 340, "x": 455, "type": "mousemove", "message_id": 582}
{"sender": 3718, "msg_type": "MouseEvent", "y": 344, "x": 516, "type": "mousemove", "message_id": 584}
{"sender": 3718, "msg_type": "MouseEvent", "y": 345, "x": 533, "type": "mousemove", "message_id": 585}
{"sender": 3718, "msg_type": "MouseEvent", "y": 345, "x": 551, "type": "mousemove", "message_id": 586}
{"sender": 3718, "msg_type": "MouseEvent", "y": 344, "x": 561, "type": "mouseover", "message_id": 587}
{"sender": 3718, "msg_type": "MouseEvent", "y": 344, "x": 561, "type": "mouseover", "message_id": 588}
{"sender": 3718, "msg_type": "MouseEvent", "y": 344, "x": 561, "type": "mousemove", "message_id": 589}
{"sender": 3718, "msg_type": "MouseEvent", "y": 344, "x": 564, "type": "mousemove", "message_id": 590}
{"sender": 3718, "msg_type": "MouseEvent", "y": 344, "x": 564, "type": "mouseover", "message_id": 591}
{"sender": 3718, "msg_type": "MouseEvent", "y": 344, "x": 564, "type": "mouseover", "message_id": 592}
{"sender": 3718, "msg_type": "MouseEvent", "y": 344, "x": 564, "type": "mousemove", "message_id": 593}
{"sender": 3718, "msg_type": "MouseEvent", "y": 344, "x": 564, "type": "mousedown", "message_id": 594}
{"sender": 3718, "msg_type": "MouseEvent", "y": 344, "x": 564, "type": "mouseup", "message_id": 595}
{"sender": 3718, "msg_type": "MouseEvent", "y": 344, "x": 564, "type": "mousemove", "message_id": 596}
{"sender": 3718, "msg_type": "MouseEvent", "y": 344, "x": 563, "type": "mousemove", "message_id": 597}
{"sender": 3718, "msg_type": "MouseEvent", "y": 344, "x": 563, "type": "mousemove", "message_id": 598}
{"sender": 3718, "msg_type": "MouseEvent", "y": 344, "x": 563, "type": "mousemove", "message_id": 599}
{"sender": 3718, "msg_type": "KeyEvent", "shiftKey": false, "message_id": 600, "altKey": false, "metaKey": false, "key": "s", "ctrlKey": false, "type": "keydown", "keyCode": 83}
{"sender": 3718, "msg_type": "MouseEvent", "y": 344, "x": 563, "type": "mousemove", "message_id": 602}
{"sender": 3718, "msg_type": "MouseEvent", "y": 344, "x": 563, "type": "mousemove", "message_id": 603}
{"sender": 3718, "msg_type": "MouseEvent", "y": 344, "x": 562, "type": "mousemove", "message_id": 604}
{"sender": 3718, "msg_type": "MouseEvent", "y": 343, "x": 561, "type": "mousemove", "message_id": 605}
{"sender": 3718, "msg_type": "MouseEvent", "y": 341, "x": 559, "type": "mouseover", "message_id": 606}
{"sender": 3718, "msg_type": "MouseEvent", "y": 341, "x": 559, "type": "mouseover", "message_id": 607}
{"sender": 3718, "msg_type": "MouseEvent", "y": 340, "x": 558, "type": "mouseover", "message_id": 609}
{"sender": 3718, "msg_type": "MouseEvent", "y": 340, "x": 558, "type": "mousemove", "message_id": 611}
{"sender": 3718, "msg_type": "MouseEvent", "y": 341, "x": 559, "type": "mousemove", "message_id": 608}
{"sender": 3718, "msg_type": "MouseEvent", "y": 338, "x": 555, "type": "mouseover", "message_id": 612}
{"sender": 3718, "msg_type": "MouseEvent", "y": 340, "x": 558, "type": "mouseover", "message_id": 610}
{"sender": 3718, "msg_type": "MouseEvent", "y": 338, "x": 555, "type": "mouseover", "message_id": 613}
{"sender": 3718, "msg_type": "MouseEvent", "y": 338, "x": 555, "type": "mousemove", "message_id": 614}
{"sender": 3718, "msg_type": "MouseEvent", "y": 337, "x": 553, "type": "mouseover", "message_id": 616}
{"sender": 3718, "msg_type": "MouseEvent", "y": 337, "x": 553, "type": "mouseover", "message_id": 615}
{"sender": 3718, "msg_type": "MouseEvent", "y": 337, "x": 553, "type": "mousemove", "message_id": 617}
{"sender": 3718, "msg_type": "MouseEvent", "y": 331, "x": 549, "type": "mouseover", "message_id": 618}
{"sender": 3718, "msg_type": "MouseEvent", "y": 331, "x": 549, "type": "mousemove", "message_id": 620}
{"sender": 3718, "msg_type": "MouseEvent", "y": 331, "x": 549, "type": "mouseover", "message_id": 619}
{"sender": 3718, "msg_type": "MouseEvent", "y": 322, "x": 542, "type": "mousemove", "message_id": 621}
{"sender": 3718, "msg_type": "MouseEvent", "y": 309, "x": 533, "type": "mouseover", "message_id": 622}
{"sender": 3718, "msg_type": "MouseEvent", "y": 309, "x": 533, "type": "mouseover", "message_id": 623}
{"sender": 3718, "msg_type": "MouseEvent", "y": 309, "x": 533, "type": "mousemove", "message_id": 624}
{"sender": 3718, "msg_type": "MouseEvent", "y": 297, "x": 526, "type": "mouseover", "message_id": 625}
{"sender": 3718, "msg_type": "MouseEvent", "y": 297, "x": 526, "type": "mouseover", "message_id": 626}
{"sender": 3718, "msg_type": "MouseEvent", "y": 297, "x": 526, "type": "mousemove", "message_id": 627}
{"sender": 3718, "msg_type": "MouseEvent", "y": 289, "x": 521, "type": "mousemove", "message_id": 628}
{"sender": 3718, "msg_type": "MouseEvent", "y": 282, "x": 517, "type": "mousemove", "message_id": 629}
{"sender": 3718, "msg_type": "MouseEvent", "y": 277, "x": 514, "type": "mouseover", "message_id": 630}
{"sender": 3718, "msg_type": "MouseEvent", "y": 277, "x": 514, "type": "mouseover", "message_id": 631}
{"sender": 3718, "msg_type": "MouseEvent", "y": 277, "x": 514, "type": "mousemove", "message_id": 632}
{"sender": 3718, "msg_type": "MouseEvent", "y": 274, "x": 512, "type": "mousemove", "message_id": 633}
{"sender": 3718, "msg_type": "MouseEvent", "y": 271, "x": 509, "type": "mousemove", "message_id": 634}
{"sender": 3718, "msg_type": "MouseEvent", "y": 267, "x": 507, "type": "mousemove", "message_id": 635}
{"sender": 3718, "msg_type": "MouseEvent", "y": 262, "x": 504, "type": "mousemove", "message_id": 636}
{"sender": 3718, "msg_type": "MouseEvent", "y": 257, "x": 501, "type": "mouseover", "message_id": 638}
{"sender": 3718, "msg_type": "MouseEvent", "y": 257, "x": 501, "type": "mouseover", "message_id": 637}
{"sender": 3718, "msg_type": "MouseEvent", "y": 251, "x": 498, "type": "mousemove", "message_id": 640}
{"sender": 3718, "msg_type": "MouseEvent", "y": 257, "x": 501, "type": "mousemove", "message_id": 639}
{"sender": 3718, "msg_type": "MouseEvent", "y": 245, "x": 494, "type": "mousemove", "message_id": 641}
{"sender": 3718, "msg_type": "MouseEvent", "y": 240, "x": 491, "type": "mouseover", "message_id": 642}
{"sender": 3718, "msg_type": "MouseEvent", "y": 240, "x": 491, "type": "mouseover", "message_id": 643}
{"sender": 3718, "msg_type": "MouseEvent", "y": 240, "x": 491, "type": "mousemove", "message_id": 644}
{"sender": 3718, "msg_type": "MouseEvent", "y": 234, "x": 486, "type": "mouseover", "message_id": 645}
{"sender": 3718, "msg_type": "MouseEvent", "y": 234, "x": 486, "type": "mousemove", "message_id": 647}
{"sender": 3718, "msg_type": "MouseEvent", "y": 234, "x": 486, "type": "mouseover", "message_id": 646}
{"sender": 3718, "msg_type": "MouseEvent", "y": 227, "x": 480, "type": "mousemove", "message_id": 648}
{"sender": 3718, "msg_type": "MouseEvent", "y": 221, "x": 473, "type": "mousemove", "message_id": 649}
{"sender": 3718, "msg_type": "MouseEvent", "y": 215, "x": 465, "type": "mouseover", "message_id": 650}
{"sender": 3718, "msg_type": "MouseEvent", "y": 215, "x": 465, "type": "mouseover", "message_id": 651}
{"sender": 3718, "msg_type": "MouseEvent", "y": 215, "x": 465, "type": "mousemove", "message_id": 652}
{"sender": 3718, "msg_type": "MouseEvent", "y": 207, "x": 455, "type": "mousemove", "message_id": 654}
{"sender": 3718, "msg_type": "MouseEvent", "y": 210, "x": 459, "type": "mousemove", "message_id": 653}
{"sender": 3718, "msg_type": "MouseEvent", "y": 205, "x": 454, "type": "mouseover", "message_id": 655}
{"sender": 3718, "msg_type": "MouseEvent", "y": 205, "x": 454, "type": "mouseover", "message_id": 656}
{"sender": 3718, "msg_type": "MouseEvent", "y": 205, "x": 454, "type": "mousemove", "message_id": 657}
{"sender": 3718, "msg_type": "MouseEvent", "y": 204, "x": 454, "type": "mousemove", "message_id": 658}
{"sender": 3718, "msg_type": "MouseEvent", "y": 204, "x": 454, "type": "mousemove", "message_id": 659}
{"sender": 3718, "msg_type": "MouseEvent", "y": 204, "x": 454, "type": "mousedown", "message_id": 660}
{"sender": 3718, "msg_type": "MouseEvent", "y": 203, "x": 454, "type": "mousemove", "message_id": 661}
{"sender": 3718, "msg_type": "MouseEvent", "y": 202, "x": 454, "type": "mousemove", "message_id": 662}
{"sender": 3718, "msg_type": "MouseEvent", "y": 201, "x": 454, "type": "mousemove", "message_id": 663}
{"sender": 3718, "msg_type": "MouseEvent", "y": 200, "x": 453, "type": "mousemove", "message_id": 664}
{"sender": 3718, "msg_type": "MouseEvent", "y": 198, "x": 453, "type": "mousemove", "message_id": 665}
{"sender": 3718, "msg_type": "MouseEvent", "y": 196, "x": 452, "type": "mousemove", "message_id": 666}
{"sender": 3718, "msg_type": "MouseEvent", "y": 196, "x": 452, "type": "mouseup", "message_id": 667}
{"sender": 3718, "msg_type": "MouseEvent", "y": 195, "x": 451, "type": "mousemove", "message_id": 668}
{"sender": 3718, "msg_type": "MouseEvent", "y": 192, "x": 449, "type": "mouseover", "message_id": 669}
{"sender": 3718, "msg_type": "MouseEvent", "y": 192, "x": 449, "type": "mouseover", "message_id": 670}
{"sender": 3718, "msg_type": "MouseEvent", "y": 192, "x": 449, "type": "mousemove", "message_id": 671}
{"sender": 3718, "msg_type": "MouseEvent", "y": 188, "x": 445, "type": "mousemove", "message_id": 672}
{"sender": 3718, "msg_type": "MouseEvent", "y": 184, "x": 439, "type": "mousemove", "message_id": 673}
{"sender": 3718, "msg_type": "MouseEvent", "y": 181, "x": 435, "type": "mousemove", "message_id": 674}
{"sender": 3718, "msg_type": "MouseEvent", "y": 179, "x": 428, "type": "mouseover", "message_id": 675}
{"sender": 3718, "msg_type": "MouseEvent", "y": 179, "x": 428, "type": "mouseover", "message_id": 676}
{"sender": 3718, "msg_type": "MouseEvent", "y": 179, "x": 428, "type": "mousemove", "message_id": 677}
{"sender": 3718, "msg_type": "MouseEvent", "y": 177, "x": 422, "type": "mouseover", "message_id": 679}
{"sender": 3718, "msg_type": "MouseEvent", "y": 177, "x": 422, "type": "mouseover", "message_id": 678}
{"sender": 3718, "msg_type": "MouseEvent", "y": 176, "x": 416, "type": "mouseover", "message_id": 681}
{"sender": 3718, "msg_type": "MouseEvent", "y": 177, "x": 422, "type": "mousemove", "message_id": 680}
{"sender": 3718, "msg_type": "MouseEvent", "y": 176, "x": 416, "type": "mouseover", "message_id": 682}
{"sender": 3718, "msg_type": "MouseEvent", "y": 176, "x": 416, "type": "mousemove", "message_id": 683}
{"sender": 3718, "msg_type": "MouseEvent", "y": 175, "x": 410, "type": "mousemove", "message_id": 684}
{"sender": 3718, "msg_type": "MouseEvent", "y": 173, "x": 402, "type": "mousemove", "message_id": 686}
{"sender": 3718, "msg_type": "MouseEvent", "y": 174, "x": 406, "type": "mousemove", "message_id": 685}
{"sender": 3718, "msg_type": "MouseEvent", "y": 173, "x": 400, "type": "mousemove", "message_id": 687}
{"sender": 3718, "msg_type": "MouseEvent", "y": 173, "x": 399, "type": "mouseover", "message_id": 688}
{"sender": 3718, "msg_type": "MouseEvent", "y": 173, "x": 399, "type": "mouseover", "message_id": 689}
{"sender": 3718, "msg_type": "MouseEvent", "y": 173, "x": 399, "type": "mousemove", "message_id": 691}
{"sender": 3718, "msg_type": "MouseEvent", "y": 173, "x": 399, "type": "mousemove", "message_id": 690}
{"sender": 3718, "msg_type": "MouseEvent", "y": 173, "x": 398, "type": "mousemove", "message_id": 692}
{"sender": 3718, "msg_type": "MouseEvent", "y": 173, "x": 397, "type": "mousemove", "message_id": 693}
{"sender": 3718, "msg_type": "MouseEvent", "y": 172, "x": 396, "type": "mousemove", "message_id": 694}
{"sender": 3718, "msg_type": "MouseEvent", "y": 172, "x": 394, "type": "mouseover", "message_id": 695}
{"sender": 3718, "msg_type": "MouseEvent", "y": 172, "x": 394, "type": "mouseover", "message_id": 696}
{"sender": 3718, "msg_type": "MouseEvent", "y": 172, "x": 394, "type": "mousemove", "message_id": 697}
{"sender": 3718, "msg_type": "MouseEvent", "y": 172, "x": 393, "type": "mouseover", "message_id": 698}
{"sender": 3718, "msg_type": "MouseEvent", "y": 172, "x": 393, "type": "mousemove", "message_id": 700}
{"sender": 3718, "msg_type": "MouseEvent", "y": 172, "x": 393, "type": "mouseover", "message_id": 699}
{"sender": 3718, "msg_type": "MouseEvent", "y": 172, "x": 393, "type": "mousemove", "message_id": 702}
{"sender": 3718, "msg_type": "MouseEvent", "y": 172, "x": 393, "type": "mousemove", "message_id": 701}
{"sender": 3718, "msg_type": "MouseEvent", "y": 171, "x": 393, "type": "mousemove", "message_id": 703}
{"sender": 3718, "msg_type": "MouseEvent", "y": 170, "x": 393, "type": "mousemove", "message_id": 704}
{"sender": 3718, "msg_type": "MouseEvent", "y": 169, "x": 393, "type": "mousemove", "message_id": 705}
{"sender": 3718, "msg_type": "MouseEvent", "y": 165, "x": 393, "type": "mousemove", "message_id": 706}
{"sender": 3718, "msg_type": "MouseEvent", "y": 160, "x": 391, "type": "mouseover", "message_id": 707}
{"sender": 3718, "msg_type": "MouseEvent", "y": 160, "x": 391, "type": "mouseover", "message_id": 708}
{"sender": 3718, "msg_type": "MouseEvent", "y": 160, "x": 391, "type": "mousemove", "message_id": 709}
{"sender": 3718, "msg_type": "MouseEvent", "y": 155, "x": 390, "type": "mouseover", "message_id": 710}
{"sender": 3718, "msg_type": "MouseEvent", "y": 155, "x": 390, "type": "mouseover", "message_id": 711}
{"sender": 3718, "msg_type": "MouseEvent", "y": 155, "x": 390, "type": "mousemove", "message_id": 712}
{"sender": 3718, "msg_type": "MouseEvent", "y": 152, "x": 390, "type": "mousemove", "message_id": 713}
{"sender": 3718, "msg_type": "MouseEvent", "y": 150, "x": 389, "type": "mousemove", "message_id": 714}
{"sender": 3718, "msg_type": "MouseEvent", "y": 147, "x": 389, "type": "mousemove", "message_id": 715}
{"sender": 3718, "msg_type": "MouseEvent", "y": 144, "x": 389, "type": "mousemove", "message_id": 716}
{"sender": 3718, "msg_type": "MouseEvent", "y": 141, "x": 388, "type": "mousemove", "message_id": 717}
{"sender": 3718, "msg_type": "MouseEvent", "y": 137, "x": 385, "type": "mouseover", "message_id": 718}
{"sender": 3718, "msg_type": "MouseEvent", "y": 137, "x": 385, "type": "mouseover", "message_id": 719}
{"sender": 3718, "msg_type": "MouseEvent", "y": 137, "x": 385, "type": "mousemove", "message_id": 720}
{"sender": 3718, "msg_type": "MouseEvent", "y": 134, "x": 382, "type": "mousemove", "message_id": 721}
{"sender": 3718, "msg_type": "MouseEvent", "y": 130, "x": 378, "type": "mouseover", "message_id": 722}
{"sender": 3718, "msg_type": "MouseEvent", "y": 130, "x": 378, "type": "mouseover", "message_id": 723}
{"sender": 3718, "msg_type": "MouseEvent", "y": 130, "x": 378, "type": "mousemove", "message_id": 724}
{"sender": 3718, "msg_type": "MouseEvent", "y": 127, "x": 374, "type": "mouseover", "message_id": 725}
{"sender": 3718, "msg_type": "MouseEvent", "y": 127, "x": 374, "type": "mouseover", "message_id": 726}
{"sender": 3718, "msg_type": "MouseEvent", "y": 124, "x": 371, "type": "mouseover", "message_id": 728}
{"sender": 3718, "msg_type": "MouseEvent", "y": 127, "x": 374, "type": "mousemove", "message_id": 727}
{"sender": 3718, "msg_type": "MouseEvent", "y": 124, "x": 371, "type": "mouseover", "message_id": 729}
{"sender": 3718, "msg_type": "MouseEvent", "y": 122, "x": 369, "type": "mousemove", "message_id": 731}
{"sender": 3718, "msg_type": "MouseEvent", "y": 124, "x": 371, "type": "mousemove", "message_id": 730}
{"sender": 3718, "msg_type": "MouseEvent", "y": 121, "x": 368, "type": "mouseover", "message_id": 733}
{"sender": 3718, "msg_type": "MouseEvent", "y": 121, "x": 368, "type": "mouseover", "message_id": 732}
{"sender": 3718, "msg_type": "MouseEvent", "y": 121, "x": 368, "type": "mousemove", "message_id": 734}
{"sender": 3718, "msg_type": "MouseEvent", "y": 120, "x": 367, "type": "mousemove", "message_id": 735}
{"sender": 3718, "msg_type": "MouseEvent", "y": 118, "x": 366, "type": "mousemove", "message_id": 736}
{"sender": 3718, "msg_type": "MouseEvent", "y": 117, "x": 366, "type": "mousemove", "message_id": 737}
{"sender": 3718, "msg_type": "MouseEvent", "y": 115, "x": 365, "type": "mousemove", "message_id": 738}
{"sender": 3718, "msg_type": "MouseEvent", "y": 114, "x": 365, "type": "mousemove", "message_id": 739}
{"sender": 3718, "msg_type": "MouseEvent", "y": 114, "x": 364, "type": "mousemove", "message_id": 740}
{"sender": 3718, "msg_type": "MouseEvent", "y": 112, "x": 364, "type": "mousemove", "message_id": 741}
{"sender": 3718, "msg_type": "MouseEvent", "y": 111, "x": 364, "type": "mousemove", "message_id": 742}
{"sender": 3718, "msg_type": "MouseEvent", "y": 110, "x": 364, "type": "mousemove", "message_id": 743}
{"sender": 3718, "msg_type": "MouseEvent", "y": 109, "x": 363, "type": "mousemove", "message_id": 744}
{"sender": 3718, "msg_type": "MouseEvent", "y": 108, "x": 362, "type": "mousemove", "message_id": 745}
{"sender": 3718, "msg_type": "MouseEvent", "y": 106, "x": 360, "type": "mouseover", "message_id": 746}
{"sender": 3718, "msg_type": "MouseEvent", "y": 106, "x": 360, "type": "mouseover", "message_id": 747}
{"sender": 3718, "msg_type": "MouseEvent", "y": 106, "x": 360, "type": "mousemove", "message_id": 748}
{"sender": 3718, "msg_type": "MouseEvent", "y": 105, "x": 358, "type": "mouseover", "message_id": 749}
{"sender": 3718, "msg_type": "MouseEvent", "y": 105, "x": 358, "type": "mouseover", "message_id": 750}
{"sender": 3718, "msg_type": "MouseEvent", "y": 105, "x": 358, "type": "mousemove", "message_id": 751}
{"sender": 3718, "msg_type": "MouseEvent", "y": 103, "x": 355, "type": "mouseover", "message_id": 752}
{"sender": 3718, "msg_type": "MouseEvent", "y": 103, "x": 355, "type": "mousemove", "message_id": 754}
{"sender": 3718, "msg_type": "MouseEvent", "y": 103, "x": 355, "type": "mouseover", "message_id": 753}
{"sender": 3718, "msg_type": "MouseEvent", "y": 102, "x": 354, "type": "mouseover", "message_id": 755}
{"sender": 3718, "msg_type": "MouseEvent", "y": 102, "x": 354, "type": "mouseover", "message_id": 756}
{"sender": 3718, "msg_type": "MouseEvent", "y": 101, "x": 353, "type": "mousemove", "message_id": 758}
{"sender": 3718, "msg_type": "MouseEvent", "y": 102, "x": 354, "type": "mousemove", "message_id": 757}
{"sender": 3718, "msg_type": "MouseEvent", "y": 100, "x": 353, "type": "mousemove", "message_id": 759}
{"sender": 3718, "msg_type": "MouseEvent", "y": 99, "x": 352, "type": "mousemove", "message_id": 760}
{"sender": 3718, "msg_type": "MouseEvent", "y": 99, "x": 352, "type": "mousemove", "message_id": 761}
{"sender": 3718, "msg_type": "MouseEvent", "y": 98, "x": 352, "type": "mousemove", "message_id": 762}
{"sender": 3718, "msg_type": "MouseEvent", "y": 98, "x": 352, "type": "mousemove", "message_id": 763}
{"sender": 3718, "msg_type": "MouseEvent", "y": 97, "x": 352, "type": "mousemove", "message_id": 764}
{"sender": 3718, "msg_type": "MouseEvent", "y": 97, "x": 351, "type": "mousemove", "message_id": 765}
{"sender": 3718, "msg_type": "MouseEvent", "y": 97, "x": 351, "type": "mousemove", "message_id": 766}
{"sender": 3718, "msg_type": "MouseEvent", "y": 96, "x": 350, "type": "mousemove", "message_id": 767}
{"sender": 3718, "msg_type": "MouseEvent", "y": 95, "x": 349, "type": "mousemove", "message_id": 768}
{"sender": 3718, "msg_type": "MouseEvent", "y": 94, "x": 348, "type": "mousemove", "message_id": 769}
{"sender": 3718, "msg_type": "MouseEvent", "y": 93, "x": 347, "type": "mousemove", "message_id": 770}
{"sender": 3718, "msg_type": "MouseEvent", "y": 92, "x": 346, "type": "mousemove", "message_id": 771}
{"sender": 3718, "msg_type": "MouseEvent", "y": 91, "x": 345, "type": "mousemove", "message_id": 772}
{"sender": 3718, "msg_type": "MouseEvent", "y": 90, "x": 344, "type": "mousemove", "message_id": 773}
{"sender": 3718, "msg_type": "MouseEvent", "y": 89, "x": 344, "type": "mousemove", "message_id": 774}
{"sender": 3718, "msg_type": "MouseEvent", "y": 89, "x": 344, "type": "mousemove", "message_id": 775}
{"sender": 3718, "msg_type": "MouseEvent", "y": 89, "x": 343, "type": "mousemove", "message_id": 776}
{"sender": 3718, "msg_type": "MouseEvent", "y": 89, "x": 343, "type": "mousemove", "message_id": 777}
{"sender": 3718, "msg_type": "MouseEvent", "y": 88, "x": 342, "type": "mousemove", "message_id": 778}
{"sender": 3718, "msg_type": "MouseEvent", "y": 88, "x": 341, "type": "mousemove", "message_id": 779}
{"sender": 3718, "msg_type": "MouseEvent", "y": 88, "x": 341, "type": "mousemove", "message_id": 780}
{"sender": 3718, "msg_type": "MouseEvent", "y": 88, "x": 341, "type": "mousemove", "message_id": 781}
{"sender": 3718, "msg_type": "KeyEvent", "shiftKey": false, "message_id": 782, "altKey": false, "metaKey": false, "key": "r", "ctrlKey": false, "type": "keydown", "keyCode": 82}
{"sender": 3718, "msg_type": "MouseEvent", "y": 88, "x": 341, "type": "mousemove", "message_id": 784}
{"sender": 3718, "msg_type": "MouseEvent", "y": 89, "x": 342, "type": "mousemove", "message_id": 785}
{"sender": 3718, "msg_type": "MouseEvent", "y": 90, "x": 344, "type": "mouseover", "message_id": 786}
{"sender": 3718, "msg_type": "MouseEvent", "y": 90, "x": 344, "type": "mouseover", "message_id": 787}
{"sender": 3718, "msg_type": "MouseEvent", "y": 90, "x": 344, "type": "mousemove", "message_id": 788}
{"sender": 3718, "msg_type": "MouseEvent", "y": 91, "x": 345, "type": "mouseover", "message_id": 789}
{"sender": 3718, "msg_type": "MouseEvent", "y": 91, "x": 345, "type": "mouseover", "message_id": 790}
{"sender": 3718, "msg_type": "MouseEvent", "y": 91, "x": 345, "type": "mousemove", "message_id": 791}
{"sender": 3718, "msg_type": "MouseEvent", "y": 94, "x": 346, "type": "mousemove", "message_id": 792}
{"sender": 3718, "msg_type": "MouseEvent", "y": 99, "x": 347, "type": "mousemove", "message_id": 793}
{"sender": 3718, "msg_type": "MouseEvent", "y": 106, "x": 348, "type": "mousemove", "message_id": 794}
{"sender": 3718, "msg_type": "MouseEvent", "y": 114, "x": 350, "type": "mouseover", "message_id": 796}
{"sender": 3718, "msg_type": "MouseEvent", "y": 114, "x": 350, "type": "mouseover", "message_id": 795}
{"sender": 3718, "msg_type": "MouseEvent", "y": 114, "x": 350, "type": "mousemove", "message_id": 797}
{"sender": 3718, "msg_type": "MouseEvent", "y": 121, "x": 350, "type": "mouseover", "message_id": 798}
{"sender": 3718, "msg_type": "MouseEvent", "y": 121, "x": 350, "type": "mouseover", "message_id": 799}
{"sender": 3718, "msg_type": "MouseEvent", "y": 121, "x": 350, "type": "mousemove", "message_id": 800}
{"sender": 3718, "msg_type": "MouseEvent", "y": 126, "x": 350, "type": "mousemove", "message_id": 801}
{"sender": 3718, "msg_type": "MouseEvent", "y": 132, "x": 350, "type": "mousemove", "message_id": 802}
{"sender": 3718, "msg_type": "MouseEvent", "y": 140, "x": 349, "type": "mousemove", "message_id": 803}
{"sender": 3718, "msg_type": "MouseEvent", "y": 150, "x": 348, "type": "mousemove", "message_id": 804}
{"sender": 3718, "msg_type": "MouseEvent", "y": 163, "x": 347, "type": "mousemove", "message_id": 805}
{"sender": 3718, "msg_type": "MouseEvent", "y": 178, "x": 347, "type": "mousemove", "message_id": 806}
{"sender": 3718, "msg_type": "MouseEvent", "y": 198, "x": 347, "type": "mouseover", "message_id": 807}
{"sender": 3718, "msg_type": "MouseEvent", "y": 198, "x": 347, "type": "mouseover", "message_id": 808}
{"sender": 3718, "msg_type": "MouseEvent", "y": 198, "x": 347, "type": "mousemove", "message_id": 809}
{"sender": 3718, "msg_type": "MouseEvent", "y": 220, "x": 347, "type": "mousemove", "message_id": 810}
{"sender": 3718, "msg_type": "MouseEvent", "y": 245, "x": 347, "type": "mousemove", "message_id": 811}
{"sender": 3718, "msg_type": "MouseEvent", "y": 269, "x": 346, "type": "mousemove", "message_id": 812}
{"sender": 3718, "msg_type": "MouseEvent", "y": 286, "x": 344, "type": "mousemove", "message_id": 813}
{"sender": 3718, "msg_type": "MouseEvent", "y": 307, "x": 341, "type": "mousemove", "message_id": 814}
{"sender": 3718, "msg_type": "MouseEvent", "y": 328, "x": 339, "type": "mousemove", "message_id": 815}
{"sender": 3718, "msg_type": "MouseEvent", "y": 348, "x": 337, "type": "mousemove", "message_id": 816}
{"sender": 3718, "msg_type": "MouseEvent", "y": 367, "x": 338, "type": "mousemove", "message_id": 817}
{"sender": 3718, "msg_type": "MouseEvent", "y": 386, "x": 341, "type": "mousemove", "message_id": 818}
{"sender": 3718, "msg_type": "MouseEvent", "y": 404, "x": 344, "type": "mousemove", "message_id": 819}
{"sender": 3718, "msg_type": "MouseEvent", "y": 423, "x": 347, "type": "mousemove", "message_id": 820}
{"sender": 3718, "msg_type": "MouseEvent", "y": 444, "x": 349, "type": "mousemove", "message_id": 821}
{"sender": 3718, "msg_type": "MouseEvent", "y": 465, "x": 350, "type": "mousemove", "message_id": 822}
{"sender": 3718, "msg_type": "MouseEvent", "y": 480, "x": 349, "type": "mouseover", "message_id": 824}
{"sender": 3718, "msg_type": "MouseEvent", "y": 480, "x": 349, "type": "mousemove", "message_id": 825}
{"sender": 3718, "msg_type": "MouseEvent", "y": 480, "x": 349, "type": "mouseover", "message_id": 823}
{"sender": 3718, "msg_type": "MouseEvent", "y": 499, "x": 346, "type": "mouseover", "message_id": 826}
{"sender": 3718, "msg_type": "MouseEvent", "y": 499, "x": 346, "type": "mouseover", "message_id": 827}
{"sender": 3718, "msg_type": "MouseEvent", "y": 499, "x": 346, "type": "mousemove", "message_id": 828}
{"sender": 3718, "msg_type": "MouseEvent", "y": 514, "x": 343, "type": "mousemove", "message_id": 829}
{"sender": 3718, "msg_type": "MouseEvent", "y": 524, "x": 341, "type": "mousemove", "message_id": 830}
{"sender": 3718, "msg_type": "MouseEvent", "y": 530, "x": 340, "type": "mouseover", "message_id": 831}
{"sender": 3718, "msg_type": "MouseEvent", "y": 530, "x": 340, "type": "mouseover", "message_id": 832}
{"sender": 3718, "msg_type": "MouseEvent", "y": 532, "x": 340, "type": "mousemove", "message_id": 834}
{"sender": 3718, "msg_type": "MouseEvent", "y": 530, "x": 340, "type": "mousemove", "message_id": 833}
{"sender": 3718, "msg_type": "MouseEvent", "y": 534, "x": 340, "type": "mousemove", "message_id": 835}
{"sender": 3718, "msg_type": "MouseEvent", "y": 534, "x": 341, "type": "mousemove", "message_id": 836}
{"sender": 3718, "msg_type": "MouseEvent", "y": 535, "x": 341, "type": "mousemove", "message_id": 837}
{"sender": 3718, "msg_type": "MouseEvent", "y": 536, "x": 342, "type": "mousemove", "message_id": 838}
{"sender": 3718, "msg_type": "MouseEvent", "y": 536, "x": 342, "type": "mousemove", "message_id": 839}
{"sender": 3718, "msg_type": "MouseEvent", "y": 536, "x": 342, "type": "mousemove", "message_id": 840}
{"sender": 3718, "msg_type": "MouseEvent", "y": 536, "x": 342, "type": "mousemove", "message_id": 841}
{"sender": 3718, "msg_type": "MouseEvent", "y": 535, "x": 342, "type": "mousemove", "message_id": 842}
{"sender": 3718, "msg_type": "MouseEvent", "y": 534, "x": 343, "type": "mousemove", "message_id": 843}
{"sender": 3718, "msg_type": "MouseEvent", "y": 533, "x": 343, "type": "mousemove", "message_id": 844}
{"sender": 3718, "msg_type": "MouseEvent", "y": 532, "x": 344, "type": "mousemove", "message_id": 845}
{"sender": 3718, "msg_type": "MouseEvent", "y": 532, "x": 344, "type": "mousemove", "message_id": 846}
{"sender": 3718, "msg_type": "MouseEvent", "y": 532, "x": 344, "type": "mousemove", "message_id": 847}
{"sender": 3718, "msg_type": "MouseEvent", "y": 532, "x": 344, "type": "mousemove", "message_id": 848}
{"sender": 3718, "msg_type": "MouseEvent", "y": 531, "x": 344, "type": "mousemove", "message_id": 849}
{"sender": 3718, "msg_type": "MouseEvent", "y": 531, "x": 345, "type": "mousemove", "message_id": 850}
{"sender": 3718, "msg_type": "MouseEvent", "y": 531, "x": 346, "type": "mousemove", "message_id": 851}
{"sender": 3718, "msg_type": "MouseEvent", "y": 530, "x": 347, "type": "mousemove", "message_id": 852}
{"sender": 3718, "msg_type": "MouseEvent", "y": 530, "x": 347, "type": "mousemove", "message_id": 853}
{"sender": 3718, "msg_type": "MouseEvent", "y": 530, "x": 347, "type": "mousemove", "message_id": 854}
{"sender": 3718, "msg_type": "MouseEvent", "y": 530, "x": 347, "type": "mousemove", "message_id": 855}
{"sender": 3718, "msg_type": "MouseEvent", "y": 531, "x": 348, "type": "mousemove", "message_id": 856}
{"sender": 3718, "msg_type": "MouseEvent", "y": 533, "x": 348, "type": "mousemove", "message_id": 857}
{"sender": 3718, "msg_type": "MouseEvent", "y": 534, "x": 348, "type": "mousemove", "message_id": 858}
{"sender": 3718, "msg_type": "MouseEvent", "y": 535, "x": 348, "type": "mousemove", "message_id": 859}
{"sender": 3718, "msg_type": "MouseEvent", "y": 536, "x": 348, "type": "mousemove", "message_id": 860}
{"sender": 3718, "msg_type": "MouseEvent", "y": 537, "x": 348, "type": "mousemove", "message_id": 861}
{"sender": 3718, "msg_type": "MouseEvent", "y": 538, "x": 348, "type": "mousemove", "message_id": 862}
{"sender": 3718, "msg_type": "MouseEvent", "y": 538, "x": 348, "type": "mousemove", "message_id": 863}
{"sender": 3718, "msg_type": "MouseEvent", "y": 538, "x": 348, "type": "mousemove", "message_id": 864}
{"sender": 3718, "msg_type": "MouseEvent", "y": 538, "x": 348, "type": "mousemove", "message_id": 865}
{"sender": 3718, "msg_type": "MouseEvent", "y": 538, "x": 348, "type": "mousemove", "message_id": 866}
{"sender": 3718, "msg_type": "MouseEvent", "y": 538, "x": 348, "type": "mousemove", "message_id": 867}
{"sender": 3718, "msg_type": "MouseEvent", "y": 539, "x": 348, "type": "mousemove", "message_id": 868}
{"sender": 3718, "msg_type": "MouseEvent", "y": 539, "x": 348, "type": "mousemove", "message_id": 869}
{"sender": 3718, "msg_type": "MouseEvent", "y": 540, "x": 347, "type": "mousemove", "message_id": 870}
{"sender": 3718, "msg_type": "MouseEvent", "y": 541, "x": 347, "type": "mousemove", "message_id": 871}
{"sender": 3718, "msg_type": "MouseEvent", "y": 542, "x": 347, "type": "mousemove", "message_id": 872}
{"sender": 3718, "msg_type": "MouseEvent", "y": 544, "x": 347, "type": "mousemove", "message_id": 873}
{"sender": 3718, "msg_type": "MouseEvent", "y": 546, "x": 348, "type": "mousemove", "message_id": 874}
{"sender": 3718, "msg_type": "MouseEvent", "y": 547, "x": 348, "type": "mousemove", "message_id": 875}
{"sender": 3718, "msg_type": "MouseEvent", "y": 548, "x": 349, "type": "mousemove", "message_id": 876}
{"sender": 3718, "msg_type": "MouseEvent", "y": 548, "x": 349, "type": "mousemove", "message_id": 877}
{"sender": 3718, "msg_type": "MouseEvent", "y": 549, "x": 349, "type": "mousemove", "message_id": 878}
{"sender": 3718, "msg_type": "MouseEvent", "y": 549, "x": 349, "type": "mousemove", "message_id": 879}
{"sender": 3718, "msg_type": "MouseEvent", "y": 549, "x": 349, "type": "mousemove", "message_id": 880}
{"sender": 3718, "msg_type": "MouseEvent", "y": 549, "x": 349, "type": "mousemove", "message_id": 881}
{"sender": 3718, "msg_type": "MouseEvent", "y": 550, "x": 349, "type": "mousemove", "message_id": 882}
{"sender": 3718, "msg_type": "MouseEvent", "y": 550, "x": 349, "type": "mousemove", "message_id": 883}
{"sender": 3718, "msg_type": "MouseEvent", "y": 551, "x": 349, "type": "mousemove", "message_id": 884}
{"sender": 3718, "msg_type": "MouseEvent", "y": 551, "x": 349, "type": "mousemove", "message_id": 885}
{"sender": 3718, "msg_type": "MouseEvent", "y": 552, "x": 349, "type": "mousemove", "message_id": 886}
{"sender": 3718, "msg_type": "MouseEvent", "y": 552, "x": 348, "type": "mousemove", "message_id": 887}
{"sender": 3718, "msg_type": "MouseEvent", "y": 552, "x": 348, "type": "mousemove", "message_id": 888}
{"sender": 3718, "msg_type": "MouseEvent", "y": 553, "x": 348, "type": "mousemove", "message_id": 889}
{"sender": 3718, "msg_type": "MouseEvent", "y": 554, "x": 348, "type": "mousemove", "message_id": 890}
{"sender": 3718, "msg_type": "MouseEvent", "y": 555, "x": 347, "type": "mousemove", "message_id": 891}
{"sender": 3718, "msg_type": "MouseEvent", "y": 556, "x": 347, "type": "mousemove", "message_id": 892}
{"sender": 3718, "msg_type": "MouseEvent", "y": 557, "x": 346, "type": "mousemove", "message_id": 893}
{"sender": 3718, "msg_type": "MouseEvent", "y": 558, "x": 346, "type": "mousemove", "message_id": 894}
{"sender": 3718, "msg_type": "MouseEvent", "y": 558, "x": 346, "type": "mousemove", "message_id": 895}
{"sender": 3718, "msg_type": "MouseEvent", "y": 559, "x": 345, "type": "mousemove", "message_id": 896}
{"sender": 3718, "msg_type": "MouseEvent", "y": 560, "x": 345, "type": "mousemove", "message_id": 897}
{"sender": 3718, "msg_type": "MouseEvent", "y": 560, "x": 345, "type": "mousemove", "message_id": 898}
{"sender": 3718, "msg_type": "MouseEvent", "y": 561, "x": 345, "type": "mousemove", "message_id": 899}
{"sender": 3718, "msg_type": "MouseEvent", "y": 561, "x": 345, "type": "mousemove", "message_id": 900}
{"sender": 3718, "msg_type": "KeyEvent", "shiftKey": false, "message_id": 901, "altKey": false, "metaKey": false, "key": "h", "ctrlKey": false, "type": "keydown", "keyCode": 72}
{"sender": 3718, "msg_type": "MouseEvent", "y": 561, "x": 345, "type": "mousemove", "message_id": 903}
{"sender": 3718, "msg_type": "MouseEvent", "y": 561, "x": 345, "type": "mousemove", "message_id": 904}
{"sender": 3718, "msg_type": "MouseEvent", "y": 561, "x": 345, "type": "mousemove", "message_id": 905}
{"sender": 3718, "msg_type": "MouseEvent", "y": 561, "x": 345, "type": "mousemove", "message_id": 906}
{"sender": 3718, "msg_type": "MouseEvent", "y": 561, "x": 345, "type": "mousemove", "message_id": 907}
{"sender": 3718, "msg_type": "MouseEvent", "y": 561, "x": 345, "type": "mousemove", "message_id": 908}
{"sender": 3718, "msg_type": "MouseEvent", "y": 561, "x": 346, "type": "mousemove", "message_id": 909}
{"originalEvent": {"metaKey": false}, "sender": 3718, "msg_type": "MouseWheelEvent", "deltaX": 1, "deltaY": 0, "delta": -1, "type": "wheel", "message_id": 910}
{"sender": 3718, "msg_type": "MouseEvent", "y": 561, "x": 345, "type": "mousemove", "message_id": 911}
{"sender": 3718, "msg_type": "MouseEvent", "y": 561, "x": 345, "type": "mousemove", "message_id": 912}
{"sender": 3718, "msg_type": "MouseEvent", "y": 561, "x": 345, "type": "mousemove", "message_id": 913}
{"sender": 3718, "msg_type": "MouseEvent", "y": 561, "x": 345, "type": "mousemove", "message_id": 915}
{"sender": 3718, "msg_type": "MouseEvent", "y": 561, "x": 345, "type": "mousemove", "message_id": 914}
{"sender": 3718, "msg_type": "MouseEvent", "y": 560, "x": 346, "type": "mousemove", "message_id": 916}
{"sender": 3718, "msg_type": "MouseEvent", "y": 559, "x": 346, "type": "mousemove", "message_id": 917}
{"sender": 3718, "msg_type": "MouseEvent", "y": 559, "x": 346, "type": "mousemove", "message_id": 918}
{"sender": 3718, "msg_type": "MouseEvent", "y": 560, "x": 346, "type": "mousemove", "message_id": 919}
{"sender": 3718, "msg_type": "MouseEvent", "y": 560, "x": 346, "type": "mousemove", "message_id": 920}
{"sender": 3718, "msg_type": "MouseEvent", "y": 560, "x": 346, "type": "mousemove", "message_id": 921}
{"sender": 3718, "msg_type": "MouseEvent", "y": 560, "x": 346, "type": "mousemove", "message_id": 922}
{"sender": 3718, "msg_type": "MouseEvent", "y": 560, "x": 346, "type": "mousemove", "message_id": 923}
{"sender": 3718, "msg_type": "MouseEvent", "y": 559, "x": 346, "type": "mousemove", "message_id": 924}
{"sender": 3718, "msg_type": "MouseEvent", "y": 559, "x": 346, "type": "mousemove", "message_id": 925}
{"sender": 3718, "msg_type": "MouseEvent", "y": 559, "x": 346, "type": "mousemove", "message_id": 926}
{"sender": 3718, "msg_type": "MouseEvent", "y": 559, "x": 346, "type": "mousemove", "message_id": 927}
{"sender": 3718, "msg_type": "MouseEvent", "y": 559, "x": 346, "type": "mousemove", "message_id": 928}
{"sender": 3718, "msg_type": "MouseEvent", "y": 559, "x": 347, "type": "mousemove", "message_id": 929}
{"sender": 3718, "msg_type": "MouseEvent", "y": 560, "x": 347, "type": "mousemove", "message_id": 930}
{"sender": 3718, "msg_type": "MouseEvent", "y": 559, "x": 347, "type": "mousemove", "message_id": 931}
{"sender": 3718, "msg_type": "MouseEvent", "y": 559, "x": 347, "type": "mousemove", "message_id": 932}
{"sender": 3718, "msg_type": "MouseEvent", "y": 559, "x": 347, "type": "mousemove", "message_id": 933}
{"sender": 3718, "msg_type": "MouseEvent", "y": 559, "x": 347, "type": "mousemove", "message_id": 934}
{"sender": 3718, "msg_type": "MouseEvent", "y": 559, "x": 347, "type": "mousemove", "message_id": 935}
{"sender": 3718, "msg_type": "MouseEvent", "y": 559, "x": 347, "type": "mousemove", "message_id": 936}
{"sender": 3718, "msg_type": "MouseEvent", "y": 559, "x": 347, "type": "mousemove", "message_id": 937}
{"sender": 3718, "msg_type": "MouseEvent", "y": 559, "x": 347, "type": "mousemove", "message_id": 938}
{"sender": 3718, "msg_type": "MouseEvent", "y": 559, "x": 347, "type": "mousemove", "message_id": 939}
{"sender": 3718, "msg_type": "MouseEvent", "y": 559, "x": 347, "type": "mousemove", "message_id": 940}
{"sender": 3718, "msg_type": "MouseEvent", "y": 559, "x": 347, "type": "mousemove", "message_id": 941}
{"sender": 3718, "msg_type": "MouseEvent", "y": 559, "x": 347, "type": "mousemove", "message_id": 942}
{"sender": 3718, "msg_type": "MouseEvent", "y": 559, "x": 347, "type": "mousemove", "message_id": 943}
{"sender": 3718, "msg_type": "MouseEvent", "y": 559, "x": 347, "type": "mousemove", "message_id": 944}
{"sender": 3718, "msg_type": "MouseEvent", "y": 560, "x": 347, "type": "mousemove", "message_id": 945}
{"sender": 3718, "msg_type": "MouseEvent", "y": 560, "x": 347, "type": "mousemove", "message_id": 946}
{"sender": 3718, "msg_type": "MouseEvent", "y": 560, "x": 348, "type": "mousemove", "message_id": 947}
{"sender": 3718, "msg_type": "MouseEvent", "y": 560, "x": 347, "type": "mousemove", "message_id": 948}
{"sender": 3718, "msg_type": "MouseEvent", "y": 560, "x": 347, "type": "mousemove", "message_id": 949}
{"sender": 3718, "msg_type": "MouseEvent", "y": 560, "x": 347, "type": "mousemove", "message_id": 950}
{"sender": 3718, "msg_type": "MouseEvent", "y": 560, "x": 347, "type": "mousemove", "message_id": 951}
{"sender": 3718, "msg_type": "MouseEvent", "y": 560, "x": 347, "type": "mousemove", "message_id": 952}
{"sender": 3718, "msg_type": "MouseEvent", "y": 560, "x": 347, "type": "mousemove", "message_id": 953}
{"sender": 3718, "msg_type": "MouseEvent", "y": 560, "x": 347, "type": "mousemove", "message_id": 954}
{"sender": 3718, "msg_type": "MouseEvent", "y": 560, "x": 347, "type": "mousemove", "message_id": 955}
{"sender": 3718, "msg_type": "MouseEvent", "y": 560, "x": 348, "type": "mousemove", "message_id": 956}
{"sender": 3718, "msg_type": "MouseEvent", "y": 560, "x": 348, "type": "mousemove", "message_id": 957}
{"sender": 3718, "msg_type": "MouseEvent", "y": 560, "x": 348, "type": "mousemove", "message_id": 958}
{"sender": 3718, "msg_type": "MouseEvent", "y": 560, "x": 348, "type": "mousemove", "message_id": 959}
{"sender": 3718, "msg_type": "MouseEvent", "y": 560, "x": 348, "type": "mousemove", "message_id": 960}
{"sender": 3718, "msg_type": "MouseEvent", "y": 560, "x": 348, "type": "mousemove", "message_id": 961}
{"sender": 3718, "msg_type": "MouseEvent", "y": 560, "x": 348, "type": "mousemove", "message_id": 962}
{"sender": 3718, "msg_type": "MouseEvent", "y": 560, "x": 348, "type": "mousemove", "message_id": 963}
{"sender": 3718, "msg_type": "MouseEvent", "y": 560, "x": 348, "type": "mousemove", "message_id": 964}
{"sender": 3718, "msg_type": "MouseEvent", "y": 560, "x": 348, "type": "mousemove", "message_id": 965}
{"sender": 3718, "msg_type": "MouseEvent", "y": 560, "x": 348, "type": "mousemove", "message_id": 966}
{"sender": 3718, "msg_type": "MouseEvent", "y": 560, "x": 348, "type": "mousemove", "message_id": 967}
{"sender": 3718, "msg_type": "MouseEvent", "y": 561, "x": 348, "type": "mousemove", "message_id": 968}
{"sender": 3718, "msg_type": "MouseEvent", "y": 561, "x": 348, "type": "mousemove", "message_id": 969}
{"sender": 3718, "msg_type": "MouseEvent", "y": 561, "x": 348, "type": "mousemove", "message_id": 970}
{"sender": 3718, "msg_type": "MouseEvent", "y": 561, "x": 348, "type": "mousemove", "message_id": 971}
{"sender": 3718, "msg_type": "MouseEvent", "y": 561, "x": 348, "type": "mousemove", "message_id": 972}
{"sender": 3718, "msg_type": "MouseEvent", "y": 561, "x": 348, "type": "mousemove", "message_id": 973}
{"sender": 3718, "msg_type": "MouseEvent", "y": 561, "x": 348, "type": "mousemove", "message_id": 974}
{"sender": 3718, "msg_type": "MouseEvent", "y": 561, "x": 348, "type": "mousemove", "message_id": 975}
{"sender": 3718, "msg_type": "MouseEvent", "y": 561, "x": 348, "type": "mousemove", "message_id": 976}
{"sender": 3718, "msg_type": "MouseEvent", "y": 561, "x": 348, "type": "mousemove", "message_id": 977}
{"sender": 3718, "msg_type": "MouseEvent", "y": 561, "x": 348, "type": "mousemove", "message_id": 978}
{"sender": 3718, "msg_type": "MouseEvent", "y": 561, "x": 349, "type": "mousemove", "message_id": 979}
{"sender": 3718, "msg_type": "MouseEvent", "y": 561, "x": 348, "type": "mousemove", "message_id": 980}
{"sender": 3718, "msg_type": "MouseEvent", "y": 561, "x": 348, "type": "mousemove", "message_id": 981}
{"sender": 3718, "msg_type": "MouseEvent", "y": 561, "x": 348, "type": "mousemove", "message_id": 982}
{"sender": 3718, "msg_type": "MouseEvent", "y": 561, "x": 348, "type": "mousemove", "message_id": 983}
{"sender": 3718, "msg_type": "MouseEvent", "y": 561, "x": 348, "type": "mousemove", "message_id": 984}
{"sender": 3718, "msg_type": "MouseEvent", "y": 561, "x": 348, "type": "mousemove", "message_id": 985}
{"sender": 3718, "msg_type": "MouseEvent", "y": 561, "x": 348, "type": "mousemove", "message_id": 986}
{"sender": 3718, "msg_type": "MouseEvent", "y": 561, "x": 348, "type": "mousemove", "message_id": 987}
{"sender": 3718, "msg_type": "MouseEvent", "y": 561, "x": 348, "type": "mousemove", "message_id": 988}
{"sender": 3718, "msg_type": "MouseEvent", "y": 561, "x": 348, "type": "mousemove", "message_id": 989}
{"sender": 3718, "msg_type": "MouseEvent", "y": 561, "x": 348, "type": "mousemove", "message_id": 990}
{"sender": 3718, "msg_type": "MouseEvent", "y": 561, "x": 348, "type": "mousemove", "message_id": 991}
{"sender": 3718, "msg_type": "MouseEvent", "y": 561, "x": 347, "type": "mousemove", "message_id": 992}
{"sender": 3718, "msg_type": "MouseEvent", "y": 561, "x": 347, "type": "mousemove", "message_id": 993}
{"sender": 3718, "msg_type": "MouseEvent", "y": 561, "x": 347, "type": "mousemove", "message_id": 994}
{"sender": 3718, "msg_type": "MouseEvent", "y": 562, "x": 347, "type": "mousemove", "message_id": 995}
{"sender": 3718, "msg_type": "MouseEvent", "y": 562, "x": 347, "type": "mousemove", "message_id": 996}
{"sender": 3718, "msg_type": "MouseEvent", "y": 562, "x": 347, "type": "mousemove", "message_id": 997}
{"sender": 3718, "msg_type": "MouseEvent", "y": 562, "x": 347, "type": "mousemove", "message_id": 998}
{"sender": 3718, "msg_type": "MouseEvent", "y": 562, "x": 347, "type": "mousemove", "message_id": 999}
{"sender": 3718, "msg_type": "MouseEvent", "y": 562, "x": 347, "type": "mousemove", "message_id": 1000}
{"sender": 3718, "msg_type": "MouseEvent", "y": 562, "x": 346, "type": "mousemove", "message_id": 1001}
{"sender": 3718, "msg_type": "MouseEvent", "y": 562, "x": 346, "type": "mousemove", "message_id": 1002}
{"sender": 3718, "msg_type": "MouseEvent", "y": 562, "x": 346, "type": "mousemove", "message_id": 1003}
{"sender": 3718, "msg_type": "MouseEvent", "y": 562, "x": 346, "type": "mousemove", "message_id": 1004}
{"sender": 3718, "msg_type": "MouseEvent", "y": 563, "x": 347, "type": "mousemove", "message_id": 1005}
{"sender": 3718, "msg_type": "MouseEvent", "y": 563, "x": 348, "type": "mousemove", "message_id": 1006}
{"sender": 3718, "msg_type": "MouseEvent", "y": 564, "x": 351, "type": "mouseover", "message_id": 1007}
{"sender": 3718, "msg_type": "MouseEvent", "y": 564, "x": 351, "type": "mouseover", "message_id": 1008}
{"sender": 3718, "msg_type": "MouseEvent", "y": 564, "x": 351, "type": "mousemove", "message_id": 1009}
{"sender": 3718, "msg_type": "MouseEvent", "y": 565, "x": 354, "type": "mousemove", "message_id": 1010}
{"sender": 3718, "msg_type": "MouseEvent", "y": 565, "x": 354, "type": "mouseover", "message_id": 1011}
{"sender": 3718, "msg_type": "MouseEvent", "y": 565, "x": 354, "type": "mouseover", "message_id": 1012}
{"sender": 3718, "msg_type": "MouseEvent", "y": 565, "x": 354, "type": "mousemove", "message_id": 1013}
{"sender": 3718, "msg_type": "MouseEvent", "y": 565, "x": 354, "type": "mousemove", "message_id": 1014}
{"sender": 3718, "msg_type": "MouseEvent", "y": 565, "x": 354, "type": "mousemove", "message_id": 1015}
{"sender": 3718, "msg_type": "MouseEvent", "y": 565, "x": 354, "type": "mousemove", "message_id": 1016}
{"sender": 3718, "msg_type": "MouseEvent", "y": 565, "x": 355, "type": "mousemove", "message_id": 1017}
{"sender": 3718, "msg_type": "MouseEvent", "y": 563, "x": 356, "type": "mousemove", "message_id": 1018}
{"sender": 3718, "msg_type": "MouseEvent", "y": 559, "x": 358, "type": "mouseover", "message_id": 1019}
{"sender": 3718, "msg_type": "MouseEvent", "y": 559, "x": 358, "type": "mouseover", "message_id": 1020}
{"sender": 3718, "msg_type": "MouseEvent", "y": 559, "x": 358, "type": "mousemove", "message_id": 1021}
{"sender": 3718, "msg_type": "MouseEvent", "y": 554, "x": 362, "type": "mouseover", "message_id": 1022}
{"sender": 3718, "msg_type": "MouseEvent", "y": 554, "x": 362, "type": "mouseover", "message_id": 1023}
{"sender": 3718, "msg_type": "MouseEvent", "y": 554, "x": 362, "type": "mousemove", "message_id": 1024}
{"sender": 3718, "msg_type": "MouseEvent", "y": 546, "x": 368, "type": "mousemove", "message_id": 1025}
{"sender": 3718, "msg_type": "MouseEvent", "y": 536, "x": 375, "type": "mouseover", "message_id": 1026}
{"sender": 3718, "msg_type": "MouseEvent", "y": 536, "x": 375, "type": "mouseover", "message_id": 1027}
{"sender": 3718, "msg_type": "MouseEvent", "y": 536, "x": 375, "type": "mousemove", "message_id": 1028}
{"sender": 3718, "msg_type": "MouseEvent", "y": 520, "x": 385, "type": "mouseover", "message_id": 1029}
{"sender": 3718, "msg_type": "MouseEvent", "y": 520, "x": 385, "type": "mouseover", "message_id": 1030}
{"sender": 3718, "msg_type": "MouseEvent", "y": 520, "x": 385, "type": "mousemove", "message_id": 1031}
{"sender": 3718, "msg_type": "MouseEvent", "y": 497, "x": 395, "type": "mousemove", "message_id": 1032}
{"sender": 3718, "msg_type": "MouseEvent", "y": 469, "x": 407, "type": "mousemove", "message_id": 1033}
{"sender": 3718, "msg_type": "MouseEvent", "y": 439, "x": 416, "type": "mousemove", "message_id": 1034}
{"sender": 3718, "msg_type": "MouseEvent", "y": 408, "x": 423, "type": "mouseover", "message_id": 1035}
{"sender": 3718, "msg_type": "MouseEvent", "y": 408, "x": 423, "type": "mouseover", "message_id": 1036}
{"sender": 3718, "msg_type": "MouseEvent", "y": 408, "x": 423, "type": "mousemove", "message_id": 1037}
{"sender": 3718, "msg_type": "MouseEvent", "y": 379, "x": 425, "type": "mouseover", "message_id": 1038}
{"sender": 3718, "msg_type": "MouseEvent", "y": 379, "x": 425, "type": "mousemove", "message_id": 1040}
{"sender": 3718, "msg_type": "MouseEvent", "y": 353, "x": 423, "type": "mouseover", "message_id": 1041}
{"sender": 3718, "msg_type": "MouseEvent", "y": 379, "x": 425, "type": "mouseover", "message_id": 1039}
{"sender": 3718, "msg_type": "MouseEvent", "y": 353, "x": 423, "type": "mouseover", "message_id": 1042}
{"sender": 3718, "msg_type": "MouseEvent", "y": 353, "x": 423, "type": "mousemove", "message_id": 1043}
{"sender": 3718, "msg_type": "MouseEvent", "y": 331, "x": 419, "type": "mouseover", "message_id": 1044}
{"sender": 3718, "msg_type": "MouseEvent", "y": 331, "x": 419, "type": "mouseover", "message_id": 1045}
{"sender": 3718, "msg_type": "MouseEvent", "y": 331, "x": 419, "type": "mousemove", "message_id": 1046}
{"sender": 3718, "msg_type": "MouseEvent", "y": 312, "x": 410, "type": "mousemove", "message_id": 1047}
{"sender": 3718, "msg_type": "MouseEvent", "y": 301, "x": 403, "type": "mousemove", "message_id": 1048}
{"sender": 3718, "msg_type": "MouseEvent", "y": 289, "x": 393, "type": "mousemove", "message_id": 1049}
{"sender": 3718, "msg_type": "MouseEvent", "y": 280, "x": 384, "type": "mousemove", "message_id": 1050}
{"sender": 3718, "msg_type": "MouseEvent", "y": 273, "x": 376, "type": "mousemove", "message_id": 1051}
{"sender": 3718, "msg_type": "MouseEvent", "y": 266, "x": 367, "type": "mousemove", "message_id": 1052}
{"sender": 3718, "msg_type": "MouseEvent", "y": 259, "x": 357, "type": "mousemove", "message_id": 1053}
{"sender": 3718, "msg_type": "MouseEvent", "y": 252, "x": 348, "type": "mousemove", "message_id": 1054}
{"sender": 3718, "msg_type": "MouseEvent", "y": 246, "x": 340, "type": "mousemove", "message_id": 1055}
{"sender": 3718, "msg_type": "MouseEvent", "y": 239, "x": 332, "type": "mousemove", "message_id": 1056}
{"sender": 3718, "msg_type": "MouseEvent", "y": 232, "x": 323, "type": "mousemove", "message_id": 1057}
{"sender": 3718, "msg_type": "MouseEvent", "y": 225, "x": 313, "type": "mousemove", "message_id": 1058}
{"sender": 3718, "msg_type": "MouseEvent", "y": 215, "x": 300, "type": "mousemove", "message_id": 1059}
{"sender": 3718, "msg_type": "MouseEvent", "y": 205, "x": 287, "type": "mousemove", "message_id": 1060}
{"sender": 3718, "msg_type": "MouseEvent", "y": 195, "x": 277, "type": "mousemove", "message_id": 1061}
{"sender": 3718, "msg_type": "MouseEvent", "y": 186, "x": 272, "type": "mouseover", "message_id": 1063}
{"sender": 3718, "msg_type": "MouseEvent", "y": 186, "x": 272, "type": "mouseover", "message_id": 1062}
{"sender": 3718, "msg_type": "MouseEvent", "y": 186, "x": 272, "type": "mousemove", "message_id": 1064}
{"sender": 3718, "msg_type": "MouseEvent", "y": 179, "x": 270, "type": "mouseover", "message_id": 1065}
{"sender": 3718, "msg_type": "MouseEvent", "y": 179, "x": 270, "type": "mouseover", "message_id": 1066}
{"sender": 3718, "msg_type": "MouseEvent", "y": 179, "x": 270, "type": "mousemove", "message_id": 1067}
{"sender": 3718, "msg_type": "MouseEvent", "y": 174, "x": 269, "type": "mouseover", "message_id": 1068}
{"sender": 3718, "msg_type": "MouseEvent", "y": 174, "x": 269, "type": "mouseover", "message_id": 1069}
{"sender": 3718, "msg_type": "MouseEvent", "y": 174, "x": 269, "type": "mousemove", "message_id": 1070}
{"sender": 3718, "msg_type": "MouseEvent", "y": 170, "x": 269, "type": "mousemove", "message_id": 1071}
{"sender": 3718, "msg_type": "MouseEvent", "y": 167, "x": 270, "type": "mousemove", "message_id": 1073}
{"sender": 3718, "msg_type": "MouseEvent", "y": 168, "x": 270, "type": "mousemove", "message_id": 1072}
{"sender": 3718, "msg_type": "MouseEvent", "y": 167, "x": 271, "type": "mousemove", "message_id": 1074}
{"originalEvent": {"metaKey": false}, "sender": 3718, "msg_type": "MouseWheelEvent", "deltaX": 1, "deltaY": 0, "delta": -1, "type": "wheel", "message_id": 1075}
{"sender": 3718, "msg_type": "MouseEvent", "y": 167, "x": 271, "type": "mousemove", "message_id": 1076}
{"originalEvent": {"metaKey": false}, "sender": 3718, "msg_type": "MouseWheelEvent", "deltaX": 3, "deltaY": -2, "delta": -2, "type": "wheel", "message_id": 1077}
{"sender": 3718, "msg_type": "MouseEvent", "y": 168, "x": 270, "type": "mousemove", "message_id": 1078}
{"originalEvent": {"metaKey": false}, "sender": 3718, "msg_type": "MouseWheelEvent", "deltaX": 3, "deltaY": -3, "delta": -3, "type": "wheel", "message_id": 1079}
{"sender": 3718, "msg_type": "MouseEvent", "y": 169, "x": 270, "type": "mousemove", "message_id": 1080}
{"originalEvent": {"metaKey": false}, "sender": 3718, "msg_type": "MouseWheelEvent", "deltaX": 2, "deltaY": -2, "delta": -2, "type": "wheel", "message_id": 1081}
{"sender": 3718, "msg_type": "MouseEvent", "y": 170, "x": 269, "type": "mousemove", "message_id": 1082}
{"originalEvent": {"metaKey": false}, "sender": 3718, "msg_type": "MouseWheelEvent", "deltaX": 1, "deltaY": -1, "delta": -1, "type": "wheel", "message_id": 1083}
{"sender": 3718, "msg_type": "MouseEvent", "y": 171, "x": 269, "type": "mousemove", "message_id": 1084}
{"originalEvent": {"metaKey": false}, "sender": 3718, "msg_type": "MouseWheelEvent", "deltaX": 1, "deltaY": 0, "delta": -1, "type": "wheel", "message_id": 1085}
{"sender": 3718, "msg_type": "MouseEvent", "y": 173, "x": 269, "type": "mousemove", "message_id": 1086}
{"originalEvent": {"metaKey": false}, "sender": 3718, "msg_type": "MouseWheelEvent", "deltaX": 1, "deltaY": -2, "delta": -2, "type": "wheel", "message_id": 1087}
{"sender": 3718, "msg_type": "MouseEvent", "y": 176, "x": 270, "type": "mousemove", "message_id": 1088}
{"sender": 3718, "msg_type": "MouseEvent", "y": 178, "x": 272, "type": "mouseover", "message_id": 1089}
{"sender": 3718, "msg_type": "MouseEvent", "y": 178, "x": 272, "type": "mouseover", "message_id": 1090}
{"sender": 3718, "msg_type": "MouseEvent", "y": 178, "x": 272, "type": "mousemove", "message_id": 1091}
{"sender": 3718, "msg_type": "MouseEvent", "y": 183, "x": 275, "type": "mousemove", "message_id": 1092}
{"sender": 3718, "msg_type": "MouseEvent", "y": 188, "x": 277, "type": "mousemove", "message_id": 1093}
{"sender": 3718, "msg_type": "MouseEvent", "y": 193, "x": 279, "type": "mousemove", "message_id": 1094}
{"sender": 3718, "msg_type": "MouseEvent", "y": 198, "x": 280, "type": "mouseover", "message_id": 1096}
{"sender": 3718, "msg_type": "MouseEvent", "y": 198, "x": 280, "type": "mouseover", "message_id": 1095}
{"sender": 3718, "msg_type": "MouseEvent", "y": 198, "x": 280, "type": "mousemove", "message_id": 1097}
{"sender": 3718, "msg_type": "MouseEvent", "y": 202, "x": 280, "type": "mousemove", "message_id": 1098}
{"sender": 3718, "msg_type": "MouseEvent", "y": 207, "x": 281, "type": "mousemove", "message_id": 1099}
{"sender": 3718, "msg_type": "MouseEvent", "y": 211, "x": 281, "type": "mousemove", "message_id": 1100}
{"sender": 3718, "msg_type": "MouseEvent", "y": 216, "x": 281, "type": "mousemove", "message_id": 1101}
{"sender": 3718, "msg_type": "MouseEvent", "y": 221, "x": 280, "type": "mousemove", "message_id": 1102}
{"sender": 3718, "msg_type": "MouseEvent", "y": 227, "x": 280, "type": "mousemove", "message_id": 1103}
{"sender": 3718, "msg_type": "MouseEvent", "y": 233, "x": 280, "type": "mousemove", "message_id": 1104}
{"sender": 3718, "msg_type": "MouseEvent", "y": 238, "x": 280, "type": "mousemove", "message_id": 1105}
{"sender": 3718, "msg_type": "MouseEvent", "y": 241, "x": 280, "type": "mousemove", "message_id": 1106}
{"sender": 3718, "msg_type": "MouseEvent", "y": 244, "x": 280, "type": "mousemove", "message_id": 1107}
{"sender": 3718, "msg_type": "MouseEvent", "y": 244, "x": 280, "type": "mousemove", "message_id": 1108}
{"sender": 3718, "msg_type": "MouseEvent", "y": 245, "x": 280, "type": "mousemove", "message_id": 1109}
{"originalEvent": {"metaKey": false}, "sender": 3718, "msg_type": "MouseWheelEvent", "deltaX": 2, "deltaY": 0, "delta": -2, "type": "wheel", "message_id": 1110}
{"originalEvent": {"metaKey": false}, "sender": 3718, "msg_type": "MouseWheelEvent", "deltaX": 4, "deltaY": 0, "delta": -4, "type": "wheel", "message_id": 1111}
{"originalEvent": {"metaKey": false}, "sender": 3718, "msg_type": "MouseWheelEvent", "deltaX": 4, "deltaY": 0, "delta": -4, "type": "wheel", "message_id": 1112}
{"originalEvent": {"metaKey": false}, "sender": 3718, "msg_type": "MouseWheelEvent", "deltaX": 4, "deltaY": 0, "delta": -4, "type": "wheel", "message_id": 1113}
{"originalEvent": {"metaKey": false}, "sender": 3718, "msg_type": "MouseWheelEvent", "deltaX": 3, "deltaY": 0, "delta": -3, "type": "wheel", "message_id": 1114}
{"sender": 3718, "msg_type": "MouseEvent", "y": 245, "x": 280, "type": "mousemove", "message_id": 1115}
{"originalEvent": {"metaKey": false}, "sender": 3718, "msg_type": "MouseWheelEvent", "deltaX": 3, "deltaY": 0, "delta": -3, "type": "wheel", "message_id": 1116}
{"sender": 3718, "msg_type": "MouseEvent", "y": 246, "x": 280, "type": "mousemove", "message_id": 1117}
{"originalEvent": {"metaKey": false}, "sender": 3718, "msg_type": "MouseWheelEvent", "deltaX": 3, "deltaY": 0, "delta": -3, "type": "wheel", "message_id": 1118}
{"sender": 3718, "msg_type": "MouseEvent", "y": 246, "x": 281, "type": "mousemove", "message_id": 1119}
{"sender": 3718, "msg_type": "MouseEvent", "y": 247, "x": 281, "type": "mousemove", "message_id": 1120}
{"originalEvent": {"metaKey": false}, "sender": 3718, "msg_type": "MouseWheelEvent", "deltaX": 3, "deltaY": 0, "delta": -3, "type": "wheel", "message_id": 1121}
{"originalEvent": {"metaKey": false}, "sender": 3718, "msg_type": "MouseWheelEvent", "deltaX": 3, "deltaY": 0, "delta": -3, "type": "wheel", "message_id": 1123}
{"sender": 3718, "msg_type": "MouseEvent", "y": 248, "x": 282, "type": "mousemove", "message_id": 1122}
{"sender": 3718, "msg_type": "MouseEvent", "y": 249, "x": 283, "type": "mousemove", "message_id": 1124}
{"sender": 3718, "msg_type": "MouseEvent", "y": 251, "x": 286, "type": "mouseover", "message_id": 1125}
{"sender": 3718, "msg_type": "MouseEvent", "y": 251, "x": 286, "type": "mouseover", "message_id": 1126}
{"sender": 3718, "msg_type": "MouseEvent", "y": 251, "x": 286, "type": "mousemove", "message_id": 1127}
{"sender": 3718, "msg_type": "MouseEvent", "y": 254, "x": 291, "type": "mouseover", "message_id": 1129}
{"originalEvent": {"metaKey": false}, "sender": 3718, "msg_type": "MouseWheelEvent", "deltaX": 3, "deltaY": 0, "delta": -3, "type": "wheel", "message_id": 1128}
{"sender": 3718, "msg_type": "MouseEvent", "y": 254, "x": 291, "type": "mouseover", "message_id": 1130}
{"sender": 3718, "msg_type": "MouseEvent", "y": 254, "x": 291, "type": "mousemove", "message_id": 1131}
{"originalEvent": {"metaKey": false}, "sender": 3718, "msg_type": "MouseWheelEvent", "deltaX": 2, "deltaY": 0, "delta": -2, "type": "wheel", "message_id": 1132}
{"sender": 3718, "msg_type": "MouseEvent", "y": 258, "x": 297, "type": "mouseover", "message_id": 1133}
{"sender": 3718, "msg_type": "MouseEvent", "y": 258, "x": 297, "type": "mouseover", "message_id": 1134}
{"sender": 3718, "msg_type": "MouseEvent", "y": 258, "x": 297, "type": "mousemove", "message_id": 1135}
{"sender": 3718, "msg_type": "MouseEvent", "y": 261, "x": 301, "type": "mousemove", "message_id": 1136}
{"originalEvent": {"metaKey": false}, "sender": 3718, "msg_type": "MouseWheelEvent", "deltaX": 2, "deltaY": 0, "delta": -2, "type": "wheel", "message_id": 1137}
{"sender": 3718, "msg_type": "MouseEvent", "y": 264, "x": 305, "type": "mousemove", "message_id": 1138}
{"sender": 3718, "msg_type": "MouseEvent", "y": 265, "x": 307, "type": "mouseover", "message_id": 1140}
{"originalEvent": {"metaKey": false}, "sender": 3718, "msg_type": "MouseWheelEvent", "deltaX": 2, "deltaY": 0, "delta": -2, "type": "wheel", "message_id": 1139}
{"sender": 3718, "msg_type": "MouseEvent", "y": 265, "x": 307, "type": "mouseover", "message_id": 1141}
{"sender": 3718, "msg_type": "MouseEvent", "y": 265, "x": 307, "type": "mousemove", "message_id": 1142}
{"sender": 3718, "msg_type": "MouseEvent", "y": 266, "x": 307, "type": "mouseover", "message_id": 1144}
{"originalEvent": {"metaKey": false}, "sender": 3718, "msg_type": "MouseWheelEvent", "deltaX": 2, "deltaY": 0, "delta": -2, "type": "wheel", "message_id": 1143}
{"sender": 3718, "msg_type": "MouseEvent", "y": 266, "x": 307, "type": "mouseover", "message_id": 1145}
{"sender": 3718, "msg_type": "MouseEvent", "y": 266, "x": 307, "type": "mousemove", "message_id": 1146}
{"originalEvent": {"metaKey": false}, "sender": 3718, "msg_type": "MouseWheelEvent", "deltaX": 2, "deltaY": 0, "delta": -2, "type": "wheel", "message_id": 1148}
{"sender": 3718, "msg_type": "MouseEvent", "y": 266, "x": 307, "type": "mousemove", "message_id": 1147}
{"originalEvent": {"metaKey": false}, "sender": 3718, "msg_type": "MouseWheelEvent", "deltaX": 1, "deltaY": 0, "delta": -1, "type": "wheel", "message_id": 1149}
{"sender": 3718, "msg_type": "MouseEvent", "y": 266, "x": 307, "type": "mousemove", "message_id": 1150}
{"originalEvent": {"metaKey": false}, "sender": 3718, "msg_type": "MouseWheelEvent", "deltaX": 1, "deltaY": 0, "delta": -1, "type": "wheel", "message_id": 1152}
{"sender": 3718, "msg_type": "MouseEvent", "y": 267, "x": 307, "type": "mousemove", "message_id": 1153}
{"sender": 3718, "msg_type": "MouseEvent", "y": 266, "x": 307, "type": "mousemove", "message_id": 1151}
{"originalEvent": {"metaKey": false}, "sender": 3718, "msg_type": "MouseWheelEvent", "deltaX": 1, "deltaY": 0, "delta": -1, "type": "wheel", "message_id": 1154}
{"sender": 3718, "msg_type": "MouseEvent", "y": 268, "x": 308, "type": "mousemove", "message_id": 1155}
{"sender": 3718, "msg_type": "MouseEvent", "y": 268, "x": 308, "type": "mousemove", "message_id": 1156}
{"originalEvent": {"metaKey": false}, "sender": 3718, "msg_type": "MouseWheelEvent", "deltaX": 1, "deltaY": 0, "delta": -1, "type": "wheel", "message_id": 1157}
{"sender": 3718, "msg_type": "MouseEvent", "y": 269, "x": 309, "type": "mousemove", "message_id": 1160}
{"sender": 3718, "msg_type": "MouseEvent", "y": 269, "x": 308, "type": "mousemove", "message_id": 1158}
{"sender": 3718, "msg_type": "MouseEvent", "y": 269, "x": 309, "type": "mousemove", "message_id": 1161}
{"originalEvent": {"metaKey": false}, "sender": 3718, "msg_type": "MouseWheelEvent", "deltaX": 1, "deltaY": 0, "delta": -1, "type": "wheel", "message_id": 1159}
{"originalEvent": {"metaKey": false}, "sender": 3718, "msg_type": "MouseWheelEvent", "deltaX": 1, "deltaY": 0, "delta": -1, "type": "wheel", "message_id": 1162}
{"originalEvent": {"metaKey": false}, "sender": 3718, "msg_type": "MouseWheelEvent", "deltaX": 1, "deltaY": 0, "delta": -1, "type": "wheel", "message_id": 1164}
{"sender": 3718, "msg_type": "MouseEvent", "y": 269, "x": 309, "type": "mousemove", "message_id": 1163}
{"originalEvent": {"metaKey": false}, "sender": 3718, "msg_type": "MouseWheelEvent", "deltaX": 1, "deltaY": 0, "delta": -1, "type": "wheel", "message_id": 1165}
{"originalEvent": {"metaKey": false}, "sender": 3718, "msg_type": "MouseWheelEvent", "deltaX": 1, "deltaY": 0, "delta": -1, "type": "wheel", "message_id": 1166}
{"sender": 3718, "msg_type": "KeyEvent", "shiftKey": false, "message_id": 1167, "altKey": false, "metaKey": true, "key": "Meta", "ctrlKey": false, "type": "keydown", "keyCode": 91}
{"originalEvent": {"metaKey": true}, "sender": 3718, "msg_type": "MouseWheelEvent", "deltaX": 1, "deltaY": 0, "delta": -1, "type": "wheel", "message_id": 1168}
{"originalEvent": {"metaKey": true}, "sender": 3718, "msg_type": "MouseWheelEvent", "deltaX": 1, "deltaY": 0, "delta": -1, "type": "wheel", "message_id": 1170}
{"originalEvent": {"metaKey": true}, "sender": 3718, "msg_type": "MouseWheelEvent", "deltaX": 1, "deltaY": 0, "delta": -1, "type": "wheel", "message_id": 1172}
{"originalEvent": {"metaKey": true}, "sender": 3718, "msg_type": "MouseWheelEvent", "deltaX": 1, "deltaY": 0, "delta": -1, "type": "wheel", "message_id": 1174}
{"originalEvent": {"metaKey": true}, "sender": 3718, "msg_type": "MouseWheelEvent", "deltaX": 1, "deltaY": -1, "delta": -1, "type": "wheel", "message_id": 1176}
{"originalEvent": {"metaKey": true}, "sender": 3718, "msg_type": "MouseWheelEvent", "deltaX": 1, "deltaY": -1, "delta": -1, "type": "wheel", "message_id": 1178}
{"originalEvent": {"metaKey": true}, "sender": 3718, "msg_type": "MouseWheelEvent", "deltaX": 1, "deltaY": -1, "delta": -1, "type": "wheel", "message_id": 1180}
{"originalEvent": {"metaKey": true}, "sender": 3718, "msg_type": "MouseWheelEvent", "deltaX": 1, "deltaY": -2, "delta": -2, "type": "wheel", "message_id": 1182}
{"originalEvent": {"metaKey": true}, "sender": 3718, "msg_type": "MouseWheelEvent", "deltaX": 1, "deltaY": -1, "delta": -1, "type": "wheel", "message_id": 1184}
{"originalEvent": {"metaKey": true}, "sender": 3718, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": -1, "delta": -1, "type": "wheel", "message_id": 1186}
{"originalEvent": {"metaKey": true}, "sender": 3718, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": -1, "delta": -1, "type": "wheel", "message_id": 1188}
{"originalEvent": {"metaKey": true}, "sender": 3718, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": -1, "delta": -1, "type": "wheel", "message_id": 1190}
{"originalEvent": {"metaKey": true}, "sender": 3718, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": -1, "delta": -1, "type": "wheel", "message_id": 1192}
{"originalEvent": {"metaKey": true}, "sender": 3718, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": -1, "delta": -1, "type": "wheel", "message_id": 1194}
{"originalEvent": {"metaKey": true}, "sender": 3718, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": -1, "delta": -1, "type": "wheel", "message_id": 1196}
{"originalEvent": {"metaKey": true}, "sender": 3718, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": -1, "delta": -1, "type": "wheel", "message_id": 1198}
{"originalEvent": {"metaKey": true}, "sender": 3718, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": -1, "delta": -1, "type": "wheel", "message_id": 1200}
{"originalEvent": {"metaKey": true}, "sender": 3718, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": -1, "delta": -1, "type": "wheel", "message_id": 1202}
{"originalEvent": {"metaKey": true}, "sender": 3718, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": -1, "delta": -1, "type": "wheel", "message_id": 1204}
{"originalEvent": {"metaKey": true}, "sender": 3718, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": -1, "delta": -1, "type": "wheel", "message_id": 1206}
{"originalEvent": {"metaKey": true}, "sender": 3718, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": -1, "delta": -1, "type": "wheel", "message_id": 1208}
{"originalEvent": {"metaKey": true}, "sender": 3718, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": -1, "delta": -1, "type": "wheel", "message_id": 1210}
{"originalEvent": {"metaKey": true}, "sender": 3718, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": -1, "delta": -1, "type": "wheel", "message_id": 1212}
{"originalEvent": {"metaKey": true}, "sender": 3718, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": -1, "delta": -1, "type": "wheel", "message_id": 1214}
{"originalEvent": {"metaKey": true}, "sender": 3718, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": -1, "delta": -1, "type": "wheel", "message_id": 1216}
{"originalEvent": {"metaKey": true}, "sender": 3718, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": -1, "delta": -1, "type": "wheel", "message_id": 1218}
{"originalEvent": {"metaKey": true}, "sender": 3718, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": -1, "delta": -1, "type": "wheel", "message_id": 1220}
{"originalEvent": {"metaKey": true}, "sender": 3718, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": -1, "delta": -1, "type": "wheel", "message_id": 1222}
{"originalEvent": {"metaKey": true}, "sender": 3718, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": -1, "delta": -1, "type": "wheel", "message_id": 1224}
{"originalEvent": {"metaKey": true}, "sender": 3718, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": -1, "delta": -1, "type": "wheel", "message_id": 1226}
{"originalEvent": {"metaKey": true}, "sender": 3718, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": -1, "delta": -1, "type": "wheel", "message_id": 1228}
{"originalEvent": {"metaKey": true}, "sender": 3718, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": -1, "delta": -1, "type": "wheel", "message_id": 1230}
{"originalEvent": {"metaKey": true}, "sender": 3718, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": -2, "delta": -2, "type": "wheel", "message_id": 1232}
{"originalEvent": {"metaKey": true}, "sender": 3718, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": -1, "delta": -1, "type": "wheel", "message_id": 1234}
{"originalEvent": {"metaKey": true}, "sender": 3718, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": -2, "delta": -2, "type": "wheel", "message_id": 1236}
{"originalEvent": {"metaKey": true}, "sender": 3718, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": -1, "delta": -1, "type": "wheel", "message_id": 1238}
{"originalEvent": {"metaKey": true}, "sender": 3718, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": -1, "delta": -1, "type": "wheel", "message_id": 1240}
{"originalEvent": {"metaKey": true}, "sender": 3718, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": -1, "delta": -1, "type": "wheel", "message_id": 1242}
{"originalEvent": {"metaKey": true}, "sender": 3718, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": -1, "delta": -1, "type": "wheel", "message_id": 1244}
{"originalEvent": {"metaKey": true}, "sender": 3718, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": -1, "delta": -1, "type": "wheel", "message_id": 1246}
{"originalEvent": {"metaKey": true}, "sender": 3718, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": -1, "delta": -1, "type": "wheel", "message_id": 1248}
{"originalEvent": {"metaKey": true}, "sender": 3718, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": -2, "delta": -2, "type": "wheel", "message_id": 1250}
{"originalEvent": {"metaKey": true}, "sender": 3718, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": -1, "delta": -1, "type": "wheel", "message_id": 1252}
{"originalEvent": {"metaKey": true}, "sender": 3718, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": -2, "delta": -2, "type": "wheel", "message_id": 1254}
{"originalEvent": {"metaKey": true}, "sender": 3718, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": -1, "delta": -1, "type": "wheel", "message_id": 1256}
{"originalEvent": {"metaKey": true}, "sender": 3718, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": -1, "delta": -1, "type": "wheel", "message_id": 1258}
{"originalEvent": {"metaKey": true}, "sender": 3718, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": -1, "delta": -1, "type": "wheel", "message_id": 1260}
{"originalEvent": {"metaKey": true}, "sender": 3718, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": -1, "delta": -1, "type": "wheel", "message_id": 1262}
{"originalEvent": {"metaKey": true}, "sender": 3718, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": -1, "delta": -1, "type": "wheel", "message_id": 1264}
{"originalEvent": {"metaKey": true}, "sender": 3718, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": -1, "delta": -1, "type": "wheel", "message_id": 1266}
{"originalEvent": {"metaKey": true}, "sender": 3718, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": -1, "delta": -1, "type": "wheel", "message_id": 1268}
{"originalEvent": {"metaKey": true}, "sender": 3718, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": -1, "delta": -1, "type": "wheel", "message_id": 1270}
{"originalEvent": {"metaKey": true}, "sender": 3718, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": -1, "delta": -1, "type": "wheel", "message_id": 1272}
{"originalEvent": {"metaKey": true}, "sender": 3718, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": -1, "delta": -1, "type": "wheel", "message_id": 1274}
{"originalEvent": {"metaKey": true}, "sender": 3718, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": -1, "delta": -1, "type": "wheel", "message_id": 1276}
{"originalEvent": {"metaKey": true}, "sender": 3718, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": -1, "delta": -1, "type": "wheel", "message_id": 1278}
{"originalEvent": {"metaKey": true}, "sender": 3718, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": -1, "delta": -1, "type": "wheel", "message_id": 1280}
{"originalEvent": {"metaKey": true}, "sender": 3718, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": -1, "delta": -1, "type": "wheel", "message_id": 1282}
{"originalEvent": {"metaKey": true}, "sender": 3718, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": -1, "delta": -1, "type": "wheel", "message_id": 1284}
{"originalEvent": {"metaKey": true}, "sender": 3718, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": -2, "delta": -2, "type": "wheel", "message_id": 1286}
{"originalEvent": {"metaKey": true}, "sender": 3718, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": -1, "delta": -1, "type": "wheel", "message_id": 1288}
{"originalEvent": {"metaKey": true}, "sender": 3718, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": -1, "delta": -1, "type": "wheel", "message_id": 1290}
{"originalEvent": {"metaKey": true}, "sender": 3718, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": -1, "delta": -1, "type": "wheel", "message_id": 1292}
{"originalEvent": {"metaKey": true}, "sender": 3718, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": -1, "delta": -1, "type": "wheel", "message_id": 1294}
{"originalEvent": {"metaKey": true}, "sender": 3718, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": -1, "delta": -1, "type": "wheel", "message_id": 1296}
{"originalEvent": {"metaKey": true}, "sender": 3718, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": -1, "delta": -1, "type": "wheel", "message_id": 1298}
{"originalEvent": {"metaKey": true}, "sender": 3718, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": -1, "delta": -1, "type": "wheel", "message_id": 1300}
{"originalEvent": {"metaKey": true}, "sender": 3718, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": -1, "delta": -1, "type": "wheel", "message_id": 1302}
{"originalEvent": {"metaKey": true}, "sender": 3718, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": -1, "delta": -1, "type": "wheel", "message_id": 1304}
{"originalEvent": {"metaKey": true}, "sender": 3718, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": -1, "delta": -1, "type": "wheel", "message_id": 1306}
{"originalEvent": {"metaKey": true}, "sender": 3718, "msg_type": "MouseWheelEvent", "deltaX": -1, "deltaY": 0, "delta": 1, "type": "wheel", "message_id": 1308}
{"originalEvent": {"metaKey": true}, "sender": 3718, "msg_type": "MouseWheelEvent", "deltaX": -1, "deltaY": 0, "delta": 1, "type": "wheel", "message_id": 1310}
{"originalEvent": {"metaKey": true}, "sender": 3718, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": -1, "delta": -1, "type": "wheel", "message_id": 1312}
{"originalEvent": {"metaKey": true}, "sender": 3718, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": -3, "delta": -3, "type": "wheel", "message_id": 1314}
{"originalEvent": {"metaKey": true}, "sender": 3718, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": -2, "delta": -2, "type": "wheel", "message_id": 1316}
{"originalEvent": {"metaKey": true}, "sender": 3718, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": -2, "delta": -2, "type": "wheel", "message_id": 1318}
{"originalEvent": {"metaKey": true}, "sender": 3718, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": -2, "delta": -2, "type": "wheel", "message_id": 1320}
{"originalEvent": {"metaKey": true}, "sender": 3718, "msg_type": "MouseWheelEvent", "deltaX": -1, "deltaY": -2, "delta": -2, "type": "wheel", "message_id": 1322}
{"originalEvent": {"metaKey": true}, "sender": 3718, "msg_type": "MouseWheelEvent", "deltaX": -1, "deltaY": -1, "delta": -1, "type": "wheel", "message_id": 1324}
{"originalEvent": {"metaKey": true}, "sender": 3718, "msg_type": "MouseWheelEvent", "deltaX": -1, "deltaY": -2, "delta": -2, "type": "wheel", "message_id": 1326}
{"originalEvent": {"metaKey": true}, "sender": 3718, "msg_type": "MouseWheelEvent", "deltaX": -1, "deltaY": -1, "delta": -1, "type": "wheel", "message_id": 1328}
{"originalEvent": {"metaKey": true}, "sender": 3718, "msg_type": "MouseWheelEvent", "deltaX": -1, "deltaY": -1, "delta": -1, "type": "wheel", "message_id": 1330}
{"originalEvent": {"metaKey": true}, "sender": 3718, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": -1, "delta": -1, "type": "wheel", "message_id": 1332}
{"originalEvent": {"metaKey": true}, "sender": 3718, "msg_type": "MouseWheelEvent", "deltaX": -1, "deltaY": 0, "delta": 1, "type": "wheel", "message_id": 1334}
{"originalEvent": {"metaKey": true}, "sender": 3718, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": -1, "delta": -1, "type": "wheel", "message_id": 1336}
{"originalEvent": {"metaKey": true}, "sender": 3718, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": -1, "delta": -1, "type": "wheel", "message_id": 1338}
{"originalEvent": {"metaKey": true}, "sender": 3718, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": -1, "delta": -1, "type": "wheel", "message_id": 1340}
{"originalEvent": {"metaKey": true}, "sender": 3718, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": -1, "delta": -1, "type": "wheel", "message_id": 1342}
{"originalEvent": {"metaKey": true}, "sender": 3718, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": -1, "delta": -1, "type": "wheel", "message_id": 1344}
{"originalEvent": {"metaKey": true}, "sender": 3718, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": -1, "delta": -1, "type": "wheel", "message_id": 1346}
{"originalEvent": {"metaKey": true}, "sender": 3718, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": -1, "delta": -1, "type": "wheel", "message_id": 1348}
{"originalEvent": {"metaKey": true}, "sender": 3718, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": -1, "delta": -1, "type": "wheel", "message_id": 1350}
{"originalEvent": {"metaKey": true}, "sender": 3718, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": -1, "delta": -1, "type": "wheel", "message_id": 1352}
{"originalEvent": {"metaKey": true}, "sender": 3718, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": -1, "delta": -1, "type": "wheel", "message_id": 1354}
{"originalEvent": {"metaKey": true}, "sender": 3718, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": -1, "delta": -1, "type": "wheel", "message_id": 1356}
{"originalEvent": {"metaKey": true}, "sender": 3718, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": -1, "delta": -1, "type": "wheel", "message_id": 1358}
{"originalEvent": {"metaKey": true}, "sender": 3718, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": -1, "delta": -1, "type": "wheel", "message_id": 1360}
{"originalEvent": {"metaKey": true}, "sender": 3718, "msg_type": "MouseWheelEvent", "deltaX": -1, "deltaY": -1, "delta": -1, "type": "wheel", "message_id": 1362}
{"originalEvent": {"metaKey": true}, "sender": 3718, "msg_type": "MouseWheelEvent", "deltaX": 0, "deltaY": -1, "delta": -1, "type": "wheel", "message_id": 1364}
{"sender": 3718, "msg_type": "MouseEvent", "y": 267, "x": 309, "type": "mousemove", "message_id": 1366}
{"sender": 3718, "msg_type": "MouseEvent", "y": 264, "x": 309, "type": "mousemove", "message_id": 1367}
{"sender": 3718, "msg_type": "MouseEvent", "y": 261, "x": 310, "type": "mousemove", "message_id": 1368}
{"sender": 3718, "msg_type": "MouseEvent", "y": 257, "x": 311, "type": "mousemove", "message_id": 1369}
{"sender": 3718, "msg_type": "MouseEvent", "y": 251, "x": 312, "type": "mousemove", "message_id": 1370}
{"sender": 3718, "msg_type": "MouseEvent", "y": 244, "x": 312, "type": "mousemove", "message_id": 1371}
{"sender": 3718, "msg_type": "MouseEvent", "y": 235, "x": 311, "type": "mousemove", "message_id": 1372}
{"sender": 3718, "msg_type": "MouseEvent", "y": 226, "x": 308, "type": "mouseover", "message_id": 1374}
{"sender": 3718, "msg_type": "MouseEvent", "y": 226, "x": 308, "type": "mouseover", "message_id": 1373}
{"sender": 3718, "msg_type": "MouseEvent", "y": 226, "x": 308, "type": "mousemove", "message_id": 1375}
{"sender": 3718, "msg_type": "MouseEvent", "y": 216, "x": 304, "type": "mouseover", "message_id": 1376}
{"sender": 3718, "msg_type": "MouseEvent", "y": 216, "x": 304, "type": "mouseover", "message_id": 1377}
{"sender": 3718, "msg_type": "MouseEvent", "y": 216, "x": 304, "type": "mousemove", "message_id": 1378}
{"sender": 3718, "msg_type": "MouseEvent", "y": 206, "x": 298, "type": "mousemove", "message_id": 1379}
{"sender": 3718, "msg_type": "MouseEvent", "y": 194, "x": 288, "type": "mouseover", "message_id": 1380}
{"sender": 3718, "msg_type": "MouseEvent", "y": 194, "x": 288, "type": "mouseover", "message_id": 1381}
{"sender": 3718, "msg_type": "MouseEvent", "y": 194, "x": 288, "type": "mousemove", "message_id": 1382}
{"sender": 3718, "msg_type": "MouseEvent", "y": 184, "x": 277, "type": "mouseover", "message_id": 1383}
{"sender": 3718, "msg_type": "MouseEvent", "y": 184, "x": 277, "type": "mouseover", "message_id": 1384}
{"sender": 3718, "msg_type": "MouseEvent", "y": 184, "x": 277, "type": "mousemove", "message_id": 1385}
{"sender": 3718, "msg_type": "MouseEvent", "y": 173, "x": 261, "type": "mouseover", "message_id": 1386}
{"sender": 3718, "msg_type": "MouseEvent", "y": 173, "x": 261, "type": "mouseover", "message_id": 1387}
{"sender": 3718, "msg_type": "MouseEvent", "y": 173, "x": 261, "type": "mousemove", "message_id": 1388}
{"sender": 3718, "msg_type": "MouseEvent", "y": 163, "x": 243, "type": "mouseover", "message_id": 1389}
{"sender": 3718, "msg_type": "MouseEvent", "y": 163, "x": 243, "type": "mousemove", "message_id": 1391}
{"sender": 3718, "msg_type": "MouseEvent", "y": 163, "x": 243, "type": "mouseover", "message_id": 1390}
{"sender": 3718, "msg_type": "MouseEvent", "y": 153, "x": 227, "type": "mousemove", "message_id": 1392}
{"sender": 3718, "msg_type": "MouseEvent", "y": 132, "x": 199, "type": "mousemove", "message_id": 1394}
{"sender": 3718, "msg_type": "MouseEvent", "y": 121, "x": 187, "type": "mouseover", "message_id": 1395}
{"sender": 3718, "msg_type": "MouseEvent", "y": 143, "x": 212, "type": "mousemove", "message_id": 1393}
{"sender": 3718, "msg_type": "MouseEvent", "y": 121, "x": 187, "type": "mouseover", "message_id": 1396}
{"sender": 3718, "msg_type": "MouseEvent", "y": 121, "x": 187, "type": "mousemove", "message_id": 1397}
{"sender": 3718, "msg_type": "MouseEvent", "y": 103, "x": 171, "type": "mousemove", "message_id": 1399}
{"sender": 3718, "msg_type": "MouseEvent", "y": 111, "x": 178, "type": "mousemove", "message_id": 1398}
{"sender": 3718, "msg_type": "MouseEvent", "y": 96, "x": 167, "type": "mousemove", "message_id": 1400}
{"sender": 3718, "msg_type": "MouseEvent", "y": 92, "x": 165, "type": "mouseover", "message_id": 1401}
{"sender": 3718, "msg_type": "MouseEvent", "y": 92, "x": 165, "type": "mouseover", "message_id": 1402}
{"sender": 3718, "msg_type": "MouseEvent", "y": 92, "x": 165, "type": "mousemove", "message_id": 1403}
{"sender": 3718, "msg_type": "MouseEvent", "y": 87, "x": 164, "type": "mouseover", "message_id": 1404}
{"sender": 3718, "msg_type": "MouseEvent", "y": 87, "x": 164, "type": "mouseover", "message_id": 1405}
{"sender": 3718, "msg_type": "MouseEvent", "y": 87, "x": 164, "type": "mousemove", "message_id": 1406}
{"sender": 3718, "msg_type": "MouseEvent", "y": 81, "x": 162, "type": "mouseover", "message_id": 1407}
{"sender": 3718, "msg_type": "MouseEvent", "y": 81, "x": 162, "type": "mousemove", "message_id": 1409}
{"sender": 3718, "msg_type": "MouseEvent", "y": 81, "x": 162, "type": "mouseover", "message_id": 1408}
{"sender": 3718, "msg_type": "MouseEvent", "y": 76, "x": 160, "type": "mousemove", "message_id": 1410}
{"sender": 3718, "msg_type": "MouseEvent", "y": 71, "x": 157, "type": "mouseover", "message_id": 1411}
{"sender": 3718, "msg_type": "MouseEvent", "y": 71, "x": 157, "type": "mouseover", "message_id": 1412}
{"sender": 3718, "msg_type": "MouseEvent", "y": 71, "x": 157, "type": "mousemove", "message_id": 1413}
{"sender": 3718, "msg_type": "MouseEvent", "y": 67, "x": 154, "type": "mousemove", "message_id": 1414}
{"sender": 3718, "msg_type": "MouseEvent", "y": 64, "x": 153, "type": "mouseover", "message_id": 1415}
{"sender": 3718, "msg_type": "MouseEvent", "y": 64, "x": 153, "type": "mousemove", "message_id": 1417}
{"sender": 3718, "msg_type": "MouseEvent", "y": 64, "x": 153, "type": "mouseover", "message_id": 1416}
{"sender": 3718, "msg_type": "MouseEvent", "y": 63, "x": 152, "type": "mousemove", "message_id": 1418}
{"sender": 3718, "msg_type": "MouseEvent", "y": 63, "x": 152, "type": "mousemove", "message_id": 1419}
{"sender": 3718, "msg_type": "MouseEvent", "y": 62, "x": 152, "type": "mousemove", "message_id": 1420}
{"sender": 3718, "msg_type": "MouseEvent", "y": 62, "x": 153, "type": "mousemove", "message_id": 1421}
{"sender": 3718, "msg_type": "MouseEvent", "y": 63, "x": 155, "type": "mouseover", "message_id": 1422}
{"sender": 3718, "msg_type": "MouseEvent", "y": 63, "x": 155, "type": "mouseover", "message_id": 1423}
{"sender": 3718, "msg_type": "MouseEvent", "y": 63, "x": 155, "type": "mousemove", "message_id": 1424}
{"sender": 3718, "msg_type": "MouseEvent", "y": 63, "x": 159, "type": "mousemove", "message_id": 1425}
{"sender": 3718, "msg_type": "MouseEvent", "y": 63, "x": 165, "type": "mousemove", "message_id": 1426}
{"sender": 3718, "msg_type": "MouseEvent", "y": 62, "x": 169, "type": "mousemove", "message_id": 1427}
{"sender": 3718, "msg_type": "MouseEvent", "y": 60, "x": 172, "type": "mouseover", "message_id": 1428}
{"sender": 3718, "msg_type": "MouseEvent", "y": 60, "x": 172, "type": "mouseover", "message_id": 1429}
{"sender": 3718, "msg_type": "MouseEvent", "y": 60, "x": 172, "type": "mousemove", "message_id": 1430}
{"sender": 3718, "msg_type": "MouseEvent", "y": 59, "x": 174, "type": "mouseover", "message_id": 1431}
{"sender": 3718, "msg_type": "MouseEvent", "y": 59, "x": 174, "type": "mouseover", "message_id": 1432}
{"sender": 3718, "msg_type": "MouseEvent", "y": 59, "x": 176, "type": "mousemove", "message_id": 1434}
{"sender": 3718, "msg_type": "MouseEvent", "y": 59, "x": 174, "type": "mousemove", "message_id": 1433}
{"sender": 3718, "msg_type": "MouseEvent", "y": 59, "x": 177, "type": "mouseover", "message_id": 1435}
{"sender": 3718, "msg_type": "MouseEvent", "y": 59, "x": 177, "type": "mouseover", "message_id": 1436}
{"sender": 3718, "msg_type": "MouseEvent", "y": 59, "x": 177, "type": "mousemove", "message_id": 1437}
{"sender": 3718, "msg_type": "MouseEvent", "y": 58, "x": 177, "type": "mousemove", "message_id": 1438}

120
recordings/test_rack.replay Normal file
View File

@ -0,0 +1,120 @@
{"panX": 88.50231573279976, "panY": 87.7890649686315, "scale": 0.7399999999999998, "sender": 4115, "msg_type": "ViewPort", "message_id": 0}
{"sender": 4115, "msg_type": "MouseEvent", "y": 29, "x": 185, "type": "mousemove", "message_id": 1643}
{"sender": 4115, "msg_type": "MouseEvent", "y": 32, "x": 185, "type": "mousemove", "message_id": 1644}
{"sender": 4115, "msg_type": "MouseEvent", "y": 34, "x": 186, "type": "mousemove", "message_id": 1645}
{"sender": 4115, "msg_type": "MouseEvent", "y": 38, "x": 187, "type": "mousemove", "message_id": 1646}
{"sender": 4115, "msg_type": "MouseEvent", "y": 42, "x": 189, "type": "mouseover", "message_id": 1647}
{"sender": 4115, "msg_type": "MouseEvent", "y": 42, "x": 189, "type": "mouseover", "message_id": 1648}
{"sender": 4115, "msg_type": "MouseEvent", "y": 42, "x": 189, "type": "mousemove", "message_id": 1649}
{"sender": 4115, "msg_type": "MouseEvent", "y": 49, "x": 192, "type": "mouseover", "message_id": 1650}
{"sender": 4115, "msg_type": "MouseEvent", "y": 49, "x": 192, "type": "mouseover", "message_id": 1651}
{"sender": 4115, "msg_type": "MouseEvent", "y": 49, "x": 192, "type": "mousemove", "message_id": 1652}
{"sender": 4115, "msg_type": "MouseEvent", "y": 58, "x": 196, "type": "mousemove", "message_id": 1653}
{"sender": 4115, "msg_type": "MouseEvent", "y": 70, "x": 203, "type": "mouseover", "message_id": 1654}
{"sender": 4115, "msg_type": "MouseEvent", "y": 70, "x": 203, "type": "mouseover", "message_id": 1655}
{"sender": 4115, "msg_type": "MouseEvent", "y": 70, "x": 203, "type": "mousemove", "message_id": 1656}
{"sender": 4115, "msg_type": "MouseEvent", "y": 84, "x": 210, "type": "mousemove", "message_id": 1657}
{"sender": 4115, "msg_type": "MouseEvent", "y": 97, "x": 217, "type": "mousemove", "message_id": 1658}
{"sender": 4115, "msg_type": "MouseEvent", "y": 116, "x": 226, "type": "mousemove", "message_id": 1659}
{"sender": 4115, "msg_type": "MouseEvent", "y": 133, "x": 235, "type": "mousemove", "message_id": 1660}
{"sender": 4115, "msg_type": "MouseEvent", "y": 152, "x": 244, "type": "mousemove", "message_id": 1661}
{"sender": 4115, "msg_type": "MouseEvent", "y": 168, "x": 250, "type": "mousemove", "message_id": 1662}
{"sender": 4115, "msg_type": "MouseEvent", "y": 186, "x": 258, "type": "mousemove", "message_id": 1663}
{"sender": 4115, "msg_type": "MouseEvent", "y": 204, "x": 265, "type": "mousemove", "message_id": 1664}
{"sender": 4115, "msg_type": "MouseEvent", "y": 210, "x": 267, "type": "mousemove", "message_id": 1665}
{"sender": 4115, "msg_type": "MouseEvent", "y": 223, "x": 271, "type": "mousemove", "message_id": 1666}
{"sender": 4115, "msg_type": "MouseEvent", "y": 235, "x": 275, "type": "mousemove", "message_id": 1667}
{"sender": 4115, "msg_type": "MouseEvent", "y": 246, "x": 278, "type": "mousemove", "message_id": 1668}
{"sender": 4115, "msg_type": "MouseEvent", "y": 255, "x": 280, "type": "mousemove", "message_id": 1669}
{"sender": 4115, "msg_type": "MouseEvent", "y": 262, "x": 282, "type": "mousemove", "message_id": 1670}
{"sender": 4115, "msg_type": "MouseEvent", "y": 265, "x": 283, "type": "mouseover", "message_id": 1671}
{"sender": 4115, "msg_type": "MouseEvent", "y": 265, "x": 283, "type": "mouseover", "message_id": 1672}
{"sender": 4115, "msg_type": "MouseEvent", "y": 270, "x": 284, "type": "mousemove", "message_id": 1674}
{"sender": 4115, "msg_type": "MouseEvent", "y": 265, "x": 283, "type": "mousemove", "message_id": 1673}
{"sender": 4115, "msg_type": "MouseEvent", "y": 273, "x": 284, "type": "mousemove", "message_id": 1675}
{"sender": 4115, "msg_type": "MouseEvent", "y": 278, "x": 285, "type": "mousemove", "message_id": 1677}
{"sender": 4115, "msg_type": "MouseEvent", "y": 276, "x": 284, "type": "mousemove", "message_id": 1676}
{"sender": 4115, "msg_type": "MouseEvent", "y": 280, "x": 285, "type": "mousemove", "message_id": 1678}
{"sender": 4115, "msg_type": "MouseEvent", "y": 281, "x": 285, "type": "mousemove", "message_id": 1679}
{"sender": 4115, "msg_type": "MouseEvent", "y": 282, "x": 285, "type": "mousemove", "message_id": 1680}
{"sender": 4115, "msg_type": "MouseEvent", "y": 282, "x": 285, "type": "mousemove", "message_id": 1681}
{"sender": 4115, "msg_type": "MouseEvent", "y": 283, "x": 285, "type": "mousemove", "message_id": 1682}
{"sender": 4115, "msg_type": "MouseEvent", "y": 283, "x": 285, "type": "mousemove", "message_id": 1683}
{"sender": 4115, "msg_type": "MouseEvent", "y": 283, "x": 285, "type": "mousemove", "message_id": 1684}
{"sender": 4115, "msg_type": "MouseEvent", "y": 283, "x": 284, "type": "mousemove", "message_id": 1685}
{"sender": 4115, "msg_type": "MouseEvent", "y": 283, "x": 284, "type": "mousemove", "message_id": 1686}
{"sender": 4115, "msg_type": "MouseEvent", "y": 283, "x": 284, "type": "mousedown", "message_id": 1687}
{"sender": 4115, "msg_type": "MouseEvent", "y": 283, "x": 284, "type": "mouseup", "message_id": 1688}
{"sender": 4115, "msg_type": "KeyEvent", "shiftKey": false, "message_id": 1689, "altKey": false, "metaKey": false, "key": "a", "ctrlKey": false, "type": "keydown", "keyCode": 65}
{"sender": 4115, "msg_type": "MouseEvent", "y": 283, "x": 284, "type": "mousedown", "message_id": 1691}
{"sender": 4115, "msg_type": "MouseEvent", "y": 283, "x": 284, "type": "mouseup", "message_id": 1693}
{"sender": 4115, "msg_type": "MouseEvent", "y": 283, "x": 284, "type": "mousedown", "message_id": 1694}
{"sender": 4115, "msg_type": "MouseEvent", "y": 283, "x": 284, "type": "mouseup", "message_id": 1697}
{"sender": 4115, "msg_type": "KeyEvent", "shiftKey": false, "message_id": 1698, "altKey": false, "metaKey": false, "key": "1", "ctrlKey": false, "type": "keydown", "keyCode": 49}
{"sender": 4115, "msg_type": "KeyEvent", "shiftKey": false, "message_id": 1700, "altKey": false, "metaKey": false, "key": "Enter", "ctrlKey": false, "type": "keydown", "keyCode": 13}
{"sender": 4115, "msg_type": "MouseEvent", "y": 282, "x": 283, "type": "mousemove", "message_id": 1702}
{"sender": 4115, "msg_type": "MouseEvent", "y": 281, "x": 282, "type": "mousemove", "message_id": 1703}
{"sender": 4115, "msg_type": "MouseEvent", "y": 280, "x": 281, "type": "mousemove", "message_id": 1704}
{"sender": 4115, "msg_type": "MouseEvent", "y": 278, "x": 280, "type": "mousemove", "message_id": 1705}
{"sender": 4115, "msg_type": "MouseEvent", "y": 276, "x": 277, "type": "mouseover", "message_id": 1706}
{"sender": 4115, "msg_type": "MouseEvent", "y": 276, "x": 277, "type": "mouseover", "message_id": 1707}
{"sender": 4115, "msg_type": "MouseEvent", "y": 276, "x": 277, "type": "mousemove", "message_id": 1708}
{"sender": 4115, "msg_type": "MouseEvent", "y": 273, "x": 275, "type": "mousemove", "message_id": 1709}
{"sender": 4115, "msg_type": "MouseEvent", "y": 271, "x": 273, "type": "mouseover", "message_id": 1710}
{"sender": 4115, "msg_type": "MouseEvent", "y": 271, "x": 273, "type": "mouseover", "message_id": 1711}
{"sender": 4115, "msg_type": "MouseEvent", "y": 271, "x": 273, "type": "mousemove", "message_id": 1712}
{"sender": 4115, "msg_type": "MouseEvent", "y": 267, "x": 270, "type": "mouseover", "message_id": 1713}
{"sender": 4115, "msg_type": "MouseEvent", "y": 267, "x": 270, "type": "mouseover", "message_id": 1714}
{"sender": 4115, "msg_type": "MouseEvent", "y": 267, "x": 270, "type": "mousemove", "message_id": 1715}
{"sender": 4115, "msg_type": "MouseEvent", "y": 258, "x": 265, "type": "mousemove", "message_id": 1716}
{"sender": 4115, "msg_type": "MouseEvent", "y": 252, "x": 260, "type": "mousemove", "message_id": 1717}
{"sender": 4115, "msg_type": "MouseEvent", "y": 243, "x": 255, "type": "mouseover", "message_id": 1718}
{"sender": 4115, "msg_type": "MouseEvent", "y": 243, "x": 255, "type": "mousemove", "message_id": 1720}
{"sender": 4115, "msg_type": "MouseEvent", "y": 243, "x": 255, "type": "mouseover", "message_id": 1719}
{"sender": 4115, "msg_type": "MouseEvent", "y": 232, "x": 250, "type": "mouseover", "message_id": 1721}
{"sender": 4115, "msg_type": "MouseEvent", "y": 232, "x": 250, "type": "mousemove", "message_id": 1723}
{"sender": 4115, "msg_type": "MouseEvent", "y": 232, "x": 250, "type": "mouseover", "message_id": 1722}
{"sender": 4115, "msg_type": "MouseEvent", "y": 209, "x": 239, "type": "mousemove", "message_id": 1724}
{"sender": 4115, "msg_type": "MouseEvent", "y": 182, "x": 228, "type": "mousemove", "message_id": 1726}
{"sender": 4115, "msg_type": "MouseEvent", "y": 192, "x": 232, "type": "mousemove", "message_id": 1725}
{"sender": 4115, "msg_type": "MouseEvent", "y": 148, "x": 214, "type": "mousemove", "message_id": 1727}
{"sender": 4115, "msg_type": "MouseEvent", "y": 136, "x": 209, "type": "mousemove", "message_id": 1728}
{"sender": 4115, "msg_type": "MouseEvent", "y": 116, "x": 202, "type": "mousemove", "message_id": 1729}
{"sender": 4115, "msg_type": "MouseEvent", "y": 96, "x": 194, "type": "mousemove", "message_id": 1730}
{"sender": 4115, "msg_type": "MouseEvent", "y": 80, "x": 188, "type": "mousemove", "message_id": 1731}
{"sender": 4115, "msg_type": "MouseEvent", "y": 73, "x": 186, "type": "mousemove", "message_id": 1732}
{"sender": 4115, "msg_type": "MouseEvent", "y": 59, "x": 180, "type": "mouseover", "message_id": 1733}
{"sender": 4115, "msg_type": "MouseEvent", "y": 59, "x": 180, "type": "mouseover", "message_id": 1734}
{"sender": 4115, "msg_type": "MouseEvent", "y": 59, "x": 180, "type": "mousemove", "message_id": 1735}
{"sender": 4115, "msg_type": "MouseEvent", "y": 47, "x": 177, "type": "mousemove", "message_id": 1736}
{"sender": 4115, "msg_type": "MouseEvent", "y": 38, "x": 173, "type": "mouseover", "message_id": 1737}
{"sender": 4115, "msg_type": "MouseEvent", "y": 38, "x": 173, "type": "mouseover", "message_id": 1738}
{"sender": 4115, "msg_type": "MouseEvent", "y": 38, "x": 173, "type": "mousemove", "message_id": 1739}
{"sender": 4115, "msg_type": "MouseEvent", "y": 30, "x": 171, "type": "mousemove", "message_id": 1740}
{"sender": 4115, "msg_type": "MouseEvent", "y": 23, "x": 169, "type": "mouseover", "message_id": 1741}
{"sender": 4115, "msg_type": "MouseEvent", "y": 23, "x": 169, "type": "mouseover", "message_id": 1742}
{"sender": 4115, "msg_type": "MouseEvent", "y": 23, "x": 169, "type": "mousemove", "message_id": 1743}
{"sender": 4115, "msg_type": "MouseEvent", "y": 21, "x": 168, "type": "mouseover", "message_id": 1744}
{"sender": 4115, "msg_type": "MouseEvent", "y": 21, "x": 168, "type": "mousemove", "message_id": 1746}
{"sender": 4115, "msg_type": "MouseEvent", "y": 21, "x": 168, "type": "mouseover", "message_id": 1745}
{"sender": 4115, "msg_type": "MouseEvent", "y": 16, "x": 167, "type": "mousemove", "message_id": 1747}
{"sender": 4115, "msg_type": "MouseEvent", "y": 11, "x": 165, "type": "mousemove", "message_id": 1749}
{"sender": 4115, "msg_type": "MouseEvent", "y": 13, "x": 166, "type": "mousemove", "message_id": 1748}
{"sender": 4115, "msg_type": "MouseEvent", "y": 9, "x": 164, "type": "mousemove", "message_id": 1750}
{"sender": 4115, "msg_type": "MouseEvent", "y": 11, "x": 164, "type": "mousemove", "message_id": 1752}
{"sender": 4115, "msg_type": "MouseEvent", "y": 9, "x": 164, "type": "mousemove", "message_id": 1751}
{"sender": 4115, "msg_type": "MouseEvent", "y": 13, "x": 165, "type": "mousemove", "message_id": 1753}
{"sender": 4115, "msg_type": "MouseEvent", "y": 14, "x": 166, "type": "mousemove", "message_id": 1754}
{"sender": 4115, "msg_type": "MouseEvent", "y": 16, "x": 166, "type": "mousemove", "message_id": 1755}
{"sender": 4115, "msg_type": "MouseEvent", "y": 17, "x": 167, "type": "mousemove", "message_id": 1756}
{"sender": 4115, "msg_type": "MouseEvent", "y": 19, "x": 168, "type": "mousemove", "message_id": 1757}
{"sender": 4115, "msg_type": "MouseEvent", "y": 20, "x": 169, "type": "mousemove", "message_id": 1758}
{"sender": 4115, "msg_type": "MouseEvent", "y": 22, "x": 170, "type": "mousemove", "message_id": 1759}
{"sender": 4115, "msg_type": "MouseEvent", "y": 24, "x": 170, "type": "mousemove", "message_id": 1760}
{"sender": 4115, "msg_type": "MouseEvent", "y": 26, "x": 171, "type": "mousemove", "message_id": 1761}
{"sender": 4115, "msg_type": "MouseEvent", "y": 27, "x": 172, "type": "mousemove", "message_id": 1762}
{"sender": 4115, "msg_type": "MouseEvent", "y": 29, "x": 172, "type": "mousemove", "message_id": 1763}
{"sender": 4115, "msg_type": "MouseEvent", "y": 30, "x": 173, "type": "mousemove", "message_id": 1764}
{"sender": 4115, "msg_type": "MouseEvent", "y": 31, "x": 173, "type": "mousemove", "message_id": 1765}
{"sender": 4115, "msg_type": "MouseEvent", "y": 32, "x": 174, "type": "mousemove", "message_id": 1766}
{"sender": 4115, "msg_type": "MouseEvent", "y": 33, "x": 174, "type": "mousemove", "message_id": 1767}

View File

@ -0,0 +1,76 @@
{"panX": 161.32635274860883, "panY": 151.1342654089031, "scale": 0.510765027322404, "sender": 3914, "msg_type": "ViewPort", "message_id": 0}
{"sender": 3914, "msg_type": "MouseEvent", "y": 40, "x": 183, "type": "mousemove", "message_id": 2}
{"sender": 3914, "msg_type": "MouseEvent", "y": 40, "x": 183, "type": "mousemove", "message_id": 3}
{"sender": 3914, "msg_type": "MouseEvent", "y": 41, "x": 183, "type": "mousemove", "message_id": 4}
{"sender": 3914, "msg_type": "MouseEvent", "y": 61, "x": 198, "type": "mouseover", "message_id": 5}
{"sender": 3914, "msg_type": "MouseEvent", "y": 61, "x": 198, "type": "mouseover", "message_id": 6}
{"sender": 3914, "msg_type": "MouseEvent", "y": 61, "x": 198, "type": "mousemove", "message_id": 7}
{"sender": 3914, "msg_type": "MouseEvent", "y": 70, "x": 203, "type": "mousemove", "message_id": 8}
{"sender": 3914, "msg_type": "MouseEvent", "y": 76, "x": 207, "type": "mousemove", "message_id": 9}
{"sender": 3914, "msg_type": "MouseEvent", "y": 84, "x": 213, "type": "mousemove", "message_id": 10}
{"sender": 3914, "msg_type": "MouseEvent", "y": 93, "x": 219, "type": "mousemove", "message_id": 11}
{"sender": 3914, "msg_type": "MouseEvent", "y": 111, "x": 233, "type": "mousemove", "message_id": 12}
{"sender": 3914, "msg_type": "MouseEvent", "y": 126, "x": 245, "type": "mousemove", "message_id": 13}
{"sender": 3914, "msg_type": "MouseEvent", "y": 141, "x": 257, "type": "mousemove", "message_id": 14}
{"sender": 3914, "msg_type": "MouseEvent", "y": 156, "x": 268, "type": "mousemove", "message_id": 15}
{"sender": 3914, "msg_type": "MouseEvent", "y": 169, "x": 277, "type": "mousemove", "message_id": 16}
{"sender": 3914, "msg_type": "MouseEvent", "y": 180, "x": 283, "type": "mousemove", "message_id": 17}
{"sender": 3914, "msg_type": "MouseEvent", "y": 189, "x": 286, "type": "mousemove", "message_id": 18}
{"sender": 3914, "msg_type": "MouseEvent", "y": 196, "x": 287, "type": "mouseover", "message_id": 20}
{"sender": 3914, "msg_type": "MouseEvent", "y": 196, "x": 287, "type": "mouseover", "message_id": 19}
{"sender": 3914, "msg_type": "MouseEvent", "y": 196, "x": 287, "type": "mousemove", "message_id": 21}
{"sender": 3914, "msg_type": "MouseEvent", "y": 201, "x": 286, "type": "mousemove", "message_id": 22}
{"sender": 3914, "msg_type": "MouseEvent", "y": 204, "x": 284, "type": "mouseover", "message_id": 23}
{"sender": 3914, "msg_type": "MouseEvent", "y": 204, "x": 284, "type": "mouseover", "message_id": 24}
{"sender": 3914, "msg_type": "MouseEvent", "y": 204, "x": 284, "type": "mousemove", "message_id": 25}
{"sender": 3914, "msg_type": "MouseEvent", "y": 207, "x": 282, "type": "mousemove", "message_id": 26}
{"sender": 3914, "msg_type": "MouseEvent", "y": 208, "x": 281, "type": "mouseover", "message_id": 27}
{"sender": 3914, "msg_type": "MouseEvent", "y": 208, "x": 281, "type": "mouseover", "message_id": 28}
{"sender": 3914, "msg_type": "MouseEvent", "y": 208, "x": 281, "type": "mousemove", "message_id": 29}
{"sender": 3914, "msg_type": "MouseEvent", "y": 209, "x": 279, "type": "mousemove", "message_id": 31}
{"sender": 3914, "msg_type": "MouseEvent", "y": 209, "x": 280, "type": "mousemove", "message_id": 30}
{"sender": 3914, "msg_type": "MouseEvent", "y": 209, "x": 279, "type": "mousemove", "message_id": 32}
{"sender": 3914, "msg_type": "MouseEvent", "y": 209, "x": 279, "type": "mousemove", "message_id": 33}
{"sender": 3914, "msg_type": "MouseEvent", "y": 208, "x": 279, "type": "mousemove", "message_id": 34}
{"sender": 3914, "msg_type": "MouseEvent", "y": 207, "x": 279, "type": "mousemove", "message_id": 35}
{"sender": 3914, "msg_type": "MouseEvent", "y": 204, "x": 279, "type": "mousemove", "message_id": 36}
{"sender": 3914, "msg_type": "MouseEvent", "y": 201, "x": 279, "type": "mousemove", "message_id": 37}
{"sender": 3914, "msg_type": "MouseEvent", "y": 196, "x": 278, "type": "mousemove", "message_id": 38}
{"sender": 3914, "msg_type": "MouseEvent", "y": 190, "x": 277, "type": "mousemove", "message_id": 39}
{"sender": 3914, "msg_type": "MouseEvent", "y": 181, "x": 275, "type": "mouseover", "message_id": 40}
{"sender": 3914, "msg_type": "MouseEvent", "y": 181, "x": 275, "type": "mouseover", "message_id": 41}
{"sender": 3914, "msg_type": "MouseEvent", "y": 181, "x": 275, "type": "mousemove", "message_id": 42}
{"sender": 3914, "msg_type": "MouseEvent", "y": 169, "x": 270, "type": "mousemove", "message_id": 43}
{"sender": 3914, "msg_type": "MouseEvent", "y": 155, "x": 265, "type": "mousemove", "message_id": 44}
{"sender": 3914, "msg_type": "MouseEvent", "y": 141, "x": 260, "type": "mousemove", "message_id": 45}
{"sender": 3914, "msg_type": "MouseEvent", "y": 126, "x": 255, "type": "mousemove", "message_id": 46}
{"sender": 3914, "msg_type": "MouseEvent", "y": 112, "x": 248, "type": "mousemove", "message_id": 47}
{"sender": 3914, "msg_type": "MouseEvent", "y": 94, "x": 239, "type": "mousemove", "message_id": 48}
{"sender": 3914, "msg_type": "MouseEvent", "y": 86, "x": 234, "type": "mousemove", "message_id": 49}
{"sender": 3914, "msg_type": "MouseEvent", "y": 74, "x": 225, "type": "mousemove", "message_id": 50}
{"sender": 3914, "msg_type": "MouseEvent", "y": 69, "x": 220, "type": "mousemove", "message_id": 51}
{"sender": 3914, "msg_type": "MouseEvent", "y": 64, "x": 213, "type": "mousemove", "message_id": 52}
{"sender": 3914, "msg_type": "MouseEvent", "y": 62, "x": 209, "type": "mousemove", "message_id": 53}
{"sender": 3914, "msg_type": "MouseEvent", "y": 60, "x": 205, "type": "mouseover", "message_id": 54}
{"sender": 3914, "msg_type": "MouseEvent", "y": 60, "x": 205, "type": "mouseover", "message_id": 55}
{"sender": 3914, "msg_type": "MouseEvent", "y": 60, "x": 205, "type": "mousemove", "message_id": 56}
{"sender": 3914, "msg_type": "MouseEvent", "y": 59, "x": 202, "type": "mouseover", "message_id": 57}
{"sender": 3914, "msg_type": "MouseEvent", "y": 59, "x": 202, "type": "mouseover", "message_id": 58}
{"sender": 3914, "msg_type": "MouseEvent", "y": 59, "x": 202, "type": "mousemove", "message_id": 59}
{"sender": 3914, "msg_type": "MouseEvent", "y": 58, "x": 201, "type": "mouseover", "message_id": 60}
{"sender": 3914, "msg_type": "MouseEvent", "y": 58, "x": 201, "type": "mouseover", "message_id": 61}
{"sender": 3914, "msg_type": "MouseEvent", "y": 58, "x": 201, "type": "mousemove", "message_id": 62}
{"sender": 3914, "msg_type": "MouseEvent", "y": 58, "x": 200, "type": "mousemove", "message_id": 63}
{"sender": 3914, "msg_type": "MouseEvent", "y": 58, "x": 200, "type": "mousemove", "message_id": 64}
{"sender": 3914, "msg_type": "MouseEvent", "y": 58, "x": 199, "type": "mousemove", "message_id": 66}
{"sender": 3914, "msg_type": "MouseEvent", "y": 58, "x": 200, "type": "mousemove", "message_id": 65}
{"sender": 3914, "msg_type": "MouseEvent", "y": 58, "x": 199, "type": "mousemove", "message_id": 68}
{"sender": 3914, "msg_type": "MouseEvent", "y": 58, "x": 199, "type": "mousemove", "message_id": 67}
{"sender": 3914, "msg_type": "MouseEvent", "y": 58, "x": 199, "type": "mousemove", "message_id": 69}
{"sender": 3914, "msg_type": "MouseEvent", "y": 58, "x": 198, "type": "mousemove", "message_id": 70}
{"sender": 3914, "msg_type": "MouseEvent", "y": 58, "x": 198, "type": "mousemove", "message_id": 71}
{"sender": 3914, "msg_type": "MouseEvent", "y": 57, "x": 197, "type": "mousemove", "message_id": 72}
{"sender": 3914, "msg_type": "MouseEvent", "y": 56, "x": 196, "type": "mousemove", "message_id": 73}
{"sender": 3914, "msg_type": "MouseEvent", "y": 55, "x": 194, "type": "mouseover", "message_id": 74}
{"sender": 3914, "msg_type": "MouseEvent", "y": 55, "x": 194, "type": "mouseover", "message_id": 75}
{"sender": 3914, "msg_type": "MouseEvent", "y": 55, "x": 194, "type": "mousemove", "message_id": 76}

View File

@ -0,0 +1,167 @@
{"scale": 0.8300384220585794, "sender": 4518, "msg_type": "ViewPort", "panY": 533.1751450631841, "panX": 1969.071635134498, "message_id": 142}
{"touches": [{"screenY": 321, "screenX": 575}], "type": "touchstart", "sender": 4518, "msg_type": "TouchEvent", "message_id": 143}
{"touches": [{"screenY": 288, "screenX": 561}], "type": "touchmove", "sender": 4518, "msg_type": "TouchEvent", "message_id": 145}
{"touches": [{"screenY": 298, "screenX": 568}], "type": "touchmove", "sender": 4518, "msg_type": "TouchEvent", "message_id": 144}
{"touches": [{"screenY": 262, "screenX": 540}], "type": "touchmove", "sender": 4518, "msg_type": "TouchEvent", "message_id": 146}
{"touches": [{"screenY": 222, "screenX": 495}], "type": "touchmove", "sender": 4518, "msg_type": "TouchEvent", "message_id": 148}
{"touches": [{"screenY": 234, "screenX": 512}], "type": "touchmove", "sender": 4518, "msg_type": "TouchEvent", "message_id": 147}
{"touches": [{"screenY": 213, "screenX": 477}], "type": "touchmove", "sender": 4518, "msg_type": "TouchEvent", "message_id": 149}
{"touches": [{"screenY": 207, "screenX": 460}], "type": "touchmove", "sender": 4518, "msg_type": "TouchEvent", "message_id": 150}
{"touches": [{"screenY": 202, "screenX": 444}], "type": "touchmove", "sender": 4518, "msg_type": "TouchEvent", "message_id": 151}
{"touches": [{"screenY": 200, "screenX": 429}], "type": "touchmove", "sender": 4518, "msg_type": "TouchEvent", "message_id": 152}
{"touches": [{"screenY": 200, "screenX": 416}], "type": "touchmove", "sender": 4518, "msg_type": "TouchEvent", "message_id": 153}
{"touches": [{"screenY": 202, "screenX": 403}], "type": "touchmove", "sender": 4518, "msg_type": "TouchEvent", "message_id": 154}
{"touches": [{"screenY": 208, "screenX": 392}], "type": "touchmove", "sender": 4518, "msg_type": "TouchEvent", "message_id": 155}
{"touches": [{"screenY": 216, "screenX": 384}], "type": "touchmove", "sender": 4518, "msg_type": "TouchEvent", "message_id": 156}
{"touches": [{"screenY": 221, "screenX": 380}], "type": "touchmove", "sender": 4518, "msg_type": "TouchEvent", "message_id": 157}
{"touches": [], "type": "touchend", "sender": 4518, "msg_type": "TouchEvent", "message_id": 158}
{"touches": [{"screenY": 417, "screenX": 524}], "type": "touchstart", "sender": 4518, "msg_type": "TouchEvent", "message_id": 159}
{"touches": [{"screenY": 410, "screenX": 516}], "type": "touchmove", "sender": 4518, "msg_type": "TouchEvent", "message_id": 161}
{"touches": [{"screenY": 402, "screenX": 506}], "type": "touchmove", "sender": 4518, "msg_type": "TouchEvent", "message_id": 162}
{"touches": [{"screenY": 390, "screenX": 492}], "type": "touchmove", "sender": 4518, "msg_type": "TouchEvent", "message_id": 164}
{"touches": [{"screenY": 383, "screenX": 484}], "type": "touchmove", "sender": 4518, "msg_type": "TouchEvent", "message_id": 166}
{"touches": [{"screenY": 374, "screenX": 475}], "type": "touchmove", "sender": 4518, "msg_type": "TouchEvent", "message_id": 168}
{"touches": [{"screenY": 364, "screenX": 468}], "type": "touchmove", "sender": 4518, "msg_type": "TouchEvent", "message_id": 170}
{"touches": [{"screenY": 353, "screenX": 461}], "type": "touchmove", "sender": 4518, "msg_type": "TouchEvent", "message_id": 172}
{"touches": [{"screenY": 342, "screenX": 455}], "type": "touchmove", "sender": 4518, "msg_type": "TouchEvent", "message_id": 174}
{"touches": [{"screenY": 330, "screenX": 450}], "type": "touchmove", "sender": 4518, "msg_type": "TouchEvent", "message_id": 176}
{"touches": [{"screenY": 317, "screenX": 445}], "type": "touchmove", "sender": 4518, "msg_type": "TouchEvent", "message_id": 178}
{"touches": [{"screenY": 304, "screenX": 440}], "type": "touchmove", "sender": 4518, "msg_type": "TouchEvent", "message_id": 180}
{"touches": [{"screenY": 291, "screenX": 434}], "type": "touchmove", "sender": 4518, "msg_type": "TouchEvent", "message_id": 182}
{"touches": [{"screenY": 279, "screenX": 427}], "type": "touchmove", "sender": 4518, "msg_type": "TouchEvent", "message_id": 184}
{"touches": [{"screenY": 267, "screenX": 421}], "type": "touchmove", "sender": 4518, "msg_type": "TouchEvent", "message_id": 186}
{"touches": [{"screenY": 255, "screenX": 412}], "type": "touchmove", "sender": 4518, "msg_type": "TouchEvent", "message_id": 188}
{"touches": [{"screenY": 246, "screenX": 402}], "type": "touchmove", "sender": 4518, "msg_type": "TouchEvent", "message_id": 190}
{"touches": [{"screenY": 237, "screenX": 391}], "type": "touchmove", "sender": 4518, "msg_type": "TouchEvent", "message_id": 192}
{"touches": [{"screenY": 231, "screenX": 378}], "type": "touchmove", "sender": 4518, "msg_type": "TouchEvent", "message_id": 194}
{"touches": [{"screenY": 225, "screenX": 365}], "type": "touchmove", "sender": 4518, "msg_type": "TouchEvent", "message_id": 196}
{"touches": [{"screenY": 223, "screenX": 352}], "type": "touchmove", "sender": 4518, "msg_type": "TouchEvent", "message_id": 198}
{"touches": [{"screenY": 223, "screenX": 340}], "type": "touchmove", "sender": 4518, "msg_type": "TouchEvent", "message_id": 200}
{"touches": [{"screenY": 227, "screenX": 326}], "type": "touchmove", "sender": 4518, "msg_type": "TouchEvent", "message_id": 202}
{"touches": [{"screenY": 236, "screenX": 311}], "type": "touchmove", "sender": 4518, "msg_type": "TouchEvent", "message_id": 204}
{"touches": [{"screenY": 248, "screenX": 297}], "type": "touchmove", "sender": 4518, "msg_type": "TouchEvent", "message_id": 206}
{"touches": [{"screenY": 263, "screenX": 284}], "type": "touchmove", "sender": 4518, "msg_type": "TouchEvent", "message_id": 208}
{"touches": [{"screenY": 279, "screenX": 274}], "type": "touchmove", "sender": 4518, "msg_type": "TouchEvent", "message_id": 210}
{"touches": [{"screenY": 293, "screenX": 269}], "type": "touchmove", "sender": 4518, "msg_type": "TouchEvent", "message_id": 212}
{"touches": [{"screenY": 309, "screenX": 267}], "type": "touchmove", "sender": 4518, "msg_type": "TouchEvent", "message_id": 214}
{"touches": [{"screenY": 319, "screenX": 267}], "type": "touchmove", "sender": 4518, "msg_type": "TouchEvent", "message_id": 216}
{"touches": [{"screenY": 327, "screenX": 269}], "type": "touchmove", "sender": 4518, "msg_type": "TouchEvent", "message_id": 218}
{"touches": [{"screenY": 329, "screenX": 271}], "type": "touchmove", "sender": 4518, "msg_type": "TouchEvent", "message_id": 220}
{"touches": [], "type": "touchend", "sender": 4518, "msg_type": "TouchEvent", "message_id": 222}
{"touches": [{"screenY": 420, "screenX": 726}], "type": "touchstart", "sender": 4518, "msg_type": "TouchEvent", "message_id": 223}
{"touches": [{"screenY": 408, "screenX": 716}], "type": "touchmove", "sender": 4518, "msg_type": "TouchEvent", "message_id": 228}
{"touches": [{"screenY": 393, "screenX": 698}], "type": "touchmove", "sender": 4518, "msg_type": "TouchEvent", "message_id": 229}
{"touches": [{"screenY": 371, "screenX": 676}], "type": "touchmove", "sender": 4518, "msg_type": "TouchEvent", "message_id": 231}
{"touches": [{"screenY": 361, "screenX": 666}], "type": "touchmove", "sender": 4518, "msg_type": "TouchEvent", "message_id": 233}
{"touches": [{"screenY": 350, "screenX": 659}], "type": "touchmove", "sender": 4518, "msg_type": "TouchEvent", "message_id": 235}
{"touches": [{"screenY": 339, "screenX": 653}], "type": "touchmove", "sender": 4518, "msg_type": "TouchEvent", "message_id": 237}
{"touches": [{"screenY": 328, "screenX": 648}], "type": "touchmove", "sender": 4518, "msg_type": "TouchEvent", "message_id": 239}
{"touches": [{"screenY": 316, "screenX": 644}], "type": "touchmove", "sender": 4518, "msg_type": "TouchEvent", "message_id": 241}
{"touches": [{"screenY": 303, "screenX": 640}], "type": "touchmove", "sender": 4518, "msg_type": "TouchEvent", "message_id": 243}
{"touches": [{"screenY": 290, "screenX": 636}], "type": "touchmove", "sender": 4518, "msg_type": "TouchEvent", "message_id": 245}
{"touches": [{"screenY": 277, "screenX": 632}], "type": "touchmove", "sender": 4518, "msg_type": "TouchEvent", "message_id": 247}
{"touches": [{"screenY": 264, "screenX": 626}], "type": "touchmove", "sender": 4518, "msg_type": "TouchEvent", "message_id": 249}
{"touches": [{"screenY": 251, "screenX": 618}], "type": "touchmove", "sender": 4518, "msg_type": "TouchEvent", "message_id": 251}
{"touches": [{"screenY": 239, "screenX": 609}], "type": "touchmove", "sender": 4518, "msg_type": "TouchEvent", "message_id": 253}
{"touches": [{"screenY": 228, "screenX": 597}], "type": "touchmove", "sender": 4518, "msg_type": "TouchEvent", "message_id": 255}
{"touches": [{"screenY": 221, "screenX": 583}], "type": "touchmove", "sender": 4518, "msg_type": "TouchEvent", "message_id": 257}
{"touches": [{"screenY": 217, "screenX": 568}], "type": "touchmove", "sender": 4518, "msg_type": "TouchEvent", "message_id": 259}
{"touches": [{"screenY": 217, "screenX": 552}], "type": "touchmove", "sender": 4518, "msg_type": "TouchEvent", "message_id": 261}
{"touches": [{"screenY": 220, "screenX": 534}], "type": "touchmove", "sender": 4518, "msg_type": "TouchEvent", "message_id": 263}
{"touches": [{"screenY": 227, "screenX": 519}], "type": "touchmove", "sender": 4518, "msg_type": "TouchEvent", "message_id": 265}
{"touches": [{"screenY": 238, "screenX": 503}], "type": "touchmove", "sender": 4518, "msg_type": "TouchEvent", "message_id": 267}
{"touches": [{"screenY": 248, "screenX": 492}], "type": "touchmove", "sender": 4518, "msg_type": "TouchEvent", "message_id": 269}
{"touches": [{"screenY": 256, "screenX": 486}], "type": "touchmove", "sender": 4518, "msg_type": "TouchEvent", "message_id": 271}
{"touches": [{"screenY": 264, "screenX": 483}], "type": "touchmove", "sender": 4518, "msg_type": "TouchEvent", "message_id": 273}
{"touches": [], "type": "touchend", "sender": 4518, "msg_type": "TouchEvent", "message_id": 275}
{"touches": [{"screenY": 353, "screenX": 381}], "type": "touchstart", "sender": 4518, "msg_type": "TouchEvent", "message_id": 276}
{"touches": [{"screenY": 370, "screenX": 377}], "type": "touchmove", "sender": 4518, "msg_type": "TouchEvent", "message_id": 279}
{"touches": [{"screenY": 355, "screenX": 378}], "type": "touchmove", "sender": 4518, "msg_type": "TouchEvent", "message_id": 278}
{"touches": [{"screenY": 381, "screenX": 377}], "type": "touchmove", "sender": 4518, "msg_type": "TouchEvent", "message_id": 280}
{"touches": [{"screenY": 390, "screenX": 382}], "type": "touchmove", "sender": 4518, "msg_type": "TouchEvent", "message_id": 281}
{"touches": [{"screenY": 399, "screenX": 390}], "type": "touchmove", "sender": 4518, "msg_type": "TouchEvent", "message_id": 282}
{"touches": [{"screenY": 405, "screenX": 401}], "type": "touchmove", "sender": 4518, "msg_type": "TouchEvent", "message_id": 283}
{"touches": [{"screenY": 411, "screenX": 413}], "type": "touchmove", "sender": 4518, "msg_type": "TouchEvent", "message_id": 284}
{"touches": [{"screenY": 416, "screenX": 426}], "type": "touchmove", "sender": 4518, "msg_type": "TouchEvent", "message_id": 285}
{"touches": [{"screenY": 419, "screenX": 439}], "type": "touchmove", "sender": 4518, "msg_type": "TouchEvent", "message_id": 286}
{"touches": [{"screenY": 421, "screenX": 454}], "type": "touchmove", "sender": 4518, "msg_type": "TouchEvent", "message_id": 287}
{"touches": [{"screenY": 421, "screenX": 470}], "type": "touchmove", "sender": 4518, "msg_type": "TouchEvent", "message_id": 288}
{"touches": [{"screenY": 421, "screenX": 486}], "type": "touchmove", "sender": 4518, "msg_type": "TouchEvent", "message_id": 289}
{"touches": [{"screenY": 420, "screenX": 502}], "type": "touchmove", "sender": 4518, "msg_type": "TouchEvent", "message_id": 290}
{"touches": [{"screenY": 416, "screenX": 517}], "type": "touchmove", "sender": 4518, "msg_type": "TouchEvent", "message_id": 291}
{"touches": [{"screenY": 412, "screenX": 528}], "type": "touchmove", "sender": 4518, "msg_type": "TouchEvent", "message_id": 292}
{"touches": [{"screenY": 409, "screenX": 536}], "type": "touchmove", "sender": 4518, "msg_type": "TouchEvent", "message_id": 293}
{"touches": [{"screenY": 406, "screenX": 543}], "type": "touchmove", "sender": 4518, "msg_type": "TouchEvent", "message_id": 294}
{"touches": [{"screenY": 402, "screenX": 546}], "type": "touchmove", "sender": 4518, "msg_type": "TouchEvent", "message_id": 295}
{"touches": [{"screenY": 399, "screenX": 548}], "type": "touchmove", "sender": 4518, "msg_type": "TouchEvent", "message_id": 296}
{"touches": [{"screenY": 396, "screenX": 548}], "type": "touchmove", "sender": 4518, "msg_type": "TouchEvent", "message_id": 297}
{"touches": [{"screenY": 392, "screenX": 548}], "type": "touchmove", "sender": 4518, "msg_type": "TouchEvent", "message_id": 298}
{"touches": [{"screenY": 388, "screenX": 548}], "type": "touchmove", "sender": 4518, "msg_type": "TouchEvent", "message_id": 299}
{"touches": [{"screenY": 384, "screenX": 548}], "type": "touchmove", "sender": 4518, "msg_type": "TouchEvent", "message_id": 300}
{"touches": [{"screenY": 382, "screenX": 547}], "type": "touchmove", "sender": 4518, "msg_type": "TouchEvent", "message_id": 301}
{"touches": [{"screenY": 382, "screenX": 545}], "type": "touchmove", "sender": 4518, "msg_type": "TouchEvent", "message_id": 302}
{"touches": [{"screenY": 381, "screenX": 543}], "type": "touchmove", "sender": 4518, "msg_type": "TouchEvent", "message_id": 303}
{"touches": [{"screenY": 381, "screenX": 538}], "type": "touchmove", "sender": 4518, "msg_type": "TouchEvent", "message_id": 304}
{"touches": [{"screenY": 382, "screenX": 531}], "type": "touchmove", "sender": 4518, "msg_type": "TouchEvent", "message_id": 305}
{"touches": [], "type": "touchend", "sender": 4518, "msg_type": "TouchEvent", "message_id": 306}
{"touches": [{"screenY": 498, "screenX": 327}, {"screenY": 359, "screenX": 594}], "type": "touchmove", "sender": 4518, "msg_type": "TouchEvent", "message_id": 309}
{"touches": [{"screenY": 504, "screenX": 325}, {"screenY": 359, "screenX": 594}], "type": "touchstart", "sender": 4518, "msg_type": "TouchEvent", "message_id": 308}
{"touches": [{"screenY": 504, "screenX": 325}], "type": "touchstart", "sender": 4518, "msg_type": "TouchEvent", "message_id": 307}
{"touches": [{"screenY": 498, "screenX": 327}, {"screenY": 359, "screenX": 594}], "type": "touchmove", "sender": 4518, "msg_type": "TouchEvent", "message_id": 310}
{"touches": [{"screenY": 498, "screenX": 329}, {"screenY": 363, "screenX": 588}], "type": "touchmove", "sender": 4518, "msg_type": "TouchEvent", "message_id": 312}
{"touches": [{"screenY": 498, "screenX": 329}, {"screenY": 363, "screenX": 588}], "type": "touchmove", "sender": 4518, "msg_type": "TouchEvent", "message_id": 311}
{"touches": [{"screenY": 498, "screenX": 331}, {"screenY": 365, "screenX": 585}], "type": "touchmove", "sender": 4518, "msg_type": "TouchEvent", "message_id": 313}
{"touches": [{"screenY": 498, "screenX": 331}, {"screenY": 365, "screenX": 585}], "type": "touchmove", "sender": 4518, "msg_type": "TouchEvent", "message_id": 314}
{"touches": [{"screenY": 498, "screenX": 334}, {"screenY": 368, "screenX": 580}], "type": "touchmove", "sender": 4518, "msg_type": "TouchEvent", "message_id": 315}
{"touches": [{"screenY": 497, "screenX": 336}, {"screenY": 370, "screenX": 576}], "type": "touchmove", "sender": 4518, "msg_type": "TouchEvent", "message_id": 317}
{"touches": [{"screenY": 498, "screenX": 334}, {"screenY": 368, "screenX": 580}], "type": "touchmove", "sender": 4518, "msg_type": "TouchEvent", "message_id": 316}
{"touches": [{"screenY": 497, "screenX": 336}, {"screenY": 370, "screenX": 576}], "type": "touchmove", "sender": 4518, "msg_type": "TouchEvent", "message_id": 318}
{"touches": [{"screenY": 496, "screenX": 339}, {"screenY": 373, "screenX": 572}], "type": "touchmove", "sender": 4518, "msg_type": "TouchEvent", "message_id": 319}
{"touches": [{"screenY": 496, "screenX": 339}, {"screenY": 373, "screenX": 572}], "type": "touchmove", "sender": 4518, "msg_type": "TouchEvent", "message_id": 320}
{"touches": [{"screenY": 496, "screenX": 340}, {"screenY": 374, "screenX": 568}], "type": "touchmove", "sender": 4518, "msg_type": "TouchEvent", "message_id": 321}
{"touches": [{"screenY": 496, "screenX": 340}, {"screenY": 374, "screenX": 568}], "type": "touchmove", "sender": 4518, "msg_type": "TouchEvent", "message_id": 322}
{"touches": [{"screenY": 495, "screenX": 342}, {"screenY": 375, "screenX": 563}], "type": "touchmove", "sender": 4518, "msg_type": "TouchEvent", "message_id": 323}
{"touches": [{"screenY": 495, "screenX": 342}, {"screenY": 375, "screenX": 563}], "type": "touchmove", "sender": 4518, "msg_type": "TouchEvent", "message_id": 324}
{"touches": [{"screenY": 495, "screenX": 344}, {"screenY": 377, "screenX": 559}], "type": "touchmove", "sender": 4518, "msg_type": "TouchEvent", "message_id": 325}
{"touches": [{"screenY": 494, "screenX": 346}, {"screenY": 378, "screenX": 556}], "type": "touchmove", "sender": 4518, "msg_type": "TouchEvent", "message_id": 327}
{"touches": [{"screenY": 495, "screenX": 344}, {"screenY": 377, "screenX": 559}], "type": "touchmove", "sender": 4518, "msg_type": "TouchEvent", "message_id": 326}
{"touches": [{"screenY": 494, "screenX": 346}, {"screenY": 378, "screenX": 556}], "type": "touchmove", "sender": 4518, "msg_type": "TouchEvent", "message_id": 328}
{"touches": [{"screenY": 494, "screenX": 348}, {"screenY": 380, "screenX": 553}], "type": "touchmove", "sender": 4518, "msg_type": "TouchEvent", "message_id": 329}
{"touches": [{"screenY": 494, "screenX": 348}, {"screenY": 380, "screenX": 553}], "type": "touchmove", "sender": 4518, "msg_type": "TouchEvent", "message_id": 330}
{"touches": [{"screenY": 493, "screenX": 350}, {"screenY": 382, "screenX": 550}], "type": "touchmove", "sender": 4518, "msg_type": "TouchEvent", "message_id": 331}
{"touches": [{"screenY": 493, "screenX": 351}, {"screenY": 383, "screenX": 548}], "type": "touchmove", "sender": 4518, "msg_type": "TouchEvent", "message_id": 333}
{"touches": [{"screenY": 493, "screenX": 350}, {"screenY": 382, "screenX": 550}], "type": "touchmove", "sender": 4518, "msg_type": "TouchEvent", "message_id": 332}
{"touches": [{"screenY": 493, "screenX": 351}, {"screenY": 383, "screenX": 548}], "type": "touchmove", "sender": 4518, "msg_type": "TouchEvent", "message_id": 334}
{"touches": [{"screenY": 493, "screenX": 352}, {"screenY": 384, "screenX": 547}], "type": "touchmove", "sender": 4518, "msg_type": "TouchEvent", "message_id": 335}
{"touches": [{"screenY": 493, "screenX": 352}, {"screenY": 384, "screenX": 547}], "type": "touchmove", "sender": 4518, "msg_type": "TouchEvent", "message_id": 336}
{"touches": [{"screenY": 493, "screenX": 353}, {"screenY": 384, "screenX": 547}], "type": "touchmove", "sender": 4518, "msg_type": "TouchEvent", "message_id": 337}
{"touches": [{"screenY": 493, "screenX": 353}, {"screenY": 384, "screenX": 547}], "type": "touchmove", "sender": 4518, "msg_type": "TouchEvent", "message_id": 338}
{"touches": [{"screenY": 495, "screenX": 345}, {"screenY": 378, "screenX": 553}], "type": "touchmove", "sender": 4518, "msg_type": "TouchEvent", "message_id": 339}
{"touches": [{"screenY": 498, "screenX": 337}, {"screenY": 373, "screenX": 559}], "type": "touchmove", "sender": 4518, "msg_type": "TouchEvent", "message_id": 342}
{"touches": [{"screenY": 498, "screenX": 337}, {"screenY": 373, "screenX": 559}], "type": "touchmove", "sender": 4518, "msg_type": "TouchEvent", "message_id": 341}
{"touches": [{"screenY": 495, "screenX": 345}, {"screenY": 378, "screenX": 553}], "type": "touchmove", "sender": 4518, "msg_type": "TouchEvent", "message_id": 340}
{"touches": [{"screenY": 498, "screenX": 334}, {"screenY": 370, "screenX": 563}], "type": "touchmove", "sender": 4518, "msg_type": "TouchEvent", "message_id": 343}
{"touches": [{"screenY": 498, "screenX": 334}, {"screenY": 370, "screenX": 563}], "type": "touchmove", "sender": 4518, "msg_type": "TouchEvent", "message_id": 344}
{"touches": [{"screenY": 498, "screenX": 332}, {"screenY": 369, "screenX": 564}], "type": "touchmove", "sender": 4518, "msg_type": "TouchEvent", "message_id": 346}
{"touches": [{"screenY": 498, "screenX": 332}, {"screenY": 369, "screenX": 564}], "type": "touchmove", "sender": 4518, "msg_type": "TouchEvent", "message_id": 345}
{"touches": [{"screenY": 498, "screenX": 331}, {"screenY": 368, "screenX": 566}], "type": "touchmove", "sender": 4518, "msg_type": "TouchEvent", "message_id": 347}
{"touches": [{"screenY": 498, "screenX": 331}, {"screenY": 368, "screenX": 566}], "type": "touchmove", "sender": 4518, "msg_type": "TouchEvent", "message_id": 348}
{"touches": [{"screenY": 498, "screenX": 330}, {"screenY": 366, "screenX": 566}], "type": "touchmove", "sender": 4518, "msg_type": "TouchEvent", "message_id": 350}
{"touches": [{"screenY": 498, "screenX": 330}, {"screenY": 366, "screenX": 566}], "type": "touchmove", "sender": 4518, "msg_type": "TouchEvent", "message_id": 349}
{"touches": [{"screenY": 498, "screenX": 329}, {"screenY": 365, "screenX": 567}], "type": "touchmove", "sender": 4518, "msg_type": "TouchEvent", "message_id": 351}
{"touches": [{"screenY": 498, "screenX": 329}, {"screenY": 365, "screenX": 567}], "type": "touchmove", "sender": 4518, "msg_type": "TouchEvent", "message_id": 352}
{"touches": [{"screenY": 498, "screenX": 328}, {"screenY": 364, "screenX": 568}], "type": "touchmove", "sender": 4518, "msg_type": "TouchEvent", "message_id": 353}
{"touches": [{"screenY": 498, "screenX": 328}, {"screenY": 364, "screenX": 568}], "type": "touchmove", "sender": 4518, "msg_type": "TouchEvent", "message_id": 354}
{"touches": [{"screenY": 498, "screenX": 328}, {"screenY": 364, "screenX": 569}], "type": "touchmove", "sender": 4518, "msg_type": "TouchEvent", "message_id": 355}
{"touches": [{"screenY": 498, "screenX": 328}, {"screenY": 364, "screenX": 569}], "type": "touchmove", "sender": 4518, "msg_type": "TouchEvent", "message_id": 356}
{"touches": [{"screenY": 498, "screenX": 327}, {"screenY": 363, "screenX": 570}], "type": "touchmove", "sender": 4518, "msg_type": "TouchEvent", "message_id": 357}
{"touches": [{"screenY": 498, "screenX": 327}, {"screenY": 363, "screenX": 570}], "type": "touchmove", "sender": 4518, "msg_type": "TouchEvent", "message_id": 358}
{"touches": [{"screenY": 498, "screenX": 327}, {"screenY": 361, "screenX": 571}], "type": "touchmove", "sender": 4518, "msg_type": "TouchEvent", "message_id": 359}
{"touches": [{"screenY": 498, "screenX": 327}, {"screenY": 361, "screenX": 571}], "type": "touchmove", "sender": 4518, "msg_type": "TouchEvent", "message_id": 360}
{"touches": [{"screenY": 498, "screenX": 326}, {"screenY": 360, "screenX": 572}], "type": "touchmove", "sender": 4518, "msg_type": "TouchEvent", "message_id": 361}
{"touches": [{"screenY": 498, "screenX": 326}, {"screenY": 360, "screenX": 572}], "type": "touchmove", "sender": 4518, "msg_type": "TouchEvent", "message_id": 362}
{"touches": [{"screenY": 498, "screenX": 325}, {"screenY": 359, "screenX": 573}], "type": "touchmove", "sender": 4518, "msg_type": "TouchEvent", "message_id": 363}
{"touches": [{"screenY": 498, "screenX": 325}, {"screenY": 359, "screenX": 573}], "type": "touchmove", "sender": 4518, "msg_type": "TouchEvent", "message_id": 364}
{"touches": [{"screenY": 499, "screenX": 324}, {"screenY": 357, "screenX": 575}], "type": "touchmove", "sender": 4518, "msg_type": "TouchEvent", "message_id": 365}
{"touches": [{"screenY": 499, "screenX": 324}, {"screenY": 357, "screenX": 575}], "type": "touchmove", "sender": 4518, "msg_type": "TouchEvent", "message_id": 366}
{"touches": [{"screenY": 499, "screenX": 323}, {"screenY": 356, "screenX": 576}], "type": "touchmove", "sender": 4518, "msg_type": "TouchEvent", "message_id": 367}

View File

@ -0,0 +1,211 @@
{"panX": -250.5, "panY": -112, "scale": 2, "sender": 3699, "msg_type": "ViewPort", "message_id": 0}
{"sender": 3699, "msg_type": "MouseEvent", "y": 49, "x": 173, "type": "mousemove", "message_id": 16}
{"sender": 3699, "msg_type": "MouseEvent", "y": 50, "x": 175, "type": "mouseover", "message_id": 18}
{"sender": 3699, "msg_type": "MouseEvent", "y": 50, "x": 175, "type": "mouseover", "message_id": 17}
{"sender": 3699, "msg_type": "MouseEvent", "y": 50, "x": 175, "type": "mousemove", "message_id": 19}
{"sender": 3699, "msg_type": "MouseEvent", "y": 52, "x": 177, "type": "mouseover", "message_id": 20}
{"sender": 3699, "msg_type": "MouseEvent", "y": 52, "x": 177, "type": "mouseover", "message_id": 21}
{"sender": 3699, "msg_type": "MouseEvent", "y": 56, "x": 181, "type": "mousemove", "message_id": 23}
{"sender": 3699, "msg_type": "MouseEvent", "y": 52, "x": 177, "type": "mousemove", "message_id": 22}
{"sender": 3699, "msg_type": "MouseEvent", "y": 62, "x": 187, "type": "mouseover", "message_id": 24}
{"sender": 3699, "msg_type": "MouseEvent", "y": 62, "x": 187, "type": "mouseover", "message_id": 25}
{"sender": 3699, "msg_type": "MouseEvent", "y": 62, "x": 187, "type": "mousemove", "message_id": 26}
{"sender": 3699, "msg_type": "MouseEvent", "y": 69, "x": 193, "type": "mousemove", "message_id": 27}
{"sender": 3699, "msg_type": "MouseEvent", "y": 79, "x": 202, "type": "mousemove", "message_id": 28}
{"sender": 3699, "msg_type": "MouseEvent", "y": 86, "x": 209, "type": "mousemove", "message_id": 29}
{"sender": 3699, "msg_type": "MouseEvent", "y": 97, "x": 217, "type": "mousemove", "message_id": 30}
{"sender": 3699, "msg_type": "MouseEvent", "y": 108, "x": 223, "type": "mousemove", "message_id": 31}
{"sender": 3699, "msg_type": "MouseEvent", "y": 120, "x": 229, "type": "mousemove", "message_id": 32}
{"sender": 3699, "msg_type": "MouseEvent", "y": 133, "x": 233, "type": "mousemove", "message_id": 33}
{"sender": 3699, "msg_type": "MouseEvent", "y": 148, "x": 238, "type": "mousemove", "message_id": 34}
{"sender": 3699, "msg_type": "MouseEvent", "y": 165, "x": 241, "type": "mousemove", "message_id": 35}
{"sender": 3699, "msg_type": "MouseEvent", "y": 182, "x": 245, "type": "mousemove", "message_id": 36}
{"sender": 3699, "msg_type": "MouseEvent", "y": 197, "x": 248, "type": "mousemove", "message_id": 37}
{"sender": 3699, "msg_type": "MouseEvent", "y": 209, "x": 249, "type": "mouseover", "message_id": 38}
{"sender": 3699, "msg_type": "MouseEvent", "y": 209, "x": 249, "type": "mouseover", "message_id": 39}
{"sender": 3699, "msg_type": "MouseEvent", "y": 209, "x": 249, "type": "mousemove", "message_id": 40}
{"sender": 3699, "msg_type": "MouseEvent", "y": 219, "x": 249, "type": "mousemove", "message_id": 41}
{"sender": 3699, "msg_type": "MouseEvent", "y": 223, "x": 249, "type": "mousemove", "message_id": 42}
{"sender": 3699, "msg_type": "MouseEvent", "y": 227, "x": 249, "type": "mousemove", "message_id": 43}
{"sender": 3699, "msg_type": "MouseEvent", "y": 229, "x": 249, "type": "mousemove", "message_id": 44}
{"sender": 3699, "msg_type": "MouseEvent", "y": 229, "x": 249, "type": "mousemove", "message_id": 45}
{"sender": 3699, "msg_type": "MouseEvent", "y": 229, "x": 249, "type": "mousemove", "message_id": 46}
{"sender": 3699, "msg_type": "MouseEvent", "y": 229, "x": 249, "type": "mousemove", "message_id": 47}
{"sender": 3699, "msg_type": "MouseEvent", "y": 229, "x": 249, "type": "mousedown", "message_id": 48}
{"sender": 3699, "msg_type": "MouseEvent", "y": 229, "x": 249, "type": "mouseup", "message_id": 49}
{"sender": 3699, "msg_type": "KeyEvent", "shiftKey": false, "message_id": 50, "altKey": false, "metaKey": false, "key": "s", "ctrlKey": false, "type": "keydown", "keyCode": 83}
{"sender": 3699, "msg_type": "MouseEvent", "y": 229, "x": 249, "type": "mousemove", "message_id": 52}
{"sender": 3699, "msg_type": "MouseEvent", "y": 229, "x": 249, "type": "mousemove", "message_id": 53}
{"sender": 3699, "msg_type": "MouseEvent", "y": 228, "x": 248, "type": "mousemove", "message_id": 54}
{"sender": 3699, "msg_type": "MouseEvent", "y": 228, "x": 248, "type": "mousemove", "message_id": 55}
{"sender": 3699, "msg_type": "MouseEvent", "y": 228, "x": 248, "type": "mousemove", "message_id": 56}
{"sender": 3699, "msg_type": "MouseEvent", "y": 228, "x": 249, "type": "mousemove", "message_id": 57}
{"sender": 3699, "msg_type": "MouseEvent", "y": 228, "x": 250, "type": "mousemove", "message_id": 58}
{"sender": 3699, "msg_type": "MouseEvent", "y": 228, "x": 251, "type": "mousemove", "message_id": 59}
{"sender": 3699, "msg_type": "MouseEvent", "y": 228, "x": 251, "type": "mousemove", "message_id": 60}
{"sender": 3699, "msg_type": "MouseEvent", "y": 228, "x": 251, "type": "mousemove", "message_id": 61}
{"sender": 3699, "msg_type": "MouseEvent", "y": 228, "x": 251, "type": "mousemove", "message_id": 62}
{"sender": 3699, "msg_type": "MouseEvent", "y": 228, "x": 251, "type": "mousemove", "message_id": 63}
{"originalEvent": {"metaKey": false}, "sender": 3699, "msg_type": "MouseWheelEvent", "deltaX": -1, "deltaY": 0, "delta": 1, "type": "wheel", "message_id": 64}
{"originalEvent": {"metaKey": false}, "sender": 3699, "msg_type": "MouseWheelEvent", "deltaX": -1, "deltaY": 0, "delta": 1, "type": "wheel", "message_id": 65}
{"sender": 3699, "msg_type": "MouseEvent", "y": 228, "x": 251, "type": "mousedown", "message_id": 66}
{"originalEvent": {"metaKey": false}, "sender": 3699, "msg_type": "MouseWheelEvent", "deltaX": -1, "deltaY": -1, "delta": -1, "type": "wheel", "message_id": 68}
{"originalEvent": {"metaKey": false}, "sender": 3699, "msg_type": "MouseWheelEvent", "deltaX": -1, "deltaY": 0, "delta": 1, "type": "wheel", "message_id": 69}
{"sender": 3699, "msg_type": "MouseEvent", "y": 228, "x": 251, "type": "mousemove", "message_id": 70}
{"sender": 3699, "msg_type": "MouseEvent", "y": 229, "x": 251, "type": "mousemove", "message_id": 71}
{"sender": 3699, "msg_type": "MouseEvent", "y": 230, "x": 250, "type": "mousemove", "message_id": 73}
{"sender": 3699, "msg_type": "MouseEvent", "y": 232, "x": 249, "type": "mousemove", "message_id": 75}
{"sender": 3699, "msg_type": "MouseEvent", "y": 234, "x": 248, "type": "mousemove", "message_id": 77}
{"sender": 3699, "msg_type": "MouseEvent", "y": 237, "x": 246, "type": "mouseover", "message_id": 79}
{"sender": 3699, "msg_type": "MouseEvent", "y": 237, "x": 246, "type": "mouseover", "message_id": 80}
{"sender": 3699, "msg_type": "MouseEvent", "y": 237, "x": 246, "type": "mousemove", "message_id": 81}
{"sender": 3699, "msg_type": "MouseEvent", "y": 240, "x": 244, "type": "mousemove", "message_id": 83}
{"sender": 3699, "msg_type": "MouseEvent", "y": 244, "x": 242, "type": "mousemove", "message_id": 85}
{"sender": 3699, "msg_type": "MouseEvent", "y": 249, "x": 239, "type": "mousemove", "message_id": 87}
{"sender": 3699, "msg_type": "MouseEvent", "y": 256, "x": 236, "type": "mousemove", "message_id": 89}
{"sender": 3699, "msg_type": "MouseEvent", "y": 263, "x": 233, "type": "mousemove", "message_id": 91}
{"sender": 3699, "msg_type": "MouseEvent", "y": 271, "x": 230, "type": "mousemove", "message_id": 93}
{"sender": 3699, "msg_type": "MouseEvent", "y": 280, "x": 228, "type": "mousemove", "message_id": 95}
{"sender": 3699, "msg_type": "MouseEvent", "y": 287, "x": 226, "type": "mousemove", "message_id": 97}
{"sender": 3699, "msg_type": "MouseEvent", "y": 296, "x": 225, "type": "mouseover", "message_id": 99}
{"sender": 3699, "msg_type": "MouseEvent", "y": 296, "x": 225, "type": "mouseover", "message_id": 100}
{"sender": 3699, "msg_type": "MouseEvent", "y": 296, "x": 225, "type": "mousemove", "message_id": 101}
{"sender": 3699, "msg_type": "MouseEvent", "y": 304, "x": 224, "type": "mousemove", "message_id": 103}
{"sender": 3699, "msg_type": "MouseEvent", "y": 310, "x": 224, "type": "mousemove", "message_id": 105}
{"sender": 3699, "msg_type": "MouseEvent", "y": 315, "x": 224, "type": "mousemove", "message_id": 107}
{"sender": 3699, "msg_type": "MouseEvent", "y": 321, "x": 224, "type": "mousemove", "message_id": 109}
{"sender": 3699, "msg_type": "MouseEvent", "y": 326, "x": 225, "type": "mousemove", "message_id": 111}
{"sender": 3699, "msg_type": "MouseEvent", "y": 333, "x": 227, "type": "mouseover", "message_id": 113}
{"sender": 3699, "msg_type": "MouseEvent", "y": 333, "x": 227, "type": "mousemove", "message_id": 115}
{"sender": 3699, "msg_type": "MouseEvent", "y": 333, "x": 227, "type": "mouseover", "message_id": 114}
{"sender": 3699, "msg_type": "MouseEvent", "y": 342, "x": 229, "type": "mousemove", "message_id": 117}
{"sender": 3699, "msg_type": "MouseEvent", "y": 352, "x": 233, "type": "mouseover", "message_id": 119}
{"sender": 3699, "msg_type": "MouseEvent", "y": 352, "x": 233, "type": "mouseover", "message_id": 120}
{"sender": 3699, "msg_type": "MouseEvent", "y": 352, "x": 233, "type": "mousemove", "message_id": 121}
{"sender": 3699, "msg_type": "MouseEvent", "y": 362, "x": 238, "type": "mousemove", "message_id": 123}
{"sender": 3699, "msg_type": "MouseEvent", "y": 369, "x": 242, "type": "mouseover", "message_id": 125}
{"sender": 3699, "msg_type": "MouseEvent", "y": 369, "x": 242, "type": "mousemove", "message_id": 127}
{"sender": 3699, "msg_type": "MouseEvent", "y": 369, "x": 242, "type": "mouseover", "message_id": 126}
{"sender": 3699, "msg_type": "MouseEvent", "y": 379, "x": 248, "type": "mouseover", "message_id": 129}
{"sender": 3699, "msg_type": "MouseEvent", "y": 379, "x": 248, "type": "mouseover", "message_id": 130}
{"sender": 3699, "msg_type": "MouseEvent", "y": 379, "x": 248, "type": "mousemove", "message_id": 131}
{"sender": 3699, "msg_type": "MouseEvent", "y": 387, "x": 255, "type": "mouseover", "message_id": 133}
{"sender": 3699, "msg_type": "MouseEvent", "y": 387, "x": 255, "type": "mouseover", "message_id": 134}
{"sender": 3699, "msg_type": "MouseEvent", "y": 387, "x": 255, "type": "mousemove", "message_id": 135}
{"sender": 3699, "msg_type": "MouseEvent", "y": 394, "x": 264, "type": "mousemove", "message_id": 137}
{"sender": 3699, "msg_type": "MouseEvent", "y": 409, "x": 289, "type": "mousemove", "message_id": 141}
{"sender": 3699, "msg_type": "MouseEvent", "y": 401, "x": 275, "type": "mousemove", "message_id": 139}
{"sender": 3699, "msg_type": "MouseEvent", "y": 415, "x": 306, "type": "mousemove", "message_id": 143}
{"sender": 3699, "msg_type": "MouseEvent", "y": 419, "x": 324, "type": "mousemove", "message_id": 145}
{"sender": 3699, "msg_type": "MouseEvent", "y": 422, "x": 343, "type": "mousemove", "message_id": 147}
{"sender": 3699, "msg_type": "MouseEvent", "y": 425, "x": 361, "type": "mousemove", "message_id": 149}
{"sender": 3699, "msg_type": "MouseEvent", "y": 426, "x": 375, "type": "mouseover", "message_id": 151}
{"sender": 3699, "msg_type": "MouseEvent", "y": 426, "x": 375, "type": "mouseover", "message_id": 152}
{"sender": 3699, "msg_type": "MouseEvent", "y": 426, "x": 375, "type": "mousemove", "message_id": 153}
{"sender": 3699, "msg_type": "MouseEvent", "y": 427, "x": 390, "type": "mousemove", "message_id": 155}
{"sender": 3699, "msg_type": "MouseEvent", "y": 427, "x": 400, "type": "mousemove", "message_id": 157}
{"sender": 3699, "msg_type": "MouseEvent", "y": 426, "x": 414, "type": "mousemove", "message_id": 159}
{"sender": 3699, "msg_type": "MouseEvent", "y": 424, "x": 428, "type": "mouseover", "message_id": 161}
{"sender": 3699, "msg_type": "MouseEvent", "y": 424, "x": 428, "type": "mouseover", "message_id": 162}
{"sender": 3699, "msg_type": "MouseEvent", "y": 424, "x": 428, "type": "mousemove", "message_id": 163}
{"sender": 3699, "msg_type": "MouseEvent", "y": 421, "x": 441, "type": "mousemove", "message_id": 165}
{"sender": 3699, "msg_type": "MouseEvent", "y": 418, "x": 449, "type": "mousemove", "message_id": 167}
{"sender": 3699, "msg_type": "MouseEvent", "y": 415, "x": 458, "type": "mousemove", "message_id": 169}
{"sender": 3699, "msg_type": "MouseEvent", "y": 411, "x": 464, "type": "mousemove", "message_id": 171}
{"sender": 3699, "msg_type": "MouseEvent", "y": 408, "x": 467, "type": "mousemove", "message_id": 173}
{"sender": 3699, "msg_type": "MouseEvent", "y": 406, "x": 469, "type": "mousemove", "message_id": 175}
{"sender": 3699, "msg_type": "MouseEvent", "y": 404, "x": 470, "type": "mouseover", "message_id": 177}
{"sender": 3699, "msg_type": "MouseEvent", "y": 404, "x": 470, "type": "mouseover", "message_id": 178}
{"sender": 3699, "msg_type": "MouseEvent", "y": 404, "x": 470, "type": "mousemove", "message_id": 179}
{"sender": 3699, "msg_type": "MouseEvent", "y": 402, "x": 471, "type": "mousemove", "message_id": 181}
{"sender": 3699, "msg_type": "MouseEvent", "y": 401, "x": 472, "type": "mousemove", "message_id": 183}
{"sender": 3699, "msg_type": "MouseEvent", "y": 401, "x": 472, "type": "mousemove", "message_id": 185}
{"sender": 3699, "msg_type": "MouseEvent", "y": 400, "x": 473, "type": "mousemove", "message_id": 187}
{"sender": 3699, "msg_type": "MouseEvent", "y": 400, "x": 473, "type": "mousemove", "message_id": 189}
{"sender": 3699, "msg_type": "MouseEvent", "y": 400, "x": 473, "type": "mousemove", "message_id": 191}
{"sender": 3699, "msg_type": "MouseEvent", "y": 400, "x": 473, "type": "mousemove", "message_id": 194}
{"sender": 3699, "msg_type": "MouseEvent", "y": 400, "x": 473, "type": "mouseup", "message_id": 193}
{"sender": 3699, "msg_type": "MouseEvent", "y": 400, "x": 473, "type": "mousemove", "message_id": 195}
{"sender": 3699, "msg_type": "MouseEvent", "y": 399, "x": 474, "type": "mousemove", "message_id": 196}
{"originalEvent": {"metaKey": false}, "sender": 3699, "msg_type": "MouseWheelEvent", "deltaX": 1, "deltaY": 0, "delta": -1, "type": "wheel", "message_id": 197}
{"sender": 3699, "msg_type": "MouseEvent", "y": 399, "x": 474, "type": "mousemove", "message_id": 198}
{"sender": 3699, "msg_type": "KeyEvent", "shiftKey": false, "message_id": 199, "altKey": false, "metaKey": true, "key": "Meta", "ctrlKey": false, "type": "keydown", "keyCode": 91}
{"sender": 3699, "msg_type": "MouseEvent", "y": 399, "x": 474, "type": "mousemove", "message_id": 200}
{"sender": 3699, "msg_type": "KeyEvent", "shiftKey": false, "message_id": 201, "altKey": false, "metaKey": true, "key": "z", "ctrlKey": false, "type": "keydown", "keyCode": 90}
{"sender": 3699, "msg_type": "KeyEvent", "shiftKey": false, "message_id": 203, "altKey": false, "metaKey": true, "key": "z", "ctrlKey": false, "type": "keydown", "keyCode": 90}
{"sender": 3699, "msg_type": "KeyEvent", "shiftKey": false, "message_id": 205, "altKey": false, "metaKey": true, "key": "z", "ctrlKey": false, "type": "keydown", "keyCode": 90}
{"sender": 3699, "msg_type": "KeyEvent", "shiftKey": false, "message_id": 207, "altKey": false, "metaKey": true, "key": "z", "ctrlKey": false, "type": "keydown", "keyCode": 90}
{"sender": 3699, "msg_type": "KeyEvent", "shiftKey": false, "message_id": 209, "altKey": false, "metaKey": true, "key": "z", "ctrlKey": false, "type": "keydown", "keyCode": 90}
{"sender": 3699, "msg_type": "KeyEvent", "shiftKey": false, "message_id": 211, "altKey": false, "metaKey": true, "key": "z", "ctrlKey": false, "type": "keydown", "keyCode": 90}
{"sender": 3699, "msg_type": "KeyEvent", "shiftKey": false, "message_id": 213, "altKey": false, "metaKey": true, "key": "z", "ctrlKey": false, "type": "keydown", "keyCode": 90}
{"sender": 3699, "msg_type": "KeyEvent", "shiftKey": false, "message_id": 215, "altKey": false, "metaKey": true, "key": "z", "ctrlKey": false, "type": "keydown", "keyCode": 90}
{"sender": 3699, "msg_type": "KeyEvent", "shiftKey": false, "message_id": 217, "altKey": false, "metaKey": true, "key": "z", "ctrlKey": false, "type": "keydown", "keyCode": 90}
{"sender": 3699, "msg_type": "KeyEvent", "shiftKey": false, "message_id": 219, "altKey": false, "metaKey": true, "key": "z", "ctrlKey": false, "type": "keydown", "keyCode": 90}
{"sender": 3699, "msg_type": "KeyEvent", "shiftKey": true, "message_id": 221, "altKey": false, "metaKey": true, "key": "Shift", "ctrlKey": false, "type": "keydown", "keyCode": 16}
{"sender": 3699, "msg_type": "KeyEvent", "shiftKey": true, "message_id": 222, "altKey": false, "metaKey": true, "key": "Z", "ctrlKey": false, "type": "keydown", "keyCode": 90}
{"sender": 3699, "msg_type": "KeyEvent", "shiftKey": true, "message_id": 224, "altKey": false, "metaKey": true, "key": "Z", "ctrlKey": false, "type": "keydown", "keyCode": 90}
{"sender": 3699, "msg_type": "KeyEvent", "shiftKey": true, "message_id": 226, "altKey": false, "metaKey": true, "key": "Z", "ctrlKey": false, "type": "keydown", "keyCode": 90}
{"sender": 3699, "msg_type": "KeyEvent", "shiftKey": true, "message_id": 228, "altKey": false, "metaKey": true, "key": "Z", "ctrlKey": false, "type": "keydown", "keyCode": 90}
{"sender": 3699, "msg_type": "KeyEvent", "shiftKey": true, "message_id": 230, "altKey": false, "metaKey": true, "key": "Z", "ctrlKey": false, "type": "keydown", "keyCode": 90}
{"sender": 3699, "msg_type": "KeyEvent", "shiftKey": true, "message_id": 232, "altKey": false, "metaKey": true, "key": "Z", "ctrlKey": false, "type": "keydown", "keyCode": 90}
{"sender": 3699, "msg_type": "MouseEvent", "y": 399, "x": 474, "type": "mousemove", "message_id": 234}
{"sender": 3699, "msg_type": "MouseEvent", "y": 358, "x": 483, "type": "mouseover", "message_id": 235}
{"sender": 3699, "msg_type": "MouseEvent", "y": 358, "x": 483, "type": "mouseover", "message_id": 236}
{"sender": 3699, "msg_type": "MouseEvent", "y": 345, "x": 485, "type": "mousemove", "message_id": 238}
{"sender": 3699, "msg_type": "MouseEvent", "y": 358, "x": 483, "type": "mousemove", "message_id": 237}
{"sender": 3699, "msg_type": "MouseEvent", "y": 330, "x": 486, "type": "mouseover", "message_id": 239}
{"sender": 3699, "msg_type": "MouseEvent", "y": 330, "x": 486, "type": "mouseover", "message_id": 240}
{"sender": 3699, "msg_type": "MouseEvent", "y": 330, "x": 486, "type": "mousemove", "message_id": 241}
{"sender": 3699, "msg_type": "MouseEvent", "y": 282, "x": 485, "type": "mouseover", "message_id": 242}
{"sender": 3699, "msg_type": "MouseEvent", "y": 282, "x": 485, "type": "mouseover", "message_id": 243}
{"sender": 3699, "msg_type": "MouseEvent", "y": 282, "x": 485, "type": "mousemove", "message_id": 244}
{"sender": 3699, "msg_type": "MouseEvent", "y": 251, "x": 478, "type": "mousemove", "message_id": 245}
{"sender": 3699, "msg_type": "MouseEvent", "y": 226, "x": 465, "type": "mousemove", "message_id": 246}
{"sender": 3699, "msg_type": "MouseEvent", "y": 201, "x": 444, "type": "mousemove", "message_id": 247}
{"sender": 3699, "msg_type": "MouseEvent", "y": 180, "x": 421, "type": "mousemove", "message_id": 248}
{"sender": 3699, "msg_type": "MouseEvent", "y": 162, "x": 396, "type": "mousemove", "message_id": 249}
{"sender": 3699, "msg_type": "MouseEvent", "y": 147, "x": 374, "type": "mousemove", "message_id": 250}
{"sender": 3699, "msg_type": "MouseEvent", "y": 137, "x": 358, "type": "mousemove", "message_id": 251}
{"sender": 3699, "msg_type": "MouseEvent", "y": 129, "x": 348, "type": "mousemove", "message_id": 252}
{"sender": 3699, "msg_type": "MouseEvent", "y": 124, "x": 340, "type": "mousemove", "message_id": 253}
{"sender": 3699, "msg_type": "MouseEvent", "y": 121, "x": 335, "type": "mousemove", "message_id": 254}
{"sender": 3699, "msg_type": "MouseEvent", "y": 117, "x": 327, "type": "mousemove", "message_id": 255}
{"sender": 3699, "msg_type": "MouseEvent", "y": 107, "x": 308, "type": "mousemove", "message_id": 257}
{"sender": 3699, "msg_type": "MouseEvent", "y": 112, "x": 318, "type": "mousemove", "message_id": 256}
{"sender": 3699, "msg_type": "MouseEvent", "y": 102, "x": 300, "type": "mousemove", "message_id": 258}
{"sender": 3699, "msg_type": "MouseEvent", "y": 96, "x": 291, "type": "mousemove", "message_id": 259}
{"sender": 3699, "msg_type": "MouseEvent", "y": 89, "x": 282, "type": "mousemove", "message_id": 260}
{"sender": 3699, "msg_type": "MouseEvent", "y": 83, "x": 270, "type": "mousemove", "message_id": 261}
{"sender": 3699, "msg_type": "MouseEvent", "y": 75, "x": 254, "type": "mousemove", "message_id": 262}
{"sender": 3699, "msg_type": "MouseEvent", "y": 70, "x": 234, "type": "mousemove", "message_id": 263}
{"sender": 3699, "msg_type": "MouseEvent", "y": 66, "x": 215, "type": "mousemove", "message_id": 264}
{"sender": 3699, "msg_type": "MouseEvent", "y": 64, "x": 199, "type": "mousemove", "message_id": 265}
{"sender": 3699, "msg_type": "MouseEvent", "y": 62, "x": 190, "type": "mousemove", "message_id": 266}
{"sender": 3699, "msg_type": "MouseEvent", "y": 61, "x": 181, "type": "mouseover", "message_id": 267}
{"sender": 3699, "msg_type": "MouseEvent", "y": 61, "x": 181, "type": "mouseover", "message_id": 268}
{"sender": 3699, "msg_type": "MouseEvent", "y": 61, "x": 181, "type": "mousemove", "message_id": 269}
{"sender": 3699, "msg_type": "MouseEvent", "y": 59, "x": 174, "type": "mouseover", "message_id": 270}
{"sender": 3699, "msg_type": "MouseEvent", "y": 59, "x": 174, "type": "mouseover", "message_id": 271}
{"sender": 3699, "msg_type": "MouseEvent", "y": 59, "x": 174, "type": "mousemove", "message_id": 272}
{"sender": 3699, "msg_type": "MouseEvent", "y": 57, "x": 170, "type": "mousemove", "message_id": 273}
{"sender": 3699, "msg_type": "MouseEvent", "y": 55, "x": 167, "type": "mousemove", "message_id": 274}
{"sender": 3699, "msg_type": "MouseEvent", "y": 54, "x": 166, "type": "mouseover", "message_id": 275}
{"sender": 3699, "msg_type": "MouseEvent", "y": 54, "x": 166, "type": "mouseover", "message_id": 276}
{"sender": 3699, "msg_type": "MouseEvent", "y": 54, "x": 166, "type": "mousemove", "message_id": 277}
{"sender": 3699, "msg_type": "MouseEvent", "y": 53, "x": 165, "type": "mousemove", "message_id": 278}
{"sender": 3699, "msg_type": "MouseEvent", "y": 53, "x": 164, "type": "mousemove", "message_id": 279}
{"sender": 3699, "msg_type": "MouseEvent", "y": 53, "x": 165, "type": "mousemove", "message_id": 280}
{"sender": 3699, "msg_type": "MouseEvent", "y": 53, "x": 167, "type": "mouseover", "message_id": 281}
{"sender": 3699, "msg_type": "MouseEvent", "y": 53, "x": 167, "type": "mouseover", "message_id": 282}
{"sender": 3699, "msg_type": "MouseEvent", "y": 53, "x": 167, "type": "mousemove", "message_id": 283}
{"sender": 3699, "msg_type": "MouseEvent", "y": 54, "x": 171, "type": "mousemove", "message_id": 284}
{"sender": 3699, "msg_type": "MouseEvent", "y": 54, "x": 173, "type": "mousemove", "message_id": 285}
{"sender": 3699, "msg_type": "MouseEvent", "y": 54, "x": 174, "type": "mouseover", "message_id": 286}
{"sender": 3699, "msg_type": "MouseEvent", "y": 54, "x": 174, "type": "mousemove", "message_id": 288}
{"sender": 3699, "msg_type": "MouseEvent", "y": 54, "x": 174, "type": "mouseover", "message_id": 287}
{"sender": 3699, "msg_type": "MouseEvent", "y": 54, "x": 174, "type": "mousemove", "message_id": 289}
{"sender": 3699, "msg_type": "MouseEvent", "y": 54, "x": 175, "type": "mousemove", "message_id": 290}
{"sender": 3699, "msg_type": "MouseEvent", "y": 54, "x": 175, "type": "mousemove", "message_id": 291}
{"sender": 3699, "msg_type": "MouseEvent", "y": 54, "x": 176, "type": "mousemove", "message_id": 292}
{"sender": 3699, "msg_type": "MouseEvent", "y": 54, "x": 177, "type": "mousemove", "message_id": 293}
{"sender": 3699, "msg_type": "MouseEvent", "y": 54, "x": 178, "type": "mousemove", "message_id": 294}

Some files were not shown because too many files have changed in this diff Show More