aboutsummaryrefslogtreecommitdiffhomepage
path: root/tensorflow/tensorboard
diff options
context:
space:
mode:
Diffstat (limited to 'tensorflow/tensorboard')
-rw-r--r--tensorflow/tensorboard/BUILD49
-rw-r--r--tensorflow/tensorboard/README.md66
-rwxr-xr-xtensorflow/tensorboard/__init__.py0
-rw-r--r--tensorflow/tensorboard/app/demo/data/cos.json1
-rw-r--r--tensorflow/tensorboard/app/demo/data/cubic.json1
-rw-r--r--tensorflow/tensorboard/app/demo/data/linear.json1
-rw-r--r--tensorflow/tensorboard/app/demo/data/poly5-graph.pbtxt14
-rw-r--r--tensorflow/tensorboard/app/demo/data/poly5.json1
-rw-r--r--tensorflow/tensorboard/app/demo/data/runs.json542
-rw-r--r--tensorflow/tensorboard/app/demo/data/sin-graph.pbtxt14
-rw-r--r--tensorflow/tensorboard/app/demo/data/sin.json1
-rw-r--r--tensorflow/tensorboard/app/demo/data/sq.json1
-rw-r--r--tensorflow/tensorboard/app/demo/index.html25
-rw-r--r--tensorflow/tensorboard/app/index.html13
-rw-r--r--tensorflow/tensorboard/app/tf-tensorboard-demo.html72
-rw-r--r--tensorflow/tensorboard/app/tf-tensorboard.html135
-rw-r--r--tensorflow/tensorboard/bower.json50
-rw-r--r--tensorflow/tensorboard/bower/BUILD76
-rw-r--r--tensorflow/tensorboard/components/hydrogen-join/demo/index.html118
-rw-r--r--tensorflow/tensorboard/components/hydrogen-join/hydrogen-join.html118
-rw-r--r--tensorflow/tensorboard/components/hydrogen-set/demo/index.html106
-rw-r--r--tensorflow/tensorboard/components/hydrogen-set/hydrogen-set.html174
-rw-r--r--tensorflow/tensorboard/components/imports/d3.html1
-rw-r--r--tensorflow/tensorboard/components/imports/lodash.html1
-rw-r--r--tensorflow/tensorboard/components/imports/plottable.html3
-rw-r--r--tensorflow/tensorboard/components/tf-categorizer/categorizer.ts133
-rw-r--r--tensorflow/tensorboard/components/tf-categorizer/demo/index.html97
-rw-r--r--tensorflow/tensorboard/components/tf-categorizer/index.html18
-rw-r--r--tensorflow/tensorboard/components/tf-categorizer/test/categorizerTest.ts139
-rw-r--r--tensorflow/tensorboard/components/tf-categorizer/tf-categorizer.html103
-rw-r--r--tensorflow/tensorboard/components/tf-collapsable-pane/demo/index.html17
-rw-r--r--tensorflow/tensorboard/components/tf-collapsable-pane/index.html18
-rw-r--r--tensorflow/tensorboard/components/tf-collapsable-pane/tf-collapsable-pane.html90
-rw-r--r--tensorflow/tensorboard/components/tf-dashboard-common/dashboard-style.html97
-rw-r--r--tensorflow/tensorboard/components/tf-dashboard-common/run-color-style.html62
-rw-r--r--tensorflow/tensorboard/components/tf-dashboard-common/scrollbar-style.html28
-rw-r--r--tensorflow/tensorboard/components/tf-dashboard-common/tensorboard-color.html11
-rw-r--r--tensorflow/tensorboard/components/tf-dashboard-common/tf-dashboard-layout.html50
-rw-r--r--tensorflow/tensorboard/components/tf-dashboard-common/tf-downloader.html85
-rw-r--r--tensorflow/tensorboard/components/tf-dashboard-common/tf-run-generator.html97
-rw-r--r--tensorflow/tensorboard/components/tf-dashboard-common/tf-url-generator.html50
-rw-r--r--tensorflow/tensorboard/components/tf-dashboard-common/urlGenerator.ts33
-rw-r--r--tensorflow/tensorboard/components/tf-dashboard-common/warning-style.html10
-rw-r--r--tensorflow/tensorboard/components/tf-event-dashboard/dataCoordinator.ts57
-rw-r--r--tensorflow/tensorboard/components/tf-event-dashboard/dataset.ts41
-rw-r--r--tensorflow/tensorboard/components/tf-event-dashboard/demo/data/alpha/d1.json1
-rw-r--r--tensorflow/tensorboard/components/tf-event-dashboard/demo/data/alpha/d2.json1
-rw-r--r--tensorflow/tensorboard/components/tf-event-dashboard/demo/data/alpha/d3.json1
-rw-r--r--tensorflow/tensorboard/components/tf-event-dashboard/demo/data/alpha/d4.json1
-rw-r--r--tensorflow/tensorboard/components/tf-event-dashboard/demo/data/beta/d1.json1
-rw-r--r--tensorflow/tensorboard/components/tf-event-dashboard/demo/data/beta/d2.json1
-rw-r--r--tensorflow/tensorboard/components/tf-event-dashboard/demo/data/beta/d3.json1
-rw-r--r--tensorflow/tensorboard/components/tf-event-dashboard/demo/data/beta/d4.json1
-rw-r--r--tensorflow/tensorboard/components/tf-event-dashboard/demo/data/runs.json22
-rw-r--r--tensorflow/tensorboard/components/tf-event-dashboard/demo/index.html17
-rw-r--r--tensorflow/tensorboard/components/tf-event-dashboard/dragZoomInteraction.ts150
-rw-r--r--tensorflow/tensorboard/components/tf-event-dashboard/tf-chart.html101
-rw-r--r--tensorflow/tensorboard/components/tf-event-dashboard/tf-chart.ts327
-rw-r--r--tensorflow/tensorboard/components/tf-event-dashboard/tf-color-scale.html69
-rw-r--r--tensorflow/tensorboard/components/tf-event-dashboard/tf-data-coordinator.html29
-rw-r--r--tensorflow/tensorboard/components/tf-event-dashboard/tf-event-dashboard.html208
-rw-r--r--tensorflow/tensorboard/components/tf-event-dashboard/tf-run-selector.html104
-rw-r--r--tensorflow/tensorboard/components/tf-event-dashboard/tf-tooltip-coordinator.html48
-rw-r--r--tensorflow/tensorboard/components/tf-event-dashboard/tf-x-type-selector.html75
-rw-r--r--tensorflow/tensorboard/components/tf-graph-board/tf-graph-board.html152
-rw-r--r--tensorflow/tensorboard/components/tf-graph-common/lib/colors.ts133
-rw-r--r--tensorflow/tensorboard/components/tf-graph-common/lib/common.ts236
-rw-r--r--tensorflow/tensorboard/components/tf-graph-common/lib/graph.ts889
-rw-r--r--tensorflow/tensorboard/components/tf-graph-common/lib/hierarchy.ts715
-rw-r--r--tensorflow/tensorboard/components/tf-graph-common/lib/layout.ts628
-rw-r--r--tensorflow/tensorboard/components/tf-graph-common/lib/parser.ts189
-rw-r--r--tensorflow/tensorboard/components/tf-graph-common/lib/render.ts1360
-rw-r--r--tensorflow/tensorboard/components/tf-graph-common/lib/scene/annotation.ts223
-rw-r--r--tensorflow/tensorboard/components/tf-graph-common/lib/scene/edge.ts177
-rw-r--r--tensorflow/tensorboard/components/tf-graph-common/lib/scene/minimap.ts269
-rw-r--r--tensorflow/tensorboard/components/tf-graph-common/lib/scene/node.ts525
-rw-r--r--tensorflow/tensorboard/components/tf-graph-common/lib/scene/scene.ts409
-rw-r--r--tensorflow/tensorboard/components/tf-graph-common/lib/template.ts282
-rw-r--r--tensorflow/tensorboard/components/tf-graph-common/tf-graph-common.html16
-rw-r--r--tensorflow/tensorboard/components/tf-graph-dashboard/tf-graph-dashboard.html118
-rw-r--r--tensorflow/tensorboard/components/tf-graph-info/tf-graph-info.html65
-rw-r--r--tensorflow/tensorboard/components/tf-graph-info/tf-node-info.html345
-rw-r--r--tensorflow/tensorboard/components/tf-graph-info/tf-node-list-item.html91
-rw-r--r--tensorflow/tensorboard/components/tf-graph-loader/tf-graph-loader.html172
-rw-r--r--tensorflow/tensorboard/components/tf-graph/demo/tf-graph-demo.html185
-rw-r--r--tensorflow/tensorboard/components/tf-graph/tf-graph-controls.html487
-rw-r--r--tensorflow/tensorboard/components/tf-graph/tf-graph-icon.html164
-rw-r--r--tensorflow/tensorboard/components/tf-graph/tf-graph-minimap.html69
-rw-r--r--tensorflow/tensorboard/components/tf-graph/tf-graph-params.html113
-rw-r--r--tensorflow/tensorboard/components/tf-graph/tf-graph-scene.html475
-rw-r--r--tensorflow/tensorboard/components/tf-graph/tf-graph-style.html339
-rw-r--r--tensorflow/tensorboard/components/tf-graph/tf-graph.html221
-rw-r--r--tensorflow/tensorboard/components/tf-histogram-dashboard/tf-histogram-dashboard.html210
-rw-r--r--tensorflow/tensorboard/components/tf-image-dashboard/demo/image-loader-demo.html73
-rw-r--r--tensorflow/tensorboard/components/tf-image-dashboard/demo/index.html39
-rw-r--r--tensorflow/tensorboard/components/tf-image-dashboard/tf-image-dashboard.html90
-rw-r--r--tensorflow/tensorboard/components/tf-image-dashboard/tf-image-grid.html166
-rw-r--r--tensorflow/tensorboard/components/tf-image-dashboard/tf-image-loader.html64
-rw-r--r--tensorflow/tensorboard/components/tf-multi-checkbox/demo/index.html162
-rw-r--r--tensorflow/tensorboard/components/tf-multi-checkbox/tf-multi-checkbox.html228
-rw-r--r--tensorflow/tensorboard/components/tf-regex-group/demo/index.html32
-rw-r--r--tensorflow/tensorboard/components/tf-regex-group/index.html18
-rw-r--r--tensorflow/tensorboard/components/tf-regex-group/tf-regex-group.html151
-rw-r--r--tensorflow/tensorboard/dist/index.html43
-rw-r--r--tensorflow/tensorboard/dist/tf-tensorboard.html10484
-rw-r--r--tensorflow/tensorboard/float_wrapper.py30
-rw-r--r--tensorflow/tensorboard/float_wrapper_test.py38
-rw-r--r--tensorflow/tensorboard/gulpfile.js170
-rw-r--r--tensorflow/tensorboard/http_api.md210
-rw-r--r--tensorflow/tensorboard/lib/css/global.css6
-rw-r--r--tensorflow/tensorboard/lib/svg/summary-icon.svg3
-rw-r--r--tensorflow/tensorboard/package.json34
-rw-r--r--tensorflow/tensorboard/tensorboard.py139
-rw-r--r--tensorflow/tensorboard/tensorboard_handler.py379
-rw-r--r--tensorflow/tensorboard/tests.html31
-rw-r--r--tensorflow/tensorboard/tfgraph-demo-index.html38
-rw-r--r--tensorflow/tensorboard/tsconfig.json8
-rw-r--r--tensorflow/tensorboard/tsd.json30
-rw-r--r--tensorflow/tensorboard/tslint.json66
119 files changed, 25966 insertions, 0 deletions
diff --git a/tensorflow/tensorboard/BUILD b/tensorflow/tensorboard/BUILD
new file mode 100644
index 0000000000..2dcb5e4fa9
--- /dev/null
+++ b/tensorflow/tensorboard/BUILD
@@ -0,0 +1,49 @@
+# Description:
+# TensorBoard, a dashboard for investigating TensorFlow
+
+package(default_visibility = ["//tensorflow:internal"])
+
+filegroup(
+ name = "tensorboard_frontend",
+ srcs = [
+ "dist/index.html",
+ "dist/tf-tensorboard.html",
+ "//tensorflow/tensorboard/bower:bower",
+ ] + glob(["lib/**/*"]),
+)
+
+py_library(
+ name = "tensorboard_handler",
+ srcs = ["tensorboard_handler.py"],
+ deps = [
+ ":float_wrapper",
+ "//tensorflow/python:platform",
+ "//tensorflow/python:summary",
+ ],
+)
+
+py_library(
+ name = "float_wrapper",
+ srcs = ["float_wrapper.py"],
+)
+
+py_test(
+ name = "float_wrapper_test",
+ size = "small",
+ srcs = ["float_wrapper_test.py"],
+ deps = [
+ ":float_wrapper",
+ "//tensorflow/python:platform_test",
+ ],
+)
+
+py_binary(
+ name = "tensorboard",
+ srcs = ["tensorboard.py"],
+ data = [":tensorboard_frontend"],
+ deps = [
+ ":tensorboard_handler",
+ "//tensorflow/python:platform",
+ "//tensorflow/python:summary",
+ ],
+)
diff --git a/tensorflow/tensorboard/README.md b/tensorflow/tensorboard/README.md
new file mode 100644
index 0000000000..eb85a1e461
--- /dev/null
+++ b/tensorflow/tensorboard/README.md
@@ -0,0 +1,66 @@
+# TensorBoard
+
+TensorBoard is a suite of web applications for inspecting and understanding your
+TensorFlow runs and graphs.
+
+Example Usage:
+
+```
+python tensorflow/tensorboard/tensorboard.py --logdir=path/to/logs
+# if installed via pip
+tensorboard --logdir=path/to/logs
+
+# if building from source
+bazel build tensorflow/tensorboard:tensorboard
+./bazel-bin/tensorflow/tensorboard/tensorboard --logdir=path/to/logs
+
+# then connect to http://localhost:6006
+```
+
+Note that TensorBoard requires a `logdir` to read logs from. For info on
+configuring TensorBoard, run `tensorboard --help`.
+
+TensorBoard includes a backend (tensorboard.py) that reads TensorFlow event data
+from the *tfevents* files, and then serves this data to the browser. It also
+includes a frontend (app/tf-tensorboard.html) that contains html and javascript
+for displaying this data in a UI.
+
+
+## Building the TensorBoard frontend
+
+### Install Node, npm, gulp, bower, and tsd in your machine
+Get nodejs and npm through whatever package distribution system is appropriate
+for your machine. For example, on Ubuntu 14.04, run
+`sudo apt-get install nodejs nodejs-legacy npm`. Then, run
+`sudo npm install -g gulp bower tsd`.
+
+### Install project dependencies
+
+Inside this directory (`tensorflow/tensorboard`),
+run the following commands.
+
+ npm install
+ bower install
+ tsd install
+
+### Run Gulp Vulcanize
+
+Inside this directory, run `gulp vulcanize`. That will compile all of the
+html/js/css dependencies for TensorBoard into a monolithic index.html file under
+dist/. Once you've done this, you can locally run your own TensorBoard instance
+and it will have a working frontend.
+
+### Frontend General Dev Instructions
+
+To speed up the development process, we can run the frontend code independently
+of the backend, and mock out the backend with static JSON files. This allows
+testing the frontend's correctness without needing to find real data and spin
+up a real server. Look at app/demo/index.html for an example.
+
+The following gulp commands are useful:
+
+* `gulp test` - build, test, and lint the code
+* `gulp watch` - build, test, and rebuild on change
+* `gulp server` - start a livereload server on localhost:8000
+* `gulp` - alias for `gulp watch`
+* `gulp vulcanize` -
diff --git a/tensorflow/tensorboard/__init__.py b/tensorflow/tensorboard/__init__.py
new file mode 100755
index 0000000000..e69de29bb2
--- /dev/null
+++ b/tensorflow/tensorboard/__init__.py
diff --git a/tensorflow/tensorboard/app/demo/data/cos.json b/tensorflow/tensorboard/app/demo/data/cos.json
new file mode 100644
index 0000000000..807e1f6dc0
--- /dev/null
+++ b/tensorflow/tensorboard/app/demo/data/cos.json
@@ -0,0 +1 @@
+[[1434931200.0, 0.0, 1.0], [1434932928.0, 20000.0, 0.9999210442038161], [1434934656.0, 40000.0, 0.9996841892832999], [1434936384.0, 60000.0, 0.9992894726405892], [1434938112.0, 80000.0, 0.9987369566060175], [1434939840.0, 100000.0, 0.9980267284282716], [1434941568.0, 120000.0, 0.9971589002606139], [1434943296.0, 140000.0, 0.9961336091431725], [1434945024.0, 160000.0, 0.9949510169813002], [1434946752.0, 180000.0, 0.9936113105200084], [1434948480.0, 200000.0, 0.9921147013144779], [1434950208.0, 220000.0, 0.9904614256966512], [1434951936.0, 240000.0, 0.9886517447379141], [1434953664.0, 260000.0, 0.986685944207868], [1434955392.0, 280000.0, 0.9845643345292053], [1434957120.0, 300000.0, 0.9822872507286887], [1434958848.0, 320000.0, 0.9798550523842469], [1434960576.0, 340000.0, 0.9772681235681935], [1434962304.0, 360000.0, 0.9745268727865771], [1434964032.0, 380000.0, 0.971631732914674], [1434965760.0, 400000.0, 0.9685831611286311], [1434967488.0, 420000.0, 0.9653816388332739], [1434969216.0, 440000.0, 0.9620276715860859], [1434970944.0, 460000.0, 0.9585217890173758], [1434972672.0, 480000.0, 0.954864544746643], [1434974400.0, 500000.0, 0.9510565162951535], [1434976128.0, 520000.0, 0.9470983049947443], [1434977856.0, 540000.0, 0.9429905358928645], [1434979584.0, 560000.0, 0.9387338576538741], [1434981312.0, 580000.0, 0.934328942456612], [1434983040.0, 600000.0, 0.9297764858882515], [1434984768.0, 620000.0, 0.925077206834458], [1434986496.0, 640000.0, 0.9202318473658704], [1434988224.0, 660000.0, 0.9152411726209175], [1434989952.0, 680000.0, 0.9101059706849957], [1434991680.0, 700000.0, 0.9048270524660195], [1434993408.0, 720000.0, 0.8994052515663711], [1434995136.0, 740000.0, 0.8938414241512638], [1434996864.0, 760000.0, 0.8881364488135446], [1434998592.0, 780000.0, 0.8822912264349533], [1435000320.0, 800000.0, 0.8763066800438636], [1435002048.0, 820000.0, 0.8701837546695257], [1435003776.0, 840000.0, 0.8639234171928353], [1435005504.0, 860000.0, 0.8575266561936523], [1435007232.0, 880000.0, 0.850994481794692], [1435008960.0, 900000.0, 0.8443279255020151], [1435010688.0, 920000.0, 0.8375280400421418], [1435012416.0, 940000.0, 0.8305958991958127], [1435014144.0, 960000.0, 0.8235325976284275], [1435015872.0, 980000.0, 0.8163392507171839], [1435017600.0, 1000000.0, 0.8090169943749475], [1435019328.0, 1020000.0, 0.8015669848708766], [1435021056.0, 1040000.0, 0.7939903986478354], [1435022784.0, 1060000.0, 0.7862884321366189], [1435024512.0, 1080000.0, 0.7784623015670235], [1435026240.0, 1100000.0, 0.7705132427757893], [1435027968.0, 1120000.0, 0.7624425110114479], [1435029696.0, 1140000.0, 0.7542513807361038], [1435031424.0, 1160000.0, 0.7459411454241821], [1435033152.0, 1180000.0, 0.7375131173581739], [1435034880.0, 1200000.0, 0.7289686274214116], [1435036608.0, 1220000.0, 0.7203090248879069], [1435038336.0, 1240000.0, 0.7115356772092855], [1435040064.0, 1260000.0, 0.7026499697988492], [1435041792.0, 1280000.0, 0.6936533058128049], [1435043520.0, 1300000.0, 0.6845471059286886], [1435045248.0, 1320000.0, 0.6753328081210245], [1435046976.0, 1340000.0, 0.6660118674342517], [1435048704.0, 1360000.0, 0.6565857557529564], [1435050432.0, 1380000.0, 0.6470559615694443], [1435052160.0, 1400000.0, 0.6374239897486896], [1435053888.0, 1420000.0, 0.6276913612907006], [1435055616.0, 1440000.0, 0.6178596130903344], [1435057344.0, 1460000.0, 0.6079302976946055], [1435059072.0, 1480000.0, 0.5979049830575189], [1435060800.0, 1500000.0, 0.5877852522924731], [1435062528.0, 1520000.0, 0.5775727034222676], [1435064256.0, 1540000.0, 0.5672689491267565], [1435065984.0, 1560000.0, 0.5568756164881881], [1435067712.0, 1580000.0, 0.5463943467342691], [1435069440.0, 1600000.0, 0.5358267949789965], [1435071168.0, 1620000.0, 0.5251746299612957], [1435072896.0, 1640000.0, 0.5144395337815064], [1435074624.0, 1660000.0, 0.5036232016357609], [1435076352.0, 1680000.0, 0.49272734154829156], [1435078080.0, 1700000.0, 0.48175367410171516], [1435079808.0, 1720000.0, 0.47070393216533274], [1435081536.0, 1740000.0, 0.4595798606214879], [1435083264.0, 1760000.0, 0.44838321609003245], [1435084992.0, 1780000.0, 0.437115766650933], [1435086720.0, 1800000.0, 0.42577929156507266], [1435088448.0, 1820000.0, 0.41437558099328425], [1435090176.0, 1840000.0, 0.4029064357136627], [1435091904.0, 1860000.0, 0.39137366683720254], [1435093632.0, 1880000.0, 0.3797790955218011], [1435095360.0, 1900000.0, 0.3681245526846781], [1435097088.0, 1920000.0, 0.35641187871325075], [1435098816.0, 1940000.0, 0.344642923174517], [1435100544.0, 1960000.0, 0.3328195445229867], [1435102272.0, 1980000.0, 0.32094360980720943], [1435104000.0, 2000000.0, 0.30901699437494745], [1435105728.0, 2020000.0, 0.29704158157703486], [1435107456.0, 2040000.0, 0.28501926246997616], [1435109184.0, 2060000.0, 0.2729519355173254], [1435110912.0, 2080000.0, 0.260841506289897], [1435112640.0, 2100000.0, 0.24868988716485496], [1435114368.0, 2120000.0, 0.23649899702372476], [1435116096.0, 2140000.0, 0.22427076094938117], [1435117824.0, 2160000.0, 0.21200710992205474], [1435119552.0, 2180000.0, 0.199709980514407], [1435121280.0, 2200000.0, 0.18738131458572474], [1435123008.0, 2220000.0, 0.17502305897527604], [1435124736.0, 2240000.0, 0.16263716519488372], [1435126464.0, 2260000.0, 0.15022558912075706], [1435128192.0, 2280000.0, 0.13779029068463797], [1435129920.0, 2300000.0, 0.12533323356430426], [1435131648.0, 2320000.0, 0.1128563848734816], [1435133376.0, 2340000.0, 0.10036171485121491], [1435135104.0, 2360000.0, 0.08785119655074332], [1435136832.0, 2380000.0, 0.07532680552793275], [1435138560.0, 2400000.0, 0.06279051952931353], [1435140288.0, 2420000.0, 0.0502443181797696], [1435142016.0, 2440000.0, 0.037690182669934694], [1435143744.0, 2460000.0, 0.02513009544333753], [1435145472.0, 2480000.0, 0.012566039883352776], [1435147200.0, 2500000.0, 6.123233995736766e-17], [1435148928.0, 2520000.0, -0.012566039883352653], [1435150656.0, 2540000.0, -0.025130095443337407], [1435152384.0, 2560000.0, -0.037690182669934576], [1435154112.0, 2580000.0, -0.05024431817976947], [1435155840.0, 2600000.0, -0.0627905195293134], [1435157568.0, 2620000.0, -0.07532680552793262], [1435159296.0, 2640000.0, -0.0878511965507432], [1435161024.0, 2660000.0, -0.100361714851215], [1435162752.0, 2680000.0, -0.1128563848734817], [1435164480.0, 2700000.0, -0.12533323356430437], [1435166208.0, 2720000.0, -0.13779029068463805], [1435167936.0, 2740000.0, -0.15022558912075715], [1435169664.0, 2760000.0, -0.16263716519488358], [1435171392.0, 2780000.0, -0.17502305897527615], [1435173120.0, 2800000.0, -0.18738131458572482], [1435174848.0, 2820000.0, -0.1997099805144069], [1435176576.0, 2840000.0, -0.21200710992205438], [1435178304.0, 2860000.0, -0.22427076094938103], [1435180032.0, 2880000.0, -0.23649899702372443], [1435181760.0, 2900000.0, -0.24868988716485463], [1435183488.0, 2920000.0, -0.26084150628989666], [1435185216.0, 2940000.0, -0.27295193551732505], [1435186944.0, 2960000.0, -0.28501926246997605], [1435188672.0, 2980000.0, -0.29704158157703475], [1435190400.0, 3000000.0, -0.30901699437494734], [1435192128.0, 3020000.0, -0.3209436098072093], [1435193856.0, 3040000.0, -0.33281954452298657], [1435195584.0, 3060000.0, -0.3446429231745169], [1435197312.0, 3080000.0, -0.35641187871325064], [1435199040.0, 3100000.0, -0.368124552684678], [1435200768.0, 3120000.0, -0.379779095521801], [1435202496.0, 3140000.0, -0.3913736668372024], [1435204224.0, 3160000.0, -0.4029064357136626], [1435205952.0, 3180000.0, -0.41437558099328414], [1435207680.0, 3200000.0, -0.4257792915650727], [1435209408.0, 3220000.0, -0.4371157666509327], [1435211136.0, 3240000.0, -0.4483832160900321], [1435212864.0, 3260000.0, -0.4595798606214878], [1435214592.0, 3280000.0, -0.47070393216533263], [1435216320.0, 3300000.0, -0.48175367410171543], [1435218048.0, 3320000.0, -0.49272734154829145], [1435219776.0, 3340000.0, -0.5036232016357608], [1435221504.0, 3360000.0, -0.5144395337815065], [1435223232.0, 3380000.0, -0.5251746299612958], [1435224960.0, 3400000.0, -0.5358267949789969], [1435226688.0, 3420000.0, -0.546394346734269], [1435228416.0, 3440000.0, -0.5568756164881876], [1435230144.0, 3460000.0, -0.5672689491267563], [1435231872.0, 3480000.0, -0.5775727034222674], [1435233600.0, 3500000.0, -0.587785252292473], [1435235328.0, 3520000.0, -0.5979049830575185], [1435237056.0, 3540000.0, -0.6079302976946052], [1435238784.0, 3560000.0, -0.6178596130903342], [1435240512.0, 3580000.0, -0.6276913612907004], [1435242240.0, 3600000.0, -0.6374239897486897], [1435243968.0, 3620000.0, -0.647055961569444], [1435245696.0, 3640000.0, -0.6565857557529563], [1435247424.0, 3660000.0, -0.6660118674342516], [1435249152.0, 3680000.0, -0.6753328081210245], [1435250880.0, 3700000.0, -0.6845471059286887], [1435252608.0, 3720000.0, -0.6936533058128048], [1435254336.0, 3740000.0, -0.7026499697988491], [1435256064.0, 3760000.0, -0.7115356772092853], [1435257792.0, 3780000.0, -0.7203090248879069], [1435259520.0, 3800000.0, -0.7289686274214113], [1435261248.0, 3820000.0, -0.7375131173581738], [1435262976.0, 3840000.0, -0.7459411454241821], [1435264704.0, 3860000.0, -0.7542513807361039], [1435266432.0, 3880000.0, -0.762442511011448], [1435268160.0, 3900000.0, -0.7705132427757891], [1435269888.0, 3920000.0, -0.7784623015670233], [1435271616.0, 3940000.0, -0.7862884321366189], [1435273344.0, 3960000.0, -0.7939903986478354], [1435275072.0, 3980000.0, -0.8015669848708767], [1435276800.0, 4000000.0, -0.8090169943749473], [1435278528.0, 4020000.0, -0.8163392507171839], [1435280256.0, 4040000.0, -0.8235325976284275], [1435281984.0, 4060000.0, -0.8305958991958128], [1435283712.0, 4080000.0, -0.8375280400421417], [1435285440.0, 4100000.0, -0.8443279255020149], [1435287168.0, 4120000.0, -0.8509944817946917], [1435288896.0, 4140000.0, -0.8575266561936521], [1435290624.0, 4160000.0, -0.8639234171928353], [1435292352.0, 4180000.0, -0.8701837546695257], [1435294080.0, 4200000.0, -0.8763066800438634], [1435295808.0, 4220000.0, -0.8822912264349532], [1435297536.0, 4240000.0, -0.8881364488135445], [1435299264.0, 4260000.0, -0.8938414241512638], [1435300992.0, 4280000.0, -0.8994052515663711], [1435302720.0, 4300000.0, -0.9048270524660194], [1435304448.0, 4320000.0, -0.9101059706849957], [1435306176.0, 4340000.0, -0.9152411726209175], [1435307904.0, 4360000.0, -0.9202318473658704], [1435309632.0, 4380000.0, -0.9250772068344579], [1435311360.0, 4400000.0, -0.9297764858882513], [1435313088.0, 4420000.0, -0.934328942456612], [1435314816.0, 4440000.0, -0.9387338576538741], [1435316544.0, 4460000.0, -0.9429905358928645], [1435318272.0, 4480000.0, -0.9470983049947442], [1435320000.0, 4500000.0, -0.9510565162951535], [1435321728.0, 4520000.0, -0.954864544746643], [1435323456.0, 4540000.0, -0.958521789017376], [1435325184.0, 4560000.0, -0.9620276715860859], [1435326912.0, 4580000.0, -0.9653816388332739], [1435328640.0, 4600000.0, -0.9685831611286311], [1435330368.0, 4620000.0, -0.971631732914674], [1435332096.0, 4640000.0, -0.9745268727865772], [1435333824.0, 4660000.0, -0.9772681235681935], [1435335552.0, 4680000.0, -0.9798550523842469], [1435337280.0, 4700000.0, -0.9822872507286886], [1435339008.0, 4720000.0, -0.9845643345292053], [1435340736.0, 4740000.0, -0.986685944207868], [1435342464.0, 4760000.0, -0.988651744737914], [1435344192.0, 4780000.0, -0.9904614256966512], [1435345920.0, 4800000.0, -0.9921147013144778], [1435347648.0, 4820000.0, -0.9936113105200084], [1435349376.0, 4840000.0, -0.9949510169813002], [1435351104.0, 4860000.0, -0.9961336091431725], [1435352832.0, 4880000.0, -0.9971589002606139], [1435354560.0, 4900000.0, -0.9980267284282716], [1435356288.0, 4920000.0, -0.9987369566060175], [1435358016.0, 4940000.0, -0.9992894726405892], [1435359744.0, 4960000.0, -0.9996841892832999], [1435361472.0, 4980000.0, -0.9999210442038161], [1435363200.0, 5000000.0, -1.0], [1435364928.0, 5020000.0, -0.9999210442038161], [1435366656.0, 5040000.0, -0.9996841892832999], [1435368384.0, 5060000.0, -0.9992894726405892], [1435370112.0, 5080000.0, -0.9987369566060175], [1435371840.0, 5100000.0, -0.9980267284282716], [1435373568.0, 5120000.0, -0.9971589002606139], [1435375296.0, 5140000.0, -0.9961336091431725], [1435377024.0, 5160000.0, -0.9949510169813002], [1435378752.0, 5180000.0, -0.9936113105200084], [1435380480.0, 5200000.0, -0.9921147013144779], [1435382208.0, 5220000.0, -0.9904614256966512], [1435383936.0, 5240000.0, -0.9886517447379141], [1435385664.0, 5260000.0, -0.986685944207868], [1435387392.0, 5280000.0, -0.9845643345292053], [1435389120.0, 5300000.0, -0.9822872507286886], [1435390848.0, 5320000.0, -0.9798550523842469], [1435392576.0, 5340000.0, -0.9772681235681935], [1435394304.0, 5360000.0, -0.9745268727865771], [1435396032.0, 5380000.0, -0.9716317329146739], [1435397760.0, 5400000.0, -0.9685831611286311], [1435399488.0, 5420000.0, -0.9653816388332739], [1435401216.0, 5440000.0, -0.9620276715860859], [1435402944.0, 5460000.0, -0.9585217890173758], [1435404672.0, 5480000.0, -0.954864544746643], [1435406400.0, 5500000.0, -0.9510565162951535], [1435408128.0, 5520000.0, -0.9470983049947443], [1435409856.0, 5540000.0, -0.9429905358928644], [1435411584.0, 5560000.0, -0.9387338576538741], [1435413312.0, 5580000.0, -0.9343289424566119], [1435415040.0, 5600000.0, -0.9297764858882512], [1435416768.0, 5620000.0, -0.925077206834458], [1435418496.0, 5640000.0, -0.9202318473658705], [1435420224.0, 5660000.0, -0.9152411726209179], [1435421952.0, 5680000.0, -0.9101059706849959], [1435423680.0, 5700000.0, -0.9048270524660197], [1435425408.0, 5720000.0, -0.8994052515663712], [1435427136.0, 5740000.0, -0.8938414241512641], [1435428864.0, 5760000.0, -0.8881364488135448], [1435430592.0, 5780000.0, -0.8822912264349535], [1435432320.0, 5800000.0, -0.8763066800438637], [1435434048.0, 5820000.0, -0.8701837546695258], [1435435776.0, 5840000.0, -0.8639234171928356], [1435437504.0, 5860000.0, -0.8575266561936525], [1435439232.0, 5880000.0, -0.8509944817946921], [1435440960.0, 5900000.0, -0.8443279255020152], [1435442688.0, 5920000.0, -0.8375280400421418], [1435444416.0, 5940000.0, -0.8305958991958129], [1435446144.0, 5960000.0, -0.8235325976284277], [1435447872.0, 5980000.0, -0.816339250717184], [1435449600.0, 6000000.0, -0.8090169943749476], [1435451328.0, 6020000.0, -0.8015669848708769], [1435453056.0, 6040000.0, -0.7939903986478356], [1435454784.0, 6060000.0, -0.786288432136619], [1435456512.0, 6080000.0, -0.7784623015670236], [1435458240.0, 6100000.0, -0.7705132427757893], [1435459968.0, 6120000.0, -0.7624425110114481], [1435461696.0, 6140000.0, -0.754251380736104], [1435463424.0, 6160000.0, -0.7459411454241822], [1435465152.0, 6180000.0, -0.7375131173581739], [1435466880.0, 6200000.0, -0.7289686274214116], [1435468608.0, 6220000.0, -0.7203090248879072], [1435470336.0, 6240000.0, -0.7115356772092855], [1435472064.0, 6260000.0, -0.7026499697988493], [1435473792.0, 6280000.0, -0.6936533058128049], [1435475520.0, 6300000.0, -0.684547105928689], [1435477248.0, 6320000.0, -0.6753328081210246], [1435478976.0, 6340000.0, -0.6660118674342517], [1435480704.0, 6360000.0, -0.6565857557529564], [1435482432.0, 6380000.0, -0.6470559615694442], [1435484160.0, 6400000.0, -0.6374239897486895], [1435485888.0, 6420000.0, -0.6276913612907002], [1435487616.0, 6440000.0, -0.6178596130903348], [1435489344.0, 6460000.0, -0.6079302976946057], [1435491072.0, 6480000.0, -0.597904983057519], [1435492800.0, 6500000.0, -0.5877852522924732], [1435494528.0, 6520000.0, -0.5775727034222676], [1435496256.0, 6540000.0, -0.5672689491267564], [1435497984.0, 6560000.0, -0.5568756164881878], [1435499712.0, 6580000.0, -0.5463943467342689], [1435501440.0, 6600000.0, -0.5358267949789963], [1435503168.0, 6620000.0, -0.5251746299612953], [1435504896.0, 6640000.0, -0.5144395337815068], [1435506624.0, 6660000.0, -0.503623201635761], [1435508352.0, 6680000.0, -0.4927273415482917], [1435510080.0, 6700000.0, -0.48175367410171527], [1435511808.0, 6720000.0, -0.47070393216533246], [1435513536.0, 6740000.0, -0.45957986062148765], [1435515264.0, 6760000.0, -0.44838321609003196], [1435516992.0, 6780000.0, -0.4371157666509325], [1435518720.0, 6800000.0, -0.42577929156507216], [1435520448.0, 6820000.0, -0.41437558099328436], [1435522176.0, 6840000.0, -0.4029064357136628], [1435523904.0, 6860000.0, -0.3913736668372024], [1435525632.0, 6880000.0, -0.37977909552180183], [1435527360.0, 6900000.0, -0.3681245526846786], [1435529088.0, 6920000.0, -0.35641187871325125], [1435530816.0, 6940000.0, -0.3446429231745175], [1435532544.0, 6960000.0, -0.332819544522987], [1435534272.0, 6980000.0, -0.32094360980720976], [1435536000.0, 7000000.0, -0.30901699437494756], [1435537728.0, 7020000.0, -0.297041581577035], [1435539456.0, 7040000.0, -0.28501926246997694], [1435541184.0, 7060000.0, -0.27295193551732594], [1435542912.0, 7080000.0, -0.26084150628989755], [1435544640.0, 7100000.0, -0.2486898871648553], [1435546368.0, 7120000.0, -0.2364989970237251], [1435548096.0, 7140000.0, -0.2242707609493815], [1435549824.0, 7160000.0, -0.21200710992205485], [1435551552.0, 7180000.0, -0.1997099805144071], [1435553280.0, 7200000.0, -0.18738131458572463], [1435555008.0, 7220000.0, -0.17502305897527595], [1435556736.0, 7240000.0, -0.16263716519488428], [1435558464.0, 7260000.0, -0.15022558912075762], [1435560192.0, 7280000.0, -0.13779029068463852], [1435561920.0, 7300000.0, -0.1253332335643046], [1435563648.0, 7320000.0, -0.11285638487348193], [1435565376.0, 7340000.0, -0.10036171485121503], [1435567104.0, 7360000.0, -0.08785119655074321], [1435568832.0, 7380000.0, -0.07532680552793265], [1435570560.0, 7400000.0, -0.06279051952931321], [1435572288.0, 7420000.0, -0.05024431817977017], [1435574016.0, 7440000.0, -0.03769018266993504], [1435575744.0, 7460000.0, -0.025130095443337875], [1435577472.0, 7480000.0, -0.012566039883352897], [1435579200.0, 7500000.0, -1.8369701987210297e-16], [1435580928.0, 7520000.0, 0.012566039883352531], [1435582656.0, 7540000.0, 0.025130095443337507], [1435584384.0, 7560000.0, 0.03769018266993467], [1435586112.0, 7580000.0, 0.0502443181797698], [1435587840.0, 7600000.0, 0.06279051952931283], [1435589568.0, 7620000.0, 0.07532680552793229], [1435591296.0, 7640000.0, 0.08785119655074285], [1435593024.0, 7660000.0, 0.10036171485121467], [1435594752.0, 7680000.0, 0.11285638487348157], [1435596480.0, 7700000.0, 0.12533323356430423], [1435598208.0, 7720000.0, 0.13779029068463816], [1435599936.0, 7740000.0, 0.15022558912075726], [1435601664.0, 7760000.0, 0.16263716519488391], [1435603392.0, 7780000.0, 0.1750230589752756], [1435605120.0, 7800000.0, 0.18738131458572427], [1435606848.0, 7820000.0, 0.19970998051440675], [1435608576.0, 7840000.0, 0.2120071099220545], [1435610304.0, 7860000.0, 0.22427076094938114], [1435612032.0, 7880000.0, 0.23649899702372473], [1435613760.0, 7900000.0, 0.24868988716485493], [1435615488.0, 7920000.0, 0.2608415062898972], [1435617216.0, 7940000.0, 0.2729519355173256], [1435618944.0, 7960000.0, 0.2850192624699766], [1435620672.0, 7980000.0, 0.29704158157703464], [1435622400.0, 8000000.0, 0.30901699437494723], [1435624128.0, 8020000.0, 0.32094360980720943], [1435625856.0, 8040000.0, 0.3328195445229867], [1435627584.0, 8060000.0, 0.34464292317451717], [1435629312.0, 8080000.0, 0.3564118787132509], [1435631040.0, 8100000.0, 0.36812455268467825], [1435632768.0, 8120000.0, 0.3797790955218015], [1435634496.0, 8140000.0, 0.3913736668372021], [1435636224.0, 8160000.0, 0.40290643571366247], [1435637952.0, 8180000.0, 0.41437558099328403], [1435639680.0, 8200000.0, 0.4257792915650718], [1435641408.0, 8220000.0, 0.43711576665093216], [1435643136.0, 8240000.0, 0.4483832160900316], [1435644864.0, 8260000.0, 0.4595798606214873], [1435646592.0, 8280000.0, 0.47070393216533213], [1435648320.0, 8300000.0, 0.48175367410171493], [1435650048.0, 8320000.0, 0.49272734154829134], [1435651776.0, 8340000.0, 0.5036232016357607], [1435653504.0, 8360000.0, 0.5144395337815064], [1435655232.0, 8380000.0, 0.5251746299612949], [1435656960.0, 8400000.0, 0.535826794978996], [1435658688.0, 8420000.0, 0.5463943467342686], [1435660416.0, 8440000.0, 0.5568756164881876], [1435662144.0, 8460000.0, 0.5672689491267562], [1435663872.0, 8480000.0, 0.5775727034222673], [1435665600.0, 8500000.0, 0.5877852522924729], [1435667328.0, 8520000.0, 0.5979049830575188], [1435669056.0, 8540000.0, 0.6079302976946054], [1435670784.0, 8560000.0, 0.6178596130903344], [1435672512.0, 8580000.0, 0.6276913612906999], [1435674240.0, 8600000.0, 0.6374239897486893], [1435675968.0, 8620000.0, 0.647055961569444], [1435677696.0, 8640000.0, 0.6565857557529562], [1435679424.0, 8660000.0, 0.6660118674342514], [1435681152.0, 8680000.0, 0.6753328081210244], [1435682880.0, 8700000.0, 0.6845471059286886], [1435684608.0, 8720000.0, 0.693653305812805], [1435686336.0, 8740000.0, 0.7026499697988493], [1435688064.0, 8760000.0, 0.7115356772092849], [1435689792.0, 8780000.0, 0.7203090248879065], [1435691520.0, 8800000.0, 0.7289686274214112], [1435693248.0, 8820000.0, 0.7375131173581737], [1435694976.0, 8840000.0, 0.745941145424182], [1435696704.0, 8860000.0, 0.7542513807361038], [1435698432.0, 8880000.0, 0.7624425110114479], [1435700160.0, 8900000.0, 0.7705132427757894], [1435701888.0, 8920000.0, 0.7784623015670236], [1435703616.0, 8940000.0, 0.7862884321366186], [1435705344.0, 8960000.0, 0.793990398647835], [1435707072.0, 8980000.0, 0.8015669848708764], [1435708800.0, 9000000.0, 0.8090169943749473], [1435710528.0, 9020000.0, 0.8163392507171839], [1435712256.0, 9040000.0, 0.8235325976284275], [1435713984.0, 9060000.0, 0.8305958991958127], [1435715712.0, 9080000.0, 0.8375280400421419], [1435717440.0, 9100000.0, 0.8443279255020153], [1435719168.0, 9120000.0, 0.8509944817946921], [1435720896.0, 9140000.0, 0.8575266561936521], [1435722624.0, 9160000.0, 0.8639234171928352], [1435724352.0, 9180000.0, 0.8701837546695256], [1435726080.0, 9200000.0, 0.8763066800438636], [1435727808.0, 9220000.0, 0.8822912264349533], [1435729536.0, 9240000.0, 0.8881364488135446], [1435731264.0, 9260000.0, 0.8938414241512639], [1435732992.0, 9280000.0, 0.8994052515663712], [1435734720.0, 9300000.0, 0.9048270524660197], [1435736448.0, 9320000.0, 0.9101059706849955], [1435738176.0, 9340000.0, 0.9152411726209175], [1435739904.0, 9360000.0, 0.9202318473658703], [1435741632.0, 9380000.0, 0.9250772068344577], [1435743360.0, 9400000.0, 0.9297764858882511], [1435745088.0, 9420000.0, 0.9343289424566118], [1435746816.0, 9440000.0, 0.9387338576538738], [1435748544.0, 9460000.0, 0.9429905358928643], [1435750272.0, 9480000.0, 0.9470983049947441], [1435752000.0, 9500000.0, 0.9510565162951535], [1435753728.0, 9520000.0, 0.954864544746643], [1435755456.0, 9540000.0, 0.9585217890173756], [1435757184.0, 9560000.0, 0.9620276715860857], [1435758912.0, 9580000.0, 0.9653816388332737], [1435760640.0, 9600000.0, 0.968583161128631], [1435762368.0, 9620000.0, 0.9716317329146739], [1435764096.0, 9640000.0, 0.974526872786577], [1435765824.0, 9660000.0, 0.9772681235681934], [1435767552.0, 9680000.0, 0.9798550523842469], [1435769280.0, 9700000.0, 0.9822872507286887], [1435771008.0, 9720000.0, 0.9845643345292054], [1435772736.0, 9740000.0, 0.9866859442078679], [1435774464.0, 9760000.0, 0.988651744737914], [1435776192.0, 9780000.0, 0.9904614256966512], [1435777920.0, 9800000.0, 0.9921147013144778], [1435779648.0, 9820000.0, 0.9936113105200084], [1435781376.0, 9840000.0, 0.9949510169813002], [1435783104.0, 9860000.0, 0.9961336091431725], [1435784832.0, 9880000.0, 0.9971589002606139], [1435786560.0, 9900000.0, 0.9980267284282716], [1435788288.0, 9920000.0, 0.9987369566060175], [1435790016.0, 9940000.0, 0.9992894726405892], [1435791744.0, 9960000.0, 0.9996841892832999], [1435793472.0, 9980000.0, 0.9999210442038161], [1435795200.0, 10000000.0, 1.0], [1435796928.0, 10020000.0, 0.9999210442038161], [1435798656.0, 10040000.0, 0.9996841892832999], [1435800384.0, 10060000.0, 0.9992894726405892], [1435802112.0, 10080000.0, 0.9987369566060175], [1435803840.0, 10100000.0, 0.9980267284282716], [1435805568.0, 10120000.0, 0.9971589002606139], [1435807296.0, 10140000.0, 0.9961336091431725], [1435809024.0, 10160000.0, 0.9949510169813002], [1435810752.0, 10180000.0, 0.9936113105200084], [1435812480.0, 10200000.0, 0.9921147013144779], [1435814208.0, 10220000.0, 0.9904614256966512], [1435815936.0, 10240000.0, 0.988651744737914], [1435817664.0, 10260000.0, 0.986685944207868], [1435819392.0, 10280000.0, 0.9845643345292054], [1435821120.0, 10300000.0, 0.9822872507286887], [1435822848.0, 10320000.0, 0.979855052384247], [1435824576.0, 10340000.0, 0.9772681235681935], [1435826304.0, 10360000.0, 0.9745268727865771], [1435828032.0, 10380000.0, 0.971631732914674], [1435829760.0, 10400000.0, 0.9685831611286311], [1435831488.0, 10420000.0, 0.9653816388332739], [1435833216.0, 10440000.0, 0.9620276715860858], [1435834944.0, 10460000.0, 0.9585217890173757], [1435836672.0, 10480000.0, 0.9548645447466431], [1435838400.0, 10500000.0, 0.9510565162951536], [1435840128.0, 10520000.0, 0.9470983049947443], [1435841856.0, 10540000.0, 0.9429905358928645], [1435843584.0, 10560000.0, 0.9387338576538741], [1435845312.0, 10580000.0, 0.934328942456612], [1435847040.0, 10600000.0, 0.9297764858882513], [1435848768.0, 10620000.0, 0.9250772068344579], [1435850496.0, 10640000.0, 0.9202318473658702], [1435852224.0, 10660000.0, 0.9152411726209176], [1435853952.0, 10680000.0, 0.9101059706849958], [1435855680.0, 10700000.0, 0.9048270524660196], [1435857408.0, 10720000.0, 0.8994052515663711], [1435859136.0, 10740000.0, 0.8938414241512638], [1435860864.0, 10760000.0, 0.8881364488135444], [1435862592.0, 10780000.0, 0.8822912264349532], [1435864320.0, 10800000.0, 0.8763066800438634], [1435866048.0, 10820000.0, 0.8701837546695254], [1435867776.0, 10840000.0, 0.8639234171928354], [1435869504.0, 10860000.0, 0.8575266561936523], [1435871232.0, 10880000.0, 0.8509944817946918], [1435872960.0, 10900000.0, 0.8443279255020151], [1435874688.0, 10920000.0, 0.8375280400421417], [1435876416.0, 10940000.0, 0.8305958991958124], [1435878144.0, 10960000.0, 0.8235325976284272], [1435879872.0, 10980000.0, 0.8163392507171836], [1435881600.0, 11000000.0, 0.809016994374947], [1435883328.0, 11020000.0, 0.8015669848708762], [1435885056.0, 11040000.0, 0.7939903986478354], [1435886784.0, 11060000.0, 0.7862884321366189], [1435888512.0, 11080000.0, 0.7784623015670233], [1435890240.0, 11100000.0, 0.770513242775789], [1435891968.0, 11120000.0, 0.7624425110114477], [1435893696.0, 11140000.0, 0.7542513807361035], [1435895424.0, 11160000.0, 0.7459411454241818], [1435897152.0, 11180000.0, 0.7375131173581735], [1435898880.0, 11200000.0, 0.728968627421411], [1435900608.0, 11220000.0, 0.7203090248879069], [1435902336.0, 11240000.0, 0.7115356772092852], [1435904064.0, 11260000.0, 0.7026499697988496], [1435905792.0, 11280000.0, 0.6936533058128054], [1435907520.0, 11300000.0, 0.6845471059286896], [1435909248.0, 11320000.0, 0.6753328081210254], [1435910976.0, 11340000.0, 0.6660118674342524], [1435912704.0, 11360000.0, 0.6565857557529572], [1435914432.0, 11380000.0, 0.647055961569445], [1435916160.0, 11400000.0, 0.6374239897486903], [1435917888.0, 11420000.0, 0.627691361290701], [1435919616.0, 11440000.0, 0.6178596130903348], [1435921344.0, 11460000.0, 0.6079302976946058], [1435923072.0, 11480000.0, 0.5979049830575199], [1435924800.0, 11500000.0, 0.587785252292474], [1435926528.0, 11520000.0, 0.5775727034222684], [1435928256.0, 11540000.0, 0.5672689491267573], [1435929984.0, 11560000.0, 0.5568756164881887], [1435931712.0, 11580000.0, 0.5463943467342697], [1435933440.0, 11600000.0, 0.5358267949789972], [1435935168.0, 11620000.0, 0.5251746299612962], [1435936896.0, 11640000.0, 0.5144395337815069], [1435938624.0, 11660000.0, 0.5036232016357611], [1435940352.0, 11680000.0, 0.4927273415482925], [1435942080.0, 11700000.0, 0.48175367410171616], [1435943808.0, 11720000.0, 0.47070393216533335], [1435945536.0, 11740000.0, 0.45957986062148853], [1435947264.0, 11760000.0, 0.44838321609003284], [1435948992.0, 11780000.0, 0.43711576665093343], [1435950720.0, 11800000.0, 0.42577929156507305], [1435952448.0, 11820000.0, 0.4143755809932845], [1435954176.0, 11840000.0, 0.4029064357136629], [1435955904.0, 11860000.0, 0.39137366683720337], [1435957632.0, 11880000.0, 0.37977909552180195], [1435959360.0, 11900000.0, 0.36812455268467875], [1435961088.0, 11920000.0, 0.35641187871325136], [1435962816.0, 11940000.0, 0.3446429231745176], [1435964544.0, 11960000.0, 0.3328195445229871], [1435966272.0, 11980000.0, 0.3209436098072099], [1435968000.0, 12000000.0, 0.30901699437494773], [1435969728.0, 12020000.0, 0.2970415815770351], [1435971456.0, 12040000.0, 0.28501926246997705], [1435973184.0, 12060000.0, 0.27295193551732605], [1435974912.0, 12080000.0, 0.26084150628989766], [1435976640.0, 12100000.0, 0.24868988716485543], [1435978368.0, 12120000.0, 0.2364989970237252], [1435980096.0, 12140000.0, 0.22427076094938161], [1435981824.0, 12160000.0, 0.21200710992205496], [1435983552.0, 12180000.0, 0.19970998051440725], [1435985280.0, 12200000.0, 0.18738131458572474], [1435987008.0, 12220000.0, 0.17502305897527606], [1435988736.0, 12240000.0, 0.1626371651948844], [1435990464.0, 12260000.0, 0.15022558912075773], [1435992192.0, 12280000.0, 0.13779029068463863], [1435993920.0, 12300000.0, 0.12533323356430473], [1435995648.0, 12320000.0, 0.11285638487348205], [1435997376.0, 12340000.0, 0.10036171485121516], [1435999104.0, 12360000.0, 0.08785119655074333], [1436000832.0, 12380000.0, 0.07532680552793278], [1436002560.0, 12400000.0, 0.06279051952931332], [1436004288.0, 12420000.0, 0.050244318179770285], [1436006016.0, 12440000.0, 0.037690182669935166], [1436007744.0, 12460000.0, 0.025130095443337996], [1436009472.0, 12480000.0, 0.01256603988335302], [1436011200.0, 12500000.0, 3.061616997868383e-16], [1436012928.0, 12520000.0, -0.012566039883352408], [1436014656.0, 12540000.0, -0.025130095443337386], [1436016384.0, 12560000.0, -0.03769018266993455], [1436018112.0, 12580000.0, -0.050244318179769674], [1436019840.0, 12600000.0, -0.06279051952931271], [1436021568.0, 12620000.0, -0.07532680552793217], [1436023296.0, 12640000.0, -0.08785119655074272], [1436025024.0, 12660000.0, -0.10036171485121455], [1436026752.0, 12680000.0, -0.11285638487348144], [1436028480.0, 12700000.0, -0.12533323356430412], [1436030208.0, 12720000.0, -0.13779029068463805], [1436031936.0, 12740000.0, -0.15022558912075626], [1436033664.0, 12760000.0, -0.16263716519488378], [1436035392.0, 12780000.0, -0.17502305897527545], [1436037120.0, 12800000.0, -0.18738131458572502], [1436038848.0, 12820000.0, -0.19970998051440664], [1436040576.0, 12840000.0, -0.21200710992205524], [1436042304.0, 12860000.0, -0.224270760949381], [1436044032.0, 12880000.0, -0.23649899702372376], [1436045760.0, 12900000.0, -0.24868988716485482], [1436047488.0, 12920000.0, -0.2608415062898962], [1436049216.0, 12940000.0, -0.2729519355173255], [1436050944.0, 12960000.0, -0.2850192624699756], [1436052672.0, 12980000.0, -0.29704158157703536], [1436054400.0, 13000000.0, -0.3090169943749471], [1436056128.0, 13020000.0, -0.32094360980721015], [1436057856.0, 13040000.0, -0.33281954452298657], [1436059584.0, 13060000.0, -0.3446429231745162], [1436061312.0, 13080000.0, -0.3564118787132508], [1436063040.0, 13100000.0, -0.3681245526846773], [1436064768.0, 13120000.0, -0.3797790955218014], [1436066496.0, 13140000.0, -0.391373666837202], [1436068224.0, 13160000.0, -0.40290643571366314], [1436069952.0, 13180000.0, -0.4143755809932839], [1436071680.0, 13200000.0, -0.4257792915650733], [1436073408.0, 13220000.0, -0.4371157666509329], [1436075136.0, 13240000.0, -0.4483832160900331], [1436076864.0, 13260000.0, -0.45957986062148803], [1436078592.0, 13280000.0, -0.470703932165332], [1436080320.0, 13300000.0, -0.4817536741017156], [1436082048.0, 13320000.0, -0.49272734154829123], [1436083776.0, 13340000.0, -0.5036232016357614], [1436085504.0, 13360000.0, -0.5144395337815063], [1436087232.0, 13380000.0, -0.5251746299612964], [1436088960.0, 13400000.0, -0.5358267949789967], [1436090688.0, 13420000.0, -0.5463943467342699], [1436092416.0, 13440000.0, -0.5568756164881882], [1436094144.0, 13460000.0, -0.5672689491267561], [1436095872.0, 13480000.0, -0.577572703422268], [1436097600.0, 13500000.0, -0.5877852522924729], [1436099328.0, 13520000.0, -0.5979049830575194], [1436101056.0, 13540000.0, -0.6079302976946053], [1436102784.0, 13560000.0, -0.617859613090335], [1436104512.0, 13580000.0, -0.6276913612907006], [1436106240.0, 13600000.0, -0.6374239897486905], [1436107968.0, 13620000.0, -0.6470559615694446], [1436109696.0, 13640000.0, -0.6565857557529561], [1436111424.0, 13660000.0, -0.666011867434252], [1436113152.0, 13680000.0, -0.6753328081210243], [1436114880.0, 13700000.0, -0.6845471059286892], [1436116608.0, 13720000.0, -0.6936533058128049], [1436118336.0, 13740000.0, -0.7026499697988499], [1436120064.0, 13760000.0, -0.7115356772092842], [1436121792.0, 13780000.0, -0.7203090248879065], [1436123520.0, 13800000.0, -0.7289686274214106], [1436125248.0, 13820000.0, -0.7375131173581736], [1436126976.0, 13840000.0, -0.7459411454241813], [1436128704.0, 13860000.0, -0.7542513807361036], [1436130432.0, 13880000.0, -0.7624425110114472], [1436132160.0, 13900000.0, -0.7705132427757881], [1436133888.0, 13920000.0, -0.7784623015670229], [1436135616.0, 13940000.0, -0.7862884321366179], [1436137344.0, 13960000.0, -0.7939903986478349], [1436139072.0, 13980000.0, -0.8015669848708757], [1436140800.0, 14000000.0, -0.8090169943749472], [1436142528.0, 14020000.0, -0.8163392507171833], [1436144256.0, 14040000.0, -0.8235325976284273], [1436145984.0, 14060000.0, -0.8305958991958121], [1436147712.0, 14080000.0, -0.8375280400421408], [1436149440.0, 14100000.0, -0.8443279255020147], [1436151168.0, 14120000.0, -0.8509944817946911], [1436152896.0, 14140000.0, -0.857526656193652], [1436154624.0, 14160000.0, -0.8639234171928347], [1436156352.0, 14180000.0, -0.8701837546695256], [1436158080.0, 14200000.0, -0.876306680043863], [1436159808.0, 14220000.0, -0.8822912264349533], [1436161536.0, 14240000.0, -0.8881364488135441], [1436163264.0, 14260000.0, -0.893841424151263], [1436164992.0, 14280000.0, -0.8994052515663707], [1436166720.0, 14300000.0, -0.9048270524660189], [1436168448.0, 14320000.0, -0.9101059706849955], [1436170176.0, 14340000.0, -0.9152411726209171], [1436171904.0, 14360000.0, -0.9202318473658703], [1436173632.0, 14380000.0, -0.9250772068344577], [1436175360.0, 14400000.0, -0.9297764858882515], [1436177088.0, 14420000.0, -0.9343289424566118], [1436178816.0, 14440000.0, -0.9387338576538742], [1436180544.0, 14460000.0, -0.9429905358928643], [1436182272.0, 14480000.0, -0.9470983049947439], [1436184000.0, 14500000.0, -0.9510565162951534], [1436185728.0, 14520000.0, -0.9548645447466426], [1436187456.0, 14540000.0, -0.9585217890173758], [1436189184.0, 14560000.0, -0.9620276715860856], [1436190912.0, 14580000.0, -0.9653816388332739], [1436192640.0, 14600000.0, -0.968583161128631], [1436194368.0, 14620000.0, -0.971631732914674], [1436196096.0, 14640000.0, -0.974526872786577], [1436197824.0, 14660000.0, -0.9772681235681931], [1436199552.0, 14680000.0, -0.9798550523842469], [1436201280.0, 14700000.0, -0.9822872507286885], [1436203008.0, 14720000.0, -0.9845643345292053], [1436204736.0, 14740000.0, -0.9866859442078679], [1436206464.0, 14760000.0, -0.9886517447379141], [1436208192.0, 14780000.0, -0.9904614256966511], [1436209920.0, 14800000.0, -0.9921147013144779], [1436211648.0, 14820000.0, -0.9936113105200084], [1436213376.0, 14840000.0, -0.9949510169813001], [1436215104.0, 14860000.0, -0.9961336091431724], [1436216832.0, 14880000.0, -0.9971589002606138], [1436218560.0, 14900000.0, -0.9980267284282716], [1436220288.0, 14920000.0, -0.9987369566060175], [1436222016.0, 14940000.0, -0.9992894726405892], [1436223744.0, 14960000.0, -0.9996841892832999], [1436225472.0, 14980000.0, -0.9999210442038161], [1436227200.0, 15000000.0, -1.0], [1436228928.0, 15020000.0, -0.9999210442038161], [1436230656.0, 15040000.0, -0.9996841892832999], [1436232384.0, 15060000.0, -0.9992894726405893], [1436234112.0, 15080000.0, -0.9987369566060175], [1436235840.0, 15100000.0, -0.9980267284282716], [1436237568.0, 15120000.0, -0.9971589002606139], [1436239296.0, 15140000.0, -0.9961336091431725], [1436241024.0, 15160000.0, -0.9949510169813001], [1436242752.0, 15180000.0, -0.9936113105200084], [1436244480.0, 15200000.0, -0.992114701314478], [1436246208.0, 15220000.0, -0.9904614256966512], [1436247936.0, 15240000.0, -0.9886517447379142], [1436249664.0, 15260000.0, -0.986685944207868], [1436251392.0, 15280000.0, -0.9845643345292054], [1436253120.0, 15300000.0, -0.9822872507286886], [1436254848.0, 15320000.0, -0.979855052384247], [1436256576.0, 15340000.0, -0.9772681235681934], [1436258304.0, 15360000.0, -0.9745268727865772], [1436260032.0, 15380000.0, -0.9716317329146742], [1436261760.0, 15400000.0, -0.9685831611286311], [1436263488.0, 15420000.0, -0.9653816388332741], [1436265216.0, 15440000.0, -0.9620276715860858], [1436266944.0, 15460000.0, -0.9585217890173761], [1436268672.0, 15480000.0, -0.9548645447466428], [1436270400.0, 15500000.0, -0.9510565162951536], [1436272128.0, 15520000.0, -0.9470983049947441], [1436273856.0, 15540000.0, -0.9429905358928645], [1436275584.0, 15560000.0, -0.9387338576538744], [1436277312.0, 15580000.0, -0.934328942456612], [1436279040.0, 15600000.0, -0.9297764858882517], [1436280768.0, 15620000.0, -0.9250772068344579], [1436282496.0, 15640000.0, -0.9202318473658705], [1436284224.0, 15660000.0, -0.9152411726209174], [1436285952.0, 15680000.0, -0.9101059706849958], [1436287680.0, 15700000.0, -0.9048270524660192], [1436289408.0, 15720000.0, -0.8994052515663711], [1436291136.0, 15740000.0, -0.8938414241512633], [1436292864.0, 15760000.0, -0.8881364488135445], [1436294592.0, 15780000.0, -0.8822912264349536], [1436296320.0, 15800000.0, -0.8763066800438635], [1436298048.0, 15820000.0, -0.8701837546695259], [1436299776.0, 15840000.0, -0.863923417192835], [1436301504.0, 15860000.0, -0.8575266561936524], [1436303232.0, 15880000.0, -0.8509944817946915], [1436304960.0, 15900000.0, -0.8443279255020151], [1436306688.0, 15920000.0, -0.8375280400421412], [1436308416.0, 15940000.0, -0.8305958991958126], [1436310144.0, 15960000.0, -0.8235325976284278], [1436311872.0, 15980000.0, -0.8163392507171837], [1436313600.0, 16000000.0, -0.8090169943749477], [1436315328.0, 16020000.0, -0.8015669848708762], [1436317056.0, 16040000.0, -0.7939903986478355], [1436318784.0, 16060000.0, -0.7862884321366184], [1436320512.0, 16080000.0, -0.7784623015670235], [1436322240.0, 16100000.0, -0.7705132427757886], [1436323968.0, 16120000.0, -0.7624425110114477], [1436325696.0, 16140000.0, -0.7542513807361042], [1436327424.0, 16160000.0, -0.7459411454241819], [1436329152.0, 16180000.0, -0.7375131173581742], [1436330880.0, 16200000.0, -0.7289686274214111], [1436332608.0, 16220000.0, -0.7203090248879069], [1436334336.0, 16240000.0, -0.7115356772092847], [1436336064.0, 16260000.0, -0.7026499697988504], [1436337792.0, 16280000.0, -0.6936533058128055], [1436339520.0, 16300000.0, -0.6845471059286897], [1436341248.0, 16320000.0, -0.6753328081210248], [1436342976.0, 16340000.0, -0.6660118674342526], [1436344704.0, 16360000.0, -0.6565857557529566], [1436346432.0, 16380000.0, -0.6470559615694451], [1436348160.0, 16400000.0, -0.6374239897486911], [1436349888.0, 16420000.0, -0.6276913612907011], [1436351616.0, 16440000.0, -0.6178596130903357], [1436353344.0, 16460000.0, -0.6079302976946059], [1436355072.0, 16480000.0, -0.59790498305752], [1436356800.0, 16500000.0, -0.5877852522924735], [1436358528.0, 16520000.0, -0.5775727034222685], [1436360256.0, 16540000.0, -0.5672689491267566], [1436361984.0, 16560000.0, -0.5568756164881888], [1436363712.0, 16580000.0, -0.5463943467342706], [1436365440.0, 16600000.0, -0.5358267949789972], [1436367168.0, 16620000.0, -0.525174629961297], [1436368896.0, 16640000.0, -0.514439533781507], [1436370624.0, 16660000.0, -0.503623201635762], [1436372352.0, 16680000.0, -0.49272734154829184], [1436374080.0, 16700000.0, -0.48175367410171627], [1436375808.0, 16720000.0, -0.4707039321653327], [1436377536.0, 16740000.0, -0.45957986062148865], [1436379264.0, 16760000.0, -0.4483832160900338], [1436380992.0, 16780000.0, -0.43711576665093355], [1436382720.0, 16800000.0, -0.425779291565074], [1436384448.0, 16820000.0, -0.4143755809932846], [1436386176.0, 16840000.0, -0.4029064357136638], [1436387904.0, 16860000.0, -0.39137366683720265], [1436389632.0, 16880000.0, -0.37977909552180206], [1436391360.0, 16900000.0, -0.36812455268467803], [1436393088.0, 16920000.0, -0.3564118787132515], [1436394816.0, 16940000.0, -0.3446429231745169], [1436396544.0, 16960000.0, -0.33281954452298723], [1436398272.0, 16980000.0, -0.3209436098072108], [1436400000.0, 17000000.0, -0.30901699437494784], [1436401728.0, 17020000.0, -0.29704158157703603], [1436403456.0, 17040000.0, -0.28501926246997633], [1436405184.0, 17060000.0, -0.27295193551732616], [1436406912.0, 17080000.0, -0.26084150628989694], [1436408640.0, 17100000.0, -0.24868988716485554], [1436410368.0, 17120000.0, -0.23649899702372448], [1436412096.0, 17140000.0, -0.22427076094938173], [1436413824.0, 17160000.0, -0.21200710992205596], [1436415552.0, 17180000.0, -0.19970998051440736], [1436417280.0, 17200000.0, -0.18738131458572574], [1436419008.0, 17220000.0, -0.17502305897527617], [1436420736.0, 17240000.0, -0.1626371651948845], [1436422464.0, 17260000.0, -0.15022558912075698], [1436424192.0, 17280000.0, -0.13779029068463877], [1436425920.0, 17300000.0, -0.12533323356430395], [1436427648.0, 17320000.0, -0.11285638487348218], [1436429376.0, 17340000.0, -0.10036171485121616], [1436431104.0, 17360000.0, -0.08785119655074346], [1436432832.0, 17380000.0, -0.07532680552793379], [1436434560.0, 17400000.0, -0.06279051952931344], [1436436288.0, 17420000.0, -0.05024431817977041], [1436438016.0, 17440000.0, -0.037690182669934395], [1436439744.0, 17460000.0, -0.025130095443338118], [1436441472.0, 17480000.0, -0.012566039883352255], [1436443200.0, 17500000.0, -4.286263797015736e-16], [1436444928.0, 17520000.0, 0.012566039883351397], [1436446656.0, 17540000.0, 0.02513009544333726], [1436448384.0, 17560000.0, 0.03769018266993354], [1436450112.0, 17580000.0, 0.05024431817976955], [1436451840.0, 17600000.0, 0.0627905195293126], [1436453568.0, 17620000.0, 0.07532680552793293], [1436455296.0, 17640000.0, 0.08785119655074261], [1436457024.0, 17660000.0, 0.10036171485121531], [1436458752.0, 17680000.0, 0.11285638487348133], [1436460480.0, 17700000.0, 0.12533323356430312], [1436462208.0, 17720000.0, 0.1377902906846379], [1436463936.0, 17740000.0, 0.15022558912075612], [1436465664.0, 17760000.0, 0.16263716519488366], [1436467392.0, 17780000.0, 0.17502305897527534], [1436469120.0, 17800000.0, 0.1873813145857249], [1436470848.0, 17820000.0, 0.19970998051440653], [1436472576.0, 17840000.0, 0.21200710992205513], [1436474304.0, 17860000.0, 0.2242707609493809], [1436476032.0, 17880000.0, 0.23649899702372365], [1436477760.0, 17900000.0, 0.2486898871648547], [1436479488.0, 17920000.0, 0.2608415062898961], [1436481216.0, 17940000.0, 0.2729519355173254], [1436482944.0, 17960000.0, 0.2850192624699755], [1436484672.0, 17980000.0, 0.29704158157703525], [1436486400.0, 18000000.0, 0.309016994374947], [1436488128.0, 18020000.0, 0.32094360980721004], [1436489856.0, 18040000.0, 0.3328195445229864], [1436491584.0, 18060000.0, 0.3446429231745161], [1436493312.0, 18080000.0, 0.3564118787132507], [1436495040.0, 18100000.0, 0.3681245526846772], [1436496768.0, 18120000.0, 0.3797790955218013], [1436498496.0, 18140000.0, 0.3913736668372019], [1436500224.0, 18160000.0, 0.402906435713663], [1436501952.0, 18180000.0, 0.4143755809932838], [1436503680.0, 18200000.0, 0.4257792915650732], [1436505408.0, 18220000.0, 0.43711576665093277], [1436507136.0, 18240000.0, 0.448383216090033], [1436508864.0, 18260000.0, 0.4595798606214879], [1436510592.0, 18280000.0, 0.4707039321653319], [1436512320.0, 18300000.0, 0.4817536741017155], [1436514048.0, 18320000.0, 0.4927273415482911], [1436515776.0, 18340000.0, 0.5036232016357612], [1436517504.0, 18360000.0, 0.5144395337815062], [1436519232.0, 18380000.0, 0.5251746299612963], [1436520960.0, 18400000.0, 0.5358267949789965], [1436522688.0, 18420000.0, 0.5463943467342698], [1436524416.0, 18440000.0, 0.5568756164881881], [1436526144.0, 18460000.0, 0.567268949126756], [1436527872.0, 18480000.0, 0.5775727034222679], [1436529600.0, 18500000.0, 0.5877852522924728], [1436531328.0, 18520000.0, 0.5979049830575193], [1436533056.0, 18540000.0, 0.6079302976946052], [1436534784.0, 18560000.0, 0.617859613090335], [1436536512.0, 18580000.0, 0.6276913612907005], [1436538240.0, 18600000.0, 0.6374239897486904], [1436539968.0, 18620000.0, 0.6470559615694444], [1436541696.0, 18640000.0, 0.656585755752956], [1436543424.0, 18660000.0, 0.6660118674342519], [1436545152.0, 18680000.0, 0.6753328081210241], [1436546880.0, 18700000.0, 0.6845471059286892], [1436548608.0, 18720000.0, 0.6936533058128048], [1436550336.0, 18740000.0, 0.7026499697988497], [1436552064.0, 18760000.0, 0.7115356772092841], [1436553792.0, 18780000.0, 0.7203090248879064], [1436555520.0, 18800000.0, 0.7289686274214104], [1436557248.0, 18820000.0, 0.7375131173581735], [1436558976.0, 18840000.0, 0.7459411454241812], [1436560704.0, 18860000.0, 0.7542513807361036], [1436562432.0, 18880000.0, 0.7624425110114471], [1436564160.0, 18900000.0, 0.770513242775788], [1436565888.0, 18920000.0, 0.7784623015670229], [1436567616.0, 18940000.0, 0.7862884321366178], [1436569344.0, 18960000.0, 0.7939903986478349], [1436571072.0, 18980000.0, 0.8015669848708757], [1436572800.0, 19000000.0, 0.8090169943749471], [1436574528.0, 19020000.0, 0.8163392507171833], [1436576256.0, 19040000.0, 0.8235325976284272], [1436577984.0, 19060000.0, 0.8305958991958121], [1436579712.0, 19080000.0, 0.8375280400421408], [1436581440.0, 19100000.0, 0.8443279255020146], [1436583168.0, 19120000.0, 0.8509944817946911], [1436584896.0, 19140000.0, 0.857526656193652], [1436586624.0, 19160000.0, 0.8639234171928346], [1436588352.0, 19180000.0, 0.8701837546695255], [1436590080.0, 19200000.0, 0.876306680043863], [1436591808.0, 19220000.0, 0.8822912264349532], [1436593536.0, 19240000.0, 0.888136448813544], [1436595264.0, 19260000.0, 0.893841424151263], [1436596992.0, 19280000.0, 0.8994052515663707], [1436598720.0, 19300000.0, 0.9048270524660189], [1436600448.0, 19320000.0, 0.9101059706849954], [1436602176.0, 19340000.0, 0.915241172620917], [1436603904.0, 19360000.0, 0.9202318473658702], [1436605632.0, 19380000.0, 0.9250772068344576], [1436607360.0, 19400000.0, 0.9297764858882513], [1436609088.0, 19420000.0, 0.9343289424566117], [1436610816.0, 19440000.0, 0.9387338576538741], [1436612544.0, 19460000.0, 0.9429905358928642], [1436614272.0, 19480000.0, 0.9470983049947438], [1436616000.0, 19500000.0, 0.9510565162951534], [1436617728.0, 19520000.0, 0.9548645447466426], [1436619456.0, 19540000.0, 0.9585217890173758], [1436621184.0, 19560000.0, 0.9620276715860856], [1436622912.0, 19580000.0, 0.9653816388332739], [1436624640.0, 19600000.0, 0.968583161128631], [1436626368.0, 19620000.0, 0.971631732914674], [1436628096.0, 19640000.0, 0.974526872786577], [1436629824.0, 19660000.0, 0.9772681235681931], [1436631552.0, 19680000.0, 0.9798550523842467], [1436633280.0, 19700000.0, 0.9822872507286885], [1436635008.0, 19720000.0, 0.9845643345292053], [1436636736.0, 19740000.0, 0.9866859442078679], [1436638464.0, 19760000.0, 0.9886517447379141], [1436640192.0, 19780000.0, 0.9904614256966511], [1436641920.0, 19800000.0, 0.9921147013144779], [1436643648.0, 19820000.0, 0.9936113105200084], [1436645376.0, 19840000.0, 0.9949510169813001], [1436647104.0, 19860000.0, 0.9961336091431724], [1436648832.0, 19880000.0, 0.9971589002606138], [1436650560.0, 19900000.0, 0.9980267284282716], [1436652288.0, 19920000.0, 0.9987369566060175], [1436654016.0, 19940000.0, 0.9992894726405892], [1436655744.0, 19960000.0, 0.9996841892832999], [1436657472.0, 19980000.0, 0.9999210442038161], [1436659200.0, 20000000.0, 1.0], [1436660928.0, 20020000.0, 0.9999210442038161], [1436662656.0, 20040000.0, 0.9996841892832999], [1436664384.0, 20060000.0, 0.9992894726405893], [1436666112.0, 20080000.0, 0.9987369566060175], [1436667840.0, 20100000.0, 0.9980267284282718], [1436669568.0, 20120000.0, 0.9971589002606139], [1436671296.0, 20140000.0, 0.9961336091431727], [1436673024.0, 20160000.0, 0.9949510169813002], [1436674752.0, 20180000.0, 0.9936113105200086], [1436676480.0, 20200000.0, 0.992114701314478], [1436678208.0, 20220000.0, 0.9904614256966515], [1436679936.0, 20240000.0, 0.9886517447379142], [1436681664.0, 20260000.0, 0.9866859442078684], [1436683392.0, 20280000.0, 0.9845643345292056], [1436685120.0, 20300000.0, 0.9822872507286889], [1436686848.0, 20320000.0, 0.979855052384247], [1436688576.0, 20340000.0, 0.9772681235681937], [1436690304.0, 20360000.0, 0.9745268727865772], [1436692032.0, 20380000.0, 0.9716317329146742], [1436693760.0, 20400000.0, 0.9685831611286312], [1436695488.0, 20420000.0, 0.9653816388332741], [1436697216.0, 20440000.0, 0.9620276715860858], [1436698944.0, 20460000.0, 0.9585217890173766], [1436700672.0, 20480000.0, 0.9548645447466428], [1436702400.0, 20500000.0, 0.9510565162951543], [1436704128.0, 20520000.0, 0.9470983049947441], [1436705856.0, 20540000.0, 0.9429905358928652], [1436707584.0, 20560000.0, 0.9387338576538744], [1436709312.0, 20580000.0, 0.9343289424566127], [1436711040.0, 20600000.0, 0.9297764858882517], [1436712768.0, 20620000.0, 0.9250772068344587], [1436714496.0, 20640000.0, 0.9202318473658706], [1436716224.0, 20660000.0, 0.9152411726209181], [1436717952.0, 20680000.0, 0.9101059706849959], [1436719680.0, 20700000.0, 0.90482705246602], [1436721408.0, 20720000.0, 0.8994052515663712], [1436723136.0, 20740000.0, 0.8938414241512642], [1436724864.0, 20760000.0, 0.8881364488135445], [1436726592.0, 20780000.0, 0.8822912264349536], [1436728320.0, 20800000.0, 0.8763066800438635], [1436730048.0, 20820000.0, 0.8701837546695259], [1436731776.0, 20840000.0, 0.8639234171928352], [1436733504.0, 20860000.0, 0.8575266561936533], [1436735232.0, 20880000.0, 0.8509944817946915], [1436736960.0, 20900000.0, 0.8443279255020161], [1436738688.0, 20920000.0, 0.8375280400421412], [1436740416.0, 20940000.0, 0.8305958991958136], [1436742144.0, 20960000.0, 0.8235325976284278], [1436743872.0, 20980000.0, 0.8163392507171848], [1436745600.0, 21000000.0, 0.8090169943749477], [1436747328.0, 21020000.0, 0.8015669848708773], [1436749056.0, 21040000.0, 0.7939903986478355], [1436750784.0, 21060000.0, 0.7862884321366196], [1436752512.0, 21080000.0, 0.7784623015670235], [1436754240.0, 21100000.0, 0.7705132427757898], [1436755968.0, 21120000.0, 0.7624425110114478], [1436757696.0, 21140000.0, 0.7542513807361042], [1436759424.0, 21160000.0, 0.7459411454241819], [1436761152.0, 21180000.0, 0.7375131173581742], [1436762880.0, 21200000.0, 0.7289686274214111], [1436764608.0, 21220000.0, 0.7203090248879083], [1436766336.0, 21240000.0, 0.7115356772092848], [1436768064.0, 21260000.0, 0.7026499697988505], [1436769792.0, 21280000.0, 0.6936533058128043], [1436771520.0, 21300000.0, 0.6845471059286898], [1436773248.0, 21320000.0, 0.6753328081210249], [1436774976.0, 21340000.0, 0.6660118674342527], [1436776704.0, 21360000.0, 0.6565857557529567], [1436778432.0, 21380000.0, 0.6470559615694452], [1436780160.0, 21400000.0, 0.6374239897486899], [1436781888.0, 21420000.0, 0.6276913612907012], [1436783616.0, 21440000.0, 0.6178596130903343], [1436785344.0, 21460000.0, 0.6079302976946059], [1436787072.0, 21480000.0, 0.5979049830575187], [1436788800.0, 21500000.0, 0.5877852522924736], [1436790528.0, 21520000.0, 0.5775727034222672], [1436792256.0, 21540000.0, 0.5672689491267567], [1436793984.0, 21560000.0, 0.5568756164881874], [1436795712.0, 21580000.0, 0.5463943467342707], [1436797440.0, 21600000.0, 0.5358267949789959], [1436799168.0, 21620000.0, 0.5251746299612972], [1436800896.0, 21640000.0, 0.5144395337815055], [1436802624.0, 21660000.0, 0.5036232016357621], [1436804352.0, 21680000.0, 0.49272734154829195], [1436806080.0, 21700000.0, 0.4817536741017164], [1436807808.0, 21720000.0, 0.4707039321653328], [1436809536.0, 21740000.0, 0.45957986062148876], [1436811264.0, 21760000.0, 0.4483832160900323], [1436812992.0, 21780000.0, 0.43711576665093366], [1436814720.0, 21800000.0, 0.4257792915650725], [1436816448.0, 21820000.0, 0.4143755809932847], [1436818176.0, 21840000.0, 0.4029064357136623], [1436819904.0, 21860000.0, 0.39137366683720276], [1436821632.0, 21880000.0, 0.37977909552180056], [1436823360.0, 21900000.0, 0.36812455268467814], [1436825088.0, 21920000.0, 0.3564118787132499], [1436826816.0, 21940000.0, 0.344642923174517], [1436828544.0, 21960000.0, 0.3328195445229857], [1436830272.0, 21980000.0, 0.32094360980721093], [1436832000.0, 22000000.0, 0.30901699437494623], [1436833728.0, 22020000.0, 0.2970415815770362], [1436835456.0, 22040000.0, 0.2850192624699747], [1436837184.0, 22060000.0, 0.2729519355173263], [1436838912.0, 22080000.0, 0.26084150628989705], [1436840640.0, 22100000.0, 0.24868988716485566], [1436842368.0, 22120000.0, 0.2364989970237246], [1436844096.0, 22140000.0, 0.22427076094938186], [1436845824.0, 22160000.0, 0.21200710992205435], [1436847552.0, 22180000.0, 0.19970998051440747], [1436849280.0, 22200000.0, 0.18738131458572413], [1436851008.0, 22220000.0, 0.1750230589752763], [1436852736.0, 22240000.0, 0.1626371651948829], [1436854464.0, 22260000.0, 0.1502255891207571], [1436856192.0, 22280000.0, 0.13779029068463713], [1436857920.0, 22300000.0, 0.1253332335643041], [1436859648.0, 22320000.0, 0.11285638487348054], [1436861376.0, 22340000.0, 0.10036171485121628], [1436863104.0, 22360000.0, 0.0878511965507418], [1436864832.0, 22380000.0, 0.0753268055279339], [1436866560.0, 22400000.0, 0.06279051952931179], [1436868288.0, 22420000.0, 0.050244318179770535], [1436870016.0, 22440000.0, 0.03769018266993452], [1436871744.0, 22460000.0, 0.025130095443338243], [1436873472.0, 22480000.0, 0.012566039883352377], [1436875200.0, 22500000.0, 5.51091059616309e-16], [1436876928.0, 22520000.0, -0.012566039883351275], [1436878656.0, 22540000.0, -0.02513009544333714], [1436880384.0, 22560000.0, -0.03769018266993342], [1436882112.0, 22580000.0, -0.05024431817976943], [1436883840.0, 22600000.0, -0.0627905195293107], [1436885568.0, 22620000.0, -0.0753268055279328], [1436887296.0, 22640000.0, -0.08785119655074071], [1436889024.0, 22660000.0, -0.10036171485121519], [1436890752.0, 22680000.0, -0.11285638487347945], [1436892480.0, 22700000.0, -0.12533323356430298], [1436894208.0, 22720000.0, -0.13779029068463602], [1436895936.0, 22740000.0, -0.150225589120756], [1436897664.0, 22760000.0, -0.16263716519488178], [1436899392.0, 22780000.0, -0.17502305897527523], [1436901120.0, 22800000.0, -0.18738131458572305], [1436902848.0, 22820000.0, -0.1997099805144064], [1436904576.0, 22840000.0, -0.21200710992205327], [1436906304.0, 22860000.0, -0.22427076094938078], [1436908032.0, 22880000.0, -0.2364989970237235], [1436909760.0, 22900000.0, -0.2486898871648546], [1436911488.0, 22920000.0, -0.260841506289896], [1436913216.0, 22940000.0, -0.2729519355173252], [1436914944.0, 22960000.0, -0.28501926246997367], [1436916672.0, 22980000.0, -0.29704158157703514], [1436918400.0, 23000000.0, -0.3090169943749452], [1436920128.0, 23020000.0, -0.3209436098072099], [1436921856.0, 23040000.0, -0.3328195445229846], [1436923584.0, 23060000.0, -0.344642923174516], [1436925312.0, 23080000.0, -0.3564118787132489], [1436927040.0, 23100000.0, -0.3681245526846771], [1436928768.0, 23120000.0, -0.3797790955217995], [1436930496.0, 23140000.0, -0.39137366683720176], [1436932224.0, 23160000.0, -0.4029064357136613], [1436933952.0, 23180000.0, -0.4143755809932837], [1436935680.0, 23200000.0, -0.4257792915650715], [1436937408.0, 23220000.0, -0.43711576665093266], [1436939136.0, 23240000.0, -0.4483832160900313], [1436940864.0, 23260000.0, -0.4595798606214878], [1436942592.0, 23280000.0, -0.4707039321653318], [1436944320.0, 23300000.0, -0.4817536741017154], [1436946048.0, 23320000.0, -0.492727341548291], [1436947776.0, 23340000.0, -0.5036232016357611], [1436949504.0, 23360000.0, -0.5144395337815045], [1436951232.0, 23380000.0, -0.5251746299612962], [1436952960.0, 23400000.0, -0.5358267949789949], [1436954688.0, 23420000.0, -0.5463943467342698], [1436956416.0, 23440000.0, -0.5568756164881865], [1436958144.0, 23460000.0, -0.5672689491267559], [1436959872.0, 23480000.0, -0.5775727034222663], [1436961600.0, 23500000.0, -0.5877852522924727], [1436963328.0, 23520000.0, -0.5979049830575178], [1436965056.0, 23540000.0, -0.607930297694605], [1436966784.0, 23560000.0, -0.6178596130903334], [1436968512.0, 23580000.0, -0.6276913612907004], [1436970240.0, 23600000.0, -0.637423989748689], [1436971968.0, 23620000.0, -0.6470559615694443], [1436973696.0, 23640000.0, -0.6565857557529559], [1436975424.0, 23660000.0, -0.6660118674342518], [1436977152.0, 23680000.0, -0.675332808121024], [1436978880.0, 23700000.0, -0.6845471059286891], [1436980608.0, 23720000.0, -0.6936533058128035], [1436982336.0, 23740000.0, -0.7026499697988497], [1436984064.0, 23760000.0, -0.711535677209284], [1436985792.0, 23780000.0, -0.7203090248879075], [1436987520.0, 23800000.0, -0.7289686274214104], [1436989248.0, 23820000.0, -0.7375131173581735], [1436990976.0, 23840000.0, -0.7459411454241812], [1436992704.0, 23860000.0, -0.7542513807361035], [1436994432.0, 23880000.0, -0.7624425110114471], [1436996160.0, 23900000.0, -0.770513242775789], [1436997888.0, 23920000.0, -0.7784623015670228], [1436999616.0, 23940000.0, -0.7862884321366189], [1437001344.0, 23960000.0, -0.7939903986478348], [1437003072.0, 23980000.0, -0.8015669848708766], [1437004800.0, 24000000.0, -0.8090169943749471], [1437006528.0, 24020000.0, -0.8163392507171842], [1437008256.0, 24040000.0, -0.8235325976284272], [1437009984.0, 24060000.0, -0.830595899195813], [1437011712.0, 24080000.0, -0.8375280400421407], [1437013440.0, 24100000.0, -0.8443279255020155], [1437015168.0, 24120000.0, -0.850994481794691], [1437016896.0, 24140000.0, -0.8575266561936528], [1437018624.0, 24160000.0, -0.8639234171928346], [1437020352.0, 24180000.0, -0.8701837546695254], [1437022080.0, 24200000.0, -0.8763066800438629], [1437023808.0, 24220000.0, -0.8822912264349532], [1437025536.0, 24240000.0, -0.888136448813544], [1437027264.0, 24260000.0, -0.8938414241512638], [1437028992.0, 24280000.0, -0.8994052515663706], [1437030720.0, 24300000.0, -0.9048270524660196], [1437032448.0, 24320000.0, -0.9101059706849954], [1437034176.0, 24340000.0, -0.9152411726209176], [1437035904.0, 24360000.0, -0.9202318473658702], [1437037632.0, 24380000.0, -0.9250772068344583], [1437039360.0, 24400000.0, -0.9297764858882513], [1437041088.0, 24420000.0, -0.9343289424566124], [1437042816.0, 24440000.0, -0.9387338576538741], [1437044544.0, 24460000.0, -0.9429905358928647], [1437046272.0, 24480000.0, -0.9470983049947438], [1437048000.0, 24500000.0, -0.951056516295154], [1437049728.0, 24520000.0, -0.9548645447466425], [1437051456.0, 24540000.0, -0.9585217890173763], [1437053184.0, 24560000.0, -0.9620276715860856], [1437054912.0, 24580000.0, -0.9653816388332739], [1437056640.0, 24600000.0, -0.9685831611286309], [1437058368.0, 24620000.0, -0.971631732914674], [1437060096.0, 24640000.0, -0.974526872786577], [1437061824.0, 24660000.0, -0.9772681235681935], [1437063552.0, 24680000.0, -0.9798550523842467], [1437065280.0, 24700000.0, -0.9822872507286887], [1437067008.0, 24720000.0, -0.9845643345292053], [1437068736.0, 24740000.0, -0.9866859442078681], [1437070464.0, 24760000.0, -0.988651744737914], [1437072192.0, 24780000.0, -0.9904614256966513], [1437073920.0, 24800000.0, -0.9921147013144779], [1437075648.0, 24820000.0, -0.9936113105200085], [1437077376.0, 24840000.0, -0.9949510169813001], [1437079104.0, 24860000.0, -0.9961336091431726], [1437080832.0, 24880000.0, -0.9971589002606138], [1437082560.0, 24900000.0, -0.9980267284282717], [1437084288.0, 24920000.0, -0.9987369566060175], [1437086016.0, 24940000.0, -0.9992894726405892], [1437087744.0, 24960000.0, -0.9996841892832999], [1437089472.0, 24980000.0, -0.9999210442038161], [1437091200.0, 25000000.0, -1.0], [1437092928.0, 25020000.0, -0.9999210442038161], [1437094656.0, 25040000.0, -0.9996841892832999], [1437096384.0, 25060000.0, -0.9992894726405893], [1437098112.0, 25080000.0, -0.9987369566060175], [1437099840.0, 25100000.0, -0.9980267284282718], [1437101568.0, 25120000.0, -0.9971589002606139], [1437103296.0, 25140000.0, -0.9961336091431727], [1437105024.0, 25160000.0, -0.9949510169813002], [1437106752.0, 25180000.0, -0.9936113105200086], [1437108480.0, 25200000.0, -0.992114701314478], [1437110208.0, 25220000.0, -0.9904614256966515], [1437111936.0, 25240000.0, -0.9886517447379142], [1437113664.0, 25260000.0, -0.9866859442078684], [1437115392.0, 25280000.0, -0.9845643345292056], [1437117120.0, 25300000.0, -0.9822872507286889], [1437118848.0, 25320000.0, -0.979855052384247], [1437120576.0, 25340000.0, -0.9772681235681938], [1437122304.0, 25360000.0, -0.9745268727865772], [1437124032.0, 25380000.0, -0.9716317329146742], [1437125760.0, 25400000.0, -0.9685831611286312], [1437127488.0, 25420000.0, -0.9653816388332741], [1437129216.0, 25440000.0, -0.9620276715860859], [1437130944.0, 25460000.0, -0.9585217890173766], [1437132672.0, 25480000.0, -0.9548645447466434], [1437134400.0, 25500000.0, -0.9510565162951543], [1437136128.0, 25520000.0, -0.9470983049947441], [1437137856.0, 25540000.0, -0.9429905358928646], [1437139584.0, 25560000.0, -0.9387338576538745], [1437141312.0, 25580000.0, -0.9343289424566128], [1437143040.0, 25600000.0, -0.9297764858882511], [1437144768.0, 25620000.0, -0.925077206834458], [1437146496.0, 25640000.0, -0.9202318473658706], [1437148224.0, 25660000.0, -0.9152411726209182], [1437149952.0, 25680000.0, -0.9101059706849952], [1437151680.0, 25700000.0, -0.9048270524660209], [1437153408.0, 25720000.0, -0.8994052515663712], [1437155136.0, 25740000.0, -0.8938414241512643], [1437156864.0, 25760000.0, -0.8881364488135454], [1437158592.0, 25780000.0, -0.8822912264349545], [1437160320.0, 25800000.0, -0.8763066800438636], [1437162048.0, 25820000.0, -0.870183754669526], [1437163776.0, 25840000.0, -0.863923417192836], [1437165504.0, 25860000.0, -0.8575266561936534], [1437167232.0, 25880000.0, -0.8509944817946916], [1437168960.0, 25900000.0, -0.8443279255020152], [1437170688.0, 25920000.0, -0.8375280400421423], [1437172416.0, 25940000.0, -0.8305958991958137], [1437174144.0, 25960000.0, -0.8235325976284269], [1437175872.0, 25980000.0, -0.8163392507171838], [1437177600.0, 26000000.0, -0.8090169943749478], [1437179328.0, 26020000.0, -0.8015669848708774], [1437181056.0, 26040000.0, -0.7939903986478345], [1437182784.0, 26060000.0, -0.7862884321366207], [1437184512.0, 26080000.0, -0.7784623015670236], [1437186240.0, 26100000.0, -0.7705132427757899], [1437187968.0, 26120000.0, -0.762442511011449], [1437189696.0, 26140000.0, -0.7542513807361055], [1437191424.0, 26160000.0, -0.745941145424182], [1437193152.0, 26180000.0, -0.7375131173581743], [1437194880.0, 26200000.0, -0.7289686274214124], [1437196608.0, 26220000.0, -0.7203090248879084], [1437198336.0, 26240000.0, -0.7115356772092849], [1437200064.0, 26260000.0, -0.7026499697988493], [1437201792.0, 26280000.0, -0.6936533058128056], [1437203520.0, 26300000.0, -0.68454710592869], [1437205248.0, 26320000.0, -0.6753328081210237], [1437206976.0, 26340000.0, -0.6660118674342514], [1437208704.0, 26360000.0, -0.6565857557529569], [1437210432.0, 26380000.0, -0.6470559615694453], [1437212160.0, 26400000.0, -0.6374239897486885], [1437213888.0, 26420000.0, -0.6276913612907027], [1437215616.0, 26440000.0, -0.6178596130903344], [1437217344.0, 26460000.0, -0.607930297694606], [1437219072.0, 26480000.0, -0.5979049830575174], [1437220800.0, 26500000.0, -0.5877852522924751], [1437222528.0, 26520000.0, -0.5775727034222673], [1437224256.0, 26540000.0, -0.5672689491267568], [1437225984.0, 26560000.0, -0.5568756164881891], [1437227712.0, 26580000.0, -0.5463943467342708], [1437229440.0, 26600000.0, -0.535826794978996], [1437231168.0, 26620000.0, -0.5251746299612957], [1437232896.0, 26640000.0, -0.5144395337815071], [1437234624.0, 26660000.0, -0.5036232016357622], [1437236352.0, 26680000.0, -0.4927273415482905], [1437238080.0, 26700000.0, -0.48175367410171493], [1437239808.0, 26720000.0, -0.4707039321653329], [1437241536.0, 26740000.0, -0.45957986062148887], [1437243264.0, 26760000.0, -0.4483832160900308], [1437244992.0, 26780000.0, -0.4371157666509353], [1437246720.0, 26800000.0, -0.4257792915650726], [1437248448.0, 26820000.0, -0.4143755809932848], [1437250176.0, 26840000.0, -0.4029064357136608], [1437251904.0, 26860000.0, -0.39137366683720454], [1437253632.0, 26880000.0, -0.37977909552180067], [1437255360.0, 26900000.0, -0.36812455268467825], [1437257088.0, 26920000.0, -0.3564118787132517], [1437258816.0, 26940000.0, -0.34464292317451883], [1437260544.0, 26960000.0, -0.3328195445229858], [1437262272.0, 26980000.0, -0.3209436098072094], [1437264000.0, 27000000.0, -0.30901699437494806], [1437265728.0, 27020000.0, -0.2970415815770363], [1437267456.0, 27040000.0, -0.28501926246997483], [1437269184.0, 27060000.0, -0.2729519355173247], [1437270912.0, 27080000.0, -0.26084150628989716], [1437272640.0, 27100000.0, -0.24868988716485577], [1437274368.0, 27120000.0, -0.23649899702372298], [1437276096.0, 27140000.0, -0.2242707609493837], [1437277824.0, 27160000.0, -0.21200710992205446], [1437279552.0, 27180000.0, -0.1997099805144076], [1437281280.0, 27200000.0, -0.1873813145857225], [1437283008.0, 27220000.0, -0.17502305897527817], [1437284736.0, 27240000.0, -0.162637165194883], [1437286464.0, 27260000.0, -0.15022558912075723], [1437288192.0, 27280000.0, -0.137790290684639], [1437289920.0, 27300000.0, -0.12533323356430598], [1437291648.0, 27320000.0, -0.11285638487348065], [1437293376.0, 27340000.0, -0.10036171485121463], [1437295104.0, 27360000.0, -0.08785119655074371], [1437296832.0, 27380000.0, -0.07532680552793403], [1437298560.0, 27400000.0, -0.06279051952931192], [1437300288.0, 27420000.0, -0.050244318179768876], [1437302016.0, 27440000.0, -0.037690182669934645], [1437303744.0, 27460000.0, -0.025130095443338364], [1437305472.0, 27480000.0, -0.012566039883350723], [1437307200.0, 27500000.0, -2.4499125789312946e-15], [1437308928.0, 27520000.0, 0.012566039883349376], [1437310656.0, 27540000.0, 0.025130095443337018], [1437312384.0, 27560000.0, 0.0376901826699333], [1437314112.0, 27580000.0, 0.05024431817976754], [1437315840.0, 27600000.0, 0.06279051952931057], [1437317568.0, 27620000.0, 0.07532680552793268], [1437319296.0, 27640000.0, 0.08785119655074236], [1437321024.0, 27660000.0, 0.1003617148512133], [1437322752.0, 27680000.0, 0.11285638487347932], [1437324480.0, 27700000.0, 0.12533323356430462], [1437326208.0, 27720000.0, 0.13779029068463766], [1437327936.0, 27740000.0, 0.1502255891207559], [1437329664.0, 27760000.0, 0.16263716519488167], [1437331392.0, 27780000.0, 0.17502305897527684], [1437333120.0, 27800000.0, 0.18738131458572116], [1437334848.0, 27820000.0, 0.19970998051440628], [1437336576.0, 27840000.0, 0.21200710992205313], [1437338304.0, 27860000.0, 0.2242707609493824], [1437340032.0, 27880000.0, 0.23649899702372168], [1437341760.0, 27900000.0, 0.24868988716485446], [1437343488.0, 27920000.0, 0.2608415062898959], [1437345216.0, 27940000.0, 0.2729519355173234], [1437346944.0, 27960000.0, 0.28501926246997356], [1437348672.0, 27980000.0, 0.29704158157703503], [1437350400.0, 28000000.0, 0.3090169943749468], [1437352128.0, 28020000.0, 0.3209436098072081], [1437353856.0, 28040000.0, 0.3328195445229845], [1437355584.0, 28060000.0, 0.34464292317451756], [1437357312.0, 28080000.0, 0.3564118787132505], [1437359040.0, 28100000.0, 0.368124552684677], [1437360768.0, 28120000.0, 0.3797790955217994], [1437362496.0, 28140000.0, 0.39137366683720326], [1437364224.0, 28160000.0, 0.4029064357136596], [1437365952.0, 28180000.0, 0.4143755809932836], [1437367680.0, 28200000.0, 0.4257792915650714], [1437369408.0, 28220000.0, 0.43711576665093416], [1437371136.0, 28240000.0, 0.4483832160900296], [1437372864.0, 28260000.0, 0.4595798606214877], [1437374592.0, 28280000.0, 0.4707039321653317], [1437376320.0, 28300000.0, 0.4817536741017137], [1437378048.0, 28320000.0, 0.49272734154828934], [1437379776.0, 28340000.0, 0.503623201635761], [1437381504.0, 28360000.0, 0.514439533781506], [1437383232.0, 28380000.0, 0.5251746299612946], [1437384960.0, 28400000.0, 0.5358267949789949], [1437386688.0, 28420000.0, 0.5463943467342697], [1437388416.0, 28440000.0, 0.556875616488188], [1437390144.0, 28460000.0, 0.5672689491267557], [1437391872.0, 28480000.0, 0.5775727034222662], [1437393600.0, 28500000.0, 0.587785252292474], [1437395328.0, 28520000.0, 0.5979049830575163], [1437397056.0, 28540000.0, 0.607930297694605], [1437398784.0, 28560000.0, 0.6178596130903333], [1437400512.0, 28580000.0, 0.6276913612907017], [1437402240.0, 28600000.0, 0.6374239897486875], [1437403968.0, 28620000.0, 0.6470559615694442], [1437405696.0, 28640000.0, 0.6565857557529557], [1437407424.0, 28660000.0, 0.6660118674342504], [1437409152.0, 28680000.0, 0.6753328081210227], [1437410880.0, 28700000.0, 0.684547105928689], [1437412608.0, 28720000.0, 0.6936533058128047], [1437414336.0, 28740000.0, 0.7026499697988483], [1437416064.0, 28760000.0, 0.7115356772092839], [1437417792.0, 28780000.0, 0.7203090248879075], [1437419520.0, 28800000.0, 0.7289686274214116], [1437421248.0, 28820000.0, 0.7375131173581734], [1437422976.0, 28840000.0, 0.7459411454241811], [1437424704.0, 28860000.0, 0.7542513807361046], [1437426432.0, 28880000.0, 0.7624425110114481], [1437428160.0, 28900000.0, 0.770513242775789], [1437429888.0, 28920000.0, 0.7784623015670227], [1437431616.0, 28940000.0, 0.7862884321366199], [1437433344.0, 28960000.0, 0.7939903986478337], [1437435072.0, 28980000.0, 0.8015669848708766], [1437436800.0, 29000000.0, 0.809016994374947], [1437438528.0, 29020000.0, 0.816339250717183], [1437440256.0, 29040000.0, 0.8235325976284261], [1437441984.0, 29060000.0, 0.8305958991958129], [1437443712.0, 29080000.0, 0.8375280400421415], [1437445440.0, 29100000.0, 0.8443279255020145], [1437447168.0, 29120000.0, 0.8509944817946908], [1437448896.0, 29140000.0, 0.8575266561936528], [1437450624.0, 29160000.0, 0.8639234171928354], [1437452352.0, 29180000.0, 0.8701837546695254], [1437454080.0, 29200000.0, 0.8763066800438629], [1437455808.0, 29220000.0, 0.882291226434954], [1437457536.0, 29240000.0, 0.8881364488135448], [1437459264.0, 29260000.0, 0.8938414241512637], [1437460992.0, 29280000.0, 0.8994052515663706], [1437462720.0, 29300000.0, 0.9048270524660202], [1437464448.0, 29320000.0, 0.9101059706849947], [1437466176.0, 29340000.0, 0.9152411726209176], [1437467904.0, 29360000.0, 0.9202318473658702], [1437469632.0, 29380000.0, 0.9250772068344575], [1437471360.0, 29400000.0, 0.9297764858882506], [1437473088.0, 29420000.0, 0.9343289424566122], [1437474816.0, 29440000.0, 0.9387338576538741], [1437476544.0, 29460000.0, 0.9429905358928642], [1437478272.0, 29480000.0, 0.9470983049947437], [1437480000.0, 29500000.0, 0.9510565162951539], [1437481728.0, 29520000.0, 0.9548645447466431], [1437483456.0, 29540000.0, 0.9585217890173757], [1437485184.0, 29560000.0, 0.9620276715860855], [1437486912.0, 29580000.0, 0.9653816388332743], [1437488640.0, 29600000.0, 0.9685831611286313], [1437490368.0, 29620000.0, 0.9716317329146739], [1437492096.0, 29640000.0, 0.9745268727865769], [1437493824.0, 29660000.0, 0.9772681235681938], [1437495552.0, 29680000.0, 0.9798550523842464], [1437497280.0, 29700000.0, 0.9822872507286887], [1437499008.0, 29720000.0, 0.9845643345292053], [1437500736.0, 29740000.0, 0.9866859442078678], [1437502464.0, 29760000.0, 0.9886517447379137], [1437504192.0, 29780000.0, 0.9904614256966513], [1437505920.0, 29800000.0, 0.9921147013144779], [1437507648.0, 29820000.0, 0.9936113105200083], [1437509376.0, 29840000.0, 0.9949510169813], [1437511104.0, 29860000.0, 0.9961336091431726], [1437512832.0, 29880000.0, 0.9971589002606139], [1437514560.0, 29900000.0, 0.9980267284282716], [1437516288.0, 29920000.0, 0.9987369566060175], [1437518016.0, 29940000.0, 0.9992894726405893], [1437519744.0, 29960000.0, 0.9996841892833], [1437521472.0, 29980000.0, 0.9999210442038161], [1437523200.0, 30000000.0, 1.0], [1437524928.0, 30020000.0, 0.9999210442038161], [1437526656.0, 30040000.0, 0.9996841892833], [1437528384.0, 30060000.0, 0.9992894726405893], [1437530112.0, 30080000.0, 0.9987369566060175], [1437531840.0, 30100000.0, 0.9980267284282717], [1437533568.0, 30120000.0, 0.997158900260614], [1437535296.0, 30140000.0, 0.9961336091431727], [1437537024.0, 30160000.0, 0.9949510169813002], [1437538752.0, 30180000.0, 0.9936113105200085], [1437540480.0, 30200000.0, 0.992114701314478], [1437542208.0, 30220000.0, 0.9904614256966515], [1437543936.0, 30240000.0, 0.988651744737914], [1437545664.0, 30260000.0, 0.9866859442078681], [1437547392.0, 30280000.0, 0.9845643345292056], [1437549120.0, 30300000.0, 0.982287250728689], [1437550848.0, 30320000.0, 0.9798550523842466], [1437552576.0, 30340000.0, 0.9772681235681941], [1437554304.0, 30360000.0, 0.9745268727865772], [1437556032.0, 30380000.0, 0.9716317329146743], [1437557760.0, 30400000.0, 0.9685831611286316], [1437559488.0, 30420000.0, 0.9653816388332747], [1437561216.0, 30440000.0, 0.9620276715860859], [1437562944.0, 30460000.0, 0.9585217890173762], [1437564672.0, 30480000.0, 0.9548645447466435], [1437566400.0, 30500000.0, 0.9510565162951543], [1437568128.0, 30520000.0, 0.9470983049947442], [1437569856.0, 30540000.0, 0.9429905358928646], [1437571584.0, 30560000.0, 0.9387338576538745], [1437573312.0, 30580000.0, 0.9343289424566128], [1437575040.0, 30600000.0, 0.9297764858882511], [1437576768.0, 30620000.0, 0.925077206834458], [1437578496.0, 30640000.0, 0.9202318473658707], [1437580224.0, 30660000.0, 0.9152411726209182], [1437581952.0, 30680000.0, 0.9101059706849952], [1437583680.0, 30700000.0, 0.9048270524660209], [1437585408.0, 30720000.0, 0.8994052515663712], [1437587136.0, 30740000.0, 0.8938414241512643], [1437588864.0, 30760000.0, 0.8881364488135455], [1437590592.0, 30780000.0, 0.8822912264349546], [1437592320.0, 30800000.0, 0.8763066800438636], [1437594048.0, 30820000.0, 0.870183754669526], [1437595776.0, 30840000.0, 0.8639234171928362], [1437597504.0, 30860000.0, 0.8575266561936535], [1437599232.0, 30880000.0, 0.8509944817946916], [1437600960.0, 30900000.0, 0.8443279255020153], [1437602688.0, 30920000.0, 0.8375280400421423], [1437604416.0, 30940000.0, 0.8305958991958138], [1437606144.0, 30960000.0, 0.823532597628427], [1437607872.0, 30980000.0, 0.8163392507171839], [1437609600.0, 31000000.0, 0.8090169943749479], [1437611328.0, 31020000.0, 0.8015669848708775], [1437613056.0, 31040000.0, 0.7939903986478346], [1437614784.0, 31060000.0, 0.7862884321366208], [1437616512.0, 31080000.0, 0.7784623015670237], [1437618240.0, 31100000.0, 0.7705132427757899], [1437619968.0, 31120000.0, 0.7624425110114491], [1437621696.0, 31140000.0, 0.7542513807361055], [1437623424.0, 31160000.0, 0.7459411454241821], [1437625152.0, 31180000.0, 0.7375131173581744], [1437626880.0, 31200000.0, 0.7289686274214126], [1437628608.0, 31220000.0, 0.7203090248879085], [1437630336.0, 31240000.0, 0.711535677209285], [1437632064.0, 31260000.0, 0.7026499697988494], [1437633792.0, 31280000.0, 0.6936533058128057], [1437635520.0, 31300000.0, 0.6845471059286901], [1437637248.0, 31320000.0, 0.6753328081210237], [1437638976.0, 31340000.0, 0.6660118674342516], [1437640704.0, 31360000.0, 0.6565857557529569], [1437642432.0, 31380000.0, 0.6470559615694453], [1437644160.0, 31400000.0, 0.6374239897486886], [1437645888.0, 31420000.0, 0.6276913612907028], [1437647616.0, 31440000.0, 0.6178596130903345], [1437649344.0, 31460000.0, 0.6079302976946062], [1437651072.0, 31480000.0, 0.5979049830575175], [1437652800.0, 31500000.0, 0.5877852522924751], [1437654528.0, 31520000.0, 0.5775727034222674], [1437656256.0, 31540000.0, 0.567268949126757], [1437657984.0, 31560000.0, 0.5568756164881892], [1437659712.0, 31580000.0, 0.5463943467342709], [1437661440.0, 31600000.0, 0.5358267949789961], [1437663168.0, 31620000.0, 0.5251746299612958], [1437664896.0, 31640000.0, 0.5144395337815072], [1437666624.0, 31660000.0, 0.5036232016357624], [1437668352.0, 31680000.0, 0.4927273415482906], [1437670080.0, 31700000.0, 0.48175367410171505], [1437671808.0, 31720000.0, 0.470703932165333], [1437673536.0, 31740000.0, 0.459579860621489], [1437675264.0, 31760000.0, 0.4483832160900309], [1437676992.0, 31780000.0, 0.43711576665093543], [1437678720.0, 31800000.0, 0.4257792915650727], [1437680448.0, 31820000.0, 0.4143755809932849], [1437682176.0, 31840000.0, 0.4029064357136609], [1437683904.0, 31860000.0, 0.39137366683720465], [1437685632.0, 31880000.0, 0.3797790955218008], [1437687360.0, 31900000.0, 0.36812455268467836], [1437689088.0, 31920000.0, 0.35641187871325186], [1437690816.0, 31940000.0, 0.34464292317451894], [1437692544.0, 31960000.0, 0.3328195445229859], [1437694272.0, 31980000.0, 0.3209436098072095], [1437696000.0, 32000000.0, 0.3090169943749482], [1437697728.0, 32020000.0, 0.2970415815770364], [1437699456.0, 32040000.0, 0.285019262469975], [1437701184.0, 32060000.0, 0.27295193551732483], [1437702912.0, 32080000.0, 0.2608415062898973], [1437704640.0, 32100000.0, 0.2486898871648559], [1437706368.0, 32120000.0, 0.2364989970237231], [1437708096.0, 32140000.0, 0.22427076094938383], [1437709824.0, 32160000.0, 0.21200710992205457], [1437711552.0, 32180000.0, 0.19970998051440772], [1437713280.0, 32200000.0, 0.1873813145857226], [1437715008.0, 32220000.0, 0.17502305897527828], [1437716736.0, 32240000.0, 0.1626371651948831], [1437718464.0, 32260000.0, 0.15022558912075734], [1437720192.0, 32280000.0, 0.13779029068463913], [1437721920.0, 32300000.0, 0.1253332335643061], [1437723648.0, 32320000.0, 0.11285638487348078], [1437725376.0, 32340000.0, 0.10036171485121476], [1437727104.0, 32360000.0, 0.08785119655074382], [1437728832.0, 32380000.0, 0.07532680552793415], [1437730560.0, 32400000.0, 0.06279051952931204], [1437732288.0, 32420000.0, 0.050244318179769], [1437734016.0, 32440000.0, 0.03769018266993476], [1437735744.0, 32460000.0, 0.025130095443338486], [1437737472.0, 32480000.0, 0.012566039883350845], [1437739200.0, 32500000.0, -9.803364199544708e-16], [1437740928.0, 32520000.0, -0.012566039883349254], [1437742656.0, 32540000.0, -0.025130095443336897], [1437744384.0, 32560000.0, -0.037690182669933174], [1437746112.0, 32580000.0, -0.05024431817976741], [1437747840.0, 32600000.0, -0.06279051952931045], [1437749568.0, 32620000.0, -0.07532680552793257], [1437751296.0, 32640000.0, -0.08785119655074224], [1437753024.0, 32660000.0, -0.10036171485121317], [1437754752.0, 32680000.0, -0.1128563848734792], [1437756480.0, 32700000.0, -0.1253332335643045], [1437758208.0, 32720000.0, -0.13779029068463755], [1437759936.0, 32740000.0, -0.15022558912075576], [1437761664.0, 32760000.0, -0.16263716519488156], [1437763392.0, 32780000.0, -0.17502305897527673], [1437765120.0, 32800000.0, -0.18738131458572105], [1437766848.0, 32820000.0, -0.19970998051440617], [1437768576.0, 32840000.0, -0.21200710992205302], [1437770304.0, 32860000.0, -0.22427076094938228], [1437772032.0, 32880000.0, -0.23649899702372154], [1437773760.0, 32900000.0, -0.24868988716485435], [1437775488.0, 32920000.0, -0.2608415062898957], [1437777216.0, 32940000.0, -0.2729519355173233], [1437778944.0, 32960000.0, -0.28501926246997344], [1437780672.0, 32980000.0, -0.29704158157703486], [1437782400.0, 33000000.0, -0.3090169943749467], [1437784128.0, 33020000.0, -0.320943609807208], [1437785856.0, 33040000.0, -0.3328195445229844], [1437787584.0, 33060000.0, -0.34464292317451745], [1437789312.0, 33080000.0, -0.35641187871325036], [1437791040.0, 33100000.0, -0.36812455268467686], [1437792768.0, 33120000.0, -0.3797790955217993], [1437794496.0, 33140000.0, -0.39137366683720315], [1437796224.0, 33160000.0, -0.4029064357136594], [1437797952.0, 33180000.0, -0.4143755809932835], [1437799680.0, 33200000.0, -0.42577929156507127], [1437801408.0, 33220000.0, -0.43711576665093405], [1437803136.0, 33240000.0, -0.4483832160900295], [1437804864.0, 33260000.0, -0.4595798606214876], [1437806592.0, 33280000.0, -0.4707039321653316], [1437808320.0, 33300000.0, -0.4817536741017136], [1437810048.0, 33320000.0, -0.49272734154828923], [1437811776.0, 33340000.0, -0.5036232016357609], [1437813504.0, 33360000.0, -0.5144395337815059], [1437815232.0, 33380000.0, -0.5251746299612945], [1437816960.0, 33400000.0, -0.5358267949789948], [1437818688.0, 33420000.0, -0.5463943467342696], [1437820416.0, 33440000.0, -0.5568756164881878], [1437822144.0, 33460000.0, -0.5672689491267556], [1437823872.0, 33480000.0, -0.5775727034222661], [1437825600.0, 33500000.0, -0.5877852522924739], [1437827328.0, 33520000.0, -0.5979049830575162], [1437829056.0, 33540000.0, -0.6079302976946049], [1437830784.0, 33560000.0, -0.6178596130903332], [1437832512.0, 33580000.0, -0.6276913612907016], [1437834240.0, 33600000.0, -0.6374239897486874], [1437835968.0, 33620000.0, -0.6470559615694442], [1437837696.0, 33640000.0, -0.6565857557529557], [1437839424.0, 33660000.0, -0.6660118674342503], [1437841152.0, 33680000.0, -0.6753328081210226], [1437842880.0, 33700000.0, -0.6845471059286888], [1437844608.0, 33720000.0, -0.6936533058128046], [1437846336.0, 33740000.0, -0.7026499697988483], [1437848064.0, 33760000.0, -0.7115356772092839], [1437849792.0, 33780000.0, -0.7203090248879074], [1437851520.0, 33800000.0, -0.7289686274214114], [1437853248.0, 33820000.0, -0.7375131173581733], [1437854976.0, 33840000.0, -0.745941145424181], [1437856704.0, 33860000.0, -0.7542513807361045], [1437858432.0, 33880000.0, -0.7624425110114481], [1437860160.0, 33900000.0, -0.7705132427757889], [1437861888.0, 33920000.0, -0.7784623015670227], [1437863616.0, 33940000.0, -0.7862884321366198], [1437865344.0, 33960000.0, -0.7939903986478336], [1437867072.0, 33980000.0, -0.8015669848708765], [1437868800.0, 34000000.0, -0.8090169943749469], [1437870528.0, 34020000.0, -0.816339250717183], [1437872256.0, 34040000.0, -0.8235325976284261], [1437873984.0, 34060000.0, -0.8305958991958129], [1437875712.0, 34080000.0, -0.8375280400421415], [1437877440.0, 34100000.0, -0.8443279255020144], [1437879168.0, 34120000.0, -0.8509944817946908], [1437880896.0, 34140000.0, -0.8575266561936526], [1437882624.0, 34160000.0, -0.8639234171928353], [1437884352.0, 34180000.0, -0.8701837546695252], [1437886080.0, 34200000.0, -0.8763066800438628], [1437887808.0, 34220000.0, -0.8822912264349538], [1437889536.0, 34240000.0, -0.8881364488135447], [1437891264.0, 34260000.0, -0.8938414241512637], [1437892992.0, 34280000.0, -0.8994052515663705], [1437894720.0, 34300000.0, -0.9048270524660202], [1437896448.0, 34320000.0, -0.9101059706849945], [1437898176.0, 34340000.0, -0.9152411726209176], [1437899904.0, 34360000.0, -0.92023184736587], [1437901632.0, 34380000.0, -0.9250772068344575], [1437903360.0, 34400000.0, -0.9297764858882506], [1437905088.0, 34420000.0, -0.9343289424566122], [1437906816.0, 34440000.0, -0.938733857653874], [1437908544.0, 34460000.0, -0.9429905358928641], [1437910272.0, 34480000.0, -0.9470983049947437], [1437912000.0, 34500000.0, -0.9510565162951539], [1437913728.0, 34520000.0, -0.954864544746643], [1437915456.0, 34540000.0, -0.9585217890173757], [1437917184.0, 34560000.0, -0.9620276715860855], [1437918912.0, 34580000.0, -0.9653816388332742], [1437920640.0, 34600000.0, -0.9685831611286313], [1437922368.0, 34620000.0, -0.9716317329146739], [1437924096.0, 34640000.0, -0.9745268727865769], [1437925824.0, 34660000.0, -0.9772681235681938], [1437927552.0, 34680000.0, -0.9798550523842463], [1437929280.0, 34700000.0, -0.9822872507286887], [1437931008.0, 34720000.0, -0.9845643345292053], [1437932736.0, 34740000.0, -0.9866859442078678], [1437934464.0, 34760000.0, -0.9886517447379137], [1437936192.0, 34780000.0, -0.9904614256966513], [1437937920.0, 34800000.0, -0.9921147013144778], [1437939648.0, 34820000.0, -0.9936113105200083], [1437941376.0, 34840000.0, -0.9949510169813], [1437943104.0, 34860000.0, -0.9961336091431725], [1437944832.0, 34880000.0, -0.9971589002606139], [1437946560.0, 34900000.0, -0.9980267284282716], [1437948288.0, 34920000.0, -0.9987369566060175], [1437950016.0, 34940000.0, -0.9992894726405893], [1437951744.0, 34960000.0, -0.9996841892833], [1437953472.0, 34980000.0, -0.9999210442038161], [1437955200.0, 35000000.0, -1.0], [1437956928.0, 35020000.0, -0.9999210442038161], [1437958656.0, 35040000.0, -0.9996841892833], [1437960384.0, 35060000.0, -0.9992894726405893], [1437962112.0, 35080000.0, -0.9987369566060175], [1437963840.0, 35100000.0, -0.9980267284282717], [1437965568.0, 35120000.0, -0.997158900260614], [1437967296.0, 35140000.0, -0.9961336091431727], [1437969024.0, 35160000.0, -0.9949510169813002], [1437970752.0, 35180000.0, -0.9936113105200085], [1437972480.0, 35200000.0, -0.992114701314478], [1437974208.0, 35220000.0, -0.9904614256966515], [1437975936.0, 35240000.0, -0.988651744737914], [1437977664.0, 35260000.0, -0.9866859442078681], [1437979392.0, 35280000.0, -0.9845643345292056], [1437981120.0, 35300000.0, -0.982287250728689], [1437982848.0, 35320000.0, -0.9798550523842467], [1437984576.0, 35340000.0, -0.9772681235681941], [1437986304.0, 35360000.0, -0.9745268727865773], [1437988032.0, 35380000.0, -0.9716317329146743], [1437989760.0, 35400000.0, -0.9685831611286317], [1437991488.0, 35420000.0, -0.9653816388332747], [1437993216.0, 35440000.0, -0.9620276715860859], [1437994944.0, 35460000.0, -0.9585217890173762], [1437996672.0, 35480000.0, -0.9548645447466435], [1437998400.0, 35500000.0, -0.9510565162951544], [1438000128.0, 35520000.0, -0.9470983049947442], [1438001856.0, 35540000.0, -0.9429905358928646], [1438003584.0, 35560000.0, -0.9387338576538746], [1438005312.0, 35580000.0, -0.9343289424566128], [1438007040.0, 35600000.0, -0.9297764858882512], [1438008768.0, 35620000.0, -0.9250772068344582], [1438010496.0, 35640000.0, -0.9202318473658707], [1438012224.0, 35660000.0, -0.9152411726209183], [1438013952.0, 35680000.0, -0.9101059706849953], [1438015680.0, 35700000.0, -0.9048270524660209], [1438017408.0, 35720000.0, -0.8994052515663713], [1438019136.0, 35740000.0, -0.8938414241512644], [1438020864.0, 35760000.0, -0.8881364488135455], [1438022592.0, 35780000.0, -0.8822912264349546], [1438024320.0, 35800000.0, -0.8763066800438637], [1438026048.0, 35820000.0, -0.8701837546695261], [1438027776.0, 35840000.0, -0.8639234171928362], [1438029504.0, 35860000.0, -0.8575266561936535], [1438031232.0, 35880000.0, -0.8509944817946917], [1438032960.0, 35900000.0, -0.8443279255020154], [1438034688.0, 35920000.0, -0.8375280400421424], [1438036416.0, 35940000.0, -0.8305958991958138], [1438038144.0, 35960000.0, -0.823532597628427], [1438039872.0, 35980000.0, -0.816339250717184], [1438041600.0, 36000000.0, -0.8090169943749479], [1438043328.0, 36020000.0, -0.8015669848708775], [1438045056.0, 36040000.0, -0.7939903986478346], [1438046784.0, 36060000.0, -0.7862884321366209], [1438048512.0, 36080000.0, -0.7784623015670237], [1438050240.0, 36100000.0, -0.77051324277579], [1438051968.0, 36120000.0, -0.7624425110114492], [1438053696.0, 36140000.0, -0.7542513807361056], [1438055424.0, 36160000.0, -0.7459411454241821], [1438057152.0, 36180000.0, -0.7375131173581745], [1438058880.0, 36200000.0, -0.7289686274214127], [1438060608.0, 36220000.0, -0.7203090248879085], [1438062336.0, 36240000.0, -0.7115356772092851], [1438064064.0, 36260000.0, -0.7026499697988495], [1438065792.0, 36280000.0, -0.6936533058128058], [1438067520.0, 36300000.0, -0.6845471059286901], [1438069248.0, 36320000.0, -0.6753328081210238], [1438070976.0, 36340000.0, -0.6660118674342516], [1438072704.0, 36360000.0, -0.656585755752957], [1438074432.0, 36380000.0, -0.6470559615694454], [1438076160.0, 36400000.0, -0.6374239897486887], [1438077888.0, 36420000.0, -0.6276913612907029], [1438079616.0, 36440000.0, -0.6178596130903345], [1438081344.0, 36460000.0, -0.6079302976946063], [1438083072.0, 36480000.0, -0.5979049830575175], [1438084800.0, 36500000.0, -0.5877852522924752], [1438086528.0, 36520000.0, -0.5775727034222675], [1438088256.0, 36540000.0, -0.5672689491267571], [1438089984.0, 36560000.0, -0.5568756164881892], [1438091712.0, 36580000.0, -0.546394346734271], [1438093440.0, 36600000.0, -0.5358267949789962], [1438095168.0, 36620000.0, -0.5251746299612959], [1438096896.0, 36640000.0, -0.5144395337815073], [1438098624.0, 36660000.0, -0.5036232016357625], [1438100352.0, 36680000.0, -0.49272734154829073], [1438102080.0, 36700000.0, -0.4817536741017151], [1438103808.0, 36720000.0, -0.4707039321653331], [1438105536.0, 36740000.0, -0.4595798606214891], [1438107264.0, 36760000.0, -0.448383216090031], [1438108992.0, 36780000.0, -0.43711576665093554], [1438110720.0, 36800000.0, -0.4257792915650728], [1438112448.0, 36820000.0, -0.41437558099328503], [1438114176.0, 36840000.0, -0.402906435713661], [1438115904.0, 36860000.0, -0.39137366683720476], [1438117632.0, 36880000.0, -0.3797790955218009], [1438119360.0, 36900000.0, -0.3681245526846785], [1438121088.0, 36920000.0, -0.356411878713252], [1438122816.0, 36940000.0, -0.34464292317451906], [1438124544.0, 36960000.0, -0.332819544522986], [1438126272.0, 36980000.0, -0.3209436098072096], [1438128000.0, 37000000.0, -0.3090169943749483], [1438129728.0, 37020000.0, -0.29704158157703653], [1438131456.0, 37040000.0, -0.2850192624699751], [1438133184.0, 37060000.0, -0.27295193551732494], [1438134912.0, 37080000.0, -0.2608415062898974], [1438136640.0, 37100000.0, -0.24868988716485602], [1438138368.0, 37120000.0, -0.2364989970237232], [1438140096.0, 37140000.0, -0.22427076094938395], [1438141824.0, 37160000.0, -0.2120071099220547], [1438143552.0, 37180000.0, -0.19970998051440783], [1438145280.0, 37200000.0, -0.18738131458572274], [1438147008.0, 37220000.0, -0.17502305897527842], [1438148736.0, 37240000.0, -0.16263716519488325], [1438150464.0, 37260000.0, -0.15022558912075745], [1438152192.0, 37280000.0, -0.13779029068463924], [1438153920.0, 37300000.0, -0.1253332335643062], [1438155648.0, 37320000.0, -0.1128563848734809], [1438157376.0, 37340000.0, -0.10036171485121488], [1438159104.0, 37360000.0, -0.08785119655074394], [1438160832.0, 37380000.0, -0.07532680552793428], [1438162560.0, 37400000.0, -0.06279051952931217], [1438164288.0, 37420000.0, -0.050244318179769126], [1438166016.0, 37440000.0, -0.03769018266993489], [1438167744.0, 37460000.0, -0.02513009544333861], [1438169472.0, 37480000.0, -0.012566039883350968], [1438171200.0, 37500000.0, -2.6948419387607653e-15], [1438172928.0, 37520000.0, 0.012566039883349131], [1438174656.0, 37540000.0, 0.02513009544333677], [1438176384.0, 37560000.0, 0.03769018266993305], [1438178112.0, 37580000.0, 0.05024431817976729], [1438179840.0, 37600000.0, 0.06279051952931033], [1438181568.0, 37620000.0, 0.07532680552793244], [1438183296.0, 37640000.0, 0.08785119655074211], [1438185024.0, 37660000.0, 0.10036171485121305], [1438186752.0, 37680000.0, 0.11285638487347907], [1438188480.0, 37700000.0, 0.1253332335643044], [1438190208.0, 37720000.0, 0.13779029068463744], [1438191936.0, 37740000.0, 0.15022558912075565], [1438193664.0, 37760000.0, 0.16263716519488142], [1438195392.0, 37780000.0, 0.17502305897527662], [1438197120.0, 37800000.0, 0.18738131458572094], [1438198848.0, 37820000.0, 0.19970998051440603], [1438200576.0, 37840000.0, 0.2120071099220529], [1438202304.0, 37860000.0, 0.22427076094938214], [1438204032.0, 37880000.0, 0.23649899702372143], [1438205760.0, 37900000.0, 0.24868988716485424], [1438207488.0, 37920000.0, 0.2608415062898956], [1438209216.0, 37940000.0, 0.27295193551732316], [1438210944.0, 37960000.0, 0.28501926246997333], [1438212672.0, 37980000.0, 0.29704158157703475], [1438214400.0, 38000000.0, 0.30901699437494656], [1438216128.0, 38020000.0, 0.3209436098072079], [1438217856.0, 38040000.0, 0.3328195445229843], [1438219584.0, 38060000.0, 0.34464292317451733], [1438221312.0, 38080000.0, 0.35641187871325025], [1438223040.0, 38100000.0, 0.36812455268467675], [1438224768.0, 38120000.0, 0.37977909552179917], [1438226496.0, 38140000.0, 0.39137366683720304], [1438228224.0, 38160000.0, 0.4029064357136593], [1438229952.0, 38180000.0, 0.41437558099328337], [1438231680.0, 38200000.0, 0.42577929156507116], [1438233408.0, 38220000.0, 0.43711576665093393], [1438235136.0, 38240000.0, 0.4483832160900294], [1438236864.0, 38260000.0, 0.4595798606214875], [1438238592.0, 38280000.0, 0.47070393216533146], [1438240320.0, 38300000.0, 0.4817536741017135], [1438242048.0, 38320000.0, 0.4927273415482891], [1438243776.0, 38340000.0, 0.5036232016357608], [1438245504.0, 38360000.0, 0.5144395337815058], [1438247232.0, 38380000.0, 0.5251746299612944], [1438248960.0, 38400000.0, 0.5358267949789947], [1438250688.0, 38420000.0, 0.5463943467342695], [1438252416.0, 38440000.0, 0.5568756164881877], [1438254144.0, 38460000.0, 0.5672689491267555], [1438255872.0, 38480000.0, 0.577572703422266], [1438257600.0, 38500000.0, 0.5877852522924738], [1438259328.0, 38520000.0, 0.597904983057516], [1438261056.0, 38540000.0, 0.6079302976946048], [1438262784.0, 38560000.0, 0.6178596130903331], [1438264512.0, 38580000.0, 0.6276913612907015], [1438266240.0, 38600000.0, 0.6374239897486873], [1438267968.0, 38620000.0, 0.6470559615694441], [1438269696.0, 38640000.0, 0.6565857557529556], [1438271424.0, 38660000.0, 0.6660118674342502], [1438273152.0, 38680000.0, 0.6753328081210225], [1438274880.0, 38700000.0, 0.6845471059286887], [1438276608.0, 38720000.0, 0.6936533058128045], [1438278336.0, 38740000.0, 0.7026499697988482], [1438280064.0, 38760000.0, 0.7115356772092838], [1438281792.0, 38780000.0, 0.7203090248879073], [1438283520.0, 38800000.0, 0.7289686274214113], [1438285248.0, 38820000.0, 0.7375131173581733], [1438286976.0, 38840000.0, 0.7459411454241809], [1438288704.0, 38860000.0, 0.7542513807361044], [1438290432.0, 38880000.0, 0.762442511011448], [1438292160.0, 38900000.0, 0.7705132427757888], [1438293888.0, 38920000.0, 0.7784623015670226], [1438295616.0, 38940000.0, 0.7862884321366198], [1438297344.0, 38960000.0, 0.7939903986478335], [1438299072.0, 38980000.0, 0.8015669848708765], [1438300800.0, 39000000.0, 0.8090169943749469], [1438302528.0, 39020000.0, 0.8163392507171829], [1438304256.0, 39040000.0, 0.823532597628426], [1438305984.0, 39060000.0, 0.8305958991958128], [1438307712.0, 39080000.0, 0.8375280400421414], [1438309440.0, 39100000.0, 0.8443279255020144], [1438311168.0, 39120000.0, 0.8509944817946907], [1438312896.0, 39140000.0, 0.8575266561936526], [1438314624.0, 39160000.0, 0.8639234171928353], [1438316352.0, 39180000.0, 0.8701837546695252], [1438318080.0, 39200000.0, 0.8763066800438628], [1438319808.0, 39220000.0, 0.8822912264349538], [1438321536.0, 39240000.0, 0.8881364488135447], [1438323264.0, 39260000.0, 0.8938414241512636], [1438324992.0, 39280000.0, 0.8994052515663705], [1438326720.0, 39300000.0, 0.9048270524660201], [1438328448.0, 39320000.0, 0.9101059706849945], [1438330176.0, 39340000.0, 0.9152411726209175], [1438331904.0, 39360000.0, 0.92023184736587], [1438333632.0, 39380000.0, 0.9250772068344575], [1438335360.0, 39400000.0, 0.9297764858882506], [1438337088.0, 39420000.0, 0.9343289424566121], [1438338816.0, 39440000.0, 0.938733857653874], [1438340544.0, 39460000.0, 0.9429905358928641], [1438342272.0, 39480000.0, 0.9470983049947437], [1438344000.0, 39500000.0, 0.9510565162951539], [1438345728.0, 39520000.0, 0.954864544746643], [1438347456.0, 39540000.0, 0.9585217890173757], [1438349184.0, 39560000.0, 0.9620276715860855], [1438350912.0, 39580000.0, 0.9653816388332742], [1438352640.0, 39600000.0, 0.9685831611286312], [1438354368.0, 39620000.0, 0.9716317329146739], [1438356096.0, 39640000.0, 0.9745268727865769], [1438357824.0, 39660000.0, 0.9772681235681938], [1438359552.0, 39680000.0, 0.9798550523842463], [1438361280.0, 39700000.0, 0.9822872507286887], [1438363008.0, 39720000.0, 0.9845643345292052], [1438364736.0, 39740000.0, 0.9866859442078678], [1438366464.0, 39760000.0, 0.9886517447379136], [1438368192.0, 39780000.0, 0.9904614256966513], [1438369920.0, 39800000.0, 0.9921147013144778], [1438371648.0, 39820000.0, 0.9936113105200083], [1438373376.0, 39840000.0, 0.9949510169813], [1438375104.0, 39860000.0, 0.9961336091431725], [1438376832.0, 39880000.0, 0.9971589002606139], [1438378560.0, 39900000.0, 0.9980267284282716], [1438380288.0, 39920000.0, 0.9987369566060175], [1438382016.0, 39940000.0, 0.9992894726405893], [1438383744.0, 39960000.0, 0.9996841892833], [1438385472.0, 39980000.0, 0.9999210442038161], [1438387200.0, 40000000.0, 1.0], [1438388928.0, 40020000.0, 0.9999210442038161], [1438390656.0, 40040000.0, 0.9996841892833], [1438392384.0, 40060000.0, 0.9992894726405892], [1438394112.0, 40080000.0, 0.9987369566060176], [1438395840.0, 40100000.0, 0.9980267284282717], [1438397568.0, 40120000.0, 0.997158900260614], [1438399296.0, 40140000.0, 0.9961336091431724], [1438401024.0, 40160000.0, 0.9949510169813002], [1438402752.0, 40180000.0, 0.9936113105200085], [1438404480.0, 40200000.0, 0.9921147013144785], [1438406208.0, 40220000.0, 0.9904614256966511], [1438407936.0, 40240000.0, 0.988651744737914], [1438409664.0, 40260000.0, 0.9866859442078681], [1438411392.0, 40280000.0, 0.9845643345292062], [1438413120.0, 40300000.0, 0.9822872507286884], [1438414848.0, 40320000.0, 0.9798550523842467], [1438416576.0, 40340000.0, 0.9772681235681943], [1438418304.0, 40360000.0, 0.9745268727865781], [1438420032.0, 40380000.0, 0.9716317329146735], [1438421760.0, 40400000.0, 0.9685831611286317], [1438423488.0, 40420000.0, 0.9653816388332748], [1438425216.0, 40440000.0, 0.9620276715860869], [1438426944.0, 40460000.0, 0.9585217890173752], [1438428672.0, 40480000.0, 0.9548645447466435], [1438430400.0, 40500000.0, 0.9510565162951544], [1438432128.0, 40520000.0, 0.9470983049947455], [1438433856.0, 40540000.0, 0.9429905358928647], [1438435584.0, 40560000.0, 0.9387338576538746], [1438437312.0, 40580000.0, 0.9343289424566129], [1438439040.0, 40600000.0, 0.9297764858882526], [1438440768.0, 40620000.0, 0.9250772068344582], [1438442496.0, 40640000.0, 0.9202318473658708], [1438444224.0, 40660000.0, 0.9152411726209183], [1438445952.0, 40680000.0, 0.9101059706849968], [1438447680.0, 40700000.0, 0.9048270524660195], [1438449408.0, 40720000.0, 0.8994052515663713], [1438451136.0, 40740000.0, 0.8938414241512644], [1438452864.0, 40760000.0, 0.8881364488135456], [1438454592.0, 40780000.0, 0.8822912264349531], [1438456320.0, 40800000.0, 0.8763066800438637], [1438458048.0, 40820000.0, 0.8701837546695262], [1438459776.0, 40840000.0, 0.8639234171928363], [1438461504.0, 40860000.0, 0.8575266561936518], [1438463232.0, 40880000.0, 0.8509944817946918], [1438464960.0, 40900000.0, 0.8443279255020154], [1438466688.0, 40920000.0, 0.8375280400421444], [1438468416.0, 40940000.0, 0.8305958991958119], [1438470144.0, 40960000.0, 0.8235325976284271], [1438471872.0, 40980000.0, 0.816339250717184], [1438473600.0, 41000000.0, 0.8090169943749501], [1438475328.0, 41020000.0, 0.8015669848708755], [1438477056.0, 41040000.0, 0.7939903986478347], [1438478784.0, 41060000.0, 0.7862884321366209], [1438480512.0, 41080000.0, 0.778462301567026], [1438482240.0, 41100000.0, 0.7705132427757878], [1438483968.0, 41120000.0, 0.7624425110114492], [1438485696.0, 41140000.0, 0.7542513807361058], [1438487424.0, 41160000.0, 0.7459411454241847], [1438489152.0, 41180000.0, 0.7375131173581722], [1438490880.0, 41200000.0, 0.7289686274214127], [1438492608.0, 41220000.0, 0.7203090248879086], [1438494336.0, 41240000.0, 0.7115356772092877], [1438496064.0, 41260000.0, 0.7026499697988495], [1438497792.0, 41280000.0, 0.6936533058128059], [1438499520.0, 41300000.0, 0.6845471059286902], [1438501248.0, 41320000.0, 0.6753328081210266], [1438502976.0, 41340000.0, 0.6660118674342517], [1438504704.0, 41360000.0, 0.6565857557529571], [1438506432.0, 41380000.0, 0.6470559615694456], [1438508160.0, 41400000.0, 0.6374239897486916], [1438509888.0, 41420000.0, 0.6276913612907002], [1438511616.0, 41440000.0, 0.6178596130903347], [1438513344.0, 41460000.0, 0.6079302976946064], [1438515072.0, 41480000.0, 0.5979049830575205], [1438516800.0, 41500000.0, 0.5877852522924725], [1438518528.0, 41520000.0, 0.5775727034222676], [1438520256.0, 41540000.0, 0.5672689491267572], [1438521984.0, 41560000.0, 0.5568756164881893], [1438523712.0, 41580000.0, 0.5463943467342681], [1438525440.0, 41600000.0, 0.5358267949789963], [1438527168.0, 41620000.0, 0.525174629961296], [1438528896.0, 41640000.0, 0.5144395337815074], [1438530624.0, 41660000.0, 0.5036232016357595], [1438532352.0, 41680000.0, 0.49272734154829084], [1438534080.0, 41700000.0, 0.4817536741017152], [1438535808.0, 41720000.0, 0.47070393216533635], [1438537536.0, 41740000.0, 0.45957986062148604], [1438539264.0, 41760000.0, 0.4483832160900311], [1438540992.0, 41780000.0, 0.43711576665093566], [1438542720.0, 41800000.0, 0.42577929156507616], [1438544448.0, 41820000.0, 0.4143755809932819], [1438546176.0, 41840000.0, 0.40290643571366114], [1438547904.0, 41860000.0, 0.39137366683720487], [1438549632.0, 41880000.0, 0.3797790955218043], [1438551360.0, 41900000.0, 0.36812455268467525], [1438553088.0, 41920000.0, 0.3564118787132521], [1438554816.0, 41940000.0, 0.34464292317451917], [1438556544.0, 41960000.0, 0.3328195445229895], [1438558272.0, 41980000.0, 0.3209436098072097], [1438560000.0, 42000000.0, 0.3090169943749484], [1438561728.0, 42020000.0, 0.29704158157703664], [1438563456.0, 42040000.0, 0.2850192624699786], [1438565184.0, 42060000.0, 0.27295193551732505], [1438566912.0, 42080000.0, 0.2608415062898975], [1438568640.0, 42100000.0, 0.24868988716485613], [1438570368.0, 42120000.0, 0.2364989970237268], [1438572096.0, 42140000.0, 0.2242707609493806], [1438573824.0, 42160000.0, 0.21200710992205482], [1438575552.0, 42180000.0, 0.19970998051440797], [1438577280.0, 42200000.0, 0.18738131458572635], [1438579008.0, 42220000.0, 0.17502305897527504], [1438580736.0, 42240000.0, 0.16263716519488336], [1438582464.0, 42260000.0, 0.1502255891207576], [1438584192.0, 42280000.0, 0.13779029068463938], [1438585920.0, 42300000.0, 0.12533323356430282], [1438587648.0, 42320000.0, 0.11285638487348103], [1438589376.0, 42340000.0, 0.100361714851215], [1438591104.0, 42360000.0, 0.08785119655074407], [1438592832.0, 42380000.0, 0.07532680552793085], [1438594560.0, 42400000.0, 0.06279051952931229], [1438596288.0, 42420000.0, 0.050244318179769244], [1438598016.0, 42440000.0, 0.03769018266993856], [1438599744.0, 42460000.0, 0.02513009544333518], [1438601472.0, 42480000.0, 0.012566039883351091], [1438603200.0, 42500000.0, -7.354070601250002e-16], [1438604928.0, 42520000.0, -0.01256603988334901], [1438606656.0, 42540000.0, -0.025130095443333098], [1438608384.0, 42560000.0, -0.03769018266993648], [1438610112.0, 42580000.0, -0.05024431817976717], [1438611840.0, 42600000.0, -0.06279051952931021], [1438613568.0, 42620000.0, -0.07532680552792878], [1438615296.0, 42640000.0, -0.087851196550742], [1438617024.0, 42660000.0, -0.10036171485121292], [1438618752.0, 42680000.0, -0.11285638487347896], [1438620480.0, 42700000.0, -0.12533323356430073], [1438622208.0, 42720000.0, -0.1377902906846373], [1438623936.0, 42740000.0, -0.15022558912075554], [1438625664.0, 42760000.0, -0.1626371651948813], [1438627392.0, 42780000.0, -0.17502305897527298], [1438629120.0, 42800000.0, -0.1873813145857243], [1438630848.0, 42820000.0, -0.19970998051440592], [1438632576.0, 42840000.0, -0.2120071099220528], [1438634304.0, 42860000.0, -0.22427076094937856], [1438636032.0, 42880000.0, -0.23649899702372476], [1438637760.0, 42900000.0, -0.2486898871648541], [1438639488.0, 42920000.0, -0.2608415062898955], [1438641216.0, 42940000.0, -0.27295193551732305], [1438642944.0, 42960000.0, -0.2850192624699766], [1438644672.0, 42980000.0, -0.29704158157703464], [1438646400.0, 43000000.0, -0.3090169943749464], [1438648128.0, 43020000.0, -0.32094360980720776], [1438649856.0, 43040000.0, -0.3328195445229875], [1438651584.0, 43060000.0, -0.3446429231745172], [1438653312.0, 43080000.0, -0.35641187871325014], [1438655040.0, 43100000.0, -0.36812455268467337], [1438656768.0, 43120000.0, -0.3797790955218024], [1438658496.0, 43140000.0, -0.3913736668372029], [1438660224.0, 43160000.0, -0.4029064357136592], [1438661952.0, 43180000.0, -0.41437558099328], [1438663680.0, 43200000.0, -0.42577929156507427], [1438665408.0, 43220000.0, -0.4371157666509338], [1438667136.0, 43240000.0, -0.4483832160900293], [1438668864.0, 43260000.0, -0.4595798606214842], [1438670592.0, 43280000.0, -0.4707039321653345], [1438672320.0, 43300000.0, -0.48175367410171344], [1438674048.0, 43320000.0, -0.492727341548289], [1438675776.0, 43340000.0, -0.5036232016357577], [1438677504.0, 43360000.0, -0.5144395337815056], [1438679232.0, 43380000.0, -0.5251746299612943], [1438680960.0, 43400000.0, -0.5358267949789945], [1438682688.0, 43420000.0, -0.5463943467342663], [1438684416.0, 43440000.0, -0.5568756164881876], [1438686144.0, 43460000.0, -0.5672689491267554], [1438687872.0, 43480000.0, -0.577572703422266], [1438689600.0, 43500000.0, -0.5877852522924708], [1438691328.0, 43520000.0, -0.5979049830575188], [1438693056.0, 43540000.0, -0.6079302976946047], [1438694784.0, 43560000.0, -0.6178596130903331], [1438696512.0, 43580000.0, -0.6276913612906986], [1438698240.0, 43600000.0, -0.63742398974869], [1438699968.0, 43620000.0, -0.647055961569444], [1438701696.0, 43640000.0, -0.6565857557529555], [1438703424.0, 43660000.0, -0.6660118674342501], [1438705152.0, 43680000.0, -0.675332808121025], [1438706880.0, 43700000.0, -0.6845471059286886], [1438708608.0, 43720000.0, -0.6936533058128044], [1438710336.0, 43740000.0, -0.7026499697988481], [1438712064.0, 43760000.0, -0.7115356772092862], [1438713792.0, 43780000.0, -0.7203090248879072], [1438715520.0, 43800000.0, -0.7289686274214113], [1438717248.0, 43820000.0, -0.7375131173581707], [1438718976.0, 43840000.0, -0.7459411454241832], [1438720704.0, 43860000.0, -0.7542513807361043], [1438722432.0, 43880000.0, -0.7624425110114479], [1438724160.0, 43900000.0, -0.7705132427757865], [1438725888.0, 43920000.0, -0.7784623015670247], [1438727616.0, 43940000.0, -0.7862884321366197], [1438729344.0, 43960000.0, -0.7939903986478335], [1438731072.0, 43980000.0, -0.8015669848708743], [1438732800.0, 44000000.0, -0.8090169943749489], [1438734528.0, 44020000.0, -0.8163392507171828], [1438736256.0, 44040000.0, -0.8235325976284259], [1438737984.0, 44060000.0, -0.8305958991958108], [1438739712.0, 44080000.0, -0.8375280400421433], [1438741440.0, 44100000.0, -0.8443279255020143], [1438743168.0, 44120000.0, -0.8509944817946907], [1438744896.0, 44140000.0, -0.8575266561936508], [1438746624.0, 44160000.0, -0.8639234171928352], [1438748352.0, 44180000.0, -0.8701837546695251], [1438750080.0, 44200000.0, -0.8763066800438627], [1438751808.0, 44220000.0, -0.8822912264349521], [1438753536.0, 44240000.0, -0.8881364488135446], [1438755264.0, 44260000.0, -0.8938414241512636], [1438756992.0, 44280000.0, -0.8994052515663704], [1438758720.0, 44300000.0, -0.9048270524660186], [1438760448.0, 44320000.0, -0.910105970684996], [1438762176.0, 44340000.0, -0.9152411726209175], [1438763904.0, 44360000.0, -0.9202318473658699], [1438765632.0, 44380000.0, -0.9250772068344574], [1438767360.0, 44400000.0, -0.9297764858882518], [1438769088.0, 44420000.0, -0.9343289424566121], [1438770816.0, 44440000.0, -0.938733857653874], [1438772544.0, 44460000.0, -0.9429905358928641], [1438774272.0, 44480000.0, -0.9470983049947448], [1438776000.0, 44500000.0, -0.9510565162951538], [1438777728.0, 44520000.0, -0.954864544746643], [1438779456.0, 44540000.0, -0.9585217890173746], [1438781184.0, 44560000.0, -0.9620276715860864], [1438782912.0, 44580000.0, -0.9653816388332742], [1438784640.0, 44600000.0, -0.9685831611286312], [1438786368.0, 44620000.0, -0.971631732914673], [1438788096.0, 44640000.0, -0.9745268727865777], [1438789824.0, 44660000.0, -0.9772681235681938], [1438791552.0, 44680000.0, -0.9798550523842463], [1438793280.0, 44700000.0, -0.982287250728688], [1438795008.0, 44720000.0, -0.9845643345292059], [1438796736.0, 44740000.0, -0.9866859442078678], [1438798464.0, 44760000.0, -0.9886517447379136], [1438800192.0, 44780000.0, -0.9904614256966507], [1438801920.0, 44800000.0, -0.9921147013144782], [1438803648.0, 44820000.0, -0.9936113105200083], [1438805376.0, 44840000.0, -0.9949510169813], [1438807104.0, 44860000.0, -0.9961336091431722], [1438808832.0, 44880000.0, -0.9971589002606139], [1438810560.0, 44900000.0, -0.9980267284282716], [1438812288.0, 44920000.0, -0.9987369566060175], [1438814016.0, 44940000.0, -0.9992894726405892], [1438815744.0, 44960000.0, -0.9996841892832999], [1438817472.0, 44980000.0, -0.9999210442038161], [1438819200.0, 45000000.0, -1.0], [1438820928.0, 45020000.0, -0.9999210442038161], [1438822656.0, 45040000.0, -0.9996841892833], [1438824384.0, 45060000.0, -0.9992894726405892], [1438826112.0, 45080000.0, -0.9987369566060176], [1438827840.0, 45100000.0, -0.9980267284282717], [1438829568.0, 45120000.0, -0.9971589002606142], [1438831296.0, 45140000.0, -0.9961336091431724], [1438833024.0, 45160000.0, -0.9949510169813002], [1438834752.0, 45180000.0, -0.9936113105200085], [1438836480.0, 45200000.0, -0.9921147013144785], [1438838208.0, 45220000.0, -0.9904614256966511], [1438839936.0, 45240000.0, -0.988651744737914], [1438841664.0, 45260000.0, -0.9866859442078681], [1438843392.0, 45280000.0, -0.9845643345292062], [1438845120.0, 45300000.0, -0.9822872507286884], [1438846848.0, 45320000.0, -0.9798550523842467], [1438848576.0, 45340000.0, -0.9772681235681943], [1438850304.0, 45360000.0, -0.9745268727865781], [1438852032.0, 45380000.0, -0.9716317329146735], [1438853760.0, 45400000.0, -0.9685831611286317], [1438855488.0, 45420000.0, -0.9653816388332748], [1438857216.0, 45440000.0, -0.962027671586087], [1438858944.0, 45460000.0, -0.9585217890173753], [1438860672.0, 45480000.0, -0.9548645447466436], [1438862400.0, 45500000.0, -0.9510565162951544], [1438864128.0, 45520000.0, -0.9470983049947455], [1438865856.0, 45540000.0, -0.9429905358928647], [1438867584.0, 45560000.0, -0.9387338576538746], [1438869312.0, 45580000.0, -0.9343289424566129], [1438871040.0, 45600000.0, -0.9297764858882526], [1438872768.0, 45620000.0, -0.9250772068344583], [1438874496.0, 45640000.0, -0.9202318473658708], [1438876224.0, 45660000.0, -0.9152411726209184], [1438877952.0, 45680000.0, -0.9101059706849969], [1438879680.0, 45700000.0, -0.9048270524660196], [1438881408.0, 45720000.0, -0.8994052515663714], [1438883136.0, 45740000.0, -0.8938414241512646], [1438884864.0, 45760000.0, -0.8881364488135456], [1438886592.0, 45780000.0, -0.8822912264349531], [1438888320.0, 45800000.0, -0.8763066800438638], [1438890048.0, 45820000.0, -0.8701837546695262], [1438891776.0, 45840000.0, -0.8639234171928363], [1438893504.0, 45860000.0, -0.8575266561936519], [1438895232.0, 45880000.0, -0.8509944817946918], [1438896960.0, 45900000.0, -0.8443279255020155], [1438898688.0, 45920000.0, -0.8375280400421445], [1438900416.0, 45940000.0, -0.830595899195812], [1438902144.0, 45960000.0, -0.8235325976284272], [1438903872.0, 45980000.0, -0.8163392507171842], [1438905600.0, 46000000.0, -0.8090169943749502], [1438907328.0, 46020000.0, -0.8015669848708756], [1438909056.0, 46040000.0, -0.7939903986478348], [1438910784.0, 46060000.0, -0.786288432136621], [1438912512.0, 46080000.0, -0.7784623015670261], [1438914240.0, 46100000.0, -0.7705132427757879], [1438915968.0, 46120000.0, -0.7624425110114493], [1438917696.0, 46140000.0, -0.7542513807361058], [1438919424.0, 46160000.0, -0.7459411454241847], [1438921152.0, 46180000.0, -0.7375131173581723], [1438922880.0, 46200000.0, -0.7289686274214128], [1438924608.0, 46220000.0, -0.7203090248879087], [1438926336.0, 46240000.0, -0.7115356772092878], [1438928064.0, 46260000.0, -0.7026499697988496], [1438929792.0, 46280000.0, -0.693653305812806], [1438931520.0, 46300000.0, -0.6845471059286903], [1438933248.0, 46320000.0, -0.6753328081210266], [1438934976.0, 46340000.0, -0.6660118674342518], [1438936704.0, 46360000.0, -0.6565857557529572], [1438938432.0, 46380000.0, -0.6470559615694457], [1438940160.0, 46400000.0, -0.6374239897486916], [1438941888.0, 46420000.0, -0.6276913612907004], [1438943616.0, 46440000.0, -0.6178596130903348], [1438945344.0, 46460000.0, -0.6079302976946065], [1438947072.0, 46480000.0, -0.5979049830575206], [1438948800.0, 46500000.0, -0.5877852522924726], [1438950528.0, 46520000.0, -0.5775727034222677], [1438952256.0, 46540000.0, -0.5672689491267573], [1438953984.0, 46560000.0, -0.5568756164881894], [1438955712.0, 46580000.0, -0.5463943467342682], [1438957440.0, 46600000.0, -0.5358267949789964], [1438959168.0, 46620000.0, -0.5251746299612962], [1438960896.0, 46640000.0, -0.5144395337815075], [1438962624.0, 46660000.0, -0.5036232016357596], [1438964352.0, 46680000.0, -0.49272734154829095], [1438966080.0, 46700000.0, -0.4817536741017153], [1438967808.0, 46720000.0, -0.47070393216533646], [1438969536.0, 46740000.0, -0.45957986062148615], [1438971264.0, 46760000.0, -0.44838321609003123], [1438972992.0, 46780000.0, -0.43711576665093577], [1438974720.0, 46800000.0, -0.42577929156507627], [1438976448.0, 46820000.0, -0.41437558099328203], [1438978176.0, 46840000.0, -0.40290643571366125], [1438979904.0, 46860000.0, -0.391373666837205], [1438981632.0, 46880000.0, -0.3797790955218044], [1438983360.0, 46900000.0, -0.3681245526846754], [1438985088.0, 46920000.0, -0.3564118787132522], [1438986816.0, 46940000.0, -0.3446429231745193], [1438988544.0, 46960000.0, -0.3328195445229896], [1438990272.0, 46980000.0, -0.3209436098072098], [1438992000.0, 47000000.0, -0.3090169943749485], [1438993728.0, 47020000.0, -0.29704158157703675], [1438995456.0, 47040000.0, -0.2850192624699787], [1438997184.0, 47060000.0, -0.27295193551732516], [1438998912.0, 47080000.0, -0.2608415062898976], [1439000640.0, 47100000.0, -0.24868988716485624], [1439002368.0, 47120000.0, -0.2364989970237269], [1439004096.0, 47140000.0, -0.22427076094938073], [1439005824.0, 47160000.0, -0.21200710992205493], [1439007552.0, 47180000.0, -0.19970998051440808], [1439009280.0, 47200000.0, -0.18738131458572646], [1439011008.0, 47220000.0, -0.17502305897527515], [1439012736.0, 47240000.0, -0.16263716519488347], [1439014464.0, 47260000.0, -0.1502255891207577], [1439016192.0, 47280000.0, -0.1377902906846395], [1439017920.0, 47300000.0, -0.12533323356430293], [1439019648.0, 47320000.0, -0.11285638487348114], [1439021376.0, 47340000.0, -0.10036171485121512], [1439023104.0, 47360000.0, -0.08785119655074419], [1439024832.0, 47380000.0, -0.07532680552793097], [1439026560.0, 47400000.0, -0.0627905195293124], [1439028288.0, 47420000.0, -0.05024431817976937], [1439030016.0, 47440000.0, -0.037690182669938684], [1439031744.0, 47460000.0, -0.025130095443335304], [1439033472.0, 47480000.0, -0.012566039883351213], [1439035200.0, 47500000.0, -2.939771298590236e-15], [1439036928.0, 47520000.0, 0.012566039883348886], [1439038656.0, 47540000.0, 0.025130095443332976], [1439040384.0, 47560000.0, 0.03769018266993636], [1439042112.0, 47580000.0, 0.050244318179767045], [1439043840.0, 47600000.0, 0.06279051952931008], [1439045568.0, 47620000.0, 0.07532680552792866], [1439047296.0, 47640000.0, 0.08785119655074188], [1439049024.0, 47660000.0, 0.10036171485121281], [1439050752.0, 47680000.0, 0.11285638487347883], [1439052480.0, 47700000.0, 0.12533323356430062], [1439054208.0, 47720000.0, 0.1377902906846372], [1439055936.0, 47740000.0, 0.1502255891207554], [1439057664.0, 47760000.0, 0.1626371651948812], [1439059392.0, 47780000.0, 0.17502305897527287], [1439061120.0, 47800000.0, 0.18738131458572418], [1439062848.0, 47820000.0, 0.1997099805144058], [1439064576.0, 47840000.0, 0.21200710992205266], [1439066304.0, 47860000.0, 0.22427076094937845], [1439068032.0, 47880000.0, 0.23649899702372465], [1439069760.0, 47900000.0, 0.248689887164854], [1439071488.0, 47920000.0, 0.2608415062898954], [1439073216.0, 47940000.0, 0.27295193551732294], [1439074944.0, 47960000.0, 0.2850192624699765], [1439076672.0, 47980000.0, 0.29704158157703453], [1439078400.0, 48000000.0, 0.3090169943749463], [1439080128.0, 48020000.0, 0.32094360980720765], [1439081856.0, 48040000.0, 0.3328195445229874], [1439083584.0, 48060000.0, 0.3446429231745171], [1439085312.0, 48080000.0, 0.35641187871325003], [1439087040.0, 48100000.0, 0.36812455268467326], [1439088768.0, 48120000.0, 0.3797790955218022], [1439090496.0, 48140000.0, 0.3913736668372028], [1439092224.0, 48160000.0, 0.4029064357136591], [1439093952.0, 48180000.0, 0.41437558099327987], [1439095680.0, 48200000.0, 0.42577929156507416], [1439097408.0, 48220000.0, 0.4371157666509337], [1439099136.0, 48240000.0, 0.4483832160900292], [1439100864.0, 48260000.0, 0.4595798606214841], [1439102592.0, 48280000.0, 0.4707039321653344], [1439104320.0, 48300000.0, 0.4817536741017133], [1439106048.0, 48320000.0, 0.49272734154828896], [1439107776.0, 48340000.0, 0.5036232016357576], [1439109504.0, 48360000.0, 0.5144395337815055], [1439111232.0, 48380000.0, 0.5251746299612942], [1439112960.0, 48400000.0, 0.5358267949789944], [1439114688.0, 48420000.0, 0.5463943467342662], [1439116416.0, 48440000.0, 0.5568756164881875], [1439118144.0, 48460000.0, 0.5672689491267553], [1439119872.0, 48480000.0, 0.5775727034222659], [1439121600.0, 48500000.0, 0.5877852522924707], [1439123328.0, 48520000.0, 0.5979049830575187], [1439125056.0, 48540000.0, 0.6079302976946046], [1439126784.0, 48560000.0, 0.617859613090333], [1439128512.0, 48580000.0, 0.6276913612906985], [1439130240.0, 48600000.0, 0.6374239897486899], [1439131968.0, 48620000.0, 0.6470559615694439], [1439133696.0, 48640000.0, 0.6565857557529554], [1439135424.0, 48660000.0, 0.66601186743425], [1439137152.0, 48680000.0, 0.6753328081210249], [1439138880.0, 48700000.0, 0.6845471059286886], [1439140608.0, 48720000.0, 0.6936533058128043], [1439142336.0, 48740000.0, 0.702649969798848], [1439144064.0, 48760000.0, 0.7115356772092861], [1439145792.0, 48780000.0, 0.720309024887907], [1439147520.0, 48800000.0, 0.7289686274214112], [1439149248.0, 48820000.0, 0.7375131173581706], [1439150976.0, 48840000.0, 0.7459411454241831], [1439152704.0, 48860000.0, 0.7542513807361043], [1439154432.0, 48880000.0, 0.7624425110114478], [1439156160.0, 48900000.0, 0.7705132427757865], [1439157888.0, 48920000.0, 0.7784623015670247], [1439159616.0, 48940000.0, 0.7862884321366196], [1439161344.0, 48960000.0, 0.7939903986478334], [1439163072.0, 48980000.0, 0.8015669848708742], [1439164800.0, 49000000.0, 0.8090169943749488], [1439166528.0, 49020000.0, 0.8163392507171828], [1439168256.0, 49040000.0, 0.8235325976284259], [1439169984.0, 49060000.0, 0.8305958991958107], [1439171712.0, 49080000.0, 0.8375280400421432], [1439173440.0, 49100000.0, 0.8443279255020143], [1439175168.0, 49120000.0, 0.8509944817946906], [1439176896.0, 49140000.0, 0.8575266561936506], [1439178624.0, 49160000.0, 0.8639234171928352], [1439180352.0, 49180000.0, 0.8701837546695251], [1439182080.0, 49200000.0, 0.8763066800438627], [1439183808.0, 49220000.0, 0.8822912264349521], [1439185536.0, 49240000.0, 0.8881364488135446], [1439187264.0, 49260000.0, 0.8938414241512634], [1439188992.0, 49280000.0, 0.8994052515663704], [1439190720.0, 49300000.0, 0.9048270524660186], [1439192448.0, 49320000.0, 0.9101059706849959], [1439194176.0, 49340000.0, 0.9152411726209174], [1439195904.0, 49360000.0, 0.9202318473658699], [1439197632.0, 49380000.0, 0.9250772068344574], [1439199360.0, 49400000.0, 0.9297764858882518], [1439201088.0, 49420000.0, 0.9343289424566121], [1439202816.0, 49440000.0, 0.9387338576538738], [1439204544.0, 49460000.0, 0.942990535892864], [1439206272.0, 49480000.0, 0.9470983049947447], [1439208000.0, 49500000.0, 0.9510565162951538], [1439209728.0, 49520000.0, 0.9548645447466428], [1439211456.0, 49540000.0, 0.9585217890173746], [1439213184.0, 49560000.0, 0.9620276715860864], [1439214912.0, 49580000.0, 0.9653816388332741], [1439216640.0, 49600000.0, 0.9685831611286312], [1439218368.0, 49620000.0, 0.971631732914673], [1439220096.0, 49640000.0, 0.9745268727865777], [1439221824.0, 49660000.0, 0.9772681235681938], [1439223552.0, 49680000.0, 0.9798550523842463], [1439225280.0, 49700000.0, 0.9822872507286879], [1439227008.0, 49720000.0, 0.9845643345292059], [1439228736.0, 49740000.0, 0.9866859442078678], [1439230464.0, 49760000.0, 0.9886517447379136], [1439232192.0, 49780000.0, 0.9904614256966507], [1439233920.0, 49800000.0, 0.9921147013144782], [1439235648.0, 49820000.0, 0.9936113105200083], [1439237376.0, 49840000.0, 0.9949510169813], [1439239104.0, 49860000.0, 0.9961336091431722], [1439240832.0, 49880000.0, 0.9971589002606139], [1439242560.0, 49900000.0, 0.9980267284282716], [1439244288.0, 49920000.0, 0.9987369566060175], [1439246016.0, 49940000.0, 0.9992894726405892], [1439247744.0, 49960000.0, 0.9996841892832999], [1439249472.0, 49980000.0, 0.9999210442038161], [1439251200.0, 50000000.0, 1.0], [1439252928.0, 50020000.0, 0.9999210442038161], [1439254656.0, 50040000.0, 0.9996841892833], [1439256384.0, 50060000.0, 0.9992894726405892], [1439258112.0, 50080000.0, 0.9987369566060176], [1439259840.0, 50100000.0, 0.9980267284282717], [1439261568.0, 50120000.0, 0.9971589002606142], [1439263296.0, 50140000.0, 0.9961336091431724], [1439265024.0, 50160000.0, 0.9949510169813002], [1439266752.0, 50180000.0, 0.9936113105200085], [1439268480.0, 50200000.0, 0.9921147013144785], [1439270208.0, 50220000.0, 0.9904614256966511], [1439271936.0, 50240000.0, 0.988651744737914], [1439273664.0, 50260000.0, 0.9866859442078681], [1439275392.0, 50280000.0, 0.9845643345292062], [1439277120.0, 50300000.0, 0.9822872507286885], [1439278848.0, 50320000.0, 0.9798550523842467], [1439280576.0, 50340000.0, 0.9772681235681943], [1439282304.0, 50360000.0, 0.9745268727865782], [1439284032.0, 50380000.0, 0.9716317329146735], [1439285760.0, 50400000.0, 0.9685831611286317], [1439287488.0, 50420000.0, 0.9653816388332748], [1439289216.0, 50440000.0, 0.962027671586087], [1439290944.0, 50460000.0, 0.9585217890173753], [1439292672.0, 50480000.0, 0.9548645447466436], [1439294400.0, 50500000.0, 0.9510565162951545], [1439296128.0, 50520000.0, 0.9470983049947455], [1439297856.0, 50540000.0, 0.9429905358928649], [1439299584.0, 50560000.0, 0.9387338576538747], [1439301312.0, 50580000.0, 0.934328942456613], [1439303040.0, 50600000.0, 0.9297764858882527], [1439304768.0, 50620000.0, 0.9250772068344583], [1439306496.0, 50640000.0, 0.9202318473658708], [1439308224.0, 50660000.0, 0.9152411726209184], [1439309952.0, 50680000.0, 0.9101059706849969], [1439311680.0, 50700000.0, 0.9048270524660196], [1439313408.0, 50720000.0, 0.8994052515663714], [1439315136.0, 50740000.0, 0.8938414241512646], [1439316864.0, 50760000.0, 0.8881364488135457], [1439318592.0, 50780000.0, 0.8822912264349532], [1439320320.0, 50800000.0, 0.8763066800438638], [1439322048.0, 50820000.0, 0.8701837546695264], [1439323776.0, 50840000.0, 0.8639234171928364], [1439325504.0, 50860000.0, 0.8575266561936519], [1439327232.0, 50880000.0, 0.850994481794692], [1439328960.0, 50900000.0, 0.8443279255020155], [1439330688.0, 50920000.0, 0.8375280400421445], [1439332416.0, 50940000.0, 0.830595899195814], [1439334144.0, 50960000.0, 0.8235325976284292], [1439335872.0, 50980000.0, 0.8163392507171863], [1439337600.0, 51000000.0, 0.8090169943749502], [1439339328.0, 51020000.0, 0.8015669848708756], [1439341056.0, 51040000.0, 0.7939903986478348], [1439342784.0, 51060000.0, 0.7862884321366189], [1439344512.0, 51080000.0, 0.7784623015670239], [1439346240.0, 51100000.0, 0.7705132427757903], [1439347968.0, 51120000.0, 0.7624425110114494], [1439349696.0, 51140000.0, 0.7542513807361059], [1439351424.0, 51160000.0, 0.7459411454241848], [1439353152.0, 51180000.0, 0.7375131173581723], [1439354880.0, 51200000.0, 0.7289686274214104], [1439356608.0, 51220000.0, 0.7203090248879064], [1439358336.0, 51240000.0, 0.7115356772092853], [1439360064.0, 51260000.0, 0.7026499697988497], [1439361792.0, 51280000.0, 0.693653305812806], [1439363520.0, 51300000.0, 0.6845471059286904], [1439365248.0, 51320000.0, 0.6753328081210267], [1439366976.0, 51340000.0, 0.6660118674342492], [1439368704.0, 51360000.0, 0.6565857557529546], [1439370432.0, 51380000.0, 0.647055961569443], [1439372160.0, 51400000.0, 0.6374239897486945], [1439373888.0, 51420000.0, 0.6276913612907004], [1439375616.0, 51440000.0, 0.6178596130903349], [1439377344.0, 51460000.0, 0.6079302976946066], [1439379072.0, 51480000.0, 0.5979049830575207], [1439380800.0, 51500000.0, 0.5877852522924698], [1439382528.0, 51520000.0, 0.5775727034222707], [1439384256.0, 51540000.0, 0.5672689491267603], [1439385984.0, 51560000.0, 0.5568756164881925], [1439387712.0, 51580000.0, 0.5463943467342683], [1439389440.0, 51600000.0, 0.5358267949789964], [1439391168.0, 51620000.0, 0.5251746299612963], [1439392896.0, 51640000.0, 0.5144395337815076], [1439394624.0, 51660000.0, 0.5036232016357627], [1439396352.0, 51680000.0, 0.4927273415482942], [1439398080.0, 51700000.0, 0.48175367410171854], [1439399808.0, 51720000.0, 0.47070393216533657], [1439401536.0, 51740000.0, 0.45957986062148626], [1439403264.0, 51760000.0, 0.44838321609003134], [1439404992.0, 51780000.0, 0.4371157666509327], [1439406720.0, 51800000.0, 0.42577929156507316], [1439408448.0, 51820000.0, 0.41437558099328536], [1439410176.0, 51840000.0, 0.4029064357136646], [1439411904.0, 51860000.0, 0.3913736668372051], [1439413632.0, 51880000.0, 0.3797790955218045], [1439415360.0, 51900000.0, 0.36812455268467553], [1439417088.0, 51920000.0, 0.356411878713249], [1439418816.0, 51940000.0, 0.34464292317451606], [1439420544.0, 51960000.0, 0.33281954452298634], [1439422272.0, 51980000.0, 0.32094360980720993], [1439424000.0, 52000000.0, 0.3090169943749486], [1439425728.0, 52020000.0, 0.29704158157703686], [1439427456.0, 52040000.0, 0.28501926246997883], [1439429184.0, 52060000.0, 0.2729519355173219], [1439430912.0, 52080000.0, 0.26084150628989433], [1439432640.0, 52100000.0, 0.24868988716485294], [1439434368.0, 52120000.0, 0.23649899702373048], [1439436096.0, 52140000.0, 0.22427076094938084], [1439437824.0, 52160000.0, 0.21200710992205504], [1439439552.0, 52180000.0, 0.1997099805144082], [1439441280.0, 52200000.0, 0.18738131458572657], [1439443008.0, 52220000.0, 0.1750230589752718], [1439444736.0, 52240000.0, 0.1626371651948871], [1439446464.0, 52260000.0, 0.15022558912076134], [1439448192.0, 52280000.0, 0.13779029068464313], [1439449920.0, 52300000.0, 0.12533323356430304], [1439451648.0, 52320000.0, 0.11285638487348126], [1439453376.0, 52340000.0, 0.10036171485121524], [1439455104.0, 52360000.0, 0.08785119655074432], [1439456832.0, 52380000.0, 0.07532680552793464], [1439458560.0, 52400000.0, 0.06279051952931608], [1439460288.0, 52420000.0, 0.05024431817977304], [1439462016.0, 52440000.0, 0.0376901826699388], [1439463744.0, 52460000.0, 0.025130095443335426], [1439465472.0, 52480000.0, 0.012566039883351336], [1439467200.0, 52500000.0, -4.904777002955296e-16], [1439468928.0, 52520000.0, -0.012566039883352316], [1439470656.0, 52540000.0, -0.025130095443336404], [1439472384.0, 52560000.0, -0.03769018266993268], [1439474112.0, 52580000.0, -0.05024431817976692], [1439475840.0, 52600000.0, -0.06279051952930996], [1439477568.0, 52620000.0, -0.07532680552792853], [1439479296.0, 52640000.0, -0.08785119655074529], [1439481024.0, 52660000.0, -0.10036171485121623], [1439482752.0, 52680000.0, -0.11285638487348224], [1439484480.0, 52700000.0, -0.125333233564297], [1439486208.0, 52720000.0, -0.13779029068463708], [1439487936.0, 52740000.0, -0.1502255891207553], [1439489664.0, 52760000.0, -0.16263716519488106], [1439491392.0, 52780000.0, -0.17502305897527273], [1439493120.0, 52800000.0, -0.18738131458572754], [1439494848.0, 52820000.0, -0.19970998051440916], [1439496576.0, 52840000.0, -0.21200710992204908], [1439498304.0, 52860000.0, -0.22427076094937487], [1439500032.0, 52880000.0, -0.23649899702372454], [1439501760.0, 52900000.0, -0.24868988716485388], [1439503488.0, 52920000.0, -0.2608415062898953], [1439505216.0, 52940000.0, -0.27295193551732283], [1439506944.0, 52960000.0, -0.2850192624699798], [1439508672.0, 52980000.0, -0.29704158157703103], [1439510400.0, 53000000.0, -0.3090169943749428], [1439512128.0, 53020000.0, -0.32094360980720416], [1439513856.0, 53040000.0, -0.3328195445229873], [1439515584.0, 53060000.0, -0.34464292317451695], [1439517312.0, 53080000.0, -0.35641187871324986], [1439519040.0, 53100000.0, -0.3681245526846764], [1439520768.0, 53120000.0, -0.37977909552179884], [1439522496.0, 53140000.0, -0.39137366683719943], [1439524224.0, 53160000.0, -0.402906435713659], [1439525952.0, 53180000.0, -0.41437558099327976], [1439527680.0, 53200000.0, -0.42577929156507405], [1439529408.0, 53220000.0, -0.4371157666509336], [1439531136.0, 53240000.0, -0.44838321609003223], [1439532864.0, 53260000.0, -0.45957986062148715], [1439534592.0, 53280000.0, -0.4707039321653312], [1439536320.0, 53300000.0, -0.4817536741017132], [1439538048.0, 53320000.0, -0.49272734154828884], [1439539776.0, 53340000.0, -0.5036232016357575], [1439541504.0, 53360000.0, -0.5144395337815085], [1439543232.0, 53380000.0, -0.525174629961297], [1439544960.0, 53400000.0, -0.5358267949789973], [1439546688.0, 53420000.0, -0.5463943467342631], [1439548416.0, 53440000.0, -0.5568756164881874], [1439550144.0, 53460000.0, -0.5672689491267553], [1439551872.0, 53480000.0, -0.5775727034222657], [1439553600.0, 53500000.0, -0.5877852522924706], [1439555328.0, 53520000.0, -0.5979049830575215], [1439557056.0, 53540000.0, -0.6079302976946074], [1439558784.0, 53560000.0, -0.6178596130903301], [1439560512.0, 53580000.0, -0.6276913612906957], [1439562240.0, 53600000.0, -0.6374239897486897], [1439563968.0, 53620000.0, -0.6470559615694438], [1439565696.0, 53640000.0, -0.6565857557529553], [1439567424.0, 53660000.0, -0.66601186743425], [1439569152.0, 53680000.0, -0.6753328081210275], [1439570880.0, 53700000.0, -0.684547105928686], [1439572608.0, 53720000.0, -0.6936533058128017], [1439574336.0, 53740000.0, -0.7026499697988454], [1439576064.0, 53760000.0, -0.711535677209286], [1439577792.0, 53780000.0, -0.720309024887907], [1439579520.0, 53800000.0, -0.7289686274214111], [1439581248.0, 53820000.0, -0.7375131173581729], [1439582976.0, 53840000.0, -0.7459411454241807], [1439584704.0, 53860000.0, -0.7542513807361019], [1439586432.0, 53880000.0, -0.7624425110114454], [1439588160.0, 53900000.0, -0.7705132427757864], [1439589888.0, 53920000.0, -0.7784623015670246], [1439591616.0, 53940000.0, -0.7862884321366195], [1439593344.0, 53960000.0, -0.7939903986478355], [1439595072.0, 53980000.0, -0.8015669848708763], [1439596800.0, 54000000.0, -0.8090169943749467], [1439598528.0, 54020000.0, -0.8163392507171827], [1439600256.0, 54040000.0, -0.8235325976284258], [1439601984.0, 54060000.0, -0.8305958991958106], [1439603712.0, 54080000.0, -0.8375280400421432], [1439605440.0, 54100000.0, -0.8443279255020161], [1439607168.0, 54120000.0, -0.8509944817946924], [1439608896.0, 54140000.0, -0.8575266561936524], [1439610624.0, 54160000.0, -0.863923417192835], [1439612352.0, 54180000.0, -0.870183754669525], [1439614080.0, 54200000.0, -0.8763066800438626], [1439615808.0, 54220000.0, -0.882291226434952], [1439617536.0, 54240000.0, -0.8881364488135461], [1439619264.0, 54260000.0, -0.893841424151265], [1439620992.0, 54280000.0, -0.8994052515663687], [1439622720.0, 54300000.0, -0.904827052466017], [1439624448.0, 54320000.0, -0.9101059706849959], [1439626176.0, 54340000.0, -0.9152411726209174], [1439627904.0, 54360000.0, -0.9202318473658698], [1439629632.0, 54380000.0, -0.9250772068344573], [1439631360.0, 54400000.0, -0.929776485888253], [1439633088.0, 54420000.0, -0.9343289424566108], [1439634816.0, 54440000.0, -0.9387338576538726], [1439636544.0, 54460000.0, -0.9429905358928627], [1439638272.0, 54480000.0, -0.9470983049947447], [1439640000.0, 54500000.0, -0.9510565162951538], [1439641728.0, 54520000.0, -0.9548645447466428], [1439643456.0, 54540000.0, -0.9585217890173756], [1439645184.0, 54560000.0, -0.9620276715860854], [1439646912.0, 54580000.0, -0.9653816388332732], [1439648640.0, 54600000.0, -0.9685831611286303], [1439650368.0, 54620000.0, -0.971631732914673], [1439652096.0, 54640000.0, -0.9745268727865776], [1439653824.0, 54660000.0, -0.9772681235681937], [1439655552.0, 54680000.0, -0.979855052384247], [1439657280.0, 54700000.0, -0.9822872507286886], [1439659008.0, 54720000.0, -0.9845643345292052], [1439660736.0, 54740000.0, -0.9866859442078678], [1439662464.0, 54760000.0, -0.9886517447379136], [1439664192.0, 54780000.0, -0.9904614256966507], [1439665920.0, 54800000.0, -0.9921147013144782], [1439667648.0, 54820000.0, -0.9936113105200086], [1439669376.0, 54840000.0, -0.9949510169813003], [1439671104.0, 54860000.0, -0.9961336091431725], [1439672832.0, 54880000.0, -0.9971589002606139], [1439674560.0, 54900000.0, -0.9980267284282714], [1439676288.0, 54920000.0, -0.9987369566060174], [1439678016.0, 54940000.0, -0.9992894726405892], [1439679744.0, 54960000.0, -0.9996841892833], [1439681472.0, 54980000.0, -0.9999210442038161], [1439683200.0, 55000000.0, -1.0], [1439684928.0, 55020000.0, -0.9999210442038162], [1439686656.0, 55040000.0, -0.9996841892833002], [1439688384.0, 55060000.0, -0.9992894726405892], [1439690112.0, 55080000.0, -0.9987369566060176], [1439691840.0, 55100000.0, -0.9980267284282717], [1439693568.0, 55120000.0, -0.9971589002606142], [1439695296.0, 55140000.0, -0.9961336091431727], [1439697024.0, 55160000.0, -0.9949510169813006], [1439698752.0, 55180000.0, -0.993611310520009], [1439700480.0, 55200000.0, -0.9921147013144785], [1439702208.0, 55220000.0, -0.9904614256966511], [1439703936.0, 55240000.0, -0.9886517447379141], [1439705664.0, 55260000.0, -0.9866859442078683], [1439707392.0, 55280000.0, -0.9845643345292057], [1439709120.0, 55300000.0, -0.9822872507286892], [1439710848.0, 55320000.0, -0.9798550523842475], [1439712576.0, 55340000.0, -0.9772681235681943], [1439714304.0, 55360000.0, -0.9745268727865782], [1439716032.0, 55380000.0, -0.9716317329146735], [1439717760.0, 55400000.0, -0.968583161128631], [1439719488.0, 55420000.0, -0.9653816388332739], [1439721216.0, 55440000.0, -0.9620276715860862], [1439722944.0, 55460000.0, -0.9585217890173764], [1439724672.0, 55480000.0, -0.9548645447466436], [1439726400.0, 55500000.0, -0.9510565162951545], [1439728128.0, 55520000.0, -0.9470983049947456], [1439729856.0, 55540000.0, -0.9429905358928636], [1439731584.0, 55560000.0, -0.9387338576538735], [1439733312.0, 55580000.0, -0.9343289424566118], [1439735040.0, 55600000.0, -0.929776485888254], [1439736768.0, 55620000.0, -0.9250772068344583], [1439738496.0, 55640000.0, -0.9202318473658709], [1439740224.0, 55660000.0, -0.9152411726209185], [1439741952.0, 55680000.0, -0.910105970684997], [1439743680.0, 55700000.0, -0.9048270524660181], [1439745408.0, 55720000.0, -0.89940525156637], [1439747136.0, 55740000.0, -0.8938414241512662], [1439748864.0, 55760000.0, -0.8881364488135474], [1439750592.0, 55780000.0, -0.8822912264349532], [1439752320.0, 55800000.0, -0.8763066800438639], [1439754048.0, 55820000.0, -0.8701837546695264], [1439755776.0, 55840000.0, -0.8639234171928364], [1439757504.0, 55860000.0, -0.8575266561936538], [1439759232.0, 55880000.0, -0.8509944817946938], [1439760960.0, 55900000.0, -0.8443279255020175], [1439762688.0, 55920000.0, -0.8375280400421447], [1439764416.0, 55940000.0, -0.8305958991958121], [1439766144.0, 55960000.0, -0.8235325976284273], [1439767872.0, 55980000.0, -0.8163392507171843], [1439769600.0, 56000000.0, -0.8090169943749482], [1439771328.0, 56020000.0, -0.8015669848708779], [1439773056.0, 56040000.0, -0.7939903986478372], [1439774784.0, 56060000.0, -0.7862884321366211], [1439776512.0, 56080000.0, -0.7784623015670262], [1439778240.0, 56100000.0, -0.770513242775788], [1439779968.0, 56120000.0, -0.7624425110114472], [1439781696.0, 56140000.0, -0.7542513807361036], [1439783424.0, 56160000.0, -0.7459411454241824], [1439785152.0, 56180000.0, -0.7375131173581748], [1439786880.0, 56200000.0, -0.728968627421413], [1439788608.0, 56220000.0, -0.7203090248879089], [1439790336.0, 56240000.0, -0.7115356772092879], [1439792064.0, 56260000.0, -0.7026499697988473], [1439793792.0, 56280000.0, -0.6936533058128036], [1439795520.0, 56300000.0, -0.6845471059286878], [1439797248.0, 56320000.0, -0.6753328081210295], [1439798976.0, 56340000.0, -0.666011867434252], [1439800704.0, 56360000.0, -0.6565857557529574], [1439802432.0, 56380000.0, -0.6470559615694459], [1439804160.0, 56400000.0, -0.6374239897486919], [1439805888.0, 56420000.0, -0.6276913612906977], [1439807616.0, 56440000.0, -0.6178596130903322], [1439809344.0, 56460000.0, -0.6079302976946095], [1439811072.0, 56480000.0, -0.5979049830575236], [1439812800.0, 56500000.0, -0.5877852522924728], [1439814528.0, 56520000.0, -0.577572703422268], [1439816256.0, 56540000.0, -0.5672689491267574], [1439817984.0, 56560000.0, -0.5568756164881896], [1439819712.0, 56580000.0, -0.5463943467342655], [1439821440.0, 56600000.0, -0.5358267949789995], [1439823168.0, 56620000.0, -0.5251746299612994], [1439824896.0, 56640000.0, -0.5144395337815109], [1439826624.0, 56660000.0, -0.5036232016357598], [1439828352.0, 56680000.0, -0.4927273415482912], [1439830080.0, 56700000.0, -0.48175367410171555], [1439831808.0, 56720000.0, -0.4707039321653335], [1439833536.0, 56740000.0, -0.45957986062148953], [1439835264.0, 56760000.0, -0.4483832160900346], [1439836992.0, 56780000.0, -0.437115766650936], [1439838720.0, 56800000.0, -0.4257792915650765], [1439840448.0, 56820000.0, -0.41437558099328226], [1439842176.0, 56840000.0, -0.40290643571366147], [1439843904.0, 56860000.0, -0.39137366683720193], [1439845632.0, 56880000.0, -0.37977909552180134], [1439847360.0, 56900000.0, -0.3681245526846789], [1439849088.0, 56920000.0, -0.3564118787132524], [1439850816.0, 56940000.0, -0.3446429231745195], [1439852544.0, 56960000.0, -0.33281954452298984], [1439854272.0, 56980000.0, -0.3209436098072067], [1439856000.0, 57000000.0, -0.3090169943749454], [1439857728.0, 57020000.0, -0.2970415815770336], [1439859456.0, 57040000.0, -0.2850192624699824], [1439861184.0, 57060000.0, -0.27295193551732544], [1439862912.0, 57080000.0, -0.2608415062898979], [1439864640.0, 57100000.0, -0.2486898871648565], [1439866368.0, 57120000.0, -0.23649899702372715], [1439868096.0, 57140000.0, -0.2242707609493775], [1439869824.0, 57160000.0, -0.2120071099220517], [1439871552.0, 57180000.0, -0.1997099805144118], [1439873280.0, 57200000.0, -0.1873813145857302], [1439875008.0, 57220000.0, -0.1750230589752754], [1439876736.0, 57240000.0, -0.16263716519488372], [1439878464.0, 57260000.0, -0.15022558912075795], [1439880192.0, 57280000.0, -0.13779029068463974], [1439881920.0, 57300000.0, -0.12533323356429965], [1439883648.0, 57320000.0, -0.11285638487348491], [1439885376.0, 57340000.0, -0.1003617148512189], [1439887104.0, 57360000.0, -0.08785119655074797], [1439888832.0, 57380000.0, -0.07532680552793122], [1439890560.0, 57400000.0, -0.06279051952931265], [1439892288.0, 57420000.0, -0.05024431817976961], [1439894016.0, 57440000.0, -0.037690182669935374], [1439895744.0, 57460000.0, -0.0251300954433391], [1439897472.0, 57480000.0, -0.01256603988335501], [1439899200.0, 57500000.0, -3.1847006584197066e-15], [1439900928.0, 57520000.0, 0.012566039883348642], [1439902656.0, 57540000.0, 0.02513009544333273], [1439904384.0, 57560000.0, 0.03769018266993611], [1439906112.0, 57580000.0, 0.05024431817977035], [1439907840.0, 57600000.0, 0.06279051952931339], [1439909568.0, 57620000.0, 0.07532680552793196], [1439911296.0, 57640000.0, 0.08785119655074163], [1439913024.0, 57660000.0, 0.10036171485121256], [1439914752.0, 57680000.0, 0.11285638487347859], [1439916480.0, 57700000.0, 0.12533323356430037], [1439918208.0, 57720000.0, 0.13779029068464047], [1439919936.0, 57740000.0, 0.15022558912075867], [1439921664.0, 57760000.0, 0.16263716519488444], [1439923392.0, 57780000.0, 0.17502305897526912], [1439925120.0, 57800000.0, 0.18738131458572393], [1439926848.0, 57820000.0, 0.19970998051440556], [1439928576.0, 57840000.0, 0.21200710992205243], [1439930304.0, 57860000.0, 0.2242707609493782], [1439932032.0, 57880000.0, 0.23649899702372787], [1439933760.0, 57900000.0, 0.24868988716485033], [1439935488.0, 57920000.0, 0.2608415062898917], [1439937216.0, 57940000.0, 0.2729519355173193], [1439938944.0, 57960000.0, 0.2850192624699763], [1439940672.0, 57980000.0, 0.2970415815770343], [1439942400.0, 58000000.0, 0.30901699437494606], [1439944128.0, 58020000.0, 0.32094360980720743], [1439945856.0, 58040000.0, 0.33281954452298385], [1439947584.0, 58060000.0, 0.3446429231745135], [1439949312.0, 58080000.0, 0.3564118787132465], [1439951040.0, 58100000.0, 0.368124552684673], [1439952768.0, 58120000.0, 0.379779095521802], [1439954496.0, 58140000.0, 0.3913736668372026], [1439956224.0, 58160000.0, 0.40290643571366214], [1439957952.0, 58180000.0, 0.4143755809932829], [1439959680.0, 58200000.0, 0.4257792915650707], [1439961408.0, 58220000.0, 0.43711576665093027], [1439963136.0, 58240000.0, 0.44838321609002896], [1439964864.0, 58260000.0, 0.45957986062148387], [1439966592.0, 58280000.0, 0.4707039321653342], [1439968320.0, 58300000.0, 0.4817536741017162], [1439970048.0, 58320000.0, 0.4927273415482918], [1439971776.0, 58340000.0, 0.5036232016357604], [1439973504.0, 58360000.0, 0.5144395337815053], [1439975232.0, 58380000.0, 0.5251746299612939], [1439976960.0, 58400000.0, 0.5358267949789942], [1439978688.0, 58420000.0, 0.546394346734266], [1439980416.0, 58440000.0, 0.5568756164881903], [1439982144.0, 58460000.0, 0.5672689491267581], [1439983872.0, 58480000.0, 0.5775727034222685], [1439985600.0, 58500000.0, 0.5877852522924677], [1439987328.0, 58520000.0, 0.5979049830575185], [1439989056.0, 58540000.0, 0.6079302976946044], [1439990784.0, 58560000.0, 0.6178596130903328], [1439992512.0, 58580000.0, 0.6276913612906984], [1439994240.0, 58600000.0, 0.6374239897486924], [1439995968.0, 58620000.0, 0.647055961569441], [1439997696.0, 58640000.0, 0.6565857557529525], [1439999424.0, 58660000.0, 0.6660118674342472], [1440001152.0, 58680000.0, 0.6753328081210247], [1440002880.0, 58700000.0, 0.6845471059286884], [1440004608.0, 58720000.0, 0.6936533058128042], [1440006336.0, 58740000.0, 0.7026499697988479], [1440008064.0, 58760000.0, 0.7115356772092835], [1440009792.0, 58780000.0, 0.7203090248879045], [1440011520.0, 58800000.0, 0.7289686274214086], [1440013248.0, 58820000.0, 0.7375131173581705], [1440014976.0, 58840000.0, 0.745941145424183], [1440016704.0, 58860000.0, 0.7542513807361041], [1440018432.0, 58880000.0, 0.7624425110114477], [1440020160.0, 58900000.0, 0.7705132427757886], [1440021888.0, 58920000.0, 0.7784623015670222], [1440023616.0, 58940000.0, 0.7862884321366173], [1440025344.0, 58960000.0, 0.7939903986478333], [1440027072.0, 58980000.0, 0.8015669848708741], [1440028800.0, 59000000.0, 0.8090169943749487], [1440030528.0, 59020000.0, 0.8163392507171847], [1440032256.0, 59040000.0, 0.8235325976284278], [1440033984.0, 59060000.0, 0.8305958991958126], [1440035712.0, 59080000.0, 0.8375280400421412], [1440037440.0, 59100000.0, 0.8443279255020141], [1440039168.0, 59120000.0, 0.8509944817946905], [1440040896.0, 59140000.0, 0.8575266561936505], [1440042624.0, 59160000.0, 0.8639234171928368], [1440044352.0, 59180000.0, 0.8701837546695267], [1440046080.0, 59200000.0, 0.8763066800438643], [1440047808.0, 59220000.0, 0.8822912264349502], [1440049536.0, 59240000.0, 0.8881364488135445], [1440051264.0, 59260000.0, 0.8938414241512633], [1440052992.0, 59280000.0, 0.8994052515663703], [1440054720.0, 59300000.0, 0.9048270524660185], [1440056448.0, 59320000.0, 0.9101059706849972], [1440058176.0, 59340000.0, 0.9152411726209188], [1440059904.0, 59360000.0, 0.9202318473658684], [1440061632.0, 59380000.0, 0.9250772068344559], [1440063360.0, 59400000.0, 0.9297764858882517], [1440065088.0, 59420000.0, 0.934328942456612], [1440066816.0, 59440000.0, 0.9387338576538737], [1440068544.0, 59460000.0, 0.942990535892864], [1440070272.0, 59480000.0, 0.9470983049947435], [1440072000.0, 59500000.0, 0.9510565162951525], [1440073728.0, 59520000.0, 0.9548645447466417], [1440075456.0, 59540000.0, 0.9585217890173745], [1440077184.0, 59560000.0, 0.9620276715860863], [1440078912.0, 59580000.0, 0.9653816388332741], [1440080640.0, 59600000.0, 0.9685831611286311], [1440082368.0, 59620000.0, 0.9716317329146738], [1440084096.0, 59640000.0, 0.9745268727865768], [1440085824.0, 59660000.0, 0.9772681235681929], [1440087552.0, 59680000.0, 0.9798550523842462], [1440089280.0, 59700000.0, 0.9822872507286879], [1440091008.0, 59720000.0, 0.9845643345292058], [1440092736.0, 59740000.0, 0.9866859442078684], [1440094464.0, 59760000.0, 0.9886517447379142], [1440096192.0, 59780000.0, 0.9904614256966512], [1440097920.0, 59800000.0, 0.9921147013144778], [1440099648.0, 59820000.0, 0.9936113105200083], [1440101376.0, 59840000.0, 0.9949510169813], [1440103104.0, 59860000.0, 0.9961336091431722], [1440104832.0, 59880000.0, 0.9971589002606142], [1440106560.0, 59900000.0, 0.9980267284282717], [1440108288.0, 59920000.0, 0.9987369566060176], [1440110016.0, 59940000.0, 0.999289472640589], [1440111744.0, 59960000.0, 0.9996841892832999], [1440113472.0, 59980000.0, 0.9999210442038161], [1440115200.0, 60000000.0, 1.0], [1440116928.0, 60020000.0, 0.9999210442038161], [1440118656.0, 60040000.0, 0.9996841892833], [1440120384.0, 60060000.0, 0.9992894726405891], [1440122112.0, 60080000.0, 0.9987369566060177], [1440123840.0, 60100000.0, 0.9980267284282719], [1440125568.0, 60120000.0, 0.9971589002606144], [1440127296.0, 60140000.0, 0.9961336091431725], [1440129024.0, 60160000.0, 0.9949510169813002], [1440130752.0, 60180000.0, 0.9936113105200086], [1440132480.0, 60200000.0, 0.9921147013144781], [1440134208.0, 60220000.0, 0.9904614256966516], [1440135936.0, 60240000.0, 0.9886517447379146], [1440137664.0, 60260000.0, 0.9866859442078688], [1440139392.0, 60280000.0, 0.9845643345292063], [1440141120.0, 60300000.0, 0.9822872507286885], [1440142848.0, 60320000.0, 0.9798550523842469], [1440144576.0, 60340000.0, 0.9772681235681936], [1440146304.0, 60360000.0, 0.9745268727865775], [1440148032.0, 60380000.0, 0.9716317329146744], [1440149760.0, 60400000.0, 0.9685831611286319], [1440151488.0, 60420000.0, 0.9653816388332749], [1440153216.0, 60440000.0, 0.9620276715860872], [1440154944.0, 60460000.0, 0.9585217890173754], [1440156672.0, 60480000.0, 0.9548645447466426], [1440158400.0, 60500000.0, 0.9510565162951535], [1440160128.0, 60520000.0, 0.9470983049947445], [1440161856.0, 60540000.0, 0.9429905358928649], [1440163584.0, 60560000.0, 0.9387338576538747], [1440165312.0, 60580000.0, 0.934328942456613], [1440167040.0, 60600000.0, 0.9297764858882527], [1440168768.0, 60620000.0, 0.925077206834457], [1440170496.0, 60640000.0, 0.9202318473658696], [1440172224.0, 60660000.0, 0.91524117262092], [1440173952.0, 60680000.0, 0.9101059706849984], [1440175680.0, 60700000.0, 0.9048270524660197], [1440177408.0, 60720000.0, 0.8994052515663715], [1440179136.0, 60740000.0, 0.8938414241512647], [1440180864.0, 60760000.0, 0.8881364488135458], [1440182592.0, 60780000.0, 0.8822912264349516], [1440184320.0, 60800000.0, 0.8763066800438657], [1440186048.0, 60820000.0, 0.8701837546695281], [1440187776.0, 60840000.0, 0.8639234171928383], [1440189504.0, 60860000.0, 0.857526656193652], [1440191232.0, 60880000.0, 0.8509944817946921], [1440192960.0, 60900000.0, 0.8443279255020157], [1440194688.0, 60920000.0, 0.8375280400421428], [1440196416.0, 60940000.0, 0.8305958991958141], [1440198144.0, 60960000.0, 0.8235325976284295], [1440199872.0, 60980000.0, 0.8163392507171864], [1440201600.0, 61000000.0, 0.8090169943749503], [1440203328.0, 61020000.0, 0.8015669848708759], [1440205056.0, 61040000.0, 0.793990398647835], [1440206784.0, 61060000.0, 0.786288432136619], [1440208512.0, 61080000.0, 0.7784623015670241], [1440210240.0, 61100000.0, 0.7705132427757904], [1440211968.0, 61120000.0, 0.7624425110114496], [1440213696.0, 61140000.0, 0.7542513807361061], [1440215424.0, 61160000.0, 0.7459411454241849], [1440217152.0, 61180000.0, 0.7375131173581725], [1440218880.0, 61200000.0, 0.7289686274214106], [1440220608.0, 61220000.0, 0.7203090248879065], [1440222336.0, 61240000.0, 0.7115356772092855], [1440224064.0, 61260000.0, 0.7026499697988499], [1440225792.0, 61280000.0, 0.6936533058128063], [1440227520.0, 61300000.0, 0.6845471059286905], [1440229248.0, 61320000.0, 0.6753328081210269], [1440230976.0, 61340000.0, 0.6660118674342494], [1440232704.0, 61360000.0, 0.6565857557529547], [1440234432.0, 61380000.0, 0.6470559615694432], [1440236160.0, 61400000.0, 0.6374239897486947], [1440237888.0, 61420000.0, 0.6276913612907006], [1440239616.0, 61440000.0, 0.6178596130903351], [1440241344.0, 61460000.0, 0.6079302976946067], [1440243072.0, 61480000.0, 0.5979049830575209], [1440244800.0, 61500000.0, 0.58778525229247], [1440246528.0, 61520000.0, 0.577572703422271], [1440248256.0, 61540000.0, 0.5672689491267605], [1440249984.0, 61560000.0, 0.5568756164881927], [1440251712.0, 61580000.0, 0.5463943467342685], [1440253440.0, 61600000.0, 0.5358267949789967], [1440255168.0, 61620000.0, 0.5251746299612965], [1440256896.0, 61640000.0, 0.5144395337815079], [1440258624.0, 61660000.0, 0.5036232016357629], [1440260352.0, 61680000.0, 0.49272734154829434], [1440262080.0, 61700000.0, 0.48175367410171877], [1440263808.0, 61720000.0, 0.4707039321653368], [1440265536.0, 61740000.0, 0.4595798606214865], [1440267264.0, 61760000.0, 0.44838321609003157], [1440268992.0, 61780000.0, 0.43711576665093294], [1440270720.0, 61800000.0, 0.4257792915650734], [1440272448.0, 61820000.0, 0.4143755809932856], [1440274176.0, 61840000.0, 0.4029064357136648], [1440275904.0, 61860000.0, 0.3913736668372053], [1440277632.0, 61880000.0, 0.3797790955218047], [1440279360.0, 61900000.0, 0.36812455268467575], [1440281088.0, 61920000.0, 0.3564118787132492], [1440282816.0, 61940000.0, 0.3446429231745163], [1440284544.0, 61960000.0, 0.3328195445229866], [1440286272.0, 61980000.0, 0.3209436098072102], [1440288000.0, 62000000.0, 0.3090169943749489], [1440289728.0, 62020000.0, 0.2970415815770371], [1440291456.0, 62040000.0, 0.2850192624699791], [1440293184.0, 62060000.0, 0.2729519355173221], [1440294912.0, 62080000.0, 0.26084150628989455], [1440296640.0, 62100000.0, 0.24868988716485316], [1440298368.0, 62120000.0, 0.23649899702373073], [1440300096.0, 62140000.0, 0.2242707609493811], [1440301824.0, 62160000.0, 0.2120071099220553], [1440303552.0, 62180000.0, 0.19970998051440844], [1440305280.0, 62200000.0, 0.18738131458572682], [1440307008.0, 62220000.0, 0.175023058975272], [1440308736.0, 62240000.0, 0.16263716519488736], [1440310464.0, 62260000.0, 0.1502255891207616], [1440312192.0, 62280000.0, 0.13779029068464338], [1440313920.0, 62300000.0, 0.1253332335643033], [1440315648.0, 62320000.0, 0.11285638487348151], [1440317376.0, 62340000.0, 0.10036171485121549], [1440319104.0, 62360000.0, 0.08785119655074455], [1440320832.0, 62380000.0, 0.07532680552793489], [1440322560.0, 62400000.0, 0.06279051952931632], [1440324288.0, 62420000.0, 0.05024431817977328], [1440326016.0, 62440000.0, 0.03769018266993905], [1440327744.0, 62460000.0, 0.02513009544333567], [1440329472.0, 62480000.0, 0.01256603988335158], [1440331200.0, 62500000.0, -2.45548340466059e-16], [1440332928.0, 62520000.0, -0.012566039883352071], [1440334656.0, 62540000.0, -0.02513009544333616], [1440336384.0, 62560000.0, -0.03769018266993244], [1440338112.0, 62580000.0, -0.05024431817976668], [1440339840.0, 62600000.0, -0.06279051952930972], [1440341568.0, 62620000.0, -0.07532680552792828], [1440343296.0, 62640000.0, -0.08785119655074504], [1440345024.0, 62660000.0, -0.10036171485121598], [1440346752.0, 62680000.0, -0.112856384873482], [1440348480.0, 62700000.0, -0.12533323356429674], [1440350208.0, 62720000.0, -0.13779029068463683], [1440351936.0, 62740000.0, -0.15022558912075504], [1440353664.0, 62760000.0, -0.16263716519488083], [1440355392.0, 62780000.0, -0.1750230589752725], [1440357120.0, 62800000.0, -0.18738131458572732], [1440358848.0, 62820000.0, -0.1997099805144089], [1440360576.0, 62840000.0, -0.21200710992204883], [1440362304.0, 62860000.0, -0.22427076094937462], [1440364032.0, 62880000.0, -0.2364989970237243], [1440365760.0, 62900000.0, -0.24868988716485363], [1440367488.0, 62920000.0, -0.26084150628989505], [1440369216.0, 62940000.0, -0.2729519355173226], [1440370944.0, 62960000.0, -0.28501926246997955], [1440372672.0, 62980000.0, -0.2970415815770308], [1440374400.0, 63000000.0, -0.30901699437494257], [1440376128.0, 63020000.0, -0.32094360980720393], [1440377856.0, 63040000.0, -0.33281954452298707], [1440379584.0, 63060000.0, -0.3446429231745167], [1440381312.0, 63080000.0, -0.35641187871324964], [1440383040.0, 63100000.0, -0.3681245526846762], [1440384768.0, 63120000.0, -0.3797790955217986], [1440386496.0, 63140000.0, -0.3913736668371992], [1440388224.0, 63160000.0, -0.40290643571365875], [1440389952.0, 63180000.0, -0.41437558099327954], [1440391680.0, 63200000.0, -0.4257792915650738], [1440393408.0, 63220000.0, -0.4371157666509334], [1440395136.0, 63240000.0, -0.448383216090032], [1440396864.0, 63260000.0, -0.4595798606214869], [1440398592.0, 63280000.0, -0.47070393216533096], [1440400320.0, 63300000.0, -0.481753674101713], [1440402048.0, 63320000.0, -0.4927273415482886], [1440403776.0, 63340000.0, -0.5036232016357572], [1440405504.0, 63360000.0, -0.5144395337815083], [1440407232.0, 63380000.0, -0.5251746299612968], [1440408960.0, 63400000.0, -0.5358267949789971], [1440410688.0, 63420000.0, -0.546394346734263], [1440412416.0, 63440000.0, -0.5568756164881872], [1440414144.0, 63460000.0, -0.5672689491267551], [1440415872.0, 63480000.0, -0.5775727034222655], [1440417600.0, 63500000.0, -0.5877852522924705], [1440419328.0, 63520000.0, -0.5979049830575213], [1440421056.0, 63540000.0, -0.6079302976946072], [1440422784.0, 63560000.0, -0.6178596130903299], [1440424512.0, 63580000.0, -0.6276913612906955], [1440426240.0, 63600000.0, -0.6374239897486896], [1440427968.0, 63620000.0, -0.6470559615694436], [1440429696.0, 63640000.0, -0.6565857557529552], [1440431424.0, 63660000.0, -0.6660118674342498], [1440433152.0, 63680000.0, -0.6753328081210273], [1440434880.0, 63700000.0, -0.6845471059286857], [1440436608.0, 63720000.0, -0.6936533058128015], [1440438336.0, 63740000.0, -0.7026499697988452], [1440440064.0, 63760000.0, -0.7115356772092858], [1440441792.0, 63780000.0, -0.7203090248879068], [1440443520.0, 63800000.0, -0.7289686274214109], [1440445248.0, 63820000.0, -0.7375131173581728], [1440446976.0, 63840000.0, -0.7459411454241806], [1440448704.0, 63860000.0, -0.7542513807361018], [1440450432.0, 63880000.0, -0.7624425110114453], [1440452160.0, 63900000.0, -0.7705132427757861], [1440453888.0, 63920000.0, -0.7784623015670245], [1440455616.0, 63940000.0, -0.7862884321366194], [1440457344.0, 63960000.0, -0.7939903986478353], [1440459072.0, 63980000.0, -0.8015669848708761], [1440460800.0, 64000000.0, -0.8090169943749465], [1440462528.0, 64020000.0, -0.8163392507171826], [1440464256.0, 64040000.0, -0.8235325976284257], [1440465984.0, 64060000.0, -0.8305958991958104], [1440467712.0, 64080000.0, -0.837528040042143], [1440469440.0, 64100000.0, -0.844327925502016], [1440471168.0, 64120000.0, -0.8509944817946923], [1440472896.0, 64140000.0, -0.8575266561936523], [1440474624.0, 64160000.0, -0.8639234171928349], [1440476352.0, 64180000.0, -0.8701837546695249], [1440478080.0, 64200000.0, -0.8763066800438625], [1440479808.0, 64220000.0, -0.8822912264349518], [1440481536.0, 64240000.0, -0.888136448813546], [1440483264.0, 64260000.0, -0.8938414241512649], [1440484992.0, 64280000.0, -0.8994052515663686], [1440486720.0, 64300000.0, -0.9048270524660169], [1440488448.0, 64320000.0, -0.9101059706849958], [1440490176.0, 64340000.0, -0.9152411726209173], [1440491904.0, 64360000.0, -0.9202318473658698], [1440493632.0, 64380000.0, -0.9250772068344572], [1440495360.0, 64400000.0, -0.9297764858882529], [1440497088.0, 64420000.0, -0.9343289424566107], [1440498816.0, 64440000.0, -0.9387338576538725], [1440500544.0, 64460000.0, -0.9429905358928626], [1440502272.0, 64480000.0, -0.9470983049947446], [1440504000.0, 64500000.0, -0.9510565162951536], [1440505728.0, 64520000.0, -0.9548645447466428], [1440507456.0, 64540000.0, -0.9585217890173755], [1440509184.0, 64560000.0, -0.9620276715860853], [1440510912.0, 64580000.0, -0.9653816388332731], [1440512640.0, 64600000.0, -0.9685831611286302], [1440514368.0, 64620000.0, -0.9716317329146729], [1440516096.0, 64640000.0, -0.9745268727865776], [1440517824.0, 64660000.0, -0.9772681235681937], [1440519552.0, 64680000.0, -0.979855052384247], [1440521280.0, 64700000.0, -0.9822872507286886], [1440523008.0, 64720000.0, -0.9845643345292051], [1440524736.0, 64740000.0, -0.9866859442078677], [1440526464.0, 64760000.0, -0.9886517447379136], [1440528192.0, 64780000.0, -0.9904614256966507], [1440529920.0, 64800000.0, -0.9921147013144782], [1440531648.0, 64820000.0, -0.9936113105200086], [1440533376.0, 64840000.0, -0.9949510169813003], [1440535104.0, 64860000.0, -0.9961336091431725], [1440536832.0, 64880000.0, -0.9971589002606139], [1440538560.0, 64900000.0, -0.9980267284282714], [1440540288.0, 64920000.0, -0.9987369566060174], [1440542016.0, 64940000.0, -0.9992894726405891], [1440543744.0, 64960000.0, -0.9996841892833], [1440545472.0, 64980000.0, -0.9999210442038161], [1440547200.0, 65000000.0, -1.0], [1440548928.0, 65020000.0, -0.9999210442038162], [1440550656.0, 65040000.0, -0.9996841892833002], [1440552384.0, 65060000.0, -0.9992894726405893], [1440554112.0, 65080000.0, -0.9987369566060176], [1440555840.0, 65100000.0, -0.9980267284282717], [1440557568.0, 65120000.0, -0.9971589002606142], [1440559296.0, 65140000.0, -0.9961336091431727], [1440561024.0, 65160000.0, -0.9949510169813006], [1440562752.0, 65180000.0, -0.993611310520009], [1440564480.0, 65200000.0, -0.9921147013144785], [1440566208.0, 65220000.0, -0.9904614256966512], [1440567936.0, 65240000.0, -0.9886517447379141], [1440569664.0, 65260000.0, -0.9866859442078683], [1440571392.0, 65280000.0, -0.9845643345292057], [1440573120.0, 65300000.0, -0.9822872507286892], [1440574848.0, 65320000.0, -0.9798550523842475], [1440576576.0, 65340000.0, -0.9772681235681944], [1440578304.0, 65360000.0, -0.9745268727865782], [1440580032.0, 65380000.0, -0.9716317329146736], [1440581760.0, 65400000.0, -0.968583161128631], [1440583488.0, 65420000.0, -0.965381638833274], [1440585216.0, 65440000.0, -0.9620276715860862], [1440586944.0, 65460000.0, -0.9585217890173764], [1440588672.0, 65480000.0, -0.9548645447466437], [1440590400.0, 65500000.0, -0.9510565162951546], [1440592128.0, 65520000.0, -0.9470983049947456], [1440593856.0, 65540000.0, -0.9429905358928637], [1440595584.0, 65560000.0, -0.9387338576538736], [1440597312.0, 65580000.0, -0.9343289424566118], [1440599040.0, 65600000.0, -0.9297764858882541], [1440600768.0, 65620000.0, -0.9250772068344584], [1440602496.0, 65640000.0, -0.920231847365871], [1440604224.0, 65660000.0, -0.9152411726209185], [1440605952.0, 65680000.0, -0.9101059706849971], [1440607680.0, 65700000.0, -0.9048270524660182], [1440609408.0, 65720000.0, -0.8994052515663701], [1440611136.0, 65740000.0, -0.8938414241512663], [1440612864.0, 65760000.0, -0.8881364488135475], [1440614592.0, 65780000.0, -0.8822912264349534], [1440616320.0, 65800000.0, -0.876306680043864], [1440618048.0, 65820000.0, -0.8701837546695265], [1440619776.0, 65840000.0, -0.8639234171928366], [1440621504.0, 65860000.0, -0.857526656193654], [1440623232.0, 65880000.0, -0.850994481794694], [1440624960.0, 65900000.0, -0.8443279255020176], [1440626688.0, 65920000.0, -0.8375280400421448], [1440628416.0, 65940000.0, -0.8305958991958122], [1440630144.0, 65960000.0, -0.8235325976284275], [1440631872.0, 65980000.0, -0.8163392507171844], [1440633600.0, 66000000.0, -0.8090169943749483], [1440635328.0, 66020000.0, -0.801566984870878], [1440637056.0, 66040000.0, -0.7939903986478373], [1440638784.0, 66060000.0, -0.7862884321366214], [1440640512.0, 66080000.0, -0.7784623015670264], [1440642240.0, 66100000.0, -0.7705132427757883], [1440643968.0, 66120000.0, -0.7624425110114473], [1440645696.0, 66140000.0, -0.7542513807361038], [1440647424.0, 66160000.0, -0.7459411454241827], [1440649152.0, 66180000.0, -0.7375131173581749], [1440650880.0, 66200000.0, -0.7289686274214131], [1440652608.0, 66220000.0, -0.720309024887909], [1440654336.0, 66240000.0, -0.7115356772092881], [1440656064.0, 66260000.0, -0.7026499697988475], [1440657792.0, 66280000.0, -0.6936533058128038], [1440659520.0, 66300000.0, -0.6845471059286881], [1440661248.0, 66320000.0, -0.6753328081210296], [1440662976.0, 66340000.0, -0.6660118674342521], [1440664704.0, 66360000.0, -0.6565857557529575], [1440666432.0, 66380000.0, -0.647055961569446], [1440668160.0, 66400000.0, -0.6374239897486921], [1440669888.0, 66420000.0, -0.6276913612906979], [1440671616.0, 66440000.0, -0.6178596130903324], [1440673344.0, 66460000.0, -0.6079302976946097], [1440675072.0, 66480000.0, -0.5979049830575238], [1440676800.0, 66500000.0, -0.587785252292473], [1440678528.0, 66520000.0, -0.5775727034222681], [1440680256.0, 66540000.0, -0.5672689491267576], [1440681984.0, 66560000.0, -0.5568756164881898], [1440683712.0, 66580000.0, -0.5463943467342657], [1440685440.0, 66600000.0, -0.5358267949789998], [1440687168.0, 66620000.0, -0.5251746299612996], [1440688896.0, 66640000.0, -0.514439533781511], [1440690624.0, 66660000.0, -0.50362320163576], [1440692352.0, 66680000.0, -0.4927273415482914], [1440694080.0, 66700000.0, -0.48175367410171577], [1440695808.0, 66720000.0, -0.47070393216533374], [1440697536.0, 66740000.0, -0.45957986062148976], [1440699264.0, 66760000.0, -0.44838321609003484], [1440700992.0, 66780000.0, -0.4371157666509362], [1440702720.0, 66800000.0, -0.4257792915650767], [1440704448.0, 66820000.0, -0.4143755809932825], [1440706176.0, 66840000.0, -0.4029064357136617], [1440707904.0, 66860000.0, -0.39137366683720215], [1440709632.0, 66880000.0, -0.37977909552180156], [1440711360.0, 66900000.0, -0.36812455268467914], [1440713088.0, 66920000.0, -0.35641187871325264], [1440714816.0, 66940000.0, -0.3446429231745197], [1440716544.0, 66960000.0, -0.33281954452299006], [1440718272.0, 66980000.0, -0.32094360980720693], [1440720000.0, 67000000.0, -0.3090169943749456], [1440721728.0, 67020000.0, -0.2970415815770338], [1440723456.0, 67040000.0, -0.2850192624699826], [1440725184.0, 67060000.0, -0.27295193551732566], [1440726912.0, 67080000.0, -0.2608415062898981], [1440728640.0, 67100000.0, -0.24868988716485674], [1440730368.0, 67120000.0, -0.2364989970237274], [1440732096.0, 67140000.0, -0.22427076094937773], [1440733824.0, 67160000.0, -0.21200710992205193], [1440735552.0, 67180000.0, -0.19970998051441205], [1440737280.0, 67200000.0, -0.18738131458573043], [1440739008.0, 67220000.0, -0.17502305897527565], [1440740736.0, 67240000.0, -0.16263716519488397], [1440742464.0, 67260000.0, -0.1502255891207582], [1440744192.0, 67280000.0, -0.13779029068463997], [1440745920.0, 67300000.0, -0.1253332335642999], [1440747648.0, 67320000.0, -0.11285638487348516], [1440749376.0, 67340000.0, -0.10036171485121914], [1440751104.0, 67360000.0, -0.08785119655074822], [1440752832.0, 67380000.0, -0.07532680552793146], [1440754560.0, 67400000.0, -0.0627905195293129], [1440756288.0, 67420000.0, -0.050244318179769855], [1440758016.0, 67440000.0, -0.037690182669935623], [1440759744.0, 67460000.0, -0.025130095443339343], [1440761472.0, 67480000.0, -0.012566039883355255], [1440763200.0, 67500000.0, -3.4296300182491773e-15], [1440764928.0, 67520000.0, 0.012566039883348397], [1440766656.0, 67540000.0, 0.025130095443332487], [1440768384.0, 67560000.0, 0.037690182669935866], [1440770112.0, 67580000.0, 0.050244318179770105], [1440771840.0, 67600000.0, 0.06279051952931314], [1440773568.0, 67620000.0, 0.07532680552793171], [1440775296.0, 67640000.0, 0.08785119655074139], [1440777024.0, 67660000.0, 0.10036171485121233], [1440778752.0, 67680000.0, 0.11285638487347835], [1440780480.0, 67700000.0, 0.12533323356430012], [1440782208.0, 67720000.0, 0.13779029068464022], [1440783936.0, 67740000.0, 0.15022558912075842], [1440785664.0, 67760000.0, 0.16263716519488422], [1440787392.0, 67780000.0, 0.17502305897526887], [1440789120.0, 67800000.0, 0.18738131458572369], [1440790848.0, 67820000.0, 0.19970998051440533], [1440792576.0, 67840000.0, 0.21200710992205218], [1440794304.0, 67860000.0, 0.22427076094937798], [1440796032.0, 67880000.0, 0.23649899702372762], [1440797760.0, 67900000.0, 0.24868988716485008], [1440799488.0, 67920000.0, 0.2608415062898915], [1440801216.0, 67940000.0, 0.27295193551731906], [1440802944.0, 67960000.0, 0.28501926246997605], [1440804672.0, 67980000.0, 0.2970415815770341], [1440806400.0, 68000000.0, 0.30901699437494584], [1440808128.0, 68020000.0, 0.32094360980720715], [1440809856.0, 68040000.0, 0.3328195445229836], [1440811584.0, 68060000.0, 0.3446429231745133], [1440813312.0, 68080000.0, 0.3564118787132462], [1440815040.0, 68100000.0, 0.36812455268467276], [1440816768.0, 68120000.0, 0.3797790955218018], [1440818496.0, 68140000.0, 0.39137366683720237], [1440820224.0, 68160000.0, 0.4029064357136619], [1440821952.0, 68180000.0, 0.4143755809932827], [1440823680.0, 68200000.0, 0.4257792915650705], [1440825408.0, 68220000.0, 0.43711576665093005], [1440827136.0, 68240000.0, 0.44838321609002874], [1440828864.0, 68260000.0, 0.45957986062148365], [1440830592.0, 68280000.0, 0.47070393216533396], [1440832320.0, 68300000.0, 0.481753674101716], [1440834048.0, 68320000.0, 0.4927273415482916], [1440835776.0, 68340000.0, 0.5036232016357602], [1440837504.0, 68360000.0, 0.5144395337815051], [1440839232.0, 68380000.0, 0.5251746299612937], [1440840960.0, 68400000.0, 0.535826794978994], [1440842688.0, 68420000.0, 0.5463943467342658], [1440844416.0, 68440000.0, 0.5568756164881901], [1440846144.0, 68460000.0, 0.5672689491267578], [1440847872.0, 68480000.0, 0.5775727034222683], [1440849600.0, 68500000.0, 0.5877852522924675], [1440851328.0, 68520000.0, 0.5979049830575184], [1440853056.0, 68540000.0, 0.6079302976946043], [1440854784.0, 68560000.0, 0.6178596130903325], [1440856512.0, 68580000.0, 0.6276913612906981], [1440858240.0, 68600000.0, 0.6374239897486923], [1440859968.0, 68620000.0, 0.6470559615694408], [1440861696.0, 68640000.0, 0.6565857557529524], [1440863424.0, 68660000.0, 0.666011867434247], [1440865152.0, 68680000.0, 0.6753328081210246], [1440866880.0, 68700000.0, 0.6845471059286882], [1440868608.0, 68720000.0, 0.6936533058128039], [1440870336.0, 68740000.0, 0.7026499697988476], [1440872064.0, 68760000.0, 0.7115356772092832], [1440873792.0, 68780000.0, 0.7203090248879043], [1440875520.0, 68800000.0, 0.7289686274214084], [1440877248.0, 68820000.0, 0.7375131173581703], [1440878976.0, 68840000.0, 0.7459411454241828], [1440880704.0, 68860000.0, 0.754251380736104], [1440882432.0, 68880000.0, 0.7624425110114476], [1440884160.0, 68900000.0, 0.7705132427757884], [1440885888.0, 68920000.0, 0.7784623015670221], [1440887616.0, 68940000.0, 0.7862884321366171], [1440889344.0, 68960000.0, 0.793990398647833], [1440891072.0, 68980000.0, 0.8015669848708739], [1440892800.0, 69000000.0, 0.8090169943749486], [1440894528.0, 69020000.0, 0.8163392507171846], [1440896256.0, 69040000.0, 0.8235325976284276], [1440897984.0, 69060000.0, 0.8305958991958123], [1440899712.0, 69080000.0, 0.837528040042141], [1440901440.0, 69100000.0, 0.844327925502014], [1440903168.0, 69120000.0, 0.8509944817946904], [1440904896.0, 69140000.0, 0.8575266561936504], [1440906624.0, 69160000.0, 0.8639234171928367], [1440908352.0, 69180000.0, 0.8701837546695266], [1440910080.0, 69200000.0, 0.8763066800438641], [1440911808.0, 69220000.0, 0.8822912264349501], [1440913536.0, 69240000.0, 0.8881364488135444], [1440915264.0, 69260000.0, 0.8938414241512632], [1440916992.0, 69280000.0, 0.8994052515663702], [1440918720.0, 69300000.0, 0.9048270524660184], [1440920448.0, 69320000.0, 0.9101059706849972], [1440922176.0, 69340000.0, 0.9152411726209186], [1440923904.0, 69360000.0, 0.9202318473658684], [1440925632.0, 69380000.0, 0.9250772068344558], [1440927360.0, 69400000.0, 0.9297764858882516], [1440929088.0, 69420000.0, 0.9343289424566119], [1440930816.0, 69440000.0, 0.9387338576538737], [1440932544.0, 69460000.0, 0.9429905358928639], [1440934272.0, 69480000.0, 0.9470983049947435], [1440936000.0, 69500000.0, 0.9510565162951525], [1440937728.0, 69520000.0, 0.9548645447466417], [1440939456.0, 69540000.0, 0.9585217890173745], [1440941184.0, 69560000.0, 0.9620276715860863], [1440942912.0, 69580000.0, 0.965381638833274], [1440944640.0, 69600000.0, 0.9685831611286311], [1440946368.0, 69620000.0, 0.9716317329146736], [1440948096.0, 69640000.0, 0.9745268727865767], [1440949824.0, 69660000.0, 0.9772681235681929], [1440951552.0, 69680000.0, 0.9798550523842462], [1440953280.0, 69700000.0, 0.9822872507286879], [1440955008.0, 69720000.0, 0.9845643345292058], [1440956736.0, 69740000.0, 0.9866859442078683], [1440958464.0, 69760000.0, 0.9886517447379141], [1440960192.0, 69780000.0, 0.9904614256966512], [1440961920.0, 69800000.0, 0.9921147013144777], [1440963648.0, 69820000.0, 0.9936113105200082], [1440965376.0, 69840000.0, 0.9949510169813], [1440967104.0, 69860000.0, 0.9961336091431722], [1440968832.0, 69880000.0, 0.9971589002606142], [1440970560.0, 69900000.0, 0.9980267284282717], [1440972288.0, 69920000.0, 0.9987369566060176], [1440974016.0, 69940000.0, 0.999289472640589], [1440975744.0, 69960000.0, 0.9996841892832999], [1440977472.0, 69980000.0, 0.9999210442038161], [1440979200.0, 70000000.0, 1.0], [1440980928.0, 70020000.0, 0.9999210442038161], [1440982656.0, 70040000.0, 0.9996841892833], [1440984384.0, 70060000.0, 0.9992894726405891], [1440986112.0, 70080000.0, 0.9987369566060177], [1440987840.0, 70100000.0, 0.9980267284282719], [1440989568.0, 70120000.0, 0.9971589002606144], [1440991296.0, 70140000.0, 0.9961336091431725], [1440993024.0, 70160000.0, 0.9949510169813003], [1440994752.0, 70180000.0, 0.9936113105200086], [1440996480.0, 70200000.0, 0.9921147013144781], [1440998208.0, 70220000.0, 0.9904614256966516], [1440999936.0, 70240000.0, 0.9886517447379146], [1441001664.0, 70260000.0, 0.9866859442078688], [1441003392.0, 70280000.0, 0.9845643345292063], [1441005120.0, 70300000.0, 0.9822872507286885], [1441006848.0, 70320000.0, 0.9798550523842469], [1441008576.0, 70340000.0, 0.9772681235681936], [1441010304.0, 70360000.0, 0.9745268727865775], [1441012032.0, 70380000.0, 0.9716317329146745], [1441013760.0, 70400000.0, 0.9685831611286319], [1441015488.0, 70420000.0, 0.9653816388332749], [1441017216.0, 70440000.0, 0.9620276715860872], [1441018944.0, 70460000.0, 0.9585217890173754], [1441020672.0, 70480000.0, 0.9548645447466427], [1441022400.0, 70500000.0, 0.9510565162951535], [1441024128.0, 70520000.0, 0.9470983049947446], [1441025856.0, 70540000.0, 0.942990535892865], [1441027584.0, 70560000.0, 0.9387338576538748], [1441029312.0, 70580000.0, 0.9343289424566131], [1441031040.0, 70600000.0, 0.9297764858882528], [1441032768.0, 70620000.0, 0.9250772068344572], [1441034496.0, 70640000.0, 0.9202318473658697], [1441036224.0, 70660000.0, 0.9152411726209201], [1441037952.0, 70680000.0, 0.9101059706849985], [1441039680.0, 70700000.0, 0.9048270524660198], [1441041408.0, 70720000.0, 0.8994052515663716], [1441043136.0, 70740000.0, 0.8938414241512648], [1441044864.0, 70760000.0, 0.8881364488135459], [1441046592.0, 70780000.0, 0.8822912264349517], [1441048320.0, 70800000.0, 0.8763066800438658], [1441050048.0, 70820000.0, 0.8701837546695284], [1441051776.0, 70840000.0, 0.8639234171928384], [1441053504.0, 70860000.0, 0.8575266561936522], [1441055232.0, 70880000.0, 0.8509944817946922], [1441056960.0, 70900000.0, 0.8443279255020159], [1441058688.0, 70920000.0, 0.8375280400421429], [1441060416.0, 70940000.0, 0.8305958991958143], [1441062144.0, 70960000.0, 0.8235325976284296], [1441063872.0, 70980000.0, 0.8163392507171866], [1441065600.0, 71000000.0, 0.8090169943749506], [1441067328.0, 71020000.0, 0.801566984870876], [1441069056.0, 71040000.0, 0.7939903986478352], [1441070784.0, 71060000.0, 0.7862884321366193], [1441072512.0, 71080000.0, 0.7784623015670242], [1441074240.0, 71100000.0, 0.7705132427757906], [1441075968.0, 71120000.0, 0.7624425110114498], [1441077696.0, 71140000.0, 0.7542513807361062], [1441079424.0, 71160000.0, 0.7459411454241851], [1441081152.0, 71180000.0, 0.7375131173581726], [1441082880.0, 71200000.0, 0.7289686274214108], [1441084608.0, 71220000.0, 0.7203090248879067], [1441086336.0, 71240000.0, 0.7115356772092857], [1441088064.0, 71260000.0, 0.7026499697988501], [1441089792.0, 71280000.0, 0.6936533058128064], [1441091520.0, 71300000.0, 0.6845471059286907], [1441093248.0, 71320000.0, 0.6753328081210271], [1441094976.0, 71340000.0, 0.6660118674342496], [1441096704.0, 71360000.0, 0.656585755752955], [1441098432.0, 71380000.0, 0.6470559615694434], [1441100160.0, 71400000.0, 0.6374239897486949], [1441101888.0, 71420000.0, 0.6276913612907008], [1441103616.0, 71440000.0, 0.6178596130903353], [1441105344.0, 71460000.0, 0.6079302976946069], [1441107072.0, 71480000.0, 0.597904983057521], [1441108800.0, 71500000.0, 0.5877852522924703], [1441110528.0, 71520000.0, 0.5775727034222711], [1441112256.0, 71540000.0, 0.5672689491267607], [1441113984.0, 71560000.0, 0.5568756164881928], [1441115712.0, 71580000.0, 0.5463943467342687], [1441117440.0, 71600000.0, 0.5358267949789969], [1441119168.0, 71620000.0, 0.5251746299612966], [1441120896.0, 71640000.0, 0.5144395337815081], [1441122624.0, 71660000.0, 0.5036232016357631], [1441124352.0, 71680000.0, 0.49272734154829456], [1441126080.0, 71700000.0, 0.481753674101719], [1441127808.0, 71720000.0, 0.470703932165337], [1441129536.0, 71740000.0, 0.4595798606214867], [1441131264.0, 71760000.0, 0.4483832160900318], [1441132992.0, 71780000.0, 0.43711576665093316], [1441134720.0, 71800000.0, 0.4257792915650736], [1441136448.0, 71820000.0, 0.4143755809932858], [1441138176.0, 71840000.0, 0.402906435713665], [1441139904.0, 71860000.0, 0.39137366683720554], [1441141632.0, 71880000.0, 0.37977909552180494], [1441143360.0, 71900000.0, 0.368124552684676], [1441145088.0, 71920000.0, 0.3564118787132494], [1441146816.0, 71940000.0, 0.3446429231745165], [1441148544.0, 71960000.0, 0.33281954452298684], [1441150272.0, 71980000.0, 0.32094360980721043], [1441152000.0, 72000000.0, 0.3090169943749491], [1441153728.0, 72020000.0, 0.29704158157703736], [1441155456.0, 72040000.0, 0.28501926246997933], [1441157184.0, 72060000.0, 0.27295193551732233], [1441158912.0, 72080000.0, 0.2608415062898948], [1441160640.0, 72100000.0, 0.2486898871648534], [1441162368.0, 72120000.0, 0.23649899702373095], [1441164096.0, 72140000.0, 0.2242707609493813], [1441165824.0, 72160000.0, 0.21200710992205554], [1441167552.0, 72180000.0, 0.1997099805144087], [1441169280.0, 72200000.0, 0.18738131458572707], [1441171008.0, 72220000.0, 0.17502305897527226], [1441172736.0, 72240000.0, 0.16263716519488758], [1441174464.0, 72260000.0, 0.15022558912076184], [1441176192.0, 72280000.0, 0.13779029068464363], [1441177920.0, 72300000.0, 0.12533323356430354], [1441179648.0, 72320000.0, 0.11285638487348175], [1441181376.0, 72340000.0, 0.10036171485121573], [1441183104.0, 72360000.0, 0.0878511965507448], [1441184832.0, 72380000.0, 0.07532680552793512], [1441186560.0, 72400000.0, 0.06279051952931657], [1441188288.0, 72420000.0, 0.050244318179773526], [1441190016.0, 72440000.0, 0.037690182669939294], [1441191744.0, 72460000.0, 0.025130095443335915], [1441193472.0, 72480000.0, 0.012566039883351825], [1441195200.0, 72500000.0, -6.189806365883577e-19], [1441196928.0, 72520000.0, -0.012566039883351827], [1441198656.0, 72540000.0, -0.025130095443335915], [1441200384.0, 72560000.0, -0.037690182669932196], [1441202112.0, 72580000.0, -0.050244318179766434], [1441203840.0, 72600000.0, -0.06279051952930947], [1441205568.0, 72620000.0, -0.07532680552792805], [1441207296.0, 72640000.0, -0.0878511965507448], [1441209024.0, 72660000.0, -0.10036171485121573], [1441210752.0, 72680000.0, -0.11285638487348175], [1441212480.0, 72700000.0, -0.1253332335642965], [1441214208.0, 72720000.0, -0.13779029068463658], [1441215936.0, 72740000.0, -0.15022558912075482], [1441217664.0, 72760000.0, -0.16263716519488058], [1441219392.0, 72780000.0, -0.17502305897527226], [1441221120.0, 72800000.0, -0.18738131458572707], [1441222848.0, 72820000.0, -0.1997099805144087], [1441224576.0, 72840000.0, -0.2120071099220486], [1441226304.0, 72860000.0, -0.2242707609493744], [1441228032.0, 72880000.0, -0.23649899702372407], [1441229760.0, 72900000.0, -0.2486898871648534], [1441231488.0, 72920000.0, -0.2608415062898948], [1441233216.0, 72940000.0, -0.27295193551732233], [1441234944.0, 72960000.0, -0.28501926246997933], [1441236672.0, 72980000.0, -0.29704158157703053], [1441238400.0, 73000000.0, -0.30901699437494234], [1441240128.0, 73020000.0, -0.3209436098072037], [1441241856.0, 73040000.0, -0.33281954452298684], [1441243584.0, 73060000.0, -0.3446429231745165], [1441245312.0, 73080000.0, -0.3564118787132494], [1441247040.0, 73100000.0, -0.368124552684676], [1441248768.0, 73120000.0, -0.3797790955217984], [1441250496.0, 73140000.0, -0.391373666837199], [1441252224.0, 73160000.0, -0.40290643571365853], [1441253952.0, 73180000.0, -0.4143755809932793], [1441255680.0, 73200000.0, -0.4257792915650736], [1441257408.0, 73220000.0, -0.43711576665093316], [1441259136.0, 73240000.0, -0.4483832160900318], [1441260864.0, 73260000.0, -0.4595798606214867], [1441262592.0, 73280000.0, -0.47070393216533074], [1441264320.0, 73300000.0, -0.48175367410171277], [1441266048.0, 73320000.0, -0.4927273415482884], [1441267776.0, 73340000.0, -0.503623201635757], [1441269504.0, 73360000.0, -0.5144395337815081], [1441271232.0, 73380000.0, -0.5251746299612966], [1441272960.0, 73400000.0, -0.5358267949789969], [1441274688.0, 73420000.0, -0.5463943467342628], [1441276416.0, 73440000.0, -0.556875616488187], [1441278144.0, 73460000.0, -0.5672689491267549], [1441279872.0, 73480000.0, -0.5775727034222653], [1441281600.0, 73500000.0, -0.5877852522924703], [1441283328.0, 73520000.0, -0.597904983057521], [1441285056.0, 73540000.0, -0.6079302976946069], [1441286784.0, 73560000.0, -0.6178596130903297], [1441288512.0, 73580000.0, -0.6276913612906952], [1441290240.0, 73600000.0, -0.6374239897486894], [1441291968.0, 73620000.0, -0.6470559615694434], [1441293696.0, 73640000.0, -0.656585755752955], [1441295424.0, 73660000.0, -0.6660118674342496], [1441297152.0, 73680000.0, -0.6753328081210271], [1441298880.0, 73700000.0, -0.6845471059286855], [1441300608.0, 73720000.0, -0.6936533058128013], [1441302336.0, 73740000.0, -0.7026499697988451], [1441304064.0, 73760000.0, -0.7115356772092857], [1441305792.0, 73780000.0, -0.7203090248879067], [1441307520.0, 73800000.0, -0.7289686274214108], [1441309248.0, 73820000.0, -0.7375131173581726], [1441310976.0, 73840000.0, -0.7459411454241803], [1441312704.0, 73860000.0, -0.7542513807361015], [1441314432.0, 73880000.0, -0.7624425110114451], [1441316160.0, 73900000.0, -0.770513242775786], [1441317888.0, 73920000.0, -0.7784623015670242], [1441319616.0, 73940000.0, -0.7862884321366193], [1441321344.0, 73960000.0, -0.7939903986478352], [1441323072.0, 73980000.0, -0.801566984870876], [1441324800.0, 74000000.0, -0.8090169943749463], [1441326528.0, 74020000.0, -0.8163392507171825], [1441328256.0, 74040000.0, -0.8235325976284256], [1441329984.0, 74060000.0, -0.8305958991958103], [1441331712.0, 74080000.0, -0.8375280400421429], [1441333440.0, 74100000.0, -0.8443279255020159], [1441335168.0, 74120000.0, -0.8509944817946922], [1441336896.0, 74140000.0, -0.8575266561936522], [1441338624.0, 74160000.0, -0.8639234171928348], [1441340352.0, 74180000.0, -0.8701837546695248], [1441342080.0, 74200000.0, -0.8763066800438624], [1441343808.0, 74220000.0, -0.8822912264349517], [1441345536.0, 74240000.0, -0.8881364488135459], [1441347264.0, 74260000.0, -0.8938414241512648], [1441348992.0, 74280000.0, -0.8994052515663685], [1441350720.0, 74300000.0, -0.9048270524660168], [1441352448.0, 74320000.0, -0.9101059706849957], [1441354176.0, 74340000.0, -0.9152411726209172], [1441355904.0, 74360000.0, -0.9202318473658697], [1441357632.0, 74380000.0, -0.9250772068344572], [1441359360.0, 74400000.0, -0.9297764858882528], [1441361088.0, 74420000.0, -0.9343289424566106], [1441362816.0, 74440000.0, -0.9387338576538724], [1441364544.0, 74460000.0, -0.9429905358928626], [1441366272.0, 74480000.0, -0.9470983049947446], [1441368000.0, 74500000.0, -0.9510565162951535], [1441369728.0, 74520000.0, -0.9548645447466427], [1441371456.0, 74540000.0, -0.9585217890173754], [1441373184.0, 74560000.0, -0.9620276715860853], [1441374912.0, 74580000.0, -0.9653816388332731], [1441376640.0, 74600000.0, -0.9685831611286302], [1441378368.0, 74620000.0, -0.9716317329146729], [1441380096.0, 74640000.0, -0.9745268727865775], [1441381824.0, 74660000.0, -0.9772681235681936], [1441383552.0, 74680000.0, -0.9798550523842469], [1441385280.0, 74700000.0, -0.9822872507286885], [1441387008.0, 74720000.0, -0.9845643345292051], [1441388736.0, 74740000.0, -0.9866859442078677], [1441390464.0, 74760000.0, -0.9886517447379135], [1441392192.0, 74780000.0, -0.9904614256966506], [1441393920.0, 74800000.0, -0.9921147013144781], [1441395648.0, 74820000.0, -0.9936113105200086], [1441397376.0, 74840000.0, -0.9949510169813003], [1441399104.0, 74860000.0, -0.9961336091431725], [1441400832.0, 74880000.0, -0.9971589002606139], [1441402560.0, 74900000.0, -0.9980267284282714], [1441404288.0, 74920000.0, -0.9987369566060174], [1441406016.0, 74940000.0, -0.9992894726405891], [1441407744.0, 74960000.0, -0.9996841892833], [1441409472.0, 74980000.0, -0.9999210442038161], [1441411200.0, 75000000.0, -1.0], [1441412928.0, 75020000.0, -0.9999210442038162], [1441414656.0, 75040000.0, -0.9996841892833002], [1441416384.0, 75060000.0, -0.9992894726405893], [1441418112.0, 75080000.0, -0.9987369566060176], [1441419840.0, 75100000.0, -0.9980267284282717], [1441421568.0, 75120000.0, -0.9971589002606142], [1441423296.0, 75140000.0, -0.9961336091431728], [1441425024.0, 75160000.0, -0.9949510169813006], [1441426752.0, 75180000.0, -0.9936113105200091], [1441428480.0, 75200000.0, -0.9921147013144785], [1441430208.0, 75220000.0, -0.9904614256966512], [1441431936.0, 75240000.0, -0.9886517447379141], [1441433664.0, 75260000.0, -0.9866859442078683], [1441435392.0, 75280000.0, -0.9845643345292058], [1441437120.0, 75300000.0, -0.9822872507286893], [1441438848.0, 75320000.0, -0.9798550523842476], [1441440576.0, 75340000.0, -0.9772681235681944], [1441442304.0, 75360000.0, -0.9745268727865783], [1441444032.0, 75380000.0, -0.9716317329146736], [1441445760.0, 75400000.0, -0.9685831611286311], [1441447488.0, 75420000.0, -0.965381638833274], [1441449216.0, 75440000.0, -0.9620276715860863], [1441450944.0, 75460000.0, -0.9585217890173765], [1441452672.0, 75480000.0, -0.9548645447466438], [1441454400.0, 75500000.0, -0.9510565162951546], [1441456128.0, 75520000.0, -0.9470983049947457], [1441457856.0, 75540000.0, -0.9429905358928639], [1441459584.0, 75560000.0, -0.9387338576538737], [1441461312.0, 75580000.0, -0.9343289424566119], [1441463040.0, 75600000.0, -0.9297764858882541], [1441464768.0, 75620000.0, -0.9250772068344585], [1441466496.0, 75640000.0, -0.9202318473658712], [1441468224.0, 75660000.0, -0.9152411726209186], [1441469952.0, 75680000.0, -0.9101059706849971], [1441471680.0, 75700000.0, -0.9048270524660184], [1441473408.0, 75720000.0, -0.8994052515663702], [1441475136.0, 75740000.0, -0.8938414241512664], [1441476864.0, 75760000.0, -0.8881364488135476], [1441478592.0, 75780000.0, -0.8822912264349535], [1441480320.0, 75800000.0, -0.8763066800438641], [1441482048.0, 75820000.0, -0.8701837546695266], [1441483776.0, 75840000.0, -0.8639234171928367], [1441485504.0, 75860000.0, -0.8575266561936541], [1441487232.0, 75880000.0, -0.8509944817946941], [1441488960.0, 75900000.0, -0.8443279255020177], [1441490688.0, 75920000.0, -0.8375280400421449], [1441492416.0, 75940000.0, -0.8305958991958123], [1441494144.0, 75960000.0, -0.8235325976284276], [1441495872.0, 75980000.0, -0.8163392507171846], [1441497600.0, 76000000.0, -0.8090169943749486], [1441499328.0, 76020000.0, -0.8015669848708782], [1441501056.0, 76040000.0, -0.7939903986478374], [1441502784.0, 76060000.0, -0.7862884321366215], [1441504512.0, 76080000.0, -0.7784623015670266], [1441506240.0, 76100000.0, -0.7705132427757884], [1441507968.0, 76120000.0, -0.7624425110114476], [1441509696.0, 76140000.0, -0.754251380736104], [1441511424.0, 76160000.0, -0.7459411454241828], [1441513152.0, 76180000.0, -0.7375131173581752], [1441514880.0, 76200000.0, -0.7289686274214133], [1441516608.0, 76220000.0, -0.7203090248879093], [1441518336.0, 76240000.0, -0.7115356772092882], [1441520064.0, 76260000.0, -0.7026499697988476], [1441521792.0, 76280000.0, -0.6936533058128039], [1441523520.0, 76300000.0, -0.6845471059286882], [1441525248.0, 76320000.0, -0.6753328081210298], [1441526976.0, 76340000.0, -0.6660118674342523], [1441528704.0, 76360000.0, -0.6565857557529577], [1441530432.0, 76380000.0, -0.6470559615694462], [1441532160.0, 76400000.0, -0.6374239897486923], [1441533888.0, 76420000.0, -0.6276913612906981], [1441535616.0, 76440000.0, -0.6178596130903325], [1441537344.0, 76460000.0, -0.6079302976946098], [1441539072.0, 76480000.0, -0.597904983057524], [1441540800.0, 76500000.0, -0.5877852522924732], [1441542528.0, 76520000.0, -0.5775727034222683], [1441544256.0, 76540000.0, -0.5672689491267578], [1441545984.0, 76560000.0, -0.5568756164881901], [1441547712.0, 76580000.0, -0.5463943467342658], [1441549440.0, 76600000.0, -0.535826794979], [1441551168.0, 76620000.0, -0.5251746299612998], [1441552896.0, 76640000.0, -0.5144395337815112], [1441554624.0, 76660000.0, -0.5036232016357602], [1441556352.0, 76680000.0, -0.4927273415482916], [1441558080.0, 76700000.0, -0.481753674101716], [1441559808.0, 76720000.0, -0.47070393216533396], [1441561536.0, 76740000.0, -0.45957986062149], [1441563264.0, 76760000.0, -0.44838321609003506], [1441564992.0, 76780000.0, -0.43711576665093643], [1441566720.0, 76800000.0, -0.42577929156507693], [1441568448.0, 76820000.0, -0.4143755809932827], [1441570176.0, 76840000.0, -0.4029064357136619], [1441571904.0, 76860000.0, -0.39137366683720237], [1441573632.0, 76880000.0, -0.3797790955218018], [1441575360.0, 76900000.0, -0.36812455268467936], [1441577088.0, 76920000.0, -0.35641187871325286], [1441578816.0, 76940000.0, -0.34464292317451994], [1441580544.0, 76960000.0, -0.3328195445229903], [1441582272.0, 76980000.0, -0.32094360980720715], [1441584000.0, 77000000.0, -0.30901699437494584], [1441585728.0, 77020000.0, -0.2970415815770341], [1441587456.0, 77040000.0, -0.2850192624699828], [1441589184.0, 77060000.0, -0.2729519355173259], [1441590912.0, 77080000.0, -0.26084150628989833], [1441592640.0, 77100000.0, -0.24868988716485696], [1441594368.0, 77120000.0, -0.23649899702372762], [1441596096.0, 77140000.0, -0.22427076094937798], [1441597824.0, 77160000.0, -0.21200710992205218], [1441599552.0, 77180000.0, -0.19970998051441227], [1441601280.0, 77200000.0, -0.18738131458573068], [1441603008.0, 77220000.0, -0.17502305897527587], [1441604736.0, 77240000.0, -0.16263716519488422], [1441606464.0, 77260000.0, -0.15022558912075842], [1441608192.0, 77280000.0, -0.13779029068464022], [1441609920.0, 77300000.0, -0.12533323356430012], [1441611648.0, 77320000.0, -0.1128563848734854], [1441613376.0, 77340000.0, -0.10036171485121939], [1441615104.0, 77360000.0, -0.08785119655074847], [1441616832.0, 77380000.0, -0.07532680552793171], [1441618560.0, 77400000.0, -0.06279051952931314], [1441620288.0, 77420000.0, -0.050244318179770105], [1441622016.0, 77440000.0, -0.037690182669935866], [1441623744.0, 77460000.0, -0.02513009544333959], [1441625472.0, 77480000.0, -0.012566039883355501], [1441627200.0, 77500000.0, -3.674559378078648e-15], [1441628928.0, 77520000.0, 0.012566039883348151], [1441630656.0, 77540000.0, 0.02513009544333224], [1441632384.0, 77560000.0, 0.037690182669935623], [1441634112.0, 77580000.0, 0.05024431817976986], [1441635840.0, 77600000.0, 0.0627905195293129], [1441637568.0, 77620000.0, 0.07532680552793146], [1441639296.0, 77640000.0, 0.08785119655074114], [1441641024.0, 77660000.0, 0.10036171485121208], [1441642752.0, 77680000.0, 0.1128563848734781], [1441644480.0, 77700000.0, 0.1253332335642999], [1441646208.0, 77720000.0, 0.13779029068463997], [1441647936.0, 77740000.0, 0.1502255891207582], [1441649664.0, 77760000.0, 0.16263716519488397], [1441651392.0, 77780000.0, 0.17502305897526865], [1441653120.0, 77800000.0, 0.18738131458572346], [1441654848.0, 77820000.0, 0.19970998051440508], [1441656576.0, 77840000.0, 0.21200710992205193], [1441658304.0, 77860000.0, 0.22427076094937773], [1441660032.0, 77880000.0, 0.2364989970237274], [1441661760.0, 77900000.0, 0.24868988716484985], [1441663488.0, 77920000.0, 0.2608415062898912], [1441665216.0, 77940000.0, 0.27295193551731883], [1441666944.0, 77960000.0, 0.2850192624699758], [1441668672.0, 77980000.0, 0.2970415815770338], [1441670400.0, 78000000.0, 0.3090169943749456], [1441672128.0, 78020000.0, 0.32094360980720693], [1441673856.0, 78040000.0, 0.33281954452298335], [1441675584.0, 78060000.0, 0.34464292317451306], [1441677312.0, 78080000.0, 0.356411878713246], [1441679040.0, 78100000.0, 0.36812455268467253], [1441680768.0, 78120000.0, 0.37977909552180156], [1441682496.0, 78140000.0, 0.39137366683720215], [1441684224.0, 78160000.0, 0.4029064357136617], [1441685952.0, 78180000.0, 0.4143755809932825], [1441687680.0, 78200000.0, 0.4257792915650703], [1441689408.0, 78220000.0, 0.4371157666509298], [1441691136.0, 78240000.0, 0.4483832160900285], [1441692864.0, 78260000.0, 0.4595798606214834], [1441694592.0, 78280000.0, 0.47070393216533374], [1441696320.0, 78300000.0, 0.48175367410171577], [1441698048.0, 78320000.0, 0.4927273415482914], [1441699776.0, 78340000.0, 0.50362320163576], [1441701504.0, 78360000.0, 0.514439533781505], [1441703232.0, 78380000.0, 0.5251746299612935], [1441704960.0, 78400000.0, 0.5358267949789938], [1441706688.0, 78420000.0, 0.5463943467342657], [1441708416.0, 78440000.0, 0.5568756164881898], [1441710144.0, 78460000.0, 0.5672689491267576], [1441711872.0, 78480000.0, 0.5775727034222681], [1441713600.0, 78500000.0, 0.5877852522924673], [1441715328.0, 78520000.0, 0.5979049830575182], [1441717056.0, 78540000.0, 0.607930297694604], [1441718784.0, 78560000.0, 0.6178596130903324], [1441720512.0, 78580000.0, 0.6276913612906979], [1441722240.0, 78600000.0, 0.6374239897486921], [1441723968.0, 78620000.0, 0.6470559615694407], [1441725696.0, 78640000.0, 0.6565857557529522], [1441727424.0, 78660000.0, 0.6660118674342469], [1441729152.0, 78680000.0, 0.6753328081210244], [1441730880.0, 78700000.0, 0.6845471059286881], [1441732608.0, 78720000.0, 0.6936533058128038], [1441734336.0, 78740000.0, 0.7026499697988475], [1441736064.0, 78760000.0, 0.7115356772092831], [1441737792.0, 78780000.0, 0.7203090248879042], [1441739520.0, 78800000.0, 0.7289686274214082], [1441741248.0, 78820000.0, 0.7375131173581702], [1441742976.0, 78840000.0, 0.7459411454241827], [1441744704.0, 78860000.0, 0.7542513807361038], [1441746432.0, 78880000.0, 0.7624425110114473], [1441748160.0, 78900000.0, 0.7705132427757883], [1441749888.0, 78920000.0, 0.7784623015670219], [1441751616.0, 78940000.0, 0.7862884321366169], [1441753344.0, 78960000.0, 0.7939903986478329], [1441755072.0, 78980000.0, 0.8015669848708737], [1441756800.0, 79000000.0, 0.8090169943749483], [1441758528.0, 79020000.0, 0.8163392507171844], [1441760256.0, 79040000.0, 0.8235325976284275], [1441761984.0, 79060000.0, 0.8305958991958122], [1441763712.0, 79080000.0, 0.8375280400421409], [1441765440.0, 79100000.0, 0.8443279255020139], [1441767168.0, 79120000.0, 0.8509944817946903], [1441768896.0, 79140000.0, 0.8575266561936503], [1441770624.0, 79160000.0, 0.8639234171928366], [1441772352.0, 79180000.0, 0.8701837546695265], [1441774080.0, 79200000.0, 0.876306680043864], [1441775808.0, 79220000.0, 0.88229122643495], [1441777536.0, 79240000.0, 0.8881364488135443], [1441779264.0, 79260000.0, 0.8938414241512631], [1441780992.0, 79280000.0, 0.8994052515663701], [1441782720.0, 79300000.0, 0.9048270524660182], [1441784448.0, 79320000.0, 0.9101059706849971], [1441786176.0, 79340000.0, 0.9152411726209185], [1441787904.0, 79360000.0, 0.9202318473658683], [1441789632.0, 79380000.0, 0.9250772068344557], [1441791360.0, 79400000.0, 0.9297764858882515], [1441793088.0, 79420000.0, 0.9343289424566118], [1441794816.0, 79440000.0, 0.9387338576538736], [1441796544.0, 79460000.0, 0.9429905358928637], [1441798272.0, 79480000.0, 0.9470983049947433], [1441800000.0, 79500000.0, 0.9510565162951524], [1441801728.0, 79520000.0, 0.9548645447466416], [1441803456.0, 79540000.0, 0.9585217890173744], [1441805184.0, 79560000.0, 0.9620276715860862], [1441806912.0, 79580000.0, 0.965381638833274], [1441808640.0, 79600000.0, 0.968583161128631], [1441810368.0, 79620000.0, 0.9716317329146736], [1441812096.0, 79640000.0, 0.9745268727865767], [1441813824.0, 79660000.0, 0.9772681235681928], [1441815552.0, 79680000.0, 0.9798550523842461], [1441817280.0, 79700000.0, 0.9822872507286878], [1441819008.0, 79720000.0, 0.9845643345292057], [1441820736.0, 79740000.0, 0.9866859442078683], [1441822464.0, 79760000.0, 0.9886517447379141], [1441824192.0, 79780000.0, 0.9904614256966512], [1441825920.0, 79800000.0, 0.9921147013144777], [1441827648.0, 79820000.0, 0.9936113105200082], [1441829376.0, 79840000.0, 0.9949510169812998], [1441831104.0, 79860000.0, 0.9961336091431722], [1441832832.0, 79880000.0, 0.9971589002606142], [1441834560.0, 79900000.0, 0.9980267284282717], [1441836288.0, 79920000.0, 0.9987369566060176], [1441838016.0, 79940000.0, 0.999289472640589], [1441839744.0, 79960000.0, 0.9996841892832999], [1441841472.0, 79980000.0, 0.9999210442038161], [1441843200.0, 80000000.0, 1.0], [1441844928.0, 80020000.0, 0.9999210442038161], [1441846656.0, 80040000.0, 0.9996841892833], [1441848384.0, 80060000.0, 0.9992894726405891], [1441850112.0, 80080000.0, 0.9987369566060178], [1441851840.0, 80100000.0, 0.9980267284282719], [1441853568.0, 80120000.0, 0.9971589002606139], [1441855296.0, 80140000.0, 0.9961336091431732], [1441857024.0, 80160000.0, 0.9949510169813003], [1441858752.0, 80180000.0, 0.9936113105200078], [1441860480.0, 80200000.0, 0.9921147013144782], [1441862208.0, 80220000.0, 0.9904614256966517], [1441863936.0, 80240000.0, 0.9886517447379146], [1441865664.0, 80260000.0, 0.9866859442078689], [1441867392.0, 80280000.0, 0.9845643345292051], [1441869120.0, 80300000.0, 0.9822872507286899], [1441870848.0, 80320000.0, 0.979855052384247], [1441872576.0, 80340000.0, 0.9772681235681937], [1441874304.0, 80360000.0, 0.9745268727865776], [1441876032.0, 80380000.0, 0.9716317329146745], [1441877760.0, 80400000.0, 0.9685831611286337], [1441879488.0, 80420000.0, 0.965381638833275], [1441881216.0, 80440000.0, 0.9620276715860853], [1441882944.0, 80460000.0, 0.9585217890173775], [1441884672.0, 80480000.0, 0.9548645447466427], [1441886400.0, 80500000.0, 0.9510565162951536], [1441888128.0, 80520000.0, 0.9470983049947446], [1441889856.0, 80540000.0, 0.9429905358928651], [1441891584.0, 80560000.0, 0.9387338576538774], [1441893312.0, 80580000.0, 0.9343289424566132], [1441895040.0, 80600000.0, 0.9297764858882503], [1441896768.0, 80620000.0, 0.9250772068344599], [1441898496.0, 80640000.0, 0.9202318473658698], [1441900224.0, 80660000.0, 0.9152411726209173], [1441901952.0, 80680000.0, 0.9101059706849987], [1441903680.0, 80700000.0, 0.9048270524660199], [1441905408.0, 80720000.0, 0.8994052515663749], [1441907136.0, 80740000.0, 0.8938414241512649], [1441908864.0, 80760000.0, 0.8881364488135428], [1441910592.0, 80780000.0, 0.8822912264349552], [1441912320.0, 80800000.0, 0.8763066800438659], [1441914048.0, 80820000.0, 0.8701837546695249], [1441915776.0, 80840000.0, 0.8639234171928385], [1441917504.0, 80860000.0, 0.8575266561936523], [1441919232.0, 80880000.0, 0.8509944817946961], [1441920960.0, 80900000.0, 0.844327925502016], [1441922688.0, 80920000.0, 0.8375280400421391], [1441924416.0, 80940000.0, 0.8305958991958144], [1441926144.0, 80960000.0, 0.8235325976284297], [1441927872.0, 80980000.0, 0.8163392507171826], [1441929600.0, 81000000.0, 0.8090169943749507], [1441931328.0, 81020000.0, 0.8015669848708761], [1441933056.0, 81040000.0, 0.7939903986478396], [1441934784.0, 81060000.0, 0.7862884321366194], [1441936512.0, 81080000.0, 0.7784623015670245], [1441938240.0, 81100000.0, 0.7705132427757907], [1441939968.0, 81120000.0, 0.7624425110114499], [1441941696.0, 81140000.0, 0.7542513807361018], [1441943424.0, 81160000.0, 0.7459411454241852], [1441945152.0, 81180000.0, 0.7375131173581728], [1441946880.0, 81200000.0, 0.7289686274214158], [1441948608.0, 81220000.0, 0.7203090248879068], [1441950336.0, 81240000.0, 0.7115356772092858], [1441952064.0, 81260000.0, 0.7026499697988553], [1441953792.0, 81280000.0, 0.6936533058128066], [1441955520.0, 81300000.0, 0.6845471059286857], [1441957248.0, 81320000.0, 0.6753328081210273], [1441958976.0, 81340000.0, 0.6660118674342498], [1441960704.0, 81360000.0, 0.6565857557529605], [1441962432.0, 81380000.0, 0.6470559615694436], [1441964160.0, 81400000.0, 0.6374239897486896], [1441965888.0, 81420000.0, 0.6276913612907065], [1441967616.0, 81440000.0, 0.6178596130903354], [1441969344.0, 81460000.0, 0.6079302976946015], [1441971072.0, 81480000.0, 0.5979049830575213], [1441972800.0, 81500000.0, 0.5877852522924705], [1441974528.0, 81520000.0, 0.5775727034222713], [1441976256.0, 81540000.0, 0.5672689491267608], [1441977984.0, 81560000.0, 0.5568756164881872], [1441979712.0, 81580000.0, 0.5463943467342749], [1441981440.0, 81600000.0, 0.5358267949789971], [1441983168.0, 81620000.0, 0.5251746299612908], [1441984896.0, 81640000.0, 0.5144395337815083], [1441986624.0, 81660000.0, 0.5036232016357634], [1441988352.0, 81680000.0, 0.4927273415482948], [1441990080.0, 81700000.0, 0.4817536741017192], [1441991808.0, 81720000.0, 0.47070393216533096], [1441993536.0, 81740000.0, 0.45957986062149325], [1441995264.0, 81760000.0, 0.448383216090032], [1441996992.0, 81780000.0, 0.437115766650927], [1441998720.0, 81800000.0, 0.4257792915650738], [1442000448.0, 81820000.0, 0.41437558099328603], [1442002176.0, 81840000.0, 0.4029064357136718], [1442003904.0, 81860000.0, 0.39137366683720576], [1442005632.0, 81880000.0, 0.3797790955217986], [1442007360.0, 81900000.0, 0.3681245526846828], [1442009088.0, 81920000.0, 0.35641187871324964], [1442010816.0, 81940000.0, 0.3446429231745167], [1442012544.0, 81960000.0, 0.33281954452298707], [1442014272.0, 81980000.0, 0.32094360980721065], [1442016000.0, 82000000.0, 0.3090169943749561], [1442017728.0, 82020000.0, 0.2970415815770376], [1442019456.0, 82040000.0, 0.2850192624699727], [1442021184.0, 82060000.0, 0.27295193551732944], [1442022912.0, 82080000.0, 0.26084150628989505], [1442024640.0, 82100000.0, 0.24868988716485363], [1442026368.0, 82120000.0, 0.2364989970237312], [1442028096.0, 82140000.0, 0.22427076094938156], [1442029824.0, 82160000.0, 0.21200710992206273], [1442031552.0, 82180000.0, 0.1997099805144089], [1442033280.0, 82200000.0, 0.18738131458572033], [1442035008.0, 82220000.0, 0.1750230589752795], [1442036736.0, 82240000.0, 0.16263716519488783], [1442038464.0, 82260000.0, 0.15022558912075504], [1442040192.0, 82280000.0, 0.13779029068464385], [1442041920.0, 82300000.0, 0.1253332335643038], [1442043648.0, 82320000.0, 0.11285638487348906], [1442045376.0, 82340000.0, 0.10036171485121598], [1442047104.0, 82360000.0, 0.08785119655073796], [1442048832.0, 82380000.0, 0.07532680552793537], [1442050560.0, 82400000.0, 0.0627905195293168], [1442052288.0, 82420000.0, 0.05024431817976668], [1442054016.0, 82440000.0, 0.03769018266993954], [1442055744.0, 82460000.0, 0.02513009544333616], [1442057472.0, 82480000.0, 0.012566039883359175], [1442059200.0, 82500000.0, 2.443103791928823e-16], [1442060928.0, 82520000.0, -0.012566039883351582], [1442062656.0, 82540000.0, -0.025130095443335672], [1442064384.0, 82560000.0, -0.03769018266993195], [1442066112.0, 82580000.0, -0.05024431817975909], [1442067840.0, 82600000.0, -0.06279051952930922], [1442069568.0, 82620000.0, -0.07532680552793489], [1442071296.0, 82640000.0, -0.08785119655073748], [1442073024.0, 82660000.0, -0.10036171485121549], [1442074752.0, 82680000.0, -0.11285638487348151], [1442076480.0, 82700000.0, -0.12533323356429624], [1442078208.0, 82720000.0, -0.13779029068463633], [1442079936.0, 82740000.0, -0.15022558912074754], [1442081664.0, 82760000.0, -0.16263716519488033], [1442083392.0, 82780000.0, -0.175023058975279], [1442085120.0, 82800000.0, -0.18738131458571985], [1442086848.0, 82820000.0, -0.19970998051440844], [1442088576.0, 82840000.0, -0.2120071099220553], [1442090304.0, 82860000.0, -0.22427076094937415], [1442092032.0, 82880000.0, -0.23649899702372382], [1442093760.0, 82900000.0, -0.24868988716484627], [1442095488.0, 82920000.0, -0.26084150628989455], [1442097216.0, 82940000.0, -0.27295193551732894], [1442098944.0, 82960000.0, -0.2850192624699723], [1442100672.0, 82980000.0, -0.2970415815770303], [1442102400.0, 83000000.0, -0.3090169943749489], [1442104128.0, 83020000.0, -0.32094360980720343], [1442105856.0, 83040000.0, -0.3328195445229866], [1442107584.0, 83060000.0, -0.3446429231745096], [1442109312.0, 83080000.0, -0.3564118787132492], [1442111040.0, 83100000.0, -0.36812455268467575], [1442112768.0, 83120000.0, -0.37977909552179817], [1442114496.0, 83140000.0, -0.39137366683719876], [1442116224.0, 83160000.0, -0.4029064357136648], [1442117952.0, 83180000.0, -0.4143755809932791], [1442119680.0, 83200000.0, -0.4257792915650734], [1442121408.0, 83220000.0, -0.43711576665092655], [1442123136.0, 83240000.0, -0.44838321609003157], [1442124864.0, 83260000.0, -0.4595798606214865], [1442126592.0, 83280000.0, -0.4707039321653305], [1442128320.0, 83300000.0, -0.48175367410171255], [1442130048.0, 83320000.0, -0.49272734154829434], [1442131776.0, 83340000.0, -0.5036232016357568], [1442133504.0, 83360000.0, -0.5144395337815079], [1442135232.0, 83380000.0, -0.5251746299612904], [1442136960.0, 83400000.0, -0.5358267949789967], [1442138688.0, 83420000.0, -0.5463943467342685], [1442140416.0, 83440000.0, -0.5568756164881808], [1442142144.0, 83460000.0, -0.5672689491267546], [1442143872.0, 83480000.0, -0.577572703422271], [1442145600.0, 83500000.0, -0.58778525229247], [1442147328.0, 83520000.0, -0.5979049830575209], [1442149056.0, 83540000.0, -0.6079302976946012], [1442150784.0, 83560000.0, -0.6178596130903296], [1442152512.0, 83580000.0, -0.6276913612907006], [1442154240.0, 83600000.0, -0.6374239897486838], [1442155968.0, 83620000.0, -0.6470559615694432], [1442157696.0, 83640000.0, -0.6565857557529602], [1442159424.0, 83660000.0, -0.6660118674342494], [1442161152.0, 83680000.0, -0.6753328081210269], [1442162880.0, 83700000.0, -0.6845471059286854], [1442164608.0, 83720000.0, -0.6936533058128012], [1442166336.0, 83740000.0, -0.70264996979885], [1442168064.0, 83760000.0, -0.7115356772092805], [1442169792.0, 83780000.0, -0.7203090248879065], [1442171520.0, 83800000.0, -0.7289686274214154], [1442173248.0, 83820000.0, -0.7375131173581725], [1442174976.0, 83840000.0, -0.7459411454241802], [1442176704.0, 83860000.0, -0.7542513807361014], [1442178432.0, 83880000.0, -0.762442511011445], [1442180160.0, 83900000.0, -0.7705132427757904], [1442181888.0, 83920000.0, -0.7784623015670197], [1442183616.0, 83940000.0, -0.786288432136619], [1442185344.0, 83960000.0, -0.793990398647835], [1442187072.0, 83980000.0, -0.8015669848708759], [1442188800.0, 84000000.0, -0.8090169943749462], [1442190528.0, 84020000.0, -0.8163392507171782], [1442192256.0, 84040000.0, -0.8235325976284253], [1442193984.0, 84060000.0, -0.8305958991958141], [1442195712.0, 84080000.0, -0.8375280400421389], [1442197440.0, 84100000.0, -0.8443279255020157], [1442199168.0, 84120000.0, -0.8509944817946921], [1442200896.0, 84140000.0, -0.8575266561936521], [1442202624.0, 84160000.0, -0.8639234171928347], [1442204352.0, 84180000.0, -0.8701837546695211], [1442206080.0, 84200000.0, -0.8763066800438623], [1442207808.0, 84220000.0, -0.882291226434955], [1442209536.0, 84240000.0, -0.8881364488135425], [1442211264.0, 84260000.0, -0.8938414241512647], [1442212992.0, 84280000.0, -0.8994052515663715], [1442214720.0, 84300000.0, -0.9048270524660167], [1442216448.0, 84320000.0, -0.9101059706849955], [1442218176.0, 84340000.0, -0.9152411726209142], [1442219904.0, 84360000.0, -0.9202318473658696], [1442221632.0, 84380000.0, -0.9250772068344597], [1442223360.0, 84400000.0, -0.9297764858882501], [1442225088.0, 84420000.0, -0.9343289424566106], [1442226816.0, 84440000.0, -0.9387338576538748], [1442228544.0, 84460000.0, -0.9429905358928625], [1442230272.0, 84480000.0, -0.9470983049947445], [1442232000.0, 84500000.0, -0.9510565162951513], [1442233728.0, 84520000.0, -0.9548645447466426], [1442235456.0, 84540000.0, -0.9585217890173774], [1442237184.0, 84560000.0, -0.9620276715860852], [1442238912.0, 84580000.0, -0.965381638833273], [1442240640.0, 84600000.0, -0.9685831611286319], [1442242368.0, 84620000.0, -0.9716317329146728], [1442244096.0, 84640000.0, -0.9745268727865775], [1442245824.0, 84660000.0, -0.977268123568192], [1442247552.0, 84680000.0, -0.9798550523842469], [1442249280.0, 84700000.0, -0.9822872507286885], [1442251008.0, 84720000.0, -0.9845643345292051], [1442252736.0, 84740000.0, -0.9866859442078677], [1442254464.0, 84760000.0, -0.9886517447379146], [1442256192.0, 84780000.0, -0.9904614256966506], [1442257920.0, 84800000.0, -0.9921147013144781], [1442259648.0, 84820000.0, -0.9936113105200077], [1442261376.0, 84840000.0, -0.9949510169813002], [1442263104.0, 84860000.0, -0.9961336091431725], [1442264832.0, 84880000.0, -0.9971589002606134], [1442266560.0, 84900000.0, -0.9980267284282714], [1442268288.0, 84920000.0, -0.9987369566060177], [1442270016.0, 84940000.0, -0.9992894726405891], [1442271744.0, 84960000.0, -0.9996841892833], [1442273472.0, 84980000.0, -0.9999210442038161], [1442275200.0, 85000000.0, -1.0], [1442276928.0, 85020000.0, -0.9999210442038161], [1442278656.0, 85040000.0, -0.9996841892833002], [1442280384.0, 85060000.0, -0.9992894726405893], [1442282112.0, 85080000.0, -0.9987369566060179], [1442283840.0, 85100000.0, -0.9980267284282717], [1442285568.0, 85120000.0, -0.9971589002606136], [1442287296.0, 85140000.0, -0.9961336091431728], [1442289024.0, 85160000.0, -0.9949510169813006], [1442290752.0, 85180000.0, -0.9936113105200083], [1442292480.0, 85200000.0, -0.9921147013144787], [1442294208.0, 85220000.0, -0.9904614256966512], [1442295936.0, 85240000.0, -0.9886517447379152], [1442297664.0, 85260000.0, -0.9866859442078684], [1442299392.0, 85280000.0, -0.9845643345292058], [1442301120.0, 85300000.0, -0.9822872507286893], [1442302848.0, 85320000.0, -0.9798550523842476], [1442304576.0, 85340000.0, -0.9772681235681929], [1442306304.0, 85360000.0, -0.9745268727865783], [1442308032.0, 85380000.0, -0.9716317329146738], [1442309760.0, 85400000.0, -0.9685831611286329], [1442311488.0, 85420000.0, -0.9653816388332741], [1442313216.0, 85440000.0, -0.9620276715860863], [1442314944.0, 85460000.0, -0.9585217890173786], [1442316672.0, 85480000.0, -0.9548645447466438], [1442318400.0, 85500000.0, -0.9510565162951525], [1442320128.0, 85520000.0, -0.9470983049947458], [1442321856.0, 85540000.0, -0.942990535892864], [1442323584.0, 85560000.0, -0.9387338576538762], [1442325312.0, 85580000.0, -0.934328942456612], [1442327040.0, 85600000.0, -0.9297764858882517], [1442328768.0, 85620000.0, -0.9250772068344613], [1442330496.0, 85640000.0, -0.9202318473658713], [1442332224.0, 85660000.0, -0.9152411726209159], [1442333952.0, 85680000.0, -0.9101059706849972], [1442335680.0, 85700000.0, -0.9048270524660185], [1442337408.0, 85720000.0, -0.8994052515663734], [1442339136.0, 85740000.0, -0.8938414241512666], [1442340864.0, 85760000.0, -0.8881364488135445], [1442342592.0, 85780000.0, -0.8822912264349569], [1442344320.0, 85800000.0, -0.8763066800438643], [1442346048.0, 85820000.0, -0.8701837546695232], [1442347776.0, 85840000.0, -0.8639234171928368], [1442349504.0, 85860000.0, -0.8575266561936542], [1442351232.0, 85880000.0, -0.8509944817946943], [1442352960.0, 85900000.0, -0.844327925502018], [1442354688.0, 85920000.0, -0.8375280400421411], [1442356416.0, 85940000.0, -0.8305958991958164], [1442358144.0, 85960000.0, -0.8235325976284278], [1442359872.0, 85980000.0, -0.8163392507171806], [1442361600.0, 86000000.0, -0.8090169943749487], [1442363328.0, 86020000.0, -0.8015669848708783], [1442365056.0, 86040000.0, -0.7939903986478376], [1442366784.0, 86060000.0, -0.7862884321366217], [1442368512.0, 86080000.0, -0.7784623015670222], [1442370240.0, 86100000.0, -0.770513242775793], [1442371968.0, 86120000.0, -0.7624425110114477], [1442373696.0, 86140000.0, -0.7542513807361041], [1442375424.0, 86160000.0, -0.745941145424183], [1442377152.0, 86180000.0, -0.7375131173581753], [1442378880.0, 86200000.0, -0.7289686274214183], [1442380608.0, 86220000.0, -0.7203090248879094], [1442382336.0, 86240000.0, -0.7115356772092835], [1442384064.0, 86260000.0, -0.7026499697988529], [1442385792.0, 86280000.0, -0.6936533058128042], [1442387520.0, 86300000.0, -0.6845471059286884], [1442389248.0, 86320000.0, -0.67533280812103], [1442390976.0, 86340000.0, -0.6660118674342526], [1442392704.0, 86360000.0, -0.6565857557529633], [1442394432.0, 86380000.0, -0.6470559615694464], [1442396160.0, 86400000.0, -0.637423989748687], [1442397888.0, 86420000.0, -0.6276913612907038], [1442399616.0, 86440000.0, -0.6178596130903328], [1442401344.0, 86460000.0, -0.6079302976946044], [1442403072.0, 86480000.0, -0.5979049830575243], [1442404800.0, 86500000.0, -0.5877852522924734], [1442406528.0, 86520000.0, -0.5775727034222743], [1442408256.0, 86540000.0, -0.5672689491267581], [1442409984.0, 86560000.0, -0.5568756164881843], [1442411712.0, 86580000.0, -0.546394346734272], [1442413440.0, 86600000.0, -0.5358267949790002], [1442415168.0, 86620000.0, -0.5251746299612939], [1442416896.0, 86640000.0, -0.5144395337815114], [1442418624.0, 86660000.0, -0.5036232016357604], [1442420352.0, 86680000.0, -0.492727341548298], [1442422080.0, 86700000.0, -0.4817536741017162], [1442423808.0, 86720000.0, -0.4707039321653342], [1442425536.0, 86740000.0, -0.4595798606214902], [1442427264.0, 86760000.0, -0.4483832160900353], [1442428992.0, 86780000.0, -0.43711576665093027], [1442430720.0, 86800000.0, -0.42577929156507716], [1442432448.0, 86820000.0, -0.4143755809932829], [1442434176.0, 86840000.0, -0.40290643571366863], [1442435904.0, 86860000.0, -0.3913736668372026], [1442437632.0, 86880000.0, -0.379779095521802], [1442439360.0, 86900000.0, -0.3681245526846796], [1442441088.0, 86920000.0, -0.3564118787132531], [1442442816.0, 86940000.0, -0.3446429231745135], [1442444544.0, 86960000.0, -0.3328195445229905], [1442446272.0, 86980000.0, -0.3209436098072074], [1442448000.0, 87000000.0, -0.30901699437495284], [1442449728.0, 87020000.0, -0.2970415815770343], [1442451456.0, 87040000.0, -0.2850192624699763], [1442453184.0, 87060000.0, -0.27295193551733293], [1442454912.0, 87080000.0, -0.2608415062898986], [1442456640.0, 87100000.0, -0.24868988716485033], [1442458368.0, 87120000.0, -0.23649899702372787], [1442460096.0, 87140000.0, -0.2242707609493782], [1442461824.0, 87160000.0, -0.21200710992205937], [1442463552.0, 87180000.0, -0.19970998051441252], [1442465280.0, 87200000.0, -0.18738131458572393], [1442467008.0, 87220000.0, -0.1750230589752831], [1442468736.0, 87240000.0, -0.16263716519488444], [1442470464.0, 87260000.0, -0.15022558912075165], [1442472192.0, 87280000.0, -0.13779029068464047], [1442473920.0, 87300000.0, -0.12533323356430037], [1442475648.0, 87320000.0, -0.11285638487348565], [1442477376.0, 87340000.0, -0.10036171485121963], [1442479104.0, 87360000.0, -0.08785119655074163], [1442480832.0, 87380000.0, -0.07532680552793904], [1442482560.0, 87400000.0, -0.06279051952931339], [1442484288.0, 87420000.0, -0.05024431817976325], [1442486016.0, 87440000.0, -0.03769018266993611], [1442487744.0, 87460000.0, -0.02513009544333983], [1442489472.0, 87480000.0, -0.012566039883355746], [1442491200.0, 87500000.0, -3.919488737908119e-15], [1442492928.0, 87520000.0, 0.012566039883355012], [1442494656.0, 87540000.0, 0.025130095443331998], [1442496384.0, 87560000.0, 0.03769018266993538], [1442498112.0, 87580000.0, 0.05024431817976252], [1442499840.0, 87600000.0, 0.06279051952931265], [1442501568.0, 87620000.0, 0.07532680552793122], [1442503296.0, 87640000.0, 0.08785119655073381], [1442505024.0, 87660000.0, 0.10036171485121183], [1442506752.0, 87680000.0, 0.11285638487348491], [1442508480.0, 87700000.0, 0.12533323356429965], [1442510208.0, 87720000.0, 0.13779029068463974], [1442511936.0, 87740000.0, 0.15022558912075093], [1442513664.0, 87760000.0, 0.16263716519488372], [1442515392.0, 87780000.0, 0.1750230589752754], [1442517120.0, 87800000.0, 0.18738131458571625], [1442518848.0, 87820000.0, 0.19970998051440483], [1442520576.0, 87840000.0, 0.21200710992205865], [1442522304.0, 87860000.0, 0.2242707609493775], [1442524032.0, 87880000.0, 0.23649899702372715], [1442525760.0, 87900000.0, 0.2486898871648496], [1442527488.0, 87920000.0, 0.260841506289891], [1442529216.0, 87940000.0, 0.27295193551732544], [1442530944.0, 87960000.0, 0.2850192624699688], [1442532672.0, 87980000.0, 0.2970415815770336], [1442534400.0, 88000000.0, 0.3090169943749521], [1442536128.0, 88020000.0, 0.3209436098072067], [1442537856.0, 88040000.0, 0.3328195445229831], [1442539584.0, 88060000.0, 0.34464292317451284], [1442541312.0, 88080000.0, 0.35641187871324576], [1442543040.0, 88100000.0, 0.3681245526846789], [1442544768.0, 88120000.0, 0.3797790955217948], [1442546496.0, 88140000.0, 0.39137366683720193], [1442548224.0, 88160000.0, 0.40290643571366797], [1442549952.0, 88180000.0, 0.41437558099328226], [1442551680.0, 88200000.0, 0.42577929156507005], [1442553408.0, 88220000.0, 0.4371157666509232], [1442555136.0, 88240000.0, 0.4483832160900283], [1442556864.0, 88260000.0, 0.45957986062148953], [1442558592.0, 88280000.0, 0.47070393216532724], [1442560320.0, 88300000.0, 0.48175367410171555], [1442562048.0, 88320000.0, 0.4927273415482912], [1442563776.0, 88340000.0, 0.5036232016357598], [1442565504.0, 88360000.0, 0.5144395337815048], [1442567232.0, 88380000.0, 0.5251746299612873], [1442568960.0, 88400000.0, 0.5358267949789935], [1442570688.0, 88420000.0, 0.5463943467342713], [1442572416.0, 88440000.0, 0.5568756164881837], [1442574144.0, 88460000.0, 0.5672689491267574], [1442575872.0, 88480000.0, 0.577572703422268], [1442577600.0, 88500000.0, 0.587785252292467], [1442579328.0, 88520000.0, 0.5979049830575179], [1442581056.0, 88540000.0, 0.6079302976945982], [1442582784.0, 88560000.0, 0.6178596130903322], [1442584512.0, 88580000.0, 0.6276913612907032], [1442586240.0, 88600000.0, 0.6374239897486864], [1442587968.0, 88620000.0, 0.6470559615694405], [1442589696.0, 88640000.0, 0.6565857557529574], [1442591424.0, 88660000.0, 0.6660118674342467], [1442593152.0, 88680000.0, 0.6753328081210243], [1442594880.0, 88700000.0, 0.6845471059286827], [1442596608.0, 88720000.0, 0.6936533058128036], [1442598336.0, 88740000.0, 0.7026499697988523], [1442600064.0, 88760000.0, 0.7115356772092829], [1442601792.0, 88780000.0, 0.7203090248879039], [1442603520.0, 88800000.0, 0.728968627421413], [1442605248.0, 88820000.0, 0.7375131173581699], [1442606976.0, 88840000.0, 0.7459411454241824], [1442608704.0, 88860000.0, 0.754251380736099], [1442610432.0, 88880000.0, 0.7624425110114472], [1442612160.0, 88900000.0, 0.770513242775788], [1442613888.0, 88920000.0, 0.7784623015670218], [1442615616.0, 88940000.0, 0.7862884321366168], [1442617344.0, 88960000.0, 0.7939903986478372], [1442619072.0, 88980000.0, 0.8015669848708736], [1442620800.0, 89000000.0, 0.8090169943749482], [1442622528.0, 89020000.0, 0.8163392507171802], [1442624256.0, 89040000.0, 0.8235325976284273], [1442625984.0, 89060000.0, 0.8305958991958121], [1442627712.0, 89080000.0, 0.8375280400421369], [1442629440.0, 89100000.0, 0.8443279255020137], [1442631168.0, 89120000.0, 0.8509944817946938], [1442632896.0, 89140000.0, 0.8575266561936501], [1442634624.0, 89160000.0, 0.8639234171928364], [1442636352.0, 89180000.0, 0.8701837546695229], [1442638080.0, 89200000.0, 0.8763066800438639], [1442639808.0, 89220000.0, 0.8822912264349532], [1442641536.0, 89240000.0, 0.8881364488135408], [1442643264.0, 89260000.0, 0.893841424151263], [1442644992.0, 89280000.0, 0.8994052515663731], [1442646720.0, 89300000.0, 0.9048270524660181], [1442648448.0, 89320000.0, 0.910105970684997], [1442650176.0, 89340000.0, 0.9152411726209156], [1442651904.0, 89360000.0, 0.9202318473658682], [1442653632.0, 89380000.0, 0.9250772068344583], [1442655360.0, 89400000.0, 0.9297764858882488], [1442657088.0, 89420000.0, 0.9343289424566118], [1442658816.0, 89440000.0, 0.938733857653876], [1442660544.0, 89460000.0, 0.9429905358928636], [1442662272.0, 89480000.0, 0.9470983049947432], [1442664000.0, 89500000.0, 0.9510565162951523], [1442665728.0, 89520000.0, 0.9548645447466415], [1442667456.0, 89540000.0, 0.9585217890173764], [1442669184.0, 89560000.0, 0.9620276715860842], [1442670912.0, 89580000.0, 0.9653816388332739], [1442672640.0, 89600000.0, 0.9685831611286327], [1442674368.0, 89620000.0, 0.9716317329146735], [1442676096.0, 89640000.0, 0.9745268727865766], [1442677824.0, 89660000.0, 0.9772681235681928], [1442679552.0, 89680000.0, 0.9798550523842461], [1442681280.0, 89700000.0, 0.9822872507286892], [1442683008.0, 89720000.0, 0.9845643345292044], [1442684736.0, 89740000.0, 0.9866859442078683], [1442686464.0, 89760000.0, 0.9886517447379141], [1442688192.0, 89780000.0, 0.9904614256966511], [1442689920.0, 89800000.0, 0.9921147013144777], [1442691648.0, 89820000.0, 0.9936113105200074], [1442693376.0, 89840000.0, 0.9949510169812998], [1442695104.0, 89860000.0, 0.9961336091431727], [1442696832.0, 89880000.0, 0.9971589002606136], [1442698560.0, 89900000.0, 0.9980267284282717], [1442700288.0, 89920000.0, 0.9987369566060176], [1442702016.0, 89940000.0, 0.999289472640589], [1442703744.0, 89960000.0, 0.9996841892832999], [1442705472.0, 89980000.0, 0.999921044203816], [1442707200.0, 90000000.0, 1.0], [1442708928.0, 90020000.0, 0.9999210442038161], [1442710656.0, 90040000.0, 0.9996841892833], [1442712384.0, 90060000.0, 0.9992894726405892], [1442714112.0, 90080000.0, 0.9987369566060178], [1442715840.0, 90100000.0, 0.9980267284282719], [1442717568.0, 90120000.0, 0.9971589002606139], [1442719296.0, 90140000.0, 0.9961336091431732], [1442721024.0, 90160000.0, 0.9949510169813003], [1442722752.0, 90180000.0, 0.9936113105200078], [1442724480.0, 90200000.0, 0.9921147013144782], [1442726208.0, 90220000.0, 0.9904614256966517], [1442727936.0, 90240000.0, 0.9886517447379147], [1442729664.0, 90260000.0, 0.9866859442078689], [1442731392.0, 90280000.0, 0.9845643345292052], [1442733120.0, 90300000.0, 0.9822872507286899], [1442734848.0, 90320000.0, 0.979855052384247], [1442736576.0, 90340000.0, 0.9772681235681937], [1442738304.0, 90360000.0, 0.9745268727865776], [1442740032.0, 90380000.0, 0.9716317329146746], [1442741760.0, 90400000.0, 0.9685831611286337], [1442743488.0, 90420000.0, 0.965381638833275], [1442745216.0, 90440000.0, 0.9620276715860854], [1442746944.0, 90460000.0, 0.9585217890173776], [1442748672.0, 90480000.0, 0.9548645447466428], [1442750400.0, 90500000.0, 0.9510565162951538], [1442752128.0, 90520000.0, 0.9470983049947447], [1442753856.0, 90540000.0, 0.9429905358928652], [1442755584.0, 90560000.0, 0.9387338576538775], [1442757312.0, 90580000.0, 0.9343289424566134], [1442759040.0, 90600000.0, 0.9297764858882503], [1442760768.0, 90620000.0, 0.92507720683446], [1442762496.0, 90640000.0, 0.9202318473658698], [1442764224.0, 90660000.0, 0.9152411726209174], [1442765952.0, 90680000.0, 0.9101059706849988], [1442767680.0, 90700000.0, 0.90482705246602], [1442769408.0, 90720000.0, 0.899405251566375], [1442771136.0, 90740000.0, 0.893841424151265], [1442772864.0, 90760000.0, 0.8881364488135429], [1442774592.0, 90780000.0, 0.8822912264349553], [1442776320.0, 90800000.0, 0.876306680043866], [1442778048.0, 90820000.0, 0.870183754669525], [1442779776.0, 90840000.0, 0.8639234171928386], [1442781504.0, 90860000.0, 0.8575266561936524], [1442783232.0, 90880000.0, 0.8509944817946962], [1442784960.0, 90900000.0, 0.8443279255020161], [1442786688.0, 90920000.0, 0.8375280400421393], [1442788416.0, 90940000.0, 0.8305958991958146], [1442790144.0, 90960000.0, 0.8235325976284298], [1442791872.0, 90980000.0, 0.8163392507171827], [1442793600.0, 91000000.0, 0.8090169943749508], [1442795328.0, 91020000.0, 0.8015669848708763], [1442797056.0, 91040000.0, 0.7939903986478398], [1442798784.0, 91060000.0, 0.7862884321366195], [1442800512.0, 91080000.0, 0.7784623015670246], [1442802240.0, 91100000.0, 0.7705132427757909], [1442803968.0, 91120000.0, 0.76244251101145], [1442805696.0, 91140000.0, 0.7542513807361019], [1442807424.0, 91160000.0, 0.7459411454241854], [1442809152.0, 91180000.0, 0.7375131173581729], [1442810880.0, 91200000.0, 0.728968627421416], [1442812608.0, 91220000.0, 0.720309024887907], [1442814336.0, 91240000.0, 0.711535677209286], [1442816064.0, 91260000.0, 0.7026499697988555], [1442817792.0, 91280000.0, 0.6936533058128068], [1442819520.0, 91300000.0, 0.684547105928686], [1442821248.0, 91320000.0, 0.6753328081210275], [1442822976.0, 91340000.0, 0.66601186743425], [1442824704.0, 91360000.0, 0.6565857557529607], [1442826432.0, 91380000.0, 0.6470559615694438], [1442828160.0, 91400000.0, 0.6374239897486897], [1442829888.0, 91420000.0, 0.6276913612907067], [1442831616.0, 91440000.0, 0.6178596130903357], [1442833344.0, 91460000.0, 0.6079302976946017], [1442835072.0, 91480000.0, 0.5979049830575215], [1442836800.0, 91500000.0, 0.5877852522924706], [1442838528.0, 91520000.0, 0.5775727034222715], [1442840256.0, 91540000.0, 0.5672689491267611], [1442841984.0, 91560000.0, 0.5568756164881874], [1442843712.0, 91580000.0, 0.5463943467342751], [1442845440.0, 91600000.0, 0.5358267949789973], [1442847168.0, 91620000.0, 0.525174629961291], [1442848896.0, 91640000.0, 0.5144395337815085], [1442850624.0, 91660000.0, 0.5036232016357636], [1442852352.0, 91680000.0, 0.492727341548295], [1442854080.0, 91700000.0, 0.48175367410171943], [1442855808.0, 91720000.0, 0.4707039321653312], [1442857536.0, 91740000.0, 0.4595798606214935], [1442859264.0, 91760000.0, 0.44838321609003223], [1442860992.0, 91780000.0, 0.4371157666509272], [1442862720.0, 91800000.0, 0.42577929156507405], [1442864448.0, 91820000.0, 0.41437558099328625], [1442866176.0, 91840000.0, 0.402906435713672], [1442867904.0, 91860000.0, 0.391373666837206], [1442869632.0, 91880000.0, 0.37977909552179884], [1442871360.0, 91900000.0, 0.368124552684683], [1442873088.0, 91920000.0, 0.35641187871324986], [1442874816.0, 91940000.0, 0.34464292317451695], [1442876544.0, 91960000.0, 0.3328195445229873], [1442878272.0, 91980000.0, 0.3209436098072109], [1442880000.0, 92000000.0, 0.30901699437495633], [1442881728.0, 92020000.0, 0.2970415815770378], [1442883456.0, 92040000.0, 0.285019262469973], [1442885184.0, 92060000.0, 0.27295193551732966], [1442886912.0, 92080000.0, 0.2608415062898953], [1442888640.0, 92100000.0, 0.24868988716485388], [1442890368.0, 92120000.0, 0.23649899702373142], [1442892096.0, 92140000.0, 0.22427076094938178], [1442893824.0, 92160000.0, 0.21200710992206295], [1442895552.0, 92180000.0, 0.19970998051440916], [1442897280.0, 92200000.0, 0.18738131458572058], [1442899008.0, 92220000.0, 0.17502305897527973], [1442900736.0, 92240000.0, 0.16263716519488808], [1442902464.0, 92260000.0, 0.1502255891207553], [1442904192.0, 92280000.0, 0.1377902906846441], [1442905920.0, 92300000.0, 0.125333233564304], [1442907648.0, 92320000.0, 0.1128563848734893], [1442909376.0, 92340000.0, 0.10036171485121621], [1442911104.0, 92360000.0, 0.08785119655073821], [1442912832.0, 92380000.0, 0.07532680552793562], [1442914560.0, 92400000.0, 0.06279051952931705], [1442916288.0, 92420000.0, 0.05024431817976692], [1442918016.0, 92440000.0, 0.03769018266993978], [1442919744.0, 92460000.0, 0.025130095443336404], [1442921472.0, 92480000.0, 0.01256603988335942], [1442923200.0, 92500000.0, 4.892397390223529e-16], [1442924928.0, 92520000.0, -0.012566039883351336], [1442926656.0, 92540000.0, -0.025130095443335426], [1442928384.0, 92560000.0, -0.0376901826699317], [1442930112.0, 92580000.0, -0.05024431817975885], [1442931840.0, 92600000.0, -0.06279051952930899], [1442933568.0, 92620000.0, -0.07532680552793464], [1442935296.0, 92640000.0, -0.08785119655073724], [1442937024.0, 92660000.0, -0.10036171485121524], [1442938752.0, 92680000.0, -0.11285638487348126], [1442940480.0, 92700000.0, -0.125333233564296], [1442942208.0, 92720000.0, -0.1377902906846361], [1442943936.0, 92740000.0, -0.1502255891207473], [1442945664.0, 92760000.0, -0.1626371651948801], [1442947392.0, 92780000.0, -0.17502305897527878], [1442949120.0, 92800000.0, -0.1873813145857196], [1442950848.0, 92820000.0, -0.1997099805144082], [1442952576.0, 92840000.0, -0.21200710992205507], [1442954304.0, 92860000.0, -0.22427076094937393], [1442956032.0, 92880000.0, -0.23649899702372357], [1442957760.0, 92900000.0, -0.24868988716484605], [1442959488.0, 92920000.0, -0.26084150628989433], [1442961216.0, 92940000.0, -0.2729519355173287], [1442962944.0, 92960000.0, -0.28501926246997206], [1442964672.0, 92980000.0, -0.2970415815770301], [1442966400.0, 93000000.0, -0.3090169943749486], [1442968128.0, 93020000.0, -0.3209436098072032], [1442969856.0, 93040000.0, -0.33281954452298634], [1442971584.0, 93060000.0, -0.3446429231745094], [1442973312.0, 93080000.0, -0.356411878713249], [1442975040.0, 93100000.0, -0.36812455268467553], [1442976768.0, 93120000.0, -0.37977909552179795], [1442978496.0, 93140000.0, -0.39137366683719854], [1442980224.0, 93160000.0, -0.4029064357136646], [1442981952.0, 93180000.0, -0.41437558099327887], [1442983680.0, 93200000.0, -0.42577929156507316], [1442985408.0, 93220000.0, -0.43711576665092633], [1442987136.0, 93240000.0, -0.44838321609003134], [1442988864.0, 93260000.0, -0.45957986062148626], [1442990592.0, 93280000.0, -0.4707039321653303], [1442992320.0, 93300000.0, -0.4817536741017123], [1442994048.0, 93320000.0, -0.4927273415482942], [1442995776.0, 93340000.0, -0.5036232016357566], [1442997504.0, 93360000.0, -0.5144395337815076], [1442999232.0, 93380000.0, -0.5251746299612902], [1443000960.0, 93400000.0, -0.5358267949789964], [1443002688.0, 93420000.0, -0.5463943467342683], [1443004416.0, 93440000.0, -0.5568756164881806], [1443006144.0, 93460000.0, -0.5672689491267544], [1443007872.0, 93480000.0, -0.5775727034222707], [1443009600.0, 93500000.0, -0.5877852522924698], [1443011328.0, 93520000.0, -0.5979049830575207], [1443013056.0, 93540000.0, -0.6079302976946009], [1443014784.0, 93560000.0, -0.6178596130903293], [1443016512.0, 93580000.0, -0.6276913612907004], [1443018240.0, 93600000.0, -0.6374239897486835], [1443019968.0, 93620000.0, -0.647055961569443], [1443021696.0, 93640000.0, -0.65658575575296], [1443023424.0, 93660000.0, -0.6660118674342492], [1443025152.0, 93680000.0, -0.6753328081210267], [1443026880.0, 93700000.0, -0.6845471059286852], [1443028608.0, 93720000.0, -0.6936533058128009], [1443030336.0, 93740000.0, -0.7026499697988497], [1443032064.0, 93760000.0, -0.7115356772092803], [1443033792.0, 93780000.0, -0.7203090248879064], [1443035520.0, 93800000.0, -0.7289686274214153], [1443037248.0, 93820000.0, -0.7375131173581723], [1443038976.0, 93840000.0, -0.74594114542418], [1443040704.0, 93860000.0, -0.7542513807361012], [1443042432.0, 93880000.0, -0.7624425110114448], [1443044160.0, 93900000.0, -0.7705132427757903], [1443045888.0, 93920000.0, -0.7784623015670195], [1443047616.0, 93940000.0, -0.7862884321366189], [1443049344.0, 93960000.0, -0.7939903986478348], [1443051072.0, 93980000.0, -0.8015669848708756], [1443052800.0, 94000000.0, -0.8090169943749461], [1443054528.0, 94020000.0, -0.816339250717178], [1443056256.0, 94040000.0, -0.8235325976284252], [1443057984.0, 94060000.0, -0.830595899195814], [1443059712.0, 94080000.0, -0.8375280400421388], [1443061440.0, 94100000.0, -0.8443279255020155], [1443063168.0, 94120000.0, -0.850994481794692], [1443064896.0, 94140000.0, -0.8575266561936519], [1443066624.0, 94160000.0, -0.8639234171928346], [1443068352.0, 94180000.0, -0.870183754669521], [1443070080.0, 94200000.0, -0.8763066800438621], [1443071808.0, 94220000.0, -0.8822912264349548], [1443073536.0, 94240000.0, -0.8881364488135424], [1443075264.0, 94260000.0, -0.8938414241512646], [1443076992.0, 94280000.0, -0.8994052515663714], [1443078720.0, 94300000.0, -0.9048270524660166], [1443080448.0, 94320000.0, -0.9101059706849954], [1443082176.0, 94340000.0, -0.9152411726209141], [1443083904.0, 94360000.0, -0.9202318473658695], [1443085632.0, 94380000.0, -0.9250772068344596], [1443087360.0, 94400000.0, -0.92977648588825], [1443089088.0, 94420000.0, -0.9343289424566105], [1443090816.0, 94440000.0, -0.9387338576538747], [1443092544.0, 94460000.0, -0.9429905358928624], [1443094272.0, 94480000.0, -0.9470983049947443], [1443096000.0, 94500000.0, -0.9510565162951512], [1443097728.0, 94520000.0, -0.9548645447466426], [1443099456.0, 94540000.0, -0.9585217890173773], [1443101184.0, 94560000.0, -0.9620276715860852], [1443102912.0, 94580000.0, -0.9653816388332729], [1443104640.0, 94600000.0, -0.9685831611286317], [1443106368.0, 94620000.0, -0.9716317329146728], [1443108096.0, 94640000.0, -0.9745268727865773], [1443109824.0, 94660000.0, -0.977268123568192], [1443111552.0, 94680000.0, -0.9798550523842467], [1443113280.0, 94700000.0, -0.9822872507286885], [1443115008.0, 94720000.0, -0.984564334529205], [1443116736.0, 94740000.0, -0.9866859442078676], [1443118464.0, 94760000.0, -0.9886517447379145], [1443120192.0, 94780000.0, -0.9904614256966506], [1443121920.0, 94800000.0, -0.9921147013144781], [1443123648.0, 94820000.0, -0.9936113105200077], [1443125376.0, 94840000.0, -0.9949510169813002], [1443127104.0, 94860000.0, -0.9961336091431724], [1443128832.0, 94880000.0, -0.9971589002606133], [1443130560.0, 94900000.0, -0.9980267284282714], [1443132288.0, 94920000.0, -0.9987369566060177], [1443134016.0, 94940000.0, -0.9992894726405891], [1443135744.0, 94960000.0, -0.9996841892833], [1443137472.0, 94980000.0, -0.999921044203816], [1443139200.0, 95000000.0, -1.0], [1443140928.0, 95020000.0, -0.9999210442038161], [1443142656.0, 95040000.0, -0.9996841892833002], [1443144384.0, 95060000.0, -0.9992894726405893], [1443146112.0, 95080000.0, -0.9987369566060179], [1443147840.0, 95100000.0, -0.9980267284282718], [1443149568.0, 95120000.0, -0.9971589002606137], [1443151296.0, 95140000.0, -0.9961336091431728], [1443153024.0, 95160000.0, -0.9949510169813006], [1443154752.0, 95180000.0, -0.9936113105200083], [1443156480.0, 95200000.0, -0.9921147013144787], [1443158208.0, 95220000.0, -0.9904614256966513], [1443159936.0, 95240000.0, -0.9886517447379153], [1443161664.0, 95260000.0, -0.9866859442078684], [1443163392.0, 95280000.0, -0.9845643345292059], [1443165120.0, 95300000.0, -0.9822872507286893], [1443166848.0, 95320000.0, -0.9798550523842477], [1443168576.0, 95340000.0, -0.977268123568193], [1443170304.0, 95360000.0, -0.9745268727865785], [1443172032.0, 95380000.0, -0.9716317329146738], [1443173760.0, 95400000.0, -0.968583161128633], [1443175488.0, 95420000.0, -0.9653816388332741], [1443177216.0, 95440000.0, -0.9620276715860864], [1443178944.0, 95460000.0, -0.9585217890173786], [1443180672.0, 95480000.0, -0.954864544746644], [1443182400.0, 95500000.0, -0.9510565162951526], [1443184128.0, 95520000.0, -0.9470983049947459], [1443185856.0, 95540000.0, -0.942990535892864], [1443187584.0, 95560000.0, -0.9387338576538763], [1443189312.0, 95580000.0, -0.9343289424566121], [1443191040.0, 95600000.0, -0.9297764858882518], [1443192768.0, 95620000.0, -0.9250772068344614], [1443194496.0, 95640000.0, -0.9202318473658713], [1443196224.0, 95660000.0, -0.915241172620916], [1443197952.0, 95680000.0, -0.9101059706849973], [1443199680.0, 95700000.0, -0.9048270524660186], [1443201408.0, 95720000.0, -0.8994052515663735], [1443203136.0, 95740000.0, -0.8938414241512667], [1443204864.0, 95760000.0, -0.8881364488135446], [1443206592.0, 95780000.0, -0.882291226434957], [1443208320.0, 95800000.0, -0.8763066800438644], [1443210048.0, 95820000.0, -0.8701837546695234], [1443211776.0, 95840000.0, -0.8639234171928369], [1443213504.0, 95860000.0, -0.8575266561936543], [1443215232.0, 95880000.0, -0.8509944817946944], [1443216960.0, 95900000.0, -0.8443279255020181], [1443218688.0, 95920000.0, -0.8375280400421413], [1443220416.0, 95940000.0, -0.8305958991958166], [1443222144.0, 95960000.0, -0.8235325976284279], [1443223872.0, 95980000.0, -0.8163392507171807], [1443225600.0, 96000000.0, -0.8090169943749488], [1443227328.0, 96020000.0, -0.8015669848708784], [1443229056.0, 96040000.0, -0.7939903986478377], [1443230784.0, 96060000.0, -0.7862884321366218], [1443232512.0, 96080000.0, -0.7784623015670225], [1443234240.0, 96100000.0, -0.7705132427757933], [1443235968.0, 96120000.0, -0.7624425110114478], [1443237696.0, 96140000.0, -0.7542513807361043], [1443239424.0, 96160000.0, -0.7459411454241831], [1443241152.0, 96180000.0, -0.7375131173581755], [1443242880.0, 96200000.0, -0.7289686274214184], [1443244608.0, 96220000.0, -0.7203090248879096], [1443246336.0, 96240000.0, -0.7115356772092836], [1443248064.0, 96260000.0, -0.7026499697988531], [1443249792.0, 96280000.0, -0.6936533058128043], [1443251520.0, 96300000.0, -0.6845471059286886], [1443253248.0, 96320000.0, -0.6753328081210301], [1443254976.0, 96340000.0, -0.6660118674342527], [1443256704.0, 96360000.0, -0.6565857557529635], [1443258432.0, 96380000.0, -0.6470559615694466], [1443260160.0, 96400000.0, -0.6374239897486872], [1443261888.0, 96420000.0, -0.627691361290704], [1443263616.0, 96440000.0, -0.617859613090333], [1443265344.0, 96460000.0, -0.6079302976946046], [1443267072.0, 96480000.0, -0.5979049830575244], [1443268800.0, 96500000.0, -0.5877852522924736], [1443270528.0, 96520000.0, -0.5775727034222745], [1443272256.0, 96540000.0, -0.5672689491267583], [1443273984.0, 96560000.0, -0.5568756164881845], [1443275712.0, 96580000.0, -0.5463943467342722], [1443277440.0, 96600000.0, -0.5358267949790004], [1443279168.0, 96620000.0, -0.5251746299612942], [1443280896.0, 96640000.0, -0.5144395337815116], [1443282624.0, 96660000.0, -0.5036232016357606], [1443284352.0, 96680000.0, -0.4927273415482982], [1443286080.0, 96700000.0, -0.48175367410171643], [1443287808.0, 96720000.0, -0.4707039321653344], [1443289536.0, 96740000.0, -0.4595798606214904], [1443291264.0, 96760000.0, -0.4483832160900355], [1443292992.0, 96780000.0, -0.4371157666509305], [1443294720.0, 96800000.0, -0.4257792915650774], [1443296448.0, 96820000.0, -0.41437558099328314], [1443298176.0, 96840000.0, -0.40290643571366885], [1443299904.0, 96860000.0, -0.3913736668372028], [1443301632.0, 96880000.0, -0.3797790955218022], [1443303360.0, 96900000.0, -0.36812455268467986], [1443305088.0, 96920000.0, -0.3564118787132533], [1443306816.0, 96940000.0, -0.3446429231745137], [1443308544.0, 96960000.0, -0.3328195445229908], [1443310272.0, 96980000.0, -0.32094360980720765], [1443312000.0, 97000000.0, -0.30901699437495306], [1443313728.0, 97020000.0, -0.29704158157703453], [1443315456.0, 97040000.0, -0.2850192624699765], [1443317184.0, 97060000.0, -0.2729519355173332], [1443318912.0, 97080000.0, -0.26084150628989883], [1443320640.0, 97100000.0, -0.24868988716485055], [1443322368.0, 97120000.0, -0.2364989970237281], [1443324096.0, 97140000.0, -0.22427076094937845], [1443325824.0, 97160000.0, -0.2120071099220596], [1443327552.0, 97180000.0, -0.19970998051441277], [1443329280.0, 97200000.0, -0.18738131458572418], [1443331008.0, 97220000.0, -0.17502305897528336], [1443332736.0, 97240000.0, -0.1626371651948847], [1443334464.0, 97260000.0, -0.1502255891207519], [1443336192.0, 97280000.0, -0.13779029068464071], [1443337920.0, 97300000.0, -0.12533323356430062], [1443339648.0, 97320000.0, -0.11285638487348588], [1443341376.0, 97340000.0, -0.10036171485121988], [1443343104.0, 97360000.0, -0.08785119655074188], [1443344832.0, 97380000.0, -0.07532680552793929], [1443346560.0, 97400000.0, -0.06279051952931362], [1443348288.0, 97420000.0, -0.0502443181797635], [1443350016.0, 97440000.0, -0.03769018266993635], [1443351744.0, 97460000.0, -0.025130095443340078], [1443353472.0, 97480000.0, -0.01256603988335599], [1443355200.0, 97500000.0, -4.164418097737589e-15], [1443356928.0, 97520000.0, 0.012566039883354767], [1443358656.0, 97540000.0, 0.02513009544333175], [1443360384.0, 97560000.0, 0.03769018266993513], [1443362112.0, 97580000.0, 0.05024431817976227], [1443363840.0, 97600000.0, 0.0627905195293124], [1443365568.0, 97620000.0, 0.07532680552793097], [1443367296.0, 97640000.0, 0.08785119655073358], [1443369024.0, 97660000.0, 0.10036171485121159], [1443370752.0, 97680000.0, 0.11285638487348468], [1443372480.0, 97700000.0, 0.1253332335642994], [1443374208.0, 97720000.0, 0.1377902906846395], [1443375936.0, 97740000.0, 0.15022558912075068], [1443377664.0, 97760000.0, 0.16263716519488347], [1443379392.0, 97780000.0, 0.17502305897527515], [1443381120.0, 97800000.0, 0.187381314585716], [1443382848.0, 97820000.0, 0.1997099805144046], [1443384576.0, 97840000.0, 0.2120071099220584], [1443386304.0, 97860000.0, 0.22427076094937726], [1443388032.0, 97880000.0, 0.2364989970237269], [1443389760.0, 97900000.0, 0.24868988716484938], [1443391488.0, 97920000.0, 0.2608415062898908], [1443393216.0, 97940000.0, 0.27295193551732516], [1443394944.0, 97960000.0, 0.2850192624699685], [1443396672.0, 97980000.0, 0.29704158157703336], [1443398400.0, 98000000.0, 0.3090169943749519], [1443400128.0, 98020000.0, 0.3209436098072065], [1443401856.0, 98040000.0, 0.3328195445229829], [1443403584.0, 98060000.0, 0.3446429231745126], [1443405312.0, 98080000.0, 0.35641187871324553], [1443407040.0, 98100000.0, 0.3681245526846787], [1443408768.0, 98120000.0, 0.37977909552179456], [1443410496.0, 98140000.0, 0.3913736668372017], [1443412224.0, 98160000.0, 0.40290643571366774], [1443413952.0, 98180000.0, 0.41437558099328203], [1443415680.0, 98200000.0, 0.42577929156506983], [1443417408.0, 98220000.0, 0.437115766650923], [1443419136.0, 98240000.0, 0.44838321609002807], [1443420864.0, 98260000.0, 0.4595798606214893], [1443422592.0, 98280000.0, 0.4707039321653271], [1443424320.0, 98300000.0, 0.4817536741017153], [1443426048.0, 98320000.0, 0.49272734154829095], [1443427776.0, 98340000.0, 0.5036232016357596], [1443429504.0, 98360000.0, 0.5144395337815045], [1443431232.0, 98380000.0, 0.525174629961287], [1443432960.0, 98400000.0, 0.5358267949789934], [1443434688.0, 98420000.0, 0.5463943467342711], [1443436416.0, 98440000.0, 0.5568756164881835], [1443438144.0, 98460000.0, 0.5672689491267573], [1443439872.0, 98480000.0, 0.5775727034222677], [1443441600.0, 98500000.0, 0.5877852522924669], [1443443328.0, 98520000.0, 0.5979049830575177], [1443445056.0, 98540000.0, 0.607930297694598], [1443446784.0, 98560000.0, 0.617859613090332], [1443448512.0, 98580000.0, 0.6276913612907031], [1443450240.0, 98600000.0, 0.6374239897486862], [1443451968.0, 98620000.0, 0.6470559615694402], [1443453696.0, 98640000.0, 0.6565857557529572], [1443455424.0, 98660000.0, 0.6660118674342465], [1443457152.0, 98680000.0, 0.675332808121024], [1443458880.0, 98700000.0, 0.6845471059286825], [1443460608.0, 98720000.0, 0.6936533058128034], [1443462336.0, 98740000.0, 0.7026499697988522], [1443464064.0, 98760000.0, 0.7115356772092828], [1443465792.0, 98780000.0, 0.7203090248879038], [1443467520.0, 98800000.0, 0.7289686274214128], [1443469248.0, 98820000.0, 0.7375131173581698], [1443470976.0, 98840000.0, 0.7459411454241823], [1443472704.0, 98860000.0, 0.7542513807360988], [1443474432.0, 98880000.0, 0.762442511011447], [1443476160.0, 98900000.0, 0.7705132427757879], [1443477888.0, 98920000.0, 0.7784623015670217], [1443479616.0, 98940000.0, 0.7862884321366167], [1443481344.0, 98960000.0, 0.7939903986478369], [1443483072.0, 98980000.0, 0.8015669848708734], [1443484800.0, 99000000.0, 0.8090169943749481], [1443486528.0, 99020000.0, 0.81633925071718], [1443488256.0, 99040000.0, 0.8235325976284272], [1443489984.0, 99060000.0, 0.830595899195812], [1443491712.0, 99080000.0, 0.8375280400421368], [1443493440.0, 99100000.0, 0.8443279255020136], [1443495168.0, 99120000.0, 0.8509944817946937], [1443496896.0, 99140000.0, 0.85752665619365], [1443498624.0, 99160000.0, 0.8639234171928363], [1443500352.0, 99180000.0, 0.8701837546695228], [1443502080.0, 99200000.0, 0.8763066800438638], [1443503808.0, 99220000.0, 0.8822912264349531], [1443505536.0, 99240000.0, 0.8881364488135407], [1443507264.0, 99260000.0, 0.8938414241512629], [1443508992.0, 99280000.0, 0.899405251566373], [1443510720.0, 99300000.0, 0.904827052466018], [1443512448.0, 99320000.0, 0.9101059706849969], [1443514176.0, 99340000.0, 0.9152411726209155], [1443515904.0, 99360000.0, 0.920231847365868], [1443517632.0, 99380000.0, 0.9250772068344583], [1443519360.0, 99400000.0, 0.9297764858882487], [1443521088.0, 99420000.0, 0.9343289424566117], [1443522816.0, 99440000.0, 0.9387338576538758], [1443524544.0, 99460000.0, 0.9429905358928636], [1443526272.0, 99480000.0, 0.9470983049947432], [1443528000.0, 99500000.0, 0.9510565162951523], [1443529728.0, 99520000.0, 0.9548645447466415], [1443531456.0, 99540000.0, 0.9585217890173763], [1443533184.0, 99560000.0, 0.9620276715860842], [1443534912.0, 99580000.0, 0.9653816388332738], [1443536640.0, 99600000.0, 0.9685831611286326], [1443538368.0, 99620000.0, 0.9716317329146735], [1443540096.0, 99640000.0, 0.9745268727865766], [1443541824.0, 99660000.0, 0.9772681235681927], [1443543552.0, 99680000.0, 0.9798550523842461], [1443545280.0, 99700000.0, 0.982287250728689], [1443547008.0, 99720000.0, 0.9845643345292043], [1443548736.0, 99740000.0, 0.9866859442078681], [1443550464.0, 99760000.0, 0.988651744737914], [1443552192.0, 99780000.0, 0.9904614256966511], [1443553920.0, 99800000.0, 0.9921147013144777], [1443555648.0, 99820000.0, 0.9936113105200073], [1443557376.0, 99840000.0, 0.9949510169812998], [1443559104.0, 99860000.0, 0.9961336091431727], [1443560832.0, 99880000.0, 0.9971589002606136], [1443562560.0, 99900000.0, 0.9980267284282717], [1443564288.0, 99920000.0, 0.9987369566060176], [1443566016.0, 99940000.0, 0.999289472640589], [1443567744.0, 99960000.0, 0.9996841892832999], [1443569472.0, 99980000.0, 0.999921044203816]] \ No newline at end of file
diff --git a/tensorflow/tensorboard/app/demo/data/cubic.json b/tensorflow/tensorboard/app/demo/data/cubic.json
new file mode 100644
index 0000000000..67dc173187
--- /dev/null
+++ b/tensorflow/tensorboard/app/demo/data/cubic.json
@@ -0,0 +1 @@
+[[1434931200.0, 0.0, 0.0], [1434932928.0, 20000.0, -0.039999992], [1434934656.0, 40000.0, -0.07999993600000001], [1434936384.0, 60000.0, -0.119999784], [1434938112.0, 80000.0, -0.159999488], [1434939840.0, 100000.0, -0.199999], [1434941568.0, 120000.0, -0.23999827199999998], [1434943296.0, 140000.0, -0.279997256], [1434945024.0, 160000.0, -0.319995904], [1434946752.0, 180000.0, -0.359994168], [1434948480.0, 200000.0, -0.399992], [1434950208.0, 220000.0, -0.43998935199999994], [1434951936.0, 240000.0, -0.479986176], [1434953664.0, 260000.0, -0.519982424], [1434955392.0, 280000.0, -0.5599780480000001], [1434957120.0, 300000.0, -0.599973], [1434958848.0, 320000.0, -0.639967232], [1434960576.0, 340000.0, -0.6799606960000001], [1434962304.0, 360000.0, -0.719953344], [1434964032.0, 380000.0, -0.759945128], [1434965760.0, 400000.0, -0.7999360000000001], [1434967488.0, 420000.0, -0.8399259120000001], [1434969216.0, 440000.0, -0.8799148159999999], [1434970944.0, 460000.0, -0.919902664], [1434972672.0, 480000.0, -0.959889408], [1434974400.0, 500000.0, -0.999875], [1434976128.0, 520000.0, -1.039859392], [1434977856.0, 540000.0, -1.0798425360000001], [1434979584.0, 560000.0, -1.1198243840000002], [1434981312.0, 580000.0, -1.159804888], [1434983040.0, 600000.0, -1.199784], [1434984768.0, 620000.0, -1.239761672], [1434986496.0, 640000.0, -1.2797378560000001], [1434988224.0, 660000.0, -1.319712504], [1434989952.0, 680000.0, -1.3596855680000002], [1434991680.0, 700000.0, -1.3996570000000002], [1434993408.0, 720000.0, -1.439626752], [1434995136.0, 740000.0, -1.479594776], [1434996864.0, 760000.0, -1.519561024], [1434998592.0, 780000.0, -1.559525448], [1435000320.0, 800000.0, -1.599488], [1435002048.0, 820000.0, -1.6394486320000001], [1435003776.0, 840000.0, -1.6794072960000002], [1435005504.0, 860000.0, -1.7193639439999997], [1435007232.0, 880000.0, -1.7593185279999999], [1435008960.0, 900000.0, -1.7992709999999998], [1435010688.0, 920000.0, -1.8392213119999998], [1435012416.0, 940000.0, -1.8791694159999999], [1435014144.0, 960000.0, -1.919115264], [1435015872.0, 980000.0, -1.959058808], [1435017600.0, 1000000.0, -1.999], [1435019328.0, 1020000.0, -2.038938792], [1435021056.0, 1040000.0, -2.078875136], [1435022784.0, 1060000.0, -2.118808984], [1435024512.0, 1080000.0, -2.158740288], [1435026240.0, 1100000.0, -2.198669], [1435027968.0, 1120000.0, -2.2385950720000003], [1435029696.0, 1140000.0, -2.2785184560000005], [1435031424.0, 1160000.0, -2.3184391040000003], [1435033152.0, 1180000.0, -2.358356968], [1435034880.0, 1200000.0, -2.398272], [1435036608.0, 1220000.0, -2.438184152], [1435038336.0, 1240000.0, -2.478093376], [1435040064.0, 1260000.0, -2.517999624], [1435041792.0, 1280000.0, -2.557902848], [1435043520.0, 1300000.0, -2.5978030000000003], [1435045248.0, 1320000.0, -2.637700032], [1435046976.0, 1340000.0, -2.6775938960000003], [1435048704.0, 1360000.0, -2.7174845440000004], [1435050432.0, 1380000.0, -2.7573719280000004], [1435052160.0, 1400000.0, -2.7972560000000004], [1435053888.0, 1420000.0, -2.837136712], [1435055616.0, 1440000.0, -2.877014016], [1435057344.0, 1460000.0, -2.916887864], [1435059072.0, 1480000.0, -2.956758208], [1435060800.0, 1500000.0, -2.996625], [1435062528.0, 1520000.0, -3.036488192], [1435064256.0, 1540000.0, -3.076347736], [1435065984.0, 1560000.0, -3.116203584], [1435067712.0, 1580000.0, -3.1560556880000004], [1435069440.0, 1600000.0, -3.195904], [1435071168.0, 1620000.0, -3.235748472], [1435072896.0, 1640000.0, -3.2755890560000003], [1435074624.0, 1660000.0, -3.3154257040000004], [1435076352.0, 1680000.0, -3.3552583680000003], [1435078080.0, 1700000.0, -3.395087], [1435079808.0, 1720000.0, -3.4349115519999995], [1435081536.0, 1740000.0, -3.4747319759999997], [1435083264.0, 1760000.0, -3.5145482239999994], [1435084992.0, 1780000.0, -3.5543602479999996], [1435086720.0, 1800000.0, -3.594168], [1435088448.0, 1820000.0, -3.6339714319999996], [1435090176.0, 1840000.0, -3.6737704959999995], [1435091904.0, 1860000.0, -3.713565144], [1435093632.0, 1880000.0, -3.7533553279999996], [1435095360.0, 1900000.0, -3.793141], [1435097088.0, 1920000.0, -3.832922112], [1435098816.0, 1940000.0, -3.872698616], [1435100544.0, 1960000.0, -3.912470464], [1435102272.0, 1980000.0, -3.952237608], [1435104000.0, 2000000.0, -3.992], [1435105728.0, 2020000.0, -4.031757592], [1435107456.0, 2040000.0, -4.071510336], [1435109184.0, 2060000.0, -4.111258184], [1435110912.0, 2080000.0, -4.151001088], [1435112640.0, 2100000.0, -4.190739], [1435114368.0, 2120000.0, -4.230471872], [1435116096.0, 2140000.0, -4.270199656], [1435117824.0, 2160000.0, -4.3099223040000005], [1435119552.0, 2180000.0, -4.349639768], [1435121280.0, 2200000.0, -4.389352000000001], [1435123008.0, 2220000.0, -4.429058952], [1435124736.0, 2240000.0, -4.468760576], [1435126464.0, 2260000.0, -4.5084568240000005], [1435128192.0, 2280000.0, -4.5481476480000005], [1435129920.0, 2300000.0, -4.587833000000001], [1435131648.0, 2320000.0, -4.627512832000001], [1435133376.0, 2340000.0, -4.667187096000001], [1435135104.0, 2360000.0, -4.706855743999999], [1435136832.0, 2380000.0, -4.746518728], [1435138560.0, 2400000.0, -4.786176], [1435140288.0, 2420000.0, -4.825827512], [1435142016.0, 2440000.0, -4.865473216], [1435143744.0, 2460000.0, -4.905113064], [1435145472.0, 2480000.0, -4.944747008], [1435147200.0, 2500000.0, -4.984375], [1435148928.0, 2520000.0, -5.023996992], [1435150656.0, 2540000.0, -5.063612936], [1435152384.0, 2560000.0, -5.103222784], [1435154112.0, 2580000.0, -5.142826488], [1435155840.0, 2600000.0, -5.182424], [1435157568.0, 2620000.0, -5.222015272], [1435159296.0, 2640000.0, -5.261600256], [1435161024.0, 2660000.0, -5.301178904], [1435162752.0, 2680000.0, -5.340751168000001], [1435164480.0, 2700000.0, -5.380317000000001], [1435166208.0, 2720000.0, -5.419876352], [1435167936.0, 2740000.0, -5.459429176], [1435169664.0, 2760000.0, -5.498975424], [1435171392.0, 2780000.0, -5.538515048000001], [1435173120.0, 2800000.0, -5.578048000000001], [1435174848.0, 2820000.0, -5.617574232], [1435176576.0, 2840000.0, -5.657093696], [1435178304.0, 2860000.0, -5.696606344], [1435180032.0, 2880000.0, -5.736112127999999], [1435181760.0, 2900000.0, -5.775611], [1435183488.0, 2920000.0, -5.8151029119999995], [1435185216.0, 2940000.0, -5.854587816], [1435186944.0, 2960000.0, -5.894065664], [1435188672.0, 2980000.0, -5.933536408], [1435190400.0, 3000000.0, -5.973], [1435192128.0, 3020000.0, -6.012456392], [1435193856.0, 3040000.0, -6.0519055360000005], [1435195584.0, 3060000.0, -6.0913473840000005], [1435197312.0, 3080000.0, -6.1307818880000005], [1435199040.0, 3100000.0, -6.170209], [1435200768.0, 3120000.0, -6.209628672], [1435202496.0, 3140000.0, -6.249040856000001], [1435204224.0, 3160000.0, -6.288445504], [1435205952.0, 3180000.0, -6.327842568], [1435207680.0, 3200000.0, -6.3672320000000004], [1435209408.0, 3220000.0, -6.406613752], [1435211136.0, 3240000.0, -6.445987776000001], [1435212864.0, 3260000.0, -6.485354024], [1435214592.0, 3280000.0, -6.524712448000001], [1435216320.0, 3300000.0, -6.564063000000001], [1435218048.0, 3320000.0, -6.603405632], [1435219776.0, 3340000.0, -6.642740296], [1435221504.0, 3360000.0, -6.682066944000001], [1435223232.0, 3380000.0, -6.721385528000001], [1435224960.0, 3400000.0, -6.760696], [1435226688.0, 3420000.0, -6.7999983120000005], [1435228416.0, 3440000.0, -6.839292415999999], [1435230144.0, 3460000.0, -6.878578264], [1435231872.0, 3480000.0, -6.917855807999999], [1435233600.0, 3500000.0, -6.9571250000000004], [1435235328.0, 3520000.0, -6.996385791999999], [1435237056.0, 3540000.0, -7.035638136], [1435238784.0, 3560000.0, -7.074881983999999], [1435240512.0, 3580000.0, -7.114117288], [1435242240.0, 3600000.0, -7.153344], [1435243968.0, 3620000.0, -7.192562072], [1435245696.0, 3640000.0, -7.231771456], [1435247424.0, 3660000.0, -7.270972104], [1435249152.0, 3680000.0, -7.3101639679999995], [1435250880.0, 3700000.0, -7.349347000000001], [1435252608.0, 3720000.0, -7.388521151999999], [1435254336.0, 3740000.0, -7.4276863760000005], [1435256064.0, 3760000.0, -7.466842624], [1435257792.0, 3780000.0, -7.5059898480000005], [1435259520.0, 3800000.0, -7.545128], [1435261248.0, 3820000.0, -7.584257032000001], [1435262976.0, 3840000.0, -7.623376896], [1435264704.0, 3860000.0, -7.662487544], [1435266432.0, 3880000.0, -7.701588928], [1435268160.0, 3900000.0, -7.740681], [1435269888.0, 3920000.0, -7.779763712], [1435271616.0, 3940000.0, -7.818837016000001], [1435273344.0, 3960000.0, -7.857900864], [1435275072.0, 3980000.0, -7.8969552080000005], [1435276800.0, 4000000.0, -7.936], [1435278528.0, 4020000.0, -7.975035192000001], [1435280256.0, 4040000.0, -8.014060736], [1435281984.0, 4060000.0, -8.053076584000001], [1435283712.0, 4080000.0, -8.092082688], [1435285440.0, 4100000.0, -8.131079], [1435287168.0, 4120000.0, -8.170065472000001], [1435288896.0, 4140000.0, -8.209042056], [1435290624.0, 4160000.0, -8.248008704], [1435292352.0, 4180000.0, -8.286965367999999], [1435294080.0, 4200000.0, -8.325912], [1435295808.0, 4220000.0, -8.364848552], [1435297536.0, 4240000.0, -8.403774976000001], [1435299264.0, 4260000.0, -8.442691223999999], [1435300992.0, 4280000.0, -8.481597248], [1435302720.0, 4300000.0, -8.520493], [1435304448.0, 4320000.0, -8.559378432], [1435306176.0, 4340000.0, -8.598253496], [1435307904.0, 4360000.0, -8.637118144], [1435309632.0, 4380000.0, -8.675972328], [1435311360.0, 4400000.0, -8.714816], [1435313088.0, 4420000.0, -8.753649112], [1435314816.0, 4440000.0, -8.792471616], [1435316544.0, 4460000.0, -8.831283464], [1435318272.0, 4480000.0, -8.870084608], [1435320000.0, 4500000.0, -8.908875], [1435321728.0, 4520000.0, -8.947654592000001], [1435323456.0, 4540000.0, -8.986423336], [1435325184.0, 4560000.0, -9.025181184000001], [1435326912.0, 4580000.0, -9.063928088], [1435328640.0, 4600000.0, -9.102664], [1435330368.0, 4620000.0, -9.141388872], [1435332096.0, 4640000.0, -9.180102656], [1435333824.0, 4660000.0, -9.218805304], [1435335552.0, 4680000.0, -9.257496768000001], [1435337280.0, 4700000.0, -9.296176999999998], [1435339008.0, 4720000.0, -9.334845952], [1435340736.0, 4740000.0, -9.373503576000001], [1435342464.0, 4760000.0, -9.412149824], [1435344192.0, 4780000.0, -9.450784647999999], [1435345920.0, 4800000.0, -9.489408], [1435347648.0, 4820000.0, -9.528019832], [1435349376.0, 4840000.0, -9.566620096], [1435351104.0, 4860000.0, -9.605208743999999], [1435352832.0, 4880000.0, -9.643785728], [1435354560.0, 4900000.0, -9.682351], [1435356288.0, 4920000.0, -9.720904512], [1435358016.0, 4940000.0, -9.759446215999999], [1435359744.0, 4960000.0, -9.797976064], [1435361472.0, 4980000.0, -9.836494008], [1435363200.0, 5000000.0, -9.875], [1435364928.0, 5020000.0, -9.913493992], [1435366656.0, 5040000.0, -9.951975936], [1435368384.0, 5060000.0, -9.990445784], [1435370112.0, 5080000.0, -10.028903488000001], [1435371840.0, 5100000.0, -10.067349], [1435373568.0, 5120000.0, -10.105782272], [1435375296.0, 5140000.0, -10.144203256], [1435377024.0, 5160000.0, -10.182611904], [1435378752.0, 5180000.0, -10.221008168], [1435380480.0, 5200000.0, -10.259392], [1435382208.0, 5220000.0, -10.297763352], [1435383936.0, 5240000.0, -10.336122176], [1435385664.0, 5260000.0, -10.374468424], [1435387392.0, 5280000.0, -10.412802048], [1435389120.0, 5300000.0, -10.451123], [1435390848.0, 5320000.0, -10.489431232000001], [1435392576.0, 5340000.0, -10.527726696], [1435394304.0, 5360000.0, -10.566009344000001], [1435396032.0, 5380000.0, -10.604279128000002], [1435397760.0, 5400000.0, -10.642536000000002], [1435399488.0, 5420000.0, -10.680779912], [1435401216.0, 5440000.0, -10.719010816], [1435402944.0, 5460000.0, -10.757228664000001], [1435404672.0, 5480000.0, -10.795433408000001], [1435406400.0, 5500000.0, -10.833625], [1435408128.0, 5520000.0, -10.871803392], [1435409856.0, 5540000.0, -10.909968536000001], [1435411584.0, 5560000.0, -10.948120384000001], [1435413312.0, 5580000.0, -10.986258888], [1435415040.0, 5600000.0, -11.024384000000001], [1435416768.0, 5620000.0, -11.062495672000003], [1435418496.0, 5640000.0, -11.100593856], [1435420224.0, 5660000.0, -11.138678503999998], [1435421952.0, 5680000.0, -11.176749568], [1435423680.0, 5700000.0, -11.214806999999999], [1435425408.0, 5720000.0, -11.252850751999999], [1435427136.0, 5740000.0, -11.290880775999998], [1435428864.0, 5760000.0, -11.328897024], [1435430592.0, 5780000.0, -11.366899447999998], [1435432320.0, 5800000.0, -11.404888], [1435434048.0, 5820000.0, -11.442862631999999], [1435435776.0, 5840000.0, -11.480823296], [1435437504.0, 5860000.0, -11.518769943999999], [1435439232.0, 5880000.0, -11.556702528], [1435440960.0, 5900000.0, -11.594620999999998], [1435442688.0, 5920000.0, -11.632525312], [1435444416.0, 5940000.0, -11.670415415999999], [1435446144.0, 5960000.0, -11.708291264], [1435447872.0, 5980000.0, -11.746152808], [1435449600.0, 6000000.0, -11.784], [1435451328.0, 6020000.0, -11.821832791999999], [1435453056.0, 6040000.0, -11.859651136], [1435454784.0, 6060000.0, -11.897454984], [1435456512.0, 6080000.0, -11.935244288], [1435458240.0, 6100000.0, -11.973018999999999], [1435459968.0, 6120000.0, -12.010779072], [1435461696.0, 6140000.0, -12.048524455999999], [1435463424.0, 6160000.0, -12.086255104000001], [1435465152.0, 6180000.0, -12.123970968], [1435466880.0, 6200000.0, -12.161672000000001], [1435468608.0, 6220000.0, -12.199358152], [1435470336.0, 6240000.0, -12.237029376], [1435472064.0, 6260000.0, -12.274685624], [1435473792.0, 6280000.0, -12.312326848], [1435475520.0, 6300000.0, -12.349953], [1435477248.0, 6320000.0, -12.387564032], [1435478976.0, 6340000.0, -12.425159896], [1435480704.0, 6360000.0, -12.462740544], [1435482432.0, 6380000.0, -12.500305928], [1435484160.0, 6400000.0, -12.537856000000001], [1435485888.0, 6420000.0, -12.575390711999999], [1435487616.0, 6440000.0, -12.612910016], [1435489344.0, 6460000.0, -12.650413864], [1435491072.0, 6480000.0, -12.687902208], [1435492800.0, 6500000.0, -12.725375], [1435494528.0, 6520000.0, -12.762832192000001], [1435496256.0, 6540000.0, -12.800273736], [1435497984.0, 6560000.0, -12.837699584000001], [1435499712.0, 6580000.0, -12.875109688], [1435501440.0, 6600000.0, -12.912504], [1435503168.0, 6620000.0, -12.949882472], [1435504896.0, 6640000.0, -12.987245056], [1435506624.0, 6660000.0, -13.024591704], [1435508352.0, 6680000.0, -13.061922368000001], [1435510080.0, 6700000.0, -13.099237], [1435511808.0, 6720000.0, -13.136535552000002], [1435513536.0, 6740000.0, -13.173817976], [1435515264.0, 6760000.0, -13.211084224000002], [1435516992.0, 6780000.0, -13.248334248], [1435518720.0, 6800000.0, -13.285568000000001], [1435520448.0, 6820000.0, -13.322785432], [1435522176.0, 6840000.0, -13.359986496000001], [1435523904.0, 6860000.0, -13.397171144000001], [1435525632.0, 6880000.0, -13.434339327999998], [1435527360.0, 6900000.0, -13.471490999999999], [1435529088.0, 6920000.0, -13.508626112], [1435530816.0, 6940000.0, -13.545744615999999], [1435532544.0, 6960000.0, -13.582846463999998], [1435534272.0, 6980000.0, -13.619931608], [1435536000.0, 7000000.0, -13.657], [1435537728.0, 7020000.0, -13.694051592], [1435539456.0, 7040000.0, -13.731086335999999], [1435541184.0, 7060000.0, -13.768104183999998], [1435542912.0, 7080000.0, -13.805105088], [1435544640.0, 7100000.0, -13.842089], [1435546368.0, 7120000.0, -13.879055871999999], [1435548096.0, 7140000.0, -13.916005656], [1435549824.0, 7160000.0, -13.952938304], [1435551552.0, 7180000.0, -13.989853768], [1435553280.0, 7200000.0, -14.026751999999998], [1435555008.0, 7220000.0, -14.063632951999999], [1435556736.0, 7240000.0, -14.100496576000001], [1435558464.0, 7260000.0, -14.137342824], [1435560192.0, 7280000.0, -14.174171647999998], [1435561920.0, 7300000.0, -14.210982999999999], [1435563648.0, 7320000.0, -14.247776832000001], [1435565376.0, 7340000.0, -14.284553096], [1435567104.0, 7360000.0, -14.321311743999999], [1435568832.0, 7380000.0, -14.358052728], [1435570560.0, 7400000.0, -14.394776], [1435572288.0, 7420000.0, -14.431481512], [1435574016.0, 7440000.0, -14.468169216], [1435575744.0, 7460000.0, -14.504839064], [1435577472.0, 7480000.0, -14.541491008000001], [1435579200.0, 7500000.0, -14.578125], [1435580928.0, 7520000.0, -14.614740992], [1435582656.0, 7540000.0, -14.651338936], [1435584384.0, 7560000.0, -14.687918784], [1435586112.0, 7580000.0, -14.724480488], [1435587840.0, 7600000.0, -14.761023999999999], [1435589568.0, 7620000.0, -14.797549272], [1435591296.0, 7640000.0, -14.834056256000002], [1435593024.0, 7660000.0, -14.870544904], [1435594752.0, 7680000.0, -14.907015168], [1435596480.0, 7700000.0, -14.943467], [1435598208.0, 7720000.0, -14.979900352000001], [1435599936.0, 7740000.0, -15.016315176], [1435601664.0, 7760000.0, -15.052711424], [1435603392.0, 7780000.0, -15.089089048], [1435605120.0, 7800000.0, -15.125448000000002], [1435606848.0, 7820000.0, -15.161788232000001], [1435608576.0, 7840000.0, -15.198109696], [1435610304.0, 7860000.0, -15.234412344], [1435612032.0, 7880000.0, -15.270696128], [1435613760.0, 7900000.0, -15.306961000000001], [1435615488.0, 7920000.0, -15.343206912], [1435617216.0, 7940000.0, -15.379433816], [1435618944.0, 7960000.0, -15.415641664000002], [1435620672.0, 7980000.0, -15.451830408000001], [1435622400.0, 8000000.0, -15.488], [1435624128.0, 8020000.0, -15.524150392], [1435625856.0, 8040000.0, -15.560281536000002], [1435627584.0, 8060000.0, -15.596393384], [1435629312.0, 8080000.0, -15.632485888], [1435631040.0, 8100000.0, -15.668559000000002], [1435632768.0, 8120000.0, -15.704612672000001], [1435634496.0, 8140000.0, -15.740646855999998], [1435636224.0, 8160000.0, -15.776661504], [1435637952.0, 8180000.0, -15.812656568], [1435639680.0, 8200000.0, -15.848631999999998], [1435641408.0, 8220000.0, -15.884587751999998], [1435643136.0, 8240000.0, -15.920523776000001], [1435644864.0, 8260000.0, -15.956440023999999], [1435646592.0, 8280000.0, -15.992336448], [1435648320.0, 8300000.0, -16.028212999999997], [1435650048.0, 8320000.0, -16.064069632], [1435651776.0, 8340000.0, -16.099906296], [1435653504.0, 8360000.0, -16.135722943999998], [1435655232.0, 8380000.0, -16.171519527999997], [1435656960.0, 8400000.0, -16.207296], [1435658688.0, 8420000.0, -16.243052312], [1435660416.0, 8440000.0, -16.278788415999998], [1435662144.0, 8460000.0, -16.314504264], [1435663872.0, 8480000.0, -16.350199808], [1435665600.0, 8500000.0, -16.385875], [1435667328.0, 8520000.0, -16.421529791999998], [1435669056.0, 8540000.0, -16.457164136], [1435670784.0, 8560000.0, -16.492777984], [1435672512.0, 8580000.0, -16.528371288], [1435674240.0, 8600000.0, -16.563944], [1435675968.0, 8620000.0, -16.599496071999997], [1435677696.0, 8640000.0, -16.635027456], [1435679424.0, 8660000.0, -16.670538104000002], [1435681152.0, 8680000.0, -16.706027968], [1435682880.0, 8700000.0, -16.741497], [1435684608.0, 8720000.0, -16.776945152], [1435686336.0, 8740000.0, -16.812372376], [1435688064.0, 8760000.0, -16.847778624], [1435689792.0, 8780000.0, -16.883163848], [1435691520.0, 8800000.0, -16.918528000000002], [1435693248.0, 8820000.0, -16.953871032000002], [1435694976.0, 8840000.0, -16.989192896], [1435696704.0, 8860000.0, -17.024493544], [1435698432.0, 8880000.0, -17.059772928], [1435700160.0, 8900000.0, -17.095031000000002], [1435701888.0, 8920000.0, -17.130267712], [1435703616.0, 8940000.0, -17.165483016], [1435705344.0, 8960000.0, -17.200676864000002], [1435707072.0, 8980000.0, -17.235849208], [1435708800.0, 9000000.0, -17.271], [1435710528.0, 9020000.0, -17.306129192], [1435712256.0, 9040000.0, -17.341236736000003], [1435713984.0, 9060000.0, -17.376322584], [1435715712.0, 9080000.0, -17.411386688], [1435717440.0, 9100000.0, -17.446429], [1435719168.0, 9120000.0, -17.481449472], [1435720896.0, 9140000.0, -17.516448056], [1435722624.0, 9160000.0, -17.551424704], [1435724352.0, 9180000.0, -17.586379368], [1435726080.0, 9200000.0, -17.621312000000003], [1435727808.0, 9220000.0, -17.656222552000003], [1435729536.0, 9240000.0, -17.691110976], [1435731264.0, 9260000.0, -17.725977224], [1435732992.0, 9280000.0, -17.760821248000003], [1435734720.0, 9300000.0, -17.795643000000002], [1435736448.0, 9320000.0, -17.830442432], [1435738176.0, 9340000.0, -17.865219495999998], [1435739904.0, 9360000.0, -17.899974144], [1435741632.0, 9380000.0, -17.934706327999997], [1435743360.0, 9400000.0, -17.969416], [1435745088.0, 9420000.0, -18.004103112], [1435746816.0, 9440000.0, -18.038767615999998], [1435748544.0, 9460000.0, -18.073409463999997], [1435750272.0, 9480000.0, -18.108028608], [1435752000.0, 9500000.0, -18.142625], [1435753728.0, 9520000.0, -18.177198592], [1435755456.0, 9540000.0, -18.211749335999997], [1435757184.0, 9560000.0, -18.246277183999997], [1435758912.0, 9580000.0, -18.280782088], [1435760640.0, 9600000.0, -18.315264], [1435762368.0, 9620000.0, -18.349722871999997], [1435764096.0, 9640000.0, -18.384158656], [1435765824.0, 9660000.0, -18.418571304], [1435767552.0, 9680000.0, -18.452960768], [1435769280.0, 9700000.0, -18.487326999999997], [1435771008.0, 9720000.0, -18.521669951999996], [1435772736.0, 9740000.0, -18.555989576], [1435774464.0, 9760000.0, -18.590285824], [1435776192.0, 9780000.0, -18.624558647999997], [1435777920.0, 9800000.0, -18.658808], [1435779648.0, 9820000.0, -18.693033832], [1435781376.0, 9840000.0, -18.727236096], [1435783104.0, 9860000.0, -18.761414744], [1435784832.0, 9880000.0, -18.795569727999997], [1435786560.0, 9900000.0, -18.829701], [1435788288.0, 9920000.0, -18.863808512], [1435790016.0, 9940000.0, -18.897892216], [1435791744.0, 9960000.0, -18.931952064], [1435793472.0, 9980000.0, -18.965988008], [1435795200.0, 10000000.0, -19.0], [1435796928.0, 10020000.0, -19.033987992], [1435798656.0, 10040000.0, -19.067951936], [1435800384.0, 10060000.0, -19.101891784000003], [1435802112.0, 10080000.0, -19.135807488], [1435803840.0, 10100000.0, -19.169698999999998], [1435805568.0, 10120000.0, -19.203566272000003], [1435807296.0, 10140000.0, -19.237409256], [1435809024.0, 10160000.0, -19.271227904], [1435810752.0, 10180000.0, -19.305022168], [1435812480.0, 10200000.0, -19.338791999999998], [1435814208.0, 10220000.0, -19.372537352000002], [1435815936.0, 10240000.0, -19.406258176], [1435817664.0, 10260000.0, -19.439954424], [1435819392.0, 10280000.0, -19.473626048000003], [1435821120.0, 10300000.0, -19.507273], [1435822848.0, 10320000.0, -19.540895232], [1435824576.0, 10340000.0, -19.574492696], [1435826304.0, 10360000.0, -19.608065344], [1435828032.0, 10380000.0, -19.641613128000003], [1435829760.0, 10400000.0, -19.675136000000002], [1435831488.0, 10420000.0, -19.708633912], [1435833216.0, 10440000.0, -19.742106816000003], [1435834944.0, 10460000.0, -19.775554664], [1435836672.0, 10480000.0, -19.808977408], [1435838400.0, 10500000.0, -19.842375], [1435840128.0, 10520000.0, -19.875747391999997], [1435841856.0, 10540000.0, -19.909094536], [1435843584.0, 10560000.0, -19.942416384], [1435845312.0, 10580000.0, -19.975712888], [1435847040.0, 10600000.0, -20.008984], [1435848768.0, 10620000.0, -20.042229672], [1435850496.0, 10640000.0, -20.075449856000002], [1435852224.0, 10660000.0, -20.108644504], [1435853952.0, 10680000.0, -20.141813568], [1435855680.0, 10700000.0, -20.174957000000003], [1435857408.0, 10720000.0, -20.208074752], [1435859136.0, 10740000.0, -20.241166776], [1435860864.0, 10760000.0, -20.274233024000004], [1435862592.0, 10780000.0, -20.307273448000004], [1435864320.0, 10800000.0, -20.340288], [1435866048.0, 10820000.0, -20.373276632], [1435867776.0, 10840000.0, -20.406239296], [1435869504.0, 10860000.0, -20.439175944000002], [1435871232.0, 10880000.0, -20.472086528000002], [1435872960.0, 10900000.0, -20.504971], [1435874688.0, 10920000.0, -20.537829312000003], [1435876416.0, 10940000.0, -20.570661416000004], [1435878144.0, 10960000.0, -20.603467264000003], [1435879872.0, 10980000.0, -20.636246808], [1435881600.0, 11000000.0, -20.669], [1435883328.0, 11020000.0, -20.701726792000002], [1435885056.0, 11040000.0, -20.734427136], [1435886784.0, 11060000.0, -20.767100984000002], [1435888512.0, 11080000.0, -20.799748288000004], [1435890240.0, 11100000.0, -20.832369000000003], [1435891968.0, 11120000.0, -20.864963072000002], [1435893696.0, 11140000.0, -20.897530456000002], [1435895424.0, 11160000.0, -20.930071104], [1435897152.0, 11180000.0, -20.962584968], [1435898880.0, 11200000.0, -20.995072], [1435900608.0, 11220000.0, -21.027532152], [1435902336.0, 11240000.0, -21.059965376000005], [1435904064.0, 11260000.0, -21.092371623999995], [1435905792.0, 11280000.0, -21.124750847999998], [1435907520.0, 11300000.0, -21.157103], [1435909248.0, 11320000.0, -21.189428032], [1435910976.0, 11340000.0, -21.221725896], [1435912704.0, 11360000.0, -21.253996544], [1435914432.0, 11380000.0, -21.286239927999997], [1435916160.0, 11400000.0, -21.318455999999998], [1435917888.0, 11420000.0, -21.350644711999998], [1435919616.0, 11440000.0, -21.382806016], [1435921344.0, 11460000.0, -21.414939863999997], [1435923072.0, 11480000.0, -21.447046207999996], [1435924800.0, 11500000.0, -21.479125], [1435926528.0, 11520000.0, -21.511176192], [1435928256.0, 11540000.0, -21.543199736], [1435929984.0, 11560000.0, -21.575195584], [1435931712.0, 11580000.0, -21.607163687999996], [1435933440.0, 11600000.0, -21.639104], [1435935168.0, 11620000.0, -21.671016471999998], [1435936896.0, 11640000.0, -21.702901055999998], [1435938624.0, 11660000.0, -21.734757704], [1435940352.0, 11680000.0, -21.766586368], [1435942080.0, 11700000.0, -21.798386999999998], [1435943808.0, 11720000.0, -21.830159551999998], [1435945536.0, 11740000.0, -21.861903975999997], [1435947264.0, 11760000.0, -21.893620224], [1435948992.0, 11780000.0, -21.925308248], [1435950720.0, 11800000.0, -21.956967999999996], [1435952448.0, 11820000.0, -21.988599432], [1435954176.0, 11840000.0, -22.020202496], [1435955904.0, 11860000.0, -22.051777144], [1435957632.0, 11880000.0, -22.083323328], [1435959360.0, 11900000.0, -22.114841], [1435961088.0, 11920000.0, -22.146330112], [1435962816.0, 11940000.0, -22.177790616], [1435964544.0, 11960000.0, -22.209222464], [1435966272.0, 11980000.0, -22.240625608000002], [1435968000.0, 12000000.0, -22.272], [1435969728.0, 12020000.0, -22.303345592], [1435971456.0, 12040000.0, -22.334662335999997], [1435973184.0, 12060000.0, -22.365950184], [1435974912.0, 12080000.0, -22.397209088], [1435976640.0, 12100000.0, -22.428439], [1435978368.0, 12120000.0, -22.459639871999997], [1435980096.0, 12140000.0, -22.490811656], [1435981824.0, 12160000.0, -22.521954304], [1435983552.0, 12180000.0, -22.553067768], [1435985280.0, 12200000.0, -22.584152], [1435987008.0, 12220000.0, -22.615206951999998], [1435988736.0, 12240000.0, -22.646232576], [1435990464.0, 12260000.0, -22.677228824], [1435992192.0, 12280000.0, -22.708195648], [1435993920.0, 12300000.0, -22.739133000000002], [1435995648.0, 12320000.0, -22.770040832], [1435997376.0, 12340000.0, -22.800919096], [1435999104.0, 12360000.0, -22.831767744], [1436000832.0, 12380000.0, -22.862586727999997], [1436002560.0, 12400000.0, -22.893376], [1436004288.0, 12420000.0, -22.924135512], [1436006016.0, 12440000.0, -22.954865215999998], [1436007744.0, 12460000.0, -22.985565064000003], [1436009472.0, 12480000.0, -23.016235008000002], [1436011200.0, 12500000.0, -23.046875], [1436012928.0, 12520000.0, -23.077484992], [1436014656.0, 12540000.0, -23.108064935999998], [1436016384.0, 12560000.0, -23.138614784], [1436018112.0, 12580000.0, -23.169134488], [1436019840.0, 12600000.0, -23.199624], [1436021568.0, 12620000.0, -23.230083272], [1436023296.0, 12640000.0, -23.260512256000002], [1436025024.0, 12660000.0, -23.290910904], [1436026752.0, 12680000.0, -23.321279168], [1436028480.0, 12700000.0, -23.351616999999997], [1436030208.0, 12720000.0, -23.381924352000002], [1436031936.0, 12740000.0, -23.412201176], [1436033664.0, 12760000.0, -23.442447424], [1436035392.0, 12780000.0, -23.472663048], [1436037120.0, 12800000.0, -23.502848], [1436038848.0, 12820000.0, -23.533002232], [1436040576.0, 12840000.0, -23.563125696], [1436042304.0, 12860000.0, -23.593218344], [1436044032.0, 12880000.0, -23.623280128], [1436045760.0, 12900000.0, -23.653311000000002], [1436047488.0, 12920000.0, -23.683310912], [1436049216.0, 12940000.0, -23.713279816000004], [1436050944.0, 12960000.0, -23.743217664000003], [1436052672.0, 12980000.0, -23.773124408], [1436054400.0, 13000000.0, -23.803], [1436056128.0, 13020000.0, -23.832844392], [1436057856.0, 13040000.0, -23.862657536], [1436059584.0, 13060000.0, -23.892439384], [1436061312.0, 13080000.0, -23.922189888], [1436063040.0, 13100000.0, -23.951909], [1436064768.0, 13120000.0, -23.981596672000002], [1436066496.0, 13140000.0, -24.011252856000002], [1436068224.0, 13160000.0, -24.040877504], [1436069952.0, 13180000.0, -24.070470567999998], [1436071680.0, 13200000.0, -24.100032000000002], [1436073408.0, 13220000.0, -24.129561752], [1436075136.0, 13240000.0, -24.159059776], [1436076864.0, 13260000.0, -24.188526024], [1436078592.0, 13280000.0, -24.217960448000003], [1436080320.0, 13300000.0, -24.247363], [1436082048.0, 13320000.0, -24.276733632], [1436083776.0, 13340000.0, -24.306072296], [1436085504.0, 13360000.0, -24.335378944000002], [1436087232.0, 13380000.0, -24.364653528], [1436088960.0, 13400000.0, -24.393896], [1436090688.0, 13420000.0, -24.423106312], [1436092416.0, 13440000.0, -24.452284416], [1436094144.0, 13460000.0, -24.481430264], [1436095872.0, 13480000.0, -24.510543808], [1436097600.0, 13500000.0, -24.539625], [1436099328.0, 13520000.0, -24.568673792000002], [1436101056.0, 13540000.0, -24.597690136], [1436102784.0, 13560000.0, -24.626673984], [1436104512.0, 13580000.0, -24.655625288000003], [1436106240.0, 13600000.0, -24.684544000000002], [1436107968.0, 13620000.0, -24.713430072], [1436109696.0, 13640000.0, -24.742283456], [1436111424.0, 13660000.0, -24.771104104], [1436113152.0, 13680000.0, -24.799891968000004], [1436114880.0, 13700000.0, -24.828647], [1436116608.0, 13720000.0, -24.857369152], [1436118336.0, 13740000.0, -24.886058376000005], [1436120064.0, 13760000.0, -24.914714624], [1436121792.0, 13780000.0, -24.943337848], [1436123520.0, 13800000.0, -24.971928], [1436125248.0, 13820000.0, -25.000485031999997], [1436126976.0, 13840000.0, -25.029008896], [1436128704.0, 13860000.0, -25.057499544], [1436130432.0, 13880000.0, -25.085956927999998], [1436132160.0, 13900000.0, -25.114380999999998], [1436133888.0, 13920000.0, -25.142771712], [1436135616.0, 13940000.0, -25.171129016], [1436137344.0, 13960000.0, -25.199452863999998], [1436139072.0, 13980000.0, -25.227743208], [1436140800.0, 14000000.0, -25.256], [1436142528.0, 14020000.0, -25.284223192], [1436144256.0, 14040000.0, -25.312412736], [1436145984.0, 14060000.0, -25.340568583999996], [1436147712.0, 14080000.0, -25.368690687999997], [1436149440.0, 14100000.0, -25.396779], [1436151168.0, 14120000.0, -25.424833472], [1436152896.0, 14140000.0, -25.452854056], [1436154624.0, 14160000.0, -25.480840704000002], [1436156352.0, 14180000.0, -25.508793368], [1436158080.0, 14200000.0, -25.536711999999998], [1436159808.0, 14220000.0, -25.564596551999998], [1436161536.0, 14240000.0, -25.592446975999998], [1436163264.0, 14260000.0, -25.620263224], [1436164992.0, 14280000.0, -25.648045248], [1436166720.0, 14300000.0, -25.675793], [1436168448.0, 14320000.0, -25.703506432], [1436170176.0, 14340000.0, -25.731185496000002], [1436171904.0, 14360000.0, -25.758830144], [1436173632.0, 14380000.0, -25.786440327999998], [1436175360.0, 14400000.0, -25.814016], [1436177088.0, 14420000.0, -25.841557112], [1436178816.0, 14440000.0, -25.869063616], [1436180544.0, 14460000.0, -25.896535464], [1436182272.0, 14480000.0, -25.923972608], [1436184000.0, 14500000.0, -25.951375], [1436185728.0, 14520000.0, -25.978742592], [1436187456.0, 14540000.0, -26.006075336], [1436189184.0, 14560000.0, -26.033373184], [1436190912.0, 14580000.0, -26.060636088000003], [1436192640.0, 14600000.0, -26.087864], [1436194368.0, 14620000.0, -26.115056871999997], [1436196096.0, 14640000.0, -26.142214656], [1436197824.0, 14660000.0, -26.169337304], [1436199552.0, 14680000.0, -26.196424768], [1436201280.0, 14700000.0, -26.223477], [1436203008.0, 14720000.0, -26.250493952], [1436204736.0, 14740000.0, -26.277475576], [1436206464.0, 14760000.0, -26.304421824], [1436208192.0, 14780000.0, -26.331332648], [1436209920.0, 14800000.0, -26.358208], [1436211648.0, 14820000.0, -26.385047832], [1436213376.0, 14840000.0, -26.411852096], [1436215104.0, 14860000.0, -26.438620743999998], [1436216832.0, 14880000.0, -26.465353727999997], [1436218560.0, 14900000.0, -26.492051], [1436220288.0, 14920000.0, -26.518712512], [1436222016.0, 14940000.0, -26.545338215999998], [1436223744.0, 14960000.0, -26.571928064], [1436225472.0, 14980000.0, -26.598482008], [1436227200.0, 15000000.0, -26.625], [1436228928.0, 15020000.0, -26.651481992], [1436230656.0, 15040000.0, -26.677927936], [1436232384.0, 15060000.0, -26.704337784], [1436234112.0, 15080000.0, -26.730711488], [1436235840.0, 15100000.0, -26.757049], [1436237568.0, 15120000.0, -26.783350272], [1436239296.0, 15140000.0, -26.809615256], [1436241024.0, 15160000.0, -26.835843904], [1436242752.0, 15180000.0, -26.862036168], [1436244480.0, 15200000.0, -26.888191999999997], [1436246208.0, 15220000.0, -26.914311352000002], [1436247936.0, 15240000.0, -26.940394175999998], [1436249664.0, 15260000.0, -26.966440423999998], [1436251392.0, 15280000.0, -26.992450048000002], [1436253120.0, 15300000.0, -27.018423000000002], [1436254848.0, 15320000.0, -27.044359232], [1436256576.0, 15340000.0, -27.070258696], [1436258304.0, 15360000.0, -27.096121344], [1436260032.0, 15380000.0, -27.121947128000002], [1436261760.0, 15400000.0, -27.147736000000002], [1436263488.0, 15420000.0, -27.173487912], [1436265216.0, 15440000.0, -27.199202816000003], [1436266944.0, 15460000.0, -27.224880664], [1436268672.0, 15480000.0, -27.250521408], [1436270400.0, 15500000.0, -27.276125], [1436272128.0, 15520000.0, -27.301691392], [1436273856.0, 15540000.0, -27.327220536000002], [1436275584.0, 15560000.0, -27.352712384], [1436277312.0, 15580000.0, -27.378166888], [1436279040.0, 15600000.0, -27.403584000000002], [1436280768.0, 15620000.0, -27.428963672000002], [1436282496.0, 15640000.0, -27.454305856], [1436284224.0, 15660000.0, -27.479610504], [1436285952.0, 15680000.0, -27.504877567999998], [1436287680.0, 15700000.0, -27.530107], [1436289408.0, 15720000.0, -27.555298752000002], [1436291136.0, 15740000.0, -27.580452776], [1436292864.0, 15760000.0, -27.605569024], [1436294592.0, 15780000.0, -27.630647448], [1436296320.0, 15800000.0, -27.655688], [1436298048.0, 15820000.0, -27.680690632], [1436299776.0, 15840000.0, -27.705655296], [1436301504.0, 15860000.0, -27.730581944], [1436303232.0, 15880000.0, -27.755470528], [1436304960.0, 15900000.0, -27.780321], [1436306688.0, 15920000.0, -27.805133312000002], [1436308416.0, 15940000.0, -27.829907416], [1436310144.0, 15960000.0, -27.854643264000003], [1436311872.0, 15980000.0, -27.879340808000002], [1436313600.0, 16000000.0, -27.904], [1436315328.0, 16020000.0, -27.928620791999997], [1436317056.0, 16040000.0, -27.953203136], [1436318784.0, 16060000.0, -27.977746984000003], [1436320512.0, 16080000.0, -28.002252288], [1436322240.0, 16100000.0, -28.026719], [1436323968.0, 16120000.0, -28.051147072], [1436325696.0, 16140000.0, -28.075536456000002], [1436327424.0, 16160000.0, -28.099887104], [1436329152.0, 16180000.0, -28.124198967999998], [1436330880.0, 16200000.0, -28.148472000000005], [1436332608.0, 16220000.0, -28.172706152000003], [1436334336.0, 16240000.0, -28.196901376000003], [1436336064.0, 16260000.0, -28.221057623999997], [1436337792.0, 16280000.0, -28.245174847999998], [1436339520.0, 16300000.0, -28.269252999999996], [1436341248.0, 16320000.0, -28.293292032000004], [1436342976.0, 16340000.0, -28.317291896], [1436344704.0, 16360000.0, -28.341252544], [1436346432.0, 16380000.0, -28.365173927999997], [1436348160.0, 16400000.0, -28.389055999999997], [1436349888.0, 16420000.0, -28.412898711999997], [1436351616.0, 16440000.0, -28.436702015999998], [1436353344.0, 16460000.0, -28.460465864000003], [1436355072.0, 16480000.0, -28.484190208], [1436356800.0, 16500000.0, -28.507875], [1436358528.0, 16520000.0, -28.531520192000002], [1436360256.0, 16540000.0, -28.555125736], [1436361984.0, 16560000.0, -28.578691583999998], [1436363712.0, 16580000.0, -28.602217687999996], [1436365440.0, 16600000.0, -28.625703999999995], [1436367168.0, 16620000.0, -28.649150471999995], [1436368896.0, 16640000.0, -28.672557056000002], [1436370624.0, 16660000.0, -28.695923704000002], [1436372352.0, 16680000.0, -28.719250368], [1436374080.0, 16700000.0, -28.742537], [1436375808.0, 16720000.0, -28.765783552], [1436377536.0, 16740000.0, -28.788989975999996], [1436379264.0, 16760000.0, -28.812156223999995], [1436380992.0, 16780000.0, -28.835282248000002], [1436382720.0, 16800000.0, -28.858368000000002], [1436384448.0, 16820000.0, -28.881413432000002], [1436386176.0, 16840000.0, -28.904418496], [1436387904.0, 16860000.0, -28.927383144], [1436389632.0, 16880000.0, -28.950307327999997], [1436391360.0, 16900000.0, -28.973191], [1436393088.0, 16920000.0, -28.996034111999997], [1436394816.0, 16940000.0, -29.018836615999994], [1436396544.0, 16960000.0, -29.041598464000003], [1436398272.0, 16980000.0, -29.064319608], [1436400000.0, 17000000.0, -29.087], [1436401728.0, 17020000.0, -29.109639592], [1436403456.0, 17040000.0, -29.132238336], [1436405184.0, 17060000.0, -29.154796184], [1436406912.0, 17080000.0, -29.177313088], [1436408640.0, 17100000.0, -29.199789000000003], [1436410368.0, 17120000.0, -29.222223872], [1436412096.0, 17140000.0, -29.244617656000003], [1436413824.0, 17160000.0, -29.266970304], [1436415552.0, 17180000.0, -29.289281768], [1436417280.0, 17200000.0, -29.311552], [1436419008.0, 17220000.0, -29.333780951999998], [1436420736.0, 17240000.0, -29.355968576], [1436422464.0, 17260000.0, -29.378114823999997], [1436424192.0, 17280000.0, -29.400219648000004], [1436425920.0, 17300000.0, -29.422283], [1436427648.0, 17320000.0, -29.444304832], [1436429376.0, 17340000.0, -29.466285096], [1436431104.0, 17360000.0, -29.488223744], [1436432832.0, 17380000.0, -29.510120727999997], [1436434560.0, 17400000.0, -29.531975999999997], [1436436288.0, 17420000.0, -29.553789512], [1436438016.0, 17440000.0, -29.575561216000004], [1436439744.0, 17460000.0, -29.597291064000004], [1436441472.0, 17480000.0, -29.618979008], [1436443200.0, 17500000.0, -29.640625], [1436444928.0, 17520000.0, -29.662228992], [1436446656.0, 17540000.0, -29.683790935999998], [1436448384.0, 17560000.0, -29.705310783999998], [1436450112.0, 17580000.0, -29.726788487999997], [1436451840.0, 17600000.0, -29.748224000000004], [1436453568.0, 17620000.0, -29.769617272], [1436455296.0, 17640000.0, -29.790968256], [1436457024.0, 17660000.0, -29.812276904], [1436458752.0, 17680000.0, -29.833543168], [1436460480.0, 17700000.0, -29.854767], [1436462208.0, 17720000.0, -29.875948351999998], [1436463936.0, 17740000.0, -29.897087176000003], [1436465664.0, 17760000.0, -29.918183424000002], [1436467392.0, 17780000.0, -29.939237048000003], [1436469120.0, 17800000.0, -29.960248], [1436470848.0, 17820000.0, -29.981216232], [1436472576.0, 17840000.0, -30.002141696], [1436474304.0, 17860000.0, -30.023024344], [1436476032.0, 17880000.0, -30.043864127999996], [1436477760.0, 17900000.0, -30.064660999999997], [1436479488.0, 17920000.0, -30.085414912000005], [1436481216.0, 17940000.0, -30.106125816000002], [1436482944.0, 17960000.0, -30.126793664], [1436484672.0, 17980000.0, -30.147418408], [1436486400.0, 18000000.0, -30.168], [1436488128.0, 18020000.0, -30.188538391999998], [1436489856.0, 18040000.0, -30.209033536], [1436491584.0, 18060000.0, -30.229485384000004], [1436493312.0, 18080000.0, -30.249893888000003], [1436495040.0, 18100000.0, -30.270259000000003], [1436496768.0, 18120000.0, -30.290580672], [1436498496.0, 18140000.0, -30.310858856], [1436500224.0, 18160000.0, -30.331093504], [1436501952.0, 18180000.0, -30.351284567999997], [1436503680.0, 18200000.0, -30.371432], [1436505408.0, 18220000.0, -30.391535751999996], [1436507136.0, 18240000.0, -30.411595776000002], [1436508864.0, 18260000.0, -30.431612024000003], [1436510592.0, 18280000.0, -30.451584448000002], [1436512320.0, 18300000.0, -30.471513], [1436514048.0, 18320000.0, -30.491397632], [1436515776.0, 18340000.0, -30.511238296], [1436517504.0, 18360000.0, -30.531034943999998], [1436519232.0, 18380000.0, -30.550787528000004], [1436520960.0, 18400000.0, -30.570496000000006], [1436522688.0, 18420000.0, -30.590160312000002], [1436524416.0, 18440000.0, -30.609780416000003], [1436526144.0, 18460000.0, -30.629356264000002], [1436527872.0, 18480000.0, -30.648887807999998], [1436529600.0, 18500000.0, -30.668374999999997], [1436531328.0, 18520000.0, -30.687817791999997], [1436533056.0, 18540000.0, -30.707216135999996], [1436534784.0, 18560000.0, -30.726569984000005], [1436536512.0, 18580000.0, -30.745879288000005], [1436538240.0, 18600000.0, -30.765144000000003], [1436539968.0, 18620000.0, -30.784364072000002], [1436541696.0, 18640000.0, -30.803539456], [1436543424.0, 18660000.0, -30.822670104], [1436545152.0, 18680000.0, -30.841755967999998], [1436546880.0, 18700000.0, -30.860797000000005], [1436548608.0, 18720000.0, -30.879793152000005], [1436550336.0, 18740000.0, -30.898744376000003], [1436552064.0, 18760000.0, -30.917650623999997], [1436553792.0, 18780000.0, -30.936511847999995], [1436555520.0, 18800000.0, -30.955327999999994], [1436557248.0, 18820000.0, -30.974099032], [1436558976.0, 18840000.0, -30.992824896000002], [1436560704.0, 18860000.0, -31.011505544], [1436562432.0, 18880000.0, -31.030140927999998], [1436564160.0, 18900000.0, -31.048730999999997], [1436565888.0, 18920000.0, -31.067275711999997], [1436567616.0, 18940000.0, -31.085775015999996], [1436569344.0, 18960000.0, -31.104228864000003], [1436571072.0, 18980000.0, -31.122637208], [1436572800.0, 19000000.0, -31.141000000000002], [1436574528.0, 19020000.0, -31.159317192], [1436576256.0, 19040000.0, -31.177588736], [1436577984.0, 19060000.0, -31.195814583999997], [1436579712.0, 19080000.0, -31.213994688], [1436581440.0, 19100000.0, -31.232128999999997], [1436583168.0, 19120000.0, -31.250217471999996], [1436584896.0, 19140000.0, -31.268260056000003], [1436586624.0, 19160000.0, -31.286256704000003], [1436588352.0, 19180000.0, -31.304207368], [1436590080.0, 19200000.0, -31.322111999999997], [1436591808.0, 19220000.0, -31.339970551999997], [1436593536.0, 19240000.0, -31.357782975999996], [1436595264.0, 19260000.0, -31.375549223999997], [1436596992.0, 19280000.0, -31.393269248000003], [1436598720.0, 19300000.0, -31.410943000000003], [1436600448.0, 19320000.0, -31.428570432], [1436602176.0, 19340000.0, -31.446151496], [1436603904.0, 19360000.0, -31.463686144], [1436605632.0, 19380000.0, -31.481174327999998], [1436607360.0, 19400000.0, -31.498616], [1436609088.0, 19420000.0, -31.516011111999997], [1436610816.0, 19440000.0, -31.533359615999995], [1436612544.0, 19460000.0, -31.550661464], [1436614272.0, 19480000.0, -31.567916608], [1436616000.0, 19500000.0, -31.585125], [1436617728.0, 19520000.0, -31.602286592], [1436619456.0, 19540000.0, -31.619401336], [1436621184.0, 19560000.0, -31.636469184], [1436622912.0, 19580000.0, -31.653490087999998], [1436624640.0, 19600000.0, -31.670464000000003], [1436626368.0, 19620000.0, -31.687390872], [1436628096.0, 19640000.0, -31.704270656000002], [1436629824.0, 19660000.0, -31.721103304], [1436631552.0, 19680000.0, -31.737888767999998], [1436633280.0, 19700000.0, -31.754627], [1436635008.0, 19720000.0, -31.771317951999997], [1436636736.0, 19740000.0, -31.787961575999997], [1436638464.0, 19760000.0, -31.804557823999996], [1436640192.0, 19780000.0, -31.821106648000004], [1436641920.0, 19800000.0, -31.837608000000003], [1436643648.0, 19820000.0, -31.854061832], [1436645376.0, 19840000.0, -31.870468096], [1436647104.0, 19860000.0, -31.886826744], [1436648832.0, 19880000.0, -31.903137727999997], [1436650560.0, 19900000.0, -31.919400999999997], [1436652288.0, 19920000.0, -31.935616512000003], [1436654016.0, 19940000.0, -31.951784216000004], [1436655744.0, 19960000.0, -31.967904064000003], [1436657472.0, 19980000.0, -31.983976008], [1436659200.0, 20000000.0, -32.0], [1436660928.0, 20020000.0, -32.015975991999994], [1436662656.0, 20040000.0, -32.031903936], [1436664384.0, 20060000.0, -32.047783784], [1436666112.0, 20080000.0, -32.063615487999996], [1436667840.0, 20100000.0, -32.079398999999995], [1436669568.0, 20120000.0, -32.095134272], [1436671296.0, 20140000.0, -32.110821255999994], [1436673024.0, 20160000.0, -32.126459904], [1436674752.0, 20180000.0, -32.142050168000004], [1436676480.0, 20200000.0, -32.157592], [1436678208.0, 20220000.0, -32.173085352], [1436679936.0, 20240000.0, -32.188530176], [1436681664.0, 20260000.0, -32.203926423999995], [1436683392.0, 20280000.0, -32.219274048], [1436685120.0, 20300000.0, -32.234573], [1436686848.0, 20320000.0, -32.249823232], [1436688576.0, 20340000.0, -32.265024696], [1436690304.0, 20360000.0, -32.280177343999995], [1436692032.0, 20380000.0, -32.295281128], [1436693760.0, 20400000.0, -32.310336], [1436695488.0, 20420000.0, -32.325341912], [1436697216.0, 20440000.0, -32.340298816], [1436698944.0, 20460000.0, -32.355206663999994], [1436700672.0, 20480000.0, -32.370065408], [1436702400.0, 20500000.0, -32.384875], [1436704128.0, 20520000.0, -32.399635392], [1436705856.0, 20540000.0, -32.414346536], [1436707584.0, 20560000.0, -32.42900838400001], [1436709312.0, 20580000.0, -32.443620888], [1436711040.0, 20600000.0, -32.458184], [1436712768.0, 20620000.0, -32.472697671999995], [1436714496.0, 20640000.0, -32.487161856], [1436716224.0, 20660000.0, -32.501576504], [1436717952.0, 20680000.0, -32.515941568], [1436719680.0, 20700000.0, -32.530257], [1436721408.0, 20720000.0, -32.544522752], [1436723136.0, 20740000.0, -32.558738776], [1436724864.0, 20760000.0, -32.572905024], [1436726592.0, 20780000.0, -32.587021448], [1436728320.0, 20800000.0, -32.601088000000004], [1436730048.0, 20820000.0, -32.615104632], [1436731776.0, 20840000.0, -32.629071296], [1436733504.0, 20860000.0, -32.642987944], [1436735232.0, 20880000.0, -32.656854528000004], [1436736960.0, 20900000.0, -32.670671], [1436738688.0, 20920000.0, -32.684437312], [1436740416.0, 20940000.0, -32.698153416], [1436742144.0, 20960000.0, -32.711819264], [1436743872.0, 20980000.0, -32.725434807999996], [1436745600.0, 21000000.0, -32.739], [1436747328.0, 21020000.0, -32.752514792], [1436749056.0, 21040000.0, -32.765979136], [1436750784.0, 21060000.0, -32.779392984], [1436752512.0, 21080000.0, -32.79275628800001], [1436754240.0, 21100000.0, -32.806068999999994], [1436755968.0, 21120000.0, -32.819331072], [1436757696.0, 21140000.0, -32.832542456], [1436759424.0, 21160000.0, -32.845703104], [1436761152.0, 21180000.0, -32.858812968], [1436762880.0, 21200000.0, -32.871872], [1436764608.0, 21220000.0, -32.884880152], [1436766336.0, 21240000.0, -32.897837376000005], [1436768064.0, 21260000.0, -32.910743624], [1436769792.0, 21280000.0, -32.923598848], [1436771520.0, 21300000.0, -32.936403], [1436773248.0, 21320000.0, -32.949156032], [1436774976.0, 21340000.0, -32.961857896], [1436776704.0, 21360000.0, -32.974508543999995], [1436778432.0, 21380000.0, -32.987107928], [1436780160.0, 21400000.0, -32.999656], [1436781888.0, 21420000.0, -33.012152711999995], [1436783616.0, 21440000.0, -33.024598016], [1436785344.0, 21460000.0, -33.036991864], [1436787072.0, 21480000.0, -33.049334208], [1436788800.0, 21500000.0, -33.061625], [1436790528.0, 21520000.0, -33.073864192], [1436792256.0, 21540000.0, -33.086051736], [1436793984.0, 21560000.0, -33.098187584], [1436795712.0, 21580000.0, -33.110271688], [1436797440.0, 21600000.0, -33.122304], [1436799168.0, 21620000.0, -33.134284472], [1436800896.0, 21640000.0, -33.146213056], [1436802624.0, 21660000.0, -33.158089704000005], [1436804352.0, 21680000.0, -33.16991436799999], [1436806080.0, 21700000.0, -33.181687], [1436807808.0, 21720000.0, -33.193407552000004], [1436809536.0, 21740000.0, -33.205075975999996], [1436811264.0, 21760000.0, -33.216692224], [1436812992.0, 21780000.0, -33.228256248], [1436814720.0, 21800000.0, -33.239768], [1436816448.0, 21820000.0, -33.251227432], [1436818176.0, 21840000.0, -33.262634496000004], [1436819904.0, 21860000.0, -33.273989144], [1436821632.0, 21880000.0, -33.285291328], [1436823360.0, 21900000.0, -33.296541], [1436825088.0, 21920000.0, -33.307738112], [1436826816.0, 21940000.0, -33.318882615999996], [1436828544.0, 21960000.0, -33.329974464], [1436830272.0, 21980000.0, -33.341013608000004], [1436832000.0, 22000000.0, -33.352], [1436833728.0, 22020000.0, -33.362933592000005], [1436835456.0, 22040000.0, -33.373814336], [1436837184.0, 22060000.0, -33.384642184], [1436838912.0, 22080000.0, -33.395417088], [1436840640.0, 22100000.0, -33.406139], [1436842368.0, 22120000.0, -33.416807872], [1436844096.0, 22140000.0, -33.427423656], [1436845824.0, 22160000.0, -33.437986304000006], [1436847552.0, 22180000.0, -33.448495768], [1436849280.0, 22200000.0, -33.458952000000004], [1436851008.0, 22220000.0, -33.469354951999996], [1436852736.0, 22240000.0, -33.479704576], [1436854464.0, 22260000.0, -33.49000082399999], [1436856192.0, 22280000.0, -33.500243648], [1436857920.0, 22300000.0, -33.510433], [1436859648.0, 22320000.0, -33.520568831999995], [1436861376.0, 22340000.0, -33.530651096], [1436863104.0, 22360000.0, -33.540679744], [1436864832.0, 22380000.0, -33.550654728], [1436866560.0, 22400000.0, -33.560576], [1436868288.0, 22420000.0, -33.570443512000004], [1436870016.0, 22440000.0, -33.580257216], [1436871744.0, 22460000.0, -33.590017064], [1436873472.0, 22480000.0, -33.599723008000005], [1436875200.0, 22500000.0, -33.609375], [1436876928.0, 22520000.0, -33.618972991999996], [1436878656.0, 22540000.0, -33.628516936], [1436880384.0, 22560000.0, -33.638006784], [1436882112.0, 22580000.0, -33.647442487999996], [1436883840.0, 22600000.0, -33.656824], [1436885568.0, 22620000.0, -33.666151272], [1436887296.0, 22640000.0, -33.675424256], [1436889024.0, 22660000.0, -33.684642904], [1436890752.0, 22680000.0, -33.693807168], [1436892480.0, 22700000.0, -33.702917], [1436894208.0, 22720000.0, -33.711972352000004], [1436895936.0, 22740000.0, -33.720973176], [1436897664.0, 22760000.0, -33.729919424], [1436899392.0, 22780000.0, -33.738811048], [1436901120.0, 22800000.0, -33.747648], [1436902848.0, 22820000.0, -33.756430232], [1436904576.0, 22840000.0, -33.765157695999996], [1436906304.0, 22860000.0, -33.773830344], [1436908032.0, 22880000.0, -33.782448128], [1436909760.0, 22900000.0, -33.791011], [1436911488.0, 22920000.0, -33.799518911999996], [1436913216.0, 22940000.0, -33.807971816000006], [1436914944.0, 22960000.0, -33.816369664], [1436916672.0, 22980000.0, -33.824712408], [1436918400.0, 23000000.0, -33.833000000000006], [1436920128.0, 23020000.0, -33.841232391999995], [1436921856.0, 23040000.0, -33.849409536], [1436923584.0, 23060000.0, -33.857531384000005], [1436925312.0, 23080000.0, -33.865597887999996], [1436927040.0, 23100000.0, -33.873609], [1436928768.0, 23120000.0, -33.881564671999996], [1436930496.0, 23140000.0, -33.889464856000004], [1436932224.0, 23160000.0, -33.89730950399999], [1436933952.0, 23180000.0, -33.905098568], [1436935680.0, 23200000.0, -33.912832], [1436937408.0, 23220000.0, -33.920509751999994], [1436939136.0, 23240000.0, -33.928131776], [1436940864.0, 23260000.0, -33.935698024000004], [1436942592.0, 23280000.0, -33.94320844799999], [1436944320.0, 23300000.0, -33.950663], [1436946048.0, 23320000.0, -33.958061632], [1436947776.0, 23340000.0, -33.965404295999996], [1436949504.0, 23360000.0, -33.972690944], [1436951232.0, 23380000.0, -33.979921528000006], [1436952960.0, 23400000.0, -33.987096], [1436954688.0, 23420000.0, -33.994214312000004], [1436956416.0, 23440000.0, -34.001276415999996], [1436958144.0, 23460000.0, -34.008282264], [1436959872.0, 23480000.0, -34.015231807999996], [1436961600.0, 23500000.0, -34.022124999999996], [1436963328.0, 23520000.0, -34.028961792000004], [1436965056.0, 23540000.0, -34.035742135999996], [1436966784.0, 23560000.0, -34.042465984], [1436968512.0, 23580000.0, -34.049133288], [1436970240.0, 23600000.0, -34.055744], [1436971968.0, 23620000.0, -34.062298072000004], [1436973696.0, 23640000.0, -34.068795456000004], [1436975424.0, 23660000.0, -34.075236104], [1436977152.0, 23680000.0, -34.081619968], [1436978880.0, 23700000.0, -34.08794700000001], [1436980608.0, 23720000.0, -34.094217152], [1436982336.0, 23740000.0, -34.100430376000006], [1436984064.0, 23760000.0, -34.106586623999995], [1436985792.0, 23780000.0, -34.112685848], [1436987520.0, 23800000.0, -34.118728], [1436989248.0, 23820000.0, -34.124713032], [1436990976.0, 23840000.0, -34.130640896], [1436992704.0, 23860000.0, -34.136511543999994], [1436994432.0, 23880000.0, -34.142324928], [1436996160.0, 23900000.0, -34.148081000000005], [1436997888.0, 23920000.0, -34.153779711999995], [1436999616.0, 23940000.0, -34.159421015999996], [1437001344.0, 23960000.0, -34.165004864000004], [1437003072.0, 23980000.0, -34.170531208], [1437004800.0, 24000000.0, -34.176], [1437006528.0, 24020000.0, -34.181411192], [1437008256.0, 24040000.0, -34.186764736], [1437009984.0, 24060000.0, -34.192060584000004], [1437011712.0, 24080000.0, -34.197298688], [1437013440.0, 24100000.0, -34.202479], [1437015168.0, 24120000.0, -34.20760147199999], [1437016896.0, 24140000.0, -34.212666055999996], [1437018624.0, 24160000.0, -34.217672704], [1437020352.0, 24180000.0, -34.222621368], [1437022080.0, 24200000.0, -34.227512], [1437023808.0, 24220000.0, -34.232344552], [1437025536.0, 24240000.0, -34.237118976], [1437027264.0, 24260000.0, -34.241835224], [1437028992.0, 24280000.0, -34.24649324800001], [1437030720.0, 24300000.0, -34.251093], [1437032448.0, 24320000.0, -34.255634432], [1437034176.0, 24340000.0, -34.26011749600001], [1437035904.0, 24360000.0, -34.264542144], [1437037632.0, 24380000.0, -34.268908328], [1437039360.0, 24400000.0, -34.273216], [1437041088.0, 24420000.0, -34.277465112], [1437042816.0, 24440000.0, -34.281655615999995], [1437044544.0, 24460000.0, -34.285787463999995], [1437046272.0, 24480000.0, -34.289860608], [1437048000.0, 24500000.0, -34.293875], [1437049728.0, 24520000.0, -34.297830592], [1437051456.0, 24540000.0, -34.301727336], [1437053184.0, 24560000.0, -34.305565183999995], [1437054912.0, 24580000.0, -34.309344088], [1437056640.0, 24600000.0, -34.313064000000004], [1437058368.0, 24620000.0, -34.316724871999995], [1437060096.0, 24640000.0, -34.320326656], [1437061824.0, 24660000.0, -34.323869304000006], [1437063552.0, 24680000.0, -34.327352768], [1437065280.0, 24700000.0, -34.330777], [1437067008.0, 24720000.0, -34.334141951999996], [1437068736.0, 24740000.0, -34.337447576], [1437070464.0, 24760000.0, -34.340693824], [1437072192.0, 24780000.0, -34.343880647999995], [1437073920.0, 24800000.0, -34.347008], [1437075648.0, 24820000.0, -34.350075831999995], [1437077376.0, 24840000.0, -34.353084096], [1437079104.0, 24860000.0, -34.356032744000004], [1437080832.0, 24880000.0, -34.358921728], [1437082560.0, 24900000.0, -34.361751], [1437084288.0, 24920000.0, -34.364520512000006], [1437086016.0, 24940000.0, -34.367230215999996], [1437087744.0, 24960000.0, -34.369880064], [1437089472.0, 24980000.0, -34.37247000800001], [1437091200.0, 25000000.0, -34.375], [1437092928.0, 25020000.0, -34.377469991999995], [1437094656.0, 25040000.0, -34.379879935999995], [1437096384.0, 25060000.0, -34.382229784], [1437098112.0, 25080000.0, -34.384519487999995], [1437099840.0, 25100000.0, -34.386749], [1437101568.0, 25120000.0, -34.388918272], [1437103296.0, 25140000.0, -34.391027256], [1437105024.0, 25160000.0, -34.393075904], [1437106752.0, 25180000.0, -34.395064168000005], [1437108480.0, 25200000.0, -34.396992], [1437110208.0, 25220000.0, -34.398859352], [1437111936.0, 25240000.0, -34.400666176], [1437113664.0, 25260000.0, -34.402412424], [1437115392.0, 25280000.0, -34.404098048], [1437117120.0, 25300000.0, -34.405722999999995], [1437118848.0, 25320000.0, -34.407287232], [1437120576.0, 25340000.0, -34.408790696], [1437122304.0, 25360000.0, -34.410233344], [1437124032.0, 25380000.0, -34.411615128], [1437125760.0, 25400000.0, -34.412936], [1437127488.0, 25420000.0, -34.414195912], [1437129216.0, 25440000.0, -34.415394816], [1437130944.0, 25460000.0, -34.416532664], [1437132672.0, 25480000.0, -34.417609408000004], [1437134400.0, 25500000.0, -34.418625000000006], [1437136128.0, 25520000.0, -34.419579392], [1437137856.0, 25540000.0, -34.420472536000005], [1437139584.0, 25560000.0, -34.42130438400001], [1437141312.0, 25580000.0, -34.422074888], [1437143040.0, 25600000.0, -34.422784], [1437144768.0, 25620000.0, -34.42343167199999], [1437146496.0, 25640000.0, -34.424017856000006], [1437148224.0, 25660000.0, -34.424542504], [1437149952.0, 25680000.0, -34.425005568], [1437151680.0, 25700000.0, -34.42540700000001], [1437153408.0, 25720000.0, -34.425746751999995], [1437155136.0, 25740000.0, -34.426024776000006], [1437156864.0, 25760000.0, -34.426241024], [1437158592.0, 25780000.0, -34.426395447999994], [1437160320.0, 25800000.0, -34.426488], [1437162048.0, 25820000.0, -34.426518632000004], [1437163776.0, 25840000.0, -34.426487296], [1437165504.0, 25860000.0, -34.426393944], [1437167232.0, 25880000.0, -34.426238528], [1437168960.0, 25900000.0, -34.426021000000006], [1437170688.0, 25920000.0, -34.425741312], [1437172416.0, 25940000.0, -34.425399416], [1437174144.0, 25960000.0, -34.424995264], [1437175872.0, 25980000.0, -34.42452880799999], [1437177600.0, 26000000.0, -34.42399999999999], [1437179328.0, 26020000.0, -34.423408792000004], [1437181056.0, 26040000.0, -34.42275513599999], [1437182784.0, 26060000.0, -34.422038984], [1437184512.0, 26080000.0, -34.421260288], [1437186240.0, 26100000.0, -34.420418999999995], [1437187968.0, 26120000.0, -34.419515071999996], [1437189696.0, 26140000.0, -34.418548456], [1437191424.0, 26160000.0, -34.41751910399999], [1437193152.0, 26180000.0, -34.416426968], [1437194880.0, 26200000.0, -34.415272], [1437196608.0, 26220000.0, -34.414054152], [1437198336.0, 26240000.0, -34.412773376000004], [1437200064.0, 26260000.0, -34.41142962399999], [1437201792.0, 26280000.0, -34.410022848], [1437203520.0, 26300000.0, -34.408553], [1437205248.0, 26320000.0, -34.407020032], [1437206976.0, 26340000.0, -34.405423896], [1437208704.0, 26360000.0, -34.403764544], [1437210432.0, 26380000.0, -34.402041928], [1437212160.0, 26400000.0, -34.400256], [1437213888.0, 26420000.0, -34.398406711999996], [1437215616.0, 26440000.0, -34.396494016], [1437217344.0, 26460000.0, -34.39451786400001], [1437219072.0, 26480000.0, -34.392478208], [1437220800.0, 26500000.0, -34.390375000000006], [1437222528.0, 26520000.0, -34.38820819200001], [1437224256.0, 26540000.0, -34.385977736], [1437225984.0, 26560000.0, -34.383683583999996], [1437227712.0, 26580000.0, -34.381325688], [1437229440.0, 26600000.0, -34.378904000000006], [1437231168.0, 26620000.0, -34.376418472], [1437232896.0, 26640000.0, -34.373869056], [1437234624.0, 26660000.0, -34.371255704000006], [1437236352.0, 26680000.0, -34.368578368], [1437238080.0, 26700000.0, -34.365837], [1437239808.0, 26720000.0, -34.363031552], [1437241536.0, 26740000.0, -34.360161976], [1437243264.0, 26760000.0, -34.357228223999996], [1437244992.0, 26780000.0, -34.35423024800001], [1437246720.0, 26800000.0, -34.351168], [1437248448.0, 26820000.0, -34.348041432], [1437250176.0, 26840000.0, -34.34485049600001], [1437251904.0, 26860000.0, -34.341595143999996], [1437253632.0, 26880000.0, -34.338275328], [1437255360.0, 26900000.0, -34.334891], [1437257088.0, 26920000.0, -34.331442112], [1437258816.0, 26940000.0, -34.327928615999994], [1437260544.0, 26960000.0, -34.324350464], [1437262272.0, 26980000.0, -34.320707608000006], [1437264000.0, 27000000.0, -34.31699999999999], [1437265728.0, 27020000.0, -34.313227592000004], [1437267456.0, 27040000.0, -34.30939033600001], [1437269184.0, 27060000.0, -34.305488184], [1437270912.0, 27080000.0, -34.301521088], [1437272640.0, 27100000.0, -34.297489], [1437274368.0, 27120000.0, -34.293391872], [1437276096.0, 27140000.0, -34.289229656], [1437277824.0, 27160000.0, -34.285002304], [1437279552.0, 27180000.0, -34.280709768], [1437281280.0, 27200000.0, -34.276352], [1437283008.0, 27220000.0, -34.271928951999996], [1437284736.0, 27240000.0, -34.267440576], [1437286464.0, 27260000.0, -34.26288682399999], [1437288192.0, 27280000.0, -34.258267648], [1437289920.0, 27300000.0, -34.253583000000006], [1437291648.0, 27320000.0, -34.24883283199999], [1437293376.0, 27340000.0, -34.244017096], [1437295104.0, 27360000.0, -34.239135744], [1437296832.0, 27380000.0, -34.234188728], [1437298560.0, 27400000.0, -34.229175999999995], [1437300288.0, 27420000.0, -34.224097512], [1437302016.0, 27440000.0, -34.218953216], [1437303744.0, 27460000.0, -34.213743064], [1437305472.0, 27480000.0, -34.208467008], [1437307200.0, 27500000.0, -34.203125], [1437308928.0, 27520000.0, -34.197716992], [1437310656.0, 27540000.0, -34.192242936], [1437312384.0, 27560000.0, -34.186702784000005], [1437314112.0, 27580000.0, -34.181096487999994], [1437315840.0, 27600000.0, -34.175424], [1437317568.0, 27620000.0, -34.169685272], [1437319296.0, 27640000.0, -34.163880256], [1437321024.0, 27660000.0, -34.158008904], [1437322752.0, 27680000.0, -34.152071168000006], [1437324480.0, 27700000.0, -34.146067], [1437326208.0, 27720000.0, -34.139996352000004], [1437327936.0, 27740000.0, -34.133859176], [1437329664.0, 27760000.0, -34.127655424], [1437331392.0, 27780000.0, -34.121385048], [1437333120.0, 27800000.0, -34.115048], [1437334848.0, 27820000.0, -34.108644232], [1437336576.0, 27840000.0, -34.102173695999994], [1437338304.0, 27860000.0, -34.095636344], [1437340032.0, 27880000.0, -34.089032128], [1437341760.0, 27900000.0, -34.08236099999999], [1437343488.0, 27920000.0, -34.075622912], [1437345216.0, 27940000.0, -34.068817816], [1437346944.0, 27960000.0, -34.061945664], [1437348672.0, 27980000.0, -34.055006408], [1437350400.0, 28000000.0, -34.048], [1437352128.0, 28020000.0, -34.040926392], [1437353856.0, 28040000.0, -34.033785536], [1437355584.0, 28060000.0, -34.02657738400001], [1437357312.0, 28080000.0, -34.019301888], [1437359040.0, 28100000.0, -34.011959000000004], [1437360768.0, 28120000.0, -34.004548672], [1437362496.0, 28140000.0, -33.997070856], [1437364224.0, 28160000.0, -33.989525504], [1437365952.0, 28180000.0, -33.981912568], [1437367680.0, 28200000.0, -33.974232], [1437369408.0, 28220000.0, -33.966483751999995], [1437371136.0, 28240000.0, -33.958667776], [1437372864.0, 28260000.0, -33.950784024], [1437374592.0, 28280000.0, -33.942832448000004], [1437376320.0, 28300000.0, -33.934813], [1437378048.0, 28320000.0, -33.926725632], [1437379776.0, 28340000.0, -33.918570296], [1437381504.0, 28360000.0, -33.910346944000004], [1437383232.0, 28380000.0, -33.902055528000005], [1437384960.0, 28400000.0, -33.893696], [1437386688.0, 28420000.0, -33.885268312], [1437388416.0, 28440000.0, -33.876772415999994], [1437390144.0, 28460000.0, -33.868208264], [1437391872.0, 28480000.0, -33.859575808], [1437393600.0, 28500000.0, -33.850875], [1437395328.0, 28520000.0, -33.842105792], [1437397056.0, 28540000.0, -33.833268135999994], [1437398784.0, 28560000.0, -33.82436198400001], [1437400512.0, 28580000.0, -33.815387288], [1437402240.0, 28600000.0, -33.806343999999996], [1437403968.0, 28620000.0, -33.797232072], [1437405696.0, 28640000.0, -33.788051456000005], [1437407424.0, 28660000.0, -33.77880210399999], [1437409152.0, 28680000.0, -33.769483968], [1437410880.0, 28700000.0, -33.760097], [1437412608.0, 28720000.0, -33.750641152], [1437414336.0, 28740000.0, -33.741116376], [1437416064.0, 28760000.0, -33.73152262399999], [1437417792.0, 28780000.0, -33.721859847999994], [1437419520.0, 28800000.0, -33.71212799999999], [1437421248.0, 28820000.0, -33.702327032], [1437422976.0, 28840000.0, -33.692456895999996], [1437424704.0, 28860000.0, -33.68251754399999], [1437426432.0, 28880000.0, -33.672508928], [1437428160.0, 28900000.0, -33.662431], [1437429888.0, 28920000.0, -33.652283712], [1437431616.0, 28940000.0, -33.642067016], [1437433344.0, 28960000.0, -33.63178086400001], [1437435072.0, 28980000.0, -33.621425208], [1437436800.0, 29000000.0, -33.611000000000004], [1437438528.0, 29020000.0, -33.600505192], [1437440256.0, 29040000.0, -33.589940736], [1437441984.0, 29060000.0, -33.579306584], [1437443712.0, 29080000.0, -33.568602688], [1437445440.0, 29100000.0, -33.557829], [1437447168.0, 29120000.0, -33.546985471999996], [1437448896.0, 29140000.0, -33.536072055999995], [1437450624.0, 29160000.0, -33.525088704000005], [1437452352.0, 29180000.0, -33.514035367999995], [1437454080.0, 29200000.0, -33.502912], [1437455808.0, 29220000.0, -33.491718551999995], [1437457536.0, 29240000.0, -33.480454976], [1437459264.0, 29260000.0, -33.469121224], [1437460992.0, 29280000.0, -33.45771724800001], [1437462720.0, 29300000.0, -33.446242999999996], [1437464448.0, 29320000.0, -33.434698432000005], [1437466176.0, 29340000.0, -33.423083496000004], [1437467904.0, 29360000.0, -33.411398144], [1437469632.0, 29380000.0, -33.399642328], [1437471360.0, 29400000.0, -33.387816], [1437473088.0, 29420000.0, -33.375919112000005], [1437474816.0, 29440000.0, -33.363951615999994], [1437476544.0, 29460000.0, -33.351913464], [1437478272.0, 29480000.0, -33.339804608], [1437480000.0, 29500000.0, -33.327625], [1437481728.0, 29520000.0, -33.315374592], [1437483456.0, 29540000.0, -33.303053336000005], [1437485184.0, 29560000.0, -33.290661184], [1437486912.0, 29580000.0, -33.278198087999996], [1437488640.0, 29600000.0, -33.265664], [1437490368.0, 29620000.0, -33.253058872], [1437492096.0, 29640000.0, -33.240382655999994], [1437493824.0, 29660000.0, -33.227635304], [1437495552.0, 29680000.0, -33.214816768000006], [1437497280.0, 29700000.0, -33.201927], [1437499008.0, 29720000.0, -33.188965952], [1437500736.0, 29740000.0, -33.175933576], [1437502464.0, 29760000.0, -33.162829824], [1437504192.0, 29780000.0, -33.149654647999995], [1437505920.0, 29800000.0, -33.136408], [1437507648.0, 29820000.0, -33.12308983199999], [1437509376.0, 29840000.0, -33.109700096], [1437511104.0, 29860000.0, -33.096238744000004], [1437512832.0, 29880000.0, -33.082705728], [1437514560.0, 29900000.0, -33.069101], [1437516288.0, 29920000.0, -33.055424512], [1437518016.0, 29940000.0, -33.041676216], [1437519744.0, 29960000.0, -33.027856064000005], [1437521472.0, 29980000.0, -33.013964008], [1437523200.0, 30000000.0, -33.0], [1437524928.0, 30020000.0, -32.985963991999995], [1437526656.0, 30040000.0, -32.971855936], [1437528384.0, 30060000.0, -32.957675784], [1437530112.0, 30080000.0, -32.94342348799999], [1437531840.0, 30100000.0, -32.929099], [1437533568.0, 30120000.0, -32.914702272], [1437535296.0, 30140000.0, -32.900233256], [1437537024.0, 30160000.0, -32.885691904], [1437538752.0, 30180000.0, -32.871078168000004], [1437540480.0, 30200000.0, -32.856392], [1437542208.0, 30220000.0, -32.841633352], [1437543936.0, 30240000.0, -32.826802176], [1437545664.0, 30260000.0, -32.811898424], [1437547392.0, 30280000.0, -32.796922048], [1437549120.0, 30300000.0, -32.781873], [1437550848.0, 30320000.0, -32.766751232000004], [1437552576.0, 30340000.0, -32.751556695999994], [1437554304.0, 30360000.0, -32.736289344], [1437556032.0, 30380000.0, -32.720949128], [1437557760.0, 30400000.0, -32.705535999999995], [1437559488.0, 30420000.0, -32.690049912000006], [1437561216.0, 30440000.0, -32.674490816], [1437562944.0, 30460000.0, -32.658858664], [1437564672.0, 30480000.0, -32.643153407999996], [1437566400.0, 30500000.0, -32.62737500000001], [1437568128.0, 30520000.0, -32.611523391999995], [1437569856.0, 30540000.0, -32.595598536000004], [1437571584.0, 30560000.0, -32.579600384], [1437573312.0, 30580000.0, -32.56352888800001], [1437575040.0, 30600000.0, -32.547384], [1437576768.0, 30620000.0, -32.531165672], [1437578496.0, 30640000.0, -32.514873855999994], [1437580224.0, 30660000.0, -32.498508504], [1437581952.0, 30680000.0, -32.482069568], [1437583680.0, 30700000.0, -32.465557000000004], [1437585408.0, 30720000.0, -32.448970751999994], [1437587136.0, 30740000.0, -32.432310776], [1437588864.0, 30760000.0, -32.415577024], [1437590592.0, 30780000.0, -32.398769447999996], [1437592320.0, 30800000.0, -32.381888000000004], [1437594048.0, 30820000.0, -32.364932632000006], [1437595776.0, 30840000.0, -32.347903296], [1437597504.0, 30860000.0, -32.330799944], [1437599232.0, 30880000.0, -32.313622527999996], [1437600960.0, 30900000.0, -32.296371], [1437602688.0, 30920000.0, -32.27904531200001], [1437604416.0, 30940000.0, -32.261645416], [1437606144.0, 30960000.0, -32.244171264], [1437607872.0, 30980000.0, -32.226622808], [1437609600.0, 31000000.0, -32.208999999999996], [1437611328.0, 31020000.0, -32.191302792], [1437613056.0, 31040000.0, -32.173531135999994], [1437614784.0, 31060000.0, -32.155684984000004], [1437616512.0, 31080000.0, -32.137764288], [1437618240.0, 31100000.0, -32.119769000000005], [1437619968.0, 31120000.0, -32.101699072], [1437621696.0, 31140000.0, -32.083554456], [1437623424.0, 31160000.0, -32.065335104], [1437625152.0, 31180000.0, -32.047040968000005], [1437626880.0, 31200000.0, -32.028672], [1437628608.0, 31220000.0, -32.010228151999996], [1437630336.0, 31240000.0, -31.991709376], [1437632064.0, 31260000.0, -31.973115624000002], [1437633792.0, 31280000.0, -31.954446847999996], [1437635520.0, 31300000.0, -31.935702999999997], [1437637248.0, 31320000.0, -31.916884032], [1437638976.0, 31340000.0, -31.897989896], [1437640704.0, 31360000.0, -31.879020543999992], [1437642432.0, 31380000.0, -31.859975928000004], [1437644160.0, 31400000.0, -31.840856000000002], [1437645888.0, 31420000.0, -31.821660712], [1437647616.0, 31440000.0, -31.802390016], [1437649344.0, 31460000.0, -31.783043864000003], [1437651072.0, 31480000.0, -31.763622207999997], [1437652800.0, 31500000.0, -31.744125000000004], [1437654528.0, 31520000.0, -31.724552192], [1437656256.0, 31540000.0, -31.704903736], [1437657984.0, 31560000.0, -31.685179583999997], [1437659712.0, 31580000.0, -31.665379687999998], [1437661440.0, 31600000.0, -31.645503999999995], [1437663168.0, 31620000.0, -31.625552471999995], [1437664896.0, 31640000.0, -31.605525055999998], [1437666624.0, 31660000.0, -31.585421704000005], [1437668352.0, 31680000.0, -31.565242367999996], [1437670080.0, 31700000.0, -31.544987], [1437671808.0, 31720000.0, -31.524655552], [1437673536.0, 31740000.0, -31.504247976], [1437675264.0, 31760000.0, -31.483764223999998], [1437676992.0, 31780000.0, -31.463204248000004], [1437678720.0, 31800000.0, -31.442567999999994], [1437680448.0, 31820000.0, -31.421855432], [1437682176.0, 31840000.0, -31.401066496], [1437683904.0, 31860000.0, -31.380201143999997], [1437685632.0, 31880000.0, -31.359259328], [1437687360.0, 31900000.0, -31.338240999999996], [1437689088.0, 31920000.0, -31.317146112000003], [1437690816.0, 31940000.0, -31.295974616000002], [1437692544.0, 31960000.0, -31.274726463999997], [1437694272.0, 31980000.0, -31.253401607999997], [1437696000.0, 32000000.0, -31.231999999999992], [1437697728.0, 32020000.0, -31.210521591999992], [1437699456.0, 32040000.0, -31.188966335999993], [1437701184.0, 32060000.0, -31.167334184000005], [1437702912.0, 32080000.0, -31.14562508799999], [1437704640.0, 32100000.0, -31.123839000000004], [1437706368.0, 32120000.0, -31.101975872000004], [1437708096.0, 32140000.0, -31.080035656], [1437709824.0, 32160000.0, -31.058018304], [1437711552.0, 32180000.0, -31.035923768000004], [1437713280.0, 32200000.0, -31.013751999999997], [1437715008.0, 32220000.0, -30.991502951999998], [1437716736.0, 32240000.0, -30.969176575999995], [1437718464.0, 32260000.0, -30.946772823999993], [1437720192.0, 32280000.0, -30.924291647999993], [1437721920.0, 32300000.0, -30.901732999999993], [1437723648.0, 32320000.0, -30.879096831999995], [1437725376.0, 32340000.0, -30.85638309600001], [1437727104.0, 32360000.0, -30.83359174399999], [1437728832.0, 32380000.0, -30.81072272800001], [1437730560.0, 32400000.0, -30.787776], [1437732288.0, 32420000.0, -30.764751512000004], [1437734016.0, 32440000.0, -30.741649216], [1437735744.0, 32460000.0, -30.718469063999997], [1437737472.0, 32480000.0, -30.695211008], [1437739200.0, 32500000.0, -30.671875], [1437740928.0, 32520000.0, -30.648460991999997], [1437742656.0, 32540000.0, -30.624968935999995], [1437744384.0, 32560000.0, -30.601398783999997], [1437746112.0, 32580000.0, -30.577750488], [1437747840.0, 32600000.0, -30.55402399999999], [1437749568.0, 32620000.0, -30.530219271999997], [1437751296.0, 32640000.0, -30.50633625600001], [1437753024.0, 32660000.0, -30.482374903999997], [1437754752.0, 32680000.0, -30.458335168000005], [1437756480.0, 32700000.0, -30.434217000000004], [1437758208.0, 32720000.0, -30.410020352000004], [1437759936.0, 32740000.0, -30.385745176000007], [1437761664.0, 32760000.0, -30.361391424000004], [1437763392.0, 32780000.0, -30.336959048000004], [1437765120.0, 32800000.0, -30.312448000000003], [1437766848.0, 32820000.0, -30.287858232000005], [1437768576.0, 32840000.0, -30.263189695999998], [1437770304.0, 32860000.0, -30.238442344], [1437772032.0, 32880000.0, -30.213616127999998], [1437773760.0, 32900000.0, -30.188710999999998], [1437775488.0, 32920000.0, -30.16372691200001], [1437777216.0, 32940000.0, -30.138663815999998], [1437778944.0, 32960000.0, -30.11352166400001], [1437780672.0, 32980000.0, -30.08830040800001], [1437782400.0, 33000000.0, -30.063000000000002], [1437784128.0, 33020000.0, -30.037620392], [1437785856.0, 33040000.0, -30.012161536000008], [1437787584.0, 33060000.0, -29.986623384000005], [1437789312.0, 33080000.0, -29.961005888000003], [1437791040.0, 33100000.0, -29.935308999999997], [1437792768.0, 33120000.0, -29.909532671999997], [1437794496.0, 33140000.0, -29.883676856], [1437796224.0, 33160000.0, -29.857741504000003], [1437797952.0, 33180000.0, -29.831726568], [1437799680.0, 33200000.0, -29.805631999999996], [1437801408.0, 33220000.0, -29.779457752], [1437803136.0, 33240000.0, -29.753203775999992], [1437804864.0, 33260000.0, -29.726870023999993], [1437806592.0, 33280000.0, -29.700456448000004], [1437808320.0, 33300000.0, -29.673962999999993], [1437810048.0, 33320000.0, -29.647389632000007], [1437811776.0, 33340000.0, -29.620736296000004], [1437813504.0, 33360000.0, -29.594002944000003], [1437815232.0, 33380000.0, -29.567189528000007], [1437816960.0, 33400000.0, -29.540295999999998], [1437818688.0, 33420000.0, -29.513322312], [1437820416.0, 33440000.0, -29.486268416], [1437822144.0, 33460000.0, -29.459134264], [1437823872.0, 33480000.0, -29.431919807999996], [1437825600.0, 33500000.0, -29.404624999999996], [1437827328.0, 33520000.0, -29.377249791999994], [1437829056.0, 33540000.0, -29.349794135999993], [1437830784.0, 33560000.0, -29.32225798400001], [1437832512.0, 33580000.0, -29.294641287999994], [1437834240.0, 33600000.0, -29.26694400000001], [1437835968.0, 33620000.0, -29.23916607200001], [1437837696.0, 33640000.0, -29.211307456000007], [1437839424.0, 33660000.0, -29.183368104000003], [1437841152.0, 33680000.0, -29.155347968000008], [1437842880.0, 33700000.0, -29.127246999999997], [1437844608.0, 33720000.0, -29.099065152], [1437846336.0, 33740000.0, -29.070802376000003], [1437848064.0, 33760000.0, -29.042458624], [1437849792.0, 33780000.0, -29.014033847999997], [1437851520.0, 33800000.0, -28.985528000000002], [1437853248.0, 33820000.0, -28.956941031999996], [1437854976.0, 33840000.0, -28.928272895999996], [1437856704.0, 33860000.0, -28.899523543999997], [1437858432.0, 33880000.0, -28.870692927999997], [1437860160.0, 33900000.0, -28.84178099999999], [1437861888.0, 33920000.0, -28.81278771200001], [1437863616.0, 33940000.0, -28.783713015999993], [1437865344.0, 33960000.0, -28.75455686400001], [1437867072.0, 33980000.0, -28.725319208000002], [1437868800.0, 34000000.0, -28.696000000000005], [1437870528.0, 34020000.0, -28.666599192], [1437872256.0, 34040000.0, -28.637116736000003], [1437873984.0, 34060000.0, -28.607552583999997], [1437875712.0, 34080000.0, -28.577906688], [1437877440.0, 34100000.0, -28.548178999999998], [1437879168.0, 34120000.0, -28.518369471999996], [1437880896.0, 34140000.0, -28.48847805599999], [1437882624.0, 34160000.0, -28.458504704], [1437884352.0, 34180000.0, -28.428449367999995], [1437886080.0, 34200000.0, -28.39831200000001], [1437887808.0, 34220000.0, -28.368092551999993], [1437889536.0, 34240000.0, -28.337790976000008], [1437891264.0, 34260000.0, -28.307407224000002], [1437892992.0, 34280000.0, -28.276941248], [1437894720.0, 34300000.0, -28.246393000000005], [1437896448.0, 34320000.0, -28.215762432000005], [1437898176.0, 34340000.0, -28.185049495999998], [1437899904.0, 34360000.0, -28.154254144], [1437901632.0, 34380000.0, -28.123376328], [1437903360.0, 34400000.0, -28.092416], [1437905088.0, 34420000.0, -28.061373112], [1437906816.0, 34440000.0, -28.030247615999997], [1437908544.0, 34460000.0, -27.999039464], [1437910272.0, 34480000.0, -27.967748608], [1437912000.0, 34500000.0, -27.93637499999999], [1437913728.0, 34520000.0, -27.904918591999994], [1437915456.0, 34540000.0, -27.873379335999992], [1437917184.0, 34560000.0, -27.84175718400001], [1437918912.0, 34580000.0, -27.810052087999992], [1437920640.0, 34600000.0, -27.778264], [1437922368.0, 34620000.0, -27.746392872], [1437924096.0, 34640000.0, -27.714438656000006], [1437925824.0, 34660000.0, -27.682401303999995], [1437927552.0, 34680000.0, -27.650280768000002], [1437929280.0, 34700000.0, -27.618077], [1437931008.0, 34720000.0, -27.585789952], [1437932736.0, 34740000.0, -27.553419575999996], [1437934464.0, 34760000.0, -27.520965824], [1437936192.0, 34780000.0, -27.488428647999996], [1437937920.0, 34800000.0, -27.45580799999999], [1437939648.0, 34820000.0, -27.423103831999995], [1437941376.0, 34840000.0, -27.390316096000006], [1437943104.0, 34860000.0, -27.35744474399999], [1437944832.0, 34880000.0, -27.32448972800001], [1437946560.0, 34900000.0, -27.291451000000002], [1437948288.0, 34920000.0, -27.258328512000006], [1437950016.0, 34940000.0, -27.225122216000003], [1437951744.0, 34960000.0, -27.191832064000003], [1437953472.0, 34980000.0, -27.158458008000004], [1437955200.0, 35000000.0, -27.125], [1437956928.0, 35020000.0, -27.091457992000002], [1437958656.0, 35040000.0, -27.057831936], [1437960384.0, 35060000.0, -27.024121784000002], [1437962112.0, 35080000.0, -26.990327488], [1437963840.0, 35100000.0, -26.956449], [1437965568.0, 35120000.0, -26.922486271999993], [1437967296.0, 35140000.0, -26.888439256000012], [1437969024.0, 35160000.0, -26.854307903999995], [1437970752.0, 35180000.0, -26.82009216800001], [1437972480.0, 35200000.0, -26.785792000000008], [1437974208.0, 35220000.0, -26.751407352000008], [1437975936.0, 35240000.0, -26.716938176000006], [1437977664.0, 35260000.0, -26.682384424000006], [1437979392.0, 35280000.0, -26.647746048000002], [1437981120.0, 35300000.0, -26.613023], [1437982848.0, 35320000.0, -26.578215232000005], [1437984576.0, 35340000.0, -26.543322695999997], [1437986304.0, 35360000.0, -26.508345344], [1437988032.0, 35380000.0, -26.473283128], [1437989760.0, 35400000.0, -26.438135999999993], [1437991488.0, 35420000.0, -26.402903912000014], [1437993216.0, 35440000.0, -26.367586815999992], [1437994944.0, 35460000.0, -26.33218466400001], [1437996672.0, 35480000.0, -26.296697408000007], [1437998400.0, 35500000.0, -26.261125000000007], [1438000128.0, 35520000.0, -26.225467392000006], [1438001856.0, 35540000.0, -26.189724536000007], [1438003584.0, 35560000.0, -26.153896384], [1438005312.0, 35580000.0, -26.117982888000007], [1438007040.0, 35600000.0, -26.081984], [1438008768.0, 35620000.0, -26.045899672000004], [1438010496.0, 35640000.0, -26.009729856], [1438012224.0, 35660000.0, -25.973474503999995], [1438013952.0, 35680000.0, -25.937133567999993], [1438015680.0, 35700000.0, -25.900706999999997], [1438017408.0, 35720000.0, -25.864194751999996], [1438019136.0, 35740000.0, -25.827596775999993], [1438020864.0, 35760000.0, -25.79091302399999], [1438022592.0, 35780000.0, -25.754143448000008], [1438024320.0, 35800000.0, -25.717287999999996], [1438026048.0, 35820000.0, -25.68034663200001], [1438027776.0, 35840000.0, -25.643319296], [1438029504.0, 35860000.0, -25.606205944000003], [1438031232.0, 35880000.0, -25.569006528000003], [1438032960.0, 35900000.0, -25.531720999999997], [1438034688.0, 35920000.0, -25.494349312000004], [1438036416.0, 35940000.0, -25.456891416000005], [1438038144.0, 35960000.0, -25.419347263999995], [1438039872.0, 35980000.0, -25.381716808], [1438041600.0, 36000000.0, -25.343999999999994], [1438043328.0, 36020000.0, -25.306196791999994], [1438045056.0, 36040000.0, -25.268307135999997], [1438046784.0, 36060000.0, -25.230330984000005], [1438048512.0, 36080000.0, -25.192268287999994], [1438050240.0, 36100000.0, -25.15411900000001], [1438051968.0, 36120000.0, -25.115883072000003], [1438053696.0, 36140000.0, -25.077560456000008], [1438055424.0, 36160000.0, -25.039151104000005], [1438057152.0, 36180000.0, -25.000654968], [1438058880.0, 36200000.0, -24.962072000000006], [1438060608.0, 36220000.0, -24.923402152], [1438062336.0, 36240000.0, -24.884645376], [1438064064.0, 36260000.0, -24.845801624000003], [1438065792.0, 36280000.0, -24.806870847999996], [1438067520.0, 36300000.0, -24.767852999999995], [1438069248.0, 36320000.0, -24.72874803199999], [1438070976.0, 36340000.0, -24.689555896], [1438072704.0, 36360000.0, -24.650276543999993], [1438074432.0, 36380000.0, -24.610909927999998], [1438076160.0, 36400000.0, -24.57145599999999], [1438077888.0, 36420000.0, -24.53191471200001], [1438079616.0, 36440000.0, -24.492286015999994], [1438081344.0, 36460000.0, -24.452569864000004], [1438083072.0, 36480000.0, -24.412766208], [1438084800.0, 36500000.0, -24.372875], [1438086528.0, 36520000.0, -24.332896192], [1438088256.0, 36540000.0, -24.292829736], [1438089984.0, 36560000.0, -24.252675584000002], [1438091712.0, 36580000.0, -24.212433688000004], [1438093440.0, 36600000.0, -24.172103999999997], [1438095168.0, 36620000.0, -24.131686472], [1438096896.0, 36640000.0, -24.091181055999996], [1438098624.0, 36660000.0, -24.050587703999994], [1438100352.0, 36680000.0, -24.00990636799999], [1438102080.0, 36700000.0, -23.96913700000001], [1438103808.0, 36720000.0, -23.928279551999992], [1438105536.0, 36740000.0, -23.887333976000008], [1438107264.0, 36760000.0, -23.846300224000004], [1438108992.0, 36780000.0, -23.805178248000004], [1438110720.0, 36800000.0, -23.763968000000006], [1438112448.0, 36820000.0, -23.722669432000004], [1438114176.0, 36840000.0, -23.681282496], [1438115904.0, 36860000.0, -23.639807144000002], [1438117632.0, 36880000.0, -23.598243328000002], [1438119360.0, 36900000.0, -23.556590999999997], [1438121088.0, 36920000.0, -23.514850111999998], [1438122816.0, 36940000.0, -23.473020616], [1438124544.0, 36960000.0, -23.43110246399999], [1438126272.0, 36980000.0, -23.389095607999998], [1438128000.0, 37000000.0, -23.346999999999994], [1438129728.0, 37020000.0, -23.304815591999997], [1438131456.0, 37040000.0, -23.26254233599999], [1438133184.0, 37060000.0, -23.220180184], [1438134912.0, 37080000.0, -23.177729087999985], [1438136640.0, 37100000.0, -23.135189000000004], [1438138368.0, 37120000.0, -23.092559872000002], [1438140096.0, 37140000.0, -23.049841655999998], [1438141824.0, 37160000.0, -23.007034304], [1438143552.0, 37180000.0, -22.964137768], [1438145280.0, 37200000.0, -22.921152], [1438147008.0, 37220000.0, -22.878076951999994], [1438148736.0, 37240000.0, -22.834912575999994], [1438150464.0, 37260000.0, -22.791658824000002], [1438152192.0, 37280000.0, -22.748315647999995], [1438153920.0, 37300000.0, -22.704882999999995], [1438155648.0, 37320000.0, -22.661360831999993], [1438157376.0, 37340000.0, -22.61774909600001], [1438159104.0, 37360000.0, -22.57404774399999], [1438160832.0, 37380000.0, -22.530256728000005], [1438162560.0, 37400000.0, -22.486376], [1438164288.0, 37420000.0, -22.442405512000008], [1438166016.0, 37440000.0, -22.398345216000003], [1438167744.0, 37460000.0, -22.354195064000002], [1438169472.0, 37480000.0, -22.309955007999996], [1438171200.0, 37500000.0, -22.265625], [1438172928.0, 37520000.0, -22.221204992000004], [1438174656.0, 37540000.0, -22.176694935999997], [1438176384.0, 37560000.0, -22.132094784000003], [1438178112.0, 37580000.0, -22.087404487999997], [1438179840.0, 37600000.0, -22.042623999999996], [1438181568.0, 37620000.0, -21.99775327199999], [1438183296.0, 37640000.0, -21.952792256000016], [1438185024.0, 37660000.0, -21.907740903999994], [1438186752.0, 37680000.0, -21.86259916800001], [1438188480.0, 37700000.0, -21.817367000000004], [1438190208.0, 37720000.0, -21.772044352], [1438191936.0, 37740000.0, -21.726631176000005], [1438193664.0, 37760000.0, -21.681127424000003], [1438195392.0, 37780000.0, -21.635533048], [1438197120.0, 37800000.0, -21.589847999999996], [1438198848.0, 37820000.0, -21.544072232000005], [1438200576.0, 37840000.0, -21.498205696], [1438202304.0, 37860000.0, -21.452248343999997], [1438204032.0, 37880000.0, -21.406200128000002], [1438205760.0, 37900000.0, -21.360060999999995], [1438207488.0, 37920000.0, -21.313830912000007], [1438209216.0, 37940000.0, -21.267509815999993], [1438210944.0, 37960000.0, -21.221097664000013], [1438212672.0, 37980000.0, -21.174594408000004], [1438214400.0, 38000000.0, -21.128000000000007], [1438216128.0, 38020000.0, -21.081314392000003], [1438217856.0, 38040000.0, -21.03453753600001], [1438219584.0, 38060000.0, -20.987669384000007], [1438221312.0, 38080000.0, -20.940709888000008], [1438223040.0, 38100000.0, -20.893659], [1438224768.0, 38120000.0, -20.846516672], [1438226496.0, 38140000.0, -20.799282855999998], [1438228224.0, 38160000.0, -20.751957504000003], [1438229952.0, 38180000.0, -20.70454056799999], [1438231680.0, 38200000.0, -20.657031999999994], [1438233408.0, 38220000.0, -20.609431751999992], [1438235136.0, 38240000.0, -20.561739775999996], [1438236864.0, 38260000.0, -20.513956023999988], [1438238592.0, 38280000.0, -20.466080448000007], [1438240320.0, 38300000.0, -20.41811299999999], [1438242048.0, 38320000.0, -20.37005363200001], [1438243776.0, 38340000.0, -20.321902296000005], [1438245504.0, 38360000.0, -20.273658944000005], [1438247232.0, 38380000.0, -20.225323528000004], [1438248960.0, 38400000.0, -20.176896], [1438250688.0, 38420000.0, -20.128376312], [1438252416.0, 38440000.0, -20.079764416000003], [1438254144.0, 38460000.0, -20.031060263999997], [1438255872.0, 38480000.0, -19.982263808], [1438257600.0, 38500000.0, -19.93337499999999], [1438259328.0, 38520000.0, -19.884393792000004], [1438261056.0, 38540000.0, -19.835320135999993], [1438262784.0, 38560000.0, -19.78615398400001], [1438264512.0, 38580000.0, -19.736895287999992], [1438266240.0, 38600000.0, -19.68754400000001], [1438267968.0, 38620000.0, -19.638100072000007], [1438269696.0, 38640000.0, -19.588563456000003], [1438271424.0, 38660000.0, -19.538934104000006], [1438273152.0, 38680000.0, -19.489211968000006], [1438274880.0, 38700000.0, -19.439397], [1438276608.0, 38720000.0, -19.389489152000003], [1438278336.0, 38740000.0, -19.339488376], [1438280064.0, 38760000.0, -19.289394624000003], [1438281792.0, 38780000.0, -19.239207847999992], [1438283520.0, 38800000.0, -19.188927999999997], [1438285248.0, 38820000.0, -19.138555032], [1438286976.0, 38840000.0, -19.088088895999995], [1438288704.0, 38860000.0, -19.037529543999995], [1438290432.0, 38880000.0, -18.986876927999994], [1438292160.0, 38900000.0, -18.93613099999999], [1438293888.0, 38920000.0, -18.88529171200001], [1438295616.0, 38940000.0, -18.834359015999986], [1438297344.0, 38960000.0, -18.783332864000002], [1438299072.0, 38980000.0, -18.732213208000005], [1438300800.0, 39000000.0, -18.681000000000004], [1438302528.0, 39020000.0, -18.629693192000005], [1438304256.0, 39040000.0, -18.578292736], [1438305984.0, 39060000.0, -18.526798583999998], [1438307712.0, 39080000.0, -18.475210687999997], [1438309440.0, 39100000.0, -18.423528999999995], [1438311168.0, 39120000.0, -18.371753471999995], [1438312896.0, 39140000.0, -18.319884055999992], [1438314624.0, 39160000.0, -18.267920703999998], [1438316352.0, 39180000.0, -18.215863367999994], [1438318080.0, 39200000.0, -18.16371200000001], [1438319808.0, 39220000.0, -18.11146655199999], [1438321536.0, 39240000.0, -18.059126976], [1438323264.0, 39260000.0, -18.006693224000003], [1438324992.0, 39280000.0, -17.954165248000002], [1438326720.0, 39300000.0, -17.901543000000004], [1438328448.0, 39320000.0, -17.848826432000003], [1438330176.0, 39340000.0, -17.796015496000003], [1438331904.0, 39360000.0, -17.743110144], [1438333632.0, 39380000.0, -17.690110327999996], [1438335360.0, 39400000.0, -17.637015999999996], [1438337088.0, 39420000.0, -17.583827111999994], [1438338816.0, 39440000.0, -17.530543616000003], [1438340544.0, 39460000.0, -17.477165463999988], [1438342272.0, 39480000.0, -17.423692607999996], [1438344000.0, 39500000.0, -17.370124999999994], [1438345728.0, 39520000.0, -17.316462591999993], [1438347456.0, 39540000.0, -17.262705335999996], [1438349184.0, 39560000.0, -17.208853184000006], [1438350912.0, 39580000.0, -17.15490608799999], [1438352640.0, 39600000.0, -17.10086400000001], [1438354368.0, 39620000.0, -17.046726872], [1438356096.0, 39640000.0, -16.992494656000005], [1438357824.0, 39660000.0, -16.938167303999997], [1438359552.0, 39680000.0, -16.883744768000007], [1438361280.0, 39700000.0, -16.829226999999996], [1438363008.0, 39720000.0, -16.774613952000003], [1438364736.0, 39740000.0, -16.719905575999995], [1438366464.0, 39760000.0, -16.665101823999997], [1438368192.0, 39780000.0, -16.61020264799999], [1438369920.0, 39800000.0, -16.555207999999993], [1438371648.0, 39820000.0, -16.500117831999987], [1438373376.0, 39840000.0, -16.44493209600001], [1438375104.0, 39860000.0, -16.389650743999987], [1438376832.0, 39880000.0, -16.334273728000007], [1438378560.0, 39900000.0, -16.278801], [1438380288.0, 39920000.0, -16.223232512000003], [1438382016.0, 39940000.0, -16.167568216], [1438383744.0, 39960000.0, -16.111808064], [1438385472.0, 39980000.0, -16.055952008], [1438387200.0, 40000000.0, -16.0], [1438388928.0, 40020000.0, -15.943951991999995], [1438390656.0, 40040000.0, -15.887807936000016], [1438392384.0, 40060000.0, -15.831567783999986], [1438394112.0, 40080000.0, -15.775231488000003], [1438395840.0, 40100000.0, -15.718799000000004], [1438397568.0, 40120000.0, -15.662270272000015], [1438399296.0, 40140000.0, -15.605645255999988], [1438401024.0, 40160000.0, -15.548923903999992], [1438402752.0, 40180000.0, -15.492106168000007], [1438404480.0, 40200000.0, -15.435192000000015], [1438406208.0, 40220000.0, -15.378181351999984], [1438407936.0, 40240000.0, -15.32107417600001], [1438409664.0, 40260000.0, -15.263870424000018], [1438411392.0, 40280000.0, -15.206570048000017], [1438413120.0, 40300000.0, -15.14917299999999], [1438414848.0, 40320000.0, -15.09167923199999], [1438416576.0, 40340000.0, -15.034088695999998], [1438418304.0, 40360000.0, -14.976401344000024], [1438420032.0, 40380000.0, -14.918617127999994], [1438421760.0, 40400000.0, -14.860736000000003], [1438423488.0, 40420000.0, -14.802757912000004], [1438425216.0, 40440000.0, -14.744682816000008], [1438426944.0, 40460000.0, -14.686510663999982], [1438428672.0, 40480000.0, -14.628241408000008], [1438430400.0, 40500000.0, -14.56987500000001], [1438432128.0, 40520000.0, -14.511411392], [1438433856.0, 40540000.0, -14.452850536], [1438435584.0, 40560000.0, -14.394192383999993], [1438437312.0, 40580000.0, -14.335436888000004], [1438439040.0, 40600000.0, -14.276584000000014], [1438440768.0, 40620000.0, -14.217633671999991], [1438442496.0, 40640000.0, -14.158585856000002], [1438444224.0, 40660000.0, -14.099440504], [1438445952.0, 40680000.0, -14.04019756800001], [1438447680.0, 40700000.0, -13.980857], [1438449408.0, 40720000.0, -13.921418751999994], [1438451136.0, 40740000.0, -13.861882775999987], [1438452864.0, 40760000.0, -13.802249024000005], [1438454592.0, 40780000.0, -13.742517447999987], [1438456320.0, 40800000.0, -13.682687999999999], [1438458048.0, 40820000.0, -13.62276063200001], [1438459776.0, 40840000.0, -13.562735296000014], [1438461504.0, 40860000.0, -13.50261194399998], [1438463232.0, 40880000.0, -13.442390528000004], [1438464960.0, 40900000.0, -13.38207100000001], [1438466688.0, 40920000.0, -13.32165331200001], [1438468416.0, 40940000.0, -13.261137415999997], [1438470144.0, 40960000.0, -13.200523263999997], [1438471872.0, 40980000.0, -13.139810808000007], [1438473600.0, 41000000.0, -13.079000000000008], [1438475328.0, 41020000.0, -13.018090791999981], [1438477056.0, 41040000.0, -12.957083135999994], [1438478784.0, 41060000.0, -12.895976984000015], [1438480512.0, 41080000.0, -12.83477228800001], [1438482240.0, 41100000.0, -12.773468999999992], [1438483968.0, 41120000.0, -12.71206707200001], [1438485696.0, 41140000.0, -12.650566456000007], [1438487424.0, 41160000.0, -12.588967104000005], [1438489152.0, 41180000.0, -12.527268968000001], [1438490880.0, 41200000.0, -12.465472000000005], [1438492608.0, 41220000.0, -12.403576152000014], [1438494336.0, 41240000.0, -12.341581376000008], [1438496064.0, 41260000.0, -12.279487623999998], [1438497792.0, 41280000.0, -12.217294848000009], [1438499520.0, 41300000.0, -12.155003000000008], [1438501248.0, 41320000.0, -12.092612032000005], [1438502976.0, 41340000.0, -12.030121895999983], [1438504704.0, 41360000.0, -11.967532543999994], [1438506432.0, 41380000.0, -11.904843927999991], [1438508160.0, 41400000.0, -11.842056000000014], [1438509888.0, 41420000.0, -11.779168711999986], [1438511616.0, 41440000.0, -11.71618201599999], [1438513344.0, 41460000.0, -11.653095864000008], [1438515072.0, 41480000.0, -11.589910208000006], [1438516800.0, 41500000.0, -11.526624999999981], [1438518528.0, 41520000.0, -11.463240192], [1438520256.0, 41540000.0, -11.399755736000003], [1438521984.0, 41560000.0, -11.336171584000013], [1438523712.0, 41580000.0, -11.272487687999984], [1438525440.0, 41600000.0, -11.208703999999997], [1438527168.0, 41620000.0, -11.144820472000006], [1438528896.0, 41640000.0, -11.080837056000007], [1438530624.0, 41660000.0, -11.016753703999981], [1438532352.0, 41680000.0, -10.952570367999982], [1438534080.0, 41700000.0, -10.888287000000005], [1438535808.0, 41720000.0, -10.823903552000019], [1438537536.0, 41740000.0, -10.759419975999975], [1438539264.0, 41760000.0, -10.694836224], [1438540992.0, 41780000.0, -10.630152248000016], [1438542720.0, 41800000.0, -10.565368000000007], [1438544448.0, 41820000.0, -10.500483431999996], [1438546176.0, 41840000.0, -10.435498495999994], [1438547904.0, 41860000.0, -10.370413143999997], [1438549632.0, 41880000.0, -10.305227328000015], [1438551360.0, 41900000.0, -10.239940999999988], [1438553088.0, 41920000.0, -10.174554111999996], [1438554816.0, 41940000.0, -10.109066616000007], [1438556544.0, 41960000.0, -10.043478463999989], [1438558272.0, 41980000.0, -9.97778960799998], [1438560000.0, 42000000.0, -9.911999999999992], [1438561728.0, 42020000.0, -9.84610959199999], [1438563456.0, 42040000.0, -9.780118336000001], [1438565184.0, 42060000.0, -9.71402618399999], [1438566912.0, 42080000.0, -9.647833087999985], [1438568640.0, 42100000.0, -9.581539000000006], [1438570368.0, 42120000.0, -9.51514387200001], [1438572096.0, 42140000.0, -9.448647655999977], [1438573824.0, 42160000.0, -9.382050304000003], [1438575552.0, 42180000.0, -9.315351768], [1438577280.0, 42200000.0, -9.248552000000004], [1438579008.0, 42220000.0, -9.181650951999984], [1438580736.0, 42240000.0, -9.114648575999993], [1438582464.0, 42260000.0, -9.047544824], [1438584192.0, 42280000.0, -8.980339648000012], [1438585920.0, 42300000.0, -8.913032999999984], [1438587648.0, 42320000.0, -8.845624831999999], [1438589376.0, 42340000.0, -8.778115096000008], [1438591104.0, 42360000.0, -8.710503744000007], [1438592832.0, 42380000.0, -8.642790727999994], [1438594560.0, 42400000.0, -8.574975999999992], [1438596288.0, 42420000.0, -8.507059511999998], [1438598016.0, 42440000.0, -8.439041216000007], [1438599744.0, 42460000.0, -8.370921064000001], [1438601472.0, 42480000.0, -8.302699008000005], [1438603200.0, 42500000.0, -8.234375], [1438604928.0, 42520000.0, -8.165948992000011], [1438606656.0, 42540000.0, -8.097420936000006], [1438608384.0, 42560000.0, -8.02879078399998], [1438610112.0, 42580000.0, -7.960058488000001], [1438611840.0, 42600000.0, -7.891224000000008], [1438613568.0, 42620000.0, -7.822287272000025], [1438615296.0, 42640000.0, -7.753248255999992], [1438617024.0, 42660000.0, -7.684106903999989], [1438618752.0, 42680000.0, -7.614863168000014], [1438620480.0, 42700000.0, -7.545517000000018], [1438622208.0, 42720000.0, -7.476068351999984], [1438623936.0, 42740000.0, -7.406517176000008], [1438625664.0, 42760000.0, -7.336863424000001], [1438627392.0, 42780000.0, -7.267107048000014], [1438629120.0, 42800000.0, -7.197248000000002], [1438630848.0, 42820000.0, -7.127286232000003], [1438632576.0, 42840000.0, -7.057221695999999], [1438634304.0, 42860000.0, -6.987054344000015], [1438636032.0, 42880000.0, -6.916784127999989], [1438637760.0, 42900000.0, -6.846411000000003], [1438639488.0, 42920000.0, -6.775934912000025], [1438641216.0, 42940000.0, -6.705355816000022], [1438642944.0, 42960000.0, -6.63467366399999], [1438644672.0, 42980000.0, -6.563888408000011], [1438646400.0, 43000000.0, -6.493000000000009], [1438648128.0, 43020000.0, -6.422008392000009], [1438649856.0, 43040000.0, -6.350913535999993], [1438651584.0, 43060000.0, -6.279715383999999], [1438653312.0, 43080000.0, -6.2084138879999955], [1438655040.0, 43100000.0, -6.137009000000006], [1438656768.0, 43120000.0, -6.065500671999999], [1438658496.0, 43140000.0, -5.993888855999998], [1438660224.0, 43160000.0, -5.922173504], [1438661952.0, 43180000.0, -5.850354568000014], [1438663680.0, 43200000.0, -5.778431999999995], [1438665408.0, 43220000.0, -5.706405751999995], [1438667136.0, 43240000.0, -5.6342757759999955], [1438668864.0, 43260000.0, -5.562042024000007], [1438670592.0, 43280000.0, -5.4897044479999835], [1438672320.0, 43300000.0, -5.417262999999991], [1438674048.0, 43320000.0, -5.3447176320000125], [1438675776.0, 43340000.0, -5.272068296000015], [1438677504.0, 43360000.0, -5.19931494399998], [1438679232.0, 43380000.0, -5.126457528000003], [1438680960.0, 43400000.0, -5.0534959999999955], [1438682688.0, 43420000.0, -4.98043031200001], [1438684416.0, 43440000.0, -4.907260416], [1438686144.0, 43460000.0, -4.833986263999989], [1438687872.0, 43480000.0, -4.760607808000003], [1438689600.0, 43500000.0, -4.687125000000023], [1438691328.0, 43520000.0, -4.613537791999988], [1438693056.0, 43540000.0, -4.53984613599998], [1438694784.0, 43560000.0, -4.4660499840000085], [1438696512.0, 43580000.0, -4.392149288000027], [1438698240.0, 43600000.0, -4.3181439999999895], [1438699968.0, 43620000.0, -4.244034072000005], [1438701696.0, 43640000.0, -4.169819456000013], [1438703424.0, 43660000.0, -4.09550010400001], [1438705152.0, 43680000.0, -4.021075967999991], [1438706880.0, 43700000.0, -3.9465469999999954], [1438708608.0, 43720000.0, -3.8719131520000047], [1438710336.0, 43740000.0, -3.797174376000001], [1438712064.0, 43760000.0, -3.7223306239999943], [1438713792.0, 43780000.0, -3.647381847999995], [1438715520.0, 43800000.0, -3.572327999999999], [1438717248.0, 43820000.0, -3.497169032000002], [1438718976.0, 43840000.0, -3.4219048959999867], [1438720704.0, 43860000.0, -3.346535543999991], [1438722432.0, 43880000.0, -3.271060927999997], [1438724160.0, 43900000.0, -3.195481000000015], [1438725888.0, 43920000.0, -3.119795711999984], [1438727616.0, 43940000.0, -3.044005016], [1438729344.0, 43960000.0, -2.9681088640000155], [1438731072.0, 43980000.0, -2.892107208000013], [1438732800.0, 44000000.0, -2.815999999999974], [1438734528.0, 44020000.0, -2.7397871919999943], [1438736256.0, 44040000.0, -2.663468736000013], [1438737984.0, 44060000.0, -2.5870445839999974], [1438739712.0, 44080000.0, -2.5105146879999864], [1438741440.0, 44100000.0, -2.4338790000000046], [1438743168.0, 44120000.0, -2.357137471999991], [1438744896.0, 44140000.0, -2.2802900560000126], [1438746624.0, 44160000.0, -2.2033367039999945], [1438748352.0, 44180000.0, -2.1262773679999896], [1438750080.0, 44200000.0, -2.049112000000008], [1438751808.0, 44220000.0, -1.9718405520000175], [1438753536.0, 44240000.0, -1.8944629759999856], [1438755264.0, 44260000.0, -1.8169792240000078], [1438756992.0, 44280000.0, -1.739389248000009], [1438758720.0, 44300000.0, -1.6616930000000139], [1438760448.0, 44320000.0, -1.5838904319999898], [1438762176.0, 44340000.0, -1.505981496000004], [1438763904.0, 44360000.0, -1.4279661439999956], [1438765632.0, 44380000.0, -1.3498443280000032], [1438767360.0, 44400000.0, -1.2716159999999945], [1438769088.0, 44420000.0, -1.193281111999994], [1438770816.0, 44440000.0, -1.1148396159999976], [1438772544.0, 44460000.0, -1.0362914640000014], [1438774272.0, 44480000.0, -0.957636607999973], [1438776000.0, 44500000.0, -0.8788749999999936], [1438777728.0, 44520000.0, -0.8000065919999884], [1438779456.0, 44540000.0, -0.72103133600001], [1438781184.0, 44560000.0, -0.6419491839999836], [1438782912.0, 44580000.0, -0.5627600879999903], [1438784640.0, 44600000.0, -0.4834639999999979], [1438786368.0, 44620000.0, -0.4040608720000165], [1438788096.0, 44640000.0, -0.3245506559999711], [1438789824.0, 44660000.0, -0.2449333039999999], [1438791552.0, 44680000.0, -0.1652087679999994], [1438793280.0, 44700000.0, -0.08537700000000825], [1438795008.0, 44720000.0, -0.005437951999979873], [1438796736.0, 44740000.0, 0.07460842400000445], [1438798464.0, 44760000.0, 0.15476217600000552], [1438800192.0, 44780000.0, 0.2350233519999705], [1438801920.0, 44800000.0, 0.315392000000017], [1438803648.0, 44820000.0, 0.3958681680000211], [1438805376.0, 44840000.0, 0.4764519039999868], [1438807104.0, 44860000.0, 0.5571432559999892], [1438808832.0, 44880000.0, 0.6379422720000321], [1438810560.0, 44900000.0, 0.7188490000000058], [1438812288.0, 44920000.0, 0.7998634879999855], [1438814016.0, 44940000.0, 0.8809857840000035], [1438815744.0, 44960000.0, 0.9622159360000069], [1438817472.0, 44980000.0, 1.0435539920000139], [1438819200.0, 45000000.0, 1.125], [1438820928.0, 45020000.0, 1.2065540079999977], [1438822656.0, 45040000.0, 1.2882160639999967], [1438824384.0, 45060000.0, 1.3699862160000151], [1438826112.0, 45080000.0, 1.4518645120000144], [1438827840.0, 45100000.0, 1.5338509999999985], [1438829568.0, 45120000.0, 1.6159457279999714], [1438831296.0, 45140000.0, 1.6981487440000222], [1438833024.0, 45160000.0, 1.7804600959999988], [1438834752.0, 45180000.0, 1.8628798319999902], [1438836480.0, 45200000.0, 1.945407999999972], [1438838208.0, 45220000.0, 2.028044648000005], [1438839936.0, 45240000.0, 2.110789823999994], [1438841664.0, 45260000.0, 2.1936435759999853], [1438843392.0, 45280000.0, 2.276605951999983], [1438845120.0, 45300000.0, 2.359677000000005], [1438846848.0, 45320000.0, 2.442856768000013], [1438848576.0, 45340000.0, 2.5261453039999964], [1438850304.0, 45360000.0, 2.609542655999988], [1438852032.0, 45380000.0, 2.6930488720000056], [1438853760.0, 45400000.0, 2.7766639999999967], [1438855488.0, 45420000.0, 2.8603880879999792], [1438857216.0, 45440000.0, 2.9442211839999857], [1438858944.0, 45460000.0, 3.02816333600002], [1438860672.0, 45480000.0, 3.112214592000001], [1438862400.0, 45500000.0, 3.196374999999989], [1438864128.0, 45520000.0, 3.2806446079999887], [1438865856.0, 45540000.0, 3.3650234640000036], [1438867584.0, 45560000.0, 3.4495116159999952], [1438869312.0, 45580000.0, 3.534109111999996], [1438871040.0, 45600000.0, 3.6188159999999954], [1438872768.0, 45620000.0, 3.703632328000012], [1438874496.0, 45640000.0, 3.7885581440000067], [1438876224.0, 45660000.0, 3.873593495999998], [1438877952.0, 45680000.0, 3.958738432000004], [1438879680.0, 45700000.0, 4.043993000000015], [1438881408.0, 45720000.0, 4.129357248000005], [1438883136.0, 45740000.0, 4.214831223999994], [1438884864.0, 45760000.0, 4.300414975999971], [1438886592.0, 45780000.0, 4.3861085520000245], [1438888320.0, 45800000.0, 4.471912000000017], [1438890048.0, 45820000.0, 4.557825367999982], [1438891776.0, 45840000.0, 4.6438487039999785], [1438893504.0, 45860000.0, 4.729982056000026], [1438895232.0, 45880000.0, 4.816225471999999], [1438896960.0, 45900000.0, 4.902578999999989], [1438898688.0, 45920000.0, 4.989042687999984], [1438900416.0, 45940000.0, 5.075616584000002], [1438902144.0, 45960000.0, 5.162300735999992], [1438903872.0, 45980000.0, 5.249095191999984], [1438905600.0, 46000000.0, 5.33599999999997], [1438907328.0, 46020000.0, 5.423015208000024], [1438909056.0, 46040000.0, 5.510140864000007], [1438910784.0, 46060000.0, 5.597377015999982], [1438912512.0, 46080000.0, 5.684723711999979], [1438914240.0, 46100000.0, 5.7721810000000175], [1438915968.0, 46120000.0, 5.859748928000002], [1438917696.0, 46140000.0, 5.947427543999979], [1438919424.0, 46160000.0, 6.035216895999994], [1438921152.0, 46180000.0, 6.12311703200001], [1438922880.0, 46200000.0, 6.211128000000002], [1438924608.0, 46220000.0, 6.299249847999988], [1438926336.0, 46240000.0, 6.387482623999986], [1438928064.0, 46260000.0, 6.475826376000015], [1438929792.0, 46280000.0, 6.564281151999992], [1438931520.0, 46300000.0, 6.652846999999994], [1438933248.0, 46320000.0, 6.741523967999996], [1438934976.0, 46340000.0, 6.830312104000029], [1438936704.0, 46360000.0, 6.9192114560000135], [1438938432.0, 46380000.0, 7.008222071999995], [1438940160.0, 46400000.0, 7.0973439999999925], [1438941888.0, 46420000.0, 7.186577288000024], [1438943616.0, 46440000.0, 7.275921984000021], [1438945344.0, 46460000.0, 7.36537813599999], [1438947072.0, 46480000.0, 7.4549457919999895], [1438948800.0, 46500000.0, 7.544625000000025], [1438950528.0, 46520000.0, 7.634415808], [1438952256.0, 46540000.0, 7.724318264000004], [1438953984.0, 46560000.0, 7.814332415999999], [1438955712.0, 46580000.0, 7.904458312000017], [1438957440.0, 46600000.0, 7.994696000000005], [1438959168.0, 46620000.0, 8.085045528000009], [1438960896.0, 46640000.0, 8.175506943999977], [1438962624.0, 46660000.0, 8.266080296000013], [1438964352.0, 46680000.0, 8.35676563200002], [1438966080.0, 46700000.0, 8.447562999999988], [1438967808.0, 46720000.0, 8.538472447999993], [1438969536.0, 46740000.0, 8.629494024000024], [1438971264.0, 46760000.0, 8.720627776], [1438972992.0, 46780000.0, 8.811873751999997], [1438974720.0, 46800000.0, 8.903231999999988], [1438976448.0, 46820000.0, 8.994702568000008], [1438978176.0, 46840000.0, 9.086285504000003], [1438979904.0, 46860000.0, 9.177980856000005], [1438981632.0, 46880000.0, 9.26978867199999], [1438983360.0, 46900000.0, 9.361709000000005], [1438985088.0, 46920000.0, 9.45374188800001], [1438986816.0, 46940000.0, 9.545887383999997], [1438988544.0, 46960000.0, 9.638145535999996], [1438990272.0, 46980000.0, 9.730516392000027], [1438992000.0, 47000000.0, 9.823000000000022], [1438993728.0, 47020000.0, 9.915596407999999], [1438995456.0, 47040000.0, 10.008305663999977], [1438997184.0, 47060000.0, 10.10112781600003], [1438998912.0, 47080000.0, 10.194062912000007], [1439000640.0, 47100000.0, 10.287110999999996], [1439002368.0, 47120000.0, 10.380272127999987], [1439004096.0, 47140000.0, 10.473546344000027], [1439005824.0, 47160000.0, 10.566933696000007], [1439007552.0, 47180000.0, 10.660434232], [1439009280.0, 47200000.0, 10.754047999999997], [1439011008.0, 47220000.0, 10.847775048000017], [1439012736.0, 47240000.0, 10.941615424000005], [1439014464.0, 47260000.0, 11.03556917600001], [1439016192.0, 47280000.0, 11.129636351999977], [1439017920.0, 47300000.0, 11.223817000000025], [1439019648.0, 47320000.0, 11.318111168000016], [1439021376.0, 47340000.0, 11.412518903999995], [1439023104.0, 47360000.0, 11.507040255999982], [1439024832.0, 47380000.0, 11.601675272000023], [1439026560.0, 47400000.0, 11.696423999999993], [1439028288.0, 47420000.0, 11.791286487999997], [1439030016.0, 47440000.0, 11.886262783999996], [1439031744.0, 47460000.0, 11.981352936000022], [1439033472.0, 47480000.0, 12.076556992000008], [1439035200.0, 47500000.0, 12.171875], [1439036928.0, 47520000.0, 12.267307008000003], [1439038656.0, 47540000.0, 12.362853063999978], [1439040384.0, 47560000.0, 12.458513216000014], [1439042112.0, 47580000.0, 12.554287512000002], [1439043840.0, 47600000.0, 12.650176000000002], [1439045568.0, 47620000.0, 12.746178727999975], [1439047296.0, 47640000.0, 12.842295744000012], [1439049024.0, 47660000.0, 12.938527096000016], [1439050752.0, 47680000.0, 13.03487283199999], [1439052480.0, 47700000.0, 13.131332999999984], [1439054208.0, 47720000.0, 13.227907648000027], [1439055936.0, 47740000.0, 13.324596823999997], [1439057664.0, 47760000.0, 13.421400575999996], [1439059392.0, 47780000.0, 13.518318951999987], [1439061120.0, 47800000.0, 13.615352000000001], [1439062848.0, 47820000.0, 13.712499768], [1439064576.0, 47840000.0, 13.809762304000003], [1439066304.0, 47860000.0, 13.90713965599997], [1439068032.0, 47880000.0, 14.004631872000019], [1439069760.0, 47900000.0, 14.102238999999997], [1439071488.0, 47920000.0, 14.19996108799998], [1439073216.0, 47940000.0, 14.297798183999973], [1439074944.0, 47960000.0, 14.39575033600002], [1439076672.0, 47980000.0, 14.493817592], [1439078400.0, 48000000.0, 14.591999999999999], [1439080128.0, 48020000.0, 14.69029760799998], [1439081856.0, 48040000.0, 14.788710464000019], [1439083584.0, 48060000.0, 14.887238616000005], [1439085312.0, 48080000.0, 14.985882111999999], [1439087040.0, 48100000.0, 15.084640999999976], [1439088768.0, 48120000.0, 15.183515328000013], [1439090496.0, 48140000.0, 15.282505144000012], [1439092224.0, 48160000.0, 15.381610495999993], [1439093952.0, 48180000.0, 15.480831431999988], [1439095680.0, 48200000.0, 15.580168000000015], [1439097408.0, 48220000.0, 15.679620248000006], [1439099136.0, 48240000.0, 15.779188223999995], [1439100864.0, 48260000.0, 15.87887197599997], [1439102592.0, 48280000.0, 15.978671552000023], [1439104320.0, 48300000.0, 16.078587000000013], [1439106048.0, 48320000.0, 16.178618367999988], [1439107776.0, 48340000.0, 16.27876570399998], [1439109504.0, 48360000.0, 16.37902905600002], [1439111232.0, 48380000.0, 16.479408472000003], [1439112960.0, 48400000.0, 16.579904], [1439114688.0, 48420000.0, 16.680515687999986], [1439116416.0, 48440000.0, 16.78124358400001], [1439118144.0, 48460000.0, 16.882087736000003], [1439119872.0, 48480000.0, 16.983048192], [1439121600.0, 48500000.0, 17.084124999999972], [1439123328.0, 48520000.0, 17.185318208000012], [1439125056.0, 48540000.0, 17.28662786400001], [1439126784.0, 48560000.0, 17.388054015999984], [1439128512.0, 48580000.0, 17.48959671199998], [1439130240.0, 48600000.0, 17.591256000000016], [1439131968.0, 48620000.0, 17.693031927999996], [1439133696.0, 48640000.0, 17.794924543999997], [1439135424.0, 48660000.0, 17.896933895999993], [1439137152.0, 48680000.0, 17.999060032000003], [1439138880.0, 48700000.0, 18.101303000000016], [1439140608.0, 48720000.0, 18.203662847999993], [1439142336.0, 48740000.0, 18.306139623999982], [1439144064.0, 48760000.0, 18.408733376000015], [1439145792.0, 48780000.0, 18.511444151999996], [1439147520.0, 48800000.0, 18.614272], [1439149248.0, 48820000.0, 18.71721696799999], [1439150976.0, 48840000.0, 18.820279104000022], [1439152704.0, 48860000.0, 18.923458456000006], [1439154432.0, 48880000.0, 19.026755072], [1439156160.0, 48900000.0, 19.130168999999967], [1439157888.0, 48920000.0, 19.233700288000023], [1439159616.0, 48940000.0, 19.337348984000016], [1439161344.0, 48960000.0, 19.441115135999993], [1439163072.0, 48980000.0, 19.544998791999987], [1439164800.0, 49000000.0, 19.64900000000003], [1439166528.0, 49020000.0, 19.75311880800001], [1439168256.0, 49040000.0, 19.85735526399999], [1439169984.0, 49060000.0, 19.96170941599999], [1439171712.0, 49080000.0, 20.066181312000012], [1439173440.0, 49100000.0, 20.170771000000002], [1439175168.0, 49120000.0, 20.275478528000008], [1439176896.0, 49140000.0, 20.380303943999976], [1439178624.0, 49160000.0, 20.48524729600001], [1439180352.0, 49180000.0, 20.590308632000017], [1439182080.0, 49200000.0, 20.695487999999983], [1439183808.0, 49220000.0, 20.800785447999985], [1439185536.0, 49240000.0, 20.906201024000026], [1439187264.0, 49260000.0, 21.01173477600001], [1439188992.0, 49280000.0, 21.117386752], [1439190720.0, 49300000.0, 21.223156999999986], [1439192448.0, 49320000.0, 21.329045568000012], [1439194176.0, 49340000.0, 21.435052503999998], [1439195904.0, 49360000.0, 21.541177856000004], [1439197632.0, 49380000.0, 21.64742167199998], [1439199360.0, 49400000.0, 21.753784000000024], [1439201088.0, 49420000.0, 21.860264888000017], [1439202816.0, 49440000.0, 21.966864384000004], [1439204544.0, 49460000.0, 22.07358253599999], [1439206272.0, 49480000.0, 22.180419392000033], [1439208000.0, 49500000.0, 22.28737500000001], [1439209728.0, 49520000.0, 22.394449408], [1439211456.0, 49540000.0, 22.501642663999974], [1439213184.0, 49560000.0, 22.608954816000022], [1439214912.0, 49580000.0, 22.71638591200002], [1439216640.0, 49600000.0, 22.823936000000003], [1439218368.0, 49620000.0, 22.931605127999987], [1439220096.0, 49640000.0, 23.039393344000032], [1439221824.0, 49660000.0, 23.147300696000002], [1439223552.0, 49680000.0, 23.255327232], [1439225280.0, 49700000.0, 23.363472999999985], [1439227008.0, 49720000.0, 23.47173804800002], [1439228736.0, 49740000.0, 23.58012242400001], [1439230464.0, 49760000.0, 23.688626176], [1439232192.0, 49780000.0, 23.79724935199998], [1439233920.0, 49800000.0, 23.905992000000012], [1439235648.0, 49820000.0, 24.014854168000014], [1439237376.0, 49840000.0, 24.12383590399999], [1439239104.0, 49860000.0, 24.232937255999985], [1439240832.0, 49880000.0, 24.342158272000034], [1439242560.0, 49900000.0, 24.451499], [1439244288.0, 49920000.0, 24.560959487999995], [1439246016.0, 49940000.0, 24.670539784], [1439247744.0, 49960000.0, 24.780239936000015], [1439249472.0, 49980000.0, 24.890059992000005], [1439251200.0, 50000000.0, 25.0], [1439252928.0, 50020000.0, 25.11006000799999], [1439254656.0, 50040000.0, 25.22024006399998], [1439256384.0, 50060000.0, 25.330540216000017], [1439258112.0, 50080000.0, 25.440960512000004], [1439259840.0, 50100000.0, 25.551500999999988], [1439261568.0, 50120000.0, 25.662161727999973], [1439263296.0, 50140000.0, 25.77294274400002], [1439265024.0, 50160000.0, 25.883844096000004], [1439266752.0, 50180000.0, 25.994865831999988], [1439268480.0, 50200000.0, 26.106007999999974], [1439270208.0, 50220000.0, 26.217270648000024], [1439271936.0, 50240000.0, 26.328653824], [1439273664.0, 50260000.0, 26.440157575999976], [1439275392.0, 50280000.0, 26.551781951999985], [1439277120.0, 50300000.0, 26.663527000000002], [1439278848.0, 50320000.0, 26.775392768000003], [1439280576.0, 50340000.0, 26.887379303999992], [1439282304.0, 50360000.0, 26.999486655999974], [1439284032.0, 50380000.0, 27.111714872000007], [1439285760.0, 50400000.0, 27.224064000000013], [1439287488.0, 50420000.0, 27.33653408799998], [1439289216.0, 50440000.0, 27.449125183999968], [1439290944.0, 50460000.0, 27.56183733600001], [1439292672.0, 50480000.0, 27.674670591999984], [1439294400.0, 50500000.0, 27.78762499999999], [1439296128.0, 50520000.0, 27.900700607999994], [1439297856.0, 50540000.0, 28.013897463999996], [1439299584.0, 50560000.0, 28.127215616], [1439301312.0, 50580000.0, 28.240655111999985], [1439303040.0, 50600000.0, 28.35421599999998], [1439304768.0, 50620000.0, 28.467898328000018], [1439306496.0, 50640000.0, 28.58170214400002], [1439308224.0, 50660000.0, 28.695627495999986], [1439309952.0, 50680000.0, 28.80967443199998], [1439311680.0, 50700000.0, 28.923843000000005], [1439313408.0, 50720000.0, 29.03813324800001], [1439315136.0, 50740000.0, 29.152545223999994], [1439316864.0, 50760000.0, 29.26707897599998], [1439318592.0, 50780000.0, 29.38173455200001], [1439320320.0, 50800000.0, 29.496511999999996], [1439322048.0, 50820000.0, 29.61141136799999], [1439323776.0, 50840000.0, 29.726432703999976], [1439325504.0, 50860000.0, 29.841576056000036], [1439327232.0, 50880000.0, 29.956841471999994], [1439328960.0, 50900000.0, 30.07222899999998], [1439330688.0, 50920000.0, 30.187738687999982], [1439332416.0, 50940000.0, 30.303370584000007], [1439334144.0, 50960000.0, 30.419124736], [1439335872.0, 50980000.0, 30.535001191999996], [1439337600.0, 51000000.0, 30.650999999999982], [1439339328.0, 51020000.0, 30.767121208000034], [1439341056.0, 51040000.0, 30.883364864], [1439342784.0, 51060000.0, 30.999731016], [1439344512.0, 51080000.0, 31.116219711999975], [1439346240.0, 51100000.0, 31.23283100000002], [1439347968.0, 51120000.0, 31.349564927999978], [1439349696.0, 51140000.0, 31.466421543999985], [1439351424.0, 51160000.0, 31.583400896], [1439353152.0, 51180000.0, 31.700503032], [1439354880.0, 51200000.0, 31.817728000000017], [1439356608.0, 51220000.0, 31.935075847999997], [1439358336.0, 51240000.0, 32.052546624], [1439360064.0, 51260000.0, 32.170140376000006], [1439361792.0, 51280000.0, 32.28785715199999], [1439363520.0, 51300000.0, 32.405697], [1439365248.0, 51320000.0, 32.523659967999976], [1439366976.0, 51340000.0, 32.64174610400002], [1439368704.0, 51360000.0, 32.759955456], [1439370432.0, 51380000.0, 32.878288072000004], [1439372160.0, 51400000.0, 32.996743999999964], [1439373888.0, 51420000.0, 33.11532328800001], [1439375616.0, 51440000.0, 33.234025984], [1439377344.0, 51460000.0, 33.35285213599998], [1439379072.0, 51480000.0, 33.471801791999965], [1439380800.0, 51500000.0, 33.59087500000004], [1439382528.0, 51520000.0, 33.71007180800002], [1439384256.0, 51540000.0, 33.82939226399999], [1439385984.0, 51560000.0, 33.94883641599999], [1439387712.0, 51580000.0, 34.068404312], [1439389440.0, 51600000.0, 34.188096000000016], [1439391168.0, 51620000.0, 34.30791152799999], [1439392896.0, 51640000.0, 34.42785094399997], [1439394624.0, 51660000.0, 34.54791429600003], [1439396352.0, 51680000.0, 34.66810163200002], [1439398080.0, 51700000.0, 34.78841299999999], [1439399808.0, 51720000.0, 34.908848447999986], [1439401536.0, 51740000.0, 35.029408024000006], [1439403264.0, 51760000.0, 35.15009177600001], [1439404992.0, 51780000.0, 35.27089975199999], [1439406720.0, 51800000.0, 35.391831999999965], [1439408448.0, 51820000.0, 35.51288856800002], [1439410176.0, 51840000.0, 35.634069503999996], [1439411904.0, 51860000.0, 35.755374856], [1439413632.0, 51880000.0, 35.87680467199999], [1439415360.0, 51900000.0, 35.99835900000002], [1439417088.0, 51920000.0, 36.12003788800001], [1439418816.0, 51940000.0, 36.241841384], [1439420544.0, 51960000.0, 36.36376953600001], [1439422272.0, 51980000.0, 36.485822392000046], [1439424000.0, 52000000.0, 36.60800000000003], [1439425728.0, 52020000.0, 36.730302408], [1439427456.0, 52040000.0, 36.852729663999966], [1439429184.0, 52060000.0, 36.975281816000034], [1439430912.0, 52080000.0, 37.097958912000024], [1439432640.0, 52100000.0, 37.220760999999996], [1439434368.0, 52120000.0, 37.34368812799998], [1439436096.0, 52140000.0, 37.466740344000016], [1439437824.0, 52160000.0, 37.589917696], [1439439552.0, 52180000.0, 37.71322023199998], [1439441280.0, 52200000.0, 37.83664799999998], [1439443008.0, 52220000.0, 37.96020104800003], [1439444736.0, 52240000.0, 38.08387942400002], [1439446464.0, 52260000.0, 38.207683176], [1439448192.0, 52280000.0, 38.33161235199998], [1439449920.0, 52300000.0, 38.45566700000002], [1439451648.0, 52320000.0, 38.57984716800003], [1439453376.0, 52340000.0, 38.70415290400001], [1439455104.0, 52360000.0, 38.82858425599997], [1439456832.0, 52380000.0, 38.953141272000025], [1439458560.0, 52400000.0, 39.07782400000002], [1439460288.0, 52420000.0, 39.20263248799998], [1439462016.0, 52440000.0, 39.327566784], [1439463744.0, 52460000.0, 39.45262693600003], [1439465472.0, 52480000.0, 39.57781299200002], [1439467200.0, 52500000.0, 39.703125], [1439468928.0, 52520000.0, 39.828563008], [1439470656.0, 52540000.0, 39.95412706399998], [1439472384.0, 52560000.0, 40.07981721600001], [1439474112.0, 52580000.0, 40.20563351200002], [1439475840.0, 52600000.0, 40.331575999999984], [1439477568.0, 52620000.0, 40.45764472799998], [1439479296.0, 52640000.0, 40.58383974400002], [1439481024.0, 52660000.0, 40.71016109600001], [1439482752.0, 52680000.0, 40.83660883199998], [1439484480.0, 52700000.0, 40.96318299999997], [1439486208.0, 52720000.0, 41.08988364800001], [1439487936.0, 52740000.0, 41.216710824], [1439489664.0, 52760000.0, 41.343664575999995], [1439491392.0, 52780000.0, 41.470744951999976], [1439493120.0, 52800000.0, 41.59795200000001], [1439494848.0, 52820000.0, 41.725285768000006], [1439496576.0, 52840000.0, 41.85274630399998], [1439498304.0, 52860000.0, 41.98033365599997], [1439500032.0, 52880000.0, 42.10804787200003], [1439501760.0, 52900000.0, 42.235889], [1439503488.0, 52920000.0, 42.363857087999975], [1439505216.0, 52940000.0, 42.491952183999985], [1439506944.0, 52960000.0, 42.620174336000005], [1439508672.0, 52980000.0, 42.748523592], [1439510400.0, 53000000.0, 42.87699999999998], [1439512128.0, 53020000.0, 43.00560360799997], [1439513856.0, 53040000.0, 43.134334464000005], [1439515584.0, 53060000.0, 43.263192616], [1439517312.0, 53080000.0, 43.39217811199998], [1439519040.0, 53100000.0, 43.52129099999996], [1439520768.0, 53120000.0, 43.65053132800003], [1439522496.0, 53140000.0, 43.77989914400001], [1439524224.0, 53160000.0, 43.909394496000004], [1439525952.0, 53180000.0, 44.03901743199998], [1439527680.0, 53200000.0, 44.168768], [1439529408.0, 53220000.0, 44.29864624800001], [1439531136.0, 53240000.0, 44.42865222399999], [1439532864.0, 53260000.0, 44.55878597599998], [1439534592.0, 53280000.0, 44.689047552000034], [1439536320.0, 53300000.0, 44.81943699999999], [1439538048.0, 53320000.0, 44.94995436799998], [1439539776.0, 53340000.0, 45.080599703999965], [1439541504.0, 53360000.0, 45.21137305600001], [1439543232.0, 53380000.0, 45.342274472], [1439544960.0, 53400000.0, 45.473304], [1439546688.0, 53420000.0, 45.604461688], [1439548416.0, 53440000.0, 45.73574758400001], [1439550144.0, 53460000.0, 45.867161736], [1439551872.0, 53480000.0, 45.998704192000005], [1439553600.0, 53500000.0, 46.13037499999996], [1439555328.0, 53520000.0, 46.26217420800002], [1439557056.0, 53540000.0, 46.39410186400001], [1439558784.0, 53560000.0, 46.52615801599998], [1439560512.0, 53580000.0, 46.65834271199998], [1439562240.0, 53600000.0, 46.79065600000003], [1439563968.0, 53620000.0, 46.923097928000004], [1439565696.0, 53640000.0, 47.055668543999985], [1439567424.0, 53660000.0, 47.18836789599999], [1439569152.0, 53680000.0, 47.32119603200002], [1439570880.0, 53700000.0, 47.45415299999999], [1439572608.0, 53720000.0, 47.587238848], [1439574336.0, 53740000.0, 47.72045362399999], [1439576064.0, 53760000.0, 47.85379737600002], [1439577792.0, 53780000.0, 47.98727015200001], [1439579520.0, 53800000.0, 48.12087199999999], [1439581248.0, 53820000.0, 48.254602968], [1439582976.0, 53840000.0, 48.38846310400004], [1439584704.0, 53860000.0, 48.522452455999996], [1439586432.0, 53880000.0, 48.65657107199999], [1439588160.0, 53900000.0, 48.790818999999985], [1439589888.0, 53920000.0, 48.92519628800002], [1439591616.0, 53940000.0, 49.05970298400001], [1439593344.0, 53960000.0, 49.19433913599998], [1439595072.0, 53980000.0, 49.329104791999995], [1439596800.0, 54000000.0, 49.46400000000003], [1439598528.0, 54020000.0, 49.59902480800001], [1439600256.0, 54040000.0, 49.73417926399999], [1439601984.0, 54060000.0, 49.86946341599999], [1439603712.0, 54080000.0, 50.004877312000005], [1439605440.0, 54100000.0, 50.14042100000002], [1439607168.0, 54120000.0, 50.276094528], [1439608896.0, 54140000.0, 50.411897943999975], [1439610624.0, 54160000.0, 50.54783129600001], [1439612352.0, 54180000.0, 50.68389463200002], [1439614080.0, 54200000.0, 50.820088], [1439615808.0, 54220000.0, 50.95641144799998], [1439617536.0, 54240000.0, 51.092865024000034], [1439619264.0, 54260000.0, 51.229448776], [1439620992.0, 54280000.0, 51.36616275199998], [1439622720.0, 54300000.0, 51.50300699999997], [1439624448.0, 54320000.0, 51.639981568000024], [1439626176.0, 54340000.0, 51.77708650400001], [1439627904.0, 54360000.0, 51.91432185599999], [1439629632.0, 54380000.0, 52.051687671999986], [1439631360.0, 54400000.0, 52.18918400000004], [1439633088.0, 54420000.0, 52.32681088800001], [1439634816.0, 54440000.0, 52.46456838399999], [1439636544.0, 54460000.0, 52.602456536000005], [1439638272.0, 54480000.0, 52.740475392000036], [1439640000.0, 54500000.0, 52.878625], [1439641728.0, 54520000.0, 53.016905408000014], [1439643456.0, 54540000.0, 53.15531666399998], [1439645184.0, 54560000.0, 53.29385881600004], [1439646912.0, 54580000.0, 53.43253191200003], [1439648640.0, 54600000.0, 53.57133599999999], [1439650368.0, 54620000.0, 53.710271127999974], [1439652096.0, 54640000.0, 53.84933734400005], [1439653824.0, 54660000.0, 53.988534696], [1439655552.0, 54680000.0, 54.127863231999996], [1439657280.0, 54700000.0, 54.26732299999999], [1439659008.0, 54720000.0, 54.40691404800002], [1439660736.0, 54740000.0, 54.546636424], [1439662464.0, 54760000.0, 54.68649017599999], [1439664192.0, 54780000.0, 54.82647535199996], [1439665920.0, 54800000.0, 54.966592000000034], [1439667648.0, 54820000.0, 55.106840168000005], [1439669376.0, 54840000.0, 55.24721990399999], [1439671104.0, 54860000.0, 55.387731255999995], [1439672832.0, 54880000.0, 55.52837427200002], [1439674560.0, 54900000.0, 55.669149000000004], [1439676288.0, 54920000.0, 55.81005548799999], [1439678016.0, 54940000.0, 55.951093783999994], [1439679744.0, 54960000.0, 56.09226393600002], [1439681472.0, 54980000.0, 56.233565992000024], [1439683200.0, 55000000.0, 56.375], [1439684928.0, 55020000.0, 56.516566007999984], [1439686656.0, 55040000.0, 56.65826406399998], [1439688384.0, 55060000.0, 56.80009421600002], [1439690112.0, 55080000.0, 56.94205651199999], [1439691840.0, 55100000.0, 57.08415099999999], [1439693568.0, 55120000.0, 57.226377727999974], [1439695296.0, 55140000.0, 57.36873674400002], [1439697024.0, 55160000.0, 57.511228095999996], [1439698752.0, 55180000.0, 57.653851832], [1439700480.0, 55200000.0, 57.79660799999998], [1439702208.0, 55220000.0, 57.939496648000016], [1439703936.0, 55240000.0, 58.08251782399999], [1439705664.0, 55260000.0, 58.22567157599998], [1439707392.0, 55280000.0, 58.368957951999974], [1439709120.0, 55300000.0, 58.51237700000003], [1439710848.0, 55320000.0, 58.65592876800001], [1439712576.0, 55340000.0, 58.799613303999976], [1439714304.0, 55360000.0, 58.943430655999975], [1439716032.0, 55380000.0, 59.087380872000026], [1439717760.0, 55400000.0, 59.231464], [1439719488.0, 55420000.0, 59.37568008799997], [1439721216.0, 55440000.0, 59.52002918399995], [1439722944.0, 55460000.0, 59.66451133600002], [1439724672.0, 55480000.0, 59.80912659200001], [1439726400.0, 55500000.0, 59.95387499999998], [1439728128.0, 55520000.0, 60.098756607999974], [1439729856.0, 55540000.0, 60.24377146400002], [1439731584.0, 55560000.0, 60.38891961600001], [1439733312.0, 55580000.0, 60.534201112000005], [1439735040.0, 55600000.0, 60.67961599999998], [1439736768.0, 55620000.0, 60.82516432800003], [1439738496.0, 55640000.0, 60.97084614400001], [1439740224.0, 55660000.0, 61.11666149599998], [1439741952.0, 55680000.0, 61.262610431999974], [1439743680.0, 55700000.0, 61.40869300000003], [1439745408.0, 55720000.0, 61.554909248], [1439747136.0, 55740000.0, 61.70125922399998], [1439748864.0, 55760000.0, 61.847742975999964], [1439750592.0, 55780000.0, 61.99436055200002], [1439752320.0, 55800000.0, 62.14111200000002], [1439754048.0, 55820000.0, 62.28799736799998], [1439755776.0, 55840000.0, 62.43501670399998], [1439757504.0, 55860000.0, 62.58217005600005], [1439759232.0, 55880000.0, 62.72945747200002], [1439760960.0, 55900000.0, 62.87687899999999], [1439762688.0, 55920000.0, 63.02443468799997], [1439764416.0, 55940000.0, 63.17212458400003], [1439766144.0, 55960000.0, 63.319948736], [1439767872.0, 55980000.0, 63.467907192], [1439769600.0, 56000000.0, 63.61599999999996], [1439771328.0, 56020000.0, 63.76422720800004], [1439773056.0, 56040000.0, 63.912588864], [1439774784.0, 56060000.0, 64.06108501599996], [1439776512.0, 56080000.0, 64.20971571199996], [1439778240.0, 56100000.0, 64.35848100000003], [1439779968.0, 56120000.0, 64.507380928], [1439781696.0, 56140000.0, 64.656415544], [1439783424.0, 56160000.0, 64.80558489599997], [1439785152.0, 56180000.0, 64.95488903200001], [1439786880.0, 56200000.0, 65.10432800000001], [1439788608.0, 56220000.0, 65.25390184799997], [1439790336.0, 56240000.0, 65.40361062399998], [1439792064.0, 56260000.0, 65.55345437600002], [1439793792.0, 56280000.0, 65.703433152], [1439795520.0, 56300000.0, 65.85354699999999], [1439797248.0, 56320000.0, 66.00379596799999], [1439798976.0, 56340000.0, 66.15418010400003], [1439800704.0, 56360000.0, 66.30469945600001], [1439802432.0, 56380000.0, 66.455354072], [1439804160.0, 56400000.0, 66.60614399999996], [1439805888.0, 56420000.0, 66.75706928800003], [1439807616.0, 56440000.0, 66.90812998400003], [1439809344.0, 56460000.0, 67.059326136], [1439811072.0, 56480000.0, 67.21065779199996], [1439812800.0, 56500000.0, 67.36212500000002], [1439814528.0, 56520000.0, 67.51372780800001], [1439816256.0, 56540000.0, 67.66546626399999], [1439817984.0, 56560000.0, 67.81734041599996], [1439819712.0, 56580000.0, 67.96935031200003], [1439821440.0, 56600000.0, 68.12149600000002], [1439823168.0, 56620000.0, 68.27377752800002], [1439824896.0, 56640000.0, 68.42619494399997], [1439826624.0, 56660000.0, 68.57874829600003], [1439828352.0, 56680000.0, 68.73143763200001], [1439830080.0, 56700000.0, 68.88426299999998], [1439831808.0, 56720000.0, 69.03722444799996], [1439833536.0, 56740000.0, 69.19032202400003], [1439835264.0, 56760000.0, 69.34355577600002], [1439836992.0, 56780000.0, 69.49692575199998], [1439838720.0, 56800000.0, 69.650432], [1439840448.0, 56820000.0, 69.804074568], [1439842176.0, 56840000.0, 69.95785350400001], [1439843904.0, 56860000.0, 70.111768856], [1439845632.0, 56880000.0, 70.26582067199999], [1439847360.0, 56900000.0, 70.420009], [1439849088.0, 56920000.0, 70.57433388800001], [1439850816.0, 56940000.0, 70.728795384], [1439852544.0, 56960000.0, 70.88339353599997], [1439854272.0, 56980000.0, 71.03812839200003], [1439856000.0, 57000000.0, 71.19300000000001], [1439857728.0, 57020000.0, 71.34800840800003], [1439859456.0, 57040000.0, 71.50315366399998], [1439861184.0, 57060000.0, 71.65843581600006], [1439862912.0, 57080000.0, 71.81385491200004], [1439864640.0, 57100000.0, 71.96941100000002], [1439866368.0, 57120000.0, 72.12510412799996], [1439868096.0, 57140000.0, 72.28093434400003], [1439869824.0, 57160000.0, 72.43690169600002], [1439871552.0, 57180000.0, 72.59300623200001], [1439873280.0, 57200000.0, 72.74924799999998], [1439875008.0, 57220000.0, 72.90562704800006], [1439876736.0, 57240000.0, 73.06214342399998], [1439878464.0, 57260000.0, 73.218797176], [1439880192.0, 57280000.0, 73.375588352], [1439881920.0, 57300000.0, 73.53251700000003], [1439883648.0, 57320000.0, 73.68958316800003], [1439885376.0, 57340000.0, 73.846786904], [1439887104.0, 57360000.0, 74.00412825599997], [1439888832.0, 57380000.0, 74.16160727200004], [1439890560.0, 57400000.0, 74.31922399999999], [1439892288.0, 57420000.0, 74.47697848800001], [1439894016.0, 57440000.0, 74.63487078399999], [1439895744.0, 57460000.0, 74.79290093600002], [1439897472.0, 57480000.0, 74.95106899200002], [1439899200.0, 57500000.0, 75.109375], [1439900928.0, 57520000.0, 75.267819008], [1439902656.0, 57540000.0, 75.42640106399998], [1439904384.0, 57560000.0, 75.58512121600003], [1439906112.0, 57580000.0, 75.74397951200001], [1439907840.0, 57600000.0, 75.902976], [1439909568.0, 57620000.0, 76.06211072799998], [1439911296.0, 57640000.0, 76.22138374400004], [1439913024.0, 57660000.0, 76.38079509599999], [1439914752.0, 57680000.0, 76.540344832], [1439916480.0, 57700000.0, 76.70003299999998], [1439918208.0, 57720000.0, 76.85985964800003], [1439919936.0, 57740000.0, 77.019824824], [1439921664.0, 57760000.0, 77.179928576], [1439923392.0, 57780000.0, 77.34017095199998], [1439925120.0, 57800000.0, 77.50055200000001], [1439926848.0, 57820000.0, 77.66107176800001], [1439928576.0, 57840000.0, 77.82173030400001], [1439930304.0, 57860000.0, 77.98252765599997], [1439932032.0, 57880000.0, 78.14346387200003], [1439933760.0, 57900000.0, 78.30453899999999], [1439935488.0, 57920000.0, 78.46575308799999], [1439937216.0, 57940000.0, 78.62710618399996], [1439938944.0, 57960000.0, 78.78859833600002], [1439940672.0, 57980000.0, 78.950229592], [1439942400.0, 58000000.0, 79.112], [1439944128.0, 58020000.0, 79.27390960799997], [1439945856.0, 58040000.0, 79.43595846400001], [1439947584.0, 58060000.0, 79.59814661600001], [1439949312.0, 58080000.0, 79.760474112], [1439951040.0, 58100000.0, 79.92294099999998], [1439952768.0, 58120000.0, 80.08554732800002], [1439954496.0, 58140000.0, 80.248293144], [1439956224.0, 58160000.0, 80.41117849599996], [1439957952.0, 58180000.0, 80.57420343199999], [1439959680.0, 58200000.0, 80.73736800000003], [1439961408.0, 58220000.0, 80.90067224800003], [1439963136.0, 58240000.0, 81.064116224], [1439964864.0, 58260000.0, 81.22769997599995], [1439966592.0, 58280000.0, 81.39142355200005], [1439968320.0, 58300000.0, 81.55528700000002], [1439970048.0, 58320000.0, 81.71929036799996], [1439971776.0, 58340000.0, 81.88343370399996], [1439973504.0, 58360000.0, 82.04771705600004], [1439975232.0, 58380000.0, 82.212140472], [1439976960.0, 58400000.0, 82.37670399999998], [1439978688.0, 58420000.0, 82.54140768799998], [1439980416.0, 58440000.0, 82.70625158400004], [1439982144.0, 58460000.0, 82.871235736], [1439983872.0, 58480000.0, 83.036360192], [1439985600.0, 58500000.0, 83.20162499999998], [1439987328.0, 58520000.0, 83.36703020800003], [1439989056.0, 58540000.0, 83.53257586400004], [1439990784.0, 58560000.0, 83.69826201599997], [1439992512.0, 58580000.0, 83.86408871199995], [1439994240.0, 58600000.0, 84.03005600000004], [1439995968.0, 58620000.0, 84.196163928], [1439997696.0, 58640000.0, 84.362412544], [1439999424.0, 58660000.0, 84.52880189599995], [1440001152.0, 58680000.0, 84.69533203200001], [1440002880.0, 58700000.0, 84.86200300000002], [1440004608.0, 58720000.0, 85.028814848], [1440006336.0, 58740000.0, 85.19576762399998], [1440008064.0, 58760000.0, 85.36286137600001], [1440009792.0, 58780000.0, 85.53009615200003], [1440011520.0, 58800000.0, 85.69747199999998], [1440013248.0, 58820000.0, 85.864988968], [1440014976.0, 58840000.0, 86.032647104], [1440016704.0, 58860000.0, 86.20044645600001], [1440018432.0, 58880000.0, 86.36838707199999], [1440020160.0, 58900000.0, 86.53646899999997], [1440021888.0, 58920000.0, 86.70469228800002], [1440023616.0, 58940000.0, 86.87305698399999], [1440025344.0, 58960000.0, 87.041563136], [1440027072.0, 58980000.0, 87.21021079199998], [1440028800.0, 59000000.0, 87.37900000000002], [1440030528.0, 59020000.0, 87.547930808], [1440032256.0, 59040000.0, 87.71700326400001], [1440033984.0, 59060000.0, 87.88621741599998], [1440035712.0, 59080000.0, 88.05557331200002], [1440037440.0, 59100000.0, 88.225071], [1440039168.0, 59120000.0, 88.39471052799998], [1440040896.0, 59140000.0, 88.56449194399997], [1440042624.0, 59160000.0, 88.73441529600002], [1440044352.0, 59180000.0, 88.90448063200002], [1440046080.0, 59200000.0, 89.07468799999998], [1440047808.0, 59220000.0, 89.24503744799995], [1440049536.0, 59240000.0, 89.41552902400004], [1440051264.0, 59260000.0, 89.58616277600001], [1440052992.0, 59280000.0, 89.75693875200002], [1440054720.0, 59300000.0, 89.92785699999996], [1440056448.0, 59320000.0, 90.09891756800002], [1440058176.0, 59340000.0, 90.270120504], [1440059904.0, 59360000.0, 90.44146585599998], [1440061632.0, 59380000.0, 90.61295367199997], [1440063360.0, 59400000.0, 90.78458400000005], [1440065088.0, 59420000.0, 90.95635688799999], [1440066816.0, 59440000.0, 91.12827238400001], [1440068544.0, 59460000.0, 91.30033053599999], [1440070272.0, 59480000.0, 91.47253139200004], [1440072000.0, 59500000.0, 91.64487500000001], [1440073728.0, 59520000.0, 91.81736140800001], [1440075456.0, 59540000.0, 91.98999066399996], [1440077184.0, 59560000.0, 92.16276281600003], [1440078912.0, 59580000.0, 92.33567791200002], [1440080640.0, 59600000.0, 92.50873599999998], [1440082368.0, 59620000.0, 92.68193712799997], [1440084096.0, 59640000.0, 92.85528134400008], [1440085824.0, 59660000.0, 93.028768696], [1440087552.0, 59680000.0, 93.20239923199999], [1440089280.0, 59700000.0, 93.37617299999998], [1440091008.0, 59720000.0, 93.55009004800003], [1440092736.0, 59740000.0, 93.724150424], [1440094464.0, 59760000.0, 93.89835417599998], [1440096192.0, 59780000.0, 94.07270135199997], [1440097920.0, 59800000.0, 94.24719200000003], [1440099648.0, 59820000.0, 94.42182616800004], [1440101376.0, 59840000.0, 94.596603904], [1440103104.0, 59860000.0, 94.77152525599996], [1440104832.0, 59880000.0, 94.94659027200005], [1440106560.0, 59900000.0, 95.12179900000004], [1440108288.0, 59920000.0, 95.297151488], [1440110016.0, 59940000.0, 95.472647784], [1440111744.0, 59960000.0, 95.64828793600003], [1440113472.0, 59980000.0, 95.82407199200003], [1440115200.0, 60000000.0, 96.0], [1440116928.0, 60020000.0, 96.17607200799998], [1440118656.0, 60040000.0, 96.35228806399999], [1440120384.0, 60060000.0, 96.52864821600002], [1440122112.0, 60080000.0, 96.70515251199998], [1440123840.0, 60100000.0, 96.881801], [1440125568.0, 60120000.0, 97.05859372799996], [1440127296.0, 60140000.0, 97.23553074400002], [1440129024.0, 60160000.0, 97.412612096], [1440130752.0, 60180000.0, 97.58983783199999], [1440132480.0, 60200000.0, 97.76720799999997], [1440134208.0, 60220000.0, 97.94472264800004], [1440135936.0, 60240000.0, 98.12238182399999], [1440137664.0, 60260000.0, 98.30018557599998], [1440139392.0, 60280000.0, 98.47813395199996], [1440141120.0, 60300000.0, 98.65622700000002], [1440142848.0, 60320000.0, 98.83446476800002], [1440144576.0, 60340000.0, 99.01284730399998], [1440146304.0, 60360000.0, 99.19137465599997], [1440148032.0, 60380000.0, 99.37004687200003], [1440149760.0, 60400000.0, 99.548864], [1440151488.0, 60420000.0, 99.72782608799997], [1440153216.0, 60440000.0, 99.90693318399994], [1440154944.0, 60460000.0, 100.08618533600001], [1440156672.0, 60480000.0, 100.26558259200002], [1440158400.0, 60500000.0, 100.44512499999999], [1440160128.0, 60520000.0, 100.62481260799998], [1440161856.0, 60540000.0, 100.804645464], [1440163584.0, 60560000.0, 100.98462361600002], [1440165312.0, 60580000.0, 101.16474711199996], [1440167040.0, 60600000.0, 101.34501599999999], [1440168768.0, 60620000.0, 101.525430328], [1440170496.0, 60640000.0, 101.705990144], [1440172224.0, 60660000.0, 101.88669549599999], [1440173952.0, 60680000.0, 102.06754643199997], [1440175680.0, 60700000.0, 102.24854300000001], [1440177408.0, 60720000.0, 102.42968524800003], [1440179136.0, 60740000.0, 102.61097322399999], [1440180864.0, 60760000.0, 102.79240697599998], [1440182592.0, 60780000.0, 102.97398655200001], [1440184320.0, 60800000.0, 103.15571200000002], [1440186048.0, 60820000.0, 103.33758336799998], [1440187776.0, 60840000.0, 103.51960070399996], [1440189504.0, 60860000.0, 103.70176405600003], [1440191232.0, 60880000.0, 103.884073472], [1440192960.0, 60900000.0, 104.06652899999999], [1440194688.0, 60920000.0, 104.24913068799997], [1440196416.0, 60940000.0, 104.43187858400002], [1440198144.0, 60960000.0, 104.61477273600003], [1440199872.0, 60980000.0, 104.79781319199999], [1440201600.0, 61000000.0, 104.98099999999994], [1440203328.0, 61020000.0, 105.16433320800003], [1440205056.0, 61040000.0, 105.34781286400003], [1440206784.0, 61060000.0, 105.53143901599995], [1440208512.0, 61080000.0, 105.71521171199996], [1440210240.0, 61100000.0, 105.89913100000003], [1440211968.0, 61120000.0, 106.08319692799998], [1440213696.0, 61140000.0, 106.26740954399997], [1440215424.0, 61160000.0, 106.45176889599995], [1440217152.0, 61180000.0, 106.63627503200004], [1440218880.0, 61200000.0, 106.82092800000001], [1440220608.0, 61220000.0, 107.00572784799999], [1440222336.0, 61240000.0, 107.19067462399997], [1440224064.0, 61260000.0, 107.37576837600005], [1440225792.0, 61280000.0, 107.56100915200003], [1440227520.0, 61300000.0, 107.746397], [1440229248.0, 61320000.0, 107.93193196799996], [1440230976.0, 61340000.0, 108.11761410400001], [1440232704.0, 61360000.0, 108.30344345600002], [1440234432.0, 61380000.0, 108.489420072], [1440236160.0, 61400000.0, 108.67554399999996], [1440237888.0, 61420000.0, 108.86181528800003], [1440239616.0, 61440000.0, 109.048233984], [1440241344.0, 61460000.0, 109.234800136], [1440243072.0, 61480000.0, 109.42151379199997], [1440244800.0, 61500000.0, 109.60837500000005], [1440246528.0, 61520000.0, 109.79538380800001], [1440248256.0, 61540000.0, 109.98254026400001], [1440249984.0, 61560000.0, 110.16984441599998], [1440251712.0, 61580000.0, 110.35729631200003], [1440253440.0, 61600000.0, 110.54489600000001], [1440255168.0, 61620000.0, 110.732643528], [1440256896.0, 61640000.0, 110.92053894399996], [1440258624.0, 61660000.0, 111.10858229600002], [1440260352.0, 61680000.0, 111.29677363200001], [1440262080.0, 61700000.0, 111.48511299999998], [1440263808.0, 61720000.0, 111.673600448], [1440265536.0, 61740000.0, 111.86223602400001], [1440267264.0, 61760000.0, 112.05101977600003], [1440268992.0, 61780000.0, 112.239951752], [1440270720.0, 61800000.0, 112.42903199999998], [1440272448.0, 61820000.0, 112.61826056800004], [1440274176.0, 61840000.0, 112.80763750399998], [1440275904.0, 61860000.0, 112.99716285599999], [1440277632.0, 61880000.0, 113.18683667199997], [1440279360.0, 61900000.0, 113.37665900000005], [1440281088.0, 61920000.0, 113.56662988800002], [1440282816.0, 61940000.0, 113.75674938400002], [1440284544.0, 61960000.0, 113.94701753599998], [1440286272.0, 61980000.0, 114.13743439200002], [1440288000.0, 62000000.0, 114.32800000000003], [1440289728.0, 62020000.0, 114.51871440800002], [1440291456.0, 62040000.0, 114.70957766399998], [1440293184.0, 62060000.0, 114.90058981600004], [1440294912.0, 62080000.0, 115.09175091200004], [1440296640.0, 62100000.0, 115.28306099999996], [1440298368.0, 62120000.0, 115.47452012799998], [1440300096.0, 62140000.0, 115.66612834400007], [1440301824.0, 62160000.0, 115.85788569600003], [1440303552.0, 62180000.0, 116.049792232], [1440305280.0, 62200000.0, 116.24184799999996], [1440307008.0, 62220000.0, 116.43405304800005], [1440308736.0, 62240000.0, 116.62640742400002], [1440310464.0, 62260000.0, 116.81891117599999], [1440312192.0, 62280000.0, 117.01156435199997], [1440313920.0, 62300000.0, 117.20436700000003], [1440315648.0, 62320000.0, 117.39731916800004], [1440317376.0, 62340000.0, 117.59042090399998], [1440319104.0, 62360000.0, 117.78367225599999], [1440320832.0, 62380000.0, 117.97707327200006], [1440322560.0, 62400000.0, 118.170624], [1440324288.0, 62420000.0, 118.364324488], [1440326016.0, 62440000.0, 118.55817478399999], [1440327744.0, 62460000.0, 118.75217493600005], [1440329472.0, 62480000.0, 118.94632499200003], [1440331200.0, 62500000.0, 119.140625], [1440332928.0, 62520000.0, 119.33507500799996], [1440334656.0, 62540000.0, 119.52967506399995], [1440336384.0, 62560000.0, 119.72442521600004], [1440338112.0, 62580000.0, 119.91932551200003], [1440339840.0, 62600000.0, 120.114376], [1440341568.0, 62620000.0, 120.30957672799998], [1440343296.0, 62640000.0, 120.50492774400001], [1440345024.0, 62660000.0, 120.70042909600002], [1440346752.0, 62680000.0, 120.89608083200001], [1440348480.0, 62700000.0, 121.09188299999995], [1440350208.0, 62720000.0, 121.28783564800005], [1440351936.0, 62740000.0, 121.48393882399999], [1440353664.0, 62760000.0, 121.68019257599995], [1440355392.0, 62780000.0, 121.87659695199999], [1440357120.0, 62800000.0, 122.07315200000001], [1440358848.0, 62820000.0, 122.269857768], [1440360576.0, 62840000.0, 122.46671430399998], [1440362304.0, 62860000.0, 122.66372165599992], [1440364032.0, 62880000.0, 122.86087987200001], [1440365760.0, 62900000.0, 123.05818900000001], [1440367488.0, 62920000.0, 123.25564908799998], [1440369216.0, 62940000.0, 123.45326018399999], [1440370944.0, 62960000.0, 123.65102233600003], [1440372672.0, 62980000.0, 123.848935592], [1440374400.0, 63000000.0, 124.04699999999997], [1440376128.0, 63020000.0, 124.24521560799994], [1440377856.0, 63040000.0, 124.44358246400003], [1440379584.0, 63060000.0, 124.642100616], [1440381312.0, 63080000.0, 124.840770112], [1440383040.0, 63100000.0, 125.03959099999994], [1440384768.0, 63120000.0, 125.23856332800005], [1440386496.0, 63140000.0, 125.43768714400002], [1440388224.0, 63160000.0, 125.636962496], [1440389952.0, 63180000.0, 125.83638943199998], [1440391680.0, 63200000.0, 126.03596800000005], [1440393408.0, 63220000.0, 126.235698248], [1440395136.0, 63240000.0, 126.435580224], [1440396864.0, 63260000.0, 126.63561397599996], [1440398592.0, 63280000.0, 126.83579955200003], [1440400320.0, 63300000.0, 127.036137], [1440402048.0, 63320000.0, 127.23662636799996], [1440403776.0, 63340000.0, 127.43726770399998], [1440405504.0, 63360000.0, 127.63806105600003], [1440407232.0, 63380000.0, 127.83900647200001], [1440408960.0, 63400000.0, 128.04010399999999], [1440410688.0, 63420000.0, 128.24135368799995], [1440412416.0, 63440000.0, 128.44275558400005], [1440414144.0, 63460000.0, 128.64430973599997], [1440415872.0, 63480000.0, 128.84601619199998], [1440417600.0, 63500000.0, 129.04787499999998], [1440419328.0, 63520000.0, 129.24988620800002], [1440421056.0, 63540000.0, 129.45204986400006], [1440422784.0, 63560000.0, 129.65436601599998], [1440424512.0, 63580000.0, 129.856834712], [1440426240.0, 63600000.0, 130.05945600000007], [1440427968.0, 63620000.0, 130.262229928], [1440429696.0, 63640000.0, 130.465156544], [1440431424.0, 63660000.0, 130.66823589599994], [1440433152.0, 63680000.0, 130.87146803200005], [1440434880.0, 63700000.0, 131.074853], [1440436608.0, 63720000.0, 131.27839084800002], [1440438336.0, 63740000.0, 131.48208162399996], [1440440064.0, 63760000.0, 131.68592537600003], [1440441792.0, 63780000.0, 131.889922152], [1440443520.0, 63800000.0, 132.094072], [1440445248.0, 63820000.0, 132.29837496799996], [1440446976.0, 63840000.0, 132.502831104], [1440448704.0, 63860000.0, 132.707440456], [1440450432.0, 63880000.0, 132.91220307199995], [1440452160.0, 63900000.0, 133.11711899999995], [1440453888.0, 63920000.0, 133.32218828800004], [1440455616.0, 63940000.0, 133.52741098400003], [1440457344.0, 63960000.0, 133.732787136], [1440459072.0, 63980000.0, 133.93831679199997], [1440460800.0, 64000000.0, 134.14400000000006], [1440462528.0, 64020000.0, 134.34983680800005], [1440464256.0, 64040000.0, 134.55582726400002], [1440465984.0, 64060000.0, 134.76197141599994], [1440467712.0, 64080000.0, 134.96826931200005], [1440469440.0, 64100000.0, 135.17472100000003], [1440471168.0, 64120000.0, 135.381326528], [1440472896.0, 64140000.0, 135.58808594399997], [1440474624.0, 64160000.0, 135.79499929600007], [1440476352.0, 64180000.0, 136.00206663200004], [1440478080.0, 64200000.0, 136.209288], [1440479808.0, 64220000.0, 136.416663448], [1440481536.0, 64240000.0, 136.62419302400002], [1440483264.0, 64260000.0, 136.83187677600003], [1440484992.0, 64280000.0, 137.039714752], [1440486720.0, 64300000.0, 137.24770699999996], [1440488448.0, 64320000.0, 137.45585356800004], [1440490176.0, 64340000.0, 137.664154504], [1440491904.0, 64360000.0, 137.87260985599997], [1440493632.0, 64380000.0, 138.08121967199997], [1440495360.0, 64400000.0, 138.28998400000006], [1440497088.0, 64420000.0, 138.498902888], [1440498816.0, 64440000.0, 138.707976384], [1440500544.0, 64460000.0, 138.91720453599996], [1440502272.0, 64480000.0, 139.12658739200006], [1440504000.0, 64500000.0, 139.33612499999998], [1440505728.0, 64520000.0, 139.54581740800003], [1440507456.0, 64540000.0, 139.755664664], [1440509184.0, 64560000.0, 139.96566681600007], [1440510912.0, 64580000.0, 140.17582391200003], [1440512640.0, 64600000.0, 140.38613600000002], [1440514368.0, 64620000.0, 140.59660312799997], [1440516096.0, 64640000.0, 140.80722534400005], [1440517824.0, 64660000.0, 141.01800269600005], [1440519552.0, 64680000.0, 141.22893523199997], [1440521280.0, 64700000.0, 141.44002299999997], [1440523008.0, 64720000.0, 141.65126604800008], [1440524736.0, 64740000.0, 141.862664424], [1440526464.0, 64760000.0, 142.07421817599996], [1440528192.0, 64780000.0, 142.285927352], [1440529920.0, 64800000.0, 142.49779200000006], [1440531648.0, 64820000.0, 142.709812168], [1440533376.0, 64840000.0, 142.921987904], [1440535104.0, 64860000.0, 143.134319256], [1440536832.0, 64880000.0, 143.34680627200007], [1440538560.0, 64900000.0, 143.55944900000003], [1440540288.0, 64920000.0, 143.77224748800003], [1440542016.0, 64940000.0, 143.98520178399997], [1440543744.0, 64960000.0, 144.19831193600004], [1440545472.0, 64980000.0, 144.41157799200002], [1440547200.0, 65000000.0, 144.625], [1440548928.0, 65020000.0, 144.83857800799998], [1440550656.0, 65040000.0, 145.05231206399998], [1440552384.0, 65060000.0, 145.266202216], [1440554112.0, 65080000.0, 145.48024851200003], [1440555840.0, 65100000.0, 145.69445100000002], [1440557568.0, 65120000.0, 145.90880972799997], [1440559296.0, 65140000.0, 146.12332474400003], [1440561024.0, 65160000.0, 146.33799609599998], [1440562752.0, 65180000.0, 146.55282383200003], [1440564480.0, 65200000.0, 146.767808], [1440566208.0, 65220000.0, 146.98294864800005], [1440567936.0, 65240000.0, 147.198245824], [1440569664.0, 65260000.0, 147.413699576], [1440571392.0, 65280000.0, 147.62930995199991], [1440573120.0, 65300000.0, 147.84507700000003], [1440574848.0, 65320000.0, 148.06100076799999], [1440576576.0, 65340000.0, 148.27708130399998], [1440578304.0, 65360000.0, 148.49331865599996], [1440580032.0, 65380000.0, 148.70971287200007], [1440581760.0, 65400000.0, 148.926264], [1440583488.0, 65420000.0, 149.142972088], [1440585216.0, 65440000.0, 149.35983718399996], [1440586944.0, 65460000.0, 149.57685933600004], [1440588672.0, 65480000.0, 149.79403859199996], [1440590400.0, 65500000.0, 150.011375], [1440592128.0, 65520000.0, 150.22886860799994], [1440593856.0, 65540000.0, 150.44651946400003], [1440595584.0, 65560000.0, 150.66432761599998], [1440597312.0, 65580000.0, 150.88229311199999], [1440599040.0, 65600000.0, 151.10041599999994], [1440600768.0, 65620000.0, 151.31869632800004], [1440602496.0, 65640000.0, 151.53713414399996], [1440604224.0, 65660000.0, 151.75572949600001], [1440605952.0, 65680000.0, 151.97448243199997], [1440607680.0, 65700000.0, 152.19339300000004], [1440609408.0, 65720000.0, 152.412461248], [1440611136.0, 65740000.0, 152.631687224], [1440612864.0, 65760000.0, 152.85107097599996], [1440614592.0, 65780000.0, 153.07061255200006], [1440616320.0, 65800000.0, 153.290312], [1440618048.0, 65820000.0, 153.510169368], [1440619776.0, 65840000.0, 153.73018470399995], [1440621504.0, 65860000.0, 153.95035805600006], [1440623232.0, 65880000.0, 154.170689472], [1440624960.0, 65900000.0, 154.39117899999997], [1440626688.0, 65920000.0, 154.61182668799992], [1440628416.0, 65940000.0, 154.83263258400007], [1440630144.0, 65960000.0, 155.05359673599997], [1440631872.0, 65980000.0, 155.274719192], [1440633600.0, 66000000.0, 155.49599999999998], [1440635328.0, 66020000.0, 155.71743920800003], [1440637056.0, 66040000.0, 155.93903686400003], [1440638784.0, 66060000.0, 156.16079301599996], [1440640512.0, 66080000.0, 156.38270771199993], [1440642240.0, 66100000.0, 156.60478100000003], [1440643968.0, 66120000.0, 156.827012928], [1440645696.0, 66140000.0, 157.049403544], [1440647424.0, 66160000.0, 157.27195289599996], [1440649152.0, 66180000.0, 157.494661032], [1440650880.0, 66200000.0, 157.71752800000004], [1440652608.0, 66220000.0, 157.94055384799998], [1440654336.0, 66240000.0, 158.163738624], [1440656064.0, 66260000.0, 158.38708237600005], [1440657792.0, 66280000.0, 158.610585152], [1440659520.0, 66300000.0, 158.83424699999998], [1440661248.0, 66320000.0, 159.05806796799993], [1440662976.0, 66340000.0, 159.282048104], [1440664704.0, 66360000.0, 159.506187456], [1440666432.0, 66380000.0, 159.73048607199996], [1440668160.0, 66400000.0, 159.95494399999998], [1440669888.0, 66420000.0, 160.17956128800003], [1440671616.0, 66440000.0, 160.404337984], [1440673344.0, 66460000.0, 160.62927413600002], [1440675072.0, 66480000.0, 160.854369792], [1440676800.0, 66500000.0, 161.07962500000002], [1440678528.0, 66520000.0, 161.30503980800003], [1440680256.0, 66540000.0, 161.530614264], [1440681984.0, 66560000.0, 161.75634841599998], [1440683712.0, 66580000.0, 161.98224231200007], [1440685440.0, 66600000.0, 162.20829600000002], [1440687168.0, 66620000.0, 162.43450952799998], [1440688896.0, 66640000.0, 162.66088294399995], [1440690624.0, 66660000.0, 162.88741629600008], [1440692352.0, 66680000.0, 163.114109632], [1440694080.0, 66700000.0, 163.34096300000002], [1440695808.0, 66720000.0, 163.56797644799997], [1440697536.0, 66740000.0, 163.79515002400007], [1440699264.0, 66760000.0, 164.02248377599997], [1440700992.0, 66780000.0, 164.249977752], [1440702720.0, 66800000.0, 164.477632], [1440704448.0, 66820000.0, 164.70544656800004], [1440706176.0, 66840000.0, 164.93342150400002], [1440707904.0, 66860000.0, 165.16155685599998], [1440709632.0, 66880000.0, 165.38985267199996], [1440711360.0, 66900000.0, 165.618309], [1440713088.0, 66920000.0, 165.84692588800002], [1440714816.0, 66940000.0, 166.075703384], [1440716544.0, 66960000.0, 166.304641536], [1440718272.0, 66980000.0, 166.53374039200006], [1440720000.0, 67000000.0, 166.76300000000003], [1440721728.0, 67020000.0, 166.99242040800002], [1440723456.0, 67040000.0, 167.222001664], [1440725184.0, 67060000.0, 167.45174381600003], [1440726912.0, 67080000.0, 167.68164691200005], [1440728640.0, 67100000.0, 167.91171099999997], [1440730368.0, 67120000.0, 168.14193612799994], [1440732096.0, 67140000.0, 168.37232234400008], [1440733824.0, 67160000.0, 168.60286969600003], [1440735552.0, 67180000.0, 168.83357823199998], [1440737280.0, 67200000.0, 169.06444799999994], [1440739008.0, 67220000.0, 169.29547904800006], [1440740736.0, 67240000.0, 169.52667142399997], [1440742464.0, 67260000.0, 169.75802517599996], [1440744192.0, 67280000.0, 169.98954035199995], [1440745920.0, 67300000.0, 170.22121700000002], [1440747648.0, 67320000.0, 170.45305516800002], [1440749376.0, 67340000.0, 170.68505490399997], [1440751104.0, 67360000.0, 170.91721625599993], [1440752832.0, 67380000.0, 171.14953927200006], [1440754560.0, 67400000.0, 171.38202400000006], [1440756288.0, 67420000.0, 171.61467048799997], [1440758016.0, 67440000.0, 171.84747878399997], [1440759744.0, 67460000.0, 172.08044893600004], [1440761472.0, 67480000.0, 172.313580992], [1440763200.0, 67500000.0, 172.546875], [1440764928.0, 67520000.0, 172.780331008], [1440766656.0, 67540000.0, 173.01394906399997], [1440768384.0, 67560000.0, 173.24772921600004], [1440770112.0, 67580000.0, 173.48167151200002], [1440771840.0, 67600000.0, 173.71577599999995], [1440773568.0, 67620000.0, 173.95004272799994], [1440775296.0, 67640000.0, 174.18447174400004], [1440777024.0, 67660000.0, 174.419063096], [1440778752.0, 67680000.0, 174.653816832], [1440780480.0, 67700000.0, 174.88873299999995], [1440782208.0, 67720000.0, 175.12381164800001], [1440783936.0, 67740000.0, 175.35905282400003], [1440785664.0, 67760000.0, 175.59445657599997], [1440787392.0, 67780000.0, 175.83002295199998], [1440789120.0, 67800000.0, 176.06575200000006], [1440790848.0, 67820000.0, 176.30164376800002], [1440792576.0, 67840000.0, 176.53769830399995], [1440794304.0, 67860000.0, 176.77391565599996], [1440796032.0, 67880000.0, 177.01029587200003], [1440797760.0, 67900000.0, 177.24683900000002], [1440799488.0, 67920000.0, 177.48354508799994], [1440801216.0, 67940000.0, 177.72041418399994], [1440802944.0, 67960000.0, 177.95744633600003], [1440804672.0, 67980000.0, 178.194641592], [1440806400.0, 68000000.0, 178.43199999999996], [1440808128.0, 68020000.0, 178.66952160799994], [1440809856.0, 68040000.0, 178.90720646400004], [1440811584.0, 68060000.0, 179.14505461599998], [1440813312.0, 68080000.0, 179.38306611199997], [1440815040.0, 68100000.0, 179.62124099999994], [1440816768.0, 68120000.0, 179.85957932800005], [1440818496.0, 68140000.0, 180.09808114400002], [1440820224.0, 68160000.0, 180.336746496], [1440821952.0, 68180000.0, 180.57557543199997], [1440823680.0, 68200000.0, 180.81456800000004], [1440825408.0, 68220000.0, 181.05372424800004], [1440827136.0, 68240000.0, 181.293044224], [1440828864.0, 68260000.0, 181.53252797599998], [1440830592.0, 68280000.0, 181.77217555200008], [1440832320.0, 68300000.0, 182.011987], [1440834048.0, 68320000.0, 182.25196236799997], [1440835776.0, 68340000.0, 182.49210170399994], [1440837504.0, 68360000.0, 182.73240505600003], [1440839232.0, 68380000.0, 182.972872472], [1440840960.0, 68400000.0, 183.21350399999994], [1440842688.0, 68420000.0, 183.45429968799996], [1440844416.0, 68440000.0, 183.69525958400004], [1440846144.0, 68460000.0, 183.93638373599998], [1440847872.0, 68480000.0, 184.17767219199996], [1440849600.0, 68500000.0, 184.41912499999995], [1440851328.0, 68520000.0, 184.66074220800004], [1440853056.0, 68540000.0, 184.90252386400002], [1440854784.0, 68560000.0, 185.144470016], [1440856512.0, 68580000.0, 185.38658071199993], [1440858240.0, 68600000.0, 185.628856], [1440859968.0, 68620000.0, 185.871295928], [1440861696.0, 68640000.0, 186.11390054399996], [1440863424.0, 68660000.0, 186.35666989599997], [1440865152.0, 68680000.0, 186.59960403200006], [1440866880.0, 68700000.0, 186.842703], [1440868608.0, 68720000.0, 187.085966848], [1440870336.0, 68740000.0, 187.32939562399994], [1440872064.0, 68760000.0, 187.57298937600004], [1440873792.0, 68780000.0, 187.816748152], [1440875520.0, 68800000.0, 188.06067199999998], [1440877248.0, 68820000.0, 188.30476096799998], [1440878976.0, 68840000.0, 188.54901510400003], [1440880704.0, 68860000.0, 188.79343445600003], [1440882432.0, 68880000.0, 189.038019072], [1440884160.0, 68900000.0, 189.282769], [1440885888.0, 68920000.0, 189.52768428800002], [1440887616.0, 68940000.0, 189.77276498400005], [1440889344.0, 68960000.0, 190.01801113599996], [1440891072.0, 68980000.0, 190.26342279199997], [1440892800.0, 69000000.0, 190.50900000000007], [1440894528.0, 69020000.0, 190.75474280800003], [1440896256.0, 69040000.0, 191.000651264], [1440897984.0, 69060000.0, 191.24672541599995], [1440899712.0, 69080000.0, 191.49296531200005], [1440901440.0, 69100000.0, 191.739371], [1440903168.0, 69120000.0, 191.98594252799995], [1440904896.0, 69140000.0, 192.23267994399995], [1440906624.0, 69160000.0, 192.47958329600004], [1440908352.0, 69180000.0, 192.72665263200003], [1440910080.0, 69200000.0, 192.97388800000002], [1440911808.0, 69220000.0, 193.22128944799994], [1440913536.0, 69240000.0, 193.46885702400004], [1440915264.0, 69260000.0, 193.716590776], [1440916992.0, 69280000.0, 193.96449075199996], [1440918720.0, 69300000.0, 194.21255699999998], [1440920448.0, 69320000.0, 194.46078956800008], [1440922176.0, 69340000.0, 194.709188504], [1440923904.0, 69360000.0, 194.95775385599998], [1440925632.0, 69380000.0, 195.20648567199999], [1440927360.0, 69400000.0, 195.45538400000004], [1440929088.0, 69420000.0, 195.70444888800003], [1440930816.0, 69440000.0, 195.953680384], [1440932544.0, 69460000.0, 196.203078536], [1440934272.0, 69480000.0, 196.45264339200006], [1440936000.0, 69500000.0, 196.70237500000002], [1440937728.0, 69520000.0, 196.95227340799997], [1440939456.0, 69540000.0, 197.20233866399997], [1440941184.0, 69560000.0, 197.45257081600005], [1440942912.0, 69580000.0, 197.70296991200004], [1440944640.0, 69600000.0, 197.95353600000004], [1440946368.0, 69620000.0, 198.20426912799996], [1440948096.0, 69640000.0, 198.45516934400004], [1440949824.0, 69660000.0, 198.70623669600002], [1440951552.0, 69680000.0, 198.957471232], [1440953280.0, 69700000.0, 199.20887299999995], [1440955008.0, 69720000.0, 199.46044204800006], [1440956736.0, 69740000.0, 199.712178424], [1440958464.0, 69760000.0, 199.96408217599995], [1440960192.0, 69780000.0, 200.21615335199994], [1440961920.0, 69800000.0, 200.46839200000005], [1440963648.0, 69820000.0, 200.72079816800002], [1440965376.0, 69840000.0, 200.97337190399998], [1440967104.0, 69860000.0, 201.226113256], [1440968832.0, 69880000.0, 201.47902227200004], [1440970560.0, 69900000.0, 201.732099], [1440972288.0, 69920000.0, 201.98534348799998], [1440974016.0, 69940000.0, 202.23875578399998], [1440975744.0, 69960000.0, 202.49233593600002], [1440977472.0, 69980000.0, 202.74608399200005], [1440979200.0, 70000000.0, 203.0], [1440980928.0, 70020000.0, 203.25408400799998], [1440982656.0, 70040000.0, 203.50833606399993], [1440984384.0, 70060000.0, 203.762756216], [1440986112.0, 70080000.0, 204.017344512], [1440987840.0, 70100000.0, 204.27210099999996], [1440989568.0, 70120000.0, 204.52702572799993], [1440991296.0, 70140000.0, 204.78211874400003], [1440993024.0, 70160000.0, 205.037380096], [1440994752.0, 70180000.0, 205.29280983199996], [1440996480.0, 70200000.0, 205.54840799999994], [1440998208.0, 70220000.0, 205.80417464800001], [1440999936.0, 70240000.0, 206.06010982400002], [1441001664.0, 70260000.0, 206.316213576], [1441003392.0, 70280000.0, 206.5724859519999], [1441005120.0, 70300000.0, 206.82892700000005], [1441006848.0, 70320000.0, 207.085536768], [1441008576.0, 70340000.0, 207.342315304], [1441010304.0, 70360000.0, 207.59926265599992], [1441012032.0, 70380000.0, 207.85637887200005], [1441013760.0, 70400000.0, 208.11366399999997], [1441015488.0, 70420000.0, 208.37111808799997], [1441017216.0, 70440000.0, 208.62874118399992], [1441018944.0, 70460000.0, 208.886533336], [1441020672.0, 70480000.0, 209.14449459199997], [1441022400.0, 70500000.0, 209.402625], [1441024128.0, 70520000.0, 209.66092460799993], [1441025856.0, 70540000.0, 209.91939346400002], [1441027584.0, 70560000.0, 210.178031616], [1441029312.0, 70580000.0, 210.43683911199994], [1441031040.0, 70600000.0, 210.69581599999998], [1441032768.0, 70620000.0, 210.95496232800002], [1441034496.0, 70640000.0, 211.21427814399996], [1441036224.0, 70660000.0, 211.473763496], [1441037952.0, 70680000.0, 211.73341843199998], [1441039680.0, 70700000.0, 211.99324300000004], [1441041408.0, 70720000.0, 212.253237248], [1441043136.0, 70740000.0, 212.51340122399998], [1441044864.0, 70760000.0, 212.77373497599996], [1441046592.0, 70780000.0, 213.0342385520001], [1441048320.0, 70800000.0, 213.29491200000004], [1441050048.0, 70820000.0, 213.55575536799995], [1441051776.0, 70840000.0, 213.8167687039999], [1441053504.0, 70860000.0, 214.07795205600004], [1441055232.0, 70880000.0, 214.33930547200004], [1441056960.0, 70900000.0, 214.60082899999998], [1441058688.0, 70920000.0, 214.86252268799993], [1441060416.0, 70940000.0, 215.12438658400004], [1441062144.0, 70960000.0, 215.386420736], [1441063872.0, 70980000.0, 215.64862519199997], [1441065600.0, 71000000.0, 215.91099999999994], [1441067328.0, 71020000.0, 216.173545208], [1441069056.0, 71040000.0, 216.436260864], [1441070784.0, 71060000.0, 216.69914701599998], [1441072512.0, 71080000.0, 216.96220371199993], [1441074240.0, 71100000.0, 217.22543100000004], [1441075968.0, 71120000.0, 217.48882892800003], [1441077696.0, 71140000.0, 217.752397544], [1441079424.0, 71160000.0, 218.01613689599992], [1441081152.0, 71180000.0, 218.28004703200003], [1441082880.0, 71200000.0, 218.54412800000003], [1441084608.0, 71220000.0, 218.80837984800002], [1441086336.0, 71240000.0, 219.07280262399993], [1441088064.0, 71260000.0, 219.33739637600004], [1441089792.0, 71280000.0, 219.602161152], [1441091520.0, 71300000.0, 219.86709699999997], [1441093248.0, 71320000.0, 220.132203968], [1441094976.0, 71340000.0, 220.397482104], [1441096704.0, 71360000.0, 220.66293145600005], [1441098432.0, 71380000.0, 220.928552072], [1441100160.0, 71400000.0, 221.19434399999997], [1441101888.0, 71420000.0, 221.46030728800005], [1441103616.0, 71440000.0, 221.72644198400002], [1441105344.0, 71460000.0, 221.99274813599996], [1441107072.0, 71480000.0, 222.259225792], [1441108800.0, 71500000.0, 222.52587500000004], [1441110528.0, 71520000.0, 222.79269580800005], [1441112256.0, 71540000.0, 223.059688264], [1441113984.0, 71560000.0, 223.32685241599995], [1441115712.0, 71580000.0, 223.59418831200006], [1441117440.0, 71600000.0, 223.861696], [1441119168.0, 71620000.0, 224.12937552799997], [1441120896.0, 71640000.0, 224.39722694399993], [1441122624.0, 71660000.0, 224.66525029600007], [1441124352.0, 71680000.0, 224.93344563200003], [1441126080.0, 71700000.0, 225.201813], [1441127808.0, 71720000.0, 225.47035244799997], [1441129536.0, 71740000.0, 225.73906402400007], [1441131264.0, 71760000.0, 226.007947776], [1441132992.0, 71780000.0, 226.27700375199998], [1441134720.0, 71800000.0, 226.546232], [1441136448.0, 71820000.0, 226.81563256800004], [1441138176.0, 71840000.0, 227.085205504], [1441139904.0, 71860000.0, 227.354950856], [1441141632.0, 71880000.0, 227.62486867199993], [1441143360.0, 71900000.0, 227.89495900000009], [1441145088.0, 71920000.0, 228.16522188800005], [1441146816.0, 71940000.0, 228.43565738400002], [1441148544.0, 71960000.0, 228.70626553599996], [1441150272.0, 71980000.0, 228.97704639200006], [1441152000.0, 72000000.0, 229.24800000000005], [1441153728.0, 72020000.0, 229.519126408], [1441155456.0, 72040000.0, 229.790425664], [1441157184.0, 72060000.0, 230.06189781600006], [1441158912.0, 72080000.0, 230.333542912], [1441160640.0, 72100000.0, 230.60536100000002], [1441162368.0, 72120000.0, 230.87735212799998], [1441164096.0, 72140000.0, 231.14951634400003], [1441165824.0, 72160000.0, 231.42185369600003], [1441167552.0, 72180000.0, 231.694364232], [1441169280.0, 72200000.0, 231.96704799999995], [1441171008.0, 72220000.0, 232.23990504800008], [1441172736.0, 72240000.0, 232.51293542400003], [1441174464.0, 72260000.0, 232.78613917599998], [1441176192.0, 72280000.0, 233.05951635199995], [1441177920.0, 72300000.0, 233.33306700000003], [1441179648.0, 72320000.0, 233.606791168], [1441181376.0, 72340000.0, 233.880688904], [1441183104.0, 72360000.0, 234.154760256], [1441184832.0, 72380000.0, 234.42900527200007], [1441186560.0, 72400000.0, 234.70342399999998], [1441188288.0, 72420000.0, 234.978016488], [1441190016.0, 72440000.0, 235.25278278399998], [1441191744.0, 72460000.0, 235.5277229360001], [1441193472.0, 72480000.0, 235.802836992], [1441195200.0, 72500000.0, 236.078125], [1441196928.0, 72520000.0, 236.35358700799995], [1441198656.0, 72540000.0, 236.62922306399997], [1441200384.0, 72560000.0, 236.90503321600005], [1441202112.0, 72580000.0, 237.181017512], [1441203840.0, 72600000.0, 237.457176], [1441205568.0, 72620000.0, 237.73350872799992], [1441207296.0, 72640000.0, 238.01001574400007], [1441209024.0, 72660000.0, 238.286697096], [1441210752.0, 72680000.0, 238.56355283199994], [1441212480.0, 72700000.0, 238.84058299999992], [1441214208.0, 72720000.0, 239.11778764800005], [1441215936.0, 72740000.0, 239.39516682400003], [1441217664.0, 72760000.0, 239.67272057599996], [1441219392.0, 72780000.0, 239.95044895199993], [1441221120.0, 72800000.0, 240.22835200000006], [1441222848.0, 72820000.0, 240.50642976800003], [1441224576.0, 72840000.0, 240.78468230399994], [1441226304.0, 72860000.0, 241.06310965599997], [1441228032.0, 72880000.0, 241.34171187200002], [1441229760.0, 72900000.0, 241.62048900000002], [1441231488.0, 72920000.0, 241.89944108799997], [1441233216.0, 72940000.0, 242.17856818399991], [1441234944.0, 72960000.0, 242.45787033600004], [1441236672.0, 72980000.0, 242.73734759200002], [1441238400.0, 73000000.0, 243.017], [1441240128.0, 73020000.0, 243.29682760799992], [1441241856.0, 73040000.0, 243.57683046400004], [1441243584.0, 73060000.0, 243.85700861600003], [1441245312.0, 73080000.0, 244.13736211199998], [1441247040.0, 73100000.0, 244.41789099999994], [1441248768.0, 73120000.0, 244.698595328], [1441250496.0, 73140000.0, 244.97947514400002], [1441252224.0, 73160000.0, 245.26053049599994], [1441253952.0, 73180000.0, 245.54176143199996], [1441255680.0, 73200000.0, 245.82316800000004], [1441257408.0, 73220000.0, 246.10475024800002], [1441259136.0, 73240000.0, 246.38650822399998], [1441260864.0, 73260000.0, 246.66844197599994], [1441262592.0, 73280000.0, 246.95055155200004], [1441264320.0, 73300000.0, 247.23283700000005], [1441266048.0, 73320000.0, 247.515298368], [1441267776.0, 73340000.0, 247.79793570399994], [1441269504.0, 73360000.0, 248.0807490560001], [1441271232.0, 73380000.0, 248.36373847200002], [1441272960.0, 73400000.0, 248.64690399999995], [1441274688.0, 73420000.0, 248.93024568799993], [1441276416.0, 73440000.0, 249.21376358400005], [1441278144.0, 73460000.0, 249.497457736], [1441279872.0, 73480000.0, 249.78132819199996], [1441281600.0, 73500000.0, 250.06537499999996], [1441283328.0, 73520000.0, 250.34959820800003], [1441285056.0, 73540000.0, 250.633997864], [1441286784.0, 73560000.0, 250.91857401599998], [1441288512.0, 73580000.0, 251.20332671199995], [1441290240.0, 73600000.0, 251.488256], [1441291968.0, 73620000.0, 251.77336192799999], [1441293696.0, 73640000.0, 252.05864454399997], [1441295424.0, 73660000.0, 252.34410389599992], [1441297152.0, 73680000.0, 252.62974003200003], [1441298880.0, 73700000.0, 252.91555300000002], [1441300608.0, 73720000.0, 253.20154284799997], [1441302336.0, 73740000.0, 253.48770962399996], [1441304064.0, 73760000.0, 253.774053376], [1441305792.0, 73780000.0, 254.06057415200002], [1441307520.0, 73800000.0, 254.347272], [1441309248.0, 73820000.0, 254.63414696799992], [1441310976.0, 73840000.0, 254.92119910400004], [1441312704.0, 73860000.0, 255.208428456], [1441314432.0, 73880000.0, 255.49583507199998], [1441316160.0, 73900000.0, 255.783419], [1441317888.0, 73920000.0, 256.07118028800005], [1441319616.0, 73940000.0, 256.359118984], [1441321344.0, 73960000.0, 256.64723513599995], [1441323072.0, 73980000.0, 256.93552879199996], [1441324800.0, 74000000.0, 257.22400000000005], [1441326528.0, 74020000.0, 257.512648808], [1441328256.0, 74040000.0, 257.801475264], [1441329984.0, 74060000.0, 258.090479416], [1441331712.0, 74080000.0, 258.37966131200005], [1441333440.0, 74100000.0, 258.66902100000004], [1441335168.0, 74120000.0, 258.958558528], [1441336896.0, 74140000.0, 259.24827394399995], [1441338624.0, 74160000.0, 259.5381672960001], [1441340352.0, 74180000.0, 259.828238632], [1441342080.0, 74200000.0, 260.11848799999996], [1441343808.0, 74220000.0, 260.4089154479999], [1441345536.0, 74240000.0, 260.69952102400003], [1441347264.0, 74260000.0, 260.990304776], [1441348992.0, 74280000.0, 261.281266752], [1441350720.0, 74300000.0, 261.572407], [1441352448.0, 74320000.0, 261.86372556800006], [1441354176.0, 74340000.0, 262.155222504], [1441355904.0, 74360000.0, 262.44689785599996], [1441357632.0, 74380000.0, 262.7387516719999], [1441359360.0, 74400000.0, 263.03078400000004], [1441361088.0, 74420000.0, 263.32299488800004], [1441362816.0, 74440000.0, 263.61538438400004], [1441364544.0, 74460000.0, 263.9079525359999], [1441366272.0, 74480000.0, 264.20069939200005], [1441368000.0, 74500000.0, 264.49362500000007], [1441369728.0, 74520000.0, 264.7867294079999], [1441371456.0, 74540000.0, 265.080012664], [1441373184.0, 74560000.0, 265.37347481600005], [1441374912.0, 74580000.0, 265.6671159120001], [1441376640.0, 74600000.0, 265.960936], [1441378368.0, 74620000.0, 266.25493512799994], [1441380096.0, 74640000.0, 266.54911334400003], [1441381824.0, 74660000.0, 266.84347069600005], [1441383552.0, 74680000.0, 267.13800723199995], [1441385280.0, 74700000.0, 267.432723], [1441387008.0, 74720000.0, 267.72761804800007], [1441388736.0, 74740000.0, 268.022692424], [1441390464.0, 74760000.0, 268.31794617599996], [1441392192.0, 74780000.0, 268.6133793519999], [1441393920.0, 74800000.0, 268.90899200000007], [1441395648.0, 74820000.0, 269.20478416800006], [1441397376.0, 74840000.0, 269.50075590399996], [1441399104.0, 74860000.0, 269.79690725599994], [1441400832.0, 74880000.0, 270.093238272], [1441402560.0, 74900000.0, 270.38974900000005], [1441404288.0, 74920000.0, 270.686439488], [1441406016.0, 74940000.0, 270.98330978399997], [1441407744.0, 74960000.0, 271.2803599360001], [1441409472.0, 74980000.0, 271.57758999200007], [1441411200.0, 75000000.0, 271.875], [1441412928.0, 75020000.0, 272.17259000799993], [1441414656.0, 75040000.0, 272.4703600639999], [1441416384.0, 75060000.0, 272.76831021600003], [1441418112.0, 75080000.0, 273.066440512], [1441419840.0, 75100000.0, 273.36475099999996], [1441421568.0, 75120000.0, 273.6632417279999], [1441423296.0, 75140000.0, 273.9619127440001], [1441425024.0, 75160000.0, 274.260764096], [1441426752.0, 75180000.0, 274.55979583199996], [1441428480.0, 75200000.0, 274.85900799999996], [1441430208.0, 75220000.0, 275.15840064800005], [1441431936.0, 75240000.0, 275.4579738240001], [1441433664.0, 75260000.0, 275.757727576], [1441435392.0, 75280000.0, 276.0576619519999], [1441437120.0, 75300000.0, 276.35777700000006], [1441438848.0, 75320000.0, 276.658072768], [1441440576.0, 75340000.0, 276.958549304], [1441442304.0, 75360000.0, 277.25920665599995], [1441444032.0, 75380000.0, 277.56004487200005], [1441445760.0, 75400000.0, 277.861064], [1441447488.0, 75420000.0, 278.1622640879999], [1441449216.0, 75440000.0, 278.463645184], [1441450944.0, 75460000.0, 278.76520733600006], [1441452672.0, 75480000.0, 279.066950592], [1441454400.0, 75500000.0, 279.36887499999995], [1441456128.0, 75520000.0, 279.6709806079999], [1441457856.0, 75540000.0, 279.97326746400006], [1441459584.0, 75560000.0, 280.275735616], [1441461312.0, 75580000.0, 280.578385112], [1441463040.0, 75600000.0, 280.881216], [1441464768.0, 75620000.0, 281.1842283280001], [1441466496.0, 75640000.0, 281.487422144], [1441468224.0, 75660000.0, 281.790797496], [1441469952.0, 75680000.0, 282.09435443199993], [1441471680.0, 75700000.0, 282.398093], [1441473408.0, 75720000.0, 282.702013248], [1441475136.0, 75740000.0, 283.00611522400004], [1441476864.0, 75760000.0, 283.31039897599993], [1441478592.0, 75780000.0, 283.61486455200003], [1441480320.0, 75800000.0, 283.91951200000005], [1441482048.0, 75820000.0, 284.22434136799995], [1441483776.0, 75840000.0, 284.52935270399996], [1441485504.0, 75860000.0, 284.834546056], [1441487232.0, 75880000.0, 285.139921472], [1441488960.0, 75900000.0, 285.445479], [1441490688.0, 75920000.0, 285.7512186879999], [1441492416.0, 75940000.0, 286.0571405840001], [1441494144.0, 75960000.0, 286.363244736], [1441495872.0, 75980000.0, 286.6695311919999], [1441497600.0, 76000000.0, 286.97599999999994], [1441499328.0, 76020000.0, 287.282651208], [1441501056.0, 76040000.0, 287.58948486400004], [1441502784.0, 76060000.0, 287.896501016], [1441504512.0, 76080000.0, 288.2036997119999], [1441506240.0, 76100000.0, 288.511081], [1441507968.0, 76120000.0, 288.81864492799997], [1441509696.0, 76140000.0, 289.12639154399994], [1441511424.0, 76160000.0, 289.4343208959999], [1441513152.0, 76180000.0, 289.74243303200006], [1441514880.0, 76200000.0, 290.05072800000005], [1441516608.0, 76220000.0, 290.359205848], [1441518336.0, 76240000.0, 290.667866624], [1441520064.0, 76260000.0, 290.976710376], [1441521792.0, 76280000.0, 291.285737152], [1441523520.0, 76300000.0, 291.59494699999993], [1441525248.0, 76320000.0, 291.90433996799993], [1441526976.0, 76340000.0, 292.213916104], [1441528704.0, 76360000.0, 292.5236754560001], [1441530432.0, 76380000.0, 292.83361807200004], [1441532160.0, 76400000.0, 293.14374399999997], [1441533888.0, 76420000.0, 293.45405328800007], [1441535616.0, 76440000.0, 293.76454598400005], [1441537344.0, 76460000.0, 294.075222136], [1441539072.0, 76480000.0, 294.38608179199997], [1441540800.0, 76500000.0, 294.6971250000001], [1441542528.0, 76520000.0, 295.00835180800004], [1441544256.0, 76540000.0, 295.31976226399996], [1441545984.0, 76560000.0, 295.63135641599996], [1441547712.0, 76580000.0, 295.9431343120001], [1441549440.0, 76600000.0, 296.25509600000004], [1441551168.0, 76620000.0, 296.56724152799995], [1441552896.0, 76640000.0, 296.87957094399997], [1441554624.0, 76660000.0, 297.1920842960001], [1441556352.0, 76680000.0, 297.504781632], [1441558080.0, 76700000.0, 297.8176629999999], [1441559808.0, 76720000.0, 298.13072844799996], [1441561536.0, 76740000.0, 298.44397802400005], [1441563264.0, 76760000.0, 298.757411776], [1441564992.0, 76780000.0, 299.071029752], [1441566720.0, 76800000.0, 299.38483199999996], [1441568448.0, 76820000.0, 299.6988185680001], [1441570176.0, 76840000.0, 300.012989504], [1441571904.0, 76860000.0, 300.32734485599997], [1441573632.0, 76880000.0, 300.64188467199995], [1441575360.0, 76900000.0, 300.95660900000007], [1441577088.0, 76920000.0, 301.27151788800006], [1441578816.0, 76940000.0, 301.586611384], [1441580544.0, 76960000.0, 301.901889536], [1441582272.0, 76980000.0, 302.21735239200007], [1441584000.0, 77000000.0, 302.5330000000001], [1441585728.0, 77020000.0, 302.848832408], [1441587456.0, 77040000.0, 303.1648496639999], [1441589184.0, 77060000.0, 303.48105181600005], [1441590912.0, 77080000.0, 303.7974389120001], [1441592640.0, 77100000.0, 304.114011], [1441594368.0, 77120000.0, 304.43076812799995], [1441596096.0, 77140000.0, 304.7477103440001], [1441597824.0, 77160000.0, 305.06483769600004], [1441599552.0, 77180000.0, 305.38215023199996], [1441601280.0, 77200000.0, 305.6996479999999], [1441603008.0, 77220000.0, 306.0173310480001], [1441604736.0, 77240000.0, 306.335199424], [1441606464.0, 77260000.0, 306.653253176], [1441608192.0, 77280000.0, 306.971492352], [1441609920.0, 77300000.0, 307.28991700000006], [1441611648.0, 77320000.0, 307.608527168], [1441613376.0, 77340000.0, 307.927322904], [1441615104.0, 77360000.0, 308.2463042559999], [1441616832.0, 77380000.0, 308.5654712720001], [1441618560.0, 77400000.0, 308.88482400000004], [1441620288.0, 77420000.0, 309.204362488], [1441622016.0, 77440000.0, 309.52408678399996], [1441623744.0, 77460000.0, 309.84399693600005], [1441625472.0, 77480000.0, 310.16409299200006], [1441627200.0, 77500000.0, 310.484375], [1441628928.0, 77520000.0, 310.8048430079999], [1441630656.0, 77540000.0, 311.12549706399994], [1441632384.0, 77560000.0, 311.4463372160001], [1441634112.0, 77580000.0, 311.767363512], [1441635840.0, 77600000.0, 312.088576], [1441637568.0, 77620000.0, 312.40997472799995], [1441639296.0, 77640000.0, 312.73155974400004], [1441641024.0, 77660000.0, 313.05333109599997], [1441642752.0, 77680000.0, 313.375288832], [1441644480.0, 77700000.0, 313.69743299999993], [1441646208.0, 77720000.0, 314.01976364800004], [1441647936.0, 77740000.0, 314.342280824], [1441649664.0, 77760000.0, 314.664984576], [1441651392.0, 77780000.0, 314.9878749519999], [1441653120.0, 77800000.0, 315.31095200000004], [1441654848.0, 77820000.0, 315.63421576800005], [1441656576.0, 77840000.0, 315.95766630399993], [1441658304.0, 77860000.0, 316.281303656], [1441660032.0, 77880000.0, 316.6051278720001], [1441661760.0, 77900000.0, 316.929139], [1441663488.0, 77920000.0, 317.25333708799997], [1441665216.0, 77940000.0, 317.5777221839999], [1441666944.0, 77960000.0, 317.902294336], [1441668672.0, 77980000.0, 318.22705359200006], [1441670400.0, 78000000.0, 318.55199999999996], [1441672128.0, 78020000.0, 318.8771336079999], [1441673856.0, 78040000.0, 319.20245446399997], [1441675584.0, 78060000.0, 319.527962616], [1441677312.0, 78080000.0, 319.85365811199995], [1441679040.0, 78100000.0, 320.1795409999999], [1441680768.0, 78120000.0, 320.50561132800004], [1441682496.0, 78140000.0, 320.83186914400005], [1441684224.0, 78160000.0, 321.158314496], [1441685952.0, 78180000.0, 321.4849474319999], [1441687680.0, 78200000.0, 321.81176800000003], [1441689408.0, 78220000.0, 322.138776248], [1441691136.0, 78240000.0, 322.465972224], [1441692864.0, 78260000.0, 322.79335597599993], [1441694592.0, 78280000.0, 323.12092755200007], [1441696320.0, 78300000.0, 323.44868700000006], [1441698048.0, 78320000.0, 323.776634368], [1441699776.0, 78340000.0, 324.1047697039999], [1441701504.0, 78360000.0, 324.4330930560001], [1441703232.0, 78380000.0, 324.761604472], [1441704960.0, 78400000.0, 325.09030399999995], [1441706688.0, 78420000.0, 325.41919168799996], [1441708416.0, 78440000.0, 325.7482675840001], [1441710144.0, 78460000.0, 326.077531736], [1441711872.0, 78480000.0, 326.406984192], [1441713600.0, 78500000.0, 326.73662499999995], [1441715328.0, 78520000.0, 327.06645420800004], [1441717056.0, 78540000.0, 327.396471864], [1441718784.0, 78560000.0, 327.726678016], [1441720512.0, 78580000.0, 328.0570727119999], [1441722240.0, 78600000.0, 328.387656], [1441723968.0, 78620000.0, 328.71842792800004], [1441725696.0, 78640000.0, 329.04938854399995], [1441727424.0, 78660000.0, 329.3805378959999], [1441729152.0, 78680000.0, 329.711876032], [1441730880.0, 78700000.0, 330.043403], [1441732608.0, 78720000.0, 330.375118848], [1441734336.0, 78740000.0, 330.70702362399993], [1441736064.0, 78760000.0, 331.03911737600004], [1441737792.0, 78780000.0, 331.37140015200004], [1441739520.0, 78800000.0, 331.70387200000005], [1441741248.0, 78820000.0, 332.03653296799996], [1441742976.0, 78840000.0, 332.36938310400006], [1441744704.0, 78860000.0, 332.702422456], [1441746432.0, 78880000.0, 333.03565107199995], [1441748160.0, 78900000.0, 333.36906899999997], [1441749888.0, 78920000.0, 333.70267628800013], [1441751616.0, 78940000.0, 334.036472984], [1441753344.0, 78960000.0, 334.370459136], [1441755072.0, 78980000.0, 334.704634792], [1441756800.0, 79000000.0, 335.03900000000004], [1441758528.0, 79020000.0, 335.3735548080001], [1441760256.0, 79040000.0, 335.708299264], [1441761984.0, 79060000.0, 336.04323341599996], [1441763712.0, 79080000.0, 336.37835731200005], [1441765440.0, 79100000.0, 336.71367100000003], [1441767168.0, 79120000.0, 337.049174528], [1441768896.0, 79140000.0, 337.3848679439999], [1441770624.0, 79160000.0, 337.72075129600006], [1441772352.0, 79180000.0, 338.05682463200003], [1441774080.0, 79200000.0, 338.3930879999999], [1441775808.0, 79220000.0, 338.72954144799996], [1441777536.0, 79240000.0, 339.06618502400005], [1441779264.0, 79260000.0, 339.40301877600007], [1441780992.0, 79280000.0, 339.74004275199997], [1441782720.0, 79300000.0, 340.0772569999999], [1441784448.0, 79320000.0, 340.41466156800004], [1441786176.0, 79340000.0, 340.75225650400006], [1441787904.0, 79360000.0, 341.09004185599997], [1441789632.0, 79380000.0, 341.42801767199995], [1441791360.0, 79400000.0, 341.76618400000007], [1441793088.0, 79420000.0, 342.104540888], [1441794816.0, 79440000.0, 342.44308838399996], [1441796544.0, 79460000.0, 342.7818265359999], [1441798272.0, 79480000.0, 343.1207553920001], [1441800000.0, 79500000.0, 343.459875], [1441801728.0, 79520000.0, 343.79918540799997], [1441803456.0, 79540000.0, 344.138686664], [1441805184.0, 79560000.0, 344.4783788160001], [1441806912.0, 79580000.0, 344.818261912], [1441808640.0, 79600000.0, 345.158336], [1441810368.0, 79620000.0, 345.49860112799996], [1441812096.0, 79640000.0, 345.83905734400014], [1441813824.0, 79660000.0, 346.17970469600004], [1441815552.0, 79680000.0, 346.52054323199997], [1441817280.0, 79700000.0, 346.8615729999999], [1441819008.0, 79720000.0, 347.2027940480001], [1441820736.0, 79740000.0, 347.544206424], [1441822464.0, 79760000.0, 347.88581017599995], [1441824192.0, 79780000.0, 348.22760535199996], [1441825920.0, 79800000.0, 348.56959200000006], [1441827648.0, 79820000.0, 348.911770168], [1441829376.0, 79840000.0, 349.254139904], [1441831104.0, 79860000.0, 349.59670125599996], [1441832832.0, 79880000.0, 349.93945427200003], [1441834560.0, 79900000.0, 350.28239900000005], [1441836288.0, 79920000.0, 350.62553548799997], [1441838016.0, 79940000.0, 350.96886378399995], [1441839744.0, 79960000.0, 351.31238393600006], [1441841472.0, 79980000.0, 351.656095992], [1441843200.0, 80000000.0, 352.0], [1441844928.0, 80020000.0, 352.3440960080001], [1441846656.0, 80040000.0, 352.688384064], [1441848384.0, 80060000.0, 353.032864216], [1441850112.0, 80080000.0, 353.3775365119998], [1441851840.0, 80100000.0, 353.72240100000005], [1441853568.0, 80120000.0, 354.06745772800014], [1441855296.0, 80140000.0, 354.41270674399993], [1441857024.0, 80160000.0, 354.75814809599996], [1441858752.0, 80180000.0, 355.1037818320002], [1441860480.0, 80200000.0, 355.4496079999999], [1441862208.0, 80220000.0, 355.795626648], [1441863936.0, 80240000.0, 356.1418378239998], [1441865664.0, 80260000.0, 356.48824157599995], [1441867392.0, 80280000.0, 356.8348379520001], [1441869120.0, 80300000.0, 357.1816269999998], [1441870848.0, 80320000.0, 357.528608768], [1441872576.0, 80340000.0, 357.8757833040001], [1441874304.0, 80360000.0, 358.2231506559999], [1441876032.0, 80380000.0, 358.57071087200006], [1441877760.0, 80400000.0, 358.91846399999986], [1441879488.0, 80420000.0, 359.26641008799993], [1441881216.0, 80440000.0, 359.6145491840001], [1441882944.0, 80460000.0, 359.9628813359999], [1441884672.0, 80480000.0, 360.3114065919999], [1441886400.0, 80500000.0, 360.6601250000001], [1441888128.0, 80520000.0, 361.00903660799986], [1441889856.0, 80540000.0, 361.358141464], [1441891584.0, 80560000.0, 361.70743961599976], [1441893312.0, 80580000.0, 362.05693111200003], [1441895040.0, 80600000.0, 362.4066160000001], [1441896768.0, 80620000.0, 362.7564943279999], [1441898496.0, 80640000.0, 363.1065661440001], [1441900224.0, 80660000.0, 363.45683149600006], [1441901952.0, 80680000.0, 363.80729043199995], [1441903680.0, 80700000.0, 364.15794300000016], [1441905408.0, 80720000.0, 364.5087892479998], [1441907136.0, 80740000.0, 364.859829224], [1441908864.0, 80760000.0, 365.2110629760001], [1441910592.0, 80780000.0, 365.56249055199993], [1441912320.0, 80800000.0, 365.91411199999993], [1441914048.0, 80820000.0, 366.26592736800023], [1441915776.0, 80840000.0, 366.617936704], [1441917504.0, 80860000.0, 366.970140056], [1441919232.0, 80880000.0, 367.3225374719999], [1441920960.0, 80900000.0, 367.6751289999999], [1441922688.0, 80920000.0, 368.0279146880001], [1441924416.0, 80940000.0, 368.38089458399986], [1441926144.0, 80960000.0, 368.734068736], [1441927872.0, 80980000.0, 369.08743719200004], [1441929600.0, 81000000.0, 369.4409999999999], [1441931328.0, 81020000.0, 369.794757208], [1441933056.0, 81040000.0, 370.14870886399996], [1441934784.0, 81060000.0, 370.5028550159999], [1441936512.0, 81080000.0, 370.8571957120001], [1441938240.0, 81100000.0, 371.21173099999993], [1441939968.0, 81120000.0, 371.5664609280001], [1441941696.0, 81140000.0, 371.9213855440001], [1441943424.0, 81160000.0, 372.27650489599995], [1441945152.0, 81180000.0, 372.63181903200007], [1441946880.0, 81200000.0, 372.9873279999998], [1441948608.0, 81220000.0, 373.34303184799995], [1441950336.0, 81240000.0, 373.6989306240001], [1441952064.0, 81260000.0, 374.055024376], [1441953792.0, 81280000.0, 374.411313152], [1441955520.0, 81300000.0, 374.7677970000002], [1441957248.0, 81320000.0, 375.12447596799996], [1441958976.0, 81340000.0, 375.481350104], [1441960704.0, 81360000.0, 375.8384194559998], [1441962432.0, 81380000.0, 376.19568407199995], [1441964160.0, 81400000.0, 376.55314400000003], [1441965888.0, 81420000.0, 376.91079928799985], [1441967616.0, 81440000.0, 377.26864998400004], [1441969344.0, 81460000.0, 377.62669613600013], [1441971072.0, 81480000.0, 377.98493779200004], [1441972800.0, 81500000.0, 378.34337500000004], [1441974528.0, 81520000.0, 378.70200780799996], [1441976256.0, 81540000.0, 379.060836264], [1441977984.0, 81560000.0, 379.4198604160001], [1441979712.0, 81580000.0, 379.7790803119999], [1441981440.0, 81600000.0, 380.138496], [1441983168.0, 81620000.0, 380.4981075280002], [1441984896.0, 81640000.0, 380.85791494399996], [1441986624.0, 81660000.0, 381.21791829600016], [1441988352.0, 81680000.0, 381.5781176319998], [1441990080.0, 81700000.0, 381.93851299999994], [1441991808.0, 81720000.0, 382.29910444800015], [1441993536.0, 81740000.0, 382.6598920239999], [1441995264.0, 81760000.0, 383.020875776], [1441996992.0, 81780000.0, 383.3820557520001], [1441998720.0, 81800000.0, 383.74343199999987], [1442000448.0, 81820000.0, 384.10500456800014], [1442002176.0, 81840000.0, 384.4667735039999], [1442003904.0, 81860000.0, 384.82873885599986], [1442005632.0, 81880000.0, 385.1909006720001], [1442007360.0, 81900000.0, 385.553259], [1442009088.0, 81920000.0, 385.915813888], [1442010816.0, 81940000.0, 386.2785653840002], [1442012544.0, 81960000.0, 386.64151353599993], [1442014272.0, 81980000.0, 387.004658392], [1442016000.0, 82000000.0, 387.36799999999994], [1442017728.0, 82020000.0, 387.731538408], [1442019456.0, 82040000.0, 388.09527366400016], [1442021184.0, 82060000.0, 388.4592058159999], [1442022912.0, 82080000.0, 388.82333491200006], [1442024640.0, 82100000.0, 389.18766100000016], [1442026368.0, 82120000.0, 389.5521841279999], [1442028096.0, 82140000.0, 389.91690434400005], [1442029824.0, 82160000.0, 390.2818216959999], [1442031552.0, 82180000.0, 390.6469362319999], [1442033280.0, 82200000.0, 391.0122480000001], [1442035008.0, 82220000.0, 391.37775704799986], [1442036736.0, 82240000.0, 391.74346342399997], [1442038464.0, 82260000.0, 392.1093671760001], [1442040192.0, 82280000.0, 392.47546835199995], [1442041920.0, 82300000.0, 392.841767], [1442043648.0, 82320000.0, 393.2082631679999], [1442045376.0, 82340000.0, 393.574956904], [1442047104.0, 82360000.0, 393.94184825600007], [1442048832.0, 82380000.0, 394.308937272], [1442050560.0, 82400000.0, 394.676224], [1442052288.0, 82420000.0, 395.0437084880002], [1442054016.0, 82440000.0, 395.4113907839999], [1442055744.0, 82460000.0, 395.77927093600016], [1442057472.0, 82480000.0, 396.1473489919999], [1442059200.0, 82500000.0, 396.515625], [1442060928.0, 82520000.0, 396.8840990080001], [1442062656.0, 82540000.0, 397.2527710639999], [1442064384.0, 82560000.0, 397.62164121599994], [1442066112.0, 82580000.0, 397.99070951199985], [1442067840.0, 82600000.0, 398.3599759999999], [1442069568.0, 82620000.0, 398.7294407280001], [1442071296.0, 82640000.0, 399.0991037439999], [1442073024.0, 82660000.0, 399.4689650960001], [1442074752.0, 82680000.0, 399.8390248320002], [1442076480.0, 82700000.0, 400.209283], [1442078208.0, 82720000.0, 400.57973964800004], [1442079936.0, 82740000.0, 400.9503948239998], [1442081664.0, 82760000.0, 401.321248576], [1442083392.0, 82780000.0, 401.69230095200015], [1442085120.0, 82800000.0, 402.06355199999985], [1442086848.0, 82820000.0, 402.4350017680001], [1442088576.0, 82840000.0, 402.80665030400013], [1442090304.0, 82860000.0, 403.1784976559999], [1442092032.0, 82880000.0, 403.55054387200005], [1442093760.0, 82900000.0, 403.92278899999997], [1442095488.0, 82920000.0, 404.2952330879999], [1442097216.0, 82940000.0, 404.6678761840002], [1442098944.0, 82960000.0, 405.04071833599994], [1442100672.0, 82980000.0, 405.4137595919999], [1442102400.0, 83000000.0, 405.78700000000015], [1442104128.0, 83020000.0, 406.16043960800005], [1442105856.0, 83040000.0, 406.534078464], [1442107584.0, 83060000.0, 406.90791661599985], [1442109312.0, 83080000.0, 407.281954112], [1442111040.0, 83100000.0, 407.65619100000015], [1442112768.0, 83120000.0, 408.0306273279998], [1442114496.0, 83140000.0, 408.40526314400006], [1442116224.0, 83160000.0, 408.78009849600016], [1442117952.0, 83180000.0, 409.15513343199984], [1442119680.0, 83200000.0, 409.53036800000007], [1442121408.0, 83220000.0, 409.9058022479998], [1442123136.0, 83240000.0, 410.2814362239999], [1442124864.0, 83260000.0, 410.65726997600007], [1442126592.0, 83280000.0, 411.03330355199995], [1442128320.0, 83300000.0, 411.409537], [1442130048.0, 83320000.0, 411.7859703680002], [1442131776.0, 83340000.0, 412.1626037039999], [1442133504.0, 83360000.0, 412.5394370560001], [1442135232.0, 83380000.0, 412.9164704719998], [1442136960.0, 83400000.0, 413.293704], [1442138688.0, 83420000.0, 413.67113768800004], [1442140416.0, 83440000.0, 414.04877158399984], [1442142144.0, 83460000.0, 414.426605736], [1442143872.0, 83480000.0, 414.8046401920002], [1442145600.0, 83500000.0, 415.18287499999997], [1442147328.0, 83520000.0, 415.56131020800007], [1442149056.0, 83540000.0, 415.93994586399987], [1442150784.0, 83560000.0, 416.3187820159999], [1442152512.0, 83580000.0, 416.697818712], [1442154240.0, 83600000.0, 417.0770559999999], [1442155968.0, 83620000.0, 417.456493928], [1442157696.0, 83640000.0, 417.8361325440001], [1442159424.0, 83660000.0, 418.21597189599987], [1442161152.0, 83680000.0, 418.5960120320001], [1442162880.0, 83700000.0, 418.9762529999998], [1442164608.0, 83720000.0, 419.356694848], [1442166336.0, 83740000.0, 419.73733762400013], [1442168064.0, 83760000.0, 420.1181813759998], [1442169792.0, 83780000.0, 420.49922615199995], [1442171520.0, 83800000.0, 420.88047200000017], [1442173248.0, 83820000.0, 421.2619189679999], [1442174976.0, 83840000.0, 421.64356710400006], [1442176704.0, 83860000.0, 422.02541645599985], [1442178432.0, 83880000.0, 422.4074670719999], [1442180160.0, 83900000.0, 422.78971900000016], [1442181888.0, 83920000.0, 423.172172288], [1442183616.0, 83940000.0, 423.5548269840001], [1442185344.0, 83960000.0, 423.9376831360002], [1442187072.0, 83980000.0, 424.320740792], [1442188800.0, 84000000.0, 424.70400000000006], [1442190528.0, 84020000.0, 425.08746080799983], [1442192256.0, 84040000.0, 425.471123264], [1442193984.0, 84060000.0, 425.8549874160001], [1442195712.0, 84080000.0, 426.239053312], [1442197440.0, 84100000.0, 426.623321], [1442199168.0, 84120000.0, 427.0077905280001], [1442200896.0, 84140000.0, 427.39246194399993], [1442202624.0, 84160000.0, 427.7773352960001], [1442204352.0, 84180000.0, 428.1624106319998], [1442206080.0, 84200000.0, 428.547688], [1442207808.0, 84220000.0, 428.9331674480001], [1442209536.0, 84240000.0, 429.31884902399986], [1442211264.0, 84260000.0, 429.7047327760001], [1442212992.0, 84280000.0, 430.0908187520002], [1442214720.0, 84300000.0, 430.47710699999993], [1442216448.0, 84320000.0, 430.86359756800005], [1442218176.0, 84340000.0, 431.25029050399985], [1442219904.0, 84360000.0, 431.637185856], [1442221632.0, 84380000.0, 432.02428367200014], [1442223360.0, 84400000.0, 432.41158399999995], [1442225088.0, 84420000.0, 432.79908688800003], [1442226816.0, 84440000.0, 433.1867923840002], [1442228544.0, 84460000.0, 433.5747005359999], [1442230272.0, 84480000.0, 433.96281139200005], [1442232000.0, 84500000.0, 434.3511249999999], [1442233728.0, 84520000.0, 434.739641408], [1442235456.0, 84540000.0, 435.12836066400007], [1442237184.0, 84560000.0, 435.5172828159999], [1442238912.0, 84580000.0, 435.9064079120001], [1442240640.0, 84600000.0, 436.29573600000015], [1442242368.0, 84620000.0, 436.68526712799985], [1442244096.0, 84640000.0, 437.07500134400004], [1442245824.0, 84660000.0, 437.46493869599993], [1442247552.0, 84680000.0, 437.855079232], [1442249280.0, 84700000.0, 438.2454230000002], [1442251008.0, 84720000.0, 438.63597004799993], [1442252736.0, 84740000.0, 439.026720424], [1442254464.0, 84760000.0, 439.4176741760001], [1442256192.0, 84780000.0, 439.8088313519999], [1442257920.0, 84800000.0, 440.20019200000013], [1442259648.0, 84820000.0, 440.59175616799996], [1442261376.0, 84840000.0, 440.98352390400004], [1442263104.0, 84860000.0, 441.37549525600014], [1442264832.0, 84880000.0, 441.7676702719999], [1442266560.0, 84900000.0, 442.160049], [1442268288.0, 84920000.0, 442.5526314880001], [1442270016.0, 84940000.0, 442.9454177839999], [1442271744.0, 84960000.0, 443.338407936], [1442273472.0, 84980000.0, 443.73160199199987], [1442275200.0, 85000000.0, 444.125], [1442276928.0, 85020000.0, 444.5186020080001], [1442278656.0, 85040000.0, 444.91240806399986], [1442280384.0, 85060000.0, 445.306418216], [1442282112.0, 85080000.0, 445.70063251199986], [1442283840.0, 85100000.0, 446.09505099999996], [1442285568.0, 85120000.0, 446.4896737280002], [1442287296.0, 85140000.0, 446.88450074399987], [1442289024.0, 85160000.0, 447.27953209599997], [1442290752.0, 85180000.0, 447.67476783200016], [1442292480.0, 85200000.0, 448.07020799999987], [1442294208.0, 85220000.0, 448.46585264800007], [1442295936.0, 85240000.0, 448.86170182399974], [1442297664.0, 85260000.0, 449.2577555759999], [1442299392.0, 85280000.0, 449.65401395200007], [1442301120.0, 85300000.0, 450.0504769999999], [1442302848.0, 85320000.0, 450.44714476800004], [1442304576.0, 85340000.0, 450.84401730400015], [1442306304.0, 85360000.0, 451.24109465599986], [1442308032.0, 85380000.0, 451.6383768720001], [1442309760.0, 85400000.0, 452.03586399999983], [1442311488.0, 85420000.0, 452.43355608799993], [1442313216.0, 85440000.0, 452.8314531840001], [1442314944.0, 85460000.0, 453.22955533599986], [1442316672.0, 85480000.0, 453.62786259199993], [1442318400.0, 85500000.0, 454.02637500000014], [1442320128.0, 85520000.0, 454.425092608], [1442321856.0, 85540000.0, 454.824015464], [1442323584.0, 85560000.0, 455.2231436159998], [1442325312.0, 85580000.0, 455.62247711199996], [1442327040.0, 85600000.0, 456.022016], [1442328768.0, 85620000.0, 456.4217603279999], [1442330496.0, 85640000.0, 456.821710144], [1442332224.0, 85660000.0, 457.2218654960002], [1442333952.0, 85680000.0, 457.62222643199993], [1442335680.0, 85700000.0, 458.0227930000001], [1442337408.0, 85720000.0, 458.4235652479999], [1442339136.0, 85740000.0, 458.82454322399997], [1442340864.0, 85760000.0, 459.22572697600015], [1442342592.0, 85780000.0, 459.6271165519999], [1442344320.0, 85800000.0, 460.0287119999999], [1442346048.0, 85820000.0, 460.4305133680001], [1442347776.0, 85840000.0, 460.8325207039998], [1442349504.0, 85860000.0, 461.234734056], [1442351232.0, 85880000.0, 461.6371534719998], [1442352960.0, 85900000.0, 462.039779], [1442354688.0, 85920000.0, 462.44261068800006], [1442356416.0, 85940000.0, 462.84564858399983], [1442358144.0, 85960000.0, 463.24889273599996], [1442359872.0, 85980000.0, 463.6523431920001], [1442361600.0, 86000000.0, 464.0559999999999], [1442363328.0, 86020000.0, 464.45986320800006], [1442365056.0, 86040000.0, 464.8639328639999], [1442366784.0, 86060000.0, 465.268209016], [1442368512.0, 86080000.0, 465.67269171200013], [1442370240.0, 86100000.0, 466.0773809999999], [1442371968.0, 86120000.0, 466.48227692800003], [1442373696.0, 86140000.0, 466.8873795440002], [1442375424.0, 86160000.0, 467.292688896], [1442377152.0, 86180000.0, 467.69820503200003], [1442378880.0, 86200000.0, 468.1039279999999], [1442380608.0, 86220000.0, 468.50985784799997], [1442382336.0, 86240000.0, 468.91599462400006], [1442384064.0, 86260000.0, 469.32233837599983], [1442385792.0, 86280000.0, 469.728889152], [1442387520.0, 86300000.0, 470.1356470000002], [1442389248.0, 86320000.0, 470.54261196799996], [1442390976.0, 86340000.0, 470.949784104], [1442392704.0, 86360000.0, 471.3571634559998], [1442394432.0, 86380000.0, 471.76475007199997], [1442396160.0, 86400000.0, 472.1725440000001], [1442397888.0, 86420000.0, 472.580545288], [1442399616.0, 86440000.0, 472.988753984], [1442401344.0, 86460000.0, 473.39717013600017], [1442403072.0, 86480000.0, 473.805793792], [1442404800.0, 86500000.0, 474.21462500000007], [1442406528.0, 86520000.0, 474.62366380799995], [1442408256.0, 86540000.0, 475.032910264], [1442409984.0, 86560000.0, 475.44236441600015], [1442411712.0, 86580000.0, 475.8520263119999], [1442413440.0, 86600000.0, 476.26189600000004], [1442415168.0, 86620000.0, 476.6719735280002], [1442416896.0, 86640000.0, 477.08225894399993], [1442418624.0, 86660000.0, 477.4927522960001], [1442420352.0, 86680000.0, 477.9034536319998], [1442422080.0, 86700000.0, 478.31436299999996], [1442423808.0, 86720000.0, 478.72548044800016], [1442425536.0, 86740000.0, 479.13680602399984], [1442427264.0, 86760000.0, 479.54833977600003], [1442428992.0, 86780000.0, 479.9600817520001], [1442430720.0, 86800000.0, 480.372032], [1442432448.0, 86820000.0, 480.7841905680001], [1442434176.0, 86840000.0, 481.1965575039999], [1442435904.0, 86860000.0, 481.609132856], [1442437632.0, 86880000.0, 482.0219166720001], [1442439360.0, 86900000.0, 482.43490899999995], [1442441088.0, 86920000.0, 482.84810988800007], [1442442816.0, 86940000.0, 483.26151938400017], [1442444544.0, 86960000.0, 483.67513753599997], [1442446272.0, 86980000.0, 484.0889643920001], [1442448000.0, 87000000.0, 484.5029999999998], [1442449728.0, 87020000.0, 484.9172444080001], [1442451456.0, 87040000.0, 485.3316976640001], [1442453184.0, 87060000.0, 485.7463598159999], [1442454912.0, 87080000.0, 486.1612309120002], [1442456640.0, 87100000.0, 486.57631100000026], [1442458368.0, 87120000.0, 486.99160012799996], [1442460096.0, 87140000.0, 487.407098344], [1442461824.0, 87160000.0, 487.82280569599976], [1442463552.0, 87180000.0, 488.238722232], [1442465280.0, 87200000.0, 488.65484800000013], [1442467008.0, 87220000.0, 489.0711830479998], [1442468736.0, 87240000.0, 489.487727424], [1442470464.0, 87260000.0, 489.90448117600033], [1442472192.0, 87280000.0, 490.3214443519999], [1442473920.0, 87300000.0, 490.7386170000001], [1442475648.0, 87320000.0, 491.1559991679999], [1442477376.0, 87340000.0, 491.573590904], [1442479104.0, 87360000.0, 491.99139225600015], [1442480832.0, 87380000.0, 492.40940327199996], [1442482560.0, 87400000.0, 492.82762400000007], [1442484288.0, 87420000.0, 493.24605448800014], [1442486016.0, 87440000.0, 493.66469478399995], [1442487744.0, 87460000.0, 494.0835449360001], [1442489472.0, 87480000.0, 494.50260499199993], [1442491200.0, 87500000.0, 494.921875], [1442492928.0, 87520000.0, 495.3413550080001], [1442494656.0, 87540000.0, 495.7610450639999], [1442496384.0, 87560000.0, 496.18094521600005], [1442498112.0, 87580000.0, 496.6010555119998], [1442499840.0, 87600000.0, 497.021376], [1442501568.0, 87620000.0, 497.44190672800016], [1442503296.0, 87640000.0, 497.8626477439999], [1442505024.0, 87660000.0, 498.28359909599993], [1442506752.0, 87680000.0, 498.70476083200015], [1442508480.0, 87700000.0, 499.126133], [1442510208.0, 87720000.0, 499.54771564800006], [1442511936.0, 87740000.0, 499.9695088239997], [1442513664.0, 87760000.0, 500.39151257599997], [1442515392.0, 87780000.0, 500.8137269520001], [1442517120.0, 87800000.0, 501.23615199999983], [1442518848.0, 87820000.0, 501.658787768], [1442520576.0, 87840000.0, 502.08163430400015], [1442522304.0, 87860000.0, 502.50469165599986], [1442524032.0, 87880000.0, 502.927959872], [1442525760.0, 87900000.0, 503.3514389999998], [1442527488.0, 87920000.0, 503.77512908799986], [1442529216.0, 87940000.0, 504.1990301840001], [1442530944.0, 87960000.0, 504.6231423359999], [1442532672.0, 87980000.0, 505.047465592], [1442534400.0, 88000000.0, 505.4720000000002], [1442536128.0, 88020000.0, 505.89674560799995], [1442537856.0, 88040000.0, 506.32170246400005], [1442539584.0, 88060000.0, 506.7468706159998], [1442541312.0, 88080000.0, 507.1722501119999], [1442543040.0, 88100000.0, 507.597841], [1442544768.0, 88120000.0, 508.02364332799993], [1442546496.0, 88140000.0, 508.44965714399996], [1442548224.0, 88160000.0, 508.87588249600014], [1442549952.0, 88180000.0, 509.3023194319999], [1442551680.0, 88200000.0, 509.728968], [1442553408.0, 88220000.0, 510.15582824799986], [1442555136.0, 88240000.0, 510.582900224], [1442556864.0, 88260000.0, 511.0101839760001], [1442558592.0, 88280000.0, 511.4376795519999], [1442560320.0, 88300000.0, 511.86538700000006], [1442562048.0, 88320000.0, 512.2933063680001], [1442563776.0, 88340000.0, 512.721437704], [1442565504.0, 88360000.0, 513.149781056], [1442567232.0, 88380000.0, 513.5783364719998], [1442568960.0, 88400000.0, 514.007104], [1442570688.0, 88420000.0, 514.436083688], [1442572416.0, 88440000.0, 514.8652755839998], [1442574144.0, 88460000.0, 515.294679736], [1442575872.0, 88480000.0, 515.7242961920001], [1442577600.0, 88500000.0, 516.1541249999999], [1442579328.0, 88520000.0, 516.5841662079999], [1442581056.0, 88540000.0, 517.0144198639998], [1442582784.0, 88560000.0, 517.4448860159999], [1442584512.0, 88580000.0, 517.8755647120001], [1442586240.0, 88600000.0, 518.3064559999998], [1442587968.0, 88620000.0, 518.737559928], [1442589696.0, 88640000.0, 519.1688765440001], [1442591424.0, 88660000.0, 519.600405896], [1442593152.0, 88680000.0, 520.032148032], [1442594880.0, 88700000.0, 520.4641029999999], [1442596608.0, 88720000.0, 520.8962708480001], [1442598336.0, 88740000.0, 521.328651624], [1442600064.0, 88760000.0, 521.7612453759999], [1442601792.0, 88780000.0, 522.194052152], [1442603520.0, 88800000.0, 522.6270720000001], [1442605248.0, 88820000.0, 523.060304968], [1442606976.0, 88840000.0, 523.493751104], [1442608704.0, 88860000.0, 523.9274104559997], [1442610432.0, 88880000.0, 524.361283072], [1442612160.0, 88900000.0, 524.7953690000002], [1442613888.0, 88920000.0, 525.2296682879999], [1442615616.0, 88940000.0, 525.6641809839999], [1442617344.0, 88960000.0, 526.0989071360002], [1442619072.0, 88980000.0, 526.5338467919998], [1442620800.0, 89000000.0, 526.969], [1442622528.0, 89020000.0, 527.4043668079998], [1442624256.0, 89040000.0, 527.8399472640001], [1442625984.0, 89060000.0, 528.2757414160001], [1442627712.0, 89080000.0, 528.7117493119999], [1442629440.0, 89100000.0, 529.1479710000001], [1442631168.0, 89120000.0, 529.5844065280002], [1442632896.0, 89140000.0, 530.021055944], [1442634624.0, 89160000.0, 530.457919296], [1442636352.0, 89180000.0, 530.8949966319999], [1442638080.0, 89200000.0, 531.3322880000001], [1442639808.0, 89220000.0, 531.7697934480002], [1442641536.0, 89240000.0, 532.2075130239998], [1442643264.0, 89260000.0, 532.6454467760001], [1442644992.0, 89280000.0, 533.0835947520002], [1442646720.0, 89300000.0, 533.5219569999999], [1442648448.0, 89320000.0, 533.9605335680001], [1442650176.0, 89340000.0, 534.3993245039999], [1442651904.0, 89360000.0, 534.838329856], [1442653632.0, 89380000.0, 535.2775496720002], [1442655360.0, 89400000.0, 535.7169839999999], [1442657088.0, 89420000.0, 536.1566328880001], [1442658816.0, 89440000.0, 536.5964963840003], [1442660544.0, 89460000.0, 537.036574536], [1442662272.0, 89480000.0, 537.476867392], [1442664000.0, 89500000.0, 537.9173749999999], [1442665728.0, 89520000.0, 538.358097408], [1442667456.0, 89540000.0, 538.7990346640001], [1442669184.0, 89560000.0, 539.2401868159998], [1442670912.0, 89580000.0, 539.6815539120001], [1442672640.0, 89600000.0, 540.1231360000002], [1442674368.0, 89620000.0, 540.5649331279999], [1442676096.0, 89640000.0, 541.0069453440002], [1442677824.0, 89660000.0, 541.4491726959998], [1442679552.0, 89680000.0, 541.8916152319999], [1442681280.0, 89700000.0, 542.3342730000002], [1442683008.0, 89720000.0, 542.7771460479998], [1442684736.0, 89740000.0, 543.2202344240001], [1442686464.0, 89760000.0, 543.6635381760003], [1442688192.0, 89780000.0, 544.1070573520001], [1442689920.0, 89800000.0, 544.5507920000001], [1442691648.0, 89820000.0, 544.9947421679999], [1442693376.0, 89840000.0, 545.438907904], [1442695104.0, 89860000.0, 545.8832892560001], [1442696832.0, 89880000.0, 546.327886272], [1442698560.0, 89900000.0, 546.7726990000001], [1442700288.0, 89920000.0, 547.2177274880002], [1442702016.0, 89940000.0, 547.6629717839999], [1442703744.0, 89960000.0, 548.1084319360002], [1442705472.0, 89980000.0, 548.5541079919999], [1442707200.0, 90000000.0, 549.0], [1442708928.0, 90020000.0, 549.446108008], [1442710656.0, 90040000.0, 549.8924320639999], [1442712384.0, 90060000.0, 550.338972216], [1442714112.0, 90080000.0, 550.7857285119999], [1442715840.0, 90100000.0, 551.2327009999999], [1442717568.0, 90120000.0, 551.6798897280001], [1442719296.0, 90140000.0, 552.1272947439999], [1442721024.0, 90160000.0, 552.5749160960002], [1442722752.0, 90180000.0, 553.0227538320003], [1442724480.0, 90200000.0, 553.4708079999999], [1442726208.0, 90220000.0, 553.9190786480001], [1442727936.0, 90240000.0, 554.3675658239997], [1442729664.0, 90260000.0, 554.816269576], [1442731392.0, 90280000.0, 555.2651899520001], [1442733120.0, 90300000.0, 555.7143269999999], [1442734848.0, 90320000.0, 556.163680768], [1442736576.0, 90340000.0, 556.6132513040002], [1442738304.0, 90360000.0, 557.0630386559999], [1442740032.0, 90380000.0, 557.513042872], [1442741760.0, 90400000.0, 557.9632639999998], [1442743488.0, 90420000.0, 558.4137020879999], [1442745216.0, 90440000.0, 558.864357184], [1442746944.0, 90460000.0, 559.3152293359999], [1442748672.0, 90480000.0, 559.766318592], [1442750400.0, 90500000.0, 560.2176250000002], [1442752128.0, 90520000.0, 560.6691486079999], [1442753856.0, 90540000.0, 561.120889464], [1442755584.0, 90560000.0, 561.5728476159998], [1442757312.0, 90580000.0, 562.025023112], [1442759040.0, 90600000.0, 562.4774160000001], [1442760768.0, 90620000.0, 562.9300263279998], [1442762496.0, 90640000.0, 563.3828541440001], [1442764224.0, 90660000.0, 563.8358994960001], [1442765952.0, 90680000.0, 564.2891624319999], [1442767680.0, 90700000.0, 564.7426430000002], [1442769408.0, 90720000.0, 565.196341248], [1442771136.0, 90740000.0, 565.6502572239999], [1442772864.0, 90760000.0, 566.1043909760001], [1442774592.0, 90780000.0, 566.5587425519998], [1442776320.0, 90800000.0, 567.0133119999999], [1442778048.0, 90820000.0, 567.4680993680003], [1442779776.0, 90840000.0, 567.9231047039998], [1442781504.0, 90860000.0, 568.378328056], [1442783232.0, 90880000.0, 568.8337694719999], [1442784960.0, 90900000.0, 569.2894289999999], [1442786688.0, 90920000.0, 569.7453066880001], [1442788416.0, 90940000.0, 570.2014025839999], [1442790144.0, 90960000.0, 570.6577167360001], [1442791872.0, 90980000.0, 571.1142491920002], [1442793600.0, 91000000.0, 571.5709999999999], [1442795328.0, 91020000.0, 572.0279692080001], [1442797056.0, 91040000.0, 572.4851568639999], [1442798784.0, 91060000.0, 572.942563016], [1442800512.0, 91080000.0, 573.4001877120002], [1442802240.0, 91100000.0, 573.858031], [1442803968.0, 91120000.0, 574.316092928], [1442805696.0, 91140000.0, 574.7743735440001], [1442807424.0, 91160000.0, 575.2328728959999], [1442809152.0, 91180000.0, 575.6915910320001], [1442810880.0, 91200000.0, 576.1505279999999], [1442812608.0, 91220000.0, 576.609683848], [1442814336.0, 91240000.0, 577.0690586240001], [1442816064.0, 91260000.0, 577.5286523759999], [1442817792.0, 91280000.0, 577.9884651520001], [1442819520.0, 91300000.0, 578.4484970000001], [1442821248.0, 91320000.0, 578.908747968], [1442822976.0, 91340000.0, 579.3692181040001], [1442824704.0, 91360000.0, 579.829907456], [1442826432.0, 91380000.0, 580.290816072], [1442828160.0, 91400000.0, 580.7519440000001], [1442829888.0, 91420000.0, 581.2132912879999], [1442831616.0, 91440000.0, 581.674857984], [1442833344.0, 91460000.0, 582.1366441360001], [1442835072.0, 91480000.0, 582.5986497919998], [1442836800.0, 91500000.0, 583.0608750000001], [1442838528.0, 91520000.0, 583.5233198079998], [1442840256.0, 91540000.0, 583.9859842640001], [1442841984.0, 91560000.0, 584.4488684160002], [1442843712.0, 91580000.0, 584.9119723119999], [1442845440.0, 91600000.0, 585.3752960000002], [1442847168.0, 91620000.0, 585.8388395280002], [1442848896.0, 91640000.0, 586.3026029439999], [1442850624.0, 91660000.0, 586.766586296], [1442852352.0, 91680000.0, 587.2307896319998], [1442854080.0, 91700000.0, 587.695213], [1442855808.0, 91720000.0, 588.1598564480003], [1442857536.0, 91740000.0, 588.6247200239999], [1442859264.0, 91760000.0, 589.089803776], [1442860992.0, 91780000.0, 589.5551077520004], [1442862720.0, 91800000.0, 590.0206319999999], [1442864448.0, 91820000.0, 590.4863765680002], [1442866176.0, 91840000.0, 590.9523415039998], [1442867904.0, 91860000.0, 591.4185268559999], [1442869632.0, 91880000.0, 591.8849326720001], [1442871360.0, 91900000.0, 592.351559], [1442873088.0, 91920000.0, 592.8184058879999], [1442874816.0, 91940000.0, 593.2854733840002], [1442876544.0, 91960000.0, 593.7527615359999], [1442878272.0, 91980000.0, 594.2202703920001], [1442880000.0, 92000000.0, 594.6879999999998], [1442881728.0, 92020000.0, 595.1559504080001], [1442883456.0, 92040000.0, 595.6241216640002], [1442885184.0, 92060000.0, 596.092513816], [1442886912.0, 92080000.0, 596.5611269120001], [1442888640.0, 92100000.0, 597.0299610000002], [1442890368.0, 92120000.0, 597.4990161279999], [1442892096.0, 92140000.0, 597.9682923440001], [1442893824.0, 92160000.0, 598.4377896959998], [1442895552.0, 92180000.0, 598.907508232], [1442897280.0, 92200000.0, 599.3774480000002], [1442899008.0, 92220000.0, 599.8476090479999], [1442900736.0, 92240000.0, 600.3179914240001], [1442902464.0, 92260000.0, 600.7885951760003], [1442904192.0, 92280000.0, 601.2594203519998], [1442905920.0, 92300000.0, 601.7304670000001], [1442907648.0, 92320000.0, 602.2017351679999], [1442909376.0, 92340000.0, 602.6732249040001], [1442911104.0, 92360000.0, 603.1449362560002], [1442912832.0, 92380000.0, 603.6168692719999], [1442914560.0, 92400000.0, 604.0890240000001], [1442916288.0, 92420000.0, 604.5614004880001], [1442918016.0, 92440000.0, 605.0339987839999], [1442919744.0, 92460000.0, 605.5068189360002], [1442921472.0, 92480000.0, 605.9798609919999], [1442923200.0, 92500000.0, 606.453125], [1442924928.0, 92520000.0, 606.9266110080002], [1442926656.0, 92540000.0, 607.4003190639999], [1442928384.0, 92560000.0, 607.874249216], [1442930112.0, 92580000.0, 608.3484015119998], [1442931840.0, 92600000.0, 608.822776], [1442933568.0, 92620000.0, 609.2973727280001], [1442935296.0, 92640000.0, 609.7721917439999], [1442937024.0, 92660000.0, 610.247233096], [1442938752.0, 92680000.0, 610.7224968320003], [1442940480.0, 92700000.0, 611.1979829999999], [1442942208.0, 92720000.0, 611.6736916480002], [1442943936.0, 92740000.0, 612.1496228239997], [1442945664.0, 92760000.0, 612.6257765759999], [1442947392.0, 92780000.0, 613.1021529520001], [1442949120.0, 92800000.0, 613.5787519999999], [1442950848.0, 92820000.0, 614.055573768], [1442952576.0, 92840000.0, 614.5326183040002], [1442954304.0, 92860000.0, 615.0098856559998], [1442956032.0, 92880000.0, 615.4873758720001], [1442957760.0, 92900000.0, 615.9650889999999], [1442959488.0, 92920000.0, 616.4430250879999], [1442961216.0, 92940000.0, 616.9211841840001], [1442962944.0, 92960000.0, 617.3995663359999], [1442964672.0, 92980000.0, 617.878171592], [1442966400.0, 93000000.0, 618.3570000000002], [1442968128.0, 93020000.0, 618.8360516079999], [1442969856.0, 93040000.0, 619.315326464], [1442971584.0, 93060000.0, 619.7948246159998], [1442973312.0, 93080000.0, 620.274546112], [1442975040.0, 93100000.0, 620.754491], [1442976768.0, 93120000.0, 621.2346593279999], [1442978496.0, 93140000.0, 621.7150511440001], [1442980224.0, 93160000.0, 622.1956664960002], [1442981952.0, 93180000.0, 622.6765054319999], [1442983680.0, 93200000.0, 623.1575680000001], [1442985408.0, 93220000.0, 623.6388542479997], [1442987136.0, 93240000.0, 624.120364224], [1442988864.0, 93260000.0, 624.6020979760001], [1442990592.0, 93280000.0, 625.0840555519999], [1442992320.0, 93300000.0, 625.566237], [1442994048.0, 93320000.0, 626.0486423680002], [1442995776.0, 93340000.0, 626.5312717039999], [1442997504.0, 93360000.0, 627.0141250560001], [1442999232.0, 93380000.0, 627.4972024719998], [1443000960.0, 93400000.0, 627.9805039999999], [1443002688.0, 93420000.0, 628.4640296880002], [1443004416.0, 93440000.0, 628.9477795839999], [1443006144.0, 93460000.0, 629.431753736], [1443007872.0, 93480000.0, 629.9159521920002], [1443009600.0, 93500000.0, 630.4003749999999], [1443011328.0, 93520000.0, 630.885022208], [1443013056.0, 93540000.0, 631.3698938639998], [1443014784.0, 93560000.0, 631.854990016], [1443016512.0, 93580000.0, 632.3403107120002], [1443018240.0, 93600000.0, 632.8258559999999], [1443019968.0, 93620000.0, 633.3116259280001], [1443021696.0, 93640000.0, 633.7976205440002], [1443023424.0, 93660000.0, 634.2838398959998], [1443025152.0, 93680000.0, 634.7702840320001], [1443026880.0, 93700000.0, 635.2569529999997], [1443028608.0, 93720000.0, 635.743846848], [1443030336.0, 93740000.0, 636.2309656240002], [1443032064.0, 93760000.0, 636.7183093759999], [1443033792.0, 93780000.0, 637.205878152], [1443035520.0, 93800000.0, 637.6936720000001], [1443037248.0, 93820000.0, 638.181690968], [1443038976.0, 93840000.0, 638.6699351040002], [1443040704.0, 93860000.0, 639.158404456], [1443042432.0, 93880000.0, 639.647099072], [1443044160.0, 93900000.0, 640.1360190000003], [1443045888.0, 93920000.0, 640.625164288], [1443047616.0, 93940000.0, 641.114534984], [1443049344.0, 93960000.0, 641.6041311360002], [1443051072.0, 93980000.0, 642.093952792], [1443052800.0, 94000000.0, 642.5840000000002], [1443054528.0, 94020000.0, 643.0742728079998], [1443056256.0, 94040000.0, 643.564771264], [1443057984.0, 94060000.0, 644.0554954160002], [1443059712.0, 94080000.0, 644.5464453119998], [1443061440.0, 94100000.0, 645.0376210000002], [1443063168.0, 94120000.0, 645.5290225280003], [1443064896.0, 94140000.0, 646.020649944], [1443066624.0, 94160000.0, 646.512503296], [1443068352.0, 94180000.0, 647.0045826319998], [1443070080.0, 94200000.0, 647.496888], [1443071808.0, 94220000.0, 647.9894194480003], [1443073536.0, 94240000.0, 648.4821770239998], [1443075264.0, 94260000.0, 648.9751607760002], [1443076992.0, 94280000.0, 649.4683707520003], [1443078720.0, 94300000.0, 649.9618069999999], [1443080448.0, 94320000.0, 650.4554695680001], [1443082176.0, 94340000.0, 650.9493585039999], [1443083904.0, 94360000.0, 651.443473856], [1443085632.0, 94380000.0, 651.9378156720003], [1443087360.0, 94400000.0, 652.432384], [1443089088.0, 94420000.0, 652.927178888], [1443090816.0, 94440000.0, 653.4222003840002], [1443092544.0, 94460000.0, 653.9174485359999], [1443094272.0, 94480000.0, 654.412923392], [1443096000.0, 94500000.0, 654.9086249999998], [1443097728.0, 94520000.0, 655.4045534080001], [1443099456.0, 94540000.0, 655.900708664], [1443101184.0, 94560000.0, 656.3970908159998], [1443102912.0, 94580000.0, 656.8936999120001], [1443104640.0, 94600000.0, 657.3905360000002], [1443106368.0, 94620000.0, 657.8875991279999], [1443108096.0, 94640000.0, 658.3848893440002], [1443109824.0, 94660000.0, 658.8824066959999], [1443111552.0, 94680000.0, 659.380151232], [1443113280.0, 94700000.0, 659.8781230000002], [1443115008.0, 94720000.0, 660.3763220479998], [1443116736.0, 94740000.0, 660.874748424], [1443118464.0, 94760000.0, 661.3734021760002], [1443120192.0, 94780000.0, 661.8722833519998], [1443121920.0, 94800000.0, 662.371392], [1443123648.0, 94820000.0, 662.8707281679999], [1443125376.0, 94840000.0, 663.3702919039999], [1443127104.0, 94860000.0, 663.8700832560002], [1443128832.0, 94880000.0, 664.3701022719999], [1443130560.0, 94900000.0, 664.870349], [1443132288.0, 94920000.0, 665.3708234880003], [1443134016.0, 94940000.0, 665.8715257839999], [1443135744.0, 94960000.0, 666.372455936], [1443137472.0, 94980000.0, 666.873613992], [1443139200.0, 95000000.0, 667.375], [1443140928.0, 95020000.0, 667.8766140080002], [1443142656.0, 95040000.0, 668.3784560639999], [1443144384.0, 95060000.0, 668.880526216], [1443146112.0, 95080000.0, 669.3828245119997], [1443147840.0, 95100000.0, 669.8853509999999], [1443149568.0, 95120000.0, 670.3881057280001], [1443151296.0, 95140000.0, 670.891088744], [1443153024.0, 95160000.0, 671.394300096], [1443154752.0, 95180000.0, 671.8977398320002], [1443156480.0, 95200000.0, 672.401408], [1443158208.0, 95220000.0, 672.9053046480001], [1443159936.0, 95240000.0, 673.4094298239997], [1443161664.0, 95260000.0, 673.913783576], [1443163392.0, 95280000.0, 674.4183659520002], [1443165120.0, 95300000.0, 674.9231769999999], [1443166848.0, 95320000.0, 675.4282167680001], [1443168576.0, 95340000.0, 675.9334853040002], [1443170304.0, 95360000.0, 676.4389826559999], [1443172032.0, 95380000.0, 676.9447088720001], [1443173760.0, 95400000.0, 677.4506639999998], [1443175488.0, 95420000.0, 677.9568480879999], [1443177216.0, 95440000.0, 678.4632611840002], [1443178944.0, 95460000.0, 678.9699033359998], [1443180672.0, 95480000.0, 679.476774592], [1443182400.0, 95500000.0, 679.9838750000002], [1443184128.0, 95520000.0, 680.491204608], [1443185856.0, 95540000.0, 680.998763464], [1443187584.0, 95560000.0, 681.5065516159998], [1443189312.0, 95580000.0, 682.014569112], [1443191040.0, 95600000.0, 682.522816], [1443192768.0, 95620000.0, 683.0312923279998], [1443194496.0, 95640000.0, 683.539998144], [1443196224.0, 95660000.0, 684.0489334960002], [1443197952.0, 95680000.0, 684.558098432], [1443199680.0, 95700000.0, 685.0674930000001], [1443201408.0, 95720000.0, 685.5771172479997], [1443203136.0, 95740000.0, 686.0869712239999], [1443204864.0, 95760000.0, 686.5970549760002], [1443206592.0, 95780000.0, 687.1073685519998], [1443208320.0, 95800000.0, 687.6179119999999], [1443210048.0, 95820000.0, 688.1286853680002], [1443211776.0, 95840000.0, 688.6396887039998], [1443213504.0, 95860000.0, 689.150922056], [1443215232.0, 95880000.0, 689.6623854719998], [1443216960.0, 95900000.0, 690.1740789999999], [1443218688.0, 95920000.0, 690.6860026880001], [1443220416.0, 95940000.0, 691.1981565839999], [1443222144.0, 95960000.0, 691.710540736], [1443223872.0, 95980000.0, 692.2231551920003], [1443225600.0, 96000000.0, 692.736], [1443227328.0, 96020000.0, 693.249075208], [1443229056.0, 96040000.0, 693.7623808639999], [1443230784.0, 96060000.0, 694.2759170159999], [1443232512.0, 96080000.0, 694.7896837120002], [1443234240.0, 96100000.0, 695.3036809999999], [1443235968.0, 96120000.0, 695.8179089280001], [1443237696.0, 96140000.0, 696.3323675440001], [1443239424.0, 96160000.0, 696.8470568959999], [1443241152.0, 96180000.0, 697.3619770320001], [1443242880.0, 96200000.0, 697.8771279999997], [1443244608.0, 96220000.0, 698.3925098479999], [1443246336.0, 96240000.0, 698.9081226240002], [1443248064.0, 96260000.0, 699.4239663759998], [1443249792.0, 96280000.0, 699.940041152], [1443251520.0, 96300000.0, 700.4563470000003], [1443253248.0, 96320000.0, 700.9728839679999], [1443254976.0, 96340000.0, 701.489652104], [1443256704.0, 96360000.0, 702.0066514559999], [1443258432.0, 96380000.0, 702.523882072], [1443260160.0, 96400000.0, 703.0413440000002], [1443261888.0, 96420000.0, 703.5590372879999], [1443263616.0, 96440000.0, 704.076961984], [1443265344.0, 96460000.0, 704.5951181360001], [1443267072.0, 96480000.0, 705.1135057919998], [1443268800.0, 96500000.0, 705.6321250000001], [1443270528.0, 96520000.0, 706.1509758079998], [1443272256.0, 96540000.0, 706.6700582639999], [1443273984.0, 96560000.0, 707.1893724160002], [1443275712.0, 96580000.0, 707.7089183119999], [1443277440.0, 96600000.0, 708.2286960000001], [1443279168.0, 96620000.0, 708.7487055280003], [1443280896.0, 96640000.0, 709.2689469439999], [1443282624.0, 96660000.0, 709.7894202960001], [1443284352.0, 96680000.0, 710.3101256319998], [1443286080.0, 96700000.0, 710.831063], [1443287808.0, 96720000.0, 711.3522324480002], [1443289536.0, 96740000.0, 711.8736340239998], [1443291264.0, 96760000.0, 712.3952677760001], [1443292992.0, 96780000.0, 712.9171337520002], [1443294720.0, 96800000.0, 713.439232], [1443296448.0, 96820000.0, 713.9615625680002], [1443298176.0, 96840000.0, 714.4841255039998], [1443299904.0, 96860000.0, 715.006920856], [1443301632.0, 96880000.0, 715.5299486720002], [1443303360.0, 96900000.0, 716.0532089999999], [1443305088.0, 96920000.0, 716.576701888], [1443306816.0, 96940000.0, 717.1004273840002], [1443308544.0, 96960000.0, 717.624385536], [1443310272.0, 96980000.0, 718.1485763920001], [1443312000.0, 97000000.0, 718.6729999999998], [1443313728.0, 97020000.0, 719.1976564080001], [1443315456.0, 97040000.0, 719.7225456640001], [1443317184.0, 97060000.0, 720.2476678159999], [1443318912.0, 97080000.0, 720.7730229120001], [1443320640.0, 97100000.0, 721.2986110000003], [1443322368.0, 97120000.0, 721.8244321279999], [1443324096.0, 97140000.0, 722.3504863440002], [1443325824.0, 97160000.0, 722.8767736959999], [1443327552.0, 97180000.0, 723.403294232], [1443329280.0, 97200000.0, 723.9300480000002], [1443331008.0, 97220000.0, 724.4570350479999], [1443332736.0, 97240000.0, 724.984255424], [1443334464.0, 97260000.0, 725.5117091760003], [1443336192.0, 97280000.0, 726.039396352], [1443337920.0, 97300000.0, 726.5673170000001], [1443339648.0, 97320000.0, 727.0954711679999], [1443341376.0, 97340000.0, 727.6238589039999], [1443343104.0, 97360000.0, 728.1524802560001], [1443344832.0, 97380000.0, 728.681335272], [1443346560.0, 97400000.0, 729.2104240000001], [1443348288.0, 97420000.0, 729.7397464880003], [1443350016.0, 97440000.0, 730.2693027839999], [1443351744.0, 97460000.0, 730.7990929360001], [1443353472.0, 97480000.0, 731.3291169919999], [1443355200.0, 97500000.0, 731.859375], [1443356928.0, 97520000.0, 732.3898670080002], [1443358656.0, 97540000.0, 732.9205930639998], [1443360384.0, 97560000.0, 733.451553216], [1443362112.0, 97580000.0, 733.9827475119998], [1443363840.0, 97600000.0, 734.5141759999999], [1443365568.0, 97620000.0, 735.0458387280001], [1443367296.0, 97640000.0, 735.5777357439998], [1443369024.0, 97660000.0, 736.109867096], [1443370752.0, 97680000.0, 736.6422328320002], [1443372480.0, 97700000.0, 737.1748329999998], [1443374208.0, 97720000.0, 737.7076676480001], [1443375936.0, 97740000.0, 738.2407368239998], [1443377664.0, 97760000.0, 738.774040576], [1443379392.0, 97780000.0, 739.3075789520001], [1443381120.0, 97800000.0, 739.8413519999997], [1443382848.0, 97820000.0, 740.375359768], [1443384576.0, 97840000.0, 740.9096023040001], [1443386304.0, 97860000.0, 741.4440796559999], [1443388032.0, 97880000.0, 741.9787918720001], [1443389760.0, 97900000.0, 742.5137389999998], [1443391488.0, 97920000.0, 743.0489210879999], [1443393216.0, 97940000.0, 743.5843381840001], [1443394944.0, 97960000.0, 744.1199903359999], [1443396672.0, 97980000.0, 744.655877592], [1443398400.0, 98000000.0, 745.1920000000002], [1443400128.0, 98020000.0, 745.7283576079999], [1443401856.0, 98040000.0, 746.2649504640001], [1443403584.0, 98060000.0, 746.8017786159998], [1443405312.0, 98080000.0, 747.338842112], [1443407040.0, 98100000.0, 747.8761410000001], [1443408768.0, 98120000.0, 748.4136753279998], [1443410496.0, 98140000.0, 748.951445144], [1443412224.0, 98160000.0, 749.4894504960001], [1443413952.0, 98180000.0, 750.0276914319998], [1443415680.0, 98200000.0, 750.5661680000001], [1443417408.0, 98220000.0, 751.1048802479997], [1443419136.0, 98240000.0, 751.643828224], [1443420864.0, 98260000.0, 752.1830119760002], [1443422592.0, 98280000.0, 752.7224315519998], [1443424320.0, 98300000.0, 753.262087], [1443426048.0, 98320000.0, 753.8019783680002], [1443427776.0, 98340000.0, 754.342105704], [1443429504.0, 98360000.0, 754.8824690560001], [1443431232.0, 98380000.0, 755.4230684719997], [1443432960.0, 98400000.0, 755.963904], [1443434688.0, 98420000.0, 756.5049756880002], [1443436416.0, 98440000.0, 757.0462835839999], [1443438144.0, 98460000.0, 757.587827736], [1443439872.0, 98480000.0, 758.1296081920002], [1443441600.0, 98500000.0, 758.671625], [1443443328.0, 98520000.0, 759.2138782080001], [1443445056.0, 98540000.0, 759.7563678639997], [1443446784.0, 98560000.0, 760.299094016], [1443448512.0, 98580000.0, 760.8420567120002], [1443450240.0, 98600000.0, 761.3852559999998], [1443451968.0, 98620000.0, 761.928691928], [1443453696.0, 98640000.0, 762.4723645440001], [1443455424.0, 98660000.0, 763.0162738959998], [1443457152.0, 98680000.0, 763.560420032], [1443458880.0, 98700000.0, 764.1048029999998], [1443460608.0, 98720000.0, 764.6494228480001], [1443462336.0, 98740000.0, 765.1942796240002], [1443464064.0, 98760000.0, 765.7393733759998], [1443465792.0, 98780000.0, 766.2847041519999], [1443467520.0, 98800000.0, 766.8302720000003], [1443469248.0, 98820000.0, 767.3760769679999], [1443470976.0, 98840000.0, 767.9221191040001], [1443472704.0, 98860000.0, 768.4683984559997], [1443474432.0, 98880000.0, 769.014915072], [1443476160.0, 98900000.0, 769.5616690000002], [1443477888.0, 98920000.0, 770.1086602879998], [1443479616.0, 98940000.0, 770.6558889840001], [1443481344.0, 98960000.0, 771.2033551360003], [1443483072.0, 98980000.0, 771.7510587919999], [1443484800.0, 99000000.0, 772.2990000000001], [1443486528.0, 99020000.0, 772.8471788079999], [1443488256.0, 99040000.0, 773.3955952639999], [1443489984.0, 99060000.0, 773.9442494160002], [1443491712.0, 99080000.0, 774.4931413119998], [1443493440.0, 99100000.0, 775.042271], [1443495168.0, 99120000.0, 775.5916385280002], [1443496896.0, 99140000.0, 776.141243944], [1443498624.0, 99160000.0, 776.6910872960002], [1443500352.0, 99180000.0, 777.2411686319998], [1443502080.0, 99200000.0, 777.7914880000001], [1443503808.0, 99220000.0, 778.3420454480001], [1443505536.0, 99240000.0, 778.8928410239998], [1443507264.0, 99260000.0, 779.443874776], [1443508992.0, 99280000.0, 779.9951467520002], [1443510720.0, 99300000.0, 780.546657], [1443512448.0, 99320000.0, 781.0984055680001], [1443514176.0, 99340000.0, 781.6503925039998], [1443515904.0, 99360000.0, 782.202617856], [1443517632.0, 99380000.0, 782.7550816720001], [1443519360.0, 99400000.0, 783.3077839999999], [1443521088.0, 99420000.0, 783.860724888], [1443522816.0, 99440000.0, 784.4139043840003], [1443524544.0, 99460000.0, 784.967322536], [1443526272.0, 99480000.0, 785.5209793920001], [1443528000.0, 99500000.0, 786.0748749999998], [1443529728.0, 99520000.0, 786.629009408], [1443531456.0, 99540000.0, 787.1833826640002], [1443533184.0, 99560000.0, 787.7379948159999], [1443534912.0, 99580000.0, 788.2928459120001], [1443536640.0, 99600000.0, 788.8479360000001], [1443538368.0, 99620000.0, 789.4032651279999], [1443540096.0, 99640000.0, 789.9588333440001], [1443541824.0, 99660000.0, 790.5146406959998], [1443543552.0, 99680000.0, 791.070687232], [1443545280.0, 99700000.0, 791.6269730000001], [1443547008.0, 99720000.0, 792.1834980479998], [1443548736.0, 99740000.0, 792.740262424], [1443550464.0, 99760000.0, 793.2972661760003], [1443552192.0, 99780000.0, 793.8545093519999], [1443553920.0, 99800000.0, 794.411992], [1443555648.0, 99820000.0, 794.9697141679999], [1443557376.0, 99840000.0, 795.527675904], [1443559104.0, 99860000.0, 796.0858772560002], [1443560832.0, 99880000.0, 796.644318272], [1443562560.0, 99900000.0, 797.2029990000001], [1443564288.0, 99920000.0, 797.7619194880002], [1443566016.0, 99940000.0, 798.3210797839998], [1443567744.0, 99960000.0, 798.880479936], [1443569472.0, 99980000.0, 799.4401199919998]] \ No newline at end of file
diff --git a/tensorflow/tensorboard/app/demo/data/linear.json b/tensorflow/tensorboard/app/demo/data/linear.json
new file mode 100644
index 0000000000..3279365a23
--- /dev/null
+++ b/tensorflow/tensorboard/app/demo/data/linear.json
@@ -0,0 +1 @@
+[[1434931200.0, 0.0, 5.0], [1434932928.0, 20000.0, 5.04], [1434934656.0, 40000.0, 5.08], [1434936384.0, 60000.0, 5.12], [1434938112.0, 80000.0, 5.16], [1434939840.0, 100000.0, 5.2], [1434941568.0, 120000.0, 5.24], [1434943296.0, 140000.0, 5.28], [1434945024.0, 160000.0, 5.32], [1434946752.0, 180000.0, 5.36], [1434948480.0, 200000.0, 5.4], [1434950208.0, 220000.0, 5.4399999999999995], [1434951936.0, 240000.0, 5.48], [1434953664.0, 260000.0, 5.52], [1434955392.0, 280000.0, 5.5600000000000005], [1434957120.0, 300000.0, 5.6], [1434958848.0, 320000.0, 5.64], [1434960576.0, 340000.0, 5.68], [1434962304.0, 360000.0, 5.72], [1434964032.0, 380000.0, 5.76], [1434965760.0, 400000.0, 5.8], [1434967488.0, 420000.0, 5.84], [1434969216.0, 440000.0, 5.88], [1434970944.0, 460000.0, 5.92], [1434972672.0, 480000.0, 5.96], [1434974400.0, 500000.0, 6.0], [1434976128.0, 520000.0, 6.04], [1434977856.0, 540000.0, 6.08], [1434979584.0, 560000.0, 6.12], [1434981312.0, 580000.0, 6.16], [1434983040.0, 600000.0, 6.2], [1434984768.0, 620000.0, 6.24], [1434986496.0, 640000.0, 6.28], [1434988224.0, 660000.0, 6.32], [1434989952.0, 680000.0, 6.36], [1434991680.0, 700000.0, 6.4], [1434993408.0, 720000.0, 6.4399999999999995], [1434995136.0, 740000.0, 6.48], [1434996864.0, 760000.0, 6.52], [1434998592.0, 780000.0, 6.5600000000000005], [1435000320.0, 800000.0, 6.6], [1435002048.0, 820000.0, 6.640000000000001], [1435003776.0, 840000.0, 6.68], [1435005504.0, 860000.0, 6.72], [1435007232.0, 880000.0, 6.76], [1435008960.0, 900000.0, 6.8], [1435010688.0, 920000.0, 6.84], [1435012416.0, 940000.0, 6.88], [1435014144.0, 960000.0, 6.92], [1435015872.0, 980000.0, 6.96], [1435017600.0, 1000000.0, 7.0], [1435019328.0, 1020000.0, 7.04], [1435021056.0, 1040000.0, 7.08], [1435022784.0, 1060000.0, 7.12], [1435024512.0, 1080000.0, 7.16], [1435026240.0, 1100000.0, 7.2], [1435027968.0, 1120000.0, 7.24], [1435029696.0, 1140000.0, 7.28], [1435031424.0, 1160000.0, 7.32], [1435033152.0, 1180000.0, 7.359999999999999], [1435034880.0, 1200000.0, 7.4], [1435036608.0, 1220000.0, 7.4399999999999995], [1435038336.0, 1240000.0, 7.48], [1435040064.0, 1260000.0, 7.52], [1435041792.0, 1280000.0, 7.5600000000000005], [1435043520.0, 1300000.0, 7.6], [1435045248.0, 1320000.0, 7.640000000000001], [1435046976.0, 1340000.0, 7.68], [1435048704.0, 1360000.0, 7.720000000000001], [1435050432.0, 1380000.0, 7.76], [1435052160.0, 1400000.0, 7.800000000000001], [1435053888.0, 1420000.0, 7.84], [1435055616.0, 1440000.0, 7.88], [1435057344.0, 1460000.0, 7.92], [1435059072.0, 1480000.0, 7.96], [1435060800.0, 1500000.0, 8.0], [1435062528.0, 1520000.0, 8.04], [1435064256.0, 1540000.0, 8.08], [1435065984.0, 1560000.0, 8.120000000000001], [1435067712.0, 1580000.0, 8.16], [1435069440.0, 1600000.0, 8.2], [1435071168.0, 1620000.0, 8.24], [1435072896.0, 1640000.0, 8.280000000000001], [1435074624.0, 1660000.0, 8.32], [1435076352.0, 1680000.0, 8.36], [1435078080.0, 1700000.0, 8.4], [1435079808.0, 1720000.0, 8.44], [1435081536.0, 1740000.0, 8.48], [1435083264.0, 1760000.0, 8.52], [1435084992.0, 1780000.0, 8.559999999999999], [1435086720.0, 1800000.0, 8.6], [1435088448.0, 1820000.0, 8.64], [1435090176.0, 1840000.0, 8.68], [1435091904.0, 1860000.0, 8.719999999999999], [1435093632.0, 1880000.0, 8.76], [1435095360.0, 1900000.0, 8.8], [1435097088.0, 1920000.0, 8.84], [1435098816.0, 1940000.0, 8.879999999999999], [1435100544.0, 1960000.0, 8.92], [1435102272.0, 1980000.0, 8.96], [1435104000.0, 2000000.0, 9.0], [1435105728.0, 2020000.0, 9.04], [1435107456.0, 2040000.0, 9.08], [1435109184.0, 2060000.0, 9.120000000000001], [1435110912.0, 2080000.0, 9.16], [1435112640.0, 2100000.0, 9.2], [1435114368.0, 2120000.0, 9.24], [1435116096.0, 2140000.0, 9.280000000000001], [1435117824.0, 2160000.0, 9.32], [1435119552.0, 2180000.0, 9.36], [1435121280.0, 2200000.0, 9.4], [1435123008.0, 2220000.0, 9.440000000000001], [1435124736.0, 2240000.0, 9.48], [1435126464.0, 2260000.0, 9.52], [1435128192.0, 2280000.0, 9.56], [1435129920.0, 2300000.0, 9.600000000000001], [1435131648.0, 2320000.0, 9.64], [1435133376.0, 2340000.0, 9.68], [1435135104.0, 2360000.0, 9.719999999999999], [1435136832.0, 2380000.0, 9.76], [1435138560.0, 2400000.0, 9.8], [1435140288.0, 2420000.0, 9.84], [1435142016.0, 2440000.0, 9.879999999999999], [1435143744.0, 2460000.0, 9.92], [1435145472.0, 2480000.0, 9.96], [1435147200.0, 2500000.0, 10.0], [1435148928.0, 2520000.0, 10.04], [1435150656.0, 2540000.0, 10.08], [1435152384.0, 2560000.0, 10.120000000000001], [1435154112.0, 2580000.0, 10.16], [1435155840.0, 2600000.0, 10.2], [1435157568.0, 2620000.0, 10.24], [1435159296.0, 2640000.0, 10.280000000000001], [1435161024.0, 2660000.0, 10.32], [1435162752.0, 2680000.0, 10.36], [1435164480.0, 2700000.0, 10.4], [1435166208.0, 2720000.0, 10.440000000000001], [1435167936.0, 2740000.0, 10.48], [1435169664.0, 2760000.0, 10.52], [1435171392.0, 2780000.0, 10.56], [1435173120.0, 2800000.0, 10.600000000000001], [1435174848.0, 2820000.0, 10.64], [1435176576.0, 2840000.0, 10.68], [1435178304.0, 2860000.0, 10.719999999999999], [1435180032.0, 2880000.0, 10.76], [1435181760.0, 2900000.0, 10.8], [1435183488.0, 2920000.0, 10.84], [1435185216.0, 2940000.0, 10.879999999999999], [1435186944.0, 2960000.0, 10.92], [1435188672.0, 2980000.0, 10.96], [1435190400.0, 3000000.0, 11.0], [1435192128.0, 3020000.0, 11.04], [1435193856.0, 3040000.0, 11.08], [1435195584.0, 3060000.0, 11.120000000000001], [1435197312.0, 3080000.0, 11.16], [1435199040.0, 3100000.0, 11.2], [1435200768.0, 3120000.0, 11.24], [1435202496.0, 3140000.0, 11.280000000000001], [1435204224.0, 3160000.0, 11.32], [1435205952.0, 3180000.0, 11.36], [1435207680.0, 3200000.0, 11.4], [1435209408.0, 3220000.0, 11.440000000000001], [1435211136.0, 3240000.0, 11.48], [1435212864.0, 3260000.0, 11.52], [1435214592.0, 3280000.0, 11.56], [1435216320.0, 3300000.0, 11.600000000000001], [1435218048.0, 3320000.0, 11.64], [1435219776.0, 3340000.0, 11.68], [1435221504.0, 3360000.0, 11.72], [1435223232.0, 3380000.0, 11.760000000000002], [1435224960.0, 3400000.0, 11.8], [1435226688.0, 3420000.0, 11.84], [1435228416.0, 3440000.0, 11.879999999999999], [1435230144.0, 3460000.0, 11.92], [1435231872.0, 3480000.0, 11.959999999999999], [1435233600.0, 3500000.0, 12.0], [1435235328.0, 3520000.0, 12.04], [1435237056.0, 3540000.0, 12.08], [1435238784.0, 3560000.0, 12.12], [1435240512.0, 3580000.0, 12.16], [1435242240.0, 3600000.0, 12.2], [1435243968.0, 3620000.0, 12.24], [1435245696.0, 3640000.0, 12.28], [1435247424.0, 3660000.0, 12.32], [1435249152.0, 3680000.0, 12.36], [1435250880.0, 3700000.0, 12.4], [1435252608.0, 3720000.0, 12.44], [1435254336.0, 3740000.0, 12.48], [1435256064.0, 3760000.0, 12.52], [1435257792.0, 3780000.0, 12.56], [1435259520.0, 3800000.0, 12.6], [1435261248.0, 3820000.0, 12.64], [1435262976.0, 3840000.0, 12.68], [1435264704.0, 3860000.0, 12.72], [1435266432.0, 3880000.0, 12.76], [1435268160.0, 3900000.0, 12.8], [1435269888.0, 3920000.0, 12.84], [1435271616.0, 3940000.0, 12.88], [1435273344.0, 3960000.0, 12.92], [1435275072.0, 3980000.0, 12.96], [1435276800.0, 4000000.0, 13.0], [1435278528.0, 4020000.0, 13.040000000000001], [1435280256.0, 4040000.0, 13.08], [1435281984.0, 4060000.0, 13.120000000000001], [1435283712.0, 4080000.0, 13.16], [1435285440.0, 4100000.0, 13.2], [1435287168.0, 4120000.0, 13.24], [1435288896.0, 4140000.0, 13.28], [1435290624.0, 4160000.0, 13.32], [1435292352.0, 4180000.0, 13.36], [1435294080.0, 4200000.0, 13.4], [1435295808.0, 4220000.0, 13.44], [1435297536.0, 4240000.0, 13.48], [1435299264.0, 4260000.0, 13.52], [1435300992.0, 4280000.0, 13.56], [1435302720.0, 4300000.0, 13.6], [1435304448.0, 4320000.0, 13.64], [1435306176.0, 4340000.0, 13.68], [1435307904.0, 4360000.0, 13.72], [1435309632.0, 4380000.0, 13.76], [1435311360.0, 4400000.0, 13.8], [1435313088.0, 4420000.0, 13.84], [1435314816.0, 4440000.0, 13.88], [1435316544.0, 4460000.0, 13.92], [1435318272.0, 4480000.0, 13.96], [1435320000.0, 4500000.0, 14.0], [1435321728.0, 4520000.0, 14.040000000000001], [1435323456.0, 4540000.0, 14.08], [1435325184.0, 4560000.0, 14.120000000000001], [1435326912.0, 4580000.0, 14.16], [1435328640.0, 4600000.0, 14.200000000000001], [1435330368.0, 4620000.0, 14.24], [1435332096.0, 4640000.0, 14.280000000000001], [1435333824.0, 4660000.0, 14.32], [1435335552.0, 4680000.0, 14.360000000000001], [1435337280.0, 4700000.0, 14.399999999999999], [1435339008.0, 4720000.0, 14.44], [1435340736.0, 4740000.0, 14.48], [1435342464.0, 4760000.0, 14.52], [1435344192.0, 4780000.0, 14.559999999999999], [1435345920.0, 4800000.0, 14.6], [1435347648.0, 4820000.0, 14.64], [1435349376.0, 4840000.0, 14.68], [1435351104.0, 4860000.0, 14.719999999999999], [1435352832.0, 4880000.0, 14.76], [1435354560.0, 4900000.0, 14.8], [1435356288.0, 4920000.0, 14.84], [1435358016.0, 4940000.0, 14.879999999999999], [1435359744.0, 4960000.0, 14.92], [1435361472.0, 4980000.0, 14.96], [1435363200.0, 5000000.0, 15.0], [1435364928.0, 5020000.0, 15.04], [1435366656.0, 5040000.0, 15.08], [1435368384.0, 5060000.0, 15.120000000000001], [1435370112.0, 5080000.0, 15.16], [1435371840.0, 5100000.0, 15.2], [1435373568.0, 5120000.0, 15.24], [1435375296.0, 5140000.0, 15.280000000000001], [1435377024.0, 5160000.0, 15.32], [1435378752.0, 5180000.0, 15.36], [1435380480.0, 5200000.0, 15.4], [1435382208.0, 5220000.0, 15.440000000000001], [1435383936.0, 5240000.0, 15.48], [1435385664.0, 5260000.0, 15.52], [1435387392.0, 5280000.0, 15.56], [1435389120.0, 5300000.0, 15.600000000000001], [1435390848.0, 5320000.0, 15.64], [1435392576.0, 5340000.0, 15.68], [1435394304.0, 5360000.0, 15.72], [1435396032.0, 5380000.0, 15.760000000000002], [1435397760.0, 5400000.0, 15.8], [1435399488.0, 5420000.0, 15.84], [1435401216.0, 5440000.0, 15.88], [1435402944.0, 5460000.0, 15.920000000000002], [1435404672.0, 5480000.0, 15.96], [1435406400.0, 5500000.0, 16.0], [1435408128.0, 5520000.0, 16.04], [1435409856.0, 5540000.0, 16.080000000000002], [1435411584.0, 5560000.0, 16.12], [1435413312.0, 5580000.0, 16.16], [1435415040.0, 5600000.0, 16.200000000000003], [1435416768.0, 5620000.0, 16.240000000000002], [1435418496.0, 5640000.0, 16.28], [1435420224.0, 5660000.0, 16.32], [1435421952.0, 5680000.0, 16.36], [1435423680.0, 5700000.0, 16.4], [1435425408.0, 5720000.0, 16.439999999999998], [1435427136.0, 5740000.0, 16.479999999999997], [1435428864.0, 5760000.0, 16.52], [1435430592.0, 5780000.0, 16.56], [1435432320.0, 5800000.0, 16.6], [1435434048.0, 5820000.0, 16.64], [1435435776.0, 5840000.0, 16.68], [1435437504.0, 5860000.0, 16.72], [1435439232.0, 5880000.0, 16.759999999999998], [1435440960.0, 5900000.0, 16.799999999999997], [1435442688.0, 5920000.0, 16.84], [1435444416.0, 5940000.0, 16.88], [1435446144.0, 5960000.0, 16.92], [1435447872.0, 5980000.0, 16.96], [1435449600.0, 6000000.0, 17.0], [1435451328.0, 6020000.0, 17.04], [1435453056.0, 6040000.0, 17.08], [1435454784.0, 6060000.0, 17.119999999999997], [1435456512.0, 6080000.0, 17.16], [1435458240.0, 6100000.0, 17.2], [1435459968.0, 6120000.0, 17.240000000000002], [1435461696.0, 6140000.0, 17.28], [1435463424.0, 6160000.0, 17.32], [1435465152.0, 6180000.0, 17.36], [1435466880.0, 6200000.0, 17.4], [1435468608.0, 6220000.0, 17.439999999999998], [1435470336.0, 6240000.0, 17.48], [1435472064.0, 6260000.0, 17.52], [1435473792.0, 6280000.0, 17.560000000000002], [1435475520.0, 6300000.0, 17.6], [1435477248.0, 6320000.0, 17.64], [1435478976.0, 6340000.0, 17.68], [1435480704.0, 6360000.0, 17.72], [1435482432.0, 6380000.0, 17.759999999999998], [1435484160.0, 6400000.0, 17.8], [1435485888.0, 6420000.0, 17.84], [1435487616.0, 6440000.0, 17.880000000000003], [1435489344.0, 6460000.0, 17.92], [1435491072.0, 6480000.0, 17.96], [1435492800.0, 6500000.0, 18.0], [1435494528.0, 6520000.0, 18.04], [1435496256.0, 6540000.0, 18.08], [1435497984.0, 6560000.0, 18.12], [1435499712.0, 6580000.0, 18.16], [1435501440.0, 6600000.0, 18.200000000000003], [1435503168.0, 6620000.0, 18.240000000000002], [1435504896.0, 6640000.0, 18.28], [1435506624.0, 6660000.0, 18.32], [1435508352.0, 6680000.0, 18.36], [1435510080.0, 6700000.0, 18.4], [1435511808.0, 6720000.0, 18.44], [1435513536.0, 6740000.0, 18.48], [1435515264.0, 6760000.0, 18.520000000000003], [1435516992.0, 6780000.0, 18.560000000000002], [1435518720.0, 6800000.0, 18.6], [1435520448.0, 6820000.0, 18.64], [1435522176.0, 6840000.0, 18.68], [1435523904.0, 6860000.0, 18.72], [1435525632.0, 6880000.0, 18.759999999999998], [1435527360.0, 6900000.0, 18.799999999999997], [1435529088.0, 6920000.0, 18.84], [1435530816.0, 6940000.0, 18.88], [1435532544.0, 6960000.0, 18.919999999999998], [1435534272.0, 6980000.0, 18.96], [1435536000.0, 7000000.0, 19.0], [1435537728.0, 7020000.0, 19.04], [1435539456.0, 7040000.0, 19.08], [1435541184.0, 7060000.0, 19.119999999999997], [1435542912.0, 7080000.0, 19.16], [1435544640.0, 7100000.0, 19.2], [1435546368.0, 7120000.0, 19.24], [1435548096.0, 7140000.0, 19.28], [1435549824.0, 7160000.0, 19.32], [1435551552.0, 7180000.0, 19.36], [1435553280.0, 7200000.0, 19.4], [1435555008.0, 7220000.0, 19.439999999999998], [1435556736.0, 7240000.0, 19.48], [1435558464.0, 7260000.0, 19.52], [1435560192.0, 7280000.0, 19.56], [1435561920.0, 7300000.0, 19.6], [1435563648.0, 7320000.0, 19.64], [1435565376.0, 7340000.0, 19.68], [1435567104.0, 7360000.0, 19.72], [1435568832.0, 7380000.0, 19.759999999999998], [1435570560.0, 7400000.0, 19.8], [1435572288.0, 7420000.0, 19.84], [1435574016.0, 7440000.0, 19.88], [1435575744.0, 7460000.0, 19.92], [1435577472.0, 7480000.0, 19.96], [1435579200.0, 7500000.0, 20.0], [1435580928.0, 7520000.0, 20.04], [1435582656.0, 7540000.0, 20.08], [1435584384.0, 7560000.0, 20.12], [1435586112.0, 7580000.0, 20.16], [1435587840.0, 7600000.0, 20.2], [1435589568.0, 7620000.0, 20.240000000000002], [1435591296.0, 7640000.0, 20.28], [1435593024.0, 7660000.0, 20.32], [1435594752.0, 7680000.0, 20.36], [1435596480.0, 7700000.0, 20.4], [1435598208.0, 7720000.0, 20.44], [1435599936.0, 7740000.0, 20.48], [1435601664.0, 7760000.0, 20.52], [1435603392.0, 7780000.0, 20.560000000000002], [1435605120.0, 7800000.0, 20.6], [1435606848.0, 7820000.0, 20.64], [1435608576.0, 7840000.0, 20.68], [1435610304.0, 7860000.0, 20.72], [1435612032.0, 7880000.0, 20.76], [1435613760.0, 7900000.0, 20.8], [1435615488.0, 7920000.0, 20.84], [1435617216.0, 7940000.0, 20.880000000000003], [1435618944.0, 7960000.0, 20.92], [1435620672.0, 7980000.0, 20.96], [1435622400.0, 8000000.0, 21.0], [1435624128.0, 8020000.0, 21.04], [1435625856.0, 8040000.0, 21.080000000000002], [1435627584.0, 8060000.0, 21.12], [1435629312.0, 8080000.0, 21.16], [1435631040.0, 8100000.0, 21.200000000000003], [1435632768.0, 8120000.0, 21.240000000000002], [1435634496.0, 8140000.0, 21.279999999999998], [1435636224.0, 8160000.0, 21.32], [1435637952.0, 8180000.0, 21.36], [1435639680.0, 8200000.0, 21.4], [1435641408.0, 8220000.0, 21.439999999999998], [1435643136.0, 8240000.0, 21.48], [1435644864.0, 8260000.0, 21.52], [1435646592.0, 8280000.0, 21.56], [1435648320.0, 8300000.0, 21.599999999999998], [1435650048.0, 8320000.0, 21.64], [1435651776.0, 8340000.0, 21.68], [1435653504.0, 8360000.0, 21.72], [1435655232.0, 8380000.0, 21.759999999999998], [1435656960.0, 8400000.0, 21.8], [1435658688.0, 8420000.0, 21.84], [1435660416.0, 8440000.0, 21.88], [1435662144.0, 8460000.0, 21.919999999999998], [1435663872.0, 8480000.0, 21.96], [1435665600.0, 8500000.0, 22.0], [1435667328.0, 8520000.0, 22.04], [1435669056.0, 8540000.0, 22.08], [1435670784.0, 8560000.0, 22.12], [1435672512.0, 8580000.0, 22.16], [1435674240.0, 8600000.0, 22.2], [1435675968.0, 8620000.0, 22.24], [1435677696.0, 8640000.0, 22.28], [1435679424.0, 8660000.0, 22.32], [1435681152.0, 8680000.0, 22.36], [1435682880.0, 8700000.0, 22.4], [1435684608.0, 8720000.0, 22.44], [1435686336.0, 8740000.0, 22.48], [1435688064.0, 8760000.0, 22.52], [1435689792.0, 8780000.0, 22.56], [1435691520.0, 8800000.0, 22.6], [1435693248.0, 8820000.0, 22.64], [1435694976.0, 8840000.0, 22.68], [1435696704.0, 8860000.0, 22.72], [1435698432.0, 8880000.0, 22.76], [1435700160.0, 8900000.0, 22.8], [1435701888.0, 8920000.0, 22.84], [1435703616.0, 8940000.0, 22.88], [1435705344.0, 8960000.0, 22.92], [1435707072.0, 8980000.0, 22.96], [1435708800.0, 9000000.0, 23.0], [1435710528.0, 9020000.0, 23.04], [1435712256.0, 9040000.0, 23.080000000000002], [1435713984.0, 9060000.0, 23.12], [1435715712.0, 9080000.0, 23.16], [1435717440.0, 9100000.0, 23.2], [1435719168.0, 9120000.0, 23.240000000000002], [1435720896.0, 9140000.0, 23.28], [1435722624.0, 9160000.0, 23.32], [1435724352.0, 9180000.0, 23.36], [1435726080.0, 9200000.0, 23.400000000000002], [1435727808.0, 9220000.0, 23.44], [1435729536.0, 9240000.0, 23.48], [1435731264.0, 9260000.0, 23.52], [1435732992.0, 9280000.0, 23.560000000000002], [1435734720.0, 9300000.0, 23.6], [1435736448.0, 9320000.0, 23.64], [1435738176.0, 9340000.0, 23.68], [1435739904.0, 9360000.0, 23.720000000000002], [1435741632.0, 9380000.0, 23.759999999999998], [1435743360.0, 9400000.0, 23.799999999999997], [1435745088.0, 9420000.0, 23.84], [1435746816.0, 9440000.0, 23.88], [1435748544.0, 9460000.0, 23.919999999999998], [1435750272.0, 9480000.0, 23.96], [1435752000.0, 9500000.0, 24.0], [1435753728.0, 9520000.0, 24.04], [1435755456.0, 9540000.0, 24.08], [1435757184.0, 9560000.0, 24.119999999999997], [1435758912.0, 9580000.0, 24.16], [1435760640.0, 9600000.0, 24.2], [1435762368.0, 9620000.0, 24.24], [1435764096.0, 9640000.0, 24.28], [1435765824.0, 9660000.0, 24.32], [1435767552.0, 9680000.0, 24.36], [1435769280.0, 9700000.0, 24.4], [1435771008.0, 9720000.0, 24.439999999999998], [1435772736.0, 9740000.0, 24.48], [1435774464.0, 9760000.0, 24.52], [1435776192.0, 9780000.0, 24.56], [1435777920.0, 9800000.0, 24.6], [1435779648.0, 9820000.0, 24.64], [1435781376.0, 9840000.0, 24.68], [1435783104.0, 9860000.0, 24.72], [1435784832.0, 9880000.0, 24.759999999999998], [1435786560.0, 9900000.0, 24.8], [1435788288.0, 9920000.0, 24.84], [1435790016.0, 9940000.0, 24.88], [1435791744.0, 9960000.0, 24.92], [1435793472.0, 9980000.0, 24.96], [1435795200.0, 10000000.0, 25.0], [1435796928.0, 10020000.0, 25.04], [1435798656.0, 10040000.0, 25.08], [1435800384.0, 10060000.0, 25.12], [1435802112.0, 10080000.0, 25.16], [1435803840.0, 10100000.0, 25.2], [1435805568.0, 10120000.0, 25.240000000000002], [1435807296.0, 10140000.0, 25.28], [1435809024.0, 10160000.0, 25.32], [1435810752.0, 10180000.0, 25.36], [1435812480.0, 10200000.0, 25.4], [1435814208.0, 10220000.0, 25.44], [1435815936.0, 10240000.0, 25.48], [1435817664.0, 10260000.0, 25.52], [1435819392.0, 10280000.0, 25.560000000000002], [1435821120.0, 10300000.0, 25.6], [1435822848.0, 10320000.0, 25.64], [1435824576.0, 10340000.0, 25.68], [1435826304.0, 10360000.0, 25.72], [1435828032.0, 10380000.0, 25.76], [1435829760.0, 10400000.0, 25.8], [1435831488.0, 10420000.0, 25.84], [1435833216.0, 10440000.0, 25.880000000000003], [1435834944.0, 10460000.0, 25.92], [1435836672.0, 10480000.0, 25.96], [1435838400.0, 10500000.0, 26.0], [1435840128.0, 10520000.0, 26.04], [1435841856.0, 10540000.0, 26.080000000000002], [1435843584.0, 10560000.0, 26.12], [1435845312.0, 10580000.0, 26.16], [1435847040.0, 10600000.0, 26.200000000000003], [1435848768.0, 10620000.0, 26.240000000000002], [1435850496.0, 10640000.0, 26.28], [1435852224.0, 10660000.0, 26.32], [1435853952.0, 10680000.0, 26.36], [1435855680.0, 10700000.0, 26.400000000000002], [1435857408.0, 10720000.0, 26.44], [1435859136.0, 10740000.0, 26.48], [1435860864.0, 10760000.0, 26.520000000000003], [1435862592.0, 10780000.0, 26.560000000000002], [1435864320.0, 10800000.0, 26.6], [1435866048.0, 10820000.0, 26.64], [1435867776.0, 10840000.0, 26.68], [1435869504.0, 10860000.0, 26.720000000000002], [1435871232.0, 10880000.0, 26.76], [1435872960.0, 10900000.0, 26.8], [1435874688.0, 10920000.0, 26.840000000000003], [1435876416.0, 10940000.0, 26.880000000000003], [1435878144.0, 10960000.0, 26.92], [1435879872.0, 10980000.0, 26.96], [1435881600.0, 11000000.0, 27.0], [1435883328.0, 11020000.0, 27.040000000000003], [1435885056.0, 11040000.0, 27.080000000000002], [1435886784.0, 11060000.0, 27.12], [1435888512.0, 11080000.0, 27.160000000000004], [1435890240.0, 11100000.0, 27.200000000000003], [1435891968.0, 11120000.0, 27.240000000000002], [1435893696.0, 11140000.0, 27.28], [1435895424.0, 11160000.0, 27.32], [1435897152.0, 11180000.0, 27.360000000000003], [1435898880.0, 11200000.0, 27.400000000000002], [1435900608.0, 11220000.0, 27.44], [1435902336.0, 11240000.0, 27.480000000000004], [1435904064.0, 11260000.0, 27.519999999999996], [1435905792.0, 11280000.0, 27.56], [1435907520.0, 11300000.0, 27.599999999999998], [1435909248.0, 11320000.0, 27.639999999999997], [1435910976.0, 11340000.0, 27.68], [1435912704.0, 11360000.0, 27.72], [1435914432.0, 11380000.0, 27.759999999999998], [1435916160.0, 11400000.0, 27.799999999999997], [1435917888.0, 11420000.0, 27.839999999999996], [1435919616.0, 11440000.0, 27.88], [1435921344.0, 11460000.0, 27.919999999999998], [1435923072.0, 11480000.0, 27.959999999999997], [1435924800.0, 11500000.0, 28.0], [1435926528.0, 11520000.0, 28.04], [1435928256.0, 11540000.0, 28.08], [1435929984.0, 11560000.0, 28.119999999999997], [1435931712.0, 11580000.0, 28.159999999999997], [1435933440.0, 11600000.0, 28.2], [1435935168.0, 11620000.0, 28.24], [1435936896.0, 11640000.0, 28.279999999999998], [1435938624.0, 11660000.0, 28.32], [1435940352.0, 11680000.0, 28.36], [1435942080.0, 11700000.0, 28.4], [1435943808.0, 11720000.0, 28.439999999999998], [1435945536.0, 11740000.0, 28.479999999999997], [1435947264.0, 11760000.0, 28.52], [1435948992.0, 11780000.0, 28.56], [1435950720.0, 11800000.0, 28.599999999999998], [1435952448.0, 11820000.0, 28.64], [1435954176.0, 11840000.0, 28.68], [1435955904.0, 11860000.0, 28.72], [1435957632.0, 11880000.0, 28.759999999999998], [1435959360.0, 11900000.0, 28.799999999999997], [1435961088.0, 11920000.0, 28.84], [1435962816.0, 11940000.0, 28.88], [1435964544.0, 11960000.0, 28.919999999999998], [1435966272.0, 11980000.0, 28.96], [1435968000.0, 12000000.0, 29.0], [1435969728.0, 12020000.0, 29.04], [1435971456.0, 12040000.0, 29.08], [1435973184.0, 12060000.0, 29.119999999999997], [1435974912.0, 12080000.0, 29.16], [1435976640.0, 12100000.0, 29.2], [1435978368.0, 12120000.0, 29.24], [1435980096.0, 12140000.0, 29.28], [1435981824.0, 12160000.0, 29.32], [1435983552.0, 12180000.0, 29.36], [1435985280.0, 12200000.0, 29.4], [1435987008.0, 12220000.0, 29.439999999999998], [1435988736.0, 12240000.0, 29.48], [1435990464.0, 12260000.0, 29.52], [1435992192.0, 12280000.0, 29.56], [1435993920.0, 12300000.0, 29.6], [1435995648.0, 12320000.0, 29.64], [1435997376.0, 12340000.0, 29.68], [1435999104.0, 12360000.0, 29.72], [1436000832.0, 12380000.0, 29.759999999999998], [1436002560.0, 12400000.0, 29.8], [1436004288.0, 12420000.0, 29.84], [1436006016.0, 12440000.0, 29.88], [1436007744.0, 12460000.0, 29.92], [1436009472.0, 12480000.0, 29.96], [1436011200.0, 12500000.0, 30.0], [1436012928.0, 12520000.0, 30.04], [1436014656.0, 12540000.0, 30.08], [1436016384.0, 12560000.0, 30.12], [1436018112.0, 12580000.0, 30.16], [1436019840.0, 12600000.0, 30.2], [1436021568.0, 12620000.0, 30.240000000000002], [1436023296.0, 12640000.0, 30.28], [1436025024.0, 12660000.0, 30.32], [1436026752.0, 12680000.0, 30.36], [1436028480.0, 12700000.0, 30.4], [1436030208.0, 12720000.0, 30.44], [1436031936.0, 12740000.0, 30.48], [1436033664.0, 12760000.0, 30.52], [1436035392.0, 12780000.0, 30.560000000000002], [1436037120.0, 12800000.0, 30.6], [1436038848.0, 12820000.0, 30.64], [1436040576.0, 12840000.0, 30.68], [1436042304.0, 12860000.0, 30.72], [1436044032.0, 12880000.0, 30.76], [1436045760.0, 12900000.0, 30.8], [1436047488.0, 12920000.0, 30.84], [1436049216.0, 12940000.0, 30.880000000000003], [1436050944.0, 12960000.0, 30.92], [1436052672.0, 12980000.0, 30.96], [1436054400.0, 13000000.0, 31.0], [1436056128.0, 13020000.0, 31.04], [1436057856.0, 13040000.0, 31.080000000000002], [1436059584.0, 13060000.0, 31.12], [1436061312.0, 13080000.0, 31.16], [1436063040.0, 13100000.0, 31.200000000000003], [1436064768.0, 13120000.0, 31.240000000000002], [1436066496.0, 13140000.0, 31.28], [1436068224.0, 13160000.0, 31.32], [1436069952.0, 13180000.0, 31.36], [1436071680.0, 13200000.0, 31.400000000000002], [1436073408.0, 13220000.0, 31.44], [1436075136.0, 13240000.0, 31.48], [1436076864.0, 13260000.0, 31.520000000000003], [1436078592.0, 13280000.0, 31.560000000000002], [1436080320.0, 13300000.0, 31.6], [1436082048.0, 13320000.0, 31.64], [1436083776.0, 13340000.0, 31.68], [1436085504.0, 13360000.0, 31.720000000000002], [1436087232.0, 13380000.0, 31.76], [1436088960.0, 13400000.0, 31.8], [1436090688.0, 13420000.0, 31.840000000000003], [1436092416.0, 13440000.0, 31.880000000000003], [1436094144.0, 13460000.0, 31.92], [1436095872.0, 13480000.0, 31.96], [1436097600.0, 13500000.0, 32.0], [1436099328.0, 13520000.0, 32.040000000000006], [1436101056.0, 13540000.0, 32.08], [1436102784.0, 13560000.0, 32.120000000000005], [1436104512.0, 13580000.0, 32.160000000000004], [1436106240.0, 13600000.0, 32.2], [1436107968.0, 13620000.0, 32.24], [1436109696.0, 13640000.0, 32.28], [1436111424.0, 13660000.0, 32.32], [1436113152.0, 13680000.0, 32.36], [1436114880.0, 13700000.0, 32.400000000000006], [1436116608.0, 13720000.0, 32.44], [1436118336.0, 13740000.0, 32.480000000000004], [1436120064.0, 13760000.0, 32.519999999999996], [1436121792.0, 13780000.0, 32.56], [1436123520.0, 13800000.0, 32.599999999999994], [1436125248.0, 13820000.0, 32.64], [1436126976.0, 13840000.0, 32.68], [1436128704.0, 13860000.0, 32.72], [1436130432.0, 13880000.0, 32.76], [1436132160.0, 13900000.0, 32.8], [1436133888.0, 13920000.0, 32.839999999999996], [1436135616.0, 13940000.0, 32.879999999999995], [1436137344.0, 13960000.0, 32.92], [1436139072.0, 13980000.0, 32.959999999999994], [1436140800.0, 14000000.0, 33.0], [1436142528.0, 14020000.0, 33.04], [1436144256.0, 14040000.0, 33.08], [1436145984.0, 14060000.0, 33.12], [1436147712.0, 14080000.0, 33.16], [1436149440.0, 14100000.0, 33.2], [1436151168.0, 14120000.0, 33.239999999999995], [1436152896.0, 14140000.0, 33.28], [1436154624.0, 14160000.0, 33.32], [1436156352.0, 14180000.0, 33.36], [1436158080.0, 14200000.0, 33.4], [1436159808.0, 14220000.0, 33.44], [1436161536.0, 14240000.0, 33.48], [1436163264.0, 14260000.0, 33.519999999999996], [1436164992.0, 14280000.0, 33.56], [1436166720.0, 14300000.0, 33.599999999999994], [1436168448.0, 14320000.0, 33.64], [1436170176.0, 14340000.0, 33.68], [1436171904.0, 14360000.0, 33.72], [1436173632.0, 14380000.0, 33.76], [1436175360.0, 14400000.0, 33.8], [1436177088.0, 14420000.0, 33.84], [1436178816.0, 14440000.0, 33.879999999999995], [1436180544.0, 14460000.0, 33.92], [1436182272.0, 14480000.0, 33.96], [1436184000.0, 14500000.0, 34.0], [1436185728.0, 14520000.0, 34.04], [1436187456.0, 14540000.0, 34.08], [1436189184.0, 14560000.0, 34.12], [1436190912.0, 14580000.0, 34.16], [1436192640.0, 14600000.0, 34.2], [1436194368.0, 14620000.0, 34.239999999999995], [1436196096.0, 14640000.0, 34.28], [1436197824.0, 14660000.0, 34.32], [1436199552.0, 14680000.0, 34.36], [1436201280.0, 14700000.0, 34.4], [1436203008.0, 14720000.0, 34.44], [1436204736.0, 14740000.0, 34.480000000000004], [1436206464.0, 14760000.0, 34.519999999999996], [1436208192.0, 14780000.0, 34.56], [1436209920.0, 14800000.0, 34.6], [1436211648.0, 14820000.0, 34.64], [1436213376.0, 14840000.0, 34.68], [1436215104.0, 14860000.0, 34.72], [1436216832.0, 14880000.0, 34.76], [1436218560.0, 14900000.0, 34.8], [1436220288.0, 14920000.0, 34.84], [1436222016.0, 14940000.0, 34.879999999999995], [1436223744.0, 14960000.0, 34.92], [1436225472.0, 14980000.0, 34.96], [1436227200.0, 15000000.0, 35.0], [1436228928.0, 15020000.0, 35.04], [1436230656.0, 15040000.0, 35.08], [1436232384.0, 15060000.0, 35.120000000000005], [1436234112.0, 15080000.0, 35.16], [1436235840.0, 15100000.0, 35.2], [1436237568.0, 15120000.0, 35.24], [1436239296.0, 15140000.0, 35.28], [1436241024.0, 15160000.0, 35.32], [1436242752.0, 15180000.0, 35.36], [1436244480.0, 15200000.0, 35.4], [1436246208.0, 15220000.0, 35.44], [1436247936.0, 15240000.0, 35.480000000000004], [1436249664.0, 15260000.0, 35.519999999999996], [1436251392.0, 15280000.0, 35.56], [1436253120.0, 15300000.0, 35.6], [1436254848.0, 15320000.0, 35.64], [1436256576.0, 15340000.0, 35.68], [1436258304.0, 15360000.0, 35.72], [1436260032.0, 15380000.0, 35.760000000000005], [1436261760.0, 15400000.0, 35.8], [1436263488.0, 15420000.0, 35.84], [1436265216.0, 15440000.0, 35.88], [1436266944.0, 15460000.0, 35.92], [1436268672.0, 15480000.0, 35.96], [1436270400.0, 15500000.0, 36.0], [1436272128.0, 15520000.0, 36.04], [1436273856.0, 15540000.0, 36.08], [1436275584.0, 15560000.0, 36.120000000000005], [1436277312.0, 15580000.0, 36.16], [1436279040.0, 15600000.0, 36.2], [1436280768.0, 15620000.0, 36.24], [1436282496.0, 15640000.0, 36.28], [1436284224.0, 15660000.0, 36.32], [1436285952.0, 15680000.0, 36.36], [1436287680.0, 15700000.0, 36.400000000000006], [1436289408.0, 15720000.0, 36.44], [1436291136.0, 15740000.0, 36.480000000000004], [1436292864.0, 15760000.0, 36.52], [1436294592.0, 15780000.0, 36.56], [1436296320.0, 15800000.0, 36.6], [1436298048.0, 15820000.0, 36.64], [1436299776.0, 15840000.0, 36.68], [1436301504.0, 15860000.0, 36.72], [1436303232.0, 15880000.0, 36.760000000000005], [1436304960.0, 15900000.0, 36.8], [1436306688.0, 15920000.0, 36.84], [1436308416.0, 15940000.0, 36.88], [1436310144.0, 15960000.0, 36.92], [1436311872.0, 15980000.0, 36.96], [1436313600.0, 16000000.0, 37.0], [1436315328.0, 16020000.0, 37.04], [1436317056.0, 16040000.0, 37.08], [1436318784.0, 16060000.0, 37.120000000000005], [1436320512.0, 16080000.0, 37.160000000000004], [1436322240.0, 16100000.0, 37.2], [1436323968.0, 16120000.0, 37.24], [1436325696.0, 16140000.0, 37.28], [1436327424.0, 16160000.0, 37.32], [1436329152.0, 16180000.0, 37.36], [1436330880.0, 16200000.0, 37.400000000000006], [1436332608.0, 16220000.0, 37.440000000000005], [1436334336.0, 16240000.0, 37.480000000000004], [1436336064.0, 16260000.0, 37.519999999999996], [1436337792.0, 16280000.0, 37.559999999999995], [1436339520.0, 16300000.0, 37.599999999999994], [1436341248.0, 16320000.0, 37.64], [1436342976.0, 16340000.0, 37.68], [1436344704.0, 16360000.0, 37.72], [1436346432.0, 16380000.0, 37.76], [1436348160.0, 16400000.0, 37.8], [1436349888.0, 16420000.0, 37.839999999999996], [1436351616.0, 16440000.0, 37.879999999999995], [1436353344.0, 16460000.0, 37.92], [1436355072.0, 16480000.0, 37.96], [1436356800.0, 16500000.0, 38.0], [1436358528.0, 16520000.0, 38.04], [1436360256.0, 16540000.0, 38.08], [1436361984.0, 16560000.0, 38.12], [1436363712.0, 16580000.0, 38.16], [1436365440.0, 16600000.0, 38.199999999999996], [1436367168.0, 16620000.0, 38.239999999999995], [1436368896.0, 16640000.0, 38.28], [1436370624.0, 16660000.0, 38.32], [1436372352.0, 16680000.0, 38.36], [1436374080.0, 16700000.0, 38.4], [1436375808.0, 16720000.0, 38.44], [1436377536.0, 16740000.0, 38.48], [1436379264.0, 16760000.0, 38.519999999999996], [1436380992.0, 16780000.0, 38.56], [1436382720.0, 16800000.0, 38.6], [1436384448.0, 16820000.0, 38.64], [1436386176.0, 16840000.0, 38.68], [1436387904.0, 16860000.0, 38.72], [1436389632.0, 16880000.0, 38.76], [1436391360.0, 16900000.0, 38.8], [1436393088.0, 16920000.0, 38.839999999999996], [1436394816.0, 16940000.0, 38.879999999999995], [1436396544.0, 16960000.0, 38.92], [1436398272.0, 16980000.0, 38.96], [1436400000.0, 17000000.0, 39.0], [1436401728.0, 17020000.0, 39.04], [1436403456.0, 17040000.0, 39.08], [1436405184.0, 17060000.0, 39.12], [1436406912.0, 17080000.0, 39.16], [1436408640.0, 17100000.0, 39.2], [1436410368.0, 17120000.0, 39.24], [1436412096.0, 17140000.0, 39.28], [1436413824.0, 17160000.0, 39.32], [1436415552.0, 17180000.0, 39.36], [1436417280.0, 17200000.0, 39.4], [1436419008.0, 17220000.0, 39.44], [1436420736.0, 17240000.0, 39.48], [1436422464.0, 17260000.0, 39.519999999999996], [1436424192.0, 17280000.0, 39.56], [1436425920.0, 17300000.0, 39.6], [1436427648.0, 17320000.0, 39.64], [1436429376.0, 17340000.0, 39.68], [1436431104.0, 17360000.0, 39.72], [1436432832.0, 17380000.0, 39.76], [1436434560.0, 17400000.0, 39.8], [1436436288.0, 17420000.0, 39.84], [1436438016.0, 17440000.0, 39.88], [1436439744.0, 17460000.0, 39.92], [1436441472.0, 17480000.0, 39.96], [1436443200.0, 17500000.0, 40.0], [1436444928.0, 17520000.0, 40.04], [1436446656.0, 17540000.0, 40.08], [1436448384.0, 17560000.0, 40.12], [1436450112.0, 17580000.0, 40.16], [1436451840.0, 17600000.0, 40.2], [1436453568.0, 17620000.0, 40.24], [1436455296.0, 17640000.0, 40.28], [1436457024.0, 17660000.0, 40.32], [1436458752.0, 17680000.0, 40.36], [1436460480.0, 17700000.0, 40.4], [1436462208.0, 17720000.0, 40.44], [1436463936.0, 17740000.0, 40.480000000000004], [1436465664.0, 17760000.0, 40.52], [1436467392.0, 17780000.0, 40.56], [1436469120.0, 17800000.0, 40.6], [1436470848.0, 17820000.0, 40.64], [1436472576.0, 17840000.0, 40.68], [1436474304.0, 17860000.0, 40.72], [1436476032.0, 17880000.0, 40.76], [1436477760.0, 17900000.0, 40.8], [1436479488.0, 17920000.0, 40.84], [1436481216.0, 17940000.0, 40.88], [1436482944.0, 17960000.0, 40.92], [1436484672.0, 17980000.0, 40.96], [1436486400.0, 18000000.0, 41.0], [1436488128.0, 18020000.0, 41.04], [1436489856.0, 18040000.0, 41.08], [1436491584.0, 18060000.0, 41.120000000000005], [1436493312.0, 18080000.0, 41.160000000000004], [1436495040.0, 18100000.0, 41.2], [1436496768.0, 18120000.0, 41.24], [1436498496.0, 18140000.0, 41.28], [1436500224.0, 18160000.0, 41.32], [1436501952.0, 18180000.0, 41.36], [1436503680.0, 18200000.0, 41.4], [1436505408.0, 18220000.0, 41.44], [1436507136.0, 18240000.0, 41.480000000000004], [1436508864.0, 18260000.0, 41.52], [1436510592.0, 18280000.0, 41.56], [1436512320.0, 18300000.0, 41.6], [1436514048.0, 18320000.0, 41.64], [1436515776.0, 18340000.0, 41.68], [1436517504.0, 18360000.0, 41.72], [1436519232.0, 18380000.0, 41.760000000000005], [1436520960.0, 18400000.0, 41.800000000000004], [1436522688.0, 18420000.0, 41.84], [1436524416.0, 18440000.0, 41.88], [1436526144.0, 18460000.0, 41.92], [1436527872.0, 18480000.0, 41.96], [1436529600.0, 18500000.0, 42.0], [1436531328.0, 18520000.0, 42.04], [1436533056.0, 18540000.0, 42.08], [1436534784.0, 18560000.0, 42.120000000000005], [1436536512.0, 18580000.0, 42.160000000000004], [1436538240.0, 18600000.0, 42.2], [1436539968.0, 18620000.0, 42.24], [1436541696.0, 18640000.0, 42.28], [1436543424.0, 18660000.0, 42.32], [1436545152.0, 18680000.0, 42.36], [1436546880.0, 18700000.0, 42.400000000000006], [1436548608.0, 18720000.0, 42.440000000000005], [1436550336.0, 18740000.0, 42.480000000000004], [1436552064.0, 18760000.0, 42.519999999999996], [1436553792.0, 18780000.0, 42.559999999999995], [1436555520.0, 18800000.0, 42.599999999999994], [1436557248.0, 18820000.0, 42.64], [1436558976.0, 18840000.0, 42.68], [1436560704.0, 18860000.0, 42.72], [1436562432.0, 18880000.0, 42.76], [1436564160.0, 18900000.0, 42.8], [1436565888.0, 18920000.0, 42.839999999999996], [1436567616.0, 18940000.0, 42.879999999999995], [1436569344.0, 18960000.0, 42.92], [1436571072.0, 18980000.0, 42.96], [1436572800.0, 19000000.0, 43.0], [1436574528.0, 19020000.0, 43.04], [1436576256.0, 19040000.0, 43.08], [1436577984.0, 19060000.0, 43.12], [1436579712.0, 19080000.0, 43.16], [1436581440.0, 19100000.0, 43.199999999999996], [1436583168.0, 19120000.0, 43.239999999999995], [1436584896.0, 19140000.0, 43.28], [1436586624.0, 19160000.0, 43.32], [1436588352.0, 19180000.0, 43.36], [1436590080.0, 19200000.0, 43.4], [1436591808.0, 19220000.0, 43.44], [1436593536.0, 19240000.0, 43.48], [1436595264.0, 19260000.0, 43.519999999999996], [1436596992.0, 19280000.0, 43.56], [1436598720.0, 19300000.0, 43.6], [1436600448.0, 19320000.0, 43.64], [1436602176.0, 19340000.0, 43.68], [1436603904.0, 19360000.0, 43.72], [1436605632.0, 19380000.0, 43.76], [1436607360.0, 19400000.0, 43.8], [1436609088.0, 19420000.0, 43.839999999999996], [1436610816.0, 19440000.0, 43.879999999999995], [1436612544.0, 19460000.0, 43.92], [1436614272.0, 19480000.0, 43.96], [1436616000.0, 19500000.0, 44.0], [1436617728.0, 19520000.0, 44.04], [1436619456.0, 19540000.0, 44.08], [1436621184.0, 19560000.0, 44.12], [1436622912.0, 19580000.0, 44.16], [1436624640.0, 19600000.0, 44.2], [1436626368.0, 19620000.0, 44.24], [1436628096.0, 19640000.0, 44.28], [1436629824.0, 19660000.0, 44.32], [1436631552.0, 19680000.0, 44.36], [1436633280.0, 19700000.0, 44.4], [1436635008.0, 19720000.0, 44.44], [1436636736.0, 19740000.0, 44.48], [1436638464.0, 19760000.0, 44.519999999999996], [1436640192.0, 19780000.0, 44.56], [1436641920.0, 19800000.0, 44.6], [1436643648.0, 19820000.0, 44.64], [1436645376.0, 19840000.0, 44.68], [1436647104.0, 19860000.0, 44.72], [1436648832.0, 19880000.0, 44.76], [1436650560.0, 19900000.0, 44.8], [1436652288.0, 19920000.0, 44.84], [1436654016.0, 19940000.0, 44.88], [1436655744.0, 19960000.0, 44.92], [1436657472.0, 19980000.0, 44.96], [1436659200.0, 20000000.0, 45.0], [1436660928.0, 20020000.0, 45.03999999999999], [1436662656.0, 20040000.0, 45.08], [1436664384.0, 20060000.0, 45.12], [1436666112.0, 20080000.0, 45.16], [1436667840.0, 20100000.0, 45.199999999999996], [1436669568.0, 20120000.0, 45.24], [1436671296.0, 20140000.0, 45.279999999999994], [1436673024.0, 20160000.0, 45.32], [1436674752.0, 20180000.0, 45.36], [1436676480.0, 20200000.0, 45.4], [1436678208.0, 20220000.0, 45.44], [1436679936.0, 20240000.0, 45.480000000000004], [1436681664.0, 20260000.0, 45.519999999999996], [1436683392.0, 20280000.0, 45.56], [1436685120.0, 20300000.0, 45.599999999999994], [1436686848.0, 20320000.0, 45.64], [1436688576.0, 20340000.0, 45.67999999999999], [1436690304.0, 20360000.0, 45.72], [1436692032.0, 20380000.0, 45.76], [1436693760.0, 20400000.0, 45.8], [1436695488.0, 20420000.0, 45.839999999999996], [1436697216.0, 20440000.0, 45.88], [1436698944.0, 20460000.0, 45.919999999999995], [1436700672.0, 20480000.0, 45.96], [1436702400.0, 20500000.0, 46.0], [1436704128.0, 20520000.0, 46.04], [1436705856.0, 20540000.0, 46.08], [1436707584.0, 20560000.0, 46.120000000000005], [1436709312.0, 20580000.0, 46.16], [1436711040.0, 20600000.0, 46.2], [1436712768.0, 20620000.0, 46.239999999999995], [1436714496.0, 20640000.0, 46.28], [1436716224.0, 20660000.0, 46.31999999999999], [1436717952.0, 20680000.0, 46.36], [1436719680.0, 20700000.0, 46.4], [1436721408.0, 20720000.0, 46.44], [1436723136.0, 20740000.0, 46.48], [1436724864.0, 20760000.0, 46.52], [1436726592.0, 20780000.0, 46.559999999999995], [1436728320.0, 20800000.0, 46.6], [1436730048.0, 20820000.0, 46.64], [1436731776.0, 20840000.0, 46.68], [1436733504.0, 20860000.0, 46.72], [1436735232.0, 20880000.0, 46.760000000000005], [1436736960.0, 20900000.0, 46.8], [1436738688.0, 20920000.0, 46.84], [1436740416.0, 20940000.0, 46.879999999999995], [1436742144.0, 20960000.0, 46.92], [1436743872.0, 20980000.0, 46.959999999999994], [1436745600.0, 21000000.0, 47.0], [1436747328.0, 21020000.0, 47.04], [1436749056.0, 21040000.0, 47.08], [1436750784.0, 21060000.0, 47.12], [1436752512.0, 21080000.0, 47.160000000000004], [1436754240.0, 21100000.0, 47.199999999999996], [1436755968.0, 21120000.0, 47.24], [1436757696.0, 21140000.0, 47.28], [1436759424.0, 21160000.0, 47.32], [1436761152.0, 21180000.0, 47.36], [1436762880.0, 21200000.0, 47.400000000000006], [1436764608.0, 21220000.0, 47.44], [1436766336.0, 21240000.0, 47.480000000000004], [1436768064.0, 21260000.0, 47.519999999999996], [1436769792.0, 21280000.0, 47.56], [1436771520.0, 21300000.0, 47.599999999999994], [1436773248.0, 21320000.0, 47.64], [1436774976.0, 21340000.0, 47.68], [1436776704.0, 21360000.0, 47.72], [1436778432.0, 21380000.0, 47.76], [1436780160.0, 21400000.0, 47.800000000000004], [1436781888.0, 21420000.0, 47.839999999999996], [1436783616.0, 21440000.0, 47.88], [1436785344.0, 21460000.0, 47.92], [1436787072.0, 21480000.0, 47.96], [1436788800.0, 21500000.0, 48.0], [1436790528.0, 21520000.0, 48.040000000000006], [1436792256.0, 21540000.0, 48.08], [1436793984.0, 21560000.0, 48.120000000000005], [1436795712.0, 21580000.0, 48.16], [1436797440.0, 21600000.0, 48.2], [1436799168.0, 21620000.0, 48.239999999999995], [1436800896.0, 21640000.0, 48.28], [1436802624.0, 21660000.0, 48.32], [1436804352.0, 21680000.0, 48.36], [1436806080.0, 21700000.0, 48.4], [1436807808.0, 21720000.0, 48.440000000000005], [1436809536.0, 21740000.0, 48.48], [1436811264.0, 21760000.0, 48.52], [1436812992.0, 21780000.0, 48.56], [1436814720.0, 21800000.0, 48.6], [1436816448.0, 21820000.0, 48.64], [1436818176.0, 21840000.0, 48.68000000000001], [1436819904.0, 21860000.0, 48.72], [1436821632.0, 21880000.0, 48.760000000000005], [1436823360.0, 21900000.0, 48.8], [1436825088.0, 21920000.0, 48.84], [1436826816.0, 21940000.0, 48.879999999999995], [1436828544.0, 21960000.0, 48.92], [1436830272.0, 21980000.0, 48.96], [1436832000.0, 22000000.0, 49.0], [1436833728.0, 22020000.0, 49.04], [1436835456.0, 22040000.0, 49.080000000000005], [1436837184.0, 22060000.0, 49.12], [1436838912.0, 22080000.0, 49.160000000000004], [1436840640.0, 22100000.0, 49.2], [1436842368.0, 22120000.0, 49.24], [1436844096.0, 22140000.0, 49.28], [1436845824.0, 22160000.0, 49.32000000000001], [1436847552.0, 22180000.0, 49.36], [1436849280.0, 22200000.0, 49.400000000000006], [1436851008.0, 22220000.0, 49.44], [1436852736.0, 22240000.0, 49.480000000000004], [1436854464.0, 22260000.0, 49.519999999999996], [1436856192.0, 22280000.0, 49.56], [1436857920.0, 22300000.0, 49.6], [1436859648.0, 22320000.0, 49.64], [1436861376.0, 22340000.0, 49.68], [1436863104.0, 22360000.0, 49.720000000000006], [1436864832.0, 22380000.0, 49.76], [1436866560.0, 22400000.0, 49.800000000000004], [1436868288.0, 22420000.0, 49.84], [1436870016.0, 22440000.0, 49.88], [1436871744.0, 22460000.0, 49.92], [1436873472.0, 22480000.0, 49.96000000000001], [1436875200.0, 22500000.0, 50.0], [1436876928.0, 22520000.0, 50.03999999999999], [1436878656.0, 22540000.0, 50.08], [1436880384.0, 22560000.0, 50.12], [1436882112.0, 22580000.0, 50.16], [1436883840.0, 22600000.0, 50.199999999999996], [1436885568.0, 22620000.0, 50.24], [1436887296.0, 22640000.0, 50.279999999999994], [1436889024.0, 22660000.0, 50.32], [1436890752.0, 22680000.0, 50.36], [1436892480.0, 22700000.0, 50.4], [1436894208.0, 22720000.0, 50.44], [1436895936.0, 22740000.0, 50.480000000000004], [1436897664.0, 22760000.0, 50.519999999999996], [1436899392.0, 22780000.0, 50.56], [1436901120.0, 22800000.0, 50.599999999999994], [1436902848.0, 22820000.0, 50.64], [1436904576.0, 22840000.0, 50.67999999999999], [1436906304.0, 22860000.0, 50.72], [1436908032.0, 22880000.0, 50.76], [1436909760.0, 22900000.0, 50.8], [1436911488.0, 22920000.0, 50.839999999999996], [1436913216.0, 22940000.0, 50.88], [1436914944.0, 22960000.0, 50.919999999999995], [1436916672.0, 22980000.0, 50.96], [1436918400.0, 23000000.0, 51.0], [1436920128.0, 23020000.0, 51.04], [1436921856.0, 23040000.0, 51.08], [1436923584.0, 23060000.0, 51.120000000000005], [1436925312.0, 23080000.0, 51.16], [1436927040.0, 23100000.0, 51.2], [1436928768.0, 23120000.0, 51.239999999999995], [1436930496.0, 23140000.0, 51.28], [1436932224.0, 23160000.0, 51.31999999999999], [1436933952.0, 23180000.0, 51.36], [1436935680.0, 23200000.0, 51.4], [1436937408.0, 23220000.0, 51.44], [1436939136.0, 23240000.0, 51.48], [1436940864.0, 23260000.0, 51.52], [1436942592.0, 23280000.0, 51.559999999999995], [1436944320.0, 23300000.0, 51.6], [1436946048.0, 23320000.0, 51.64], [1436947776.0, 23340000.0, 51.68], [1436949504.0, 23360000.0, 51.72], [1436951232.0, 23380000.0, 51.760000000000005], [1436952960.0, 23400000.0, 51.8], [1436954688.0, 23420000.0, 51.84], [1436956416.0, 23440000.0, 51.879999999999995], [1436958144.0, 23460000.0, 51.92], [1436959872.0, 23480000.0, 51.959999999999994], [1436961600.0, 23500000.0, 52.0], [1436963328.0, 23520000.0, 52.04], [1436965056.0, 23540000.0, 52.08], [1436966784.0, 23560000.0, 52.12], [1436968512.0, 23580000.0, 52.160000000000004], [1436970240.0, 23600000.0, 52.199999999999996], [1436971968.0, 23620000.0, 52.24], [1436973696.0, 23640000.0, 52.28], [1436975424.0, 23660000.0, 52.32], [1436977152.0, 23680000.0, 52.36], [1436978880.0, 23700000.0, 52.400000000000006], [1436980608.0, 23720000.0, 52.44], [1436982336.0, 23740000.0, 52.480000000000004], [1436984064.0, 23760000.0, 52.519999999999996], [1436985792.0, 23780000.0, 52.56], [1436987520.0, 23800000.0, 52.599999999999994], [1436989248.0, 23820000.0, 52.64], [1436990976.0, 23840000.0, 52.68], [1436992704.0, 23860000.0, 52.72], [1436994432.0, 23880000.0, 52.76], [1436996160.0, 23900000.0, 52.800000000000004], [1436997888.0, 23920000.0, 52.839999999999996], [1436999616.0, 23940000.0, 52.88], [1437001344.0, 23960000.0, 52.92], [1437003072.0, 23980000.0, 52.96], [1437004800.0, 24000000.0, 53.0], [1437006528.0, 24020000.0, 53.040000000000006], [1437008256.0, 24040000.0, 53.08], [1437009984.0, 24060000.0, 53.120000000000005], [1437011712.0, 24080000.0, 53.16], [1437013440.0, 24100000.0, 53.2], [1437015168.0, 24120000.0, 53.239999999999995], [1437016896.0, 24140000.0, 53.28], [1437018624.0, 24160000.0, 53.32], [1437020352.0, 24180000.0, 53.36], [1437022080.0, 24200000.0, 53.4], [1437023808.0, 24220000.0, 53.440000000000005], [1437025536.0, 24240000.0, 53.48], [1437027264.0, 24260000.0, 53.52], [1437028992.0, 24280000.0, 53.56], [1437030720.0, 24300000.0, 53.6], [1437032448.0, 24320000.0, 53.64], [1437034176.0, 24340000.0, 53.68000000000001], [1437035904.0, 24360000.0, 53.72], [1437037632.0, 24380000.0, 53.760000000000005], [1437039360.0, 24400000.0, 53.8], [1437041088.0, 24420000.0, 53.84], [1437042816.0, 24440000.0, 53.879999999999995], [1437044544.0, 24460000.0, 53.92], [1437046272.0, 24480000.0, 53.96], [1437048000.0, 24500000.0, 54.0], [1437049728.0, 24520000.0, 54.04], [1437051456.0, 24540000.0, 54.080000000000005], [1437053184.0, 24560000.0, 54.12], [1437054912.0, 24580000.0, 54.160000000000004], [1437056640.0, 24600000.0, 54.2], [1437058368.0, 24620000.0, 54.24], [1437060096.0, 24640000.0, 54.28], [1437061824.0, 24660000.0, 54.32000000000001], [1437063552.0, 24680000.0, 54.36], [1437065280.0, 24700000.0, 54.400000000000006], [1437067008.0, 24720000.0, 54.44], [1437068736.0, 24740000.0, 54.480000000000004], [1437070464.0, 24760000.0, 54.519999999999996], [1437072192.0, 24780000.0, 54.56], [1437073920.0, 24800000.0, 54.6], [1437075648.0, 24820000.0, 54.64], [1437077376.0, 24840000.0, 54.68], [1437079104.0, 24860000.0, 54.720000000000006], [1437080832.0, 24880000.0, 54.76], [1437082560.0, 24900000.0, 54.800000000000004], [1437084288.0, 24920000.0, 54.84], [1437086016.0, 24940000.0, 54.88], [1437087744.0, 24960000.0, 54.92], [1437089472.0, 24980000.0, 54.96000000000001], [1437091200.0, 25000000.0, 55.0], [1437092928.0, 25020000.0, 55.03999999999999], [1437094656.0, 25040000.0, 55.08], [1437096384.0, 25060000.0, 55.12], [1437098112.0, 25080000.0, 55.16], [1437099840.0, 25100000.0, 55.199999999999996], [1437101568.0, 25120000.0, 55.24], [1437103296.0, 25140000.0, 55.279999999999994], [1437105024.0, 25160000.0, 55.32], [1437106752.0, 25180000.0, 55.36], [1437108480.0, 25200000.0, 55.4], [1437110208.0, 25220000.0, 55.44], [1437111936.0, 25240000.0, 55.480000000000004], [1437113664.0, 25260000.0, 55.519999999999996], [1437115392.0, 25280000.0, 55.56], [1437117120.0, 25300000.0, 55.599999999999994], [1437118848.0, 25320000.0, 55.64], [1437120576.0, 25340000.0, 55.67999999999999], [1437122304.0, 25360000.0, 55.72], [1437124032.0, 25380000.0, 55.76], [1437125760.0, 25400000.0, 55.8], [1437127488.0, 25420000.0, 55.839999999999996], [1437129216.0, 25440000.0, 55.88], [1437130944.0, 25460000.0, 55.919999999999995], [1437132672.0, 25480000.0, 55.96], [1437134400.0, 25500000.0, 56.0], [1437136128.0, 25520000.0, 56.04], [1437137856.0, 25540000.0, 56.08], [1437139584.0, 25560000.0, 56.120000000000005], [1437141312.0, 25580000.0, 56.16], [1437143040.0, 25600000.0, 56.2], [1437144768.0, 25620000.0, 56.239999999999995], [1437146496.0, 25640000.0, 56.28], [1437148224.0, 25660000.0, 56.31999999999999], [1437149952.0, 25680000.0, 56.36], [1437151680.0, 25700000.0, 56.4], [1437153408.0, 25720000.0, 56.44], [1437155136.0, 25740000.0, 56.48], [1437156864.0, 25760000.0, 56.52], [1437158592.0, 25780000.0, 56.559999999999995], [1437160320.0, 25800000.0, 56.6], [1437162048.0, 25820000.0, 56.64], [1437163776.0, 25840000.0, 56.68], [1437165504.0, 25860000.0, 56.72], [1437167232.0, 25880000.0, 56.760000000000005], [1437168960.0, 25900000.0, 56.8], [1437170688.0, 25920000.0, 56.84], [1437172416.0, 25940000.0, 56.879999999999995], [1437174144.0, 25960000.0, 56.92], [1437175872.0, 25980000.0, 56.959999999999994], [1437177600.0, 26000000.0, 57.0], [1437179328.0, 26020000.0, 57.04], [1437181056.0, 26040000.0, 57.08], [1437182784.0, 26060000.0, 57.12], [1437184512.0, 26080000.0, 57.160000000000004], [1437186240.0, 26100000.0, 57.199999999999996], [1437187968.0, 26120000.0, 57.24], [1437189696.0, 26140000.0, 57.28], [1437191424.0, 26160000.0, 57.32], [1437193152.0, 26180000.0, 57.36], [1437194880.0, 26200000.0, 57.400000000000006], [1437196608.0, 26220000.0, 57.44], [1437198336.0, 26240000.0, 57.480000000000004], [1437200064.0, 26260000.0, 57.519999999999996], [1437201792.0, 26280000.0, 57.56], [1437203520.0, 26300000.0, 57.599999999999994], [1437205248.0, 26320000.0, 57.64], [1437206976.0, 26340000.0, 57.68], [1437208704.0, 26360000.0, 57.72], [1437210432.0, 26380000.0, 57.76], [1437212160.0, 26400000.0, 57.800000000000004], [1437213888.0, 26420000.0, 57.839999999999996], [1437215616.0, 26440000.0, 57.88], [1437217344.0, 26460000.0, 57.92], [1437219072.0, 26480000.0, 57.96], [1437220800.0, 26500000.0, 58.0], [1437222528.0, 26520000.0, 58.040000000000006], [1437224256.0, 26540000.0, 58.08], [1437225984.0, 26560000.0, 58.120000000000005], [1437227712.0, 26580000.0, 58.16], [1437229440.0, 26600000.0, 58.2], [1437231168.0, 26620000.0, 58.239999999999995], [1437232896.0, 26640000.0, 58.28], [1437234624.0, 26660000.0, 58.32], [1437236352.0, 26680000.0, 58.36], [1437238080.0, 26700000.0, 58.4], [1437239808.0, 26720000.0, 58.440000000000005], [1437241536.0, 26740000.0, 58.48], [1437243264.0, 26760000.0, 58.52], [1437244992.0, 26780000.0, 58.56], [1437246720.0, 26800000.0, 58.6], [1437248448.0, 26820000.0, 58.64], [1437250176.0, 26840000.0, 58.68000000000001], [1437251904.0, 26860000.0, 58.72], [1437253632.0, 26880000.0, 58.760000000000005], [1437255360.0, 26900000.0, 58.8], [1437257088.0, 26920000.0, 58.84], [1437258816.0, 26940000.0, 58.879999999999995], [1437260544.0, 26960000.0, 58.92], [1437262272.0, 26980000.0, 58.96], [1437264000.0, 27000000.0, 59.0], [1437265728.0, 27020000.0, 59.04], [1437267456.0, 27040000.0, 59.080000000000005], [1437269184.0, 27060000.0, 59.12], [1437270912.0, 27080000.0, 59.160000000000004], [1437272640.0, 27100000.0, 59.2], [1437274368.0, 27120000.0, 59.24], [1437276096.0, 27140000.0, 59.28], [1437277824.0, 27160000.0, 59.32000000000001], [1437279552.0, 27180000.0, 59.36], [1437281280.0, 27200000.0, 59.400000000000006], [1437283008.0, 27220000.0, 59.44], [1437284736.0, 27240000.0, 59.480000000000004], [1437286464.0, 27260000.0, 59.519999999999996], [1437288192.0, 27280000.0, 59.56], [1437289920.0, 27300000.0, 59.6], [1437291648.0, 27320000.0, 59.64], [1437293376.0, 27340000.0, 59.68], [1437295104.0, 27360000.0, 59.720000000000006], [1437296832.0, 27380000.0, 59.76], [1437298560.0, 27400000.0, 59.800000000000004], [1437300288.0, 27420000.0, 59.84], [1437302016.0, 27440000.0, 59.88], [1437303744.0, 27460000.0, 59.92], [1437305472.0, 27480000.0, 59.96000000000001], [1437307200.0, 27500000.0, 60.0], [1437308928.0, 27520000.0, 60.03999999999999], [1437310656.0, 27540000.0, 60.08], [1437312384.0, 27560000.0, 60.12], [1437314112.0, 27580000.0, 60.16], [1437315840.0, 27600000.0, 60.199999999999996], [1437317568.0, 27620000.0, 60.24], [1437319296.0, 27640000.0, 60.279999999999994], [1437321024.0, 27660000.0, 60.32], [1437322752.0, 27680000.0, 60.36], [1437324480.0, 27700000.0, 60.4], [1437326208.0, 27720000.0, 60.44], [1437327936.0, 27740000.0, 60.480000000000004], [1437329664.0, 27760000.0, 60.519999999999996], [1437331392.0, 27780000.0, 60.56], [1437333120.0, 27800000.0, 60.599999999999994], [1437334848.0, 27820000.0, 60.64], [1437336576.0, 27840000.0, 60.67999999999999], [1437338304.0, 27860000.0, 60.72], [1437340032.0, 27880000.0, 60.76], [1437341760.0, 27900000.0, 60.8], [1437343488.0, 27920000.0, 60.839999999999996], [1437345216.0, 27940000.0, 60.88], [1437346944.0, 27960000.0, 60.919999999999995], [1437348672.0, 27980000.0, 60.96], [1437350400.0, 28000000.0, 61.0], [1437352128.0, 28020000.0, 61.04], [1437353856.0, 28040000.0, 61.08], [1437355584.0, 28060000.0, 61.120000000000005], [1437357312.0, 28080000.0, 61.16], [1437359040.0, 28100000.0, 61.2], [1437360768.0, 28120000.0, 61.239999999999995], [1437362496.0, 28140000.0, 61.28], [1437364224.0, 28160000.0, 61.31999999999999], [1437365952.0, 28180000.0, 61.36], [1437367680.0, 28200000.0, 61.4], [1437369408.0, 28220000.0, 61.44], [1437371136.0, 28240000.0, 61.48], [1437372864.0, 28260000.0, 61.52], [1437374592.0, 28280000.0, 61.559999999999995], [1437376320.0, 28300000.0, 61.6], [1437378048.0, 28320000.0, 61.64], [1437379776.0, 28340000.0, 61.68], [1437381504.0, 28360000.0, 61.72], [1437383232.0, 28380000.0, 61.760000000000005], [1437384960.0, 28400000.0, 61.8], [1437386688.0, 28420000.0, 61.84], [1437388416.0, 28440000.0, 61.879999999999995], [1437390144.0, 28460000.0, 61.92], [1437391872.0, 28480000.0, 61.959999999999994], [1437393600.0, 28500000.0, 62.0], [1437395328.0, 28520000.0, 62.04], [1437397056.0, 28540000.0, 62.08], [1437398784.0, 28560000.0, 62.12], [1437400512.0, 28580000.0, 62.160000000000004], [1437402240.0, 28600000.0, 62.199999999999996], [1437403968.0, 28620000.0, 62.24], [1437405696.0, 28640000.0, 62.28], [1437407424.0, 28660000.0, 62.32], [1437409152.0, 28680000.0, 62.36], [1437410880.0, 28700000.0, 62.400000000000006], [1437412608.0, 28720000.0, 62.44], [1437414336.0, 28740000.0, 62.480000000000004], [1437416064.0, 28760000.0, 62.519999999999996], [1437417792.0, 28780000.0, 62.56], [1437419520.0, 28800000.0, 62.599999999999994], [1437421248.0, 28820000.0, 62.64], [1437422976.0, 28840000.0, 62.68], [1437424704.0, 28860000.0, 62.72], [1437426432.0, 28880000.0, 62.76], [1437428160.0, 28900000.0, 62.800000000000004], [1437429888.0, 28920000.0, 62.839999999999996], [1437431616.0, 28940000.0, 62.88], [1437433344.0, 28960000.0, 62.92], [1437435072.0, 28980000.0, 62.96], [1437436800.0, 29000000.0, 63.0], [1437438528.0, 29020000.0, 63.040000000000006], [1437440256.0, 29040000.0, 63.08], [1437441984.0, 29060000.0, 63.120000000000005], [1437443712.0, 29080000.0, 63.16], [1437445440.0, 29100000.0, 63.2], [1437447168.0, 29120000.0, 63.239999999999995], [1437448896.0, 29140000.0, 63.28], [1437450624.0, 29160000.0, 63.32], [1437452352.0, 29180000.0, 63.36], [1437454080.0, 29200000.0, 63.4], [1437455808.0, 29220000.0, 63.440000000000005], [1437457536.0, 29240000.0, 63.48], [1437459264.0, 29260000.0, 63.52], [1437460992.0, 29280000.0, 63.56], [1437462720.0, 29300000.0, 63.6], [1437464448.0, 29320000.0, 63.64], [1437466176.0, 29340000.0, 63.68000000000001], [1437467904.0, 29360000.0, 63.72], [1437469632.0, 29380000.0, 63.760000000000005], [1437471360.0, 29400000.0, 63.8], [1437473088.0, 29420000.0, 63.84], [1437474816.0, 29440000.0, 63.879999999999995], [1437476544.0, 29460000.0, 63.92], [1437478272.0, 29480000.0, 63.96], [1437480000.0, 29500000.0, 64.0], [1437481728.0, 29520000.0, 64.03999999999999], [1437483456.0, 29540000.0, 64.08000000000001], [1437485184.0, 29560000.0, 64.12], [1437486912.0, 29580000.0, 64.16], [1437488640.0, 29600000.0, 64.2], [1437490368.0, 29620000.0, 64.24000000000001], [1437492096.0, 29640000.0, 64.28], [1437493824.0, 29660000.0, 64.32000000000001], [1437495552.0, 29680000.0, 64.36], [1437497280.0, 29700000.0, 64.4], [1437499008.0, 29720000.0, 64.44], [1437500736.0, 29740000.0, 64.48], [1437502464.0, 29760000.0, 64.52], [1437504192.0, 29780000.0, 64.56], [1437505920.0, 29800000.0, 64.6], [1437507648.0, 29820000.0, 64.64], [1437509376.0, 29840000.0, 64.68], [1437511104.0, 29860000.0, 64.72], [1437512832.0, 29880000.0, 64.75999999999999], [1437514560.0, 29900000.0, 64.80000000000001], [1437516288.0, 29920000.0, 64.84], [1437518016.0, 29940000.0, 64.88], [1437519744.0, 29960000.0, 64.92], [1437521472.0, 29980000.0, 64.96000000000001], [1437523200.0, 30000000.0, 65.0], [1437524928.0, 30020000.0, 65.03999999999999], [1437526656.0, 30040000.0, 65.08], [1437528384.0, 30060000.0, 65.12], [1437530112.0, 30080000.0, 65.16], [1437531840.0, 30100000.0, 65.19999999999999], [1437533568.0, 30120000.0, 65.24000000000001], [1437535296.0, 30140000.0, 65.28], [1437537024.0, 30160000.0, 65.32], [1437538752.0, 30180000.0, 65.36], [1437540480.0, 30200000.0, 65.4], [1437542208.0, 30220000.0, 65.44], [1437543936.0, 30240000.0, 65.48], [1437545664.0, 30260000.0, 65.52], [1437547392.0, 30280000.0, 65.56], [1437549120.0, 30300000.0, 65.6], [1437550848.0, 30320000.0, 65.64], [1437552576.0, 30340000.0, 65.67999999999999], [1437554304.0, 30360000.0, 65.72], [1437556032.0, 30380000.0, 65.75999999999999], [1437557760.0, 30400000.0, 65.8], [1437559488.0, 30420000.0, 65.84], [1437561216.0, 30440000.0, 65.88], [1437562944.0, 30460000.0, 65.91999999999999], [1437564672.0, 30480000.0, 65.96000000000001], [1437566400.0, 30500000.0, 66.0], [1437568128.0, 30520000.0, 66.03999999999999], [1437569856.0, 30540000.0, 66.08], [1437571584.0, 30560000.0, 66.12], [1437573312.0, 30580000.0, 66.16], [1437575040.0, 30600000.0, 66.2], [1437576768.0, 30620000.0, 66.24], [1437578496.0, 30640000.0, 66.28], [1437580224.0, 30660000.0, 66.32], [1437581952.0, 30680000.0, 66.36], [1437583680.0, 30700000.0, 66.4], [1437585408.0, 30720000.0, 66.44], [1437587136.0, 30740000.0, 66.47999999999999], [1437588864.0, 30760000.0, 66.52000000000001], [1437590592.0, 30780000.0, 66.56], [1437592320.0, 30800000.0, 66.6], [1437594048.0, 30820000.0, 66.64], [1437595776.0, 30840000.0, 66.68], [1437597504.0, 30860000.0, 66.72], [1437599232.0, 30880000.0, 66.76], [1437600960.0, 30900000.0, 66.8], [1437602688.0, 30920000.0, 66.84], [1437604416.0, 30940000.0, 66.88], [1437606144.0, 30960000.0, 66.92], [1437607872.0, 30980000.0, 66.96], [1437609600.0, 31000000.0, 67.0], [1437611328.0, 31020000.0, 67.03999999999999], [1437613056.0, 31040000.0, 67.08], [1437614784.0, 31060000.0, 67.12], [1437616512.0, 31080000.0, 67.16], [1437618240.0, 31100000.0, 67.19999999999999], [1437619968.0, 31120000.0, 67.24000000000001], [1437621696.0, 31140000.0, 67.28], [1437623424.0, 31160000.0, 67.32], [1437625152.0, 31180000.0, 67.36], [1437626880.0, 31200000.0, 67.4], [1437628608.0, 31220000.0, 67.44], [1437630336.0, 31240000.0, 67.48], [1437632064.0, 31260000.0, 67.52], [1437633792.0, 31280000.0, 67.56], [1437635520.0, 31300000.0, 67.6], [1437637248.0, 31320000.0, 67.64], [1437638976.0, 31340000.0, 67.68], [1437640704.0, 31360000.0, 67.72], [1437642432.0, 31380000.0, 67.75999999999999], [1437644160.0, 31400000.0, 67.80000000000001], [1437645888.0, 31420000.0, 67.84], [1437647616.0, 31440000.0, 67.88], [1437649344.0, 31460000.0, 67.92], [1437651072.0, 31480000.0, 67.96000000000001], [1437652800.0, 31500000.0, 68.0], [1437654528.0, 31520000.0, 68.04], [1437656256.0, 31540000.0, 68.08], [1437657984.0, 31560000.0, 68.12], [1437659712.0, 31580000.0, 68.16], [1437661440.0, 31600000.0, 68.2], [1437663168.0, 31620000.0, 68.24], [1437664896.0, 31640000.0, 68.28], [1437666624.0, 31660000.0, 68.32], [1437668352.0, 31680000.0, 68.36], [1437670080.0, 31700000.0, 68.4], [1437671808.0, 31720000.0, 68.44], [1437673536.0, 31740000.0, 68.47999999999999], [1437675264.0, 31760000.0, 68.52000000000001], [1437676992.0, 31780000.0, 68.56], [1437678720.0, 31800000.0, 68.6], [1437680448.0, 31820000.0, 68.64], [1437682176.0, 31840000.0, 68.68], [1437683904.0, 31860000.0, 68.72], [1437685632.0, 31880000.0, 68.76], [1437687360.0, 31900000.0, 68.8], [1437689088.0, 31920000.0, 68.84], [1437690816.0, 31940000.0, 68.88], [1437692544.0, 31960000.0, 68.92], [1437694272.0, 31980000.0, 68.96000000000001], [1437696000.0, 32000000.0, 69.0], [1437697728.0, 32020000.0, 69.03999999999999], [1437699456.0, 32040000.0, 69.08], [1437701184.0, 32060000.0, 69.12], [1437702912.0, 32080000.0, 69.16], [1437704640.0, 32100000.0, 69.2], [1437706368.0, 32120000.0, 69.24000000000001], [1437708096.0, 32140000.0, 69.28], [1437709824.0, 32160000.0, 69.32000000000001], [1437711552.0, 32180000.0, 69.36], [1437713280.0, 32200000.0, 69.4], [1437715008.0, 32220000.0, 69.44], [1437716736.0, 32240000.0, 69.48], [1437718464.0, 32260000.0, 69.52], [1437720192.0, 32280000.0, 69.56], [1437721920.0, 32300000.0, 69.6], [1437723648.0, 32320000.0, 69.64], [1437725376.0, 32340000.0, 69.68], [1437727104.0, 32360000.0, 69.72], [1437728832.0, 32380000.0, 69.76], [1437730560.0, 32400000.0, 69.80000000000001], [1437732288.0, 32420000.0, 69.84], [1437734016.0, 32440000.0, 69.88000000000001], [1437735744.0, 32460000.0, 69.92], [1437737472.0, 32480000.0, 69.96000000000001], [1437739200.0, 32500000.0, 70.0], [1437740928.0, 32520000.0, 70.03999999999999], [1437742656.0, 32540000.0, 70.08], [1437744384.0, 32560000.0, 70.11999999999999], [1437746112.0, 32580000.0, 70.16], [1437747840.0, 32600000.0, 70.19999999999999], [1437749568.0, 32620000.0, 70.24], [1437751296.0, 32640000.0, 70.28], [1437753024.0, 32660000.0, 70.32], [1437754752.0, 32680000.0, 70.36], [1437756480.0, 32700000.0, 70.4], [1437758208.0, 32720000.0, 70.44], [1437759936.0, 32740000.0, 70.48], [1437761664.0, 32760000.0, 70.52], [1437763392.0, 32780000.0, 70.56], [1437765120.0, 32800000.0, 70.6], [1437766848.0, 32820000.0, 70.64], [1437768576.0, 32840000.0, 70.67999999999999], [1437770304.0, 32860000.0, 70.72], [1437772032.0, 32880000.0, 70.75999999999999], [1437773760.0, 32900000.0, 70.8], [1437775488.0, 32920000.0, 70.84], [1437777216.0, 32940000.0, 70.88], [1437778944.0, 32960000.0, 70.92], [1437780672.0, 32980000.0, 70.96000000000001], [1437782400.0, 33000000.0, 71.0], [1437784128.0, 33020000.0, 71.04], [1437785856.0, 33040000.0, 71.08], [1437787584.0, 33060000.0, 71.12], [1437789312.0, 33080000.0, 71.16], [1437791040.0, 33100000.0, 71.2], [1437792768.0, 33120000.0, 71.24], [1437794496.0, 33140000.0, 71.28], [1437796224.0, 33160000.0, 71.32], [1437797952.0, 33180000.0, 71.36], [1437799680.0, 33200000.0, 71.39999999999999], [1437801408.0, 33220000.0, 71.44], [1437803136.0, 33240000.0, 71.47999999999999], [1437804864.0, 33260000.0, 71.52], [1437806592.0, 33280000.0, 71.56], [1437808320.0, 33300000.0, 71.6], [1437810048.0, 33320000.0, 71.64], [1437811776.0, 33340000.0, 71.68], [1437813504.0, 33360000.0, 71.72], [1437815232.0, 33380000.0, 71.76], [1437816960.0, 33400000.0, 71.8], [1437818688.0, 33420000.0, 71.84], [1437820416.0, 33440000.0, 71.88], [1437822144.0, 33460000.0, 71.92], [1437823872.0, 33480000.0, 71.96], [1437825600.0, 33500000.0, 72.0], [1437827328.0, 33520000.0, 72.03999999999999], [1437829056.0, 33540000.0, 72.08], [1437830784.0, 33560000.0, 72.12], [1437832512.0, 33580000.0, 72.16], [1437834240.0, 33600000.0, 72.2], [1437835968.0, 33620000.0, 72.24000000000001], [1437837696.0, 33640000.0, 72.28], [1437839424.0, 33660000.0, 72.32000000000001], [1437841152.0, 33680000.0, 72.36], [1437842880.0, 33700000.0, 72.4], [1437844608.0, 33720000.0, 72.44], [1437846336.0, 33740000.0, 72.48], [1437848064.0, 33760000.0, 72.52], [1437849792.0, 33780000.0, 72.56], [1437851520.0, 33800000.0, 72.6], [1437853248.0, 33820000.0, 72.64], [1437854976.0, 33840000.0, 72.67999999999999], [1437856704.0, 33860000.0, 72.72], [1437858432.0, 33880000.0, 72.75999999999999], [1437860160.0, 33900000.0, 72.8], [1437861888.0, 33920000.0, 72.84], [1437863616.0, 33940000.0, 72.88], [1437865344.0, 33960000.0, 72.92], [1437867072.0, 33980000.0, 72.96000000000001], [1437868800.0, 34000000.0, 73.0], [1437870528.0, 34020000.0, 73.04], [1437872256.0, 34040000.0, 73.08], [1437873984.0, 34060000.0, 73.12], [1437875712.0, 34080000.0, 73.16], [1437877440.0, 34100000.0, 73.2], [1437879168.0, 34120000.0, 73.24], [1437880896.0, 34140000.0, 73.28], [1437882624.0, 34160000.0, 73.32], [1437884352.0, 34180000.0, 73.36], [1437886080.0, 34200000.0, 73.4], [1437887808.0, 34220000.0, 73.44], [1437889536.0, 34240000.0, 73.48], [1437891264.0, 34260000.0, 73.52000000000001], [1437892992.0, 34280000.0, 73.56], [1437894720.0, 34300000.0, 73.60000000000001], [1437896448.0, 34320000.0, 73.64], [1437898176.0, 34340000.0, 73.68], [1437899904.0, 34360000.0, 73.72], [1437901632.0, 34380000.0, 73.76], [1437903360.0, 34400000.0, 73.8], [1437905088.0, 34420000.0, 73.84], [1437906816.0, 34440000.0, 73.88], [1437908544.0, 34460000.0, 73.92], [1437910272.0, 34480000.0, 73.96], [1437912000.0, 34500000.0, 74.0], [1437913728.0, 34520000.0, 74.03999999999999], [1437915456.0, 34540000.0, 74.08], [1437917184.0, 34560000.0, 74.12], [1437918912.0, 34580000.0, 74.16], [1437920640.0, 34600000.0, 74.2], [1437922368.0, 34620000.0, 74.24000000000001], [1437924096.0, 34640000.0, 74.28], [1437925824.0, 34660000.0, 74.32000000000001], [1437927552.0, 34680000.0, 74.36], [1437929280.0, 34700000.0, 74.4], [1437931008.0, 34720000.0, 74.44], [1437932736.0, 34740000.0, 74.48], [1437934464.0, 34760000.0, 74.52], [1437936192.0, 34780000.0, 74.56], [1437937920.0, 34800000.0, 74.6], [1437939648.0, 34820000.0, 74.64], [1437941376.0, 34840000.0, 74.68], [1437943104.0, 34860000.0, 74.72], [1437944832.0, 34880000.0, 74.76], [1437946560.0, 34900000.0, 74.80000000000001], [1437948288.0, 34920000.0, 74.84], [1437950016.0, 34940000.0, 74.88000000000001], [1437951744.0, 34960000.0, 74.92], [1437953472.0, 34980000.0, 74.96000000000001], [1437955200.0, 35000000.0, 75.0], [1437956928.0, 35020000.0, 75.03999999999999], [1437958656.0, 35040000.0, 75.08], [1437960384.0, 35060000.0, 75.11999999999999], [1437962112.0, 35080000.0, 75.16], [1437963840.0, 35100000.0, 75.19999999999999], [1437965568.0, 35120000.0, 75.24], [1437967296.0, 35140000.0, 75.28], [1437969024.0, 35160000.0, 75.32], [1437970752.0, 35180000.0, 75.36], [1437972480.0, 35200000.0, 75.4], [1437974208.0, 35220000.0, 75.44], [1437975936.0, 35240000.0, 75.48], [1437977664.0, 35260000.0, 75.52], [1437979392.0, 35280000.0, 75.56], [1437981120.0, 35300000.0, 75.6], [1437982848.0, 35320000.0, 75.64], [1437984576.0, 35340000.0, 75.67999999999999], [1437986304.0, 35360000.0, 75.72], [1437988032.0, 35380000.0, 75.75999999999999], [1437989760.0, 35400000.0, 75.8], [1437991488.0, 35420000.0, 75.84], [1437993216.0, 35440000.0, 75.88], [1437994944.0, 35460000.0, 75.92], [1437996672.0, 35480000.0, 75.96000000000001], [1437998400.0, 35500000.0, 76.0], [1438000128.0, 35520000.0, 76.04], [1438001856.0, 35540000.0, 76.08], [1438003584.0, 35560000.0, 76.12], [1438005312.0, 35580000.0, 76.16], [1438007040.0, 35600000.0, 76.2], [1438008768.0, 35620000.0, 76.24], [1438010496.0, 35640000.0, 76.28], [1438012224.0, 35660000.0, 76.32], [1438013952.0, 35680000.0, 76.36], [1438015680.0, 35700000.0, 76.39999999999999], [1438017408.0, 35720000.0, 76.44], [1438019136.0, 35740000.0, 76.47999999999999], [1438020864.0, 35760000.0, 76.52], [1438022592.0, 35780000.0, 76.56], [1438024320.0, 35800000.0, 76.6], [1438026048.0, 35820000.0, 76.64], [1438027776.0, 35840000.0, 76.68], [1438029504.0, 35860000.0, 76.72], [1438031232.0, 35880000.0, 76.76], [1438032960.0, 35900000.0, 76.8], [1438034688.0, 35920000.0, 76.84], [1438036416.0, 35940000.0, 76.88], [1438038144.0, 35960000.0, 76.92], [1438039872.0, 35980000.0, 76.96], [1438041600.0, 36000000.0, 77.0], [1438043328.0, 36020000.0, 77.03999999999999], [1438045056.0, 36040000.0, 77.08], [1438046784.0, 36060000.0, 77.12], [1438048512.0, 36080000.0, 77.16], [1438050240.0, 36100000.0, 77.2], [1438051968.0, 36120000.0, 77.24000000000001], [1438053696.0, 36140000.0, 77.28], [1438055424.0, 36160000.0, 77.32000000000001], [1438057152.0, 36180000.0, 77.36], [1438058880.0, 36200000.0, 77.4], [1438060608.0, 36220000.0, 77.44], [1438062336.0, 36240000.0, 77.48], [1438064064.0, 36260000.0, 77.52], [1438065792.0, 36280000.0, 77.56], [1438067520.0, 36300000.0, 77.6], [1438069248.0, 36320000.0, 77.64], [1438070976.0, 36340000.0, 77.67999999999999], [1438072704.0, 36360000.0, 77.72], [1438074432.0, 36380000.0, 77.75999999999999], [1438076160.0, 36400000.0, 77.8], [1438077888.0, 36420000.0, 77.84], [1438079616.0, 36440000.0, 77.88], [1438081344.0, 36460000.0, 77.92], [1438083072.0, 36480000.0, 77.96000000000001], [1438084800.0, 36500000.0, 78.0], [1438086528.0, 36520000.0, 78.04], [1438088256.0, 36540000.0, 78.08], [1438089984.0, 36560000.0, 78.12], [1438091712.0, 36580000.0, 78.16], [1438093440.0, 36600000.0, 78.2], [1438095168.0, 36620000.0, 78.24], [1438096896.0, 36640000.0, 78.28], [1438098624.0, 36660000.0, 78.32], [1438100352.0, 36680000.0, 78.36], [1438102080.0, 36700000.0, 78.4], [1438103808.0, 36720000.0, 78.44], [1438105536.0, 36740000.0, 78.48], [1438107264.0, 36760000.0, 78.52000000000001], [1438108992.0, 36780000.0, 78.56], [1438110720.0, 36800000.0, 78.60000000000001], [1438112448.0, 36820000.0, 78.64], [1438114176.0, 36840000.0, 78.68], [1438115904.0, 36860000.0, 78.72], [1438117632.0, 36880000.0, 78.76], [1438119360.0, 36900000.0, 78.8], [1438121088.0, 36920000.0, 78.84], [1438122816.0, 36940000.0, 78.88], [1438124544.0, 36960000.0, 78.92], [1438126272.0, 36980000.0, 78.96], [1438128000.0, 37000000.0, 79.0], [1438129728.0, 37020000.0, 79.03999999999999], [1438131456.0, 37040000.0, 79.08], [1438133184.0, 37060000.0, 79.12], [1438134912.0, 37080000.0, 79.16], [1438136640.0, 37100000.0, 79.2], [1438138368.0, 37120000.0, 79.24000000000001], [1438140096.0, 37140000.0, 79.28], [1438141824.0, 37160000.0, 79.32000000000001], [1438143552.0, 37180000.0, 79.36], [1438145280.0, 37200000.0, 79.4], [1438147008.0, 37220000.0, 79.44], [1438148736.0, 37240000.0, 79.48], [1438150464.0, 37260000.0, 79.52], [1438152192.0, 37280000.0, 79.56], [1438153920.0, 37300000.0, 79.6], [1438155648.0, 37320000.0, 79.64], [1438157376.0, 37340000.0, 79.68], [1438159104.0, 37360000.0, 79.72], [1438160832.0, 37380000.0, 79.76], [1438162560.0, 37400000.0, 79.80000000000001], [1438164288.0, 37420000.0, 79.84], [1438166016.0, 37440000.0, 79.88000000000001], [1438167744.0, 37460000.0, 79.92], [1438169472.0, 37480000.0, 79.96000000000001], [1438171200.0, 37500000.0, 80.0], [1438172928.0, 37520000.0, 80.03999999999999], [1438174656.0, 37540000.0, 80.08], [1438176384.0, 37560000.0, 80.11999999999999], [1438178112.0, 37580000.0, 80.16], [1438179840.0, 37600000.0, 80.19999999999999], [1438181568.0, 37620000.0, 80.24], [1438183296.0, 37640000.0, 80.28], [1438185024.0, 37660000.0, 80.32], [1438186752.0, 37680000.0, 80.36], [1438188480.0, 37700000.0, 80.4], [1438190208.0, 37720000.0, 80.44], [1438191936.0, 37740000.0, 80.48], [1438193664.0, 37760000.0, 80.52], [1438195392.0, 37780000.0, 80.56], [1438197120.0, 37800000.0, 80.6], [1438198848.0, 37820000.0, 80.64], [1438200576.0, 37840000.0, 80.67999999999999], [1438202304.0, 37860000.0, 80.72], [1438204032.0, 37880000.0, 80.75999999999999], [1438205760.0, 37900000.0, 80.8], [1438207488.0, 37920000.0, 80.84], [1438209216.0, 37940000.0, 80.88], [1438210944.0, 37960000.0, 80.92], [1438212672.0, 37980000.0, 80.96000000000001], [1438214400.0, 38000000.0, 81.0], [1438216128.0, 38020000.0, 81.04], [1438217856.0, 38040000.0, 81.08], [1438219584.0, 38060000.0, 81.12], [1438221312.0, 38080000.0, 81.16], [1438223040.0, 38100000.0, 81.2], [1438224768.0, 38120000.0, 81.24], [1438226496.0, 38140000.0, 81.28], [1438228224.0, 38160000.0, 81.32], [1438229952.0, 38180000.0, 81.36], [1438231680.0, 38200000.0, 81.39999999999999], [1438233408.0, 38220000.0, 81.44], [1438235136.0, 38240000.0, 81.47999999999999], [1438236864.0, 38260000.0, 81.52], [1438238592.0, 38280000.0, 81.56], [1438240320.0, 38300000.0, 81.6], [1438242048.0, 38320000.0, 81.64], [1438243776.0, 38340000.0, 81.68], [1438245504.0, 38360000.0, 81.72], [1438247232.0, 38380000.0, 81.76], [1438248960.0, 38400000.0, 81.8], [1438250688.0, 38420000.0, 81.84], [1438252416.0, 38440000.0, 81.88], [1438254144.0, 38460000.0, 81.92], [1438255872.0, 38480000.0, 81.96], [1438257600.0, 38500000.0, 82.0], [1438259328.0, 38520000.0, 82.03999999999999], [1438261056.0, 38540000.0, 82.08], [1438262784.0, 38560000.0, 82.12], [1438264512.0, 38580000.0, 82.16], [1438266240.0, 38600000.0, 82.2], [1438267968.0, 38620000.0, 82.24000000000001], [1438269696.0, 38640000.0, 82.28], [1438271424.0, 38660000.0, 82.32000000000001], [1438273152.0, 38680000.0, 82.36], [1438274880.0, 38700000.0, 82.4], [1438276608.0, 38720000.0, 82.44], [1438278336.0, 38740000.0, 82.48], [1438280064.0, 38760000.0, 82.52], [1438281792.0, 38780000.0, 82.56], [1438283520.0, 38800000.0, 82.6], [1438285248.0, 38820000.0, 82.64], [1438286976.0, 38840000.0, 82.67999999999999], [1438288704.0, 38860000.0, 82.72], [1438290432.0, 38880000.0, 82.75999999999999], [1438292160.0, 38900000.0, 82.8], [1438293888.0, 38920000.0, 82.84], [1438295616.0, 38940000.0, 82.88], [1438297344.0, 38960000.0, 82.92], [1438299072.0, 38980000.0, 82.96000000000001], [1438300800.0, 39000000.0, 83.0], [1438302528.0, 39020000.0, 83.04], [1438304256.0, 39040000.0, 83.08], [1438305984.0, 39060000.0, 83.12], [1438307712.0, 39080000.0, 83.16], [1438309440.0, 39100000.0, 83.2], [1438311168.0, 39120000.0, 83.24], [1438312896.0, 39140000.0, 83.28], [1438314624.0, 39160000.0, 83.32], [1438316352.0, 39180000.0, 83.36], [1438318080.0, 39200000.0, 83.4], [1438319808.0, 39220000.0, 83.44], [1438321536.0, 39240000.0, 83.48], [1438323264.0, 39260000.0, 83.52000000000001], [1438324992.0, 39280000.0, 83.56], [1438326720.0, 39300000.0, 83.60000000000001], [1438328448.0, 39320000.0, 83.64], [1438330176.0, 39340000.0, 83.68], [1438331904.0, 39360000.0, 83.72], [1438333632.0, 39380000.0, 83.76], [1438335360.0, 39400000.0, 83.8], [1438337088.0, 39420000.0, 83.84], [1438338816.0, 39440000.0, 83.88], [1438340544.0, 39460000.0, 83.92], [1438342272.0, 39480000.0, 83.96], [1438344000.0, 39500000.0, 84.0], [1438345728.0, 39520000.0, 84.03999999999999], [1438347456.0, 39540000.0, 84.08], [1438349184.0, 39560000.0, 84.12], [1438350912.0, 39580000.0, 84.16], [1438352640.0, 39600000.0, 84.2], [1438354368.0, 39620000.0, 84.24000000000001], [1438356096.0, 39640000.0, 84.28], [1438357824.0, 39660000.0, 84.32000000000001], [1438359552.0, 39680000.0, 84.36], [1438361280.0, 39700000.0, 84.4], [1438363008.0, 39720000.0, 84.44], [1438364736.0, 39740000.0, 84.48], [1438366464.0, 39760000.0, 84.52], [1438368192.0, 39780000.0, 84.56], [1438369920.0, 39800000.0, 84.6], [1438371648.0, 39820000.0, 84.64], [1438373376.0, 39840000.0, 84.68], [1438375104.0, 39860000.0, 84.72], [1438376832.0, 39880000.0, 84.76], [1438378560.0, 39900000.0, 84.80000000000001], [1438380288.0, 39920000.0, 84.84], [1438382016.0, 39940000.0, 84.88000000000001], [1438383744.0, 39960000.0, 84.92], [1438385472.0, 39980000.0, 84.96000000000001], [1438387200.0, 40000000.0, 85.0], [1438388928.0, 40020000.0, 85.03999999999999], [1438390656.0, 40040000.0, 85.07999999999998], [1438392384.0, 40060000.0, 85.12], [1438394112.0, 40080000.0, 85.16], [1438395840.0, 40100000.0, 85.19999999999999], [1438397568.0, 40120000.0, 85.24], [1438399296.0, 40140000.0, 85.28], [1438401024.0, 40160000.0, 85.32], [1438402752.0, 40180000.0, 85.36], [1438404480.0, 40200000.0, 85.39999999999999], [1438406208.0, 40220000.0, 85.44], [1438407936.0, 40240000.0, 85.48], [1438409664.0, 40260000.0, 85.52], [1438411392.0, 40280000.0, 85.55999999999999], [1438413120.0, 40300000.0, 85.60000000000001], [1438414848.0, 40320000.0, 85.64], [1438416576.0, 40340000.0, 85.67999999999999], [1438418304.0, 40360000.0, 85.72], [1438420032.0, 40380000.0, 85.76], [1438421760.0, 40400000.0, 85.8], [1438423488.0, 40420000.0, 85.84], [1438425216.0, 40440000.0, 85.88], [1438426944.0, 40460000.0, 85.92], [1438428672.0, 40480000.0, 85.96000000000001], [1438430400.0, 40500000.0, 86.0], [1438432128.0, 40520000.0, 86.03999999999999], [1438433856.0, 40540000.0, 86.08000000000001], [1438435584.0, 40560000.0, 86.12], [1438437312.0, 40580000.0, 86.16], [1438439040.0, 40600000.0, 86.19999999999999], [1438440768.0, 40620000.0, 86.24000000000001], [1438442496.0, 40640000.0, 86.28], [1438444224.0, 40660000.0, 86.32], [1438445952.0, 40680000.0, 86.35999999999999], [1438447680.0, 40700000.0, 86.4], [1438449408.0, 40720000.0, 86.44], [1438451136.0, 40740000.0, 86.47999999999999], [1438452864.0, 40760000.0, 86.52], [1438454592.0, 40780000.0, 86.56], [1438456320.0, 40800000.0, 86.6], [1438458048.0, 40820000.0, 86.64], [1438459776.0, 40840000.0, 86.67999999999999], [1438461504.0, 40860000.0, 86.72], [1438463232.0, 40880000.0, 86.76], [1438464960.0, 40900000.0, 86.8], [1438466688.0, 40920000.0, 86.83999999999999], [1438468416.0, 40940000.0, 86.88000000000001], [1438470144.0, 40960000.0, 86.92], [1438471872.0, 40980000.0, 86.96], [1438473600.0, 41000000.0, 87.0], [1438475328.0, 41020000.0, 87.04], [1438477056.0, 41040000.0, 87.08], [1438478784.0, 41060000.0, 87.12], [1438480512.0, 41080000.0, 87.16], [1438482240.0, 41100000.0, 87.2], [1438483968.0, 41120000.0, 87.24000000000001], [1438485696.0, 41140000.0, 87.28], [1438487424.0, 41160000.0, 87.32], [1438489152.0, 41180000.0, 87.36000000000001], [1438490880.0, 41200000.0, 87.4], [1438492608.0, 41220000.0, 87.44], [1438494336.0, 41240000.0, 87.47999999999999], [1438496064.0, 41260000.0, 87.52000000000001], [1438497792.0, 41280000.0, 87.56], [1438499520.0, 41300000.0, 87.6], [1438501248.0, 41320000.0, 87.63999999999999], [1438502976.0, 41340000.0, 87.68], [1438504704.0, 41360000.0, 87.72], [1438506432.0, 41380000.0, 87.75999999999999], [1438508160.0, 41400000.0, 87.8], [1438509888.0, 41420000.0, 87.84], [1438511616.0, 41440000.0, 87.88], [1438513344.0, 41460000.0, 87.92], [1438515072.0, 41480000.0, 87.96], [1438516800.0, 41500000.0, 88.0], [1438518528.0, 41520000.0, 88.04], [1438520256.0, 41540000.0, 88.08], [1438521984.0, 41560000.0, 88.11999999999999], [1438523712.0, 41580000.0, 88.16000000000001], [1438525440.0, 41600000.0, 88.2], [1438527168.0, 41620000.0, 88.24], [1438528896.0, 41640000.0, 88.28], [1438530624.0, 41660000.0, 88.32000000000001], [1438532352.0, 41680000.0, 88.36], [1438534080.0, 41700000.0, 88.4], [1438535808.0, 41720000.0, 88.44], [1438537536.0, 41740000.0, 88.48], [1438539264.0, 41760000.0, 88.52000000000001], [1438540992.0, 41780000.0, 88.56], [1438542720.0, 41800000.0, 88.6], [1438544448.0, 41820000.0, 88.64000000000001], [1438546176.0, 41840000.0, 88.68], [1438547904.0, 41860000.0, 88.72], [1438549632.0, 41880000.0, 88.75999999999999], [1438551360.0, 41900000.0, 88.80000000000001], [1438553088.0, 41920000.0, 88.84], [1438554816.0, 41940000.0, 88.88], [1438556544.0, 41960000.0, 88.91999999999999], [1438558272.0, 41980000.0, 88.96000000000001], [1438560000.0, 42000000.0, 89.0], [1438561728.0, 42020000.0, 89.03999999999999], [1438563456.0, 42040000.0, 89.08], [1438565184.0, 42060000.0, 89.12], [1438566912.0, 42080000.0, 89.16], [1438568640.0, 42100000.0, 89.2], [1438570368.0, 42120000.0, 89.24], [1438572096.0, 42140000.0, 89.28], [1438573824.0, 42160000.0, 89.32000000000001], [1438575552.0, 42180000.0, 89.36], [1438577280.0, 42200000.0, 89.39999999999999], [1438579008.0, 42220000.0, 89.44000000000001], [1438580736.0, 42240000.0, 89.48], [1438582464.0, 42260000.0, 89.52], [1438584192.0, 42280000.0, 89.56], [1438585920.0, 42300000.0, 89.60000000000001], [1438587648.0, 42320000.0, 89.64], [1438589376.0, 42340000.0, 89.68], [1438591104.0, 42360000.0, 89.72], [1438592832.0, 42380000.0, 89.76], [1438594560.0, 42400000.0, 89.80000000000001], [1438596288.0, 42420000.0, 89.84], [1438598016.0, 42440000.0, 89.88], [1438599744.0, 42460000.0, 89.92000000000002], [1438601472.0, 42480000.0, 89.96000000000001], [1438603200.0, 42500000.0, 90.0], [1438604928.0, 42520000.0, 90.03999999999999], [1438606656.0, 42540000.0, 90.07999999999998], [1438608384.0, 42560000.0, 90.12], [1438610112.0, 42580000.0, 90.16], [1438611840.0, 42600000.0, 90.19999999999999], [1438613568.0, 42620000.0, 90.24], [1438615296.0, 42640000.0, 90.28], [1438617024.0, 42660000.0, 90.32], [1438618752.0, 42680000.0, 90.36], [1438620480.0, 42700000.0, 90.39999999999999], [1438622208.0, 42720000.0, 90.44], [1438623936.0, 42740000.0, 90.48], [1438625664.0, 42760000.0, 90.52], [1438627392.0, 42780000.0, 90.55999999999999], [1438629120.0, 42800000.0, 90.60000000000001], [1438630848.0, 42820000.0, 90.64], [1438632576.0, 42840000.0, 90.67999999999999], [1438634304.0, 42860000.0, 90.72], [1438636032.0, 42880000.0, 90.76], [1438637760.0, 42900000.0, 90.8], [1438639488.0, 42920000.0, 90.84], [1438641216.0, 42940000.0, 90.88], [1438642944.0, 42960000.0, 90.92], [1438644672.0, 42980000.0, 90.96000000000001], [1438646400.0, 43000000.0, 91.0], [1438648128.0, 43020000.0, 91.03999999999999], [1438649856.0, 43040000.0, 91.08000000000001], [1438651584.0, 43060000.0, 91.12], [1438653312.0, 43080000.0, 91.16], [1438655040.0, 43100000.0, 91.19999999999999], [1438656768.0, 43120000.0, 91.24000000000001], [1438658496.0, 43140000.0, 91.28], [1438660224.0, 43160000.0, 91.32], [1438661952.0, 43180000.0, 91.35999999999999], [1438663680.0, 43200000.0, 91.4], [1438665408.0, 43220000.0, 91.44], [1438667136.0, 43240000.0, 91.47999999999999], [1438668864.0, 43260000.0, 91.52], [1438670592.0, 43280000.0, 91.56], [1438672320.0, 43300000.0, 91.6], [1438674048.0, 43320000.0, 91.64], [1438675776.0, 43340000.0, 91.67999999999999], [1438677504.0, 43360000.0, 91.72], [1438679232.0, 43380000.0, 91.76], [1438680960.0, 43400000.0, 91.8], [1438682688.0, 43420000.0, 91.83999999999999], [1438684416.0, 43440000.0, 91.88000000000001], [1438686144.0, 43460000.0, 91.92], [1438687872.0, 43480000.0, 91.96], [1438689600.0, 43500000.0, 92.0], [1438691328.0, 43520000.0, 92.04], [1438693056.0, 43540000.0, 92.08], [1438694784.0, 43560000.0, 92.12], [1438696512.0, 43580000.0, 92.16], [1438698240.0, 43600000.0, 92.2], [1438699968.0, 43620000.0, 92.24000000000001], [1438701696.0, 43640000.0, 92.28], [1438703424.0, 43660000.0, 92.32], [1438705152.0, 43680000.0, 92.36000000000001], [1438706880.0, 43700000.0, 92.4], [1438708608.0, 43720000.0, 92.44], [1438710336.0, 43740000.0, 92.47999999999999], [1438712064.0, 43760000.0, 92.52000000000001], [1438713792.0, 43780000.0, 92.56], [1438715520.0, 43800000.0, 92.6], [1438717248.0, 43820000.0, 92.63999999999999], [1438718976.0, 43840000.0, 92.68], [1438720704.0, 43860000.0, 92.72], [1438722432.0, 43880000.0, 92.75999999999999], [1438724160.0, 43900000.0, 92.8], [1438725888.0, 43920000.0, 92.84], [1438727616.0, 43940000.0, 92.88], [1438729344.0, 43960000.0, 92.92], [1438731072.0, 43980000.0, 92.96], [1438732800.0, 44000000.0, 93.0], [1438734528.0, 44020000.0, 93.04], [1438736256.0, 44040000.0, 93.08], [1438737984.0, 44060000.0, 93.11999999999999], [1438739712.0, 44080000.0, 93.16000000000001], [1438741440.0, 44100000.0, 93.2], [1438743168.0, 44120000.0, 93.24], [1438744896.0, 44140000.0, 93.28], [1438746624.0, 44160000.0, 93.32000000000001], [1438748352.0, 44180000.0, 93.36], [1438750080.0, 44200000.0, 93.4], [1438751808.0, 44220000.0, 93.44], [1438753536.0, 44240000.0, 93.48], [1438755264.0, 44260000.0, 93.52000000000001], [1438756992.0, 44280000.0, 93.56], [1438758720.0, 44300000.0, 93.6], [1438760448.0, 44320000.0, 93.64000000000001], [1438762176.0, 44340000.0, 93.68], [1438763904.0, 44360000.0, 93.72], [1438765632.0, 44380000.0, 93.75999999999999], [1438767360.0, 44400000.0, 93.80000000000001], [1438769088.0, 44420000.0, 93.84], [1438770816.0, 44440000.0, 93.88], [1438772544.0, 44460000.0, 93.91999999999999], [1438774272.0, 44480000.0, 93.96000000000001], [1438776000.0, 44500000.0, 94.0], [1438777728.0, 44520000.0, 94.03999999999999], [1438779456.0, 44540000.0, 94.08], [1438781184.0, 44560000.0, 94.12], [1438782912.0, 44580000.0, 94.16], [1438784640.0, 44600000.0, 94.2], [1438786368.0, 44620000.0, 94.24], [1438788096.0, 44640000.0, 94.28], [1438789824.0, 44660000.0, 94.32000000000001], [1438791552.0, 44680000.0, 94.36], [1438793280.0, 44700000.0, 94.39999999999999], [1438795008.0, 44720000.0, 94.44000000000001], [1438796736.0, 44740000.0, 94.48], [1438798464.0, 44760000.0, 94.52], [1438800192.0, 44780000.0, 94.56], [1438801920.0, 44800000.0, 94.60000000000001], [1438803648.0, 44820000.0, 94.64], [1438805376.0, 44840000.0, 94.68], [1438807104.0, 44860000.0, 94.72], [1438808832.0, 44880000.0, 94.76], [1438810560.0, 44900000.0, 94.80000000000001], [1438812288.0, 44920000.0, 94.84], [1438814016.0, 44940000.0, 94.88], [1438815744.0, 44960000.0, 94.92000000000002], [1438817472.0, 44980000.0, 94.96000000000001], [1438819200.0, 45000000.0, 95.0], [1438820928.0, 45020000.0, 95.03999999999999], [1438822656.0, 45040000.0, 95.07999999999998], [1438824384.0, 45060000.0, 95.12], [1438826112.0, 45080000.0, 95.16], [1438827840.0, 45100000.0, 95.19999999999999], [1438829568.0, 45120000.0, 95.24], [1438831296.0, 45140000.0, 95.28], [1438833024.0, 45160000.0, 95.32], [1438834752.0, 45180000.0, 95.36], [1438836480.0, 45200000.0, 95.39999999999999], [1438838208.0, 45220000.0, 95.44], [1438839936.0, 45240000.0, 95.48], [1438841664.0, 45260000.0, 95.52], [1438843392.0, 45280000.0, 95.55999999999999], [1438845120.0, 45300000.0, 95.60000000000001], [1438846848.0, 45320000.0, 95.64], [1438848576.0, 45340000.0, 95.67999999999999], [1438850304.0, 45360000.0, 95.72], [1438852032.0, 45380000.0, 95.76], [1438853760.0, 45400000.0, 95.8], [1438855488.0, 45420000.0, 95.84], [1438857216.0, 45440000.0, 95.88], [1438858944.0, 45460000.0, 95.92], [1438860672.0, 45480000.0, 95.96000000000001], [1438862400.0, 45500000.0, 96.0], [1438864128.0, 45520000.0, 96.03999999999999], [1438865856.0, 45540000.0, 96.08000000000001], [1438867584.0, 45560000.0, 96.12], [1438869312.0, 45580000.0, 96.16], [1438871040.0, 45600000.0, 96.19999999999999], [1438872768.0, 45620000.0, 96.24000000000001], [1438874496.0, 45640000.0, 96.28], [1438876224.0, 45660000.0, 96.32], [1438877952.0, 45680000.0, 96.35999999999999], [1438879680.0, 45700000.0, 96.4], [1438881408.0, 45720000.0, 96.44], [1438883136.0, 45740000.0, 96.47999999999999], [1438884864.0, 45760000.0, 96.52], [1438886592.0, 45780000.0, 96.56], [1438888320.0, 45800000.0, 96.6], [1438890048.0, 45820000.0, 96.64], [1438891776.0, 45840000.0, 96.67999999999999], [1438893504.0, 45860000.0, 96.72], [1438895232.0, 45880000.0, 96.76], [1438896960.0, 45900000.0, 96.8], [1438898688.0, 45920000.0, 96.83999999999999], [1438900416.0, 45940000.0, 96.88000000000001], [1438902144.0, 45960000.0, 96.92], [1438903872.0, 45980000.0, 96.96], [1438905600.0, 46000000.0, 97.0], [1438907328.0, 46020000.0, 97.04], [1438909056.0, 46040000.0, 97.08], [1438910784.0, 46060000.0, 97.12], [1438912512.0, 46080000.0, 97.16], [1438914240.0, 46100000.0, 97.2], [1438915968.0, 46120000.0, 97.24000000000001], [1438917696.0, 46140000.0, 97.28], [1438919424.0, 46160000.0, 97.32], [1438921152.0, 46180000.0, 97.36000000000001], [1438922880.0, 46200000.0, 97.4], [1438924608.0, 46220000.0, 97.44], [1438926336.0, 46240000.0, 97.47999999999999], [1438928064.0, 46260000.0, 97.52000000000001], [1438929792.0, 46280000.0, 97.56], [1438931520.0, 46300000.0, 97.6], [1438933248.0, 46320000.0, 97.63999999999999], [1438934976.0, 46340000.0, 97.68], [1438936704.0, 46360000.0, 97.72], [1438938432.0, 46380000.0, 97.75999999999999], [1438940160.0, 46400000.0, 97.8], [1438941888.0, 46420000.0, 97.84], [1438943616.0, 46440000.0, 97.88], [1438945344.0, 46460000.0, 97.92], [1438947072.0, 46480000.0, 97.96], [1438948800.0, 46500000.0, 98.0], [1438950528.0, 46520000.0, 98.04], [1438952256.0, 46540000.0, 98.08], [1438953984.0, 46560000.0, 98.11999999999999], [1438955712.0, 46580000.0, 98.16000000000001], [1438957440.0, 46600000.0, 98.2], [1438959168.0, 46620000.0, 98.24], [1438960896.0, 46640000.0, 98.28], [1438962624.0, 46660000.0, 98.32000000000001], [1438964352.0, 46680000.0, 98.36], [1438966080.0, 46700000.0, 98.4], [1438967808.0, 46720000.0, 98.44], [1438969536.0, 46740000.0, 98.48], [1438971264.0, 46760000.0, 98.52000000000001], [1438972992.0, 46780000.0, 98.56], [1438974720.0, 46800000.0, 98.6], [1438976448.0, 46820000.0, 98.64000000000001], [1438978176.0, 46840000.0, 98.68], [1438979904.0, 46860000.0, 98.72], [1438981632.0, 46880000.0, 98.75999999999999], [1438983360.0, 46900000.0, 98.80000000000001], [1438985088.0, 46920000.0, 98.84], [1438986816.0, 46940000.0, 98.88], [1438988544.0, 46960000.0, 98.91999999999999], [1438990272.0, 46980000.0, 98.96000000000001], [1438992000.0, 47000000.0, 99.0], [1438993728.0, 47020000.0, 99.03999999999999], [1438995456.0, 47040000.0, 99.08], [1438997184.0, 47060000.0, 99.12], [1438998912.0, 47080000.0, 99.16], [1439000640.0, 47100000.0, 99.2], [1439002368.0, 47120000.0, 99.24], [1439004096.0, 47140000.0, 99.28], [1439005824.0, 47160000.0, 99.32000000000001], [1439007552.0, 47180000.0, 99.36], [1439009280.0, 47200000.0, 99.39999999999999], [1439011008.0, 47220000.0, 99.44000000000001], [1439012736.0, 47240000.0, 99.48], [1439014464.0, 47260000.0, 99.52], [1439016192.0, 47280000.0, 99.56], [1439017920.0, 47300000.0, 99.60000000000001], [1439019648.0, 47320000.0, 99.64], [1439021376.0, 47340000.0, 99.68], [1439023104.0, 47360000.0, 99.72], [1439024832.0, 47380000.0, 99.76], [1439026560.0, 47400000.0, 99.80000000000001], [1439028288.0, 47420000.0, 99.84], [1439030016.0, 47440000.0, 99.88], [1439031744.0, 47460000.0, 99.92000000000002], [1439033472.0, 47480000.0, 99.96000000000001], [1439035200.0, 47500000.0, 100.0], [1439036928.0, 47520000.0, 100.03999999999999], [1439038656.0, 47540000.0, 100.07999999999998], [1439040384.0, 47560000.0, 100.12], [1439042112.0, 47580000.0, 100.16], [1439043840.0, 47600000.0, 100.19999999999999], [1439045568.0, 47620000.0, 100.24], [1439047296.0, 47640000.0, 100.28], [1439049024.0, 47660000.0, 100.32], [1439050752.0, 47680000.0, 100.36], [1439052480.0, 47700000.0, 100.39999999999999], [1439054208.0, 47720000.0, 100.44], [1439055936.0, 47740000.0, 100.48], [1439057664.0, 47760000.0, 100.52], [1439059392.0, 47780000.0, 100.55999999999999], [1439061120.0, 47800000.0, 100.60000000000001], [1439062848.0, 47820000.0, 100.64], [1439064576.0, 47840000.0, 100.67999999999999], [1439066304.0, 47860000.0, 100.72], [1439068032.0, 47880000.0, 100.76], [1439069760.0, 47900000.0, 100.8], [1439071488.0, 47920000.0, 100.84], [1439073216.0, 47940000.0, 100.88], [1439074944.0, 47960000.0, 100.92], [1439076672.0, 47980000.0, 100.96000000000001], [1439078400.0, 48000000.0, 101.0], [1439080128.0, 48020000.0, 101.03999999999999], [1439081856.0, 48040000.0, 101.08000000000001], [1439083584.0, 48060000.0, 101.12], [1439085312.0, 48080000.0, 101.16], [1439087040.0, 48100000.0, 101.19999999999999], [1439088768.0, 48120000.0, 101.24000000000001], [1439090496.0, 48140000.0, 101.28], [1439092224.0, 48160000.0, 101.32], [1439093952.0, 48180000.0, 101.35999999999999], [1439095680.0, 48200000.0, 101.4], [1439097408.0, 48220000.0, 101.44], [1439099136.0, 48240000.0, 101.47999999999999], [1439100864.0, 48260000.0, 101.52], [1439102592.0, 48280000.0, 101.56], [1439104320.0, 48300000.0, 101.6], [1439106048.0, 48320000.0, 101.64], [1439107776.0, 48340000.0, 101.67999999999999], [1439109504.0, 48360000.0, 101.72], [1439111232.0, 48380000.0, 101.76], [1439112960.0, 48400000.0, 101.8], [1439114688.0, 48420000.0, 101.83999999999999], [1439116416.0, 48440000.0, 101.88000000000001], [1439118144.0, 48460000.0, 101.92], [1439119872.0, 48480000.0, 101.96], [1439121600.0, 48500000.0, 102.0], [1439123328.0, 48520000.0, 102.04], [1439125056.0, 48540000.0, 102.08], [1439126784.0, 48560000.0, 102.12], [1439128512.0, 48580000.0, 102.16], [1439130240.0, 48600000.0, 102.2], [1439131968.0, 48620000.0, 102.24000000000001], [1439133696.0, 48640000.0, 102.28], [1439135424.0, 48660000.0, 102.32], [1439137152.0, 48680000.0, 102.36000000000001], [1439138880.0, 48700000.0, 102.4], [1439140608.0, 48720000.0, 102.44], [1439142336.0, 48740000.0, 102.47999999999999], [1439144064.0, 48760000.0, 102.52000000000001], [1439145792.0, 48780000.0, 102.56], [1439147520.0, 48800000.0, 102.6], [1439149248.0, 48820000.0, 102.63999999999999], [1439150976.0, 48840000.0, 102.68], [1439152704.0, 48860000.0, 102.72], [1439154432.0, 48880000.0, 102.75999999999999], [1439156160.0, 48900000.0, 102.8], [1439157888.0, 48920000.0, 102.84], [1439159616.0, 48940000.0, 102.88], [1439161344.0, 48960000.0, 102.92], [1439163072.0, 48980000.0, 102.96], [1439164800.0, 49000000.0, 103.0], [1439166528.0, 49020000.0, 103.04], [1439168256.0, 49040000.0, 103.08], [1439169984.0, 49060000.0, 103.11999999999999], [1439171712.0, 49080000.0, 103.16000000000001], [1439173440.0, 49100000.0, 103.2], [1439175168.0, 49120000.0, 103.24], [1439176896.0, 49140000.0, 103.28], [1439178624.0, 49160000.0, 103.32000000000001], [1439180352.0, 49180000.0, 103.36], [1439182080.0, 49200000.0, 103.4], [1439183808.0, 49220000.0, 103.44], [1439185536.0, 49240000.0, 103.48], [1439187264.0, 49260000.0, 103.52000000000001], [1439188992.0, 49280000.0, 103.56], [1439190720.0, 49300000.0, 103.6], [1439192448.0, 49320000.0, 103.64000000000001], [1439194176.0, 49340000.0, 103.68], [1439195904.0, 49360000.0, 103.72], [1439197632.0, 49380000.0, 103.75999999999999], [1439199360.0, 49400000.0, 103.80000000000001], [1439201088.0, 49420000.0, 103.84], [1439202816.0, 49440000.0, 103.88], [1439204544.0, 49460000.0, 103.91999999999999], [1439206272.0, 49480000.0, 103.96000000000001], [1439208000.0, 49500000.0, 104.0], [1439209728.0, 49520000.0, 104.03999999999999], [1439211456.0, 49540000.0, 104.08], [1439213184.0, 49560000.0, 104.12], [1439214912.0, 49580000.0, 104.16], [1439216640.0, 49600000.0, 104.2], [1439218368.0, 49620000.0, 104.24], [1439220096.0, 49640000.0, 104.28], [1439221824.0, 49660000.0, 104.32000000000001], [1439223552.0, 49680000.0, 104.36], [1439225280.0, 49700000.0, 104.39999999999999], [1439227008.0, 49720000.0, 104.44000000000001], [1439228736.0, 49740000.0, 104.48], [1439230464.0, 49760000.0, 104.52], [1439232192.0, 49780000.0, 104.56], [1439233920.0, 49800000.0, 104.60000000000001], [1439235648.0, 49820000.0, 104.64], [1439237376.0, 49840000.0, 104.68], [1439239104.0, 49860000.0, 104.72], [1439240832.0, 49880000.0, 104.76], [1439242560.0, 49900000.0, 104.80000000000001], [1439244288.0, 49920000.0, 104.84], [1439246016.0, 49940000.0, 104.88], [1439247744.0, 49960000.0, 104.92000000000002], [1439249472.0, 49980000.0, 104.96000000000001], [1439251200.0, 50000000.0, 105.0], [1439252928.0, 50020000.0, 105.03999999999999], [1439254656.0, 50040000.0, 105.07999999999998], [1439256384.0, 50060000.0, 105.12], [1439258112.0, 50080000.0, 105.16], [1439259840.0, 50100000.0, 105.19999999999999], [1439261568.0, 50120000.0, 105.24], [1439263296.0, 50140000.0, 105.28], [1439265024.0, 50160000.0, 105.32], [1439266752.0, 50180000.0, 105.36], [1439268480.0, 50200000.0, 105.39999999999999], [1439270208.0, 50220000.0, 105.44], [1439271936.0, 50240000.0, 105.48], [1439273664.0, 50260000.0, 105.52], [1439275392.0, 50280000.0, 105.55999999999999], [1439277120.0, 50300000.0, 105.60000000000001], [1439278848.0, 50320000.0, 105.64], [1439280576.0, 50340000.0, 105.67999999999999], [1439282304.0, 50360000.0, 105.72], [1439284032.0, 50380000.0, 105.76], [1439285760.0, 50400000.0, 105.8], [1439287488.0, 50420000.0, 105.84], [1439289216.0, 50440000.0, 105.88], [1439290944.0, 50460000.0, 105.92], [1439292672.0, 50480000.0, 105.96000000000001], [1439294400.0, 50500000.0, 106.0], [1439296128.0, 50520000.0, 106.03999999999999], [1439297856.0, 50540000.0, 106.08000000000001], [1439299584.0, 50560000.0, 106.12], [1439301312.0, 50580000.0, 106.16], [1439303040.0, 50600000.0, 106.19999999999999], [1439304768.0, 50620000.0, 106.24000000000001], [1439306496.0, 50640000.0, 106.28], [1439308224.0, 50660000.0, 106.32], [1439309952.0, 50680000.0, 106.35999999999999], [1439311680.0, 50700000.0, 106.4], [1439313408.0, 50720000.0, 106.44], [1439315136.0, 50740000.0, 106.47999999999999], [1439316864.0, 50760000.0, 106.52], [1439318592.0, 50780000.0, 106.56], [1439320320.0, 50800000.0, 106.6], [1439322048.0, 50820000.0, 106.64], [1439323776.0, 50840000.0, 106.67999999999999], [1439325504.0, 50860000.0, 106.72], [1439327232.0, 50880000.0, 106.76], [1439328960.0, 50900000.0, 106.8], [1439330688.0, 50920000.0, 106.83999999999999], [1439332416.0, 50940000.0, 106.88000000000001], [1439334144.0, 50960000.0, 106.92], [1439335872.0, 50980000.0, 106.96], [1439337600.0, 51000000.0, 107.0], [1439339328.0, 51020000.0, 107.04], [1439341056.0, 51040000.0, 107.08], [1439342784.0, 51060000.0, 107.12], [1439344512.0, 51080000.0, 107.16], [1439346240.0, 51100000.0, 107.2], [1439347968.0, 51120000.0, 107.24000000000001], [1439349696.0, 51140000.0, 107.28], [1439351424.0, 51160000.0, 107.32], [1439353152.0, 51180000.0, 107.36000000000001], [1439354880.0, 51200000.0, 107.4], [1439356608.0, 51220000.0, 107.44], [1439358336.0, 51240000.0, 107.47999999999999], [1439360064.0, 51260000.0, 107.52000000000001], [1439361792.0, 51280000.0, 107.56], [1439363520.0, 51300000.0, 107.6], [1439365248.0, 51320000.0, 107.63999999999999], [1439366976.0, 51340000.0, 107.68], [1439368704.0, 51360000.0, 107.72], [1439370432.0, 51380000.0, 107.75999999999999], [1439372160.0, 51400000.0, 107.8], [1439373888.0, 51420000.0, 107.84], [1439375616.0, 51440000.0, 107.88], [1439377344.0, 51460000.0, 107.92], [1439379072.0, 51480000.0, 107.96], [1439380800.0, 51500000.0, 108.0], [1439382528.0, 51520000.0, 108.04], [1439384256.0, 51540000.0, 108.08], [1439385984.0, 51560000.0, 108.11999999999999], [1439387712.0, 51580000.0, 108.16000000000001], [1439389440.0, 51600000.0, 108.2], [1439391168.0, 51620000.0, 108.24], [1439392896.0, 51640000.0, 108.28], [1439394624.0, 51660000.0, 108.32000000000001], [1439396352.0, 51680000.0, 108.36], [1439398080.0, 51700000.0, 108.4], [1439399808.0, 51720000.0, 108.44], [1439401536.0, 51740000.0, 108.48], [1439403264.0, 51760000.0, 108.52000000000001], [1439404992.0, 51780000.0, 108.56], [1439406720.0, 51800000.0, 108.6], [1439408448.0, 51820000.0, 108.64000000000001], [1439410176.0, 51840000.0, 108.68], [1439411904.0, 51860000.0, 108.72], [1439413632.0, 51880000.0, 108.75999999999999], [1439415360.0, 51900000.0, 108.80000000000001], [1439417088.0, 51920000.0, 108.84], [1439418816.0, 51940000.0, 108.88], [1439420544.0, 51960000.0, 108.91999999999999], [1439422272.0, 51980000.0, 108.96000000000001], [1439424000.0, 52000000.0, 109.0], [1439425728.0, 52020000.0, 109.03999999999999], [1439427456.0, 52040000.0, 109.08], [1439429184.0, 52060000.0, 109.12], [1439430912.0, 52080000.0, 109.16], [1439432640.0, 52100000.0, 109.2], [1439434368.0, 52120000.0, 109.24], [1439436096.0, 52140000.0, 109.28], [1439437824.0, 52160000.0, 109.32000000000001], [1439439552.0, 52180000.0, 109.36], [1439441280.0, 52200000.0, 109.39999999999999], [1439443008.0, 52220000.0, 109.44000000000001], [1439444736.0, 52240000.0, 109.48], [1439446464.0, 52260000.0, 109.52], [1439448192.0, 52280000.0, 109.56], [1439449920.0, 52300000.0, 109.60000000000001], [1439451648.0, 52320000.0, 109.64], [1439453376.0, 52340000.0, 109.68], [1439455104.0, 52360000.0, 109.72], [1439456832.0, 52380000.0, 109.76], [1439458560.0, 52400000.0, 109.80000000000001], [1439460288.0, 52420000.0, 109.84], [1439462016.0, 52440000.0, 109.88], [1439463744.0, 52460000.0, 109.92000000000002], [1439465472.0, 52480000.0, 109.96000000000001], [1439467200.0, 52500000.0, 110.0], [1439468928.0, 52520000.0, 110.03999999999999], [1439470656.0, 52540000.0, 110.07999999999998], [1439472384.0, 52560000.0, 110.12], [1439474112.0, 52580000.0, 110.16], [1439475840.0, 52600000.0, 110.19999999999999], [1439477568.0, 52620000.0, 110.24], [1439479296.0, 52640000.0, 110.28], [1439481024.0, 52660000.0, 110.32], [1439482752.0, 52680000.0, 110.36], [1439484480.0, 52700000.0, 110.39999999999999], [1439486208.0, 52720000.0, 110.44], [1439487936.0, 52740000.0, 110.48], [1439489664.0, 52760000.0, 110.52], [1439491392.0, 52780000.0, 110.55999999999999], [1439493120.0, 52800000.0, 110.60000000000001], [1439494848.0, 52820000.0, 110.64], [1439496576.0, 52840000.0, 110.67999999999999], [1439498304.0, 52860000.0, 110.72], [1439500032.0, 52880000.0, 110.76], [1439501760.0, 52900000.0, 110.8], [1439503488.0, 52920000.0, 110.84], [1439505216.0, 52940000.0, 110.88], [1439506944.0, 52960000.0, 110.92], [1439508672.0, 52980000.0, 110.96000000000001], [1439510400.0, 53000000.0, 111.0], [1439512128.0, 53020000.0, 111.03999999999999], [1439513856.0, 53040000.0, 111.08000000000001], [1439515584.0, 53060000.0, 111.12], [1439517312.0, 53080000.0, 111.16], [1439519040.0, 53100000.0, 111.19999999999999], [1439520768.0, 53120000.0, 111.24000000000001], [1439522496.0, 53140000.0, 111.28], [1439524224.0, 53160000.0, 111.32], [1439525952.0, 53180000.0, 111.35999999999999], [1439527680.0, 53200000.0, 111.4], [1439529408.0, 53220000.0, 111.44], [1439531136.0, 53240000.0, 111.47999999999999], [1439532864.0, 53260000.0, 111.52], [1439534592.0, 53280000.0, 111.56], [1439536320.0, 53300000.0, 111.6], [1439538048.0, 53320000.0, 111.64], [1439539776.0, 53340000.0, 111.67999999999999], [1439541504.0, 53360000.0, 111.72], [1439543232.0, 53380000.0, 111.76], [1439544960.0, 53400000.0, 111.8], [1439546688.0, 53420000.0, 111.83999999999999], [1439548416.0, 53440000.0, 111.88000000000001], [1439550144.0, 53460000.0, 111.92], [1439551872.0, 53480000.0, 111.96], [1439553600.0, 53500000.0, 112.0], [1439555328.0, 53520000.0, 112.04], [1439557056.0, 53540000.0, 112.08], [1439558784.0, 53560000.0, 112.12], [1439560512.0, 53580000.0, 112.16], [1439562240.0, 53600000.0, 112.2], [1439563968.0, 53620000.0, 112.24000000000001], [1439565696.0, 53640000.0, 112.28], [1439567424.0, 53660000.0, 112.32], [1439569152.0, 53680000.0, 112.36000000000001], [1439570880.0, 53700000.0, 112.4], [1439572608.0, 53720000.0, 112.44], [1439574336.0, 53740000.0, 112.47999999999999], [1439576064.0, 53760000.0, 112.52000000000001], [1439577792.0, 53780000.0, 112.56], [1439579520.0, 53800000.0, 112.6], [1439581248.0, 53820000.0, 112.63999999999999], [1439582976.0, 53840000.0, 112.68], [1439584704.0, 53860000.0, 112.72], [1439586432.0, 53880000.0, 112.75999999999999], [1439588160.0, 53900000.0, 112.8], [1439589888.0, 53920000.0, 112.84], [1439591616.0, 53940000.0, 112.88], [1439593344.0, 53960000.0, 112.92], [1439595072.0, 53980000.0, 112.96], [1439596800.0, 54000000.0, 113.0], [1439598528.0, 54020000.0, 113.04], [1439600256.0, 54040000.0, 113.08], [1439601984.0, 54060000.0, 113.11999999999999], [1439603712.0, 54080000.0, 113.16000000000001], [1439605440.0, 54100000.0, 113.2], [1439607168.0, 54120000.0, 113.24], [1439608896.0, 54140000.0, 113.28], [1439610624.0, 54160000.0, 113.32000000000001], [1439612352.0, 54180000.0, 113.36], [1439614080.0, 54200000.0, 113.4], [1439615808.0, 54220000.0, 113.44], [1439617536.0, 54240000.0, 113.48], [1439619264.0, 54260000.0, 113.52000000000001], [1439620992.0, 54280000.0, 113.56], [1439622720.0, 54300000.0, 113.6], [1439624448.0, 54320000.0, 113.64000000000001], [1439626176.0, 54340000.0, 113.68], [1439627904.0, 54360000.0, 113.72], [1439629632.0, 54380000.0, 113.75999999999999], [1439631360.0, 54400000.0, 113.80000000000001], [1439633088.0, 54420000.0, 113.84], [1439634816.0, 54440000.0, 113.88], [1439636544.0, 54460000.0, 113.91999999999999], [1439638272.0, 54480000.0, 113.96000000000001], [1439640000.0, 54500000.0, 114.0], [1439641728.0, 54520000.0, 114.03999999999999], [1439643456.0, 54540000.0, 114.08], [1439645184.0, 54560000.0, 114.12], [1439646912.0, 54580000.0, 114.16], [1439648640.0, 54600000.0, 114.2], [1439650368.0, 54620000.0, 114.24], [1439652096.0, 54640000.0, 114.28], [1439653824.0, 54660000.0, 114.32000000000001], [1439655552.0, 54680000.0, 114.36], [1439657280.0, 54700000.0, 114.39999999999999], [1439659008.0, 54720000.0, 114.44000000000001], [1439660736.0, 54740000.0, 114.48], [1439662464.0, 54760000.0, 114.52], [1439664192.0, 54780000.0, 114.56], [1439665920.0, 54800000.0, 114.60000000000001], [1439667648.0, 54820000.0, 114.64], [1439669376.0, 54840000.0, 114.68], [1439671104.0, 54860000.0, 114.72], [1439672832.0, 54880000.0, 114.76], [1439674560.0, 54900000.0, 114.80000000000001], [1439676288.0, 54920000.0, 114.84], [1439678016.0, 54940000.0, 114.88], [1439679744.0, 54960000.0, 114.92000000000002], [1439681472.0, 54980000.0, 114.96000000000001], [1439683200.0, 55000000.0, 115.0], [1439684928.0, 55020000.0, 115.03999999999999], [1439686656.0, 55040000.0, 115.07999999999998], [1439688384.0, 55060000.0, 115.12], [1439690112.0, 55080000.0, 115.16], [1439691840.0, 55100000.0, 115.19999999999999], [1439693568.0, 55120000.0, 115.24], [1439695296.0, 55140000.0, 115.28], [1439697024.0, 55160000.0, 115.32], [1439698752.0, 55180000.0, 115.36], [1439700480.0, 55200000.0, 115.39999999999999], [1439702208.0, 55220000.0, 115.44], [1439703936.0, 55240000.0, 115.48], [1439705664.0, 55260000.0, 115.52], [1439707392.0, 55280000.0, 115.55999999999999], [1439709120.0, 55300000.0, 115.60000000000001], [1439710848.0, 55320000.0, 115.64], [1439712576.0, 55340000.0, 115.67999999999999], [1439714304.0, 55360000.0, 115.72], [1439716032.0, 55380000.0, 115.76], [1439717760.0, 55400000.0, 115.8], [1439719488.0, 55420000.0, 115.84], [1439721216.0, 55440000.0, 115.88], [1439722944.0, 55460000.0, 115.92], [1439724672.0, 55480000.0, 115.96000000000001], [1439726400.0, 55500000.0, 116.0], [1439728128.0, 55520000.0, 116.03999999999999], [1439729856.0, 55540000.0, 116.08000000000001], [1439731584.0, 55560000.0, 116.12], [1439733312.0, 55580000.0, 116.16], [1439735040.0, 55600000.0, 116.19999999999999], [1439736768.0, 55620000.0, 116.24000000000001], [1439738496.0, 55640000.0, 116.28], [1439740224.0, 55660000.0, 116.32], [1439741952.0, 55680000.0, 116.35999999999999], [1439743680.0, 55700000.0, 116.4], [1439745408.0, 55720000.0, 116.44], [1439747136.0, 55740000.0, 116.47999999999999], [1439748864.0, 55760000.0, 116.52], [1439750592.0, 55780000.0, 116.56], [1439752320.0, 55800000.0, 116.6], [1439754048.0, 55820000.0, 116.64], [1439755776.0, 55840000.0, 116.67999999999999], [1439757504.0, 55860000.0, 116.72], [1439759232.0, 55880000.0, 116.76], [1439760960.0, 55900000.0, 116.8], [1439762688.0, 55920000.0, 116.83999999999999], [1439764416.0, 55940000.0, 116.88000000000001], [1439766144.0, 55960000.0, 116.92], [1439767872.0, 55980000.0, 116.96], [1439769600.0, 56000000.0, 117.0], [1439771328.0, 56020000.0, 117.04], [1439773056.0, 56040000.0, 117.08], [1439774784.0, 56060000.0, 117.12], [1439776512.0, 56080000.0, 117.16], [1439778240.0, 56100000.0, 117.2], [1439779968.0, 56120000.0, 117.24000000000001], [1439781696.0, 56140000.0, 117.28], [1439783424.0, 56160000.0, 117.32], [1439785152.0, 56180000.0, 117.36000000000001], [1439786880.0, 56200000.0, 117.4], [1439788608.0, 56220000.0, 117.44], [1439790336.0, 56240000.0, 117.47999999999999], [1439792064.0, 56260000.0, 117.52000000000001], [1439793792.0, 56280000.0, 117.56], [1439795520.0, 56300000.0, 117.6], [1439797248.0, 56320000.0, 117.63999999999999], [1439798976.0, 56340000.0, 117.68], [1439800704.0, 56360000.0, 117.72], [1439802432.0, 56380000.0, 117.75999999999999], [1439804160.0, 56400000.0, 117.8], [1439805888.0, 56420000.0, 117.84], [1439807616.0, 56440000.0, 117.88], [1439809344.0, 56460000.0, 117.92], [1439811072.0, 56480000.0, 117.96], [1439812800.0, 56500000.0, 118.0], [1439814528.0, 56520000.0, 118.04], [1439816256.0, 56540000.0, 118.08], [1439817984.0, 56560000.0, 118.11999999999999], [1439819712.0, 56580000.0, 118.16000000000001], [1439821440.0, 56600000.0, 118.2], [1439823168.0, 56620000.0, 118.24], [1439824896.0, 56640000.0, 118.28], [1439826624.0, 56660000.0, 118.32000000000001], [1439828352.0, 56680000.0, 118.36], [1439830080.0, 56700000.0, 118.4], [1439831808.0, 56720000.0, 118.44], [1439833536.0, 56740000.0, 118.48], [1439835264.0, 56760000.0, 118.52000000000001], [1439836992.0, 56780000.0, 118.56], [1439838720.0, 56800000.0, 118.6], [1439840448.0, 56820000.0, 118.64000000000001], [1439842176.0, 56840000.0, 118.68], [1439843904.0, 56860000.0, 118.72], [1439845632.0, 56880000.0, 118.75999999999999], [1439847360.0, 56900000.0, 118.80000000000001], [1439849088.0, 56920000.0, 118.84], [1439850816.0, 56940000.0, 118.88], [1439852544.0, 56960000.0, 118.91999999999999], [1439854272.0, 56980000.0, 118.96000000000001], [1439856000.0, 57000000.0, 119.0], [1439857728.0, 57020000.0, 119.03999999999999], [1439859456.0, 57040000.0, 119.08], [1439861184.0, 57060000.0, 119.12], [1439862912.0, 57080000.0, 119.16], [1439864640.0, 57100000.0, 119.2], [1439866368.0, 57120000.0, 119.24], [1439868096.0, 57140000.0, 119.28], [1439869824.0, 57160000.0, 119.32000000000001], [1439871552.0, 57180000.0, 119.36], [1439873280.0, 57200000.0, 119.39999999999999], [1439875008.0, 57220000.0, 119.44000000000001], [1439876736.0, 57240000.0, 119.48], [1439878464.0, 57260000.0, 119.52], [1439880192.0, 57280000.0, 119.56], [1439881920.0, 57300000.0, 119.60000000000001], [1439883648.0, 57320000.0, 119.64], [1439885376.0, 57340000.0, 119.68], [1439887104.0, 57360000.0, 119.72], [1439888832.0, 57380000.0, 119.76], [1439890560.0, 57400000.0, 119.80000000000001], [1439892288.0, 57420000.0, 119.84], [1439894016.0, 57440000.0, 119.88], [1439895744.0, 57460000.0, 119.92000000000002], [1439897472.0, 57480000.0, 119.96000000000001], [1439899200.0, 57500000.0, 120.0], [1439900928.0, 57520000.0, 120.03999999999999], [1439902656.0, 57540000.0, 120.07999999999998], [1439904384.0, 57560000.0, 120.12], [1439906112.0, 57580000.0, 120.16], [1439907840.0, 57600000.0, 120.19999999999999], [1439909568.0, 57620000.0, 120.24], [1439911296.0, 57640000.0, 120.28], [1439913024.0, 57660000.0, 120.32], [1439914752.0, 57680000.0, 120.36], [1439916480.0, 57700000.0, 120.39999999999999], [1439918208.0, 57720000.0, 120.44], [1439919936.0, 57740000.0, 120.48], [1439921664.0, 57760000.0, 120.52], [1439923392.0, 57780000.0, 120.55999999999999], [1439925120.0, 57800000.0, 120.60000000000001], [1439926848.0, 57820000.0, 120.64], [1439928576.0, 57840000.0, 120.67999999999999], [1439930304.0, 57860000.0, 120.72], [1439932032.0, 57880000.0, 120.76], [1439933760.0, 57900000.0, 120.8], [1439935488.0, 57920000.0, 120.84], [1439937216.0, 57940000.0, 120.88], [1439938944.0, 57960000.0, 120.92], [1439940672.0, 57980000.0, 120.96000000000001], [1439942400.0, 58000000.0, 121.0], [1439944128.0, 58020000.0, 121.03999999999999], [1439945856.0, 58040000.0, 121.08000000000001], [1439947584.0, 58060000.0, 121.12], [1439949312.0, 58080000.0, 121.16], [1439951040.0, 58100000.0, 121.19999999999999], [1439952768.0, 58120000.0, 121.24000000000001], [1439954496.0, 58140000.0, 121.28], [1439956224.0, 58160000.0, 121.32], [1439957952.0, 58180000.0, 121.35999999999999], [1439959680.0, 58200000.0, 121.4], [1439961408.0, 58220000.0, 121.44], [1439963136.0, 58240000.0, 121.47999999999999], [1439964864.0, 58260000.0, 121.52], [1439966592.0, 58280000.0, 121.56], [1439968320.0, 58300000.0, 121.6], [1439970048.0, 58320000.0, 121.64], [1439971776.0, 58340000.0, 121.67999999999999], [1439973504.0, 58360000.0, 121.72], [1439975232.0, 58380000.0, 121.76], [1439976960.0, 58400000.0, 121.8], [1439978688.0, 58420000.0, 121.83999999999999], [1439980416.0, 58440000.0, 121.88000000000001], [1439982144.0, 58460000.0, 121.92], [1439983872.0, 58480000.0, 121.96], [1439985600.0, 58500000.0, 122.0], [1439987328.0, 58520000.0, 122.04], [1439989056.0, 58540000.0, 122.08], [1439990784.0, 58560000.0, 122.12], [1439992512.0, 58580000.0, 122.16], [1439994240.0, 58600000.0, 122.2], [1439995968.0, 58620000.0, 122.24000000000001], [1439997696.0, 58640000.0, 122.28], [1439999424.0, 58660000.0, 122.32], [1440001152.0, 58680000.0, 122.36000000000001], [1440002880.0, 58700000.0, 122.4], [1440004608.0, 58720000.0, 122.44], [1440006336.0, 58740000.0, 122.47999999999999], [1440008064.0, 58760000.0, 122.52000000000001], [1440009792.0, 58780000.0, 122.56], [1440011520.0, 58800000.0, 122.6], [1440013248.0, 58820000.0, 122.63999999999999], [1440014976.0, 58840000.0, 122.68], [1440016704.0, 58860000.0, 122.72], [1440018432.0, 58880000.0, 122.75999999999999], [1440020160.0, 58900000.0, 122.8], [1440021888.0, 58920000.0, 122.84], [1440023616.0, 58940000.0, 122.88], [1440025344.0, 58960000.0, 122.92], [1440027072.0, 58980000.0, 122.96], [1440028800.0, 59000000.0, 123.0], [1440030528.0, 59020000.0, 123.04], [1440032256.0, 59040000.0, 123.08], [1440033984.0, 59060000.0, 123.11999999999999], [1440035712.0, 59080000.0, 123.16000000000001], [1440037440.0, 59100000.0, 123.2], [1440039168.0, 59120000.0, 123.24], [1440040896.0, 59140000.0, 123.28], [1440042624.0, 59160000.0, 123.32000000000001], [1440044352.0, 59180000.0, 123.36], [1440046080.0, 59200000.0, 123.4], [1440047808.0, 59220000.0, 123.44], [1440049536.0, 59240000.0, 123.48], [1440051264.0, 59260000.0, 123.52000000000001], [1440052992.0, 59280000.0, 123.56], [1440054720.0, 59300000.0, 123.6], [1440056448.0, 59320000.0, 123.64000000000001], [1440058176.0, 59340000.0, 123.68], [1440059904.0, 59360000.0, 123.72], [1440061632.0, 59380000.0, 123.75999999999999], [1440063360.0, 59400000.0, 123.80000000000001], [1440065088.0, 59420000.0, 123.84], [1440066816.0, 59440000.0, 123.88], [1440068544.0, 59460000.0, 123.91999999999999], [1440070272.0, 59480000.0, 123.96000000000001], [1440072000.0, 59500000.0, 124.0], [1440073728.0, 59520000.0, 124.03999999999999], [1440075456.0, 59540000.0, 124.08], [1440077184.0, 59560000.0, 124.12], [1440078912.0, 59580000.0, 124.16], [1440080640.0, 59600000.0, 124.2], [1440082368.0, 59620000.0, 124.24], [1440084096.0, 59640000.0, 124.28], [1440085824.0, 59660000.0, 124.32000000000001], [1440087552.0, 59680000.0, 124.36], [1440089280.0, 59700000.0, 124.39999999999999], [1440091008.0, 59720000.0, 124.44000000000001], [1440092736.0, 59740000.0, 124.48], [1440094464.0, 59760000.0, 124.52], [1440096192.0, 59780000.0, 124.56], [1440097920.0, 59800000.0, 124.60000000000001], [1440099648.0, 59820000.0, 124.64], [1440101376.0, 59840000.0, 124.68], [1440103104.0, 59860000.0, 124.72], [1440104832.0, 59880000.0, 124.76], [1440106560.0, 59900000.0, 124.80000000000001], [1440108288.0, 59920000.0, 124.84], [1440110016.0, 59940000.0, 124.88], [1440111744.0, 59960000.0, 124.92000000000002], [1440113472.0, 59980000.0, 124.96000000000001], [1440115200.0, 60000000.0, 125.0], [1440116928.0, 60020000.0, 125.03999999999999], [1440118656.0, 60040000.0, 125.07999999999998], [1440120384.0, 60060000.0, 125.12], [1440122112.0, 60080000.0, 125.16], [1440123840.0, 60100000.0, 125.19999999999999], [1440125568.0, 60120000.0, 125.24], [1440127296.0, 60140000.0, 125.28], [1440129024.0, 60160000.0, 125.32], [1440130752.0, 60180000.0, 125.36], [1440132480.0, 60200000.0, 125.39999999999999], [1440134208.0, 60220000.0, 125.44], [1440135936.0, 60240000.0, 125.48], [1440137664.0, 60260000.0, 125.52], [1440139392.0, 60280000.0, 125.55999999999999], [1440141120.0, 60300000.0, 125.60000000000001], [1440142848.0, 60320000.0, 125.64], [1440144576.0, 60340000.0, 125.67999999999999], [1440146304.0, 60360000.0, 125.72], [1440148032.0, 60380000.0, 125.76], [1440149760.0, 60400000.0, 125.8], [1440151488.0, 60420000.0, 125.84], [1440153216.0, 60440000.0, 125.88], [1440154944.0, 60460000.0, 125.92], [1440156672.0, 60480000.0, 125.96000000000001], [1440158400.0, 60500000.0, 126.0], [1440160128.0, 60520000.0, 126.03999999999999], [1440161856.0, 60540000.0, 126.08000000000001], [1440163584.0, 60560000.0, 126.12], [1440165312.0, 60580000.0, 126.16], [1440167040.0, 60600000.0, 126.19999999999999], [1440168768.0, 60620000.0, 126.24000000000001], [1440170496.0, 60640000.0, 126.28], [1440172224.0, 60660000.0, 126.32], [1440173952.0, 60680000.0, 126.35999999999999], [1440175680.0, 60700000.0, 126.4], [1440177408.0, 60720000.0, 126.44], [1440179136.0, 60740000.0, 126.47999999999999], [1440180864.0, 60760000.0, 126.52], [1440182592.0, 60780000.0, 126.56], [1440184320.0, 60800000.0, 126.6], [1440186048.0, 60820000.0, 126.64], [1440187776.0, 60840000.0, 126.67999999999999], [1440189504.0, 60860000.0, 126.72], [1440191232.0, 60880000.0, 126.76], [1440192960.0, 60900000.0, 126.8], [1440194688.0, 60920000.0, 126.83999999999999], [1440196416.0, 60940000.0, 126.88000000000001], [1440198144.0, 60960000.0, 126.92], [1440199872.0, 60980000.0, 126.96], [1440201600.0, 61000000.0, 127.0], [1440203328.0, 61020000.0, 127.04], [1440205056.0, 61040000.0, 127.08], [1440206784.0, 61060000.0, 127.12], [1440208512.0, 61080000.0, 127.16], [1440210240.0, 61100000.0, 127.2], [1440211968.0, 61120000.0, 127.24000000000001], [1440213696.0, 61140000.0, 127.28], [1440215424.0, 61160000.0, 127.32], [1440217152.0, 61180000.0, 127.36000000000001], [1440218880.0, 61200000.0, 127.4], [1440220608.0, 61220000.0, 127.44], [1440222336.0, 61240000.0, 127.47999999999999], [1440224064.0, 61260000.0, 127.52000000000001], [1440225792.0, 61280000.0, 127.56], [1440227520.0, 61300000.0, 127.6], [1440229248.0, 61320000.0, 127.63999999999999], [1440230976.0, 61340000.0, 127.68], [1440232704.0, 61360000.0, 127.72], [1440234432.0, 61380000.0, 127.75999999999999], [1440236160.0, 61400000.0, 127.8], [1440237888.0, 61420000.0, 127.84], [1440239616.0, 61440000.0, 127.88], [1440241344.0, 61460000.0, 127.92], [1440243072.0, 61480000.0, 127.96], [1440244800.0, 61500000.0, 128.0], [1440246528.0, 61520000.0, 128.04000000000002], [1440248256.0, 61540000.0, 128.07999999999998], [1440249984.0, 61560000.0, 128.12], [1440251712.0, 61580000.0, 128.16000000000003], [1440253440.0, 61600000.0, 128.2], [1440255168.0, 61620000.0, 128.24], [1440256896.0, 61640000.0, 128.28], [1440258624.0, 61660000.0, 128.32], [1440260352.0, 61680000.0, 128.36], [1440262080.0, 61700000.0, 128.4], [1440263808.0, 61720000.0, 128.44], [1440265536.0, 61740000.0, 128.48000000000002], [1440267264.0, 61760000.0, 128.52], [1440268992.0, 61780000.0, 128.56], [1440270720.0, 61800000.0, 128.6], [1440272448.0, 61820000.0, 128.64000000000001], [1440274176.0, 61840000.0, 128.68], [1440275904.0, 61860000.0, 128.72], [1440277632.0, 61880000.0, 128.76], [1440279360.0, 61900000.0, 128.8], [1440281088.0, 61920000.0, 128.84], [1440282816.0, 61940000.0, 128.88], [1440284544.0, 61960000.0, 128.92], [1440286272.0, 61980000.0, 128.96], [1440288000.0, 62000000.0, 129.0], [1440289728.0, 62020000.0, 129.04], [1440291456.0, 62040000.0, 129.07999999999998], [1440293184.0, 62060000.0, 129.12], [1440294912.0, 62080000.0, 129.16], [1440296640.0, 62100000.0, 129.2], [1440298368.0, 62120000.0, 129.24], [1440300096.0, 62140000.0, 129.28], [1440301824.0, 62160000.0, 129.32], [1440303552.0, 62180000.0, 129.36], [1440305280.0, 62200000.0, 129.39999999999998], [1440307008.0, 62220000.0, 129.44], [1440308736.0, 62240000.0, 129.48000000000002], [1440310464.0, 62260000.0, 129.51999999999998], [1440312192.0, 62280000.0, 129.56], [1440313920.0, 62300000.0, 129.60000000000002], [1440315648.0, 62320000.0, 129.64], [1440317376.0, 62340000.0, 129.68], [1440319104.0, 62360000.0, 129.72], [1440320832.0, 62380000.0, 129.76], [1440322560.0, 62400000.0, 129.8], [1440324288.0, 62420000.0, 129.84], [1440326016.0, 62440000.0, 129.88], [1440327744.0, 62460000.0, 129.92000000000002], [1440329472.0, 62480000.0, 129.96], [1440331200.0, 62500000.0, 130.0], [1440332928.0, 62520000.0, 130.04], [1440334656.0, 62540000.0, 130.07999999999998], [1440336384.0, 62560000.0, 130.12], [1440338112.0, 62580000.0, 130.16], [1440339840.0, 62600000.0, 130.2], [1440341568.0, 62620000.0, 130.24], [1440343296.0, 62640000.0, 130.28], [1440345024.0, 62660000.0, 130.32], [1440346752.0, 62680000.0, 130.36], [1440348480.0, 62700000.0, 130.39999999999998], [1440350208.0, 62720000.0, 130.44], [1440351936.0, 62740000.0, 130.48000000000002], [1440353664.0, 62760000.0, 130.51999999999998], [1440355392.0, 62780000.0, 130.56], [1440357120.0, 62800000.0, 130.60000000000002], [1440358848.0, 62820000.0, 130.64], [1440360576.0, 62840000.0, 130.68], [1440362304.0, 62860000.0, 130.72], [1440364032.0, 62880000.0, 130.76], [1440365760.0, 62900000.0, 130.8], [1440367488.0, 62920000.0, 130.84], [1440369216.0, 62940000.0, 130.88], [1440370944.0, 62960000.0, 130.92000000000002], [1440372672.0, 62980000.0, 130.96], [1440374400.0, 63000000.0, 131.0], [1440376128.0, 63020000.0, 131.04], [1440377856.0, 63040000.0, 131.08], [1440379584.0, 63060000.0, 131.12], [1440381312.0, 63080000.0, 131.16], [1440383040.0, 63100000.0, 131.2], [1440384768.0, 63120000.0, 131.24], [1440386496.0, 63140000.0, 131.28], [1440388224.0, 63160000.0, 131.32], [1440389952.0, 63180000.0, 131.35999999999999], [1440391680.0, 63200000.0, 131.4], [1440393408.0, 63220000.0, 131.44], [1440395136.0, 63240000.0, 131.48], [1440396864.0, 63260000.0, 131.51999999999998], [1440398592.0, 63280000.0, 131.56], [1440400320.0, 63300000.0, 131.6], [1440402048.0, 63320000.0, 131.64], [1440403776.0, 63340000.0, 131.68], [1440405504.0, 63360000.0, 131.72], [1440407232.0, 63380000.0, 131.76], [1440408960.0, 63400000.0, 131.8], [1440410688.0, 63420000.0, 131.83999999999997], [1440412416.0, 63440000.0, 131.88], [1440414144.0, 63460000.0, 131.92000000000002], [1440415872.0, 63480000.0, 131.95999999999998], [1440417600.0, 63500000.0, 132.0], [1440419328.0, 63520000.0, 132.04000000000002], [1440421056.0, 63540000.0, 132.07999999999998], [1440422784.0, 63560000.0, 132.12], [1440424512.0, 63580000.0, 132.16], [1440426240.0, 63600000.0, 132.2], [1440427968.0, 63620000.0, 132.24], [1440429696.0, 63640000.0, 132.28], [1440431424.0, 63660000.0, 132.32], [1440433152.0, 63680000.0, 132.36], [1440434880.0, 63700000.0, 132.4], [1440436608.0, 63720000.0, 132.44], [1440438336.0, 63740000.0, 132.48], [1440440064.0, 63760000.0, 132.52], [1440441792.0, 63780000.0, 132.56], [1440443520.0, 63800000.0, 132.6], [1440445248.0, 63820000.0, 132.64], [1440446976.0, 63840000.0, 132.68], [1440448704.0, 63860000.0, 132.72], [1440450432.0, 63880000.0, 132.76], [1440452160.0, 63900000.0, 132.8], [1440453888.0, 63920000.0, 132.84], [1440455616.0, 63940000.0, 132.88], [1440457344.0, 63960000.0, 132.92000000000002], [1440459072.0, 63980000.0, 132.95999999999998], [1440460800.0, 64000000.0, 133.0], [1440462528.0, 64020000.0, 133.04], [1440464256.0, 64040000.0, 133.07999999999998], [1440465984.0, 64060000.0, 133.12], [1440467712.0, 64080000.0, 133.16], [1440469440.0, 64100000.0, 133.2], [1440471168.0, 64120000.0, 133.24], [1440472896.0, 64140000.0, 133.28], [1440474624.0, 64160000.0, 133.32], [1440476352.0, 64180000.0, 133.36], [1440478080.0, 64200000.0, 133.4], [1440479808.0, 64220000.0, 133.44], [1440481536.0, 64240000.0, 133.48000000000002], [1440483264.0, 64260000.0, 133.52], [1440484992.0, 64280000.0, 133.56], [1440486720.0, 64300000.0, 133.6], [1440488448.0, 64320000.0, 133.64000000000001], [1440490176.0, 64340000.0, 133.68], [1440491904.0, 64360000.0, 133.72], [1440493632.0, 64380000.0, 133.76], [1440495360.0, 64400000.0, 133.8], [1440497088.0, 64420000.0, 133.84], [1440498816.0, 64440000.0, 133.88], [1440500544.0, 64460000.0, 133.92], [1440502272.0, 64480000.0, 133.96], [1440504000.0, 64500000.0, 134.0], [1440505728.0, 64520000.0, 134.04], [1440507456.0, 64540000.0, 134.07999999999998], [1440509184.0, 64560000.0, 134.12], [1440510912.0, 64580000.0, 134.16], [1440512640.0, 64600000.0, 134.2], [1440514368.0, 64620000.0, 134.24], [1440516096.0, 64640000.0, 134.28], [1440517824.0, 64660000.0, 134.32], [1440519552.0, 64680000.0, 134.36], [1440521280.0, 64700000.0, 134.4], [1440523008.0, 64720000.0, 134.44], [1440524736.0, 64740000.0, 134.48000000000002], [1440526464.0, 64760000.0, 134.52], [1440528192.0, 64780000.0, 134.56], [1440529920.0, 64800000.0, 134.60000000000002], [1440531648.0, 64820000.0, 134.64000000000001], [1440533376.0, 64840000.0, 134.68], [1440535104.0, 64860000.0, 134.72], [1440536832.0, 64880000.0, 134.76000000000002], [1440538560.0, 64900000.0, 134.8], [1440540288.0, 64920000.0, 134.84], [1440542016.0, 64940000.0, 134.88], [1440543744.0, 64960000.0, 134.92000000000002], [1440545472.0, 64980000.0, 134.96], [1440547200.0, 65000000.0, 135.0], [1440548928.0, 65020000.0, 135.04], [1440550656.0, 65040000.0, 135.07999999999998], [1440552384.0, 65060000.0, 135.12], [1440554112.0, 65080000.0, 135.16], [1440555840.0, 65100000.0, 135.2], [1440557568.0, 65120000.0, 135.23999999999998], [1440559296.0, 65140000.0, 135.28], [1440561024.0, 65160000.0, 135.32], [1440562752.0, 65180000.0, 135.35999999999999], [1440564480.0, 65200000.0, 135.39999999999998], [1440566208.0, 65220000.0, 135.44], [1440567936.0, 65240000.0, 135.48], [1440569664.0, 65260000.0, 135.51999999999998], [1440571392.0, 65280000.0, 135.56], [1440573120.0, 65300000.0, 135.6], [1440574848.0, 65320000.0, 135.64], [1440576576.0, 65340000.0, 135.68], [1440578304.0, 65360000.0, 135.72], [1440580032.0, 65380000.0, 135.76], [1440581760.0, 65400000.0, 135.8], [1440583488.0, 65420000.0, 135.84], [1440585216.0, 65440000.0, 135.88], [1440586944.0, 65460000.0, 135.92000000000002], [1440588672.0, 65480000.0, 135.96], [1440590400.0, 65500000.0, 136.0], [1440592128.0, 65520000.0, 136.04], [1440593856.0, 65540000.0, 136.08], [1440595584.0, 65560000.0, 136.12], [1440597312.0, 65580000.0, 136.16], [1440599040.0, 65600000.0, 136.2], [1440600768.0, 65620000.0, 136.24], [1440602496.0, 65640000.0, 136.28], [1440604224.0, 65660000.0, 136.32], [1440605952.0, 65680000.0, 136.35999999999999], [1440607680.0, 65700000.0, 136.4], [1440609408.0, 65720000.0, 136.44], [1440611136.0, 65740000.0, 136.48], [1440612864.0, 65760000.0, 136.51999999999998], [1440614592.0, 65780000.0, 136.56], [1440616320.0, 65800000.0, 136.6], [1440618048.0, 65820000.0, 136.64], [1440619776.0, 65840000.0, 136.68], [1440621504.0, 65860000.0, 136.72], [1440623232.0, 65880000.0, 136.76], [1440624960.0, 65900000.0, 136.8], [1440626688.0, 65920000.0, 136.84], [1440628416.0, 65940000.0, 136.88], [1440630144.0, 65960000.0, 136.92000000000002], [1440631872.0, 65980000.0, 136.96], [1440633600.0, 66000000.0, 137.0], [1440635328.0, 66020000.0, 137.04000000000002], [1440637056.0, 66040000.0, 137.08], [1440638784.0, 66060000.0, 137.12], [1440640512.0, 66080000.0, 137.16], [1440642240.0, 66100000.0, 137.20000000000002], [1440643968.0, 66120000.0, 137.24], [1440645696.0, 66140000.0, 137.28], [1440647424.0, 66160000.0, 137.32], [1440649152.0, 66180000.0, 137.36], [1440650880.0, 66200000.0, 137.4], [1440652608.0, 66220000.0, 137.44], [1440654336.0, 66240000.0, 137.48], [1440656064.0, 66260000.0, 137.52], [1440657792.0, 66280000.0, 137.56], [1440659520.0, 66300000.0, 137.6], [1440661248.0, 66320000.0, 137.64], [1440662976.0, 66340000.0, 137.68], [1440664704.0, 66360000.0, 137.72], [1440666432.0, 66380000.0, 137.76], [1440668160.0, 66400000.0, 137.79999999999998], [1440669888.0, 66420000.0, 137.84], [1440671616.0, 66440000.0, 137.88], [1440673344.0, 66460000.0, 137.92], [1440675072.0, 66480000.0, 137.95999999999998], [1440676800.0, 66500000.0, 138.0], [1440678528.0, 66520000.0, 138.04], [1440680256.0, 66540000.0, 138.07999999999998], [1440681984.0, 66560000.0, 138.12], [1440683712.0, 66580000.0, 138.16], [1440685440.0, 66600000.0, 138.2], [1440687168.0, 66620000.0, 138.24], [1440688896.0, 66640000.0, 138.28], [1440690624.0, 66660000.0, 138.32], [1440692352.0, 66680000.0, 138.36], [1440694080.0, 66700000.0, 138.4], [1440695808.0, 66720000.0, 138.44], [1440697536.0, 66740000.0, 138.48000000000002], [1440699264.0, 66760000.0, 138.52], [1440700992.0, 66780000.0, 138.56], [1440702720.0, 66800000.0, 138.6], [1440704448.0, 66820000.0, 138.64000000000001], [1440706176.0, 66840000.0, 138.68], [1440707904.0, 66860000.0, 138.72], [1440709632.0, 66880000.0, 138.76], [1440711360.0, 66900000.0, 138.8], [1440713088.0, 66920000.0, 138.84], [1440714816.0, 66940000.0, 138.88], [1440716544.0, 66960000.0, 138.92], [1440718272.0, 66980000.0, 138.96], [1440720000.0, 67000000.0, 139.0], [1440721728.0, 67020000.0, 139.04], [1440723456.0, 67040000.0, 139.07999999999998], [1440725184.0, 67060000.0, 139.12], [1440726912.0, 67080000.0, 139.16], [1440728640.0, 67100000.0, 139.2], [1440730368.0, 67120000.0, 139.24], [1440732096.0, 67140000.0, 139.28], [1440733824.0, 67160000.0, 139.32], [1440735552.0, 67180000.0, 139.36], [1440737280.0, 67200000.0, 139.4], [1440739008.0, 67220000.0, 139.44], [1440740736.0, 67240000.0, 139.48000000000002], [1440742464.0, 67260000.0, 139.52], [1440744192.0, 67280000.0, 139.56], [1440745920.0, 67300000.0, 139.60000000000002], [1440747648.0, 67320000.0, 139.64000000000001], [1440749376.0, 67340000.0, 139.68], [1440751104.0, 67360000.0, 139.72], [1440752832.0, 67380000.0, 139.76000000000002], [1440754560.0, 67400000.0, 139.8], [1440756288.0, 67420000.0, 139.84], [1440758016.0, 67440000.0, 139.88], [1440759744.0, 67460000.0, 139.92000000000002], [1440761472.0, 67480000.0, 139.96], [1440763200.0, 67500000.0, 140.0], [1440764928.0, 67520000.0, 140.04], [1440766656.0, 67540000.0, 140.07999999999998], [1440768384.0, 67560000.0, 140.12], [1440770112.0, 67580000.0, 140.16], [1440771840.0, 67600000.0, 140.2], [1440773568.0, 67620000.0, 140.23999999999998], [1440775296.0, 67640000.0, 140.28], [1440777024.0, 67660000.0, 140.32], [1440778752.0, 67680000.0, 140.35999999999999], [1440780480.0, 67700000.0, 140.39999999999998], [1440782208.0, 67720000.0, 140.44], [1440783936.0, 67740000.0, 140.48], [1440785664.0, 67760000.0, 140.51999999999998], [1440787392.0, 67780000.0, 140.56], [1440789120.0, 67800000.0, 140.6], [1440790848.0, 67820000.0, 140.64], [1440792576.0, 67840000.0, 140.68], [1440794304.0, 67860000.0, 140.72], [1440796032.0, 67880000.0, 140.76], [1440797760.0, 67900000.0, 140.8], [1440799488.0, 67920000.0, 140.84], [1440801216.0, 67940000.0, 140.88], [1440802944.0, 67960000.0, 140.92000000000002], [1440804672.0, 67980000.0, 140.96], [1440806400.0, 68000000.0, 141.0], [1440808128.0, 68020000.0, 141.04], [1440809856.0, 68040000.0, 141.08], [1440811584.0, 68060000.0, 141.12], [1440813312.0, 68080000.0, 141.16], [1440815040.0, 68100000.0, 141.2], [1440816768.0, 68120000.0, 141.24], [1440818496.0, 68140000.0, 141.28], [1440820224.0, 68160000.0, 141.32], [1440821952.0, 68180000.0, 141.35999999999999], [1440823680.0, 68200000.0, 141.4], [1440825408.0, 68220000.0, 141.44], [1440827136.0, 68240000.0, 141.48], [1440828864.0, 68260000.0, 141.51999999999998], [1440830592.0, 68280000.0, 141.56], [1440832320.0, 68300000.0, 141.6], [1440834048.0, 68320000.0, 141.64], [1440835776.0, 68340000.0, 141.68], [1440837504.0, 68360000.0, 141.72], [1440839232.0, 68380000.0, 141.76], [1440840960.0, 68400000.0, 141.8], [1440842688.0, 68420000.0, 141.84], [1440844416.0, 68440000.0, 141.88], [1440846144.0, 68460000.0, 141.92000000000002], [1440847872.0, 68480000.0, 141.96], [1440849600.0, 68500000.0, 142.0], [1440851328.0, 68520000.0, 142.04000000000002], [1440853056.0, 68540000.0, 142.08], [1440854784.0, 68560000.0, 142.12], [1440856512.0, 68580000.0, 142.16], [1440858240.0, 68600000.0, 142.20000000000002], [1440859968.0, 68620000.0, 142.24], [1440861696.0, 68640000.0, 142.28], [1440863424.0, 68660000.0, 142.32], [1440865152.0, 68680000.0, 142.36], [1440866880.0, 68700000.0, 142.4], [1440868608.0, 68720000.0, 142.44], [1440870336.0, 68740000.0, 142.48], [1440872064.0, 68760000.0, 142.52], [1440873792.0, 68780000.0, 142.56], [1440875520.0, 68800000.0, 142.6], [1440877248.0, 68820000.0, 142.64], [1440878976.0, 68840000.0, 142.68], [1440880704.0, 68860000.0, 142.72], [1440882432.0, 68880000.0, 142.76], [1440884160.0, 68900000.0, 142.79999999999998], [1440885888.0, 68920000.0, 142.84], [1440887616.0, 68940000.0, 142.88], [1440889344.0, 68960000.0, 142.92], [1440891072.0, 68980000.0, 142.95999999999998], [1440892800.0, 69000000.0, 143.0], [1440894528.0, 69020000.0, 143.04], [1440896256.0, 69040000.0, 143.07999999999998], [1440897984.0, 69060000.0, 143.12], [1440899712.0, 69080000.0, 143.16], [1440901440.0, 69100000.0, 143.2], [1440903168.0, 69120000.0, 143.24], [1440904896.0, 69140000.0, 143.28], [1440906624.0, 69160000.0, 143.32], [1440908352.0, 69180000.0, 143.36], [1440910080.0, 69200000.0, 143.4], [1440911808.0, 69220000.0, 143.44], [1440913536.0, 69240000.0, 143.48000000000002], [1440915264.0, 69260000.0, 143.52], [1440916992.0, 69280000.0, 143.56], [1440918720.0, 69300000.0, 143.6], [1440920448.0, 69320000.0, 143.64000000000001], [1440922176.0, 69340000.0, 143.68], [1440923904.0, 69360000.0, 143.72], [1440925632.0, 69380000.0, 143.76], [1440927360.0, 69400000.0, 143.8], [1440929088.0, 69420000.0, 143.84], [1440930816.0, 69440000.0, 143.88], [1440932544.0, 69460000.0, 143.92], [1440934272.0, 69480000.0, 143.96], [1440936000.0, 69500000.0, 144.0], [1440937728.0, 69520000.0, 144.04], [1440939456.0, 69540000.0, 144.07999999999998], [1440941184.0, 69560000.0, 144.12], [1440942912.0, 69580000.0, 144.16], [1440944640.0, 69600000.0, 144.2], [1440946368.0, 69620000.0, 144.24], [1440948096.0, 69640000.0, 144.28], [1440949824.0, 69660000.0, 144.32], [1440951552.0, 69680000.0, 144.36], [1440953280.0, 69700000.0, 144.4], [1440955008.0, 69720000.0, 144.44], [1440956736.0, 69740000.0, 144.48000000000002], [1440958464.0, 69760000.0, 144.52], [1440960192.0, 69780000.0, 144.56], [1440961920.0, 69800000.0, 144.60000000000002], [1440963648.0, 69820000.0, 144.64000000000001], [1440965376.0, 69840000.0, 144.68], [1440967104.0, 69860000.0, 144.72], [1440968832.0, 69880000.0, 144.76000000000002], [1440970560.0, 69900000.0, 144.8], [1440972288.0, 69920000.0, 144.84], [1440974016.0, 69940000.0, 144.88], [1440975744.0, 69960000.0, 144.92000000000002], [1440977472.0, 69980000.0, 144.96], [1440979200.0, 70000000.0, 145.0], [1440980928.0, 70020000.0, 145.04], [1440982656.0, 70040000.0, 145.07999999999998], [1440984384.0, 70060000.0, 145.12], [1440986112.0, 70080000.0, 145.16], [1440987840.0, 70100000.0, 145.2], [1440989568.0, 70120000.0, 145.23999999999998], [1440991296.0, 70140000.0, 145.28], [1440993024.0, 70160000.0, 145.32], [1440994752.0, 70180000.0, 145.35999999999999], [1440996480.0, 70200000.0, 145.39999999999998], [1440998208.0, 70220000.0, 145.44], [1440999936.0, 70240000.0, 145.48], [1441001664.0, 70260000.0, 145.51999999999998], [1441003392.0, 70280000.0, 145.56], [1441005120.0, 70300000.0, 145.6], [1441006848.0, 70320000.0, 145.64], [1441008576.0, 70340000.0, 145.68], [1441010304.0, 70360000.0, 145.72], [1441012032.0, 70380000.0, 145.76], [1441013760.0, 70400000.0, 145.8], [1441015488.0, 70420000.0, 145.84], [1441017216.0, 70440000.0, 145.88], [1441018944.0, 70460000.0, 145.92000000000002], [1441020672.0, 70480000.0, 145.96], [1441022400.0, 70500000.0, 146.0], [1441024128.0, 70520000.0, 146.04], [1441025856.0, 70540000.0, 146.08], [1441027584.0, 70560000.0, 146.12], [1441029312.0, 70580000.0, 146.16], [1441031040.0, 70600000.0, 146.2], [1441032768.0, 70620000.0, 146.24], [1441034496.0, 70640000.0, 146.28], [1441036224.0, 70660000.0, 146.32], [1441037952.0, 70680000.0, 146.35999999999999], [1441039680.0, 70700000.0, 146.4], [1441041408.0, 70720000.0, 146.44], [1441043136.0, 70740000.0, 146.48], [1441044864.0, 70760000.0, 146.51999999999998], [1441046592.0, 70780000.0, 146.56], [1441048320.0, 70800000.0, 146.6], [1441050048.0, 70820000.0, 146.64], [1441051776.0, 70840000.0, 146.68], [1441053504.0, 70860000.0, 146.72], [1441055232.0, 70880000.0, 146.76], [1441056960.0, 70900000.0, 146.8], [1441058688.0, 70920000.0, 146.84], [1441060416.0, 70940000.0, 146.88], [1441062144.0, 70960000.0, 146.92000000000002], [1441063872.0, 70980000.0, 146.96], [1441065600.0, 71000000.0, 147.0], [1441067328.0, 71020000.0, 147.04000000000002], [1441069056.0, 71040000.0, 147.08], [1441070784.0, 71060000.0, 147.12], [1441072512.0, 71080000.0, 147.16], [1441074240.0, 71100000.0, 147.20000000000002], [1441075968.0, 71120000.0, 147.24], [1441077696.0, 71140000.0, 147.28], [1441079424.0, 71160000.0, 147.32], [1441081152.0, 71180000.0, 147.36], [1441082880.0, 71200000.0, 147.4], [1441084608.0, 71220000.0, 147.44], [1441086336.0, 71240000.0, 147.48], [1441088064.0, 71260000.0, 147.52], [1441089792.0, 71280000.0, 147.56], [1441091520.0, 71300000.0, 147.6], [1441093248.0, 71320000.0, 147.64], [1441094976.0, 71340000.0, 147.68], [1441096704.0, 71360000.0, 147.72], [1441098432.0, 71380000.0, 147.76], [1441100160.0, 71400000.0, 147.79999999999998], [1441101888.0, 71420000.0, 147.84], [1441103616.0, 71440000.0, 147.88], [1441105344.0, 71460000.0, 147.92], [1441107072.0, 71480000.0, 147.95999999999998], [1441108800.0, 71500000.0, 148.0], [1441110528.0, 71520000.0, 148.04], [1441112256.0, 71540000.0, 148.07999999999998], [1441113984.0, 71560000.0, 148.12], [1441115712.0, 71580000.0, 148.16], [1441117440.0, 71600000.0, 148.2], [1441119168.0, 71620000.0, 148.24], [1441120896.0, 71640000.0, 148.28], [1441122624.0, 71660000.0, 148.32], [1441124352.0, 71680000.0, 148.36], [1441126080.0, 71700000.0, 148.4], [1441127808.0, 71720000.0, 148.44], [1441129536.0, 71740000.0, 148.48000000000002], [1441131264.0, 71760000.0, 148.52], [1441132992.0, 71780000.0, 148.56], [1441134720.0, 71800000.0, 148.6], [1441136448.0, 71820000.0, 148.64000000000001], [1441138176.0, 71840000.0, 148.68], [1441139904.0, 71860000.0, 148.72], [1441141632.0, 71880000.0, 148.76], [1441143360.0, 71900000.0, 148.8], [1441145088.0, 71920000.0, 148.84], [1441146816.0, 71940000.0, 148.88], [1441148544.0, 71960000.0, 148.92], [1441150272.0, 71980000.0, 148.96], [1441152000.0, 72000000.0, 149.0], [1441153728.0, 72020000.0, 149.04], [1441155456.0, 72040000.0, 149.07999999999998], [1441157184.0, 72060000.0, 149.12], [1441158912.0, 72080000.0, 149.16], [1441160640.0, 72100000.0, 149.2], [1441162368.0, 72120000.0, 149.24], [1441164096.0, 72140000.0, 149.28], [1441165824.0, 72160000.0, 149.32], [1441167552.0, 72180000.0, 149.36], [1441169280.0, 72200000.0, 149.4], [1441171008.0, 72220000.0, 149.44], [1441172736.0, 72240000.0, 149.48000000000002], [1441174464.0, 72260000.0, 149.52], [1441176192.0, 72280000.0, 149.56], [1441177920.0, 72300000.0, 149.60000000000002], [1441179648.0, 72320000.0, 149.64000000000001], [1441181376.0, 72340000.0, 149.68], [1441183104.0, 72360000.0, 149.72], [1441184832.0, 72380000.0, 149.76000000000002], [1441186560.0, 72400000.0, 149.8], [1441188288.0, 72420000.0, 149.84], [1441190016.0, 72440000.0, 149.88], [1441191744.0, 72460000.0, 149.92000000000002], [1441193472.0, 72480000.0, 149.96], [1441195200.0, 72500000.0, 150.0], [1441196928.0, 72520000.0, 150.04], [1441198656.0, 72540000.0, 150.07999999999998], [1441200384.0, 72560000.0, 150.12], [1441202112.0, 72580000.0, 150.16], [1441203840.0, 72600000.0, 150.2], [1441205568.0, 72620000.0, 150.23999999999998], [1441207296.0, 72640000.0, 150.28], [1441209024.0, 72660000.0, 150.32], [1441210752.0, 72680000.0, 150.35999999999999], [1441212480.0, 72700000.0, 150.39999999999998], [1441214208.0, 72720000.0, 150.44], [1441215936.0, 72740000.0, 150.48], [1441217664.0, 72760000.0, 150.51999999999998], [1441219392.0, 72780000.0, 150.56], [1441221120.0, 72800000.0, 150.6], [1441222848.0, 72820000.0, 150.64], [1441224576.0, 72840000.0, 150.68], [1441226304.0, 72860000.0, 150.72], [1441228032.0, 72880000.0, 150.76], [1441229760.0, 72900000.0, 150.8], [1441231488.0, 72920000.0, 150.84], [1441233216.0, 72940000.0, 150.88], [1441234944.0, 72960000.0, 150.92000000000002], [1441236672.0, 72980000.0, 150.96], [1441238400.0, 73000000.0, 151.0], [1441240128.0, 73020000.0, 151.04], [1441241856.0, 73040000.0, 151.08], [1441243584.0, 73060000.0, 151.12], [1441245312.0, 73080000.0, 151.16], [1441247040.0, 73100000.0, 151.2], [1441248768.0, 73120000.0, 151.24], [1441250496.0, 73140000.0, 151.28], [1441252224.0, 73160000.0, 151.32], [1441253952.0, 73180000.0, 151.35999999999999], [1441255680.0, 73200000.0, 151.4], [1441257408.0, 73220000.0, 151.44], [1441259136.0, 73240000.0, 151.48], [1441260864.0, 73260000.0, 151.51999999999998], [1441262592.0, 73280000.0, 151.56], [1441264320.0, 73300000.0, 151.6], [1441266048.0, 73320000.0, 151.64], [1441267776.0, 73340000.0, 151.68], [1441269504.0, 73360000.0, 151.72], [1441271232.0, 73380000.0, 151.76], [1441272960.0, 73400000.0, 151.8], [1441274688.0, 73420000.0, 151.84], [1441276416.0, 73440000.0, 151.88], [1441278144.0, 73460000.0, 151.92000000000002], [1441279872.0, 73480000.0, 151.96], [1441281600.0, 73500000.0, 152.0], [1441283328.0, 73520000.0, 152.04000000000002], [1441285056.0, 73540000.0, 152.08], [1441286784.0, 73560000.0, 152.12], [1441288512.0, 73580000.0, 152.16], [1441290240.0, 73600000.0, 152.20000000000002], [1441291968.0, 73620000.0, 152.24], [1441293696.0, 73640000.0, 152.28], [1441295424.0, 73660000.0, 152.32], [1441297152.0, 73680000.0, 152.36], [1441298880.0, 73700000.0, 152.4], [1441300608.0, 73720000.0, 152.44], [1441302336.0, 73740000.0, 152.48], [1441304064.0, 73760000.0, 152.52], [1441305792.0, 73780000.0, 152.56], [1441307520.0, 73800000.0, 152.6], [1441309248.0, 73820000.0, 152.64], [1441310976.0, 73840000.0, 152.68], [1441312704.0, 73860000.0, 152.72], [1441314432.0, 73880000.0, 152.76], [1441316160.0, 73900000.0, 152.79999999999998], [1441317888.0, 73920000.0, 152.84], [1441319616.0, 73940000.0, 152.88], [1441321344.0, 73960000.0, 152.92], [1441323072.0, 73980000.0, 152.95999999999998], [1441324800.0, 74000000.0, 153.0], [1441326528.0, 74020000.0, 153.04], [1441328256.0, 74040000.0, 153.07999999999998], [1441329984.0, 74060000.0, 153.12], [1441331712.0, 74080000.0, 153.16], [1441333440.0, 74100000.0, 153.2], [1441335168.0, 74120000.0, 153.24], [1441336896.0, 74140000.0, 153.28], [1441338624.0, 74160000.0, 153.32], [1441340352.0, 74180000.0, 153.36], [1441342080.0, 74200000.0, 153.4], [1441343808.0, 74220000.0, 153.44], [1441345536.0, 74240000.0, 153.48000000000002], [1441347264.0, 74260000.0, 153.52], [1441348992.0, 74280000.0, 153.56], [1441350720.0, 74300000.0, 153.6], [1441352448.0, 74320000.0, 153.64000000000001], [1441354176.0, 74340000.0, 153.68], [1441355904.0, 74360000.0, 153.72], [1441357632.0, 74380000.0, 153.76], [1441359360.0, 74400000.0, 153.8], [1441361088.0, 74420000.0, 153.84], [1441362816.0, 74440000.0, 153.88], [1441364544.0, 74460000.0, 153.92], [1441366272.0, 74480000.0, 153.96], [1441368000.0, 74500000.0, 154.0], [1441369728.0, 74520000.0, 154.04], [1441371456.0, 74540000.0, 154.07999999999998], [1441373184.0, 74560000.0, 154.12], [1441374912.0, 74580000.0, 154.16], [1441376640.0, 74600000.0, 154.2], [1441378368.0, 74620000.0, 154.24], [1441380096.0, 74640000.0, 154.28], [1441381824.0, 74660000.0, 154.32], [1441383552.0, 74680000.0, 154.36], [1441385280.0, 74700000.0, 154.4], [1441387008.0, 74720000.0, 154.44], [1441388736.0, 74740000.0, 154.48000000000002], [1441390464.0, 74760000.0, 154.52], [1441392192.0, 74780000.0, 154.56], [1441393920.0, 74800000.0, 154.60000000000002], [1441395648.0, 74820000.0, 154.64000000000001], [1441397376.0, 74840000.0, 154.68], [1441399104.0, 74860000.0, 154.72], [1441400832.0, 74880000.0, 154.76000000000002], [1441402560.0, 74900000.0, 154.8], [1441404288.0, 74920000.0, 154.84], [1441406016.0, 74940000.0, 154.88], [1441407744.0, 74960000.0, 154.92000000000002], [1441409472.0, 74980000.0, 154.96], [1441411200.0, 75000000.0, 155.0], [1441412928.0, 75020000.0, 155.04], [1441414656.0, 75040000.0, 155.07999999999998], [1441416384.0, 75060000.0, 155.12], [1441418112.0, 75080000.0, 155.16], [1441419840.0, 75100000.0, 155.2], [1441421568.0, 75120000.0, 155.23999999999998], [1441423296.0, 75140000.0, 155.28], [1441425024.0, 75160000.0, 155.32], [1441426752.0, 75180000.0, 155.35999999999999], [1441428480.0, 75200000.0, 155.39999999999998], [1441430208.0, 75220000.0, 155.44], [1441431936.0, 75240000.0, 155.48], [1441433664.0, 75260000.0, 155.51999999999998], [1441435392.0, 75280000.0, 155.56], [1441437120.0, 75300000.0, 155.6], [1441438848.0, 75320000.0, 155.64], [1441440576.0, 75340000.0, 155.68], [1441442304.0, 75360000.0, 155.72], [1441444032.0, 75380000.0, 155.76], [1441445760.0, 75400000.0, 155.8], [1441447488.0, 75420000.0, 155.84], [1441449216.0, 75440000.0, 155.88], [1441450944.0, 75460000.0, 155.92000000000002], [1441452672.0, 75480000.0, 155.96], [1441454400.0, 75500000.0, 156.0], [1441456128.0, 75520000.0, 156.04], [1441457856.0, 75540000.0, 156.08], [1441459584.0, 75560000.0, 156.12], [1441461312.0, 75580000.0, 156.16], [1441463040.0, 75600000.0, 156.2], [1441464768.0, 75620000.0, 156.24], [1441466496.0, 75640000.0, 156.28], [1441468224.0, 75660000.0, 156.32], [1441469952.0, 75680000.0, 156.35999999999999], [1441471680.0, 75700000.0, 156.4], [1441473408.0, 75720000.0, 156.44], [1441475136.0, 75740000.0, 156.48], [1441476864.0, 75760000.0, 156.51999999999998], [1441478592.0, 75780000.0, 156.56], [1441480320.0, 75800000.0, 156.6], [1441482048.0, 75820000.0, 156.64], [1441483776.0, 75840000.0, 156.68], [1441485504.0, 75860000.0, 156.72], [1441487232.0, 75880000.0, 156.76], [1441488960.0, 75900000.0, 156.8], [1441490688.0, 75920000.0, 156.84], [1441492416.0, 75940000.0, 156.88], [1441494144.0, 75960000.0, 156.92000000000002], [1441495872.0, 75980000.0, 156.96], [1441497600.0, 76000000.0, 157.0], [1441499328.0, 76020000.0, 157.04000000000002], [1441501056.0, 76040000.0, 157.08], [1441502784.0, 76060000.0, 157.12], [1441504512.0, 76080000.0, 157.16], [1441506240.0, 76100000.0, 157.20000000000002], [1441507968.0, 76120000.0, 157.24], [1441509696.0, 76140000.0, 157.28], [1441511424.0, 76160000.0, 157.32], [1441513152.0, 76180000.0, 157.36], [1441514880.0, 76200000.0, 157.4], [1441516608.0, 76220000.0, 157.44], [1441518336.0, 76240000.0, 157.48], [1441520064.0, 76260000.0, 157.52], [1441521792.0, 76280000.0, 157.56], [1441523520.0, 76300000.0, 157.6], [1441525248.0, 76320000.0, 157.64], [1441526976.0, 76340000.0, 157.68], [1441528704.0, 76360000.0, 157.72], [1441530432.0, 76380000.0, 157.76], [1441532160.0, 76400000.0, 157.79999999999998], [1441533888.0, 76420000.0, 157.84], [1441535616.0, 76440000.0, 157.88], [1441537344.0, 76460000.0, 157.92], [1441539072.0, 76480000.0, 157.95999999999998], [1441540800.0, 76500000.0, 158.0], [1441542528.0, 76520000.0, 158.04], [1441544256.0, 76540000.0, 158.07999999999998], [1441545984.0, 76560000.0, 158.12], [1441547712.0, 76580000.0, 158.16], [1441549440.0, 76600000.0, 158.2], [1441551168.0, 76620000.0, 158.24], [1441552896.0, 76640000.0, 158.28], [1441554624.0, 76660000.0, 158.32], [1441556352.0, 76680000.0, 158.36], [1441558080.0, 76700000.0, 158.4], [1441559808.0, 76720000.0, 158.44], [1441561536.0, 76740000.0, 158.48000000000002], [1441563264.0, 76760000.0, 158.52], [1441564992.0, 76780000.0, 158.56], [1441566720.0, 76800000.0, 158.6], [1441568448.0, 76820000.0, 158.64000000000001], [1441570176.0, 76840000.0, 158.68], [1441571904.0, 76860000.0, 158.72], [1441573632.0, 76880000.0, 158.76], [1441575360.0, 76900000.0, 158.8], [1441577088.0, 76920000.0, 158.84], [1441578816.0, 76940000.0, 158.88], [1441580544.0, 76960000.0, 158.92], [1441582272.0, 76980000.0, 158.96], [1441584000.0, 77000000.0, 159.0], [1441585728.0, 77020000.0, 159.04], [1441587456.0, 77040000.0, 159.07999999999998], [1441589184.0, 77060000.0, 159.12], [1441590912.0, 77080000.0, 159.16], [1441592640.0, 77100000.0, 159.2], [1441594368.0, 77120000.0, 159.24], [1441596096.0, 77140000.0, 159.28], [1441597824.0, 77160000.0, 159.32], [1441599552.0, 77180000.0, 159.36], [1441601280.0, 77200000.0, 159.4], [1441603008.0, 77220000.0, 159.44], [1441604736.0, 77240000.0, 159.48000000000002], [1441606464.0, 77260000.0, 159.52], [1441608192.0, 77280000.0, 159.56], [1441609920.0, 77300000.0, 159.60000000000002], [1441611648.0, 77320000.0, 159.64000000000001], [1441613376.0, 77340000.0, 159.68], [1441615104.0, 77360000.0, 159.72], [1441616832.0, 77380000.0, 159.76000000000002], [1441618560.0, 77400000.0, 159.8], [1441620288.0, 77420000.0, 159.84], [1441622016.0, 77440000.0, 159.88], [1441623744.0, 77460000.0, 159.92000000000002], [1441625472.0, 77480000.0, 159.96], [1441627200.0, 77500000.0, 160.0], [1441628928.0, 77520000.0, 160.04], [1441630656.0, 77540000.0, 160.07999999999998], [1441632384.0, 77560000.0, 160.12], [1441634112.0, 77580000.0, 160.16], [1441635840.0, 77600000.0, 160.2], [1441637568.0, 77620000.0, 160.23999999999998], [1441639296.0, 77640000.0, 160.28], [1441641024.0, 77660000.0, 160.32], [1441642752.0, 77680000.0, 160.35999999999999], [1441644480.0, 77700000.0, 160.39999999999998], [1441646208.0, 77720000.0, 160.44], [1441647936.0, 77740000.0, 160.48], [1441649664.0, 77760000.0, 160.51999999999998], [1441651392.0, 77780000.0, 160.56], [1441653120.0, 77800000.0, 160.6], [1441654848.0, 77820000.0, 160.64], [1441656576.0, 77840000.0, 160.68], [1441658304.0, 77860000.0, 160.72], [1441660032.0, 77880000.0, 160.76], [1441661760.0, 77900000.0, 160.8], [1441663488.0, 77920000.0, 160.84], [1441665216.0, 77940000.0, 160.88], [1441666944.0, 77960000.0, 160.92000000000002], [1441668672.0, 77980000.0, 160.96], [1441670400.0, 78000000.0, 161.0], [1441672128.0, 78020000.0, 161.04], [1441673856.0, 78040000.0, 161.08], [1441675584.0, 78060000.0, 161.12], [1441677312.0, 78080000.0, 161.16], [1441679040.0, 78100000.0, 161.2], [1441680768.0, 78120000.0, 161.24], [1441682496.0, 78140000.0, 161.28], [1441684224.0, 78160000.0, 161.32], [1441685952.0, 78180000.0, 161.35999999999999], [1441687680.0, 78200000.0, 161.4], [1441689408.0, 78220000.0, 161.44], [1441691136.0, 78240000.0, 161.48], [1441692864.0, 78260000.0, 161.51999999999998], [1441694592.0, 78280000.0, 161.56], [1441696320.0, 78300000.0, 161.6], [1441698048.0, 78320000.0, 161.64], [1441699776.0, 78340000.0, 161.68], [1441701504.0, 78360000.0, 161.72], [1441703232.0, 78380000.0, 161.76], [1441704960.0, 78400000.0, 161.8], [1441706688.0, 78420000.0, 161.84], [1441708416.0, 78440000.0, 161.88], [1441710144.0, 78460000.0, 161.92000000000002], [1441711872.0, 78480000.0, 161.96], [1441713600.0, 78500000.0, 162.0], [1441715328.0, 78520000.0, 162.04000000000002], [1441717056.0, 78540000.0, 162.08], [1441718784.0, 78560000.0, 162.12], [1441720512.0, 78580000.0, 162.16], [1441722240.0, 78600000.0, 162.20000000000002], [1441723968.0, 78620000.0, 162.24], [1441725696.0, 78640000.0, 162.28], [1441727424.0, 78660000.0, 162.32], [1441729152.0, 78680000.0, 162.36], [1441730880.0, 78700000.0, 162.4], [1441732608.0, 78720000.0, 162.44], [1441734336.0, 78740000.0, 162.48], [1441736064.0, 78760000.0, 162.52], [1441737792.0, 78780000.0, 162.56], [1441739520.0, 78800000.0, 162.6], [1441741248.0, 78820000.0, 162.64], [1441742976.0, 78840000.0, 162.68], [1441744704.0, 78860000.0, 162.72], [1441746432.0, 78880000.0, 162.76], [1441748160.0, 78900000.0, 162.79999999999998], [1441749888.0, 78920000.0, 162.84], [1441751616.0, 78940000.0, 162.88], [1441753344.0, 78960000.0, 162.92], [1441755072.0, 78980000.0, 162.95999999999998], [1441756800.0, 79000000.0, 163.0], [1441758528.0, 79020000.0, 163.04], [1441760256.0, 79040000.0, 163.07999999999998], [1441761984.0, 79060000.0, 163.12], [1441763712.0, 79080000.0, 163.16], [1441765440.0, 79100000.0, 163.2], [1441767168.0, 79120000.0, 163.24], [1441768896.0, 79140000.0, 163.28], [1441770624.0, 79160000.0, 163.32], [1441772352.0, 79180000.0, 163.36], [1441774080.0, 79200000.0, 163.4], [1441775808.0, 79220000.0, 163.44], [1441777536.0, 79240000.0, 163.48000000000002], [1441779264.0, 79260000.0, 163.52], [1441780992.0, 79280000.0, 163.56], [1441782720.0, 79300000.0, 163.6], [1441784448.0, 79320000.0, 163.64000000000001], [1441786176.0, 79340000.0, 163.68], [1441787904.0, 79360000.0, 163.72], [1441789632.0, 79380000.0, 163.76], [1441791360.0, 79400000.0, 163.8], [1441793088.0, 79420000.0, 163.84], [1441794816.0, 79440000.0, 163.88], [1441796544.0, 79460000.0, 163.92], [1441798272.0, 79480000.0, 163.96], [1441800000.0, 79500000.0, 164.0], [1441801728.0, 79520000.0, 164.04], [1441803456.0, 79540000.0, 164.07999999999998], [1441805184.0, 79560000.0, 164.12], [1441806912.0, 79580000.0, 164.16], [1441808640.0, 79600000.0, 164.2], [1441810368.0, 79620000.0, 164.24], [1441812096.0, 79640000.0, 164.28], [1441813824.0, 79660000.0, 164.32], [1441815552.0, 79680000.0, 164.36], [1441817280.0, 79700000.0, 164.4], [1441819008.0, 79720000.0, 164.44], [1441820736.0, 79740000.0, 164.48000000000002], [1441822464.0, 79760000.0, 164.52], [1441824192.0, 79780000.0, 164.56], [1441825920.0, 79800000.0, 164.60000000000002], [1441827648.0, 79820000.0, 164.64000000000001], [1441829376.0, 79840000.0, 164.68], [1441831104.0, 79860000.0, 164.72], [1441832832.0, 79880000.0, 164.76000000000002], [1441834560.0, 79900000.0, 164.8], [1441836288.0, 79920000.0, 164.84], [1441838016.0, 79940000.0, 164.88], [1441839744.0, 79960000.0, 164.92000000000002], [1441841472.0, 79980000.0, 164.96], [1441843200.0, 80000000.0, 165.0], [1441844928.0, 80020000.0, 165.04000000000002], [1441846656.0, 80040000.0, 165.07999999999998], [1441848384.0, 80060000.0, 165.12], [1441850112.0, 80080000.0, 165.15999999999997], [1441851840.0, 80100000.0, 165.2], [1441853568.0, 80120000.0, 165.24], [1441855296.0, 80140000.0, 165.27999999999997], [1441857024.0, 80160000.0, 165.32], [1441858752.0, 80180000.0, 165.36], [1441860480.0, 80200000.0, 165.39999999999998], [1441862208.0, 80220000.0, 165.44], [1441863936.0, 80240000.0, 165.48], [1441865664.0, 80260000.0, 165.51999999999998], [1441867392.0, 80280000.0, 165.56], [1441869120.0, 80300000.0, 165.6], [1441870848.0, 80320000.0, 165.64], [1441872576.0, 80340000.0, 165.68], [1441874304.0, 80360000.0, 165.72], [1441876032.0, 80380000.0, 165.76], [1441877760.0, 80400000.0, 165.79999999999998], [1441879488.0, 80420000.0, 165.84], [1441881216.0, 80440000.0, 165.88], [1441882944.0, 80460000.0, 165.92], [1441884672.0, 80480000.0, 165.96], [1441886400.0, 80500000.0, 166.0], [1441888128.0, 80520000.0, 166.04], [1441889856.0, 80540000.0, 166.08], [1441891584.0, 80560000.0, 166.11999999999998], [1441893312.0, 80580000.0, 166.16], [1441895040.0, 80600000.0, 166.20000000000002], [1441896768.0, 80620000.0, 166.23999999999998], [1441898496.0, 80640000.0, 166.28], [1441900224.0, 80660000.0, 166.32000000000002], [1441901952.0, 80680000.0, 166.35999999999999], [1441903680.0, 80700000.0, 166.4], [1441905408.0, 80720000.0, 166.44], [1441907136.0, 80740000.0, 166.48], [1441908864.0, 80760000.0, 166.52], [1441910592.0, 80780000.0, 166.56], [1441912320.0, 80800000.0, 166.6], [1441914048.0, 80820000.0, 166.64000000000001], [1441915776.0, 80840000.0, 166.68], [1441917504.0, 80860000.0, 166.72], [1441919232.0, 80880000.0, 166.76], [1441920960.0, 80900000.0, 166.8], [1441922688.0, 80920000.0, 166.84], [1441924416.0, 80940000.0, 166.88], [1441926144.0, 80960000.0, 166.92000000000002], [1441927872.0, 80980000.0, 166.96], [1441929600.0, 81000000.0, 167.0], [1441931328.0, 81020000.0, 167.04000000000002], [1441933056.0, 81040000.0, 167.07999999999998], [1441934784.0, 81060000.0, 167.12], [1441936512.0, 81080000.0, 167.16000000000003], [1441938240.0, 81100000.0, 167.2], [1441939968.0, 81120000.0, 167.24], [1441941696.0, 81140000.0, 167.28000000000003], [1441943424.0, 81160000.0, 167.32], [1441945152.0, 81180000.0, 167.36], [1441946880.0, 81200000.0, 167.39999999999998], [1441948608.0, 81220000.0, 167.44], [1441950336.0, 81240000.0, 167.48000000000002], [1441952064.0, 81260000.0, 167.51999999999998], [1441953792.0, 81280000.0, 167.56], [1441955520.0, 81300000.0, 167.60000000000002], [1441957248.0, 81320000.0, 167.64], [1441958976.0, 81340000.0, 167.68], [1441960704.0, 81360000.0, 167.71999999999997], [1441962432.0, 81380000.0, 167.76], [1441964160.0, 81400000.0, 167.8], [1441965888.0, 81420000.0, 167.83999999999997], [1441967616.0, 81440000.0, 167.88], [1441969344.0, 81460000.0, 167.92000000000002], [1441971072.0, 81480000.0, 167.95999999999998], [1441972800.0, 81500000.0, 168.0], [1441974528.0, 81520000.0, 168.04], [1441976256.0, 81540000.0, 168.07999999999998], [1441977984.0, 81560000.0, 168.12], [1441979712.0, 81580000.0, 168.16], [1441981440.0, 81600000.0, 168.2], [1441983168.0, 81620000.0, 168.24], [1441984896.0, 81640000.0, 168.28], [1441986624.0, 81660000.0, 168.32], [1441988352.0, 81680000.0, 168.35999999999999], [1441990080.0, 81700000.0, 168.4], [1441991808.0, 81720000.0, 168.44], [1441993536.0, 81740000.0, 168.48], [1441995264.0, 81760000.0, 168.52], [1441996992.0, 81780000.0, 168.56], [1441998720.0, 81800000.0, 168.6], [1442000448.0, 81820000.0, 168.64000000000001], [1442002176.0, 81840000.0, 168.67999999999998], [1442003904.0, 81860000.0, 168.72], [1442005632.0, 81880000.0, 168.76000000000002], [1442007360.0, 81900000.0, 168.79999999999998], [1442009088.0, 81920000.0, 168.84], [1442010816.0, 81940000.0, 168.88000000000002], [1442012544.0, 81960000.0, 168.92], [1442014272.0, 81980000.0, 168.96], [1442016000.0, 82000000.0, 169.0], [1442017728.0, 82020000.0, 169.04], [1442019456.0, 82040000.0, 169.08], [1442021184.0, 82060000.0, 169.12], [1442022912.0, 82080000.0, 169.16], [1442024640.0, 82100000.0, 169.20000000000002], [1442026368.0, 82120000.0, 169.24], [1442028096.0, 82140000.0, 169.28], [1442029824.0, 82160000.0, 169.32], [1442031552.0, 82180000.0, 169.36], [1442033280.0, 82200000.0, 169.4], [1442035008.0, 82220000.0, 169.44], [1442036736.0, 82240000.0, 169.48000000000002], [1442038464.0, 82260000.0, 169.52], [1442040192.0, 82280000.0, 169.56], [1442041920.0, 82300000.0, 169.60000000000002], [1442043648.0, 82320000.0, 169.64], [1442045376.0, 82340000.0, 169.68], [1442047104.0, 82360000.0, 169.72000000000003], [1442048832.0, 82380000.0, 169.76], [1442050560.0, 82400000.0, 169.8], [1442052288.0, 82420000.0, 169.84000000000003], [1442054016.0, 82440000.0, 169.88], [1442055744.0, 82460000.0, 169.92000000000002], [1442057472.0, 82480000.0, 169.95999999999998], [1442059200.0, 82500000.0, 170.0], [1442060928.0, 82520000.0, 170.04000000000002], [1442062656.0, 82540000.0, 170.07999999999998], [1442064384.0, 82560000.0, 170.12], [1442066112.0, 82580000.0, 170.15999999999997], [1442067840.0, 82600000.0, 170.2], [1442069568.0, 82620000.0, 170.24], [1442071296.0, 82640000.0, 170.27999999999997], [1442073024.0, 82660000.0, 170.32], [1442074752.0, 82680000.0, 170.36], [1442076480.0, 82700000.0, 170.39999999999998], [1442078208.0, 82720000.0, 170.44], [1442079936.0, 82740000.0, 170.48], [1442081664.0, 82760000.0, 170.51999999999998], [1442083392.0, 82780000.0, 170.56], [1442085120.0, 82800000.0, 170.6], [1442086848.0, 82820000.0, 170.64], [1442088576.0, 82840000.0, 170.68], [1442090304.0, 82860000.0, 170.72], [1442092032.0, 82880000.0, 170.76], [1442093760.0, 82900000.0, 170.79999999999998], [1442095488.0, 82920000.0, 170.84], [1442097216.0, 82940000.0, 170.88], [1442098944.0, 82960000.0, 170.92], [1442100672.0, 82980000.0, 170.96], [1442102400.0, 83000000.0, 171.0], [1442104128.0, 83020000.0, 171.04], [1442105856.0, 83040000.0, 171.08], [1442107584.0, 83060000.0, 171.11999999999998], [1442109312.0, 83080000.0, 171.16], [1442111040.0, 83100000.0, 171.20000000000002], [1442112768.0, 83120000.0, 171.23999999999998], [1442114496.0, 83140000.0, 171.28], [1442116224.0, 83160000.0, 171.32000000000002], [1442117952.0, 83180000.0, 171.35999999999999], [1442119680.0, 83200000.0, 171.4], [1442121408.0, 83220000.0, 171.44], [1442123136.0, 83240000.0, 171.48], [1442124864.0, 83260000.0, 171.52], [1442126592.0, 83280000.0, 171.56], [1442128320.0, 83300000.0, 171.6], [1442130048.0, 83320000.0, 171.64000000000001], [1442131776.0, 83340000.0, 171.68], [1442133504.0, 83360000.0, 171.72], [1442135232.0, 83380000.0, 171.76], [1442136960.0, 83400000.0, 171.8], [1442138688.0, 83420000.0, 171.84], [1442140416.0, 83440000.0, 171.88], [1442142144.0, 83460000.0, 171.92000000000002], [1442143872.0, 83480000.0, 171.96], [1442145600.0, 83500000.0, 172.0], [1442147328.0, 83520000.0, 172.04000000000002], [1442149056.0, 83540000.0, 172.07999999999998], [1442150784.0, 83560000.0, 172.12], [1442152512.0, 83580000.0, 172.16000000000003], [1442154240.0, 83600000.0, 172.2], [1442155968.0, 83620000.0, 172.24], [1442157696.0, 83640000.0, 172.28000000000003], [1442159424.0, 83660000.0, 172.32], [1442161152.0, 83680000.0, 172.36], [1442162880.0, 83700000.0, 172.39999999999998], [1442164608.0, 83720000.0, 172.44], [1442166336.0, 83740000.0, 172.48000000000002], [1442168064.0, 83760000.0, 172.51999999999998], [1442169792.0, 83780000.0, 172.56], [1442171520.0, 83800000.0, 172.60000000000002], [1442173248.0, 83820000.0, 172.64], [1442174976.0, 83840000.0, 172.68], [1442176704.0, 83860000.0, 172.71999999999997], [1442178432.0, 83880000.0, 172.76], [1442180160.0, 83900000.0, 172.8], [1442181888.0, 83920000.0, 172.83999999999997], [1442183616.0, 83940000.0, 172.88], [1442185344.0, 83960000.0, 172.92000000000002], [1442187072.0, 83980000.0, 172.95999999999998], [1442188800.0, 84000000.0, 173.0], [1442190528.0, 84020000.0, 173.04], [1442192256.0, 84040000.0, 173.07999999999998], [1442193984.0, 84060000.0, 173.12], [1442195712.0, 84080000.0, 173.16], [1442197440.0, 84100000.0, 173.2], [1442199168.0, 84120000.0, 173.24], [1442200896.0, 84140000.0, 173.28], [1442202624.0, 84160000.0, 173.32], [1442204352.0, 84180000.0, 173.35999999999999], [1442206080.0, 84200000.0, 173.4], [1442207808.0, 84220000.0, 173.44], [1442209536.0, 84240000.0, 173.48], [1442211264.0, 84260000.0, 173.52], [1442212992.0, 84280000.0, 173.56], [1442214720.0, 84300000.0, 173.6], [1442216448.0, 84320000.0, 173.64000000000001], [1442218176.0, 84340000.0, 173.67999999999998], [1442219904.0, 84360000.0, 173.72], [1442221632.0, 84380000.0, 173.76000000000002], [1442223360.0, 84400000.0, 173.79999999999998], [1442225088.0, 84420000.0, 173.84], [1442226816.0, 84440000.0, 173.88000000000002], [1442228544.0, 84460000.0, 173.92], [1442230272.0, 84480000.0, 173.96], [1442232000.0, 84500000.0, 174.0], [1442233728.0, 84520000.0, 174.04], [1442235456.0, 84540000.0, 174.08], [1442237184.0, 84560000.0, 174.12], [1442238912.0, 84580000.0, 174.16], [1442240640.0, 84600000.0, 174.20000000000002], [1442242368.0, 84620000.0, 174.24], [1442244096.0, 84640000.0, 174.28], [1442245824.0, 84660000.0, 174.32], [1442247552.0, 84680000.0, 174.36], [1442249280.0, 84700000.0, 174.4], [1442251008.0, 84720000.0, 174.44], [1442252736.0, 84740000.0, 174.48000000000002], [1442254464.0, 84760000.0, 174.52], [1442256192.0, 84780000.0, 174.56], [1442257920.0, 84800000.0, 174.60000000000002], [1442259648.0, 84820000.0, 174.64], [1442261376.0, 84840000.0, 174.68], [1442263104.0, 84860000.0, 174.72000000000003], [1442264832.0, 84880000.0, 174.76], [1442266560.0, 84900000.0, 174.8], [1442268288.0, 84920000.0, 174.84000000000003], [1442270016.0, 84940000.0, 174.88], [1442271744.0, 84960000.0, 174.92000000000002], [1442273472.0, 84980000.0, 174.95999999999998], [1442275200.0, 85000000.0, 175.0], [1442276928.0, 85020000.0, 175.04000000000002], [1442278656.0, 85040000.0, 175.07999999999998], [1442280384.0, 85060000.0, 175.12], [1442282112.0, 85080000.0, 175.15999999999997], [1442283840.0, 85100000.0, 175.2], [1442285568.0, 85120000.0, 175.24], [1442287296.0, 85140000.0, 175.27999999999997], [1442289024.0, 85160000.0, 175.32], [1442290752.0, 85180000.0, 175.36], [1442292480.0, 85200000.0, 175.39999999999998], [1442294208.0, 85220000.0, 175.44], [1442295936.0, 85240000.0, 175.48], [1442297664.0, 85260000.0, 175.51999999999998], [1442299392.0, 85280000.0, 175.56], [1442301120.0, 85300000.0, 175.6], [1442302848.0, 85320000.0, 175.64], [1442304576.0, 85340000.0, 175.68], [1442306304.0, 85360000.0, 175.72], [1442308032.0, 85380000.0, 175.76], [1442309760.0, 85400000.0, 175.79999999999998], [1442311488.0, 85420000.0, 175.84], [1442313216.0, 85440000.0, 175.88], [1442314944.0, 85460000.0, 175.92], [1442316672.0, 85480000.0, 175.96], [1442318400.0, 85500000.0, 176.0], [1442320128.0, 85520000.0, 176.04], [1442321856.0, 85540000.0, 176.08], [1442323584.0, 85560000.0, 176.11999999999998], [1442325312.0, 85580000.0, 176.16], [1442327040.0, 85600000.0, 176.20000000000002], [1442328768.0, 85620000.0, 176.23999999999998], [1442330496.0, 85640000.0, 176.28], [1442332224.0, 85660000.0, 176.32000000000002], [1442333952.0, 85680000.0, 176.35999999999999], [1442335680.0, 85700000.0, 176.4], [1442337408.0, 85720000.0, 176.44], [1442339136.0, 85740000.0, 176.48], [1442340864.0, 85760000.0, 176.52], [1442342592.0, 85780000.0, 176.56], [1442344320.0, 85800000.0, 176.6], [1442346048.0, 85820000.0, 176.64000000000001], [1442347776.0, 85840000.0, 176.68], [1442349504.0, 85860000.0, 176.72], [1442351232.0, 85880000.0, 176.76], [1442352960.0, 85900000.0, 176.8], [1442354688.0, 85920000.0, 176.84], [1442356416.0, 85940000.0, 176.88], [1442358144.0, 85960000.0, 176.92000000000002], [1442359872.0, 85980000.0, 176.96], [1442361600.0, 86000000.0, 177.0], [1442363328.0, 86020000.0, 177.04000000000002], [1442365056.0, 86040000.0, 177.07999999999998], [1442366784.0, 86060000.0, 177.12], [1442368512.0, 86080000.0, 177.16000000000003], [1442370240.0, 86100000.0, 177.2], [1442371968.0, 86120000.0, 177.24], [1442373696.0, 86140000.0, 177.28000000000003], [1442375424.0, 86160000.0, 177.32], [1442377152.0, 86180000.0, 177.36], [1442378880.0, 86200000.0, 177.39999999999998], [1442380608.0, 86220000.0, 177.44], [1442382336.0, 86240000.0, 177.48000000000002], [1442384064.0, 86260000.0, 177.51999999999998], [1442385792.0, 86280000.0, 177.56], [1442387520.0, 86300000.0, 177.60000000000002], [1442389248.0, 86320000.0, 177.64], [1442390976.0, 86340000.0, 177.68], [1442392704.0, 86360000.0, 177.71999999999997], [1442394432.0, 86380000.0, 177.76], [1442396160.0, 86400000.0, 177.8], [1442397888.0, 86420000.0, 177.83999999999997], [1442399616.0, 86440000.0, 177.88], [1442401344.0, 86460000.0, 177.92000000000002], [1442403072.0, 86480000.0, 177.95999999999998], [1442404800.0, 86500000.0, 178.0], [1442406528.0, 86520000.0, 178.04], [1442408256.0, 86540000.0, 178.07999999999998], [1442409984.0, 86560000.0, 178.12], [1442411712.0, 86580000.0, 178.16], [1442413440.0, 86600000.0, 178.2], [1442415168.0, 86620000.0, 178.24], [1442416896.0, 86640000.0, 178.28], [1442418624.0, 86660000.0, 178.32], [1442420352.0, 86680000.0, 178.35999999999999], [1442422080.0, 86700000.0, 178.4], [1442423808.0, 86720000.0, 178.44], [1442425536.0, 86740000.0, 178.48], [1442427264.0, 86760000.0, 178.52], [1442428992.0, 86780000.0, 178.56], [1442430720.0, 86800000.0, 178.6], [1442432448.0, 86820000.0, 178.64000000000001], [1442434176.0, 86840000.0, 178.67999999999998], [1442435904.0, 86860000.0, 178.72], [1442437632.0, 86880000.0, 178.76000000000002], [1442439360.0, 86900000.0, 178.79999999999998], [1442441088.0, 86920000.0, 178.84], [1442442816.0, 86940000.0, 178.88000000000002], [1442444544.0, 86960000.0, 178.92], [1442446272.0, 86980000.0, 178.96], [1442448000.0, 87000000.0, 179.0], [1442449728.0, 87020000.0, 179.04], [1442451456.0, 87040000.0, 179.08], [1442453184.0, 87060000.0, 179.12], [1442454912.0, 87080000.0, 179.16], [1442456640.0, 87100000.0, 179.20000000000002], [1442458368.0, 87120000.0, 179.24], [1442460096.0, 87140000.0, 179.28], [1442461824.0, 87160000.0, 179.32], [1442463552.0, 87180000.0, 179.36], [1442465280.0, 87200000.0, 179.4], [1442467008.0, 87220000.0, 179.44], [1442468736.0, 87240000.0, 179.48000000000002], [1442470464.0, 87260000.0, 179.52], [1442472192.0, 87280000.0, 179.56], [1442473920.0, 87300000.0, 179.60000000000002], [1442475648.0, 87320000.0, 179.64], [1442477376.0, 87340000.0, 179.68], [1442479104.0, 87360000.0, 179.72000000000003], [1442480832.0, 87380000.0, 179.76], [1442482560.0, 87400000.0, 179.8], [1442484288.0, 87420000.0, 179.84000000000003], [1442486016.0, 87440000.0, 179.88], [1442487744.0, 87460000.0, 179.92000000000002], [1442489472.0, 87480000.0, 179.95999999999998], [1442491200.0, 87500000.0, 180.0], [1442492928.0, 87520000.0, 180.04000000000002], [1442494656.0, 87540000.0, 180.07999999999998], [1442496384.0, 87560000.0, 180.12], [1442498112.0, 87580000.0, 180.15999999999997], [1442499840.0, 87600000.0, 180.2], [1442501568.0, 87620000.0, 180.24], [1442503296.0, 87640000.0, 180.27999999999997], [1442505024.0, 87660000.0, 180.32], [1442506752.0, 87680000.0, 180.36], [1442508480.0, 87700000.0, 180.39999999999998], [1442510208.0, 87720000.0, 180.44], [1442511936.0, 87740000.0, 180.48], [1442513664.0, 87760000.0, 180.51999999999998], [1442515392.0, 87780000.0, 180.56], [1442517120.0, 87800000.0, 180.6], [1442518848.0, 87820000.0, 180.64], [1442520576.0, 87840000.0, 180.68], [1442522304.0, 87860000.0, 180.72], [1442524032.0, 87880000.0, 180.76], [1442525760.0, 87900000.0, 180.79999999999998], [1442527488.0, 87920000.0, 180.84], [1442529216.0, 87940000.0, 180.88], [1442530944.0, 87960000.0, 180.92], [1442532672.0, 87980000.0, 180.96], [1442534400.0, 88000000.0, 181.0], [1442536128.0, 88020000.0, 181.04], [1442537856.0, 88040000.0, 181.08], [1442539584.0, 88060000.0, 181.11999999999998], [1442541312.0, 88080000.0, 181.16], [1442543040.0, 88100000.0, 181.20000000000002], [1442544768.0, 88120000.0, 181.23999999999998], [1442546496.0, 88140000.0, 181.28], [1442548224.0, 88160000.0, 181.32000000000002], [1442549952.0, 88180000.0, 181.35999999999999], [1442551680.0, 88200000.0, 181.4], [1442553408.0, 88220000.0, 181.44], [1442555136.0, 88240000.0, 181.48], [1442556864.0, 88260000.0, 181.52], [1442558592.0, 88280000.0, 181.56], [1442560320.0, 88300000.0, 181.6], [1442562048.0, 88320000.0, 181.64000000000001], [1442563776.0, 88340000.0, 181.68], [1442565504.0, 88360000.0, 181.72], [1442567232.0, 88380000.0, 181.76], [1442568960.0, 88400000.0, 181.8], [1442570688.0, 88420000.0, 181.84], [1442572416.0, 88440000.0, 181.88], [1442574144.0, 88460000.0, 181.92000000000002], [1442575872.0, 88480000.0, 181.96], [1442577600.0, 88500000.0, 182.0], [1442579328.0, 88520000.0, 182.04000000000002], [1442581056.0, 88540000.0, 182.07999999999998], [1442582784.0, 88560000.0, 182.12], [1442584512.0, 88580000.0, 182.16000000000003], [1442586240.0, 88600000.0, 182.2], [1442587968.0, 88620000.0, 182.24], [1442589696.0, 88640000.0, 182.28000000000003], [1442591424.0, 88660000.0, 182.32], [1442593152.0, 88680000.0, 182.36], [1442594880.0, 88700000.0, 182.39999999999998], [1442596608.0, 88720000.0, 182.44], [1442598336.0, 88740000.0, 182.48000000000002], [1442600064.0, 88760000.0, 182.51999999999998], [1442601792.0, 88780000.0, 182.56], [1442603520.0, 88800000.0, 182.60000000000002], [1442605248.0, 88820000.0, 182.64], [1442606976.0, 88840000.0, 182.68], [1442608704.0, 88860000.0, 182.71999999999997], [1442610432.0, 88880000.0, 182.76], [1442612160.0, 88900000.0, 182.8], [1442613888.0, 88920000.0, 182.83999999999997], [1442615616.0, 88940000.0, 182.88], [1442617344.0, 88960000.0, 182.92000000000002], [1442619072.0, 88980000.0, 182.95999999999998], [1442620800.0, 89000000.0, 183.0], [1442622528.0, 89020000.0, 183.04], [1442624256.0, 89040000.0, 183.07999999999998], [1442625984.0, 89060000.0, 183.12], [1442627712.0, 89080000.0, 183.16], [1442629440.0, 89100000.0, 183.2], [1442631168.0, 89120000.0, 183.24], [1442632896.0, 89140000.0, 183.28], [1442634624.0, 89160000.0, 183.32], [1442636352.0, 89180000.0, 183.35999999999999], [1442638080.0, 89200000.0, 183.4], [1442639808.0, 89220000.0, 183.44], [1442641536.0, 89240000.0, 183.48], [1442643264.0, 89260000.0, 183.52], [1442644992.0, 89280000.0, 183.56], [1442646720.0, 89300000.0, 183.6], [1442648448.0, 89320000.0, 183.64000000000001], [1442650176.0, 89340000.0, 183.67999999999998], [1442651904.0, 89360000.0, 183.72], [1442653632.0, 89380000.0, 183.76000000000002], [1442655360.0, 89400000.0, 183.79999999999998], [1442657088.0, 89420000.0, 183.84], [1442658816.0, 89440000.0, 183.88000000000002], [1442660544.0, 89460000.0, 183.92], [1442662272.0, 89480000.0, 183.96], [1442664000.0, 89500000.0, 184.0], [1442665728.0, 89520000.0, 184.04], [1442667456.0, 89540000.0, 184.08], [1442669184.0, 89560000.0, 184.12], [1442670912.0, 89580000.0, 184.16], [1442672640.0, 89600000.0, 184.20000000000002], [1442674368.0, 89620000.0, 184.24], [1442676096.0, 89640000.0, 184.28], [1442677824.0, 89660000.0, 184.32], [1442679552.0, 89680000.0, 184.36], [1442681280.0, 89700000.0, 184.4], [1442683008.0, 89720000.0, 184.44], [1442684736.0, 89740000.0, 184.48000000000002], [1442686464.0, 89760000.0, 184.52], [1442688192.0, 89780000.0, 184.56], [1442689920.0, 89800000.0, 184.60000000000002], [1442691648.0, 89820000.0, 184.64], [1442693376.0, 89840000.0, 184.68], [1442695104.0, 89860000.0, 184.72000000000003], [1442696832.0, 89880000.0, 184.76], [1442698560.0, 89900000.0, 184.8], [1442700288.0, 89920000.0, 184.84000000000003], [1442702016.0, 89940000.0, 184.88], [1442703744.0, 89960000.0, 184.92000000000002], [1442705472.0, 89980000.0, 184.95999999999998], [1442707200.0, 90000000.0, 185.0], [1442708928.0, 90020000.0, 185.04000000000002], [1442710656.0, 90040000.0, 185.07999999999998], [1442712384.0, 90060000.0, 185.12], [1442714112.0, 90080000.0, 185.15999999999997], [1442715840.0, 90100000.0, 185.2], [1442717568.0, 90120000.0, 185.24], [1442719296.0, 90140000.0, 185.27999999999997], [1442721024.0, 90160000.0, 185.32], [1442722752.0, 90180000.0, 185.36], [1442724480.0, 90200000.0, 185.39999999999998], [1442726208.0, 90220000.0, 185.44], [1442727936.0, 90240000.0, 185.48], [1442729664.0, 90260000.0, 185.51999999999998], [1442731392.0, 90280000.0, 185.56], [1442733120.0, 90300000.0, 185.6], [1442734848.0, 90320000.0, 185.64], [1442736576.0, 90340000.0, 185.68], [1442738304.0, 90360000.0, 185.72], [1442740032.0, 90380000.0, 185.76], [1442741760.0, 90400000.0, 185.79999999999998], [1442743488.0, 90420000.0, 185.84], [1442745216.0, 90440000.0, 185.88], [1442746944.0, 90460000.0, 185.92], [1442748672.0, 90480000.0, 185.96], [1442750400.0, 90500000.0, 186.0], [1442752128.0, 90520000.0, 186.04], [1442753856.0, 90540000.0, 186.08], [1442755584.0, 90560000.0, 186.11999999999998], [1442757312.0, 90580000.0, 186.16], [1442759040.0, 90600000.0, 186.20000000000002], [1442760768.0, 90620000.0, 186.23999999999998], [1442762496.0, 90640000.0, 186.28], [1442764224.0, 90660000.0, 186.32000000000002], [1442765952.0, 90680000.0, 186.35999999999999], [1442767680.0, 90700000.0, 186.4], [1442769408.0, 90720000.0, 186.44], [1442771136.0, 90740000.0, 186.48], [1442772864.0, 90760000.0, 186.52], [1442774592.0, 90780000.0, 186.56], [1442776320.0, 90800000.0, 186.6], [1442778048.0, 90820000.0, 186.64000000000001], [1442779776.0, 90840000.0, 186.68], [1442781504.0, 90860000.0, 186.72], [1442783232.0, 90880000.0, 186.76], [1442784960.0, 90900000.0, 186.8], [1442786688.0, 90920000.0, 186.84], [1442788416.0, 90940000.0, 186.88], [1442790144.0, 90960000.0, 186.92000000000002], [1442791872.0, 90980000.0, 186.96], [1442793600.0, 91000000.0, 187.0], [1442795328.0, 91020000.0, 187.04000000000002], [1442797056.0, 91040000.0, 187.07999999999998], [1442798784.0, 91060000.0, 187.12], [1442800512.0, 91080000.0, 187.16000000000003], [1442802240.0, 91100000.0, 187.2], [1442803968.0, 91120000.0, 187.24], [1442805696.0, 91140000.0, 187.28000000000003], [1442807424.0, 91160000.0, 187.32], [1442809152.0, 91180000.0, 187.36], [1442810880.0, 91200000.0, 187.39999999999998], [1442812608.0, 91220000.0, 187.44], [1442814336.0, 91240000.0, 187.48000000000002], [1442816064.0, 91260000.0, 187.51999999999998], [1442817792.0, 91280000.0, 187.56], [1442819520.0, 91300000.0, 187.60000000000002], [1442821248.0, 91320000.0, 187.64], [1442822976.0, 91340000.0, 187.68], [1442824704.0, 91360000.0, 187.71999999999997], [1442826432.0, 91380000.0, 187.76], [1442828160.0, 91400000.0, 187.8], [1442829888.0, 91420000.0, 187.83999999999997], [1442831616.0, 91440000.0, 187.88], [1442833344.0, 91460000.0, 187.92000000000002], [1442835072.0, 91480000.0, 187.95999999999998], [1442836800.0, 91500000.0, 188.0], [1442838528.0, 91520000.0, 188.04], [1442840256.0, 91540000.0, 188.07999999999998], [1442841984.0, 91560000.0, 188.12], [1442843712.0, 91580000.0, 188.16], [1442845440.0, 91600000.0, 188.2], [1442847168.0, 91620000.0, 188.24], [1442848896.0, 91640000.0, 188.28], [1442850624.0, 91660000.0, 188.32], [1442852352.0, 91680000.0, 188.35999999999999], [1442854080.0, 91700000.0, 188.4], [1442855808.0, 91720000.0, 188.44], [1442857536.0, 91740000.0, 188.48], [1442859264.0, 91760000.0, 188.52], [1442860992.0, 91780000.0, 188.56], [1442862720.0, 91800000.0, 188.6], [1442864448.0, 91820000.0, 188.64000000000001], [1442866176.0, 91840000.0, 188.67999999999998], [1442867904.0, 91860000.0, 188.72], [1442869632.0, 91880000.0, 188.76000000000002], [1442871360.0, 91900000.0, 188.79999999999998], [1442873088.0, 91920000.0, 188.84], [1442874816.0, 91940000.0, 188.88000000000002], [1442876544.0, 91960000.0, 188.92], [1442878272.0, 91980000.0, 188.96], [1442880000.0, 92000000.0, 189.0], [1442881728.0, 92020000.0, 189.04], [1442883456.0, 92040000.0, 189.08], [1442885184.0, 92060000.0, 189.12], [1442886912.0, 92080000.0, 189.16], [1442888640.0, 92100000.0, 189.20000000000002], [1442890368.0, 92120000.0, 189.24], [1442892096.0, 92140000.0, 189.28], [1442893824.0, 92160000.0, 189.32], [1442895552.0, 92180000.0, 189.36], [1442897280.0, 92200000.0, 189.4], [1442899008.0, 92220000.0, 189.44], [1442900736.0, 92240000.0, 189.48000000000002], [1442902464.0, 92260000.0, 189.52], [1442904192.0, 92280000.0, 189.56], [1442905920.0, 92300000.0, 189.60000000000002], [1442907648.0, 92320000.0, 189.64], [1442909376.0, 92340000.0, 189.68], [1442911104.0, 92360000.0, 189.72000000000003], [1442912832.0, 92380000.0, 189.76], [1442914560.0, 92400000.0, 189.8], [1442916288.0, 92420000.0, 189.84000000000003], [1442918016.0, 92440000.0, 189.88], [1442919744.0, 92460000.0, 189.92000000000002], [1442921472.0, 92480000.0, 189.95999999999998], [1442923200.0, 92500000.0, 190.0], [1442924928.0, 92520000.0, 190.04000000000002], [1442926656.0, 92540000.0, 190.07999999999998], [1442928384.0, 92560000.0, 190.12], [1442930112.0, 92580000.0, 190.15999999999997], [1442931840.0, 92600000.0, 190.2], [1442933568.0, 92620000.0, 190.24], [1442935296.0, 92640000.0, 190.27999999999997], [1442937024.0, 92660000.0, 190.32], [1442938752.0, 92680000.0, 190.36], [1442940480.0, 92700000.0, 190.39999999999998], [1442942208.0, 92720000.0, 190.44], [1442943936.0, 92740000.0, 190.48], [1442945664.0, 92760000.0, 190.51999999999998], [1442947392.0, 92780000.0, 190.56], [1442949120.0, 92800000.0, 190.6], [1442950848.0, 92820000.0, 190.64], [1442952576.0, 92840000.0, 190.68], [1442954304.0, 92860000.0, 190.72], [1442956032.0, 92880000.0, 190.76], [1442957760.0, 92900000.0, 190.79999999999998], [1442959488.0, 92920000.0, 190.84], [1442961216.0, 92940000.0, 190.88], [1442962944.0, 92960000.0, 190.92], [1442964672.0, 92980000.0, 190.96], [1442966400.0, 93000000.0, 191.0], [1442968128.0, 93020000.0, 191.04], [1442969856.0, 93040000.0, 191.08], [1442971584.0, 93060000.0, 191.11999999999998], [1442973312.0, 93080000.0, 191.16], [1442975040.0, 93100000.0, 191.20000000000002], [1442976768.0, 93120000.0, 191.23999999999998], [1442978496.0, 93140000.0, 191.28], [1442980224.0, 93160000.0, 191.32000000000002], [1442981952.0, 93180000.0, 191.35999999999999], [1442983680.0, 93200000.0, 191.4], [1442985408.0, 93220000.0, 191.44], [1442987136.0, 93240000.0, 191.48], [1442988864.0, 93260000.0, 191.52], [1442990592.0, 93280000.0, 191.56], [1442992320.0, 93300000.0, 191.6], [1442994048.0, 93320000.0, 191.64000000000001], [1442995776.0, 93340000.0, 191.68], [1442997504.0, 93360000.0, 191.72], [1442999232.0, 93380000.0, 191.76], [1443000960.0, 93400000.0, 191.8], [1443002688.0, 93420000.0, 191.84], [1443004416.0, 93440000.0, 191.88], [1443006144.0, 93460000.0, 191.92000000000002], [1443007872.0, 93480000.0, 191.96], [1443009600.0, 93500000.0, 192.0], [1443011328.0, 93520000.0, 192.04000000000002], [1443013056.0, 93540000.0, 192.07999999999998], [1443014784.0, 93560000.0, 192.12], [1443016512.0, 93580000.0, 192.16000000000003], [1443018240.0, 93600000.0, 192.2], [1443019968.0, 93620000.0, 192.24], [1443021696.0, 93640000.0, 192.28000000000003], [1443023424.0, 93660000.0, 192.32], [1443025152.0, 93680000.0, 192.36], [1443026880.0, 93700000.0, 192.39999999999998], [1443028608.0, 93720000.0, 192.44], [1443030336.0, 93740000.0, 192.48000000000002], [1443032064.0, 93760000.0, 192.51999999999998], [1443033792.0, 93780000.0, 192.56], [1443035520.0, 93800000.0, 192.60000000000002], [1443037248.0, 93820000.0, 192.64], [1443038976.0, 93840000.0, 192.68], [1443040704.0, 93860000.0, 192.71999999999997], [1443042432.0, 93880000.0, 192.76], [1443044160.0, 93900000.0, 192.8], [1443045888.0, 93920000.0, 192.83999999999997], [1443047616.0, 93940000.0, 192.88], [1443049344.0, 93960000.0, 192.92000000000002], [1443051072.0, 93980000.0, 192.95999999999998], [1443052800.0, 94000000.0, 193.0], [1443054528.0, 94020000.0, 193.04], [1443056256.0, 94040000.0, 193.07999999999998], [1443057984.0, 94060000.0, 193.12], [1443059712.0, 94080000.0, 193.16], [1443061440.0, 94100000.0, 193.2], [1443063168.0, 94120000.0, 193.24], [1443064896.0, 94140000.0, 193.28], [1443066624.0, 94160000.0, 193.32], [1443068352.0, 94180000.0, 193.35999999999999], [1443070080.0, 94200000.0, 193.4], [1443071808.0, 94220000.0, 193.44], [1443073536.0, 94240000.0, 193.48], [1443075264.0, 94260000.0, 193.52], [1443076992.0, 94280000.0, 193.56], [1443078720.0, 94300000.0, 193.6], [1443080448.0, 94320000.0, 193.64000000000001], [1443082176.0, 94340000.0, 193.67999999999998], [1443083904.0, 94360000.0, 193.72], [1443085632.0, 94380000.0, 193.76000000000002], [1443087360.0, 94400000.0, 193.79999999999998], [1443089088.0, 94420000.0, 193.84], [1443090816.0, 94440000.0, 193.88000000000002], [1443092544.0, 94460000.0, 193.92], [1443094272.0, 94480000.0, 193.96], [1443096000.0, 94500000.0, 194.0], [1443097728.0, 94520000.0, 194.04], [1443099456.0, 94540000.0, 194.08], [1443101184.0, 94560000.0, 194.12], [1443102912.0, 94580000.0, 194.16], [1443104640.0, 94600000.0, 194.20000000000002], [1443106368.0, 94620000.0, 194.24], [1443108096.0, 94640000.0, 194.28], [1443109824.0, 94660000.0, 194.32], [1443111552.0, 94680000.0, 194.36], [1443113280.0, 94700000.0, 194.4], [1443115008.0, 94720000.0, 194.44], [1443116736.0, 94740000.0, 194.48000000000002], [1443118464.0, 94760000.0, 194.52], [1443120192.0, 94780000.0, 194.56], [1443121920.0, 94800000.0, 194.60000000000002], [1443123648.0, 94820000.0, 194.64], [1443125376.0, 94840000.0, 194.68], [1443127104.0, 94860000.0, 194.72000000000003], [1443128832.0, 94880000.0, 194.76], [1443130560.0, 94900000.0, 194.8], [1443132288.0, 94920000.0, 194.84000000000003], [1443134016.0, 94940000.0, 194.88], [1443135744.0, 94960000.0, 194.92000000000002], [1443137472.0, 94980000.0, 194.95999999999998], [1443139200.0, 95000000.0, 195.0], [1443140928.0, 95020000.0, 195.04000000000002], [1443142656.0, 95040000.0, 195.07999999999998], [1443144384.0, 95060000.0, 195.12], [1443146112.0, 95080000.0, 195.15999999999997], [1443147840.0, 95100000.0, 195.2], [1443149568.0, 95120000.0, 195.24], [1443151296.0, 95140000.0, 195.27999999999997], [1443153024.0, 95160000.0, 195.32], [1443154752.0, 95180000.0, 195.36], [1443156480.0, 95200000.0, 195.39999999999998], [1443158208.0, 95220000.0, 195.44], [1443159936.0, 95240000.0, 195.48], [1443161664.0, 95260000.0, 195.51999999999998], [1443163392.0, 95280000.0, 195.56], [1443165120.0, 95300000.0, 195.6], [1443166848.0, 95320000.0, 195.64], [1443168576.0, 95340000.0, 195.68], [1443170304.0, 95360000.0, 195.72], [1443172032.0, 95380000.0, 195.76], [1443173760.0, 95400000.0, 195.79999999999998], [1443175488.0, 95420000.0, 195.84], [1443177216.0, 95440000.0, 195.88], [1443178944.0, 95460000.0, 195.92], [1443180672.0, 95480000.0, 195.96], [1443182400.0, 95500000.0, 196.0], [1443184128.0, 95520000.0, 196.04], [1443185856.0, 95540000.0, 196.08], [1443187584.0, 95560000.0, 196.11999999999998], [1443189312.0, 95580000.0, 196.16], [1443191040.0, 95600000.0, 196.20000000000002], [1443192768.0, 95620000.0, 196.23999999999998], [1443194496.0, 95640000.0, 196.28], [1443196224.0, 95660000.0, 196.32000000000002], [1443197952.0, 95680000.0, 196.35999999999999], [1443199680.0, 95700000.0, 196.4], [1443201408.0, 95720000.0, 196.44], [1443203136.0, 95740000.0, 196.48], [1443204864.0, 95760000.0, 196.52], [1443206592.0, 95780000.0, 196.56], [1443208320.0, 95800000.0, 196.6], [1443210048.0, 95820000.0, 196.64000000000001], [1443211776.0, 95840000.0, 196.68], [1443213504.0, 95860000.0, 196.72], [1443215232.0, 95880000.0, 196.76], [1443216960.0, 95900000.0, 196.8], [1443218688.0, 95920000.0, 196.84], [1443220416.0, 95940000.0, 196.88], [1443222144.0, 95960000.0, 196.92000000000002], [1443223872.0, 95980000.0, 196.96], [1443225600.0, 96000000.0, 197.0], [1443227328.0, 96020000.0, 197.04000000000002], [1443229056.0, 96040000.0, 197.07999999999998], [1443230784.0, 96060000.0, 197.12], [1443232512.0, 96080000.0, 197.16000000000003], [1443234240.0, 96100000.0, 197.2], [1443235968.0, 96120000.0, 197.24], [1443237696.0, 96140000.0, 197.28000000000003], [1443239424.0, 96160000.0, 197.32], [1443241152.0, 96180000.0, 197.36], [1443242880.0, 96200000.0, 197.39999999999998], [1443244608.0, 96220000.0, 197.44], [1443246336.0, 96240000.0, 197.48000000000002], [1443248064.0, 96260000.0, 197.51999999999998], [1443249792.0, 96280000.0, 197.56], [1443251520.0, 96300000.0, 197.60000000000002], [1443253248.0, 96320000.0, 197.64], [1443254976.0, 96340000.0, 197.68], [1443256704.0, 96360000.0, 197.71999999999997], [1443258432.0, 96380000.0, 197.76], [1443260160.0, 96400000.0, 197.8], [1443261888.0, 96420000.0, 197.83999999999997], [1443263616.0, 96440000.0, 197.88], [1443265344.0, 96460000.0, 197.92000000000002], [1443267072.0, 96480000.0, 197.95999999999998], [1443268800.0, 96500000.0, 198.0], [1443270528.0, 96520000.0, 198.04], [1443272256.0, 96540000.0, 198.07999999999998], [1443273984.0, 96560000.0, 198.12], [1443275712.0, 96580000.0, 198.16], [1443277440.0, 96600000.0, 198.2], [1443279168.0, 96620000.0, 198.24], [1443280896.0, 96640000.0, 198.28], [1443282624.0, 96660000.0, 198.32], [1443284352.0, 96680000.0, 198.35999999999999], [1443286080.0, 96700000.0, 198.4], [1443287808.0, 96720000.0, 198.44], [1443289536.0, 96740000.0, 198.48], [1443291264.0, 96760000.0, 198.52], [1443292992.0, 96780000.0, 198.56], [1443294720.0, 96800000.0, 198.6], [1443296448.0, 96820000.0, 198.64000000000001], [1443298176.0, 96840000.0, 198.67999999999998], [1443299904.0, 96860000.0, 198.72], [1443301632.0, 96880000.0, 198.76000000000002], [1443303360.0, 96900000.0, 198.79999999999998], [1443305088.0, 96920000.0, 198.84], [1443306816.0, 96940000.0, 198.88000000000002], [1443308544.0, 96960000.0, 198.92], [1443310272.0, 96980000.0, 198.96], [1443312000.0, 97000000.0, 199.0], [1443313728.0, 97020000.0, 199.04], [1443315456.0, 97040000.0, 199.08], [1443317184.0, 97060000.0, 199.12], [1443318912.0, 97080000.0, 199.16], [1443320640.0, 97100000.0, 199.20000000000002], [1443322368.0, 97120000.0, 199.24], [1443324096.0, 97140000.0, 199.28], [1443325824.0, 97160000.0, 199.32], [1443327552.0, 97180000.0, 199.36], [1443329280.0, 97200000.0, 199.4], [1443331008.0, 97220000.0, 199.44], [1443332736.0, 97240000.0, 199.48000000000002], [1443334464.0, 97260000.0, 199.52], [1443336192.0, 97280000.0, 199.56], [1443337920.0, 97300000.0, 199.60000000000002], [1443339648.0, 97320000.0, 199.64], [1443341376.0, 97340000.0, 199.68], [1443343104.0, 97360000.0, 199.72000000000003], [1443344832.0, 97380000.0, 199.76], [1443346560.0, 97400000.0, 199.8], [1443348288.0, 97420000.0, 199.84000000000003], [1443350016.0, 97440000.0, 199.88], [1443351744.0, 97460000.0, 199.92000000000002], [1443353472.0, 97480000.0, 199.95999999999998], [1443355200.0, 97500000.0, 200.0], [1443356928.0, 97520000.0, 200.04000000000002], [1443358656.0, 97540000.0, 200.07999999999998], [1443360384.0, 97560000.0, 200.12], [1443362112.0, 97580000.0, 200.15999999999997], [1443363840.0, 97600000.0, 200.2], [1443365568.0, 97620000.0, 200.24], [1443367296.0, 97640000.0, 200.27999999999997], [1443369024.0, 97660000.0, 200.32], [1443370752.0, 97680000.0, 200.36], [1443372480.0, 97700000.0, 200.39999999999998], [1443374208.0, 97720000.0, 200.44], [1443375936.0, 97740000.0, 200.48], [1443377664.0, 97760000.0, 200.51999999999998], [1443379392.0, 97780000.0, 200.56], [1443381120.0, 97800000.0, 200.6], [1443382848.0, 97820000.0, 200.64], [1443384576.0, 97840000.0, 200.68], [1443386304.0, 97860000.0, 200.72], [1443388032.0, 97880000.0, 200.76], [1443389760.0, 97900000.0, 200.79999999999998], [1443391488.0, 97920000.0, 200.84], [1443393216.0, 97940000.0, 200.88], [1443394944.0, 97960000.0, 200.92], [1443396672.0, 97980000.0, 200.96], [1443398400.0, 98000000.0, 201.0], [1443400128.0, 98020000.0, 201.04], [1443401856.0, 98040000.0, 201.08], [1443403584.0, 98060000.0, 201.11999999999998], [1443405312.0, 98080000.0, 201.16], [1443407040.0, 98100000.0, 201.20000000000002], [1443408768.0, 98120000.0, 201.23999999999998], [1443410496.0, 98140000.0, 201.28], [1443412224.0, 98160000.0, 201.32000000000002], [1443413952.0, 98180000.0, 201.35999999999999], [1443415680.0, 98200000.0, 201.4], [1443417408.0, 98220000.0, 201.44], [1443419136.0, 98240000.0, 201.48], [1443420864.0, 98260000.0, 201.52], [1443422592.0, 98280000.0, 201.56], [1443424320.0, 98300000.0, 201.6], [1443426048.0, 98320000.0, 201.64000000000001], [1443427776.0, 98340000.0, 201.68], [1443429504.0, 98360000.0, 201.72], [1443431232.0, 98380000.0, 201.76], [1443432960.0, 98400000.0, 201.8], [1443434688.0, 98420000.0, 201.84], [1443436416.0, 98440000.0, 201.88], [1443438144.0, 98460000.0, 201.92000000000002], [1443439872.0, 98480000.0, 201.96], [1443441600.0, 98500000.0, 202.0], [1443443328.0, 98520000.0, 202.04000000000002], [1443445056.0, 98540000.0, 202.07999999999998], [1443446784.0, 98560000.0, 202.12], [1443448512.0, 98580000.0, 202.16000000000003], [1443450240.0, 98600000.0, 202.2], [1443451968.0, 98620000.0, 202.24], [1443453696.0, 98640000.0, 202.28000000000003], [1443455424.0, 98660000.0, 202.32], [1443457152.0, 98680000.0, 202.36], [1443458880.0, 98700000.0, 202.39999999999998], [1443460608.0, 98720000.0, 202.44], [1443462336.0, 98740000.0, 202.48000000000002], [1443464064.0, 98760000.0, 202.51999999999998], [1443465792.0, 98780000.0, 202.56], [1443467520.0, 98800000.0, 202.60000000000002], [1443469248.0, 98820000.0, 202.64], [1443470976.0, 98840000.0, 202.68], [1443472704.0, 98860000.0, 202.71999999999997], [1443474432.0, 98880000.0, 202.76], [1443476160.0, 98900000.0, 202.8], [1443477888.0, 98920000.0, 202.83999999999997], [1443479616.0, 98940000.0, 202.88], [1443481344.0, 98960000.0, 202.92000000000002], [1443483072.0, 98980000.0, 202.95999999999998], [1443484800.0, 99000000.0, 203.0], [1443486528.0, 99020000.0, 203.04], [1443488256.0, 99040000.0, 203.07999999999998], [1443489984.0, 99060000.0, 203.12], [1443491712.0, 99080000.0, 203.16], [1443493440.0, 99100000.0, 203.2], [1443495168.0, 99120000.0, 203.24], [1443496896.0, 99140000.0, 203.28], [1443498624.0, 99160000.0, 203.32], [1443500352.0, 99180000.0, 203.35999999999999], [1443502080.0, 99200000.0, 203.4], [1443503808.0, 99220000.0, 203.44], [1443505536.0, 99240000.0, 203.48], [1443507264.0, 99260000.0, 203.52], [1443508992.0, 99280000.0, 203.56], [1443510720.0, 99300000.0, 203.6], [1443512448.0, 99320000.0, 203.64000000000001], [1443514176.0, 99340000.0, 203.67999999999998], [1443515904.0, 99360000.0, 203.72], [1443517632.0, 99380000.0, 203.76000000000002], [1443519360.0, 99400000.0, 203.79999999999998], [1443521088.0, 99420000.0, 203.84], [1443522816.0, 99440000.0, 203.88000000000002], [1443524544.0, 99460000.0, 203.92], [1443526272.0, 99480000.0, 203.96], [1443528000.0, 99500000.0, 204.0], [1443529728.0, 99520000.0, 204.04], [1443531456.0, 99540000.0, 204.08], [1443533184.0, 99560000.0, 204.12], [1443534912.0, 99580000.0, 204.16], [1443536640.0, 99600000.0, 204.20000000000002], [1443538368.0, 99620000.0, 204.24], [1443540096.0, 99640000.0, 204.28], [1443541824.0, 99660000.0, 204.32], [1443543552.0, 99680000.0, 204.36], [1443545280.0, 99700000.0, 204.4], [1443547008.0, 99720000.0, 204.44], [1443548736.0, 99740000.0, 204.48000000000002], [1443550464.0, 99760000.0, 204.52], [1443552192.0, 99780000.0, 204.56], [1443553920.0, 99800000.0, 204.60000000000002], [1443555648.0, 99820000.0, 204.64], [1443557376.0, 99840000.0, 204.68], [1443559104.0, 99860000.0, 204.72000000000003], [1443560832.0, 99880000.0, 204.76], [1443562560.0, 99900000.0, 204.8], [1443564288.0, 99920000.0, 204.84000000000003], [1443566016.0, 99940000.0, 204.88], [1443567744.0, 99960000.0, 204.92000000000002], [1443569472.0, 99980000.0, 204.95999999999998]] \ No newline at end of file
diff --git a/tensorflow/tensorboard/app/demo/data/poly5-graph.pbtxt b/tensorflow/tensorboard/app/demo/data/poly5-graph.pbtxt
new file mode 100644
index 0000000000..5bf8834752
--- /dev/null
+++ b/tensorflow/tensorboard/app/demo/data/poly5-graph.pbtxt
@@ -0,0 +1,14 @@
+node {
+ name: "A"
+ op: "Input"
+}
+node {
+ name: "B"
+ op: "Input"
+}
+node {
+ name: "C"
+ op: "MatMul"
+ input: "A"
+ input: "B"
+}
diff --git a/tensorflow/tensorboard/app/demo/data/poly5.json b/tensorflow/tensorboard/app/demo/data/poly5.json
new file mode 100644
index 0000000000..bd885f3be9
--- /dev/null
+++ b/tensorflow/tensorboard/app/demo/data/poly5.json
@@ -0,0 +1 @@
+[[1434931200.0, 0.0, 0.0], [1434932928.0, 20000.0, 1.9960079840320003e-06], [1434934656.0, 40000.0, 3.9840637450240005e-06], [1434936384.0, 60000.0, 5.964214711776e-06], [1434938112.0, 80000.0, 7.936507936768e-06], [1434939840.0, 100000.0, 9.9009901e-06], [1434941568.0, 120000.0, 1.1857707512831999e-05], [1434943296.0, 140000.0, 1.3806706121824001e-05], [1434945024.0, 160000.0, 1.5748031512576e-05], [1434946752.0, 180000.0, 1.7681728913568e-05], [1434948480.0, 200000.0, 1.96078432e-05], [1434950208.0, 220000.0, 2.1526418897632e-05], [1434951936.0, 240000.0, 2.3437500186624e-05], [1434953664.0, 260000.0, 2.5341130905376e-05], [1434955392.0, 280000.0, 2.7237354554368002e-05], [1434957120.0, 300000.0, 2.91262143e-05], [1434958848.0, 320000.0, 3.1007752978432e-05], [1434960576.0, 340000.0, 3.2882013099424006e-05], [1434962304.0, 360000.0, 3.4749036850175996e-05], [1434964032.0, 380000.0, 3.6608866099167997e-05], [1434965760.0, 400000.0, 3.84615424e-05], [1434967488.0, 420000.0, 4.0307106995232e-05], [1434969216.0, 440000.0, 4.2145600820224e-05], [1434970944.0, 460000.0, 4.3977064506975996e-05], [1434972672.0, 480000.0, 4.5801538387968e-05], [1434974400.0, 500000.0, 4.76190625e-05], [1434976128.0, 520000.0, 4.9429676588031996e-05], [1434977856.0, 540000.0, 5.1233420109024e-05], [1434979584.0, 560000.0, 5.3030332235776005e-05], [1434981312.0, 580000.0, 5.482045186076801e-05], [1434983040.0, 600000.0, 5.66038176e-05], [1434984768.0, 620000.0, 5.8380467796832e-05], [1434986496.0, 640000.0, 6.0150440525824e-05], [1434988224.0, 660000.0, 6.1913773596576e-05], [1434989952.0, 680000.0, 6.367050455756801e-05], [1434991680.0, 700000.0, 6.542067070000001e-05], [1434993408.0, 720000.0, 6.7164309061632e-05], [1434995136.0, 740000.0, 6.890145643062399e-05], [1434996864.0, 760000.0, 7.0632149349376e-05], [1434998592.0, 780000.0, 7.2356424118368e-05], [1435000320.0, 800000.0, 7.407431679999999e-05], [1435002048.0, 820000.0, 7.5785863222432e-05], [1435003776.0, 840000.0, 7.7491098983424e-05], [1435005504.0, 860000.0, 7.919005945417599e-05], [1435007232.0, 880000.0, 8.088277978316798e-05], [1435008960.0, 900000.0, 8.25692949e-05], [1435010688.0, 920000.0, 8.4249639519232e-05], [1435012416.0, 940000.0, 8.5923848144224e-05], [1435014144.0, 960000.0, 8.7591955070976e-05], [1435015872.0, 980000.0, 8.9253994391968e-05], [1435017600.0, 1000000.0, 9.091000000000001e-05], [1435019328.0, 1020000.0, 9.2560005592032e-05], [1435021056.0, 1040000.0, 9.4204044673024e-05], [1435022784.0, 1060000.0, 9.584215055977599e-05], [1435024512.0, 1080000.0, 9.7474356384768e-05], [1435026240.0, 1100000.0, 9.91006951e-05], [1435027968.0, 1120000.0, 0.000100721199480832], [1435029696.0, 1140000.0, 0.00010233590212982401], [1435031424.0, 1160000.0, 0.000103944835480576], [1435033152.0, 1180000.0, 0.000105548031801568], [1435034880.0, 1200000.0, 0.0001071455232], [1435036608.0, 1220000.0, 0.000108737341625632], [1435038336.0, 1240000.0, 0.00011032351887462399], [1435040064.0, 1260000.0, 0.000111904086593376], [1435041792.0, 1280000.0, 0.000113479076282368], [1435043520.0, 1300000.0, 0.0001150485193], [1435045248.0, 1320000.0, 0.000116612446866432], [1435046976.0, 1340000.0, 0.00011817089006742401], [1435048704.0, 1360000.0, 0.000119723879858176], [1435050432.0, 1380000.0, 0.000121271447067168], [1435052160.0, 1400000.0, 0.00012281362240000002], [1435053888.0, 1420000.0, 0.000124350436443232], [1435055616.0, 1440000.0, 0.00012588191966822398], [1435057344.0, 1460000.0, 0.000127408102434976], [1435059072.0, 1480000.0, 0.000128929014995968], [1435060800.0, 1500000.0, 0.00013044468749999998], [1435062528.0, 1520000.0, 0.000131955149996032], [1435064256.0, 1540000.0, 0.000133460432437024], [1435065984.0, 1560000.0, 0.000134960564683776], [1435067712.0, 1580000.0, 0.000136455576508768], [1435069440.0, 1600000.0, 0.0001379454976], [1435071168.0, 1620000.0, 0.00013943035756483203], [1435072896.0, 1640000.0, 0.000140910185933824], [1435074624.0, 1660000.0, 0.000142385012164576], [1435076352.0, 1680000.0, 0.000143854865645568], [1435078080.0, 1700000.0, 0.0001453197757], [1435079808.0, 1720000.0, 0.000146779771589632], [1435081536.0, 1740000.0, 0.00014823488251862398], [1435083264.0, 1760000.0, 0.00014968513763737598], [1435084992.0, 1780000.0, 0.00015113056604636798], [1435086720.0, 1800000.0, 0.00015257119680000002], [1435088448.0, 1820000.0, 0.00015400705891043198], [1435090176.0, 1840000.0, 0.00015543818135142402], [1435091904.0, 1860000.0, 0.000156864593062176], [1435093632.0, 1880000.0, 0.000158286322951168], [1435095360.0, 1900000.0, 0.0001597033999], [1435097088.0, 1920000.0, 0.000161115852767232], [1435098816.0, 1940000.0, 0.00016252371039222403], [1435100544.0, 1960000.0, 0.000163927001598976], [1435102272.0, 1980000.0, 0.000165325755199968], [1435104000.0, 2000000.0, 0.00016672], [1435105728.0, 2020000.0, 0.000168109764800032], [1435107456.0, 2040000.0, 0.00016949507840102398], [1435109184.0, 2060000.0, 0.00017087596960777598], [1435110912.0, 2080000.0, 0.00017225246723276798], [1435112640.0, 2100000.0, 0.0001736246001], [1435114368.0, 2120000.0, 0.000174992397048832], [1435116096.0, 2140000.0, 0.000176355886937824], [1435117824.0, 2160000.0, 0.000177715098648576], [1435119552.0, 2180000.0, 0.000179070061089568], [1435121280.0, 2200000.0, 0.0001804208032], [1435123008.0, 2220000.0, 0.000181767353953632], [1435124736.0, 2240000.0, 0.000183109742362624], [1435126464.0, 2260000.0, 0.000184447997481376], [1435128192.0, 2280000.0, 0.000185782148410368], [1435129920.0, 2300000.0, 0.0001871122243], [1435131648.0, 2320000.0, 0.00018843825435443202], [1435133376.0, 2340000.0, 0.00018976026783542398], [1435135104.0, 2360000.0, 0.000191078294066176], [1435136832.0, 2380000.0, 0.000192392362435168], [1435138560.0, 2400000.0, 0.0001937025024], [1435140288.0, 2420000.0, 0.00019500874349123197], [1435142016.0, 2440000.0, 0.000196311115316224], [1435143744.0, 2460000.0, 0.000197609647562976], [1435145472.0, 2480000.0, 0.000198904370003968], [1435147200.0, 2500000.0, 0.0002001953125], [1435148928.0, 2520000.0, 0.000201482505004032], [1435150656.0, 2540000.0, 0.000202765977565024], [1435152384.0, 2560000.0, 0.000204045760331776], [1435154112.0, 2580000.0, 0.00020532188355676801], [1435155840.0, 2600000.0, 0.00020659437759999998], [1435157568.0, 2620000.0, 0.000207863272932832], [1435159296.0, 2640000.0, 0.000209128600141824], [1435161024.0, 2660000.0, 0.000210390389932576], [1435162752.0, 2680000.0, 0.000211648673133568], [1435164480.0, 2700000.0, 0.0002129034807], [1435166208.0, 2720000.0, 0.000214154843717632], [1435167936.0, 2740000.0, 0.000215402793406624], [1435169664.0, 2760000.0, 0.00021664736112537604], [1435171392.0, 2780000.0, 0.000217888578374368], [1435173120.0, 2800000.0, 0.00021912647680000002], [1435174848.0, 2820000.0, 0.00022036108819843198], [1435176576.0, 2840000.0, 0.00022159244451942398], [1435178304.0, 2860000.0, 0.000222820577870176], [1435180032.0, 2880000.0, 0.000224045520519168], [1435181760.0, 2900000.0, 0.00022526730489999997], [1435183488.0, 2920000.0, 0.000226485963615232], [1435185216.0, 2940000.0, 0.00022770152944022397], [1435186944.0, 2960000.0, 0.000228914035326976], [1435188672.0, 2980000.0, 0.00023012351440796798], [1435190400.0, 3000000.0, 0.00023132999999999997], [1435192128.0, 3020000.0, 0.00023253352560803197], [1435193856.0, 3040000.0, 0.000233734124929024], [1435195584.0, 3060000.0, 0.00023493183185577598], [1435197312.0, 3080000.0, 0.00023612668048076797], [1435199040.0, 3100000.0, 0.0002373187051], [1435200768.0, 3120000.0, 0.000238507940216832], [1435202496.0, 3140000.0, 0.000239694420545824], [1435204224.0, 3160000.0, 0.00024087818101657598], [1435205952.0, 3180000.0, 0.00024205925677756802], [1435207680.0, 3200000.0, 0.0002432376832], [1435209408.0, 3220000.0, 0.000244413495881632], [1435211136.0, 3240000.0, 0.000245586730650624], [1435212864.0, 3260000.0, 0.000246757423569376], [1435214592.0, 3280000.0, 0.000247925610938368], [1435216320.0, 3300000.0, 0.0002490913293], [1435218048.0, 3320000.0, 0.000250254615442432], [1435219776.0, 3340000.0, 0.00025141550640342403], [1435221504.0, 3360000.0, 0.00025257403947417603], [1435223232.0, 3380000.0, 0.00025373025220316804], [1435224960.0, 3400000.0, 0.0002548841824], [1435226688.0, 3420000.0, 0.000256035868139232], [1435228416.0, 3440000.0, 0.000257185347764224], [1435230144.0, 3460000.0, 0.00025833265989097596], [1435231872.0, 3480000.0, 0.000259477843411968], [1435233600.0, 3500000.0, 0.0002606209375], [1435235328.0, 3520000.0, 0.000261761981612032], [1435237056.0, 3540000.0, 0.00026290101549302403], [1435238784.0, 3560000.0, 0.000264038079179776], [1435240512.0, 3580000.0, 0.00026517321300476796], [1435242240.0, 3600000.0, 0.0002663064576], [1435243968.0, 3620000.0, 0.00026743785390083197], [1435245696.0, 3640000.0, 0.000268567443149824], [1435247424.0, 3660000.0, 0.000269695266900576], [1435249152.0, 3680000.0, 0.000270821367021568], [1435250880.0, 3700000.0, 0.0002719457857], [1435252608.0, 3720000.0, 0.00027306856544563195], [1435254336.0, 3740000.0, 0.000274189749094624], [1435256064.0, 3760000.0, 0.000275309379813376], [1435257792.0, 3780000.0, 0.00027642750110236803], [1435259520.0, 3800000.0, 0.00027754415679999997], [1435261248.0, 3820000.0, 0.000278659391086432], [1435262976.0, 3840000.0, 0.00027977324848742403], [1435264704.0, 3860000.0, 0.000280885773878176], [1435266432.0, 3880000.0, 0.000281997012487168], [1435268160.0, 3900000.0, 0.0002831070099], [1435269888.0, 3920000.0, 0.00028421581206323197], [1435271616.0, 3940000.0, 0.000285323465288224], [1435273344.0, 3960000.0, 0.000286430016254976], [1435275072.0, 3980000.0, 0.000287535512015968], [1435276800.0, 4000000.0, 0.00028864], [1435278528.0, 4020000.0, 0.00028974352801603196], [1435280256.0, 4040000.0, 0.00029084614425702406], [1435281984.0, 4060000.0, 0.000291947897303776], [1435283712.0, 4080000.0, 0.00029304883612876797], [1435285440.0, 4100000.0, 0.0002941490101], [1435287168.0, 4120000.0, 0.000295248468984832], [1435288896.0, 4140000.0, 0.00029634726295382394], [1435290624.0, 4160000.0, 0.000297445442584576], [1435292352.0, 4180000.0, 0.000298543058865568], [1435294080.0, 4200000.0, 0.00029964016319999995], [1435295808.0, 4220000.0, 0.000300736807409632], [1435297536.0, 4240000.0, 0.00030183304373862394], [1435299264.0, 4260000.0, 0.000302928924857376], [1435300992.0, 4280000.0, 0.000304024503866368], [1435302720.0, 4300000.0, 0.0003051198343], [1435304448.0, 4320000.0, 0.00030621497013043195], [1435306176.0, 4340000.0, 0.000307309965771424], [1435307904.0, 4360000.0, 0.000308404876082176], [1435309632.0, 4380000.0, 0.000309499756371168], [1435311360.0, 4400000.0, 0.0003105946624], [1435313088.0, 4420000.0, 0.000311689650387232], [1435314816.0, 4440000.0, 0.000312784777012224], [1435316544.0, 4460000.0, 0.000313880099418976], [1435318272.0, 4480000.0, 0.000314975675219968], [1435320000.0, 4500000.0, 0.0003160715625], [1435321728.0, 4520000.0, 0.000317167819820032], [1435323456.0, 4540000.0, 0.000318264506221024], [1435325184.0, 4560000.0, 0.000319361681227776], [1435326912.0, 4580000.0, 0.00032045940485276805], [1435328640.0, 4600000.0, 0.0003215577376], [1435330368.0, 4620000.0, 0.000322656740468832], [1435332096.0, 4640000.0, 0.000323756474957824], [1435333824.0, 4660000.0, 0.000324857003068576], [1435335552.0, 4680000.0, 0.000325958387309568], [1435337280.0, 4700000.0, 0.00032706069069999996], [1435339008.0, 4720000.0, 0.00032816397677363194], [1435340736.0, 4740000.0, 0.000329268309582624], [1435342464.0, 4760000.0, 0.000330373753701376], [1435344192.0, 4780000.0, 0.000331480374230368], [1435345920.0, 4800000.0, 0.0003325882368], [1435347648.0, 4820000.0, 0.000333697407574432], [1435349376.0, 4840000.0, 0.000334807953255424], [1435351104.0, 4860000.0, 0.000335919941086176], [1435352832.0, 4880000.0, 0.000337033438855168], [1435354560.0, 4900000.0, 0.0003381485149], [1435356288.0, 4920000.0, 0.000339265238111232], [1435358016.0, 4940000.0, 0.00034038367793622396], [1435359744.0, 4960000.0, 0.000341503904382976], [1435361472.0, 4980000.0, 0.00034262598802396797], [1435363200.0, 5000000.0, 0.00034375], [1435364928.0, 5020000.0, 0.00034487601202403203], [1435366656.0, 5040000.0, 0.000346004096385024], [1435368384.0, 5060000.0, 0.000347134325951776], [1435370112.0, 5080000.0, 0.000348266774176768], [1435371840.0, 5100000.0, 0.0003494015151000001], [1435373568.0, 5120000.0, 0.00035053862335283204], [1435375296.0, 5140000.0, 0.00035167817416182403], [1435377024.0, 5160000.0, 0.000352820243352576], [1435378752.0, 5180000.0, 0.000353964907353568], [1435380480.0, 5200000.0, 0.0003551122432], [1435382208.0, 5220000.0, 0.0003562623285376321], [1435383936.0, 5240000.0, 0.00035741524162662396], [1435385664.0, 5260000.0, 0.000358571061345376], [1435387392.0, 5280000.0, 0.000359729867194368], [1435389120.0, 5300000.0, 0.0003608917393], [1435390848.0, 5320000.0, 0.000362056758418432], [1435392576.0, 5340000.0, 0.00036322500593942403], [1435394304.0, 5360000.0, 0.000364396563890176], [1435396032.0, 5380000.0, 0.00036557151493916805], [1435397760.0, 5400000.0, 0.00036674994240000003], [1435399488.0, 5420000.0, 0.00036793193023523205], [1435401216.0, 5440000.0, 0.000369117563060224], [1435402944.0, 5460000.0, 0.00037030692614697605], [1435404672.0, 5480000.0, 0.000371500105427968], [1435406400.0, 5500000.0, 0.0003726971875], [1435408128.0, 5520000.0, 0.0003738982596280321], [1435409856.0, 5540000.0, 0.000375103409749024], [1435411584.0, 5560000.0, 0.00037631272647577603], [1435413312.0, 5580000.0, 0.000377526299100768], [1435415040.0, 5600000.0, 0.00037874421760000006], [1435416768.0, 5620000.0, 0.000379966572636832], [1435418496.0, 5640000.0, 0.00038119345556582394], [1435420224.0, 5660000.0, 0.000382424958436576], [1435421952.0, 5680000.0, 0.00038366117399756797], [1435423680.0, 5700000.0, 0.00038490219569999994], [1435425408.0, 5720000.0, 0.000386148117701632], [1435427136.0, 5740000.0, 0.000387399034870624], [1435428864.0, 5760000.0, 0.00038865504278937595], [1435430592.0, 5780000.0, 0.000389916237758368], [1435432320.0, 5800000.0, 0.00039118271679999995], [1435434048.0, 5820000.0, 0.000392454577662432], [1435435776.0, 5840000.0, 0.00039373191882342395], [1435437504.0, 5860000.0, 0.00039501483949417595], [1435439232.0, 5880000.0, 0.000396303439623168], [1435440960.0, 5900000.0, 0.00039759781989999997], [1435442688.0, 5920000.0, 0.00039889808175923205], [1435444416.0, 5940000.0, 0.00040020432738422393], [1435446144.0, 5960000.0, 0.000401516659710976], [1435447872.0, 5980000.0, 0.00040283518243196796], [1435449600.0, 6000000.0, 0.00040416], [1435451328.0, 6020000.0, 0.000405491217632032], [1435453056.0, 6040000.0, 0.000406828941313024], [1435454784.0, 6060000.0, 0.000408173277799776], [1435456512.0, 6080000.0, 0.00040952433462476803], [1435458240.0, 6100000.0, 0.00041088222009999997], [1435459968.0, 6120000.0, 0.00041224704332083203], [1435461696.0, 6140000.0, 0.00041361891416982397], [1435463424.0, 6160000.0, 0.00041499794332057596], [1435465152.0, 6180000.0, 0.000416384242241568], [1435466880.0, 6200000.0, 0.00041777792319999994], [1435468608.0, 6220000.0, 0.000419179099265632], [1435470336.0, 6240000.0, 0.000420587884314624], [1435472064.0, 6260000.0, 0.000422004393033376], [1435473792.0, 6280000.0, 0.000423428740922368], [1435475520.0, 6300000.0, 0.0004248610443], [1435477248.0, 6320000.0, 0.00042630142030643204], [1435478976.0, 6340000.0, 0.00042774998690742395], [1435480704.0, 6360000.0, 0.000429206862898176], [1435482432.0, 6380000.0, 0.000430672167907168], [1435484160.0, 6400000.0, 0.00043214602240000005], [1435485888.0, 6420000.0, 0.000433628547683232], [1435487616.0, 6440000.0, 0.00043511986590822395], [1435489344.0, 6460000.0, 0.00043662010007497606], [1435491072.0, 6480000.0, 0.00043812937403596804], [1435492800.0, 6500000.0, 0.00043964781249999994], [1435494528.0, 6520000.0, 0.000441175541036032], [1435496256.0, 6540000.0, 0.000442712686077024], [1435497984.0, 6560000.0, 0.000444259374923776], [1435499712.0, 6580000.0, 0.000445815735748768], [1435501440.0, 6600000.0, 0.00044738189760000003], [1435503168.0, 6620000.0, 0.0004489579904048321], [1435504896.0, 6640000.0, 0.000450544144973824], [1435506624.0, 6660000.0, 0.00045214049300457604], [1435508352.0, 6680000.0, 0.000453747167085568], [1435510080.0, 6700000.0, 0.0004553643007], [1435511808.0, 6720000.0, 0.00045699202822963204], [1435513536.0, 6740000.0, 0.000458630484958624], [1435515264.0, 6760000.0, 0.00046027980707737603], [1435516992.0, 6780000.0, 0.00046194013168636807], [1435518720.0, 6800000.0, 0.0004636115968], [1435520448.0, 6820000.0, 0.000465294341350432], [1435522176.0, 6840000.0, 0.0004669885051914241], [1435523904.0, 6860000.0, 0.000468694229102176], [1435525632.0, 6880000.0, 0.0004704116547911679], [1435527360.0, 6900000.0, 0.0004721409249], [1435529088.0, 6920000.0, 0.00047388218300723194], [1435530816.0, 6940000.0, 0.000475635573632224], [1435532544.0, 6960000.0, 0.00047740124223897597], [1435534272.0, 6980000.0, 0.000479179335239968], [1435536000.0, 7000000.0, 0.00048096999999999994], [1435537728.0, 7020000.0, 0.0004827733848400319], [1435539456.0, 7040000.0, 0.000484589639041024], [1435541184.0, 7060000.0, 0.000486418912847776], [1435542912.0, 7080000.0, 0.000488261357472768], [1435544640.0, 7100000.0, 0.0004901171250999999], [1435546368.0, 7120000.0, 0.0004919863688888319], [1435548096.0, 7140000.0, 0.0004938692429778239], [1435549824.0, 7160000.0, 0.0004957659024885758], [1435551552.0, 7180000.0, 0.0004976765035295679], [1435553280.0, 7200000.0, 0.0004996012032], [1435555008.0, 7220000.0, 0.000501540159593632], [1435556736.0, 7240000.0, 0.0005034935318026239], [1435558464.0, 7260000.0, 0.0005054614799213759], [1435560192.0, 7280000.0, 0.0005074441650503679], [1435561920.0, 7300000.0, 0.0005094417493000001], [1435563648.0, 7320000.0, 0.000511454395794432], [1435565376.0, 7340000.0, 0.0005134822686754239], [1435567104.0, 7360000.0, 0.000515525533106176], [1435568832.0, 7380000.0, 0.000517584355275168], [1435570560.0, 7400000.0, 0.0005196589024], [1435572288.0, 7420000.0, 0.0005217493427312321], [1435574016.0, 7440000.0, 0.000523855845556224], [1435575744.0, 7460000.0, 0.0005259785812029759], [1435577472.0, 7480000.0, 0.0005281177210439681], [1435579200.0, 7500000.0, 0.0005302734375], [1435580928.0, 7520000.0, 0.000532445904044032], [1435582656.0, 7540000.0, 0.0005346352952050239], [1435584384.0, 7560000.0, 0.000536841786571776], [1435586112.0, 7580000.0, 0.000539065554796768], [1435587840.0, 7600000.0, 0.0005413067776], [1435589568.0, 7620000.0, 0.000543565633772832], [1435591296.0, 7640000.0, 0.000545842303181824], [1435593024.0, 7660000.0, 0.0005481369667725759], [1435594752.0, 7680000.0, 0.000550449806573568], [1435596480.0, 7700000.0, 0.0005527810057], [1435598208.0, 7720000.0, 0.000555130748357632], [1435599936.0, 7740000.0, 0.000557499219846624], [1435601664.0, 7760000.0, 0.000559886606565376], [1435603392.0, 7780000.0, 0.000562293096014368], [1435605120.0, 7800000.0, 0.0005647188768], [1435606848.0, 7820000.0, 0.0005671641386384321], [1435608576.0, 7840000.0, 0.000569629072359424], [1435610304.0, 7860000.0, 0.000572113869910176], [1435612032.0, 7880000.0, 0.0005746187243591681], [1435613760.0, 7900000.0, 0.0005771438299], [1435615488.0, 7920000.0, 0.000579689381855232], [1435617216.0, 7940000.0, 0.000582255576680224], [1435618944.0, 7960000.0, 0.000584842611966976], [1435620672.0, 7980000.0, 0.000587450686447968], [1435622400.0, 8000000.0, 0.0005900800000000001], [1435624128.0, 8020000.0, 0.0005927307536480321], [1435625856.0, 8040000.0, 0.000595403149569024], [1435627584.0, 8060000.0, 0.0005980973910957761], [1435629312.0, 8080000.0, 0.000600813682720768], [1435631040.0, 8100000.0, 0.0006035522301000001], [1435632768.0, 8120000.0, 0.0006063132400568321], [1435634496.0, 8140000.0, 0.0006090969205858239], [1435636224.0, 8160000.0, 0.0006119034808565759], [1435637952.0, 8180000.0, 0.0006147331312175679], [1435639680.0, 8200000.0, 0.0006175860832], [1435641408.0, 8220000.0, 0.0006204625495216319], [1435643136.0, 8240000.0, 0.000623362744090624], [1435644864.0, 8260000.0, 0.0006262868820093761], [1435646592.0, 8280000.0, 0.0006292351795783679], [1435648320.0, 8300000.0, 0.0006322078543], [1435650048.0, 8320000.0, 0.000635205124882432], [1435651776.0, 8340000.0, 0.000638227211243424], [1435653504.0, 8360000.0, 0.000641274334514176], [1435655232.0, 8380000.0, 0.0006443467170431681], [1435656960.0, 8400000.0, 0.0006474445823999999], [1435658688.0, 8420000.0, 0.0006505681553792321], [1435660416.0, 8440000.0, 0.000653717662004224], [1435662144.0, 8460000.0, 0.000656893329530976], [1435663872.0, 8480000.0, 0.0006600953864519678], [1435665600.0, 8500000.0, 0.0006633240624999999], [1435667328.0, 8520000.0, 0.000666579588652032], [1435669056.0, 8540000.0, 0.0006698621971330239], [1435670784.0, 8560000.0, 0.0006731721214197759], [1435672512.0, 8580000.0, 0.000676509596244768], [1435674240.0, 8600000.0, 0.0006798748576], [1435675968.0, 8620000.0, 0.0006832681427408321], [1435677696.0, 8640000.0, 0.000686689690189824], [1435679424.0, 8660000.0, 0.000690139739740576], [1435681152.0, 8680000.0, 0.000693618532461568], [1435682880.0, 8700000.0, 0.0006971263107], [1435684608.0, 8720000.0, 0.0007006633180856321], [1435686336.0, 8740000.0, 0.000704229799534624], [1435688064.0, 8760000.0, 0.000707826001253376], [1435689792.0, 8780000.0, 0.000711452170742368], [1435691520.0, 8800000.0, 0.0007151085568], [1435693248.0, 8820000.0, 0.0007187954095264319], [1435694976.0, 8840000.0, 0.000722512980327424], [1435696704.0, 8860000.0, 0.0007262615219181761], [1435698432.0, 8880000.0, 0.000730041288327168], [1435700160.0, 8900000.0, 0.0007338525349000002], [1435701888.0, 8920000.0, 0.000737695518303232], [1435703616.0, 8940000.0, 0.000741570496528224], [1435705344.0, 8960000.0, 0.000745477728894976], [1435707072.0, 8980000.0, 0.0007494174760559681], [1435708800.0, 9000000.0, 0.0007533900000000002], [1435710528.0, 9020000.0, 0.000757395564056032], [1435712256.0, 9040000.0, 0.0007614344328970241], [1435713984.0, 9060000.0, 0.0007655068725437762], [1435715712.0, 9080000.0, 0.0007696131503687679], [1435717440.0, 9100000.0, 0.0007737535351000001], [1435719168.0, 9120000.0, 0.0007779282968248321], [1435720896.0, 9140000.0, 0.000782137706993824], [1435722624.0, 9160000.0, 0.0007863820384245761], [1435724352.0, 9180000.0, 0.0007906615653055681], [1435726080.0, 9200000.0, 0.0007949765632000001], [1435727808.0, 9220000.0, 0.0007993273090496321], [1435729536.0, 9240000.0, 0.0008037140811786242], [1435731264.0, 9260000.0, 0.0008081371592973762], [1435732992.0, 9280000.0, 0.0008125968245063682], [1435734720.0, 9300000.0, 0.0008170933593000001], [1435736448.0, 9320000.0, 0.0008216270475704322], [1435738176.0, 9340000.0, 0.000826198174611424], [1435739904.0, 9360000.0, 0.0008308070271221761], [1435741632.0, 9380000.0, 0.0008354538932111679], [1435743360.0, 9400000.0, 0.0008401390623999998], [1435745088.0, 9420000.0, 0.0008448628256272318], [1435746816.0, 9440000.0, 0.0008496254752522239], [1435748544.0, 9460000.0, 0.0008544273050589759], [1435750272.0, 9480000.0, 0.0008592686102599678], [1435752000.0, 9500000.0, 0.0008641496874999998], [1435753728.0, 9520000.0, 0.000869070834860032], [1435755456.0, 9540000.0, 0.0008740323518610239], [1435757184.0, 9560000.0, 0.0008790345394677759], [1435758912.0, 9580000.0, 0.0008840777000927679], [1435760640.0, 9600000.0, 0.0008891621375999998], [1435762368.0, 9620000.0, 0.0008942881573088319], [1435764096.0, 9640000.0, 0.0008994560659978239], [1435765824.0, 9660000.0, 0.0009046661719085757], [1435767552.0, 9680000.0, 0.0009099187847495679], [1435769280.0, 9700000.0, 0.0009152142157], [1435771008.0, 9720000.0, 0.000920552777413632], [1435772736.0, 9740000.0, 0.0009259347840226238], [1435774464.0, 9760000.0, 0.0009313605511413759], [1435776192.0, 9780000.0, 0.0009368303958703678], [1435777920.0, 9800000.0, 0.0009423446368], [1435779648.0, 9820000.0, 0.000947903594014432], [1435781376.0, 9840000.0, 0.000953507589095424], [1435783104.0, 9860000.0, 0.000959156945126176], [1435784832.0, 9880000.0, 0.0009648519866951679], [1435786560.0, 9900000.0, 0.0009705930399], [1435788288.0, 9920000.0, 0.0009763804323512321], [1435790016.0, 9940000.0, 0.000982214493176224], [1435791744.0, 9960000.0, 0.000988095553022976], [1435793472.0, 9980000.0, 0.000994023944063968], [1435795200.0, 10000000.0, 0.001], [1435796928.0, 10020000.0, 0.0010060240560640318], [1435798656.0, 10040000.0, 0.0010120964490250238], [1435800384.0, 10060000.0, 0.0010182175171917762], [1435802112.0, 10080000.0, 0.001024387600416768], [1435803840.0, 10100000.0, 0.0010306070401000004], [1435805568.0, 10120000.0, 0.0010368761791928322], [1435807296.0, 10140000.0, 0.0010431953622018239], [1435809024.0, 10160000.0, 0.001049564935192576], [1435810752.0, 10180000.0, 0.0010559852457935682], [1435812480.0, 10200000.0, 0.0010624566432000002], [1435814208.0, 10220000.0, 0.001068979478177632], [1435815936.0, 10240000.0, 0.001075554103066624], [1435817664.0, 10260000.0, 0.001082180871785376], [1435819392.0, 10280000.0, 0.0010888601398343681], [1435821120.0, 10300000.0, 0.0010955922643], [1435822848.0, 10320000.0, 0.0011023776038584323], [1435824576.0, 10340000.0, 0.0011092165187794243], [1435826304.0, 10360000.0, 0.0011161093709301762], [1435828032.0, 10380000.0, 0.0011230565237791681], [1435829760.0, 10400000.0, 0.0011300583423999998], [1435831488.0, 10420000.0, 0.0011371151934752319], [1435833216.0, 10440000.0, 0.0011442274453002243], [1435834944.0, 10460000.0, 0.0011513954677869762], [1435836672.0, 10480000.0, 0.001158619632467968], [1435838400.0, 10500000.0, 0.0011659003125000004], [1435840128.0, 10520000.0, 0.0011732378826680323], [1435841856.0, 10540000.0, 0.001180632719389024], [1435843584.0, 10560000.0, 0.001188085200715776], [1435845312.0, 10580000.0, 0.0011955957063407682], [1435847040.0, 10600000.0, 0.0012031646175999998], [1435848768.0, 10620000.0, 0.0012107923174768322], [1435850496.0, 10640000.0, 0.001218479190605824], [1435852224.0, 10660000.0, 0.001226225623276576], [1435853952.0, 10680000.0, 0.0012340320034375683], [1435855680.0, 10700000.0, 0.0012418987207000003], [1435857408.0, 10720000.0, 0.0012498261663416322], [1435859136.0, 10740000.0, 0.0012578147333106241], [1435860864.0, 10760000.0, 0.0012658648162293764], [1435862592.0, 10780000.0, 0.0012739768113983682], [1435864320.0, 10800000.0, 0.0012821511168000005], [1435866048.0, 10820000.0, 0.0012903881321024325], [1435867776.0, 10840000.0, 0.0012986882586634245], [1435869504.0, 10860000.0, 0.0013070518995341764], [1435871232.0, 10880000.0, 0.0013154794594631685], [1435872960.0, 10900000.0, 0.0013239713449000002], [1435874688.0, 10920000.0, 0.0013325279639992325], [1435876416.0, 10940000.0, 0.0013411497266242244], [1435878144.0, 10960000.0, 0.0013498370443509762], [1435879872.0, 10980000.0, 0.0013585903304719684], [1435881600.0, 11000000.0, 0.0013674100000000005], [1435883328.0, 11020000.0, 0.0013762964696720323], [1435885056.0, 11040000.0, 0.0013852501579530248], [1435886784.0, 11060000.0, 0.0013942714850397765], [1435888512.0, 11080000.0, 0.0014033608728647685], [1435890240.0, 11100000.0, 0.0014125187451000006], [1435891968.0, 11120000.0, 0.0014217455271608324], [1435893696.0, 11140000.0, 0.0014310416462098244], [1435895424.0, 11160000.0, 0.0014404075311605766], [1435897152.0, 11180000.0, 0.0014498436126815686], [1435898880.0, 11200000.0, 0.0014593503232000005], [1435900608.0, 11220000.0, 0.0014689280969056324], [1435902336.0, 11240000.0, 0.0014785773697546245], [1435904064.0, 11260000.0, 0.0014882985794733754], [1435905792.0, 11280000.0, 0.0014980921655623675], [1435907520.0, 11300000.0, 0.0015079585692999995], [1435909248.0, 11320000.0, 0.0015178982337464314], [1435910976.0, 11340000.0, 0.0015279116037474232], [1435912704.0, 11360000.0, 0.0015379991259381756], [1435914432.0, 11380000.0, 0.0015481612487471676], [1435916160.0, 11400000.0, 0.0015583984223999992], [1435917888.0, 11420000.0, 0.0015687110989232313], [1435919616.0, 11440000.0, 0.0015790997321482236], [1435921344.0, 11460000.0, 0.0015895647777149754], [1435923072.0, 11480000.0, 0.0016001066930759675], [1435924800.0, 11500000.0, 0.0016107259374999999], [1435926528.0, 11520000.0, 0.0016214229720760316], [1435928256.0, 11540000.0, 0.0016321982597170233], [1435929984.0, 11560000.0, 0.0016430522651637758], [1435931712.0, 11580000.0, 0.0016539854549887673], [1435933440.0, 11600000.0, 0.0016649982975999993], [1435935168.0, 11620000.0, 0.0016760912632448317], [1435936896.0, 11640000.0, 0.0016872648240138235], [1435938624.0, 11660000.0, 0.0016985194538445753], [1435940352.0, 11680000.0, 0.0017098556285255675], [1435942080.0, 11700000.0, 0.0017212738256999996], [1435943808.0, 11720000.0, 0.0017327745248696316], [1435945536.0, 11740000.0, 0.0017443582073986238], [1435947264.0, 11760000.0, 0.0017560253565173758], [1435948992.0, 11780000.0, 0.0017677764573263677], [1435950720.0, 11800000.0, 0.0017796119968], [1435952448.0, 11820000.0, 0.0017915324637904316], [1435954176.0, 11840000.0, 0.0018035383490314235], [1435955904.0, 11860000.0, 0.0018156301451421758], [1435957632.0, 11880000.0, 0.0018278083466311673], [1435959360.0, 11900000.0, 0.001840073449899999], [1435961088.0, 11920000.0, 0.0018524259532472322], [1435962816.0, 11940000.0, 0.0018648663568722234], [1435964544.0, 11960000.0, 0.0018773951628789755], [1435966272.0, 11980000.0, 0.0018900128752799674], [1435968000.0, 12000000.0, 0.0019027199999999992], [1435969728.0, 12020000.0, 0.0019155170448800316], [1435971456.0, 12040000.0, 0.0019284045196810234], [1435973184.0, 12060000.0, 0.0019413829360877756], [1435974912.0, 12080000.0, 0.0019544528077127675], [1435976640.0, 12100000.0, 0.0019676146501], [1435978368.0, 12120000.0, 0.0019808689807288317], [1435980096.0, 12140000.0, 0.0019942163190178235], [1435981824.0, 12160000.0, 0.0020076571863285758], [1435983552.0, 12180000.0, 0.0020211921059695684], [1435985280.0, 12200000.0, 0.0020348216032], [1435987008.0, 12220000.0, 0.002048546205233632], [1435988736.0, 12240000.0, 0.0020623664412426235], [1435990464.0, 12260000.0, 0.002076282842361376], [1435992192.0, 12280000.0, 0.002090295941690368], [1435993920.0, 12300000.0, 0.0021044062742999995], [1435995648.0, 12320000.0, 0.002118614377234431], [1435997376.0, 12340000.0, 0.002132920789515423], [1435999104.0, 12360000.0, 0.002147326052146176], [1436000832.0, 12380000.0, 0.0021618307081151676], [1436002560.0, 12400000.0, 0.0021764353024], [1436004288.0, 12420000.0, 0.002191140381971232], [1436006016.0, 12440000.0, 0.0022059464957962247], [1436007744.0, 12460000.0, 0.0022208541948429755], [1436009472.0, 12480000.0, 0.002235864032083968], [1436011200.0, 12500000.0, 0.0022509765625], [1436012928.0, 12520000.0, 0.0022661923430840314], [1436014656.0, 12540000.0, 0.0022815119328450243], [1436016384.0, 12560000.0, 0.002296935892811776], [1436018112.0, 12580000.0, 0.002312464786036768], [1436019840.0, 12600000.0, 0.0023280991775999995], [1436021568.0, 12620000.0, 0.0023438396346128322], [1436023296.0, 12640000.0, 0.002359686726221824], [1436025024.0, 12660000.0, 0.002375641023612576], [1436026752.0, 12680000.0, 0.002391703100013568], [1436028480.0, 12700000.0, 0.0024078735307], [1436030208.0, 12720000.0, 0.002424152892997632], [1436031936.0, 12740000.0, 0.002440541766286624], [1436033664.0, 12760000.0, 0.002457040732005376], [1436035392.0, 12780000.0, 0.0024736503736543687], [1436037120.0, 12800000.0, 0.002490371276800001], [1436038848.0, 12820000.0, 0.002507204029078432], [1436040576.0, 12840000.0, 0.002524149220199424], [1436042304.0, 12860000.0, 0.002541207441950176], [1436044032.0, 12880000.0, 0.002558379288199168], [1436045760.0, 12900000.0, 0.0025756653549], [1436047488.0, 12920000.0, 0.002593066240095233], [1436049216.0, 12940000.0, 0.002610582543920225], [1436050944.0, 12960000.0, 0.0026282148686069765], [1436052672.0, 12980000.0, 0.0026459638184879687], [1436054400.0, 13000000.0, 0.00266383], [1436056128.0, 13020000.0, 0.002681814021688032], [1436057856.0, 13040000.0, 0.002699916494209024], [1436059584.0, 13060000.0, 0.002718138030335776], [1436061312.0, 13080000.0, 0.0027364792449607687], [1436063040.0, 13100000.0, 0.0027549407551], [1436064768.0, 13120000.0, 0.0027735231798968326], [1436066496.0, 13140000.0, 0.0027922271406258243], [1436068224.0, 13160000.0, 0.0028110532606965767], [1436069952.0, 13180000.0, 0.0028300021656575683], [1436071680.0, 13200000.0, 0.002849074483200001], [1436073408.0, 13220000.0, 0.002868270843161633], [1436075136.0, 13240000.0, 0.0028875918775306247], [1436076864.0, 13260000.0, 0.002907038220449376], [1436078592.0, 13280000.0, 0.002926610508218369], [1436080320.0, 13300000.0, 0.0029463093793000014], [1436082048.0, 13320000.0, 0.0029661354743224333], [1436083776.0, 13340000.0, 0.002986089436083424], [1436085504.0, 13360000.0, 0.003006171909554177], [1436087232.0, 13380000.0, 0.0030263835418831687], [1436088960.0, 13400000.0, 0.0030467249824000005], [1436090688.0, 13420000.0, 0.003067196882619233], [1436092416.0, 13440000.0, 0.0030877998962442247], [1436094144.0, 13460000.0, 0.003108534679170976], [1436095872.0, 13480000.0, 0.0031294018894919688], [1436097600.0, 13500000.0, 0.003150402187500001], [1436099328.0, 13520000.0, 0.0031715362356920327], [1436101056.0, 13540000.0, 0.003192804698773025], [1436102784.0, 13560000.0, 0.0032142082436597773], [1436104512.0, 13580000.0, 0.0032357475394847687], [1436106240.0, 13600000.0, 0.0032574232576], [1436107968.0, 13620000.0, 0.0032792360715808333], [1436109696.0, 13640000.0, 0.0033011866572298255], [1436111424.0, 13660000.0, 0.0033232756925805776], [1436113152.0, 13680000.0, 0.0033455038579015693], [1436114880.0, 13700000.0, 0.0033678718357000015], [1436116608.0, 13720000.0, 0.0033903803107256333], [1436118336.0, 13740000.0, 0.003413029969974625], [1436120064.0, 13760000.0, 0.0034358215026933743], [1436121792.0, 13780000.0, 0.003458755600382367], [1436123520.0, 13800000.0, 0.003481832956799998], [1436125248.0, 13820000.0, 0.0035050542679664317], [1436126976.0, 13840000.0, 0.0035284202321674224], [1436128704.0, 13860000.0, 0.0035519315499581757], [1436130432.0, 13880000.0, 0.0035755889241671675], [1436132160.0, 13900000.0, 0.003599393059899999], [1436133888.0, 13920000.0, 0.003623344664543231], [1436135616.0, 13940000.0, 0.0036474444477682237], [1436137344.0, 13960000.0, 0.0036716931215349745], [1436139072.0, 13980000.0, 0.003696091400095967], [1436140800.0, 14000000.0, 0.003720639999999998], [1436142528.0, 14020000.0, 0.0037453396400960307], [1436144256.0, 14040000.0, 0.0037701910415370234], [1436145984.0, 14060000.0, 0.0037951949277837756], [1436147712.0, 14080000.0, 0.0038203520246087672], [1436149440.0, 14100000.0, 0.003845663060099999], [1436151168.0, 14120000.0, 0.0038711287646648316], [1436152896.0, 14140000.0, 0.0038967498710338233], [1436154624.0, 14160000.0, 0.003922527114264575], [1436156352.0, 14180000.0, 0.0039484612317455675], [1436158080.0, 14200000.0, 0.003974552963199998], [1436159808.0, 14220000.0, 0.004000803050689632], [1436161536.0, 14240000.0, 0.004027212238618623], [1436163264.0, 14260000.0, 0.004053781273737375], [1436164992.0, 14280000.0, 0.0040805109051463674], [1436166720.0, 14300000.0, 0.004107401884299999], [1436168448.0, 14320000.0, 0.00413445496501043], [1436170176.0, 14340000.0, 0.004161670903451423], [1436171904.0, 14360000.0, 0.004189050458162175], [1436173632.0, 14380000.0, 0.004216594390051167], [1436175360.0, 14400000.0, 0.0042443034624], [1436177088.0, 14420000.0, 0.004272178440867231], [1436178816.0, 14440000.0, 0.004300220093492223], [1436180544.0, 14460000.0, 0.004328429190698975], [1436182272.0, 14480000.0, 0.004356806505299966], [1436184000.0, 14500000.0, 0.004385352812499999], [1436185728.0, 14520000.0, 0.004414068889900031], [1436187456.0, 14540000.0, 0.004442955517501024], [1436189184.0, 14560000.0, 0.004472013477707776], [1436190912.0, 14580000.0, 0.004501243555332767], [1436192640.0, 14600000.0, 0.0045306465376], [1436194368.0, 14620000.0, 0.004560223214148832], [1436196096.0, 14640000.0, 0.004589974377037824], [1436197824.0, 14660000.0, 0.004619900820748575], [1436199552.0, 14680000.0, 0.004650003342189566], [1436201280.0, 14700000.0, 0.0046802827407000005], [1436203008.0, 14720000.0, 0.004710739818053632], [1436204736.0, 14740000.0, 0.004741375378462625], [1436206464.0, 14760000.0, 0.004772190228581374], [1436208192.0, 14780000.0, 0.004803185177510368], [1436209920.0, 14800000.0, 0.004834361036799999], [1436211648.0, 14820000.0, 0.0048657186204544315], [1436213376.0, 14840000.0, 0.004897258744935424], [1436215104.0, 14860000.0, 0.004928982229166176], [1436216832.0, 14880000.0, 0.004960889894535168], [1436218560.0, 14900000.0, 0.004992982564899999], [1436220288.0, 14920000.0, 0.00502526106659123], [1436222016.0, 14940000.0, 0.0050577262284162245], [1436223744.0, 14960000.0, 0.005090378881662977], [1436225472.0, 14980000.0, 0.005123219860103968], [1436227200.0, 15000000.0, 0.00515625], [1436228928.0, 15020000.0, 0.005189470140104032], [1436230656.0, 15040000.0, 0.005222881121665024], [1436232384.0, 15060000.0, 0.005256483788431776], [1436234112.0, 15080000.0, 0.005290278986656767], [1436235840.0, 15100000.0, 0.0053242675650999995], [1436237568.0, 15120000.0, 0.005358450375032833], [1436239296.0, 15140000.0, 0.005392828270241824], [1436241024.0, 15160000.0, 0.005427402107032576], [1436242752.0, 15180000.0, 0.0054621727442335675], [1436244480.0, 15200000.0, 0.005497141043200001], [1436246208.0, 15220000.0, 0.005532307867817632], [1436247936.0, 15240000.0, 0.005567674084506625], [1436249664.0, 15260000.0, 0.005603240562225377], [1436251392.0, 15280000.0, 0.005639008172474367], [1436253120.0, 15300000.0, 0.005674977789300001], [1436254848.0, 15320000.0, 0.005711150289298432], [1436256576.0, 15340000.0, 0.005747526551619424], [1436258304.0, 15360000.0, 0.005784107457970176], [1436260032.0, 15380000.0, 0.0058208938926191675], [1436261760.0, 15400000.0, 0.0058578867424], [1436263488.0, 15420000.0, 0.005895086896715232], [1436265216.0, 15440000.0, 0.005932495247540224], [1436266944.0, 15460000.0, 0.005970112689426977], [1436268672.0, 15480000.0, 0.006007940119507969], [1436270400.0, 15500000.0, 0.006045978437499999], [1436272128.0, 15520000.0, 0.006084228545708033], [1436273856.0, 15540000.0, 0.006122691349029026], [1436275584.0, 15560000.0, 0.006161367754955776], [1436277312.0, 15580000.0, 0.006200258673580768], [1436279040.0, 15600000.0, 0.006239365017600001], [1436280768.0, 15620000.0, 0.006278687702316833], [1436282496.0, 15640000.0, 0.006318227645645825], [1436284224.0, 15660000.0, 0.006357985768116577], [1436285952.0, 15680000.0, 0.0063979629928775684], [1436287680.0, 15700000.0, 0.006438160245700001], [1436289408.0, 15720000.0, 0.0064785784549816336], [1436291136.0, 15740000.0, 0.0065192185517506255], [1436292864.0, 15760000.0, 0.006560081469669378], [1436294592.0, 15780000.0, 0.00660116814503837], [1436296320.0, 15800000.0, 0.006642479516800001], [1436298048.0, 15820000.0, 0.006684016526542433], [1436299776.0, 15840000.0, 0.0067257801185034265], [1436301504.0, 15860000.0, 0.006767771239574177], [1436303232.0, 15880000.0, 0.006809990839303169], [1436304960.0, 15900000.0, 0.006852439869900002], [1436306688.0, 15920000.0, 0.0068951192862392345], [1436308416.0, 15940000.0, 0.006938030045864227], [1436310144.0, 15960000.0, 0.006981173108990978], [1436311872.0, 15980000.0, 0.0070245494385119695], [1436313600.0, 16000000.0, 0.007068160000000002], [1436315328.0, 16020000.0, 0.007112005761712036], [1436317056.0, 16040000.0, 0.007156087694593026], [1436318784.0, 16060000.0, 0.007200406772279779], [1436320512.0, 16080000.0, 0.0072449639711047705], [1436322240.0, 16100000.0, 0.007289760270100003], [1436323968.0, 16120000.0, 0.007334796651000834], [1436325696.0, 16140000.0, 0.007380074098249827], [1436327424.0, 16160000.0, 0.007425593599000578], [1436329152.0, 16180000.0, 0.007471356143121571], [1436330880.0, 16200000.0, 0.007517362723200001], [1436332608.0, 16220000.0, 0.007563614334545633], [1436334336.0, 16240000.0, 0.007610111975194629], [1436336064.0, 16260000.0, 0.007656856645913374], [1436337792.0, 16280000.0, 0.007703849350202366], [1436339520.0, 16300000.0, 0.0077510910942999965], [1436341248.0, 16320000.0, 0.007798582887186429], [1436342976.0, 16340000.0, 0.00784632574058742], [1436344704.0, 16360000.0, 0.007894320668978171], [1436346432.0, 16380000.0, 0.007942568689587166], [1436348160.0, 16400000.0, 0.007991070822399996], [1436349888.0, 16420000.0, 0.00803982809016323], [1436351616.0, 16440000.0, 0.008088841518388222], [1436353344.0, 16460000.0, 0.008138112135354973], [1436355072.0, 16480000.0, 0.008187640972115967], [1436356800.0, 16500000.0, 0.008237429062499997], [1436358528.0, 16520000.0, 0.00828747744311603], [1436360256.0, 16540000.0, 0.00833778715335702], [1436361984.0, 16560000.0, 0.008388359235403776], [1436363712.0, 16580000.0, 0.008439194734228767], [1436365440.0, 16600000.0, 0.008490294697599998], [1436367168.0, 16620000.0, 0.008541660176084829], [1436368896.0, 16640000.0, 0.008593292223053823], [1436370624.0, 16660000.0, 0.008645191894684575], [1436372352.0, 16680000.0, 0.008697360249965567], [1436374080.0, 16700000.0, 0.008749798350699996], [1436375808.0, 16720000.0, 0.008802507261509631], [1436377536.0, 16740000.0, 0.008855488049838623], [1436379264.0, 16760000.0, 0.008908741785957375], [1436380992.0, 16780000.0, 0.008962269542966365], [1436382720.0, 16800000.0, 0.009016072396799997], [1436384448.0, 16820000.0, 0.00907015142623043], [1436386176.0, 16840000.0, 0.009124507712871422], [1436387904.0, 16860000.0, 0.009179142341182174], [1436389632.0, 16880000.0, 0.009234056398471168], [1436391360.0, 16900000.0, 0.0092892509749], [1436393088.0, 16920000.0, 0.009344727163487231], [1436394816.0, 16940000.0, 0.009400486060112222], [1436396544.0, 16960000.0, 0.009456528763518973], [1436398272.0, 16980000.0, 0.009512856375319968], [1436400000.0, 17000000.0, 0.00956947], [1436401728.0, 17020000.0, 0.009626370744920029], [1436403456.0, 17040000.0, 0.009683559720321025], [1436405184.0, 17060000.0, 0.009741038039327772], [1436406912.0, 17080000.0, 0.009798806817952768], [1436408640.0, 17100000.0, 0.009856867175099999], [1436410368.0, 17120000.0, 0.00991522023256883], [1436412096.0, 17140000.0, 0.009973867115057825], [1436413824.0, 17160000.0, 0.010032808950168575], [1436415552.0, 17180000.0, 0.010092046868409569], [1436417280.0, 17200000.0, 0.0101515820032], [1436419008.0, 17220000.0, 0.01021141549087363], [1436420736.0, 17240000.0, 0.010271548470682625], [1436422464.0, 17260000.0, 0.010331982084801374], [1436424192.0, 17280000.0, 0.010392717478330364], [1436425920.0, 17300000.0, 0.010453755799299998], [1436427648.0, 17320000.0, 0.01051509819867443], [1436429376.0, 17340000.0, 0.010576745830355424], [1436431104.0, 17360000.0, 0.010638699851186177], [1436432832.0, 17380000.0, 0.010700961420955167], [1436434560.0, 17400000.0, 0.010763531702399999], [1436436288.0, 17420000.0, 0.01082641186121123], [1436438016.0, 17440000.0, 0.010889603066036223], [1436439744.0, 17460000.0, 0.010953106488482977], [1436441472.0, 17480000.0, 0.011016923303123968], [1436443200.0, 17500000.0, 0.0110810546875], [1436444928.0, 17520000.0, 0.011145501822124032], [1436446656.0, 17540000.0, 0.011210265890485023], [1436448384.0, 17560000.0, 0.011275348079051777], [1436450112.0, 17580000.0, 0.011340749577276767], [1436451840.0, 17600000.0, 0.0114064715776], [1436453568.0, 17620000.0, 0.011472515275452832], [1436455296.0, 17640000.0, 0.011538881869261823], [1436457024.0, 17660000.0, 0.011605572560452578], [1436458752.0, 17680000.0, 0.01167258855345357], [1436460480.0, 17700000.0, 0.011739931055700002], [1436462208.0, 17720000.0, 0.011807601277637634], [1436463936.0, 17740000.0, 0.011875600432726622], [1436465664.0, 17760000.0, 0.011943929737445376], [1436467392.0, 17780000.0, 0.012012590411294372], [1436469120.0, 17800000.0, 0.012081583676800001], [1436470848.0, 17820000.0, 0.012150910759518432], [1436472576.0, 17840000.0, 0.012220572888039427], [1436474304.0, 17860000.0, 0.012290571293990174], [1436476032.0, 17880000.0, 0.01236090721203917], [1436477760.0, 17900000.0, 0.012431581879899997], [1436479488.0, 17920000.0, 0.012502596538335234], [1436481216.0, 17940000.0, 0.012573952431160225], [1436482944.0, 17960000.0, 0.012645650805246976], [1436484672.0, 17980000.0, 0.012717692910527972], [1436486400.0, 18000000.0, 0.012790080000000004], [1436488128.0, 18020000.0, 0.01286281332972803], [1436489856.0, 18040000.0, 0.012935894158849026], [1436491584.0, 18060000.0, 0.013009323749575778], [1436493312.0, 18080000.0, 0.01308310336720077], [1436495040.0, 18100000.0, 0.013157234280100004], [1436496768.0, 18120000.0, 0.013231717759736836], [1436498496.0, 18140000.0, 0.013306555080665828], [1436500224.0, 18160000.0, 0.01338174752053658], [1436501952.0, 18180000.0, 0.01345729636009757], [1436503680.0, 18200000.0, 0.013533202883200006], [1436505408.0, 18220000.0, 0.013609468376801636], [1436507136.0, 18240000.0, 0.013686094130970628], [1436508864.0, 18260000.0, 0.013763081438889378], [1436510592.0, 18280000.0, 0.01384043159685837], [1436512320.0, 18300000.0, 0.013918145904300003], [1436514048.0, 18320000.0, 0.013996225663762435], [1436515776.0, 18340000.0, 0.014074672180923427], [1436517504.0, 18360000.0, 0.01415348676459418], [1436519232.0, 18380000.0, 0.01423267072672317], [1436520960.0, 18400000.0, 0.014312225382400004], [1436522688.0, 18420000.0, 0.014392152049859237], [1436524416.0, 18440000.0, 0.014472452050484226], [1436526144.0, 18460000.0, 0.014553126708810978], [1436527872.0, 18480000.0, 0.014634177352531972], [1436529600.0, 18500000.0, 0.014715605312500001], [1436531328.0, 18520000.0, 0.014797411922732038], [1436533056.0, 18540000.0, 0.014879598520413026], [1436534784.0, 18560000.0, 0.01496216644589978], [1436536512.0, 18580000.0, 0.015045117042724775], [1436538240.0, 18600000.0, 0.015128451657600005], [1436539968.0, 18620000.0, 0.01521217164042084], [1436541696.0, 18640000.0, 0.015296278344269828], [1436543424.0, 18660000.0, 0.015380773125420579], [1436545152.0, 18680000.0, 0.015465657343341575], [1436546880.0, 18700000.0, 0.015550932360700006], [1436548608.0, 18720000.0, 0.015636599543365635], [1436550336.0, 18740000.0, 0.01572266026041463], [1436552064.0, 18760000.0, 0.015809115884133373], [1436553792.0, 18780000.0, 0.015895967790022364], [1436555520.0, 18800000.0, 0.015983217356799993], [1436557248.0, 18820000.0, 0.016070865966406427], [1436558976.0, 18840000.0, 0.01615891500400742], [1436560704.0, 18860000.0, 0.016247365857998172], [1436562432.0, 18880000.0, 0.016336219920007163], [1436564160.0, 18900000.0, 0.0164254785849], [1436565888.0, 18920000.0, 0.016515143250783234], [1436567616.0, 18940000.0, 0.01660521531900822], [1436569344.0, 18960000.0, 0.01669569619417497], [1436571072.0, 18980000.0, 0.016786587284135963], [1436572800.0, 19000000.0, 0.016877889999999993], [1436574528.0, 19020000.0, 0.01696960575613603], [1436576256.0, 19040000.0, 0.01706173597017702], [1436577984.0, 19060000.0, 0.017154282063023774], [1436579712.0, 19080000.0, 0.017247245458848766], [1436581440.0, 19100000.0, 0.017340627585099997], [1436583168.0, 19120000.0, 0.01743442987250483], [1436584896.0, 19140000.0, 0.017528653755073825], [1436586624.0, 19160000.0, 0.017623300670104574], [1436588352.0, 19180000.0, 0.01771837205818556], [1436590080.0, 19200000.0, 0.017813869363199997], [1436591808.0, 19220000.0, 0.01790979403232963], [1436593536.0, 19240000.0, 0.018006147516058623], [1436595264.0, 19260000.0, 0.018102931268177372], [1436596992.0, 19280000.0, 0.018200146745786364], [1436598720.0, 19300000.0, 0.018297795409299995], [1436600448.0, 19320000.0, 0.018395878722450427], [1436602176.0, 19340000.0, 0.018494398152291425], [1436603904.0, 19360000.0, 0.018593355169202172], [1436605632.0, 19380000.0, 0.018692751246891164], [1436607360.0, 19400000.0, 0.018792587862399998], [1436609088.0, 19420000.0, 0.018892866496107233], [1436610816.0, 19440000.0, 0.01899358863173222], [1436612544.0, 19460000.0, 0.01909475575633898], [1436614272.0, 19480000.0, 0.019196369360339964], [1436616000.0, 19500000.0, 0.019298430937499996], [1436617728.0, 19520000.0, 0.019400941984940034], [1436619456.0, 19540000.0, 0.019503904003141025], [1436621184.0, 19560000.0, 0.019607318495947774], [1436622912.0, 19580000.0, 0.019711186970572767], [1436624640.0, 19600000.0, 0.0198155109376], [1436626368.0, 19620000.0, 0.019920291910988833], [1436628096.0, 19640000.0, 0.020025531408077824], [1436629824.0, 19660000.0, 0.020131230949588578], [1436631552.0, 19680000.0, 0.02023739205962957], [1436633280.0, 19700000.0, 0.020344016265699996], [1436635008.0, 19720000.0, 0.02045110509869363], [1436636736.0, 19740000.0, 0.020558660092902623], [1436638464.0, 19760000.0, 0.020666682786021375], [1436640192.0, 19780000.0, 0.02077517471915037], [1436641920.0, 19800000.0, 0.0208841374368], [1436643648.0, 19820000.0, 0.020993572486894433], [1436645376.0, 19840000.0, 0.021103481420775425], [1436647104.0, 19860000.0, 0.02121386579320618], [1436648832.0, 19880000.0, 0.021324727162375167], [1436650560.0, 19900000.0, 0.0214360670899], [1436652288.0, 19920000.0, 0.021547887140831234], [1436654016.0, 19940000.0, 0.02166018888365622], [1436655744.0, 19960000.0, 0.021772973890302975], [1436657472.0, 19980000.0, 0.02188624373614397], [1436659200.0, 20000000.0, 0.022], [1436660928.0, 20020000.0, 0.022114244264144017], [1436662656.0, 20040000.0, 0.022228978114305024], [1436664384.0, 20060000.0, 0.022344203139671767], [1436666112.0, 20080000.0, 0.022459920932896768], [1436667840.0, 20100000.0, 0.022576133090099988], [1436669568.0, 20120000.0, 0.022692841210872835], [1436671296.0, 20140000.0, 0.022810046898281814], [1436673024.0, 20160000.0, 0.022927751758872583], [1436674752.0, 20180000.0, 0.023045957402673553], [1436676480.0, 20200000.0, 0.023164665443200005], [1436678208.0, 20220000.0, 0.023283877497457618], [1436679936.0, 20240000.0, 0.023403595185946632], [1436681664.0, 20260000.0, 0.02352382013266536], [1436683392.0, 20280000.0, 0.02364455396511437], [1436685120.0, 20300000.0, 0.02376579831429999], [1436686848.0, 20320000.0, 0.02388755481473843], [1436688576.0, 20340000.0, 0.02400982510445941], [1436690304.0, 20360000.0, 0.024132610825010184], [1436692032.0, 20380000.0, 0.024255913621459155], [1436693760.0, 20400000.0, 0.0243797351424], [1436695488.0, 20420000.0, 0.02450407703995522], [1436697216.0, 20440000.0, 0.024628940969780223], [1436698944.0, 20460000.0, 0.024754328591066962], [1436700672.0, 20480000.0, 0.024880241566547966], [1436702400.0, 20500000.0, 0.025006681562499987], [1436704128.0, 20520000.0, 0.025133650248748033], [1436705856.0, 20540000.0, 0.02526114929866901], [1436707584.0, 20560000.0, 0.025389180389195777], [1436709312.0, 20580000.0, 0.025517745200820754], [1436711040.0, 20600000.0, 0.025646845417599998], [1436712768.0, 20620000.0, 0.02577648272715682], [1436714496.0, 20640000.0, 0.02590665882068583], [1436716224.0, 20660000.0, 0.026037375392956558], [1436717952.0, 20680000.0, 0.026168634142317574], [1436719680.0, 20700000.0, 0.02630043677069999], [1436721408.0, 20720000.0, 0.026432784983621636], [1436723136.0, 20740000.0, 0.026565680490190615], [1436724864.0, 20760000.0, 0.02669912500310938], [1436726592.0, 20780000.0, 0.02683312023867836], [1436728320.0, 20800000.0, 0.026967667916800005], [1436730048.0, 20820000.0, 0.027102769760982425], [1436731776.0, 20840000.0, 0.027238427498343428], [1436733504.0, 20860000.0, 0.027374642859614162], [1436735232.0, 20880000.0, 0.027511417579143178], [1436736960.0, 20900000.0, 0.027648753394899996], [1436738688.0, 20920000.0, 0.02778665204847924], [1436740416.0, 20940000.0, 0.02792511528510421], [1436742144.0, 20960000.0, 0.02806414485363098], [1436743872.0, 20980000.0, 0.028203742506551957], [1436745600.0, 21000000.0, 0.02834391000000001], [1436747328.0, 21020000.0, 0.028484649093752024], [1436749056.0, 21040000.0, 0.028625961551233033], [1436750784.0, 21060000.0, 0.02876784913951977], [1436752512.0, 21080000.0, 0.028910313629344774], [1436754240.0, 21100000.0, 0.029053356795099995], [1436755968.0, 21120000.0, 0.029196980414840836], [1436757696.0, 21140000.0, 0.029341186270289817], [1436759424.0, 21160000.0, 0.029485976146840582], [1436761152.0, 21180000.0, 0.02963135183356156], [1436762880.0, 21200000.0, 0.029777315123200008], [1436764608.0, 21220000.0, 0.02992386781218562], [1436766336.0, 21240000.0, 0.030071011700634632], [1436768064.0, 21260000.0, 0.03021874859235337], [1436769792.0, 21280000.0, 0.030367080294842374], [1436771520.0, 21300000.0, 0.030516008619299987], [1436773248.0, 21320000.0, 0.030665535380626437], [1436774976.0, 21340000.0, 0.030815662397427418], [1436776704.0, 21360000.0, 0.030966391492018183], [1436778432.0, 21380000.0, 0.031117724490427157], [1436780160.0, 21400000.0, 0.03126966322240001], [1436781888.0, 21420000.0, 0.031422209521403226], [1436783616.0, 21440000.0, 0.03157536522462823], [1436785344.0, 21460000.0, 0.03172913217299497], [1436787072.0, 21480000.0, 0.03188351221115598], [1436788800.0, 21500000.0, 0.032038507187499995], [1436790528.0, 21520000.0, 0.03219411895415605], [1436792256.0, 21540000.0, 0.03235034936699701], [1436793984.0, 21560000.0, 0.032507200285643786], [1436795712.0, 21580000.0, 0.032664673573468764], [1436797440.0, 21600000.0, 0.03282277109760001], [1436799168.0, 21620000.0, 0.03298149472892483], [1436800896.0, 21640000.0, 0.03314084634209384], [1436802624.0, 21660000.0, 0.03330082781552456], [1436804352.0, 21680000.0, 0.03346144103140559], [1436806080.0, 21700000.0, 0.0336226878757], [1436807808.0, 21720000.0, 0.03378457023814964], [1436809536.0, 21740000.0, 0.033947090012278615], [1436811264.0, 21760000.0, 0.034110249095397394], [1436812992.0, 21780000.0, 0.034274049388606356], [1436814720.0, 21800000.0, 0.03443849279680001], [1436816448.0, 21820000.0, 0.03460358122867043], [1436818176.0, 21840000.0, 0.03476931659671143], [1436819904.0, 21860000.0, 0.03493570081722217], [1436821632.0, 21880000.0, 0.03510273581031119], [1436823360.0, 21900000.0, 0.03527042349989999], [1436825088.0, 21920000.0, 0.03543876581372724], [1436826816.0, 21940000.0, 0.035607764683352215], [1436828544.0, 21960000.0, 0.035777422044158985], [1436830272.0, 21980000.0, 0.03594773983535996], [1436832000.0, 22000000.0, 0.03611872000000001], [1436833728.0, 22020000.0, 0.03629036448496003], [1436835456.0, 22040000.0, 0.03646267524096104], [1436837184.0, 22060000.0, 0.03663565422256777], [1436838912.0, 22080000.0, 0.036809303388192785], [1436840640.0, 22100000.0, 0.0369836247001], [1436842368.0, 22120000.0, 0.037158620124408855], [1436844096.0, 22140000.0, 0.03733429163109782], [1436845824.0, 22160000.0, 0.03751064119400859], [1436847552.0, 22180000.0, 0.037687670790849566], [1436849280.0, 22200000.0, 0.03786538240320002], [1436851008.0, 22220000.0, 0.03804377801651364], [1436852736.0, 22240000.0, 0.038222859620122646], [1436854464.0, 22260000.0, 0.038402629207241384], [1436856192.0, 22280000.0, 0.03858308877497039], [1436857920.0, 22300000.0, 0.038764240324299995], [1436859648.0, 22320000.0, 0.03894608586011445], [1436861376.0, 22340000.0, 0.03912862739119543], [1436863104.0, 22360000.0, 0.039311866930226196], [1436864832.0, 22380000.0, 0.03949580649379517], [1436866560.0, 22400000.0, 0.03968044810240001], [1436868288.0, 22420000.0, 0.03986579378045123], [1436870016.0, 22440000.0, 0.04005184555627624], [1436871744.0, 22460000.0, 0.04023860546212298], [1436873472.0, 22480000.0, 0.04042607553416398], [1436875200.0, 22500000.0, 0.0406142578125], [1436876928.0, 22520000.0, 0.040803154341164015], [1436878656.0, 22540000.0, 0.04099276716812502], [1436880384.0, 22560000.0, 0.041183098345291755], [1436882112.0, 22580000.0, 0.041374149928516776], [1436883840.0, 22600000.0, 0.04156592397759997], [1436885568.0, 22620000.0, 0.041758422556292835], [1436887296.0, 22640000.0, 0.041951647732301804], [1436889024.0, 22660000.0, 0.04214560157729257], [1436890752.0, 22680000.0, 0.04234028616689354], [1436892480.0, 22700000.0, 0.0425357035807], [1436894208.0, 22720000.0, 0.04273185590227761], [1436895936.0, 22740000.0, 0.04292874521916663], [1436897664.0, 22760000.0, 0.04312637362288535], [1436899392.0, 22780000.0, 0.04332474320893437], [1436901120.0, 22800000.0, 0.04352385607679998], [1436902848.0, 22820000.0, 0.04372371432995844], [1436904576.0, 22840000.0, 0.0439243200758794], [1436906304.0, 22860000.0, 0.04412567542603018], [1436908032.0, 22880000.0, 0.044327782495879146], [1436909760.0, 22900000.0, 0.0445306434049], [1436911488.0, 22920000.0, 0.04473426027657521], [1436913216.0, 22940000.0, 0.04493863523840023], [1436914944.0, 22960000.0, 0.045143770421886956], [1436916672.0, 22980000.0, 0.04534966796256798], [1436918400.0, 23000000.0, 0.04555632999999998], [1436920128.0, 23020000.0, 0.04576375867776803], [1436921856.0, 23040000.0, 0.04597195614348901], [1436923584.0, 23060000.0, 0.04618092454881578], [1436925312.0, 23080000.0, 0.04639066604944075], [1436927040.0, 23100000.0, 0.046601182805100005], [1436928768.0, 23120000.0, 0.04681247697957682], [1436930496.0, 23140000.0, 0.04702455074070583], [1436932224.0, 23160000.0, 0.047237406260376556], [1436933952.0, 23180000.0, 0.04745104571453756], [1436935680.0, 23200000.0, 0.04766547128319998], [1436937408.0, 23220000.0, 0.04788068515044164], [1436939136.0, 23240000.0, 0.04809668950441061], [1436940864.0, 23260000.0, 0.04831348653732938], [1436942592.0, 23280000.0, 0.04853107844549835], [1436944320.0, 23300000.0, 0.0487494674293], [1436946048.0, 23320000.0, 0.04896865569320241], [1436947776.0, 23340000.0, 0.049188645445763436], [1436949504.0, 23360000.0, 0.04940943889963416], [1436951232.0, 23380000.0, 0.04963103827156318], [1436952960.0, 23400000.0, 0.049853445782399974], [1436954688.0, 23420000.0, 0.050076663657099243], [1436956416.0, 23440000.0, 0.05030069412472422], [1436958144.0, 23460000.0, 0.05052553941845099], [1436959872.0, 23480000.0, 0.05075120177557196], [1436961600.0, 23500000.0, 0.050977683437500004], [1436963328.0, 23520000.0, 0.051204986649772015], [1436965056.0, 23540000.0, 0.05143311366205303], [1436966784.0, 23560000.0, 0.05166206672813977], [1436968512.0, 23580000.0, 0.051891848105964776], [1436970240.0, 23600000.0, 0.05212246005759999], [1436971968.0, 23620000.0, 0.05235390484926084], [1436973696.0, 23640000.0, 0.052586184751309814], [1436975424.0, 23660000.0, 0.05281930203826058], [1436977152.0, 23680000.0, 0.05305325898878155], [1436978880.0, 23700000.0, 0.05328805788570002], [1436980608.0, 23720000.0, 0.05352370101600562], [1436982336.0, 23740000.0, 0.05376019067085463], [1436984064.0, 23760000.0, 0.05399752914557336], [1436985792.0, 23780000.0, 0.054235718739662375], [1436987520.0, 23800000.0, 0.05447476175679998], [1436989248.0, 23820000.0, 0.054714660504846455], [1436990976.0, 23840000.0, 0.054955417295847415], [1436992704.0, 23860000.0, 0.05519703444603819], [1436994432.0, 23880000.0, 0.05543951427584715], [1436996160.0, 23900000.0, 0.05568285910990001], [1436997888.0, 23920000.0, 0.05592707127702323], [1436999616.0, 23940000.0, 0.05617215311024823], [1437001344.0, 23960000.0, 0.056418106946814955], [1437003072.0, 23980000.0, 0.05666493512817598], [1437004800.0, 24000000.0, 0.05691263999999998], [1437006528.0, 24020000.0, 0.05716122391217604], [1437008256.0, 24040000.0, 0.057410689218817014], [1437009984.0, 24060000.0, 0.0576610382782638], [1437011712.0, 24080000.0, 0.05791227345308876], [1437013440.0, 24100000.0, 0.05816439711010001], [1437015168.0, 24120000.0, 0.05841741162034482], [1437016896.0, 24140000.0, 0.05867131935911384], [1437018624.0, 24160000.0, 0.058926122705944564], [1437020352.0, 24180000.0, 0.05918182404462559], [1437022080.0, 24200000.0, 0.05943842576319999], [1437023808.0, 24220000.0, 0.05969593025396966], [1437025536.0, 24240000.0, 0.05995433991349861], [1437027264.0, 24260000.0, 0.06021365714261741], [1437028992.0, 24280000.0, 0.06047388434642636], [1437030720.0, 24300000.0, 0.060735023934300025], [1437032448.0, 24320000.0, 0.06099707831989044], [1437034176.0, 24340000.0, 0.06126004992113144], [1437035904.0, 24360000.0, 0.06152394116024218], [1437037632.0, 24380000.0, 0.06178875446373121], [1437039360.0, 24400000.0, 0.06205449226239999], [1437041088.0, 24420000.0, 0.06232115699134726], [1437042816.0, 24440000.0, 0.06258875108997222], [1437044544.0, 24460000.0, 0.062857277001979], [1437046272.0, 24480000.0, 0.06312673717537996], [1437048000.0, 24500000.0, 0.06339713406250003], [1437049728.0, 24520000.0, 0.06366847011998003], [1437051456.0, 24540000.0, 0.06394074780878106], [1437053184.0, 24560000.0, 0.06421396959418778], [1437054912.0, 24580000.0, 0.06448813794581279], [1437056640.0, 24600000.0, 0.06476325533759998], [1437058368.0, 24620000.0, 0.06503932424782885], [1437060096.0, 24640000.0, 0.06531634715911781], [1437061824.0, 24660000.0, 0.0655943265584286], [1437063552.0, 24680000.0, 0.06587326493706955], [1437065280.0, 24700000.0, 0.06615316479070003], [1437067008.0, 24720000.0, 0.06643402861933363], [1437068736.0, 24740000.0, 0.06671585892734265], [1437070464.0, 24760000.0, 0.06699865822346136], [1437072192.0, 24780000.0, 0.06728242902079039], [1437073920.0, 24800000.0, 0.0675671738368], [1437075648.0, 24820000.0, 0.06785289519333446], [1437077376.0, 24840000.0, 0.06813959561661542], [1437079104.0, 24860000.0, 0.06842727763724622], [1437080832.0, 24880000.0, 0.06871594379021516], [1437082560.0, 24900000.0, 0.06900559661490001], [1437084288.0, 24920000.0, 0.06929623865507123], [1437086016.0, 24940000.0, 0.06958787245889625], [1437087744.0, 24960000.0, 0.06988050057894296], [1437089472.0, 24980000.0, 0.070174125572184], [1437091200.0, 25000000.0, 0.07046875], [1437092928.0, 25020000.0, 0.07076437642818399], [1437094656.0, 25040000.0, 0.07106100742694503], [1437096384.0, 25060000.0, 0.07135864557091176], [1437098112.0, 25080000.0, 0.07165729343913677], [1437099840.0, 25100000.0, 0.07195695361509998], [1437101568.0, 25120000.0, 0.07225762868671283], [1437103296.0, 25140000.0, 0.07255932124632179], [1437105024.0, 25160000.0, 0.07286203389071258], [1437106752.0, 25180000.0, 0.07316576922111355], [1437108480.0, 25200000.0, 0.0734705298432], [1437110208.0, 25220000.0, 0.07377631836709761], [1437111936.0, 25240000.0, 0.07408313740738663], [1437113664.0, 25260000.0, 0.07439098958310533], [1437115392.0, 25280000.0, 0.07469987751775439], [1437117120.0, 25300000.0, 0.07500980383929998], [1437118848.0, 25320000.0, 0.07532077118017842], [1437120576.0, 25340000.0, 0.0756327821772994], [1437122304.0, 25360000.0, 0.07594583947205018], [1437124032.0, 25380000.0, 0.07625994571029912], [1437125760.0, 25400000.0, 0.0765751035424], [1437127488.0, 25420000.0, 0.07689131562319519], [1437129216.0, 25440000.0, 0.07720858461202024], [1437130944.0, 25460000.0, 0.07752691317270693], [1437132672.0, 25480000.0, 0.07784630397358798], [1437134400.0, 25500000.0, 0.07816675968749996], [1437136128.0, 25520000.0, 0.07848828299178803], [1437137856.0, 25540000.0, 0.078810876568309], [1437139584.0, 25560000.0, 0.07913454310343579], [1437141312.0, 25580000.0, 0.07945928528806073], [1437143040.0, 25600000.0, 0.07978510581760001], [1437144768.0, 25620000.0, 0.0801120073919968], [1437146496.0, 25640000.0, 0.08043999271572583], [1437148224.0, 25660000.0, 0.08076906449779656], [1437149952.0, 25680000.0, 0.08109922545175757], [1437151680.0, 25700000.0, 0.08143047829569997], [1437153408.0, 25720000.0, 0.08176282575226164], [1437155136.0, 25740000.0, 0.08209627054863061], [1437156864.0, 25760000.0, 0.08243081541654938], [1437158592.0, 25780000.0, 0.08276646309231835], [1437160320.0, 25800000.0, 0.0831032163168], [1437162048.0, 25820000.0, 0.0834410778354224], [1437163776.0, 25840000.0, 0.08378005039818345], [1437165504.0, 25860000.0, 0.08412013675965416], [1437167232.0, 25880000.0, 0.08446133967898319], [1437168960.0, 25900000.0, 0.08480366191989998], [1437170688.0, 25920000.0, 0.08514710625071926], [1437172416.0, 25940000.0, 0.08549167544434419], [1437174144.0, 25960000.0, 0.085837372278271], [1437175872.0, 25980000.0, 0.08618419953459194], [1437177600.0, 26000000.0, 0.08653216], [1437179328.0, 26020000.0, 0.08688125646579199], [1437181056.0, 26040000.0, 0.08723149172787303], [1437182784.0, 26060000.0, 0.08758286858675975], [1437184512.0, 26080000.0, 0.08793538984758478], [1437186240.0, 26100000.0, 0.08828905832009996], [1437187968.0, 26120000.0, 0.08864387681868084], [1437189696.0, 26140000.0, 0.08899984816232982], [1437191424.0, 26160000.0, 0.0893569751746806], [1437193152.0, 26180000.0, 0.08971526068400153], [1437194880.0, 26200000.0, 0.09007470752320001], [1437196608.0, 26220000.0, 0.09043531852982563], [1437198336.0, 26240000.0, 0.09079709654607464], [1437200064.0, 26260000.0, 0.09116004441879337], [1437201792.0, 26280000.0, 0.09152416499948239], [1437203520.0, 26300000.0, 0.09188946114429997], [1437205248.0, 26320000.0, 0.09225593571406646], [1437206976.0, 26340000.0, 0.0926235915742674], [1437208704.0, 26360000.0, 0.0929924315950582], [1437210432.0, 26380000.0, 0.09336245865126716], [1437212160.0, 26400000.0, 0.09373367562240002], [1437213888.0, 26420000.0, 0.09410608539264322], [1437215616.0, 26440000.0, 0.09447969085086827], [1437217344.0, 26460000.0, 0.09485449489063497], [1437219072.0, 26480000.0, 0.09523050041019598], [1437220800.0, 26500000.0, 0.09560771031249997], [1437222528.0, 26520000.0, 0.09598612750519606], [1437224256.0, 26540000.0, 0.09636575490063702], [1437225984.0, 26560000.0, 0.0967465954158838], [1437227712.0, 26580000.0, 0.09712865197270874], [1437229440.0, 26600000.0, 0.09751192749760004], [1437231168.0, 26620000.0, 0.09789642492176481], [1437232896.0, 26640000.0, 0.09828214718113387], [1437234624.0, 26660000.0, 0.09866909721636456], [1437236352.0, 26680000.0, 0.0990572779728456], [1437238080.0, 26700000.0, 0.09944669240069999], [1437239808.0, 26720000.0, 0.09983734345478966], [1437241536.0, 26740000.0, 0.10022923409471861], [1437243264.0, 26760000.0, 0.10062236728483741], [1437244992.0, 26780000.0, 0.10101674599424634], [1437246720.0, 26800000.0, 0.10141237319680003], [1437248448.0, 26820000.0, 0.10180925187111044], [1437250176.0, 26840000.0, 0.10220738500055146], [1437251904.0, 26860000.0, 0.10260677557326219], [1437253632.0, 26880000.0, 0.10300742658215119], [1437255360.0, 26900000.0, 0.1034093410249], [1437257088.0, 26920000.0, 0.10381252190396725], [1437258816.0, 26940000.0, 0.10421697222659221], [1437260544.0, 26960000.0, 0.104622695004799], [1437262272.0, 26980000.0, 0.10502969325539997], [1437264000.0, 27000000.0, 0.10543797000000005], [1437265728.0, 27020000.0, 0.105847528265], [1437267456.0, 27040000.0, 0.10625837108160104], [1437269184.0, 27060000.0, 0.10667050148580776], [1437270912.0, 27080000.0, 0.10708392251843282], [1437272640.0, 27100000.0, 0.10749863722509999], [1437274368.0, 27120000.0, 0.10791464865624889], [1437276096.0, 27140000.0, 0.10833195986713781], [1437277824.0, 27160000.0, 0.1087505739178486], [1437279552.0, 27180000.0, 0.10917049387328959], [1437281280.0, 27200000.0, 0.10959172280320002], [1437283008.0, 27220000.0, 0.11001426378215363], [1437284736.0, 27240000.0, 0.11043811988956269], [1437286464.0, 27260000.0, 0.11086329420968137], [1437288192.0, 27280000.0, 0.1112897898316104], [1437289920.0, 27300000.0, 0.11171760984929999], [1437291648.0, 27320000.0, 0.1121467573615545], [1437293376.0, 27340000.0, 0.11257723547203542], [1437295104.0, 27360000.0, 0.11300904728926624], [1437296832.0, 27380000.0, 0.11344219592663518], [1437298560.0, 27400000.0, 0.11387668450240006], [1437300288.0, 27420000.0, 0.11431251613969123], [1437302016.0, 27440000.0, 0.11474969396651627], [1437303744.0, 27460000.0, 0.11518822111576299], [1437305472.0, 27480000.0, 0.11562810072520402], [1437307200.0, 27500000.0, 0.1160693359375], [1437308928.0, 27520000.0, 0.11651192990020397], [1437310656.0, 27540000.0, 0.11695588576576504], [1437312384.0, 27560000.0, 0.11740120669153173], [1437314112.0, 27580000.0, 0.11784789583975677], [1437315840.0, 27600000.0, 0.11829595637759996], [1437317568.0, 27620000.0, 0.11874539147713283], [1437319296.0, 27640000.0, 0.1191962043153418], [1437321024.0, 27660000.0, 0.1196483980741326], [1437322752.0, 27680000.0, 0.12010197594033352], [1437324480.0, 27700000.0, 0.12055694110569999], [1437326208.0, 27720000.0, 0.12101329676691762], [1437327936.0, 27740000.0, 0.12147104612560664], [1437329664.0, 27760000.0, 0.12193019238832534], [1437331392.0, 27780000.0, 0.12239073876657439], [1437333120.0, 27800000.0, 0.12285268847679995], [1437334848.0, 27820000.0, 0.12331604474039844], [1437336576.0, 27840000.0, 0.12378081078371939], [1437338304.0, 27860000.0, 0.1242469898380702], [1437340032.0, 27880000.0, 0.12471458513971911], [1437341760.0, 27900000.0, 0.12518359992990002], [1437343488.0, 27920000.0, 0.12565403745481518], [1437345216.0, 27940000.0, 0.12612590096564022], [1437346944.0, 27960000.0, 0.12659919371852693], [1437348672.0, 27980000.0, 0.12707391897460796], [1437350400.0, 28000000.0, 0.12755007999999993], [1437352128.0, 28020000.0, 0.12802768006580803], [1437353856.0, 28040000.0, 0.12850672244812902], [1437355584.0, 28060000.0, 0.12898721042805578], [1437357312.0, 28080000.0, 0.12946914729168074], [1437359040.0, 28100000.0, 0.1299525363301], [1437360768.0, 28120000.0, 0.1304373808394168], [1437362496.0, 28140000.0, 0.13092368412074581], [1437364224.0, 28160000.0, 0.13141144948021652], [1437365952.0, 28180000.0, 0.13190068022897758], [1437367680.0, 28200000.0, 0.13239137968319994], [1437369408.0, 28220000.0, 0.13288355116408163], [1437371136.0, 28240000.0, 0.1333771979978506], [1437372864.0, 28260000.0, 0.1338723235157694], [1437374592.0, 28280000.0, 0.13436893105413833], [1437376320.0, 28300000.0, 0.1348670239543], [1437378048.0, 28320000.0, 0.1353666055626424], [1437379776.0, 28340000.0, 0.13586767923060344], [1437381504.0, 28360000.0, 0.13637024831467415], [1437383232.0, 28380000.0, 0.13687431617640317], [1437384960.0, 28400000.0, 0.1373798861824], [1437386688.0, 28420000.0, 0.13788696170433926], [1437388416.0, 28440000.0, 0.1383955461189642], [1437390144.0, 28460000.0, 0.138905642808091], [1437391872.0, 28480000.0, 0.13941725515861195], [1437393600.0, 28500000.0, 0.1399303865625], [1437395328.0, 28520000.0, 0.14044504041681202], [1437397056.0, 28540000.0, 0.14096122012369305], [1437398784.0, 28560000.0, 0.14147892909037976], [1437400512.0, 28580000.0, 0.14199817072920481], [1437402240.0, 28600000.0, 0.14251894845759996], [1437403968.0, 28620000.0, 0.14304126569810086], [1437405696.0, 28640000.0, 0.1435651258783498], [1437407424.0, 28660000.0, 0.14409053243110062], [1437409152.0, 28680000.0, 0.14461748879422154], [1437410880.0, 28700000.0, 0.14514599841070003], [1437412608.0, 28720000.0, 0.1456760647286456], [1437414336.0, 28740000.0, 0.14620769120129468], [1437416064.0, 28760000.0, 0.14674088128701337], [1437417792.0, 28780000.0, 0.1472756384493024], [1437419520.0, 28800000.0, 0.14781196615679998], [1437421248.0, 28820000.0, 0.1483498678832865], [1437422976.0, 28840000.0, 0.14888934710768736], [1437424704.0, 28860000.0, 0.14943040731407822], [1437426432.0, 28880000.0, 0.14997305199168712], [1437428160.0, 28900000.0, 0.15051728463490002], [1437429888.0, 28920000.0, 0.1510631087432632], [1437431616.0, 28940000.0, 0.15161052782148826], [1437433344.0, 28960000.0, 0.15215954537945492], [1437435072.0, 28980000.0, 0.15271016493221598], [1437436800.0, 29000000.0, 0.15326238999999997], [1437438528.0, 29020000.0, 0.15381622410821602], [1437440256.0, 29040000.0, 0.154371670787457], [1437441984.0, 29060000.0, 0.1549287335735038], [1437443712.0, 29080000.0, 0.15548741600732874], [1437445440.0, 29100000.0, 0.15604772163510003], [1437447168.0, 29120000.0, 0.1566096540081848], [1437448896.0, 29140000.0, 0.15717321668315384], [1437450624.0, 29160000.0, 0.15773841322178456], [1437452352.0, 29180000.0, 0.15830524719106565], [1437454080.0, 29200000.0, 0.1588737221632], [1437455808.0, 29220000.0, 0.15944384171560966], [1437457536.0, 29240000.0, 0.16001560943093862], [1437459264.0, 29260000.0, 0.16058902889705742], [1437460992.0, 29280000.0, 0.16116410370706635], [1437462720.0, 29300000.0, 0.16174083745930004], [1437464448.0, 29320000.0, 0.1623192337573304], [1437466176.0, 29340000.0, 0.16289929620997148], [1437467904.0, 29360000.0, 0.16348102843128218], [1437469632.0, 29380000.0, 0.16406443404057117], [1437471360.0, 29400000.0, 0.16464951666239996], [1437473088.0, 29420000.0, 0.16523627992658732], [1437474816.0, 29440000.0, 0.1658247274682122], [1437476544.0, 29460000.0, 0.166414862927619], [1437478272.0, 29480000.0, 0.16700668995041998], [1437480000.0, 29500000.0, 0.16760021218750007], [1437481728.0, 29520000.0, 0.16819543329502], [1437483456.0, 29540000.0, 0.1687923569344211], [1437485184.0, 29560000.0, 0.16939098677242775], [1437486912.0, 29580000.0, 0.16999132648105286], [1437488640.0, 29600000.0, 0.1705933797376], [1437490368.0, 29620000.0, 0.1711971502246689], [1437492096.0, 29640000.0, 0.17180264163015782], [1437493824.0, 29660000.0, 0.17240985764726863], [1437495552.0, 29680000.0, 0.17301880197450956], [1437497280.0, 29700000.0, 0.17362947831570005], [1437499008.0, 29720000.0, 0.17424189037997362], [1437500736.0, 29740000.0, 0.1748560418817827], [1437502464.0, 29760000.0, 0.1754719365409014], [1437504192.0, 29780000.0, 0.17608957808243045], [1437505920.0, 29800000.0, 0.17670897023679996], [1437507648.0, 29820000.0, 0.1773301167397745], [1437509376.0, 29840000.0, 0.17795302133245539], [1437511104.0, 29860000.0, 0.17857768776128624], [1437512832.0, 29880000.0, 0.17920411977805517], [1437514560.0, 29900000.0, 0.17983232113990005], [1437516288.0, 29920000.0, 0.1804622956093112], [1437518016.0, 29940000.0, 0.1810940469541363], [1437519744.0, 29960000.0, 0.18172757894758299], [1437521472.0, 29980000.0, 0.18236289536822403], [1437523200.0, 30000000.0, 0.183], [1437524928.0, 30020000.0, 0.183638896632224], [1437526656.0, 30040000.0, 0.18427958905958503], [1437528384.0, 30060000.0, 0.1849220810821517], [1437530112.0, 30080000.0, 0.18556637650537675], [1437531840.0, 30100000.0, 0.18621247914009992], [1437533568.0, 30120000.0, 0.18686039280255284], [1437535296.0, 30140000.0, 0.1875101213143618], [1437537024.0, 30160000.0, 0.18816166850255256], [1437538752.0, 30180000.0, 0.18881503819955348], [1437540480.0, 30200000.0, 0.18947023424320003], [1437542208.0, 30220000.0, 0.19012726047673756], [1437543936.0, 30240000.0, 0.19078612074882662], [1437545664.0, 30260000.0, 0.1914468189135453], [1437547392.0, 30280000.0, 0.1921093588303944], [1437549120.0, 30300000.0, 0.19277374436429992], [1437550848.0, 30320000.0, 0.19343997938561844], [1437552576.0, 30340000.0, 0.1941080677701393], [1437554304.0, 30360000.0, 0.19477801339909018], [1437556032.0, 30380000.0, 0.19544982015913914], [1437557760.0, 30400000.0, 0.19612349194240003], [1437559488.0, 30420000.0, 0.1967990326464352], [1437561216.0, 30440000.0, 0.19747644617426022], [1437562944.0, 30460000.0, 0.19815573643434692], [1437564672.0, 30480000.0, 0.19883690734062798], [1437566400.0, 30500000.0, 0.19951996281249995], [1437568128.0, 30520000.0, 0.20020490677482802], [1437569856.0, 30540000.0, 0.20089174315794897], [1437571584.0, 30560000.0, 0.2015804758976758], [1437573312.0, 30580000.0, 0.2022711089353007], [1437575040.0, 30600000.0, 0.20296364621760002], [1437576768.0, 30620000.0, 0.20365809169683677], [1437578496.0, 30640000.0, 0.20435444933076585], [1437580224.0, 30660000.0, 0.20505272308263653], [1437581952.0, 30680000.0, 0.2057529169211976], [1437583680.0, 30700000.0, 0.20645503482069993], [1437585408.0, 30720000.0, 0.20715908076090164], [1437587136.0, 30740000.0, 0.20786505872707062], [1437588864.0, 30760000.0, 0.20857297270998934], [1437590592.0, 30780000.0, 0.20928282670595835], [1437592320.0, 30800000.0, 0.2099946247168], [1437594048.0, 30820000.0, 0.21070837074986237], [1437595776.0, 30840000.0, 0.21142406881802348], [1437597504.0, 30860000.0, 0.21214172293969413], [1437599232.0, 30880000.0, 0.2128613371388232], [1437600960.0, 30900000.0, 0.21358291544489993], [1437602688.0, 30920000.0, 0.21430646189295927], [1437604416.0, 30940000.0, 0.21503198052358416], [1437606144.0, 30960000.0, 0.21575947538291101], [1437607872.0, 30980000.0, 0.21648895052263195], [1437609600.0, 31000000.0, 0.21722040999999997], [1437611328.0, 31020000.0, 0.217953857877832], [1437613056.0, 31040000.0, 0.21868929822451305], [1437614784.0, 31060000.0, 0.2194267351139997], [1437616512.0, 31080000.0, 0.22016617262582483], [1437618240.0, 31100000.0, 0.22090761484509994], [1437619968.0, 31120000.0, 0.22165106586252087], [1437621696.0, 31140000.0, 0.22239652977436977], [1437623424.0, 31160000.0, 0.22314401068252063], [1437625152.0, 31180000.0, 0.2238935126944415], [1437626880.0, 31200000.0, 0.22464503992320004], [1437628608.0, 31220000.0, 0.22539859648746563], [1437630336.0, 31240000.0, 0.22615418651151467], [1437632064.0, 31260000.0, 0.22691181412523334], [1437633792.0, 31280000.0, 0.22767148346412244], [1437635520.0, 31300000.0, 0.2284331986693], [1437637248.0, 31320000.0, 0.2291969638875065], [1437638976.0, 31340000.0, 0.22996278327110733], [1437640704.0, 31360000.0, 0.23073066097809822], [1437642432.0, 31380000.0, 0.23150060117210716], [1437644160.0, 31400000.0, 0.23227260802240005], [1437645888.0, 31420000.0, 0.23304668570388315], [1437647616.0, 31440000.0, 0.23382283839710827], [1437649344.0, 31460000.0, 0.23460107028827498], [1437651072.0, 31480000.0, 0.235381385569236], [1437652800.0, 31500000.0, 0.23616378843749997], [1437654528.0, 31520000.0, 0.23694828309623608], [1437656256.0, 31540000.0, 0.23773487375427704], [1437657984.0, 31560000.0, 0.23852356462612384], [1437659712.0, 31580000.0, 0.2393143599319487], [1437661440.0, 31600000.0, 0.2401072638976], [1437663168.0, 31620000.0, 0.24090228075460482], [1437664896.0, 31640000.0, 0.2416994147401739], [1437666624.0, 31660000.0, 0.24249867009720452], [1437668352.0, 31680000.0, 0.24330005107428565], [1437670080.0, 31700000.0, 0.24410356192569996], [1437671808.0, 31720000.0, 0.24490920691142967], [1437673536.0, 31740000.0, 0.2457169902971586], [1437675264.0, 31760000.0, 0.24652691635427743], [1437676992.0, 31780000.0, 0.24733898935988632], [1437678720.0, 31800000.0, 0.24815321359680007], [1437680448.0, 31820000.0, 0.2489695933535504], [1437682176.0, 31840000.0, 0.24978813292439148], [1437683904.0, 31860000.0, 0.25060883660930217], [1437685632.0, 31880000.0, 0.25143170871399123], [1437687360.0, 31900000.0, 0.25225675354989996], [1437689088.0, 31920000.0, 0.2530839754342073], [1437690816.0, 31940000.0, 0.25391337868983216], [1437692544.0, 31960000.0, 0.254744967645439], [1437694272.0, 31980000.0, 0.25557874663544], [1437696000.0, 32000000.0, 0.25641472000000004], [1437697728.0, 32020000.0, 0.25725289208504004], [1437699456.0, 32040000.0, 0.2580932672422411], [1437701184.0, 32060000.0, 0.25893584982904777], [1437702912.0, 32080000.0, 0.25978064420867286], [1437704640.0, 32100000.0, 0.26062765475009997], [1437706368.0, 32120000.0, 0.2614768858280889], [1437708096.0, 32140000.0, 0.2623283418231778], [1437709824.0, 32160000.0, 0.2631820271216887], [1437711552.0, 32180000.0, 0.2640379461157296], [1437713280.0, 32200000.0, 0.26489610320320006], [1437715008.0, 32220000.0, 0.2657565027877936], [1437716736.0, 32240000.0, 0.26661914927900265], [1437718464.0, 32260000.0, 0.2674840470921213], [1437720192.0, 32280000.0, 0.2683512006482504], [1437721920.0, 32300000.0, 0.2692206143743], [1437723648.0, 32320000.0, 0.27009229270299456], [1437725376.0, 32340000.0, 0.2709662400728754], [1437727104.0, 32360000.0, 0.2718424609283063], [1437728832.0, 32380000.0, 0.2727209597194752], [1437730560.0, 32400000.0, 0.2736017409024001], [1437732288.0, 32420000.0, 0.27448480893893124], [1437734016.0, 32440000.0, 0.2753701682967563], [1437735744.0, 32460000.0, 0.276257823449403], [1437737472.0, 32480000.0, 0.27714777887624403], [1437739200.0, 32500000.0, 0.2780400390625], [1437740928.0, 32520000.0, 0.27893460849924395], [1437742656.0, 32540000.0, 0.27983149168340504], [1437744384.0, 32560000.0, 0.28073069311777166], [1437746112.0, 32580000.0, 0.28163221731099675], [1437747840.0, 32600000.0, 0.28253606877759996], [1437749568.0, 32620000.0, 0.2834422520379728], [1437751296.0, 32640000.0, 0.28435077161838174], [1437753024.0, 32660000.0, 0.2852616320509726], [1437754752.0, 32680000.0, 0.2861748378737734], [1437756480.0, 32700000.0, 0.2870903936307], [1437758208.0, 32720000.0, 0.2880083038715575], [1437759936.0, 32740000.0, 0.2889285731520467], [1437761664.0, 32760000.0, 0.2898512060337653], [1437763392.0, 32780000.0, 0.29077620708421437], [1437765120.0, 32800000.0, 0.2917035808767999], [1437766848.0, 32820000.0, 0.29263333199083846], [1437768576.0, 32840000.0, 0.2935654650115594], [1437770304.0, 32860000.0, 0.29449998453011017], [1437772032.0, 32880000.0, 0.2954368951435591], [1437773760.0, 32900000.0, 0.29637620145490007], [1437775488.0, 32920000.0, 0.29731790807305514], [1437777216.0, 32940000.0, 0.29826201961288024], [1437778944.0, 32960000.0, 0.2992085406951669], [1437780672.0, 32980000.0, 0.300157475946648], [1437782400.0, 33000000.0, 0.30110882999999994], [1437784128.0, 33020000.0, 0.30206260749384806], [1437785856.0, 33040000.0, 0.3030188130727689], [1437787584.0, 33060000.0, 0.3039774513872958], [1437789312.0, 33080000.0, 0.30493852709392066], [1437791040.0, 33100000.0, 0.3059020448551], [1437792768.0, 33120000.0, 0.3068680093392568], [1437794496.0, 33140000.0, 0.30783642522078586], [1437796224.0, 33160000.0, 0.3088072971800565], [1437797952.0, 33180000.0, 0.3097806299034176], [1437799680.0, 33200000.0, 0.31075642808319986], [1437801408.0, 33220000.0, 0.31173469641772167], [1437803136.0, 33240000.0, 0.31271543961129056], [1437804864.0, 33260000.0, 0.3136986623742094], [1437806592.0, 33280000.0, 0.3146843694227783], [1437808320.0, 33300000.0, 0.31567256547930006], [1437810048.0, 33320000.0, 0.3166632552720824], [1437811776.0, 33340000.0, 0.3176564435354434], [1437813504.0, 33360000.0, 0.3186521350097141], [1437815232.0, 33380000.0, 0.3196503344412433], [1437816960.0, 33400000.0, 0.3206510465823999], [1437818688.0, 33420000.0, 0.32165427619157927], [1437820416.0, 33440000.0, 0.3226600280332042], [1437822144.0, 33460000.0, 0.323668306877731], [1437823872.0, 33480000.0, 0.3246791175016519], [1437825600.0, 33500000.0, 0.3256924646875], [1437827328.0, 33520000.0, 0.32670835322385194], [1437829056.0, 33540000.0, 0.3277267879053331], [1437830784.0, 33560000.0, 0.32874777353261964], [1437832512.0, 33580000.0, 0.32977131491244477], [1437834240.0, 33600000.0, 0.3307974168575999], [1437835968.0, 33620000.0, 0.33182608418694093], [1437837696.0, 33640000.0, 0.33285732172538973], [1437839424.0, 33660000.0, 0.33389113430394063], [1437841152.0, 33680000.0, 0.3349275267596615], [1437842880.0, 33700000.0, 0.3359665039357001], [1437844608.0, 33720000.0, 0.3370080706812856], [1437846336.0, 33740000.0, 0.33805223185173466], [1437848064.0, 33760000.0, 0.33909899230845325], [1437849792.0, 33780000.0, 0.3401483569189424], [1437851520.0, 33800000.0, 0.34120033055679994], [1437853248.0, 33820000.0, 0.3422549181017265], [1437854976.0, 33840000.0, 0.3433121244395274], [1437856704.0, 33860000.0, 0.34437195446211827], [1437858432.0, 33880000.0, 0.34543441306752715], [1437860160.0, 33900000.0, 0.3464995051599], [1437861888.0, 33920000.0, 0.3475672356495031], [1437863616.0, 33940000.0, 0.3486376094527283], [1437865344.0, 33960000.0, 0.3497106314920949], [1437867072.0, 33980000.0, 0.35078630669625604], [1437868800.0, 34000000.0, 0.35186463999999995], [1437870528.0, 34020000.0, 0.35294563634425613], [1437872256.0, 34040000.0, 0.3540293006760969], [1437873984.0, 34060000.0, 0.35511563794874385], [1437875712.0, 34080000.0, 0.35620465312156874], [1437877440.0, 34100000.0, 0.3572963511601], [1437879168.0, 34120000.0, 0.35839073703602475], [1437880896.0, 34140000.0, 0.3594878157271939], [1437882624.0, 34160000.0, 0.3605875922176245], [1437884352.0, 34180000.0, 0.36169007149750565], [1437886080.0, 34200000.0, 0.3627952585632], [1437887808.0, 34220000.0, 0.36390315841724974], [1437889536.0, 34240000.0, 0.36501377606837854], [1437891264.0, 34260000.0, 0.36612711653149743], [1437892992.0, 34280000.0, 0.36724318482770635], [1437894720.0, 34300000.0, 0.36836198598430014], [1437896448.0, 34320000.0, 0.3694835250347705], [1437898176.0, 34340000.0, 0.3706078070188116], [1437899904.0, 34360000.0, 0.3717348369823221], [1437901632.0, 34380000.0, 0.3728646199774112], [1437903360.0, 34400000.0, 0.3739971610624], [1437905088.0, 34420000.0, 0.3751324653018273], [1437906816.0, 34440000.0, 0.37627053776645225], [1437908544.0, 34460000.0, 0.3774113835332591], [1437910272.0, 34480000.0, 0.37855500768545997], [1437912000.0, 34500000.0, 0.3797014153125001], [1437913728.0, 34520000.0, 0.38085061151006], [1437915456.0, 34540000.0, 0.38200260138006115], [1437917184.0, 34560000.0, 0.38315739003066773], [1437918912.0, 34580000.0, 0.3843149825762929], [1437920640.0, 34600000.0, 0.3854753841375999], [1437922368.0, 34620000.0, 0.38663859984150895], [1437924096.0, 34640000.0, 0.38780463482119776], [1437925824.0, 34660000.0, 0.3889734942161087], [1437927552.0, 34680000.0, 0.39014518317194957], [1437929280.0, 34700000.0, 0.3913197068407001], [1437931008.0, 34720000.0, 0.3924970703806136], [1437932736.0, 34740000.0, 0.3936772789562228], [1437934464.0, 34760000.0, 0.39486033773834134], [1437936192.0, 34780000.0, 0.39604625190407056], [1437937920.0, 34800000.0, 0.39723502663679994], [1437939648.0, 34820000.0, 0.3984266671262146], [1437941376.0, 34840000.0, 0.3996211785682954], [1437943104.0, 34860000.0, 0.40081856616532635], [1437944832.0, 34880000.0, 0.4020188351258952], [1437946560.0, 34900000.0, 0.4032219906649002], [1437948288.0, 34920000.0, 0.4044280380035512], [1437950016.0, 34940000.0, 0.40563698236937634], [1437951744.0, 34960000.0, 0.40684882899622293], [1437953472.0, 34980000.0, 0.4080635831242641], [1437955200.0, 35000000.0, 0.40928125], [1437956928.0, 35020000.0, 0.4105018348762639], [1437958656.0, 35040000.0, 0.411725343012225], [1437960384.0, 35060000.0, 0.41295177967339164], [1437962112.0, 35080000.0, 0.41418115013161666], [1437963840.0, 35100000.0, 0.41541345966509974], [1437965568.0, 35120000.0, 0.41664871355839284], [1437967296.0, 35140000.0, 0.41788691710240183], [1437969024.0, 35160000.0, 0.4191280755943926], [1437970752.0, 35180000.0, 0.4203721943379934], [1437972480.0, 35200000.0, 0.4216192786431999], [1437974208.0, 35220000.0, 0.4228693338263774], [1437975936.0, 35240000.0, 0.4241223652102666], [1437977664.0, 35260000.0, 0.4253783781239852], [1437979392.0, 35280000.0, 0.42663737790303446], [1437981120.0, 35300000.0, 0.4278993698892999], [1437982848.0, 35320000.0, 0.42916435943105846], [1437984576.0, 35340000.0, 0.4304323518829794], [1437986304.0, 35360000.0, 0.43170335260613024], [1437988032.0, 35380000.0, 0.43297736696797906], [1437989760.0, 35400000.0, 0.4342544003424], [1437991488.0, 35420000.0, 0.4355344581096751], [1437993216.0, 35440000.0, 0.4368175456565002], [1437994944.0, 35460000.0, 0.4381036683759868], [1437996672.0, 35480000.0, 0.43939283166766796], [1437998400.0, 35500000.0, 0.44068504093749994], [1438000128.0, 35520000.0, 0.441980301597868], [1438001856.0, 35540000.0, 0.44327861906758886], [1438003584.0, 35560000.0, 0.44457999877191584], [1438005312.0, 35580000.0, 0.44588444614254064], [1438007040.0, 35600000.0, 0.4471919666176001], [1438008768.0, 35620000.0, 0.4485025656416768], [1438010496.0, 35640000.0, 0.4498162486658059], [1438012224.0, 35660000.0, 0.45113302114747644], [1438013952.0, 35680000.0, 0.45245288855063764], [1438015680.0, 35700000.0, 0.45377585634569995], [1438017408.0, 35720000.0, 0.4551019300095417], [1438019136.0, 35740000.0, 0.4564311150255105], [1438020864.0, 35760000.0, 0.4577634168834294], [1438022592.0, 35780000.0, 0.45909884107959836], [1438024320.0, 35800000.0, 0.46043739311680004], [1438026048.0, 35820000.0, 0.4617790785043023], [1438027776.0, 35840000.0, 0.46312390275786347], [1438029504.0, 35860000.0, 0.46447187139973406], [1438031232.0, 35880000.0, 0.4658229899586632], [1438032960.0, 35900000.0, 0.46717726396989984], [1438034688.0, 35920000.0, 0.4685346989751993], [1438036416.0, 35940000.0, 0.4698953005228242], [1438038144.0, 35960000.0, 0.4712590741675511], [1438039872.0, 35980000.0, 0.47262602547067195], [1438041600.0, 36000000.0, 0.47399616000000017], [1438043328.0, 36020000.0, 0.47536948332987194], [1438045056.0, 36040000.0, 0.47674600104115306], [1438046784.0, 36060000.0, 0.4781257187212396], [1438048512.0, 36080000.0, 0.4795086419640648], [1438050240.0, 36100000.0, 0.4808947763700999], [1438051968.0, 36120000.0, 0.482284127546361], [1438053696.0, 36140000.0, 0.48367670110640976], [1438055424.0, 36160000.0, 0.4850725026703607], [1438057152.0, 36180000.0, 0.48647153786488145], [1438058880.0, 36200000.0, 0.48787381232320015], [1438060608.0, 36220000.0, 0.4892793316851056], [1438062336.0, 36240000.0, 0.49068810159695475], [1438064064.0, 36260000.0, 0.4921001277116733], [1438065792.0, 36280000.0, 0.49351541568876245], [1438067520.0, 36300000.0, 0.49493397119429994], [1438069248.0, 36320000.0, 0.4963557999009466], [1438070976.0, 36340000.0, 0.49778090748794734], [1438072704.0, 36360000.0, 0.4992092996411383], [1438074432.0, 36380000.0, 0.5006409820529469], [1438076160.0, 36400000.0, 0.5020759604224001], [1438077888.0, 36420000.0, 0.5035142404551232], [1438079616.0, 36440000.0, 0.5049558278633482], [1438081344.0, 36460000.0, 0.506400728365915], [1438083072.0, 36480000.0, 0.5078489476882762], [1438084800.0, 36500000.0, 0.5093004915624999], [1438086528.0, 36520000.0, 0.5107553657272762], [1438088256.0, 36540000.0, 0.5122135759279169], [1438089984.0, 36560000.0, 0.5136751279163638], [1438091712.0, 36580000.0, 0.5151400274511888], [1438093440.0, 36600000.0, 0.5166082802976001], [1438095168.0, 36620000.0, 0.5180798922274447], [1438096896.0, 36640000.0, 0.5195548690192139], [1438098624.0, 36660000.0, 0.5210332164580446], [1438100352.0, 36680000.0, 0.5225149403357258], [1438102080.0, 36700000.0, 0.5240000464507], [1438103808.0, 36720000.0, 0.5254885406080698], [1438105536.0, 36740000.0, 0.5269804286195985], [1438107264.0, 36760000.0, 0.5284757163037176], [1438108992.0, 36780000.0, 0.5299744094855264], [1438110720.0, 36800000.0, 0.5314765139968], [1438112448.0, 36820000.0, 0.5329820356759903], [1438114176.0, 36840000.0, 0.5344909803682315], [1438115904.0, 36860000.0, 0.5360033539253423], [1438117632.0, 36880000.0, 0.5375191622058312], [1438119360.0, 36900000.0, 0.5390384110749], [1438121088.0, 36920000.0, 0.5405611064044474], [1438122816.0, 36940000.0, 0.5420872540730721], [1438124544.0, 36960000.0, 0.5436168599660791], [1438126272.0, 36980000.0, 0.54514992997548], [1438128000.0, 37000000.0, 0.5466864700000001], [1438129728.0, 37020000.0, 0.5482264859450799], [1438131456.0, 37040000.0, 0.5497699837228812], [1438133184.0, 37060000.0, 0.5513169692522879], [1438134912.0, 37080000.0, 0.5528674484589128], [1438136640.0, 37100000.0, 0.5544214272751], [1438138368.0, 37120000.0, 0.555978911639929], [1438140096.0, 37140000.0, 0.5575399074992179], [1438141824.0, 37160000.0, 0.5591044208055287], [1438143552.0, 37180000.0, 0.5606724575181696], [1438145280.0, 37200000.0, 0.5622440236032001], [1438147008.0, 37220000.0, 0.5638191250334336], [1438148736.0, 37240000.0, 0.565397767788443], [1438150464.0, 37260000.0, 0.5669799578545613], [1438152192.0, 37280000.0, 0.5685657012248905], [1438153920.0, 37300000.0, 0.5701550038993], [1438155648.0, 37320000.0, 0.5717478718844345], [1438157376.0, 37340000.0, 0.5733443111937155], [1438159104.0, 37360000.0, 0.5749443278473463], [1438160832.0, 37380000.0, 0.5765479278723153], [1438162560.0, 37400000.0, 0.5781551173024001], [1438164288.0, 37420000.0, 0.5797659021781713], [1438166016.0, 37440000.0, 0.5813802885469964], [1438167744.0, 37460000.0, 0.582998282463043], [1438169472.0, 37480000.0, 0.5846198899872843], [1438171200.0, 37500000.0, 0.5862451171875], [1438172928.0, 37520000.0, 0.5878739701382838], [1438174656.0, 37540000.0, 0.589506454921045], [1438176384.0, 37560000.0, 0.5911425776240116], [1438178112.0, 37580000.0, 0.5927823443422368], [1438179840.0, 37600000.0, 0.5944257611775997], [1438181568.0, 37620000.0, 0.5960728342388126], [1438183296.0, 37640000.0, 0.5977235696414217], [1438185024.0, 37660000.0, 0.5993779735078124], [1438186752.0, 37680000.0, 0.6010360519672134], [1438188480.0, 37700000.0, 0.6026978111557001], [1438190208.0, 37720000.0, 0.6043632572161975], [1438191936.0, 37740000.0, 0.6060323962984866], [1438193664.0, 37760000.0, 0.6077052345592051], [1438195392.0, 37780000.0, 0.6093817781618545], [1438197120.0, 37800000.0, 0.6110620332767998], [1438198848.0, 37820000.0, 0.6127460060812786], [1438200576.0, 37840000.0, 0.6144337027593992], [1438202304.0, 37860000.0, 0.6161251295021501], [1438204032.0, 37880000.0, 0.617820292507399], [1438205760.0, 37900000.0, 0.6195191979799], [1438207488.0, 37920000.0, 0.621221852131295], [1438209216.0, 37940000.0, 0.6229282611801201], [1438210944.0, 37960000.0, 0.6246384313518067], [1438212672.0, 37980000.0, 0.626352368878688], [1438214400.0, 38000000.0, 0.6280700799999996], [1438216128.0, 38020000.0, 0.6297915709618882], [1438217856.0, 38040000.0, 0.6315168480174089], [1438219584.0, 38060000.0, 0.6332459174265358], [1438221312.0, 38080000.0, 0.6349787854561606], [1438223040.0, 38100000.0, 0.6367154583800999], [1438224768.0, 38120000.0, 0.6384559424790968], [1438226496.0, 38140000.0, 0.6402002440408259], [1438228224.0, 38160000.0, 0.6419483693598964], [1438229952.0, 38180000.0, 0.6437003247378577], [1438231680.0, 38200000.0, 0.6454561164831999], [1438233408.0, 38220000.0, 0.6472157509113617], [1438235136.0, 38240000.0, 0.6489792343447305], [1438236864.0, 38260000.0, 0.6507465731126494], [1438238592.0, 38280000.0, 0.6525177735514183], [1438240320.0, 38300000.0, 0.6542928420043], [1438242048.0, 38320000.0, 0.6560717848215223], [1438243776.0, 38340000.0, 0.6578546083602833], [1438245504.0, 38360000.0, 0.659641318984754], [1438247232.0, 38380000.0, 0.6614319230660832], [1438248960.0, 38400000.0, 0.6632264269824], [1438250688.0, 38420000.0, 0.6650248371188194], [1438252416.0, 38440000.0, 0.6668271598674441], [1438254144.0, 38460000.0, 0.6686334016273712], [1438255872.0, 38480000.0, 0.6704435688046918], [1438257600.0, 38500000.0, 0.6722576678125002], [1438259328.0, 38520000.0, 0.6740757050708919], [1438261056.0, 38540000.0, 0.6758976870069732], [1438262784.0, 38560000.0, 0.6777236200548596], [1438264512.0, 38580000.0, 0.6795535106556848], [1438266240.0, 38600000.0, 0.6813873652576], [1438267968.0, 38620000.0, 0.6832251903157809], [1438269696.0, 38640000.0, 0.6850669922924298], [1438271424.0, 38660000.0, 0.6869127776567806], [1438273152.0, 38680000.0, 0.6887625528851015], [1438274880.0, 38700000.0, 0.6906163244607001], [1438276608.0, 38720000.0, 0.6924740988739255], [1438278336.0, 38740000.0, 0.6943358826221748], [1438280064.0, 38760000.0, 0.6962016822098932], [1438281792.0, 38780000.0, 0.6980715041485823], [1438283520.0, 38800000.0, 0.6999453549568], [1438285248.0, 38820000.0, 0.7018232411601664], [1438286976.0, 38840000.0, 0.7037051692913674], [1438288704.0, 38860000.0, 0.7055911458901583], [1438290432.0, 38880000.0, 0.7074811775033671], [1438292160.0, 38900000.0, 0.7093752706849001], [1438293888.0, 38920000.0, 0.7112734319957433], [1438295616.0, 38940000.0, 0.7131756680039685], [1438297344.0, 38960000.0, 0.7150819852847349], [1438299072.0, 38980000.0, 0.7169923904202962], [1438300800.0, 39000000.0, 0.7189068899999999], [1438302528.0, 39020000.0, 0.7208254906202961], [1438304256.0, 39040000.0, 0.7227481988847368], [1438305984.0, 39060000.0, 0.7246750214039839], [1438307712.0, 39080000.0, 0.7266059647958087], [1438309440.0, 39100000.0, 0.7285410356851002], [1438311168.0, 39120000.0, 0.7304802407038646], [1438312896.0, 39140000.0, 0.7324235864912338], [1438314624.0, 39160000.0, 0.7343710796934646], [1438316352.0, 39180000.0, 0.7363227269639456], [1438318080.0, 39200000.0, 0.7382785349631998], [1438319808.0, 39220000.0, 0.7402385103588898], [1438321536.0, 39240000.0, 0.7422026598258185], [1438323264.0, 39260000.0, 0.7441709900459378], [1438324992.0, 39280000.0, 0.7461435077083463], [1438326720.0, 39300000.0, 0.7481202195093001], [1438328448.0, 39320000.0, 0.7501011321522103], [1438330176.0, 39340000.0, 0.7520862523476516], [1438331904.0, 39360000.0, 0.7540755868133622], [1438333632.0, 39380000.0, 0.7560691422742515], [1438335360.0, 39400000.0, 0.7580669254624], [1438337088.0, 39420000.0, 0.7600689431170674], [1438338816.0, 39440000.0, 0.762075201984692], [1438340544.0, 39460000.0, 0.7640857088188991], [1438342272.0, 39480000.0, 0.7661004703804998], [1438344000.0, 39500000.0, 0.7681194934375002], [1438345728.0, 39520000.0, 0.7701427847650999], [1438347456.0, 39540000.0, 0.7721703511457011], [1438349184.0, 39560000.0, 0.7742021993689077], [1438350912.0, 39580000.0, 0.7762383362315329], [1438352640.0, 39600000.0, 0.7782787685376], [1438354368.0, 39620000.0, 0.780323503098349], [1438356096.0, 39640000.0, 0.7823725467322379], [1438357824.0, 39660000.0, 0.7844259062649488], [1438359552.0, 39680000.0, 0.7864835885293895], [1438361280.0, 39700000.0, 0.7885456003657003], [1438363008.0, 39720000.0, 0.7906119486212535], [1438364736.0, 39740000.0, 0.7926826401506629], [1438366464.0, 39760000.0, 0.7947576818157813], [1438368192.0, 39780000.0, 0.7968370804857107], [1438369920.0, 39800000.0, 0.7989208430368], [1438371648.0, 39820000.0, 0.8010089763526547], [1438373376.0, 39840000.0, 0.8031014873241354], [1438375104.0, 39860000.0, 0.8051983828493663], [1438376832.0, 39880000.0, 0.8072996698337352], [1438378560.0, 39900000.0, 0.8094053551899002], [1438380288.0, 39920000.0, 0.8115154458377912], [1438382016.0, 39940000.0, 0.8136299487046165], [1438383744.0, 39960000.0, 0.8157488707248629], [1438385472.0, 39980000.0, 0.8178722188403041], [1438387200.0, 40000000.0, 0.82], [1438388928.0, 40020000.0, 0.8221322211603037], [1438390656.0, 40040000.0, 0.8242688892848645], [1438392384.0, 40060000.0, 0.826410011344632], [1438394112.0, 40080000.0, 0.8285555943178566], [1438395840.0, 40100000.0, 0.8307056451900998], [1438397568.0, 40120000.0, 0.8328601709542325], [1438399296.0, 40140000.0, 0.8350191786104422], [1438401024.0, 40160000.0, 0.8371826751662326], [1438402752.0, 40180000.0, 0.8393506676364333], [1438404480.0, 40200000.0, 0.8415231630431995], [1438406208.0, 40220000.0, 0.8437001684160178], [1438407936.0, 40240000.0, 0.8458816907917065], [1438409664.0, 40260000.0, 0.8480677372144253], [1438411392.0, 40280000.0, 0.8502583147356739], [1438413120.0, 40300000.0, 0.8524534304143002], [1438414848.0, 40320000.0, 0.8546530913164985], [1438416576.0, 40340000.0, 0.8568573045158192], [1438418304.0, 40360000.0, 0.8590660770931696], [1438420032.0, 40380000.0, 0.8612794161368195], [1438421760.0, 40400000.0, 0.8634973287424001], [1438423488.0, 40420000.0, 0.865719822012915], [1438425216.0, 40440000.0, 0.8679469030587398], [1438426944.0, 40460000.0, 0.8701785789976273], [1438428672.0, 40480000.0, 0.8724148569547082], [1438430400.0, 40500000.0, 0.8746557440624997], [1438432128.0, 40520000.0, 0.8769012474609075], [1438433856.0, 40540000.0, 0.8791513742972291], [1438435584.0, 40560000.0, 0.881406131726156], [1438437312.0, 40580000.0, 0.8836655269097805], [1438439040.0, 40600000.0, 0.8859295670175994], [1438440768.0, 40620000.0, 0.8881982592265171], [1438442496.0, 40640000.0, 0.890471610720846], [1438444224.0, 40660000.0, 0.8927496286923162], [1438445952.0, 40680000.0, 0.8950323203400771], [1438447680.0, 40700000.0, 0.8973196928707005], [1438449408.0, 40720000.0, 0.8996117534981818], [1438451136.0, 40740000.0, 0.9019085094439503], [1438452864.0, 40760000.0, 0.9042099679368688], [1438454592.0, 40780000.0, 0.9065161362132388], [1438456320.0, 40800000.0, 0.9088270215168002], [1438458048.0, 40820000.0, 0.9111426310987423], [1438459776.0, 40840000.0, 0.9134629722177029], [1438461504.0, 40860000.0, 0.9157880521397744], [1438463232.0, 40880000.0, 0.9181178781385031], [1438464960.0, 40900000.0, 0.9204524574948998], [1438466688.0, 40920000.0, 0.9227917974974387], [1438468416.0, 40940000.0, 0.9251359054420647], [1438470144.0, 40960000.0, 0.9274847886321911], [1438471872.0, 40980000.0, 0.9298384543787117], [1438473600.0, 41000000.0, 0.9321969099999996], [1438475328.0, 41020000.0, 0.9345601628219126], [1438477056.0, 41040000.0, 0.9369282201777932], [1438478784.0, 41060000.0, 0.9393010894084796], [1438480512.0, 41080000.0, 0.9416787778623043], [1438482240.0, 41100000.0, 0.9440612928951003], [1438483968.0, 41120000.0, 0.946448641870201], [1438485696.0, 41140000.0, 0.9488408321584496], [1438487424.0, 41160000.0, 0.9512378711382], [1438489152.0, 41180000.0, 0.953639766195322], [1438490880.0, 41200000.0, 0.9560465247232001], [1438492608.0, 41220000.0, 0.9584581541227454], [1438494336.0, 41240000.0, 0.9608746618023941], [1438496064.0, 41260000.0, 0.9632960551781138], [1438497792.0, 41280000.0, 0.9657223416734027], [1438499520.0, 41300000.0, 0.9681535287192997], [1438501248.0, 41320000.0, 0.9705896237543858], [1438502976.0, 41340000.0, 0.973030634224788], [1438504704.0, 41360000.0, 0.9754765675841783], [1438506432.0, 41380000.0, 0.9779274312937871], [1438508160.0, 41400000.0, 0.9803832328223996], [1438509888.0, 41420000.0, 0.9828439796463637], [1438511616.0, 41440000.0, 0.9853096792495883], [1438513344.0, 41460000.0, 0.9877803391235548], [1438515072.0, 41480000.0, 0.9902559667673156], [1438516800.0, 41500000.0, 0.9927365696875005], [1438518528.0, 41520000.0, 0.9952221553983162], [1438520256.0, 41540000.0, 0.997712731421557], [1438521984.0, 41560000.0, 1.0002083052866035], [1438523712.0, 41580000.0, 1.002708884530429], [1438525440.0, 41600000.0, 1.0052144766976001], [1438527168.0, 41620000.0, 1.007725089340285], [1438528896.0, 41640000.0, 1.0102407300182537], [1438530624.0, 41660000.0, 1.012761406298885], [1438532352.0, 41680000.0, 1.0152871257571656], [1438534080.0, 41700000.0, 1.0178178959756998], [1438535808.0, 41720000.0, 1.0203537245447092], [1438537536.0, 41740000.0, 1.0228946190620392], [1438539264.0, 41760000.0, 1.0254405871331576], [1438540992.0, 41780000.0, 1.0279916363711665], [1438542720.0, 41800000.0, 1.0305477743967997], [1438544448.0, 41820000.0, 1.033109008838431], [1438546176.0, 41840000.0, 1.0356753473320717], [1438547904.0, 41860000.0, 1.0382467975213823], [1438549632.0, 41880000.0, 1.0408233670576708], [1438551360.0, 41900000.0, 1.0434050635999006], [1438553088.0, 41920000.0, 1.0459918948146874], [1438554816.0, 41940000.0, 1.0485838683763122], [1438556544.0, 41960000.0, 1.0511809919667185], [1438558272.0, 41980000.0, 1.0537832732755208], [1438560000.0, 42000000.0, 1.0563907200000002], [1438561728.0, 42020000.0, 1.0590033398451202], [1438563456.0, 42040000.0, 1.0616211405235205], [1438565184.0, 42060000.0, 1.064244129755528], [1438566912.0, 42080000.0, 1.0668723152691535], [1438568640.0, 42100000.0, 1.0695057048001], [1438570368.0, 42120000.0, 1.0721443060917686], [1438572096.0, 42140000.0, 1.0747881268952582], [1438573824.0, 42160000.0, 1.0774371749693687], [1438575552.0, 42180000.0, 1.0800914580806098], [1438577280.0, 42200000.0, 1.0827509840032], [1438579008.0, 42220000.0, 1.0854157605190742], [1438580736.0, 42240000.0, 1.0880857954178826], [1438582464.0, 42260000.0, 1.0907610964970016], [1438584192.0, 42280000.0, 1.0934416715615303], [1438585920.0, 42300000.0, 1.0961275284243004], [1438587648.0, 42320000.0, 1.0988186749058746], [1438589376.0, 42340000.0, 1.1015151188345553], [1438591104.0, 42360000.0, 1.1042168680463857], [1438592832.0, 42380000.0, 1.106923930385156], [1438594560.0, 42400000.0, 1.1096363137024001], [1438596288.0, 42420000.0, 1.112354025857411], [1438598016.0, 42440000.0, 1.1150770747172358], [1438599744.0, 42460000.0, 1.1178054681566836], [1438601472.0, 42480000.0, 1.1205392140583244], [1438603200.0, 42500000.0, 1.1232783203125], [1438604928.0, 42520000.0, 1.1260227948173236], [1438606656.0, 42540000.0, 1.1287726454786842], [1438608384.0, 42560000.0, 1.131527880210252], [1438610112.0, 42580000.0, 1.1342885069334767], [1438611840.0, 42600000.0, 1.1370545335775997], [1438613568.0, 42620000.0, 1.1398259680796523], [1438615296.0, 42640000.0, 1.1426028183844619], [1438617024.0, 42660000.0, 1.1453850924446527], [1438618752.0, 42680000.0, 1.1481727982206535], [1438620480.0, 42700000.0, 1.1509659436806996], [1438622208.0, 42720000.0, 1.1537645368008378], [1438623936.0, 42740000.0, 1.1565685855649261], [1438625664.0, 42760000.0, 1.1593780979646453], [1438627392.0, 42780000.0, 1.162193081999494], [1438629120.0, 42800000.0, 1.1650135456768], [1438630848.0, 42820000.0, 1.1678394970117183], [1438632576.0, 42840000.0, 1.1706709440272394], [1438634304.0, 42860000.0, 1.17350789475419], [1438636032.0, 42880000.0, 1.1763503572312393], [1438637760.0, 42900000.0, 1.1791983395049002], [1438639488.0, 42920000.0, 1.182051849629535], [1438641216.0, 42940000.0, 1.18491089566736], [1438642944.0, 42960000.0, 1.1877754856884473], [1438644672.0, 42980000.0, 1.190645627770728], [1438646400.0, 43000000.0, 1.1935213299999996], [1438648128.0, 43020000.0, 1.1964026004699273], [1438649856.0, 43040000.0, 1.1992894472820494], [1438651584.0, 43060000.0, 1.202181878545776], [1438653312.0, 43080000.0, 1.2050799023784005], [1438655040.0, 43100000.0, 1.2079835269050996], [1438656768.0, 43120000.0, 1.210892760258937], [1438658496.0, 43140000.0, 1.213807610580866], [1438660224.0, 43160000.0, 1.2167280860197363], [1438661952.0, 43180000.0, 1.2196541947322972], [1438663680.0, 43200000.0, 1.2225859448832004], [1438665408.0, 43220000.0, 1.2255233446450016], [1438667136.0, 43240000.0, 1.2284664021981706], [1438668864.0, 43260000.0, 1.2314151257310888], [1438670592.0, 43280000.0, 1.234369523440059], [1438672320.0, 43300000.0, 1.2373296035293002], [1438674048.0, 43320000.0, 1.2402953742109624], [1438675776.0, 43340000.0, 1.2432668437051229], [1438677504.0, 43360000.0, 1.2462440202397946], [1438679232.0, 43380000.0, 1.2492269120509232], [1438680960.0, 43400000.0, 1.2522155273823998], [1438682688.0, 43420000.0, 1.255209874486059], [1438684416.0, 43440000.0, 1.2582099616216846], [1438686144.0, 43460000.0, 1.261215797057011], [1438687872.0, 43480000.0, 1.2642273890677318], [1438689600.0, 43500000.0, 1.2672447459374996], [1438691328.0, 43520000.0, 1.2702678759579327], [1438693056.0, 43540000.0, 1.2732967874286132], [1438694784.0, 43560000.0, 1.2763314886570998], [1438696512.0, 43580000.0, 1.2793719879589243], [1438698240.0, 43600000.0, 1.2824182936576], [1438699968.0, 43620000.0, 1.2854704140846211], [1438701696.0, 43640000.0, 1.28852835757947], [1438703424.0, 43660000.0, 1.2915921324896198], [1438705152.0, 43680000.0, 1.294661747170542], [1438706880.0, 43700000.0, 1.2977372099857003], [1438708608.0, 43720000.0, 1.3008185293065655], [1438710336.0, 43740000.0, 1.3039057135126142], [1438712064.0, 43760000.0, 1.3069987709913338], [1438713792.0, 43780000.0, 1.3100977101382227], [1438715520.0, 43800000.0, 1.3132025393567999], [1438717248.0, 43820000.0, 1.316313267058606], [1438718976.0, 43840000.0, 1.3194299016632078], [1438720704.0, 43860000.0, 1.3225524515981983], [1438722432.0, 43880000.0, 1.325680925299207], [1438724160.0, 43900000.0, 1.3288153312098996], [1438725888.0, 43920000.0, 1.3319556777819839], [1438727616.0, 43940000.0, 1.3351019734752085], [1438729344.0, 43960000.0, 1.338254226757375], [1438731072.0, 43980000.0, 1.3414124461043357], [1438732800.0, 44000000.0, 1.3445766400000008], [1438734528.0, 44020000.0, 1.3477468169363362], [1438736256.0, 44040000.0, 1.350922985413377], [1438737984.0, 44060000.0, 1.3541051539392233], [1438739712.0, 44080000.0, 1.3572933310300492], [1438741440.0, 44100000.0, 1.3604875252101003], [1438743168.0, 44120000.0, 1.3636877450117046], [1438744896.0, 44140000.0, 1.3668939989752733], [1438746624.0, 44160000.0, 1.370106295649305], [1438748352.0, 44180000.0, 1.3733246435903856], [1438750080.0, 44200000.0, 1.3765490513632], [1438751808.0, 44220000.0, 1.3797795275405291], [1438753536.0, 44240000.0, 1.3830160807032592], [1438755264.0, 44260000.0, 1.3862587194403773], [1438756992.0, 44280000.0, 1.3895074523489863], [1438758720.0, 44300000.0, 1.3927622880342994], [1438760448.0, 44320000.0, 1.396023235109651], [1438762176.0, 44340000.0, 1.3992903021964918], [1438763904.0, 44360000.0, 1.402563497924402], [1438765632.0, 44380000.0, 1.4058428309310906], [1438767360.0, 44400000.0, 1.4091283098624006], [1438769088.0, 44420000.0, 1.4124199433723077], [1438770816.0, 44440000.0, 1.4157177401229322], [1438772544.0, 44460000.0, 1.4190217087845385], [1438774272.0, 44480000.0, 1.4223318580355409], [1438776000.0, 44500000.0, 1.4256481965625003], [1438777728.0, 44520000.0, 1.42897073306014], [1438779456.0, 44540000.0, 1.4322994762313406], [1438781184.0, 44560000.0, 1.4356344347871484], [1438782912.0, 44580000.0, 1.4389756174467734], [1438784640.0, 44600000.0, 1.4423230329376002], [1438786368.0, 44620000.0, 1.4456766899951885], [1438788096.0, 44640000.0, 1.4490365973632786], [1438789824.0, 44660000.0, 1.4524027637937889], [1438791552.0, 44680000.0, 1.4557751980468296], [1438793280.0, 44700000.0, 1.4591539088906995], [1438795008.0, 44720000.0, 1.4625389051018944], [1438796736.0, 44740000.0, 1.4659301954651027], [1438798464.0, 44760000.0, 1.4693277887732215], [1438800192.0, 44780000.0, 1.47273169382735], [1438801920.0, 44800000.0, 1.4761419194368006], [1438803648.0, 44820000.0, 1.4795584744190946], [1438805376.0, 44840000.0, 1.4829813675999752], [1438807104.0, 44860000.0, 1.486410607813406], [1438808832.0, 44880000.0, 1.489846203901576], [1438810560.0, 44900000.0, 1.4932881647149003], [1438812288.0, 44920000.0, 1.496736499112031], [1438814016.0, 44940000.0, 1.5001912159598558], [1438815744.0, 44960000.0, 1.503652324133504], [1438817472.0, 44980000.0, 1.5071198325163446], [1438819200.0, 45000000.0, 1.51059375], [1438820928.0, 45020000.0, 1.5140740854843437], [1438822656.0, 45040000.0, 1.5175608478775042], [1438824384.0, 45060000.0, 1.5210540460958724], [1438826112.0, 45080000.0, 1.5245536890640967], [1438827840.0, 45100000.0, 1.5280597857150997], [1438829568.0, 45120000.0, 1.531572344990072], [1438831296.0, 45140000.0, 1.5350913758384823], [1438833024.0, 45160000.0, 1.5386168872180728], [1438834752.0, 45180000.0, 1.5421488880948735], [1438836480.0, 45200000.0, 1.5456873874431991], [1438838208.0, 45220000.0, 1.5492323942456578], [1438839936.0, 45240000.0, 1.5527839174931464], [1438841664.0, 45260000.0, 1.556341966184865], [1438843392.0, 45280000.0, 1.5599065493283135], [1438845120.0, 45300000.0, 1.5634776759393005], [1438846848.0, 45320000.0, 1.5670553550419386], [1438848576.0, 45340000.0, 1.5706395956686592], [1438850304.0, 45360000.0, 1.5742304068602095], [1438852032.0, 45380000.0, 1.5778277976656596], [1438853760.0, 45400000.0, 1.5814317771424], [1438855488.0, 45420000.0, 1.5850423543561547], [1438857216.0, 45440000.0, 1.5886595383809794], [1438858944.0, 45460000.0, 1.5922833382992676], [1438860672.0, 45480000.0, 1.5959137632017477], [1438862400.0, 45500000.0, 1.5995508221874997], [1438864128.0, 45520000.0, 1.6031945243639472], [1438865856.0, 45540000.0, 1.6068448788468697], [1438867584.0, 45560000.0, 1.610501894760396], [1438869312.0, 45580000.0, 1.6141655812370204], [1438871040.0, 45600000.0, 1.6178359474175992], [1438872768.0, 45620000.0, 1.621513002451357], [1438874496.0, 45640000.0, 1.6251967554958862], [1438876224.0, 45660000.0, 1.6288872157171563], [1438877952.0, 45680000.0, 1.6325843922895167], [1438879680.0, 45700000.0, 1.6362882943957007], [1438881408.0, 45720000.0, 1.6399989312268217], [1438883136.0, 45740000.0, 1.6437163119823903], [1438884864.0, 45760000.0, 1.6474404458703087], [1438886592.0, 45780000.0, 1.6511713421068788], [1438888320.0, 45800000.0, 1.6549090099168002], [1438890048.0, 45820000.0, 1.6586534585331822], [1438891776.0, 45840000.0, 1.6624046971975428], [1438893504.0, 45860000.0, 1.6661627351598145], [1438895232.0, 45880000.0, 1.6699275816783434], [1438896960.0, 45900000.0, 1.6736992460198996], [1438898688.0, 45920000.0, 1.6774777374596788], [1438900416.0, 45940000.0, 1.681263065281305], [1438902144.0, 45960000.0, 1.6850552387768314], [1438903872.0, 45980000.0, 1.688854267246752], [1438905600.0, 46000000.0, 1.6926601599999995], [1438907328.0, 46020000.0, 1.696472926353953], [1438909056.0, 46040000.0, 1.7002925756344334], [1438910784.0, 46060000.0, 1.7041191171757195], [1438912512.0, 46080000.0, 1.707952560320544], [1438914240.0, 46100000.0, 1.7117929144201007], [1438915968.0, 46120000.0, 1.7156401888340413], [1438917696.0, 46140000.0, 1.7194943929304896], [1438919424.0, 46160000.0, 1.7233555360860398], [1438921152.0, 46180000.0, 1.727223627685762], [1438922880.0, 46200000.0, 1.7310986771232002], [1438924608.0, 46220000.0, 1.7349806938003853], [1438926336.0, 46240000.0, 1.738869687127834], [1438928064.0, 46260000.0, 1.7427656665245541], [1438929792.0, 46280000.0, 1.7466686414180426], [1438931520.0, 46300000.0, 1.7505786212443], [1438933248.0, 46320000.0, 1.7544956154478257], [1438934976.0, 46340000.0, 1.758419633481628], [1438936704.0, 46360000.0, 1.7623506848072181], [1438938432.0, 46380000.0, 1.7662887788946269], [1438940160.0, 46400000.0, 1.770233925222399], [1438941888.0, 46420000.0, 1.7741861332776039], [1438943616.0, 46440000.0, 1.7781454125558285], [1438945344.0, 46460000.0, 1.7821117725611948], [1438947072.0, 46480000.0, 1.7860852228063555], [1438948800.0, 46500000.0, 1.7900657728125007], [1438950528.0, 46520000.0, 1.7940534321093562], [1438952256.0, 46540000.0, 1.798048210235197], [1438953984.0, 46560000.0, 1.8020501167368432], [1438955712.0, 46580000.0, 1.8060591611696692], [1438957440.0, 46600000.0, 1.8100753530976001], [1438959168.0, 46620000.0, 1.8140987020931247], [1438960896.0, 46640000.0, 1.8181292177372932], [1438962624.0, 46660000.0, 1.8221669096197253], [1438964352.0, 46680000.0, 1.8262117873386055], [1438966080.0, 46700000.0, 1.8302638605006998], [1438967808.0, 46720000.0, 1.8343231387213492], [1438969536.0, 46740000.0, 1.8383896316244792], [1438971264.0, 46760000.0, 1.8424633488425977], [1438972992.0, 46780000.0, 1.8465443000168063], [1438974720.0, 46800000.0, 1.8506324947967994], [1438976448.0, 46820000.0, 1.8547279428408712], [1438978176.0, 46840000.0, 1.858830653815912], [1438979904.0, 46860000.0, 1.862940637397422], [1438981632.0, 46880000.0, 1.867057903269511], [1438983360.0, 46900000.0, 1.8711824611249008], [1438985088.0, 46920000.0, 1.8753143206649276], [1438986816.0, 46940000.0, 1.8794534915995518], [1438988544.0, 46960000.0, 1.8835999836473585], [1438990272.0, 46980000.0, 1.8877538065355606], [1438992000.0, 47000000.0, 1.8919149700000004], [1438993728.0, 47020000.0, 1.8960834837851601], [1438995456.0, 47040000.0, 1.9002593576441604], [1438997184.0, 47060000.0, 1.9044426013387685], [1438998912.0, 47080000.0, 1.9086332246393931], [1439000640.0, 47100000.0, 1.9128312373251], [1439002368.0, 47120000.0, 1.9170366491836084], [1439004096.0, 47140000.0, 1.9212494700112985], [1439005824.0, 47160000.0, 1.9254697096132087], [1439007552.0, 47180000.0, 1.9296973778030495], [1439009280.0, 47200000.0, 1.9339324844031998], [1439011008.0, 47220000.0, 1.9381750392447146], [1439012736.0, 47240000.0, 1.9424250521673232], [1439014464.0, 47260000.0, 1.9466825330194413], [1439016192.0, 47280000.0, 1.9509474916581702], [1439017920.0, 47300000.0, 1.955219937949301], [1439019648.0, 47320000.0, 1.9594998817673148], [1439021376.0, 47340000.0, 1.9637873329953954], [1439023104.0, 47360000.0, 1.9680823015254256], [1439024832.0, 47380000.0, 1.9723847972579962], [1439026560.0, 47400000.0, 1.9766948301024005], [1439028288.0, 47420000.0, 1.9810124099766508], [1439030016.0, 47440000.0, 1.9853375468074757], [1439031744.0, 47460000.0, 1.9896702505303236], [1439033472.0, 47480000.0, 1.9940105310893643], [1439035200.0, 47500000.0, 1.9983583984375], [1439036928.0, 47520000.0, 2.0027138625363636], [1439038656.0, 47540000.0, 2.0070769333563243], [1439040384.0, 47560000.0, 2.0114476208764924], [1439042112.0, 47580000.0, 2.0158259350847167], [1439043840.0, 47600000.0, 2.020211885977599], [1439045568.0, 47620000.0, 2.024605483560492], [1439047296.0, 47640000.0, 2.0290067378475025], [1439049024.0, 47660000.0, 2.0334156588614927], [1439050752.0, 47680000.0, 2.0378322566340934], [1439052480.0, 47700000.0, 2.0422565412056994], [1439054208.0, 47720000.0, 2.046688522625478], [1439055936.0, 47740000.0, 2.0511282109513664], [1439057664.0, 47760000.0, 2.055575616250085], [1439059392.0, 47780000.0, 2.0600307485971334], [1439061120.0, 47800000.0, 2.064493618076801], [1439062848.0, 47820000.0, 2.0689642347821593], [1439064576.0, 47840000.0, 2.073442608815079], [1439066304.0, 47860000.0, 2.0779287502862296], [1439068032.0, 47880000.0, 2.08242266931508], [1439069760.0, 47900000.0, 2.0869243760298994], [1439071488.0, 47920000.0, 2.091433880567775], [1439073216.0, 47940000.0, 2.0959511930745993], [1439074944.0, 47960000.0, 2.1004763237050876], [1439076672.0, 47980000.0, 2.1050092826227678], [1439078400.0, 48000000.0, 2.1095500799999996], [1439080128.0, 48020000.0, 2.1140987260179673], [1439081856.0, 48040000.0, 2.1186552308666897], [1439083584.0, 48060000.0, 2.123219604745016], [1439085312.0, 48080000.0, 2.1277918578606405], [1439087040.0, 48100000.0, 2.132372000430099], [1439088768.0, 48120000.0, 2.136960042678778], [1439090496.0, 48140000.0, 2.1415559948409064], [1439092224.0, 48160000.0, 2.1461598671595756], [1439093952.0, 48180000.0, 2.1507716698867365], [1439095680.0, 48200000.0, 2.155391413283201], [1439097408.0, 48220000.0, 2.1600191076186426], [1439099136.0, 48240000.0, 2.1646547631716104], [1439100864.0, 48260000.0, 2.1692983902295286], [1439102592.0, 48280000.0, 2.173949999088699], [1439104320.0, 48300000.0, 2.1786096000543], [1439106048.0, 48320000.0, 2.1832772034404018], [1439107776.0, 48340000.0, 2.1879528195699622], [1439109504.0, 48360000.0, 2.1926364587748344], [1439111232.0, 48380000.0, 2.1973281313957638], [1439112960.0, 48400000.0, 2.2020278477823996], [1439114688.0, 48420000.0, 2.206735618293299], [1439116416.0, 48440000.0, 2.211451453295925], [1439118144.0, 48460000.0, 2.216175363166651], [1439119872.0, 48480000.0, 2.2209073582907717], [1439121600.0, 48500000.0, 2.2256474490624987], [1439123328.0, 48520000.0, 2.2303956458849723], [1439125056.0, 48540000.0, 2.235151959170253], [1439126784.0, 48560000.0, 2.23991639933934], [1439128512.0, 48580000.0, 2.244688976822164], [1439130240.0, 48600000.0, 2.249469702057601], [1439131968.0, 48620000.0, 2.2542585854934614], [1439133696.0, 48640000.0, 2.25905563758651], [1439135424.0, 48660000.0, 2.2638608688024595], [1439137152.0, 48680000.0, 2.268674289615982], [1439138880.0, 48700000.0, 2.2734959105107007], [1439140608.0, 48720000.0, 2.278325741979206], [1439142336.0, 48740000.0, 2.2831637945230536], [1439144064.0, 48760000.0, 2.2880100786527744], [1439145792.0, 48780000.0, 2.2928646048878627], [1439147520.0, 48800000.0, 2.2977273837568], [1439149248.0, 48820000.0, 2.3025984257970458], [1439150976.0, 48840000.0, 2.3074777415550485], [1439152704.0, 48860000.0, 2.3123653415862386], [1439154432.0, 48880000.0, 2.317261236455047], [1439156160.0, 48900000.0, 2.3221654367348994], [1439157888.0, 48920000.0, 2.3270779530082235], [1439159616.0, 48940000.0, 2.3319987958664488], [1439161344.0, 48960000.0, 2.3369279759100148], [1439163072.0, 48980000.0, 2.3418655037483753], [1439164800.0, 49000000.0, 2.346811390000001], [1439166528.0, 49020000.0, 2.3517656452923767], [1439168256.0, 49040000.0, 2.356728280262017], [1439169984.0, 49060000.0, 2.3616993055544633], [1439171712.0, 49080000.0, 2.3666787318242895], [1439173440.0, 49100000.0, 2.3716665697351], [1439175168.0, 49120000.0, 2.376662829959545], [1439176896.0, 49140000.0, 2.381667523179314], [1439178624.0, 49160000.0, 2.386680660085146], [1439180352.0, 49180000.0, 2.391702251376826], [1439182080.0, 49200000.0, 2.3967323077632], [1439183808.0, 49220000.0, 2.4017708399621687], [1439185536.0, 49240000.0, 2.406817858700699], [1439187264.0, 49260000.0, 2.411873374714818], [1439188992.0, 49280000.0, 2.416937398749626], [1439190720.0, 49300000.0, 2.4220099415592986], [1439192448.0, 49320000.0, 2.427091013907091], [1439194176.0, 49340000.0, 2.4321806265653323], [1439195904.0, 49360000.0, 2.437278790315442], [1439197632.0, 49380000.0, 2.442385515947931], [1439199360.0, 49400000.0, 2.447500814262401], [1439201088.0, 49420000.0, 2.4526246960675477], [1439202816.0, 49440000.0, 2.4577571721811724], [1439204544.0, 49460000.0, 2.462898253430178], [1439206272.0, 49480000.0, 2.468047950650581], [1439208000.0, 49500000.0, 2.4732062746875], [1439209728.0, 49520000.0, 2.47837323639518], [1439211456.0, 49540000.0, 2.4835488466369804], [1439213184.0, 49560000.0, 2.4887331162853887], [1439214912.0, 49580000.0, 2.4939260562220134], [1439216640.0, 49600000.0, 2.4991276773376], [1439218368.0, 49620000.0, 2.5043379905320284], [1439220096.0, 49640000.0, 2.5095570067143194], [1439221824.0, 49660000.0, 2.5147847368026293], [1439223552.0, 49680000.0, 2.520021191724269], [1439225280.0, 49700000.0, 2.5252663824156993], [1439227008.0, 49720000.0, 2.530520319822535], [1439228736.0, 49740000.0, 2.5357830148995437], [1439230464.0, 49760000.0, 2.5410544786106617], [1439232192.0, 49780000.0, 2.54633472192899], [1439233920.0, 49800000.0, 2.5516237558368013], [1439235648.0, 49820000.0, 2.556921591325535], [1439237376.0, 49840000.0, 2.562228239395816], [1439239104.0, 49860000.0, 2.5675437110574455], [1439240832.0, 49880000.0, 2.5728680173294154], [1439242560.0, 49900000.0, 2.5782011692399003], [1439244288.0, 49920000.0, 2.583543177826271], [1439246016.0, 49940000.0, 2.588894054135096], [1439247744.0, 49960000.0, 2.594253809222144], [1439249472.0, 49980000.0, 2.5996224541523842], [1439251200.0, 50000000.0, 2.605], [1439252928.0, 50020000.0, 2.6103864578483833], [1439254656.0, 50040000.0, 2.6157818387901433], [1439256384.0, 50060000.0, 2.621186153927112], [1439258112.0, 50080000.0, 2.626599414370336], [1439259840.0, 50100000.0, 2.6320216312400997], [1439261568.0, 50120000.0, 2.6374528156659123], [1439263296.0, 50140000.0, 2.6428929787865227], [1439265024.0, 50160000.0, 2.6483421317499123], [1439266752.0, 50180000.0, 2.6538002857133134], [1439268480.0, 50200000.0, 2.6592674518431987], [1439270208.0, 50220000.0, 2.6647436413152987], [1439271936.0, 50240000.0, 2.670228865314586], [1439273664.0, 50260000.0, 2.675723135035305], [1439275392.0, 50280000.0, 2.681226461680953], [1439277120.0, 50300000.0, 2.6867388564643004], [1439278848.0, 50320000.0, 2.692260330607379], [1439280576.0, 50340000.0, 2.697790895341499], [1439282304.0, 50360000.0, 2.703330561907249], [1439284032.0, 50380000.0, 2.7088793415545003], [1439285760.0, 50400000.0, 2.7144372455424], [1439287488.0, 50420000.0, 2.7200042851393946], [1439289216.0, 50440000.0, 2.725580471623219], [1439290944.0, 50460000.0, 2.7311658162809076], [1439292672.0, 50480000.0, 2.7367603304087873], [1439294400.0, 50500000.0, 2.7423640253124995], [1439296128.0, 50520000.0, 2.747976912306987], [1439297856.0, 50540000.0, 2.75359900271651], [1439299584.0, 50560000.0, 2.7592303078746356], [1439301312.0, 50580000.0, 2.7648708391242605], [1439303040.0, 50600000.0, 2.770520607817599], [1439304768.0, 50620000.0, 2.776179625316197], [1439306496.0, 50640000.0, 2.781847902990926], [1439308224.0, 50660000.0, 2.787525452221996], [1439309952.0, 50680000.0, 2.793212284398957], [1439311680.0, 50700000.0, 2.7989084109207005], [1439313408.0, 50720000.0, 2.8046138431954617], [1439315136.0, 50740000.0, 2.8103285926408303], [1439316864.0, 50760000.0, 2.816052670683748], [1439318592.0, 50780000.0, 2.8217860887605197], [1439320320.0, 50800000.0, 2.8275288583168], [1439322048.0, 50820000.0, 2.8332809908076215], [1439323776.0, 50840000.0, 2.839042497697382], [1439325504.0, 50860000.0, 2.8448133904598545], [1439327232.0, 50880000.0, 2.8505936805781835], [1439328960.0, 50900000.0, 2.8563833795449], [1439330688.0, 50920000.0, 2.862182498861918], [1439332416.0, 50940000.0, 2.867991050040545], [1439334144.0, 50960000.0, 2.8738090446014715], [1439335872.0, 50980000.0, 2.879636494074792], [1439337600.0, 51000000.0, 2.8854734099999986], [1439339328.0, 51020000.0, 2.8913198039259926], [1439341056.0, 51040000.0, 2.8971756874110732], [1439342784.0, 51060000.0, 2.9030410720229596], [1439344512.0, 51080000.0, 2.9089159693387843], [1439346240.0, 51100000.0, 2.9148003909451012], [1439347968.0, 51120000.0, 2.9206943484378813], [1439349696.0, 51140000.0, 2.9265978534225296], [1439351424.0, 51160000.0, 2.9325109175138793], [1439353152.0, 51180000.0, 2.938433552336202], [1439354880.0, 51200000.0, 2.944365769523201], [1439356608.0, 51220000.0, 2.9503075807180252], [1439358336.0, 51240000.0, 2.9562589975732734], [1439360064.0, 51260000.0, 2.962220031750994], [1439361792.0, 51280000.0, 2.9681906949226824], [1439363520.0, 51300000.0, 2.9741709987693], [1439365248.0, 51320000.0, 2.980160954981266], [1439366976.0, 51340000.0, 2.9861605752584683], [1439368704.0, 51360000.0, 2.9921698713102587], [1439370432.0, 51380000.0, 2.9981888548554667], [1439372160.0, 51400000.0, 3.0042175376223987], [1439373888.0, 51420000.0, 3.010255931348844], [1439375616.0, 51440000.0, 3.0163040477820684], [1439377344.0, 51460000.0, 3.0223618986788345], [1439379072.0, 51480000.0, 3.028429495805395], [1439380800.0, 51500000.0, 3.034506850937501], [1439382528.0, 51520000.0, 3.040593975860397], [1439384256.0, 51540000.0, 3.046690882368837], [1439385984.0, 51560000.0, 3.052797582267083], [1439387712.0, 51580000.0, 3.05891408736891], [1439389440.0, 51600000.0, 3.0650404094976], [1439391168.0, 51620000.0, 3.071176560485964], [1439392896.0, 51640000.0, 3.0773225521763323], [1439394624.0, 51660000.0, 3.083478396420566], [1439396352.0, 51680000.0, 3.0896441050800463], [1439398080.0, 51700000.0, 3.0958196900256993], [1439399808.0, 51720000.0, 3.102005163137989], [1439401536.0, 51740000.0, 3.10820053630692], [1439403264.0, 51760000.0, 3.114405821432038], [1439404992.0, 51780000.0, 3.1206210304224467], [1439406720.0, 51800000.0, 3.1268461751967993], [1439408448.0, 51820000.0, 3.1330812676833113], [1439410176.0, 51840000.0, 3.1393263198197525], [1439411904.0, 51860000.0, 3.1455813435534625], [1439413632.0, 51880000.0, 3.1518463508413506], [1439415360.0, 51900000.0, 3.1581213536499013], [1439417088.0, 51920000.0, 3.164406363955168], [1439418816.0, 51940000.0, 3.170701393742792], [1439420544.0, 51960000.0, 3.1770064550079984], [1439422272.0, 51980000.0, 3.183321559755601], [1439424000.0, 52000000.0, 3.1896467200000007], [1439425728.0, 52020000.0, 3.1959819477652], [1439427456.0, 52040000.0, 3.2023272550848], [1439429184.0, 52060000.0, 3.2086826540020095], [1439430912.0, 52080000.0, 3.2150481565696336], [1439432640.0, 52100000.0, 3.2214237748501002], [1439434368.0, 52120000.0, 3.2278095209154483], [1439436096.0, 52140000.0, 3.234205406847339], [1439437824.0, 52160000.0, 3.2406114447370493], [1439439552.0, 52180000.0, 3.2470276466854893], [1439441280.0, 52200000.0, 3.253454024803199], [1439443008.0, 52220000.0, 3.259890591210355], [1439444736.0, 52240000.0, 3.2663373580367634], [1439446464.0, 52260000.0, 3.2727943374218817], [1439448192.0, 52280000.0, 3.27926154151481], [1439449920.0, 52300000.0, 3.2857389824743017], [1439451648.0, 52320000.0, 3.292226672468755], [1439453376.0, 52340000.0, 3.298724623676235], [1439455104.0, 52360000.0, 3.305232848284465], [1439456832.0, 52380000.0, 3.3117513584908367], [1439458560.0, 52400000.0, 3.3182801665024004], [1439460288.0, 52420000.0, 3.324819284535892], [1439462016.0, 52440000.0, 3.3313687248177155], [1439463744.0, 52460000.0, 3.337928499583964], [1439465472.0, 52480000.0, 3.344498621080405], [1439467200.0, 52500000.0, 3.3510791015625], [1439468928.0, 52520000.0, 3.357669953295403], [1439470656.0, 52540000.0, 3.3642711885539636], [1439472384.0, 52560000.0, 3.3708828196227323], [1439474112.0, 52580000.0, 3.377504858795956], [1439475840.0, 52600000.0, 3.384137318377599], [1439477568.0, 52620000.0, 3.390780210681332], [1439479296.0, 52640000.0, 3.3974335480305426], [1439481024.0, 52660000.0, 3.4040973427583325], [1439482752.0, 52680000.0, 3.410771607207533], [1439484480.0, 52700000.0, 3.4174563537306986], [1439486208.0, 52720000.0, 3.4241515946901186], [1439487936.0, 52740000.0, 3.4308573424578066], [1439489664.0, 52760000.0, 3.4375736094155247], [1439491392.0, 52780000.0, 3.4443004079547728], [1439493120.0, 52800000.0, 3.451037750476801], [1439494848.0, 52820000.0, 3.4577856493925987], [1439496576.0, 52840000.0, 3.464544117122919], [1439498304.0, 52860000.0, 3.471313166098269], [1439500032.0, 52880000.0, 3.4780928087589205], [1439501760.0, 52900000.0, 3.4848830575548995], [1439503488.0, 52920000.0, 3.491683924946015], [1439505216.0, 52940000.0, 3.498495423401838], [1439506944.0, 52960000.0, 3.5053175654017275], [1439508672.0, 52980000.0, 3.512150363434808], [1439510400.0, 53000000.0, 3.518993829999999], [1439512128.0, 53020000.0, 3.5258479776060065], [1439513856.0, 53040000.0, 3.5327128187713295], [1439515584.0, 53060000.0, 3.5395883660242564], [1439517312.0, 53080000.0, 3.546474631902881], [1439519040.0, 53100000.0, 3.553371628955099], [1439520768.0, 53120000.0, 3.5602793697386175], [1439522496.0, 53140000.0, 3.5671978668209454], [1439524224.0, 53160000.0, 3.5741271327794157], [1439525952.0, 53180000.0, 3.5810671802011766], [1439527680.0, 53200000.0, 3.5880180216832014], [1439529408.0, 53220000.0, 3.5949796698322816], [1439531136.0, 53240000.0, 3.6019521372650503], [1439532864.0, 53260000.0, 3.6089354366079673], [1439534592.0, 53280000.0, 3.6159295804973395], [1439536320.0, 53300000.0, 3.6229345815793], [1439538048.0, 53320000.0, 3.6299504525098416], [1439539776.0, 53340000.0, 3.6369772059548025], [1439541504.0, 53360000.0, 3.6440148545898747], [1439543232.0, 53380000.0, 3.6510634111006035], [1439544960.0, 53400000.0, 3.658122888182399], [1439546688.0, 53420000.0, 3.6651932985405384], [1439548416.0, 53440000.0, 3.6722746548901655], [1439550144.0, 53460000.0, 3.6793669699562908], [1439551872.0, 53480000.0, 3.6864702564738114], [1439553600.0, 53500000.0, 3.6935845271874985], [1439555328.0, 53520000.0, 3.7007097948520133], [1439557056.0, 53540000.0, 3.7078460722318933], [1439558784.0, 53560000.0, 3.714993372101579], [1439560512.0, 53580000.0, 3.722151707245403], [1439562240.0, 53600000.0, 3.7293210904576006], [1439563968.0, 53620000.0, 3.736501534542301], [1439565696.0, 53640000.0, 3.7436930523135494], [1439567424.0, 53660000.0, 3.750895656595299], [1439569152.0, 53680000.0, 3.758109360221423], [1439570880.0, 53700000.0, 3.7653341760357013], [1439572608.0, 53720000.0, 3.772570116891845], [1439574336.0, 53740000.0, 3.7798171956534934], [1439576064.0, 53760000.0, 3.7870754251942143], [1439577792.0, 53780000.0, 3.7943448183975024], [1439579520.0, 53800000.0, 3.8016253881568], [1439581248.0, 53820000.0, 3.8089171473754853], [1439582976.0, 53840000.0, 3.8162201089668883], [1439584704.0, 53860000.0, 3.823534285854279], [1439586432.0, 53880000.0, 3.830859690970886], [1439588160.0, 53900000.0, 3.838196337259899], [1439589888.0, 53920000.0, 3.845544237674464], [1439591616.0, 53940000.0, 3.852903405177688], [1439593344.0, 53960000.0, 3.8602738527426554], [1439595072.0, 53980000.0, 3.8676555933524153], [1439596800.0, 54000000.0, 3.875048640000002], [1439598528.0, 54020000.0, 3.882453005688417], [1439600256.0, 54040000.0, 3.8898687034306563], [1439601984.0, 54060000.0, 3.8972957462497035], [1439603712.0, 54080000.0, 3.9047341471785297], [1439605440.0, 54100000.0, 3.9121839192601007], [1439607168.0, 54120000.0, 3.919645075547384], [1439608896.0, 54140000.0, 3.9271176291033534], [1439610624.0, 54160000.0, 3.9346015930009868], [1439612352.0, 54180000.0, 3.942096980323266], [1439614080.0, 54200000.0, 3.9496038041632], [1439615808.0, 54220000.0, 3.9571220776238087], [1439617536.0, 54240000.0, 3.96465181381814], [1439619264.0, 54260000.0, 3.9721930258692577], [1439620992.0, 54280000.0, 3.979745726910266], [1439622720.0, 54300000.0, 3.9873099300842987], [1439624448.0, 54320000.0, 3.994885648544532], [1439626176.0, 54340000.0, 4.002472895454172], [1439627904.0, 54360000.0, 4.0100716839864825], [1439629632.0, 54380000.0, 4.01768202732477], [1439631360.0, 54400000.0, 4.025303938662401], [1439633088.0, 54420000.0, 4.032937431202788], [1439634816.0, 54440000.0, 4.040582518159413], [1439636544.0, 54460000.0, 4.048239212755818], [1439638272.0, 54480000.0, 4.055907528225622], [1439640000.0, 54500000.0, 4.063587477812501], [1439641728.0, 54520000.0, 4.07127907477022], [1439643456.0, 54540000.0, 4.078982332362621], [1439645184.0, 54560000.0, 4.08669726386363], [1439646912.0, 54580000.0, 4.094423882557253], [1439648640.0, 54600000.0, 4.1021622017376], [1439650368.0, 54620000.0, 4.109912234708869], [1439652096.0, 54640000.0, 4.117673994785361], [1439653824.0, 54660000.0, 4.1254474952914695], [1439655552.0, 54680000.0, 4.133232749561709], [1439657280.0, 54700000.0, 4.1410297709406985], [1439659008.0, 54720000.0, 4.148838572783175], [1439660736.0, 54740000.0, 4.156659168453984], [1439662464.0, 54760000.0, 4.1644915713281], [1439664192.0, 54780000.0, 4.172335794790629], [1439665920.0, 54800000.0, 4.180191852236802], [1439667648.0, 54820000.0, 4.188059757071975], [1439669376.0, 54840000.0, 4.195939522711655], [1439671104.0, 54860000.0, 4.203831162581485], [1439672832.0, 54880000.0, 4.2117346901172565], [1439674560.0, 54900000.0, 4.219650118764901], [1439676288.0, 54920000.0, 4.227577461980512], [1439678016.0, 54940000.0, 4.235516733230336], [1439679744.0, 54960000.0, 4.243467945990784], [1439681472.0, 54980000.0, 4.251431113748425], [1439683200.0, 55000000.0, 4.25940625], [1439684928.0, 55020000.0, 4.2673933682524225], [1439686656.0, 55040000.0, 4.275392482022783], [1439688384.0, 55060000.0, 4.283403604838353], [1439690112.0, 55080000.0, 4.291426750236577], [1439691840.0, 55100000.0, 4.2994619317651], [1439693568.0, 55120000.0, 4.30750916298175], [1439695296.0, 55140000.0, 4.315568457454563], [1439697024.0, 55160000.0, 4.3236398287617535], [1439698752.0, 55180000.0, 4.331723290491753], [1439700480.0, 55200000.0, 4.339818856243199], [1439702208.0, 55220000.0, 4.347926539624939], [1439703936.0, 55240000.0, 4.356046354256027], [1439705664.0, 55260000.0, 4.364178313765745], [1439707392.0, 55280000.0, 4.3723224317935925], [1439709120.0, 55300000.0, 4.380478721989301], [1439710848.0, 55320000.0, 4.388647198012818], [1439712576.0, 55340000.0, 4.396827873534338], [1439714304.0, 55360000.0, 4.405020762234288], [1439716032.0, 55380000.0, 4.413225877803339], [1439717760.0, 55400000.0, 4.4214432339424], [1439719488.0, 55420000.0, 4.429672844362635], [1439721216.0, 55440000.0, 4.437914722785459], [1439722944.0, 55460000.0, 4.4461688829425485], [1439724672.0, 55480000.0, 4.454435338575829], [1439726400.0, 55500000.0, 4.4627141034374995], [1439728128.0, 55520000.0, 4.471005191290027], [1439729856.0, 55540000.0, 4.479308615906151], [1439731584.0, 55560000.0, 4.487624391068875], [1439733312.0, 55580000.0, 4.4959525305715], [1439735040.0, 55600000.0, 4.5042930482175985], [1439736768.0, 55620000.0, 4.512645957821038], [1439738496.0, 55640000.0, 4.521011273205966], [1439740224.0, 55660000.0, 4.529389008206835], [1439741952.0, 55680000.0, 4.537779176668397], [1439743680.0, 55700000.0, 4.546181792445701], [1439745408.0, 55720000.0, 4.554596869404102], [1439747136.0, 55740000.0, 4.563024421419271], [1439748864.0, 55760000.0, 4.571464462377187], [1439750592.0, 55780000.0, 4.57991700617416], [1439752320.0, 55800000.0, 4.588382066716799], [1439754048.0, 55820000.0, 4.596859657922062], [1439755776.0, 55840000.0, 4.60534979371722], [1439757504.0, 55860000.0, 4.613852488039895], [1439759232.0, 55880000.0, 4.622367754838023], [1439760960.0, 55900000.0, 4.630895608069899], [1439762688.0, 55920000.0, 4.639436061704156], [1439764416.0, 55940000.0, 4.647989129719786], [1439766144.0, 55960000.0, 4.6565548261061105], [1439767872.0, 55980000.0, 4.665133164862832], [1439769600.0, 56000000.0, 4.673724159999999], [1439771328.0, 56020000.0, 4.682327825538033], [1439773056.0, 56040000.0, 4.690944175507713], [1439774784.0, 56060000.0, 4.699573223950199], [1439776512.0, 56080000.0, 4.708214984917023], [1439778240.0, 56100000.0, 4.716869472470102], [1439779968.0, 56120000.0, 4.725536700681721], [1439781696.0, 56140000.0, 4.7342166836345685], [1439783424.0, 56160000.0, 4.742909435421718], [1439785152.0, 56180000.0, 4.751614970146644], [1439786880.0, 56200000.0, 4.760333301923201], [1439788608.0, 56220000.0, 4.769064444875665], [1439790336.0, 56240000.0, 4.777808413138713], [1439792064.0, 56260000.0, 4.786565220857435], [1439793792.0, 56280000.0, 4.795334882187323], [1439795520.0, 56300000.0, 4.8041174112943], [1439797248.0, 56320000.0, 4.812912822354705], [1439798976.0, 56340000.0, 4.821721129555309], [1439800704.0, 56360000.0, 4.8305423470933], [1439802432.0, 56380000.0, 4.839376489176306], [1439804160.0, 56400000.0, 4.848223570022398], [1439805888.0, 56420000.0, 4.857083603860085], [1439807616.0, 56440000.0, 4.865956604928308], [1439809344.0, 56460000.0, 4.874842587476475], [1439811072.0, 56480000.0, 4.883741565764436], [1439812800.0, 56500000.0, 4.892653554062501], [1439814528.0, 56520000.0, 4.901578566651437], [1439816256.0, 56540000.0, 4.910516617822477], [1439817984.0, 56560000.0, 4.919467721877322], [1439819712.0, 56580000.0, 4.928431893128152], [1439821440.0, 56600000.0, 4.937409145897601], [1439823168.0, 56620000.0, 4.946399494518805], [1439824896.0, 56640000.0, 4.955402953335373], [1439826624.0, 56660000.0, 4.964419536701406], [1439828352.0, 56680000.0, 4.973449258981486], [1439830080.0, 56700000.0, 4.982492134550699], [1439831808.0, 56720000.0, 4.991548177794629], [1439833536.0, 56740000.0, 5.000617403109359], [1439835264.0, 56760000.0, 5.009699824901478], [1439836992.0, 56780000.0, 5.0187954575880855], [1439838720.0, 56800000.0, 5.027904315596799], [1439840448.0, 56820000.0, 5.037026413365752], [1439842176.0, 56840000.0, 5.046161765343592], [1439843904.0, 56860000.0, 5.055310385989502], [1439845632.0, 56880000.0, 5.06447228977319], [1439847360.0, 56900000.0, 5.0736474911749], [1439849088.0, 56920000.0, 5.082836004685409], [1439850816.0, 56940000.0, 5.092037844806032], [1439852544.0, 56960000.0, 5.101253026048638], [1439854272.0, 56980000.0, 5.110481562935641], [1439856000.0, 57000000.0, 5.119723470000001], [1439857728.0, 57020000.0, 5.12897876178524], [1439859456.0, 57040000.0, 5.138247452845439], [1439861184.0, 57060000.0, 5.147529557745249], [1439862912.0, 57080000.0, 5.156825091059874], [1439864640.0, 57100000.0, 5.1661340673751], [1439866368.0, 57120000.0, 5.175456501287288], [1439868096.0, 57140000.0, 5.18479240740338], [1439869824.0, 57160000.0, 5.19414180034089], [1439871552.0, 57180000.0, 5.20350469472793], [1439873280.0, 57200000.0, 5.2128811052031985], [1439875008.0, 57220000.0, 5.222271046415996], [1439876736.0, 57240000.0, 5.231674533026204], [1439878464.0, 57260000.0, 5.241091579704321], [1439880192.0, 57280000.0, 5.250522201131449], [1439881920.0, 57300000.0, 5.2599664119993], [1439883648.0, 57320000.0, 5.2694242270101945], [1439885376.0, 57340000.0, 5.278895660877075], [1439887104.0, 57360000.0, 5.288380728323505], [1439888832.0, 57380000.0, 5.297879444083677], [1439890560.0, 57400000.0, 5.3073918229024], [1439892288.0, 57420000.0, 5.316917879535131], [1439894016.0, 57440000.0, 5.326457628747955], [1439895744.0, 57460000.0, 5.336011085317605], [1439897472.0, 57480000.0, 5.345578264031444], [1439899200.0, 57500000.0, 5.3551591796875], [1439900928.0, 57520000.0, 5.364753847094444], [1439902656.0, 57540000.0, 5.374362281071603], [1439904384.0, 57560000.0, 5.383984496448974], [1439906112.0, 57580000.0, 5.393620508067196], [1439907840.0, 57600000.0, 5.4032703307776], [1439909568.0, 57620000.0, 5.412933979442172], [1439911296.0, 57640000.0, 5.422611468933583], [1439913024.0, 57660000.0, 5.432302814135173], [1439914752.0, 57680000.0, 5.442008029940973], [1439916480.0, 57700000.0, 5.451727131255698], [1439918208.0, 57720000.0, 5.461460132994759], [1439919936.0, 57740000.0, 5.471207050084247], [1439921664.0, 57760000.0, 5.480967897460964], [1439923392.0, 57780000.0, 5.490742690072413], [1439925120.0, 57800000.0, 5.500531442876801], [1439926848.0, 57820000.0, 5.510334170843039], [1439928576.0, 57840000.0, 5.5201508889507584], [1439930304.0, 57860000.0, 5.529981612190308], [1439932032.0, 57880000.0, 5.53982635556276], [1439933760.0, 57900000.0, 5.5496851340799], [1439935488.0, 57920000.0, 5.559557962764255], [1439937216.0, 57940000.0, 5.569444856649079], [1439938944.0, 57960000.0, 5.579345830778369], [1439940672.0, 57980000.0, 5.589260900206848], [1439942400.0, 58000000.0, 5.59919008], [1439944128.0, 58020000.0, 5.6091333852340455], [1439945856.0, 58040000.0, 5.619090830995971], [1439947584.0, 58060000.0, 5.629062432383496], [1439949312.0, 58080000.0, 5.63904820450512], [1439951040.0, 58100000.0, 5.649048162480098], [1439952768.0, 58120000.0, 5.659062321438458], [1439954496.0, 58140000.0, 5.669090696520986], [1439956224.0, 58160000.0, 5.679133302879255], [1439957952.0, 58180000.0, 5.689190155675615], [1439959680.0, 58200000.0, 5.6992612700832], [1439961408.0, 58220000.0, 5.709346661285922], [1439963136.0, 58240000.0, 5.719446344478491], [1439964864.0, 58260000.0, 5.729560334866408], [1439966592.0, 58280000.0, 5.739688647665981], [1439968320.0, 58300000.0, 5.7498312981043], [1439970048.0, 58320000.0, 5.759988301419282], [1439971776.0, 58340000.0, 5.770159672859641], [1439973504.0, 58360000.0, 5.780345427684916], [1439975232.0, 58380000.0, 5.790545581165444], [1439976960.0, 58400000.0, 5.800760148582401], [1439978688.0, 58420000.0, 5.810989145227776], [1439980416.0, 58440000.0, 5.821232586404405], [1439982144.0, 58460000.0, 5.831490487425932], [1439983872.0, 58480000.0, 5.84176286361685], [1439985600.0, 58500000.0, 5.8520497303124985], [1439987328.0, 58520000.0, 5.862351102859053], [1439989056.0, 58540000.0, 5.8726669966135345], [1439990784.0, 58560000.0, 5.882997426943818], [1439992512.0, 58580000.0, 5.8933424092286435], [1439994240.0, 58600000.0, 5.903701958857601], [1439995968.0, 58620000.0, 5.9140760912311405], [1439997696.0, 58640000.0, 5.924464821760588], [1439999424.0, 58660000.0, 5.934868165868139], [1440001152.0, 58680000.0, 5.945286138986864], [1440002880.0, 58700000.0, 5.9557187565607], [1440004608.0, 58720000.0, 5.966166034044484], [1440006336.0, 58740000.0, 5.976627986903933], [1440008064.0, 58760000.0, 5.987104630615655], [1440009792.0, 58780000.0, 5.997595980667143], [1440011520.0, 58800000.0, 6.008102052556799], [1440013248.0, 58820000.0, 6.018622861793925], [1440014976.0, 58840000.0, 6.02915842389873], [1440016704.0, 58860000.0, 6.0397087544023185], [1440018432.0, 58880000.0, 6.050273868846727], [1440020160.0, 58900000.0, 6.060853782784898], [1440021888.0, 58920000.0, 6.071448511780704], [1440023616.0, 58940000.0, 6.082058071408929], [1440025344.0, 58960000.0, 6.092682477255295], [1440027072.0, 58980000.0, 6.103321744916454], [1440028800.0, 59000000.0, 6.113975890000002], [1440030528.0, 59020000.0, 6.124644928124456], [1440032256.0, 59040000.0, 6.1353288749192965], [1440033984.0, 59060000.0, 6.1460277460249415], [1440035712.0, 59080000.0, 6.15674155709277], [1440037440.0, 59100000.0, 6.1674703237851], [1440039168.0, 59120000.0, 6.178214061775225], [1440040896.0, 59140000.0, 6.188972786747392], [1440042624.0, 59160000.0, 6.199746514396828], [1440044352.0, 59180000.0, 6.2105352604297055], [1440046080.0, 59200000.0, 6.221339040563199], [1440047808.0, 59220000.0, 6.232157870525447], [1440049536.0, 59240000.0, 6.242991766055581], [1440051264.0, 59260000.0, 6.253840742903698], [1440052992.0, 59280000.0, 6.264704816830906], [1440054720.0, 59300000.0, 6.275584003609299], [1440056448.0, 59320000.0, 6.286478319021972], [1440058176.0, 59340000.0, 6.297387778863012], [1440059904.0, 59360000.0, 6.308312398937522], [1440061632.0, 59380000.0, 6.319252195061609], [1440063360.0, 59400000.0, 6.330207183062402], [1440065088.0, 59420000.0, 6.341177378778029], [1440066816.0, 59440000.0, 6.352162798057651], [1440068544.0, 59460000.0, 6.363163456761457], [1440070272.0, 59480000.0, 6.374179370760662], [1440072000.0, 59500000.0, 6.385210555937501], [1440073728.0, 59520000.0, 6.39625702818526], [1440075456.0, 59540000.0, 6.40731880340826], [1440077184.0, 59560000.0, 6.4183958975218705], [1440078912.0, 59580000.0, 6.4294883264524945], [1440080640.0, 59600000.0, 6.440596106137599], [1440082368.0, 59620000.0, 6.451719252525708], [1440084096.0, 59640000.0, 6.462857781576401], [1440085824.0, 59660000.0, 6.474011709260309], [1440087552.0, 59680000.0, 6.485181051559149], [1440089280.0, 59700000.0, 6.496365824465699], [1440091008.0, 59720000.0, 6.507566043983815], [1440092736.0, 59740000.0, 6.518781726128424], [1440094464.0, 59760000.0, 6.530012886925541], [1440096192.0, 59780000.0, 6.54125954241227], [1440097920.0, 59800000.0, 6.552521708636802], [1440099648.0, 59820000.0, 6.563799401658415], [1440101376.0, 59840000.0, 6.575092637547495], [1440103104.0, 59860000.0, 6.586401432385524], [1440104832.0, 59880000.0, 6.5977258022650975], [1440106560.0, 59900000.0, 6.6090657632899], [1440108288.0, 59920000.0, 6.620421331574752], [1440110016.0, 59940000.0, 6.631792523245575], [1440111744.0, 59960000.0, 6.643179354439425], [1440113472.0, 59980000.0, 6.6545818413044655], [1440115200.0, 60000000.0, 6.666], [1440116928.0, 60020000.0, 6.677433846696464], [1440118656.0, 60040000.0, 6.688883397575423], [1440120384.0, 60060000.0, 6.7003486688295935], [1440122112.0, 60080000.0, 6.711829676662816], [1440123840.0, 60100000.0, 6.723326437290099], [1440125568.0, 60120000.0, 6.73483896693759], [1440127296.0, 60140000.0, 6.746367281842604], [1440129024.0, 60160000.0, 6.757911398253592], [1440130752.0, 60180000.0, 6.769471332430193], [1440132480.0, 60200000.0, 6.781047100643198], [1440134208.0, 60220000.0, 6.792638719174579], [1440135936.0, 60240000.0, 6.804246204317467], [1440137664.0, 60260000.0, 6.815869572376185], [1440139392.0, 60280000.0, 6.8275088396662325], [1440141120.0, 60300000.0, 6.839164022514301], [1440142848.0, 60320000.0, 6.850835137258258], [1440144576.0, 60340000.0, 6.862522200247178], [1440146304.0, 60360000.0, 6.874225227841327], [1440148032.0, 60380000.0, 6.885944236412181], [1440149760.0, 60400000.0, 6.8976792423424], [1440151488.0, 60420000.0, 6.909430262025874], [1440153216.0, 60440000.0, 6.921197311867698], [1440154944.0, 60460000.0, 6.932980408284188], [1440156672.0, 60480000.0, 6.944779567702868], [1440158400.0, 60500000.0, 6.956594806562499], [1440160128.0, 60520000.0, 6.968426141313065], [1440161856.0, 60540000.0, 6.980273588415791], [1440163584.0, 60560000.0, 6.992137164343116], [1440165312.0, 60580000.0, 7.004016885578739], [1440167040.0, 60600000.0, 7.015912768617598], [1440168768.0, 60620000.0, 7.027824829965878], [1440170496.0, 60640000.0, 7.0397530861410065], [1440172224.0, 60660000.0, 7.0516975536716755], [1440173952.0, 60680000.0, 7.063658249097834], [1440175680.0, 60700000.0, 7.075635188970702], [1440177408.0, 60720000.0, 7.087628389852742], [1440179136.0, 60740000.0, 7.099637868317709], [1440180864.0, 60760000.0, 7.111663640950627], [1440182592.0, 60780000.0, 7.1237057243478], [1440184320.0, 60800000.0, 7.1357641351168], [1440186048.0, 60820000.0, 7.147838889876502], [1440187776.0, 60840000.0, 7.159930005257061], [1440189504.0, 60860000.0, 7.172037497899936], [1440191232.0, 60880000.0, 7.184161384457863], [1440192960.0, 60900000.0, 7.1963016815949], [1440194688.0, 60920000.0, 7.2084584059863985], [1440196416.0, 60940000.0, 7.220631574319027], [1440198144.0, 60960000.0, 7.232821203290752], [1440199872.0, 60980000.0, 7.2450273096108715], [1440201600.0, 61000000.0, 7.257249909999998], [1440203328.0, 61020000.0, 7.269489021190074], [1440205056.0, 61040000.0, 7.281744659924354], [1440206784.0, 61060000.0, 7.294016842957438], [1440208512.0, 61080000.0, 7.306305587055263], [1440210240.0, 61100000.0, 7.318610908995103], [1440211968.0, 61120000.0, 7.330932825565561], [1440213696.0, 61140000.0, 7.343271353566609], [1440215424.0, 61160000.0, 7.355626509809558], [1440217152.0, 61180000.0, 7.367998311117085], [1440218880.0, 61200000.0, 7.380386774323202], [1440220608.0, 61220000.0, 7.392791916273306], [1440222336.0, 61240000.0, 7.405213753824152], [1440224064.0, 61260000.0, 7.417652303843877], [1440225792.0, 61280000.0, 7.430107583211963], [1440227520.0, 61300000.0, 7.442579608819299], [1440229248.0, 61320000.0, 7.455068397568144], [1440230976.0, 61340000.0, 7.467573966372151], [1440232704.0, 61360000.0, 7.4800963321563385], [1440234432.0, 61380000.0, 7.492635511857147], [1440236160.0, 61400000.0, 7.505191522422399], [1440237888.0, 61420000.0, 7.517764380811325], [1440239616.0, 61440000.0, 7.530354103994549], [1440241344.0, 61460000.0, 7.542960708954115], [1440243072.0, 61480000.0, 7.555584212683475], [1440244800.0, 61500000.0, 7.568224632187502], [1440246528.0, 61520000.0, 7.580881984482476], [1440248256.0, 61540000.0, 7.593556286596116], [1440249984.0, 61560000.0, 7.606247555567562], [1440251712.0, 61580000.0, 7.618955808447392], [1440253440.0, 61600000.0, 7.6316810622976], [1440255168.0, 61620000.0, 7.644423334191643], [1440256896.0, 61640000.0, 7.657182641214412], [1440258624.0, 61660000.0, 7.669959000462247], [1440260352.0, 61680000.0, 7.682752429042926], [1440262080.0, 61700000.0, 7.695562944075699], [1440263808.0, 61720000.0, 7.708390562691267], [1440265536.0, 61740000.0, 7.721235302031801], [1440267264.0, 61760000.0, 7.734097179250919], [1440268992.0, 61780000.0, 7.746976211513726], [1440270720.0, 61800000.0, 7.7598724159967984], [1440272448.0, 61820000.0, 7.772785809888194], [1440274176.0, 61840000.0, 7.785716410387433], [1440275904.0, 61860000.0, 7.798664234705542], [1440277632.0, 61880000.0, 7.81162930006503], [1440279360.0, 61900000.0, 7.8246116236999015], [1440281088.0, 61920000.0, 7.8376112228556485], [1440282816.0, 61940000.0, 7.850628114789272], [1440284544.0, 61960000.0, 7.863662316769277], [1440286272.0, 61980000.0, 7.876713846075683], [1440288000.0, 62000000.0, 7.889782720000001], [1440289728.0, 62020000.0, 7.902868955845279], [1440291456.0, 62040000.0, 7.915972570926079], [1440293184.0, 62060000.0, 7.929093582568491], [1440294912.0, 62080000.0, 7.942232008110112], [1440296640.0, 62100000.0, 7.955387864900101], [1440298368.0, 62120000.0, 7.968561170299126], [1440300096.0, 62140000.0, 7.981751941679421], [1440301824.0, 62160000.0, 7.9949601964247305], [1440303552.0, 62180000.0, 8.00818595193037], [1440305280.0, 62200000.0, 8.021429225603198], [1440307008.0, 62220000.0, 8.034690034861637], [1440308736.0, 62240000.0, 8.047968397135644], [1440310464.0, 62260000.0, 8.061264329866761], [1440312192.0, 62280000.0, 8.074577850508089], [1440313920.0, 62300000.0, 8.087908976524302], [1440315648.0, 62320000.0, 8.101257725391635], [1440317376.0, 62340000.0, 8.114624114597914], [1440319104.0, 62360000.0, 8.128008161642544], [1440320832.0, 62380000.0, 8.141409884036518], [1440322560.0, 62400000.0, 8.154829299302401], [1440324288.0, 62420000.0, 8.168266424974371], [1440326016.0, 62440000.0, 8.181721278598195], [1440327744.0, 62460000.0, 8.195193877731246], [1440329472.0, 62480000.0, 8.208684239942485], [1440331200.0, 62500000.0, 8.2221923828125], [1440332928.0, 62520000.0, 8.235718323933485], [1440334656.0, 62540000.0, 8.249262080909244], [1440336384.0, 62560000.0, 8.262823671355212], [1440338112.0, 62580000.0, 8.276403112898437], [1440339840.0, 62600000.0, 8.2900004231776], [1440341568.0, 62620000.0, 8.303615619843011], [1440343296.0, 62640000.0, 8.317248720556623], [1440345024.0, 62660000.0, 8.330899742992013], [1440346752.0, 62680000.0, 8.344568704834412], [1440348480.0, 62700000.0, 8.358255623780696], [1440350208.0, 62720000.0, 8.371960517539401], [1440351936.0, 62740000.0, 8.385683403830686], [1440353664.0, 62760000.0, 8.399424300386405], [1440355392.0, 62780000.0, 8.413183224950052], [1440357120.0, 62800000.0, 8.4269601952768], [1440358848.0, 62820000.0, 8.440755229133476], [1440360576.0, 62840000.0, 8.454568344298599], [1440362304.0, 62860000.0, 8.468399558562348], [1440364032.0, 62880000.0, 8.482248889726602], [1440365760.0, 62900000.0, 8.4961163556049], [1440367488.0, 62920000.0, 8.510001974022492], [1440369216.0, 62940000.0, 8.523905762816318], [1440370944.0, 62960000.0, 8.53782773983501], [1440372672.0, 62980000.0, 8.55176792293889], [1440374400.0, 63000000.0, 8.565726329999997], [1440376128.0, 63020000.0, 8.579702978902086], [1440377856.0, 63040000.0, 8.593697887540609], [1440379584.0, 63060000.0, 8.607711073822738], [1440381312.0, 63080000.0, 8.621742555667359], [1440383040.0, 63100000.0, 8.635792351005097], [1440384768.0, 63120000.0, 8.649860477778299], [1440386496.0, 63140000.0, 8.663946953941027], [1440388224.0, 63160000.0, 8.678051797459096], [1440389952.0, 63180000.0, 8.692175026310055], [1440391680.0, 63200000.0, 8.706316658483201], [1440393408.0, 63220000.0, 8.720476711979563], [1440395136.0, 63240000.0, 8.734655204811931], [1440396864.0, 63260000.0, 8.748852155004844], [1440398592.0, 63280000.0, 8.76306758059462], [1440400320.0, 63300000.0, 8.777301499629301], [1440402048.0, 63320000.0, 8.791553930168723], [1440403776.0, 63340000.0, 8.805824890284482], [1440405504.0, 63360000.0, 8.820114398059957], [1440407232.0, 63380000.0, 8.834422471590283], [1440408960.0, 63400000.0, 8.848749128982401], [1440410688.0, 63420000.0, 8.863094388355016], [1440412416.0, 63440000.0, 8.877458267838644], [1440414144.0, 63460000.0, 8.891840785575573], [1440415872.0, 63480000.0, 8.90624195971989], [1440417600.0, 63500000.0, 8.9206618084375], [1440419328.0, 63520000.0, 8.935100349906094], [1440421056.0, 63540000.0, 8.949557602315172], [1440422784.0, 63560000.0, 8.96403358386606], [1440424512.0, 63580000.0, 8.978528312771884], [1440426240.0, 63600000.0, 8.993041807257603], [1440427968.0, 63620000.0, 9.00757408555998], [1440429696.0, 63640000.0, 9.02212516592763], [1440431424.0, 63660000.0, 9.036695066620979], [1440433152.0, 63680000.0, 9.051283805912304], [1440434880.0, 63700000.0, 9.0658914020857], [1440436608.0, 63720000.0, 9.080517873437124], [1440438336.0, 63740000.0, 9.095163238274372], [1440440064.0, 63760000.0, 9.109827514917095], [1440441792.0, 63780000.0, 9.124510721696783], [1440443520.0, 63800000.0, 9.139212876956798], [1440445248.0, 63820000.0, 9.153933999052365], [1440446976.0, 63840000.0, 9.168674106350569], [1440448704.0, 63860000.0, 9.18343321723036], [1440450432.0, 63880000.0, 9.19821135008257], [1440452160.0, 63900000.0, 9.213008523309899], [1440453888.0, 63920000.0, 9.227824755326948], [1440455616.0, 63940000.0, 9.24266006456017], [1440457344.0, 63960000.0, 9.257514469447935], [1440459072.0, 63980000.0, 9.272387988440492], [1440460800.0, 64000000.0, 9.287280640000002], [1440462528.0, 64020000.0, 9.302192442600496], [1440464256.0, 64040000.0, 9.317123414727936], [1440465984.0, 64060000.0, 9.332073574880182], [1440467712.0, 64080000.0, 9.34704294156701], [1440469440.0, 64100000.0, 9.3620315333101], [1440471168.0, 64120000.0, 9.377039368643063], [1440472896.0, 64140000.0, 9.39206646611143], [1440474624.0, 64160000.0, 9.407112844272666], [1440476352.0, 64180000.0, 9.422178521696145], [1440478080.0, 64200000.0, 9.437263516963199], [1440479808.0, 64220000.0, 9.45236784866709], [1440481536.0, 64240000.0, 9.467491535413023], [1440483264.0, 64260000.0, 9.482634595818135], [1440484992.0, 64280000.0, 9.497797048511545], [1440486720.0, 64300000.0, 9.5129789121343], [1440488448.0, 64320000.0, 9.528180205339416], [1440490176.0, 64340000.0, 9.543400946791854], [1440491904.0, 64360000.0, 9.558641155168562], [1440493632.0, 64380000.0, 9.573900849158449], [1440495360.0, 64400000.0, 9.589180047462403], [1440497088.0, 64420000.0, 9.604478768793268], [1440498816.0, 64440000.0, 9.619797031875892], [1440500544.0, 64460000.0, 9.635134855447095], [1440502272.0, 64480000.0, 9.650492258255703], [1440504000.0, 64500000.0, 9.665869259062502], [1440505728.0, 64520000.0, 9.681265876640298], [1440507456.0, 64540000.0, 9.6966821297739], [1440509184.0, 64560000.0, 9.71211803726011], [1440510912.0, 64580000.0, 9.727573617907733], [1440512640.0, 64600000.0, 9.7430488905376], [1440514368.0, 64620000.0, 9.758543873982546], [1440516096.0, 64640000.0, 9.77405858708744], [1440517824.0, 64660000.0, 9.789593048709152], [1440519552.0, 64680000.0, 9.80514727771659], [1440521280.0, 64700000.0, 9.820721292990699], [1440523008.0, 64720000.0, 9.836315113424456], [1440524736.0, 64740000.0, 9.851928757922865], [1440526464.0, 64760000.0, 9.867562245402981], [1440528192.0, 64780000.0, 9.883215594793908], [1440529920.0, 64800000.0, 9.898888825036801], [1440531648.0, 64820000.0, 9.914581955084858], [1440533376.0, 64840000.0, 9.930295003903336], [1440535104.0, 64860000.0, 9.946027990469563], [1440536832.0, 64880000.0, 9.961780933772937], [1440538560.0, 64900000.0, 9.977553852814902], [1440540288.0, 64920000.0, 9.99334676660899], [1440542016.0, 64940000.0, 10.009159694180815], [1440543744.0, 64960000.0, 10.024992654568065], [1440545472.0, 64980000.0, 10.040845666820505], [1440547200.0, 65000000.0, 10.05671875], [1440548928.0, 65020000.0, 10.072611923180503], [1440550656.0, 65040000.0, 10.088525205448065], [1440552384.0, 65060000.0, 10.10445861590083], [1440554112.0, 65080000.0, 10.120412173649056], [1440555840.0, 65100000.0, 10.136385897815098], [1440557568.0, 65120000.0, 10.15237980753343], [1440559296.0, 65140000.0, 10.168393921950642], [1440561024.0, 65160000.0, 10.184428260225433], [1440562752.0, 65180000.0, 10.200482841528634], [1440564480.0, 65200000.0, 10.216557685043199], [1440566208.0, 65220000.0, 10.23265280996422], [1440567936.0, 65240000.0, 10.248768235498906], [1440569664.0, 65260000.0, 10.264903980866624], [1440571392.0, 65280000.0, 10.281060065298872], [1440573120.0, 65300000.0, 10.297236508039303], [1440574848.0, 65320000.0, 10.313433328343699], [1440576576.0, 65340000.0, 10.32965054548002], [1440578304.0, 65360000.0, 10.345888178728368], [1440580032.0, 65380000.0, 10.362146247381023], [1440581760.0, 65400000.0, 10.378424770742402], [1440583488.0, 65420000.0, 10.394723768129113], [1440585216.0, 65440000.0, 10.411043258869935], [1440586944.0, 65460000.0, 10.42738326230583], [1440588672.0, 65480000.0, 10.44374379778991], [1440590400.0, 65500000.0, 10.460124884687497], [1440592128.0, 65520000.0, 10.476526542376105], [1440593856.0, 65540000.0, 10.492948790245432], [1440595584.0, 65560000.0, 10.509391647697358], [1440597312.0, 65580000.0, 10.525855134145981], [1440599040.0, 65600000.0, 10.542339269017596], [1440600768.0, 65620000.0, 10.55884407175072], [1440602496.0, 65640000.0, 10.575369561796046], [1440604224.0, 65660000.0, 10.591915758616517], [1440605952.0, 65680000.0, 10.608482681687274], [1440607680.0, 65700000.0, 10.625070350495703], [1440609408.0, 65720000.0, 10.641678784541382], [1440611136.0, 65740000.0, 10.658308003336149], [1440612864.0, 65760000.0, 10.674958026404067], [1440614592.0, 65780000.0, 10.691628873281442], [1440616320.0, 65800000.0, 10.708320563516802], [1440618048.0, 65820000.0, 10.725033116670941], [1440619776.0, 65840000.0, 10.741766552316903], [1440621504.0, 65860000.0, 10.758520890039977], [1440623232.0, 65880000.0, 10.775296149437704], [1440624960.0, 65900000.0, 10.7920923501199], [1440626688.0, 65920000.0, 10.808909511708638], [1440628416.0, 65940000.0, 10.825747653838265], [1440630144.0, 65960000.0, 10.84260679615539], [1440631872.0, 65980000.0, 10.85948695831891], [1440633600.0, 66000000.0, 10.876388159999998], [1440635328.0, 66020000.0, 10.893310420882116], [1440637056.0, 66040000.0, 10.910253760660991], [1440638784.0, 66060000.0, 10.927218199044678], [1440640512.0, 66080000.0, 10.944203755753502], [1440642240.0, 66100000.0, 10.961210450520104], [1440643968.0, 66120000.0, 10.978238303089404], [1440645696.0, 66140000.0, 10.995287333218648], [1440647424.0, 66160000.0, 11.012357560677398], [1440649152.0, 66180000.0, 11.029449005247525], [1440650880.0, 66200000.0, 11.046561686723201], [1440652608.0, 66220000.0, 11.063695624910945], [1440654336.0, 66240000.0, 11.08085083962959], [1440656064.0, 66260000.0, 11.098027350710314], [1440657792.0, 66280000.0, 11.115225177996605], [1440659520.0, 66300000.0, 11.132444341344298], [1440661248.0, 66320000.0, 11.149684860621585], [1440662976.0, 66340000.0, 11.16694675570899], [1440664704.0, 66360000.0, 11.18423004649938], [1440666432.0, 66380000.0, 11.201534752897988], [1440668160.0, 66400000.0, 11.218860894822397], [1440669888.0, 66420000.0, 11.236208492202566], [1440671616.0, 66440000.0, 11.253577564980791], [1440673344.0, 66460000.0, 11.270968133111754], [1440675072.0, 66480000.0, 11.288380216562514], [1440676800.0, 66500000.0, 11.305813835312502], [1440678528.0, 66520000.0, 11.323269009353517], [1440680256.0, 66540000.0, 11.340745758689758], [1440681984.0, 66560000.0, 11.358244103337803], [1440683712.0, 66580000.0, 11.375764063326631], [1440685440.0, 66600000.0, 11.393305658697601], [1440687168.0, 66620000.0, 11.410868909504483], [1440688896.0, 66640000.0, 11.428453835813452], [1440690624.0, 66660000.0, 11.446060457703087], [1440692352.0, 66680000.0, 11.463688795264366], [1440694080.0, 66700000.0, 11.481338868600698], [1440695808.0, 66720000.0, 11.499010697827908], [1440697536.0, 66740000.0, 11.51670430307424], [1440699264.0, 66760000.0, 11.534419704480358], [1440700992.0, 66780000.0, 11.552156922199366], [1440702720.0, 66800000.0, 11.569915976396798], [1440704448.0, 66820000.0, 11.587696887250635], [1440706176.0, 66840000.0, 11.605499674951272], [1440707904.0, 66860000.0, 11.623324359701583], [1440709632.0, 66880000.0, 11.64117096171687], [1440711360.0, 66900000.0, 11.659039501224905], [1440713088.0, 66920000.0, 11.676929998465887], [1440714816.0, 66940000.0, 11.694842473692512], [1440716544.0, 66960000.0, 11.712776947169917], [1440718272.0, 66980000.0, 11.730733439175722], [1440720000.0, 67000000.0, 11.748711970000004], [1440721728.0, 67020000.0, 11.766712559945319], [1440723456.0, 67040000.0, 11.784735229326719], [1440725184.0, 67060000.0, 11.802779998471733], [1440726912.0, 67080000.0, 11.820846887720355], [1440728640.0, 67100000.0, 11.838935917425099], [1440730368.0, 67120000.0, 11.857047107950965], [1440732096.0, 67140000.0, 11.875180479675462], [1440733824.0, 67160000.0, 11.89333605298857], [1440735552.0, 67180000.0, 11.91151384829281], [1440737280.0, 67200000.0, 11.929713886003197], [1440739008.0, 67220000.0, 11.947936186547278], [1440740736.0, 67240000.0, 11.966180770365083], [1440742464.0, 67260000.0, 11.984447657909202], [1440744192.0, 67280000.0, 12.002736869644728], [1440745920.0, 67300000.0, 12.021048426049305], [1440747648.0, 67320000.0, 12.039382347613076], [1440749376.0, 67340000.0, 12.057738654838753], [1440751104.0, 67360000.0, 12.076117368241585], [1440752832.0, 67380000.0, 12.09451850834936], [1440754560.0, 67400000.0, 12.1129420957024], [1440756288.0, 67420000.0, 12.13138815085361], [1440758016.0, 67440000.0, 12.149856694368435], [1440759744.0, 67460000.0, 12.168347746824887], [1440761472.0, 67480000.0, 12.186861328813526], [1440763200.0, 67500000.0, 12.2053974609375], [1440764928.0, 67520000.0, 12.223956163812524], [1440766656.0, 67540000.0, 12.24253745806688], [1440768384.0, 67560000.0, 12.261141364341455], [1440770112.0, 67580000.0, 12.279767903289676], [1440771840.0, 67600000.0, 12.2984170955776], [1440773568.0, 67620000.0, 12.31708896188385], [1440775296.0, 67640000.0, 12.335783522899664], [1440777024.0, 67660000.0, 12.354500799328854], [1440778752.0, 67680000.0, 12.373240811887852], [1440780480.0, 67700000.0, 12.392003581305696], [1440782208.0, 67720000.0, 12.41078912832404], [1440783936.0, 67740000.0, 12.429597473697125], [1440785664.0, 67760000.0, 12.448428638191844], [1440787392.0, 67780000.0, 12.467282642587692], [1440789120.0, 67800000.0, 12.486159507676803], [1440790848.0, 67820000.0, 12.505059254263918], [1440792576.0, 67840000.0, 12.523981903166439], [1440794304.0, 67860000.0, 12.542927475214386], [1440796032.0, 67880000.0, 12.561895991250442], [1440797760.0, 67900000.0, 12.5808874721299], [1440799488.0, 67920000.0, 12.599901938720734], [1440801216.0, 67940000.0, 12.618939411903558], [1440802944.0, 67960000.0, 12.63799991257165], [1440804672.0, 67980000.0, 12.657083461630927], [1440806400.0, 68000000.0, 12.676190079999998], [1440808128.0, 68020000.0, 12.695319788610124], [1440809856.0, 68040000.0, 12.71447260840525], [1440811584.0, 68060000.0, 12.733648560341974], [1440813312.0, 68080000.0, 12.752847665389602], [1440815040.0, 68100000.0, 12.772069944530097], [1440816768.0, 68120000.0, 12.791315418758138], [1440818496.0, 68140000.0, 12.810584109081066], [1440820224.0, 68160000.0, 12.829876036518938], [1440821952.0, 68180000.0, 12.849191222104492], [1440823680.0, 68200000.0, 12.868529686883202], [1440825408.0, 68220000.0, 12.887891451913205], [1440827136.0, 68240000.0, 12.907276538265371], [1440828864.0, 68260000.0, 12.926684967023286], [1440830592.0, 68280000.0, 12.946116759283258], [1440832320.0, 68300000.0, 12.965571936154301], [1440834048.0, 68320000.0, 12.985050518758161], [1440835776.0, 68340000.0, 13.00455252822932], [1440837504.0, 68360000.0, 13.024077985714998], [1440839232.0, 68380000.0, 13.043626912375123], [1440840960.0, 68400000.0, 13.0631993293824], [1440842688.0, 68420000.0, 13.082795257922255], [1440844416.0, 68440000.0, 13.102414719192888], [1440846144.0, 68460000.0, 13.12205773440521], [1440847872.0, 68480000.0, 13.141724324782931], [1440849600.0, 68500000.0, 13.161414511562496], [1440851328.0, 68520000.0, 13.181128315993137], [1440853056.0, 68540000.0, 13.200865759336812], [1440854784.0, 68560000.0, 13.220626862868299], [1440856512.0, 68580000.0, 13.240411647875122], [1440858240.0, 68600000.0, 13.260220135657605], [1440859968.0, 68620000.0, 13.280052347528823], [1440861696.0, 68640000.0, 13.29990830481467], [1440863424.0, 68660000.0, 13.319788028853818], [1440865152.0, 68680000.0, 13.339691540997745], [1440866880.0, 68700000.0, 13.359618862610702], [1440868608.0, 68720000.0, 13.379570015069765], [1440870336.0, 68740000.0, 13.39954501976481], [1440872064.0, 68760000.0, 13.419543898098537], [1440873792.0, 68780000.0, 13.439566671486425], [1440875520.0, 68800000.0, 13.459613361356798], [1440877248.0, 68820000.0, 13.4796839891508], [1440878976.0, 68840000.0, 13.499778576322411], [1440880704.0, 68860000.0, 13.519897144338398], [1440882432.0, 68880000.0, 13.540039714678409], [1440884160.0, 68900000.0, 13.560206308834895], [1440885888.0, 68920000.0, 13.580396948313187], [1440887616.0, 68940000.0, 13.60061165463141], [1440889344.0, 68960000.0, 13.620850449320574], [1440891072.0, 68980000.0, 13.641113353924531], [1440892800.0, 69000000.0, 13.661400390000003], [1440894528.0, 69020000.0, 13.681711579116538], [1440896256.0, 69040000.0, 13.702046942856578], [1440897984.0, 69060000.0, 13.722406502815423], [1440899712.0, 69080000.0, 13.742790280601252], [1440901440.0, 69100000.0, 13.763198297835102], [1440903168.0, 69120000.0, 13.783630576150903], [1440904896.0, 69140000.0, 13.804087137195472], [1440906624.0, 69160000.0, 13.824568002628508], [1440908352.0, 69180000.0, 13.845073194122588], [1440910080.0, 69200000.0, 13.865602733363199], [1440911808.0, 69220000.0, 13.886156642048729], [1440913536.0, 69240000.0, 13.906734941890461], [1440915264.0, 69260000.0, 13.927337654612579], [1440916992.0, 69280000.0, 13.947964801952185], [1440918720.0, 69300000.0, 13.968616405659295], [1440920448.0, 69320000.0, 13.989292487496854], [1440922176.0, 69340000.0, 14.009993069240693], [1440923904.0, 69360000.0, 14.0307181726796], [1440925632.0, 69380000.0, 14.051467819615288], [1440927360.0, 69400000.0, 14.072242031862405], [1440929088.0, 69420000.0, 14.093040831248508], [1440930816.0, 69440000.0, 14.11386423961413], [1440932544.0, 69460000.0, 14.134712278812737], [1440934272.0, 69480000.0, 14.155584970710745], [1440936000.0, 69500000.0, 14.176482337187505], [1440937728.0, 69520000.0, 14.197404400135337], [1440939456.0, 69540000.0, 14.218351181459537], [1440941184.0, 69560000.0, 14.239322703078352], [1440942912.0, 69580000.0, 14.260318986922973], [1440944640.0, 69600000.0, 14.281340054937598], [1440946368.0, 69620000.0, 14.302385929079387], [1440948096.0, 69640000.0, 14.323456631318482], [1440949824.0, 69660000.0, 14.34455218363799], [1440951552.0, 69680000.0, 14.365672608034027], [1440953280.0, 69700000.0, 14.386817926515693], [1440955008.0, 69720000.0, 14.407988161105099], [1440956736.0, 69740000.0, 14.429183333837305], [1440958464.0, 69760000.0, 14.450403466760422], [1440960192.0, 69780000.0, 14.471648581935549], [1440961920.0, 69800000.0, 14.492918701436803], [1440963648.0, 69820000.0, 14.514213847351296], [1440965376.0, 69840000.0, 14.535534041779176], [1440967104.0, 69860000.0, 14.556879306833608], [1440968832.0, 69880000.0, 14.578249664640778], [1440970560.0, 69900000.0, 14.599645137339904], [1440972288.0, 69920000.0, 14.621065747083232], [1440974016.0, 69940000.0, 14.642511516036055], [1440975744.0, 69960000.0, 14.663982466376707], [1440977472.0, 69980000.0, 14.685478620296546], [1440979200.0, 70000000.0, 14.707], [1440980928.0, 70020000.0, 14.72854662770454], [1440982656.0, 70040000.0, 14.750118525640701], [1440984384.0, 70060000.0, 14.771715716052075], [1440986112.0, 70080000.0, 14.793338221195295], [1440987840.0, 70100000.0, 14.814986063340095], [1440989568.0, 70120000.0, 14.836659264769269], [1440991296.0, 70140000.0, 14.85835784777868], [1440993024.0, 70160000.0, 14.88008183467727], [1440994752.0, 70180000.0, 14.90183124778707], [1440996480.0, 70200000.0, 14.923606109443195], [1440998208.0, 70220000.0, 14.94540644199386], [1440999936.0, 70240000.0, 14.967232267800346], [1441001664.0, 70260000.0, 14.989083609237063], [1441003392.0, 70280000.0, 15.010960488691511], [1441005120.0, 70300000.0, 15.032862928564308], [1441006848.0, 70320000.0, 15.054790951269139], [1441008576.0, 70340000.0, 15.076744579232859], [1441010304.0, 70360000.0, 15.098723834895408], [1441012032.0, 70380000.0, 15.120728740709863], [1441013760.0, 70400000.0, 15.142759319142398], [1441015488.0, 70420000.0, 15.164815592672355], [1441017216.0, 70440000.0, 15.186897583792174], [1441018944.0, 70460000.0, 15.209005315007472], [1441020672.0, 70480000.0, 15.231138808836947], [1441022400.0, 70500000.0, 15.253298087812498], [1441024128.0, 70520000.0, 15.275483174479142], [1441025856.0, 70540000.0, 15.297694091395073], [1441027584.0, 70560000.0, 15.319930861131596], [1441029312.0, 70580000.0, 15.342193506273219], [1441031040.0, 70600000.0, 15.364482049417594], [1441032768.0, 70620000.0, 15.38679651317556], [1441034496.0, 70640000.0, 15.40913692017109], [1441036224.0, 70660000.0, 15.431503293041352], [1441037952.0, 70680000.0, 15.453895654436714], [1441039680.0, 70700000.0, 15.476314027020706], [1441041408.0, 70720000.0, 15.498758433470025], [1441043136.0, 70740000.0, 15.521228896474588], [1441044864.0, 70760000.0, 15.543725438737503], [1441046592.0, 70780000.0, 15.566248082975081], [1441048320.0, 70800000.0, 15.5887968519168], [1441050048.0, 70820000.0, 15.611371768305382], [1441051776.0, 70840000.0, 15.633972854896744], [1441053504.0, 70860000.0, 15.656600134460016], [1441055232.0, 70880000.0, 15.679253629777543], [1441056960.0, 70900000.0, 15.7019333636449], [1441058688.0, 70920000.0, 15.724639358870874], [1441060416.0, 70940000.0, 15.747371638277507], [1441062144.0, 70960000.0, 15.770130224700031], [1441063872.0, 70980000.0, 15.792915140986953], [1441065600.0, 71000000.0, 15.815726409999998], [1441067328.0, 71020000.0, 15.838564054614157], [1441069056.0, 71040000.0, 15.861428097717633], [1441070784.0, 71060000.0, 15.884318562211918], [1441072512.0, 71080000.0, 15.907235471011742], [1441074240.0, 71100000.0, 15.930178847045104], [1441075968.0, 71120000.0, 15.953148713253242], [1441077696.0, 71140000.0, 15.97614509259069], [1441079424.0, 71160000.0, 15.999168008025235], [1441081152.0, 71180000.0, 16.022217482537965], [1441082880.0, 71200000.0, 16.045293539123204], [1441084608.0, 71220000.0, 16.06839620078858], [1441086336.0, 71240000.0, 16.091525490555032], [1441088064.0, 71260000.0, 16.11468143145676], [1441089792.0, 71280000.0, 16.137864046541246], [1441091520.0, 71300000.0, 16.1610733588693], [1441093248.0, 71320000.0, 16.184309391515026], [1441094976.0, 71340000.0, 16.20757216756583], [1441096704.0, 71360000.0, 16.230861710122422], [1441098432.0, 71380000.0, 16.254178042298825], [1441100160.0, 71400000.0, 16.277521187222398], [1441101888.0, 71420000.0, 16.300891168033807], [1441103616.0, 71440000.0, 16.32428800788703], [1441105344.0, 71460000.0, 16.347711729949395], [1441107072.0, 71480000.0, 16.371162357401552], [1441108800.0, 71500000.0, 16.394639913437505], [1441110528.0, 71520000.0, 16.418144421264554], [1441112256.0, 71540000.0, 16.441675904103395], [1441113984.0, 71560000.0, 16.46523438518804], [1441115712.0, 71580000.0, 16.48881988776587], [1441117440.0, 71600000.0, 16.5124324350976], [1441119168.0, 71620000.0, 16.53607205045732], [1441120896.0, 71640000.0, 16.559738757132486], [1441122624.0, 71660000.0, 16.58343257842393], [1441124352.0, 71680000.0, 16.607153537645807], [1441126080.0, 71700000.0, 16.630901658125698], [1441127808.0, 71720000.0, 16.654676963204547], [1441129536.0, 71740000.0, 16.678479476236685], [1441131264.0, 71760000.0, 16.702309220589797], [1441132992.0, 71780000.0, 16.726166219645005], [1441134720.0, 71800000.0, 16.750050496796792], [1441136448.0, 71820000.0, 16.773962075453074], [1441138176.0, 71840000.0, 16.797900979035116], [1441139904.0, 71860000.0, 16.821867230977624], [1441141632.0, 71880000.0, 16.84586085472871], [1441143360.0, 71900000.0, 16.869881873749904], [1441145088.0, 71920000.0, 16.89393031151613], [1441146816.0, 71940000.0, 16.91800619151575], [1441148544.0, 71960000.0, 16.94210953725056], [1441150272.0, 71980000.0, 16.96624037223576], [1441152000.0, 72000000.0, 16.99039872], [1441153728.0, 72020000.0, 17.014584604085357], [1441155456.0, 72040000.0, 17.038798048047365], [1441157184.0, 72060000.0, 17.06303907545497], [1441158912.0, 72080000.0, 17.08730770989059], [1441160640.0, 72100000.0, 17.111603974950096], [1441162368.0, 72120000.0, 17.135927894242805], [1441164096.0, 72140000.0, 17.160279491391503], [1441165824.0, 72160000.0, 17.184658790032408], [1441167552.0, 72180000.0, 17.209065813815247], [1441169280.0, 72200000.0, 17.233500586403196], [1441171008.0, 72220000.0, 17.25796313147292], [1441172736.0, 72240000.0, 17.282453472714526], [1441174464.0, 72260000.0, 17.30697163383164], [1441176192.0, 72280000.0, 17.331517638541364], [1441177920.0, 72300000.0, 17.356091510574306], [1441179648.0, 72320000.0, 17.380693273674517], [1441181376.0, 72340000.0, 17.405322951599594], [1441183104.0, 72360000.0, 17.429980568120623], [1441184832.0, 72380000.0, 17.454666147022206], [1441186560.0, 72400000.0, 17.479379712102403], [1441188288.0, 72420000.0, 17.504121287172847], [1441190016.0, 72440000.0, 17.52889089605867], [1441191744.0, 72460000.0, 17.55368856259853], [1441193472.0, 72480000.0, 17.578514310644568], [1441195200.0, 72500000.0, 17.6033681640625], [1441196928.0, 72520000.0, 17.62825014673156], [1441198656.0, 72540000.0, 17.653160282544523], [1441200384.0, 72560000.0, 17.678098595407693], [1441202112.0, 72580000.0, 17.70306510924092], [1441203840.0, 72600000.0, 17.728059847977594], [1441205568.0, 72620000.0, 17.753082835564683], [1441207296.0, 72640000.0, 17.77813409596271], [1441209024.0, 72660000.0, 17.803213653145693], [1441210752.0, 72680000.0, 17.82832153110129], [1441212480.0, 72700000.0, 17.853457753830696], [1441214208.0, 72720000.0, 17.87862234534868], [1441215936.0, 72740000.0, 17.903815329683567], [1441217664.0, 72760000.0, 17.929036730877282], [1441219392.0, 72780000.0, 17.95428657298533], [1441221120.0, 72800000.0, 17.979564880076804], [1441222848.0, 72820000.0, 18.00487167623436], [1441224576.0, 72840000.0, 18.030206985554276], [1441226304.0, 72860000.0, 18.055570832146426], [1441228032.0, 72880000.0, 18.08096324013428], [1441229760.0, 72900000.0, 18.1063842336549], [1441231488.0, 72920000.0, 18.131833836858977], [1441233216.0, 72940000.0, 18.1573120739108], [1441234944.0, 72960000.0, 18.182818968988286], [1441236672.0, 72980000.0, 18.208354546282965], [1441238400.0, 73000000.0, 18.23391883], [1441240128.0, 73020000.0, 18.259511844358162], [1441241856.0, 73040000.0, 18.28513361358989], [1441243584.0, 73060000.0, 18.310784161941214], [1441245312.0, 73080000.0, 18.336463513671838], [1441247040.0, 73100000.0, 18.362171693055096], [1441248768.0, 73120000.0, 18.38790872437798], [1441250496.0, 73140000.0, 18.413674631941102], [1441252224.0, 73160000.0, 18.439469440058776], [1441253952.0, 73180000.0, 18.465293173058935], [1441255680.0, 73200000.0, 18.491145855283204], [1441257408.0, 73220000.0, 18.517027511086837], [1441259136.0, 73240000.0, 18.54293816483881], [1441260864.0, 73260000.0, 18.568877840921722], [1441262592.0, 73280000.0, 18.594846563731902], [1441264320.0, 73300000.0, 18.620844357679307], [1441266048.0, 73320000.0, 18.646871247187597], [1441267776.0, 73340000.0, 18.672927256694155], [1441269504.0, 73360000.0, 18.69901241065004], [1441271232.0, 73380000.0, 18.725126733519964], [1441272960.0, 73400000.0, 18.7512702497824], [1441274688.0, 73420000.0, 18.777442983929493], [1441276416.0, 73440000.0, 18.803644960467132], [1441278144.0, 73460000.0, 18.829876203914857], [1441279872.0, 73480000.0, 18.856136738805972], [1441281600.0, 73500000.0, 18.882426589687494], [1441283328.0, 73520000.0, 18.908745781120174], [1441285056.0, 73540000.0, 18.935094337678454], [1441286784.0, 73560000.0, 18.96147228395054], [1441288512.0, 73580000.0, 18.987879644538356], [1441290240.0, 73600000.0, 19.014316444057602], [1441291968.0, 73620000.0, 19.040782707137662], [1441293696.0, 73640000.0, 19.067278458421708], [1441295424.0, 73660000.0, 19.093803722566655], [1441297152.0, 73680000.0, 19.120358524243187], [1441298880.0, 73700000.0, 19.1469428881357], [1441300608.0, 73720000.0, 19.1735568389424], [1441302336.0, 73740000.0, 19.200200401375252], [1441304064.0, 73760000.0, 19.22687360015998], [1441305792.0, 73780000.0, 19.253576460036065], [1441307520.0, 73800000.0, 19.2803090057568], [1441309248.0, 73820000.0, 19.30707126208925], [1441310976.0, 73840000.0, 19.33386325381425], [1441312704.0, 73860000.0, 19.36068500572644], [1441314432.0, 73880000.0, 19.387536542634244], [1441316160.0, 73900000.0, 19.4144178893599], [1441317888.0, 73920000.0, 19.441329070739428], [1441319616.0, 73940000.0, 19.468270111622648], [1441321344.0, 73960000.0, 19.495241036873217], [1441323072.0, 73980000.0, 19.52224187136857], [1441324800.0, 74000000.0, 19.54927264], [1441326528.0, 74020000.0, 19.576333367672575], [1441328256.0, 74040000.0, 19.603424079305213], [1441329984.0, 74060000.0, 19.63054479983066], [1441331712.0, 74080000.0, 19.65769555419549], [1441333440.0, 74100000.0, 19.684876367360097], [1441335168.0, 74120000.0, 19.71208726429875], [1441336896.0, 74140000.0, 19.73932826999951], [1441338624.0, 74160000.0, 19.766599409464348], [1441340352.0, 74180000.0, 19.793900707709028], [1441342080.0, 74200000.0, 19.8212321897632], [1441343808.0, 74220000.0, 19.848593880670368], [1441345536.0, 74240000.0, 19.875985805487907], [1441347264.0, 74260000.0, 19.903407989287015], [1441348992.0, 74280000.0, 19.930860457152825], [1441350720.0, 74300000.0, 19.958343234184294], [1441352448.0, 74320000.0, 19.985856345494295], [1441354176.0, 74340000.0, 20.01339981620954], [1441355904.0, 74360000.0, 20.040973671470645], [1441357632.0, 74380000.0, 20.068577936432124], [1441359360.0, 74400000.0, 20.096212636262408], [1441361088.0, 74420000.0, 20.12387779614375], [1441362816.0, 74440000.0, 20.151573441272372], [1441364544.0, 74460000.0, 20.179299596858375], [1441366272.0, 74480000.0, 20.207056288125788], [1441368000.0, 74500000.0, 20.234843540312504], [1441369728.0, 74520000.0, 20.262661378670384], [1441371456.0, 74540000.0, 20.29050982846518], [1441373184.0, 74560000.0, 20.31838891497659], [1441374912.0, 74580000.0, 20.346298663498214], [1441376640.0, 74600000.0, 20.374239099337597], [1441378368.0, 74620000.0, 20.402210247816225], [1441380096.0, 74640000.0, 20.43021213426952], [1441381824.0, 74660000.0, 20.45824478404683], [1441383552.0, 74680000.0, 20.486308222511468], [1441385280.0, 74700000.0, 20.514402475040697], [1441387008.0, 74720000.0, 20.542527567025736], [1441388736.0, 74740000.0, 20.570683523871747], [1441390464.0, 74760000.0, 20.59887037099786], [1441392192.0, 74780000.0, 20.627088133837187], [1441393920.0, 74800000.0, 20.655336837836803], [1441395648.0, 74820000.0, 20.683616508457735], [1441397376.0, 74840000.0, 20.711927171175017], [1441399104.0, 74860000.0, 20.740268851477637], [1441400832.0, 74880000.0, 20.76864157486862], [1441402560.0, 74900000.0, 20.797045366864907], [1441404288.0, 74920000.0, 20.82548025299747], [1441406016.0, 74940000.0, 20.853946258811288], [1441407744.0, 74960000.0, 20.88244340986535], [1441409472.0, 74980000.0, 20.910971731732587], [1441411200.0, 75000000.0, 20.93953125], [1441412928.0, 75020000.0, 20.968121990268582], [1441414656.0, 75040000.0, 20.996743978153344], [1441416384.0, 75060000.0, 21.02539723928331], [1441418112.0, 75080000.0, 21.054081799301542], [1441419840.0, 75100000.0, 21.0827976838651], [1441421568.0, 75120000.0, 21.111544918645105], [1441423296.0, 75140000.0, 21.140323529326725], [1441425024.0, 75160000.0, 21.16913354160911], [1441426752.0, 75180000.0, 21.197974981205512], [1441428480.0, 75200000.0, 21.226847873843194], [1441430208.0, 75220000.0, 21.2557522452635], [1441431936.0, 75240000.0, 21.284688121221787], [1441433664.0, 75260000.0, 21.313655527487505], [1441435392.0, 75280000.0, 21.342654489844147], [1441437120.0, 75300000.0, 21.371685034089303], [1441438848.0, 75320000.0, 21.400747186034575], [1441440576.0, 75340000.0, 21.429840971505694], [1441442304.0, 75360000.0, 21.458966416342445], [1441444032.0, 75380000.0, 21.488123546398707], [1441445760.0, 75400000.0, 21.5173123875424], [1441447488.0, 75420000.0, 21.54653296565559], [1441449216.0, 75440000.0, 21.57578530663442], [1441450944.0, 75460000.0, 21.605069436389112], [1441452672.0, 75480000.0, 21.634385380843987], [1441454400.0, 75500000.0, 21.663733165937497], [1441456128.0, 75520000.0, 21.69311281762218], [1441457856.0, 75540000.0, 21.722524361864718], [1441459584.0, 75560000.0, 21.75196782464584], [1441461312.0, 75580000.0, 21.78144323196046], [1441463040.0, 75600000.0, 21.810950609817592], [1441464768.0, 75620000.0, 21.840489984240406], [1441466496.0, 75640000.0, 21.870061381266126], [1441468224.0, 75660000.0, 21.899664826946196], [1441469952.0, 75680000.0, 21.92930034734615], [1441471680.0, 75700000.0, 21.958967968545704], [1441473408.0, 75720000.0, 21.988667716638666], [1441475136.0, 75740000.0, 22.01839961773303], [1441476864.0, 75760000.0, 22.048163697950944], [1441478592.0, 75780000.0, 22.077959983428723], [1441480320.0, 75800000.0, 22.1077885003168], [1441482048.0, 75820000.0, 22.13764927477982], [1441483776.0, 75840000.0, 22.16754233299658], [1441485504.0, 75860000.0, 22.197467701160054], [1441487232.0, 75880000.0, 22.22742540547738], [1441488960.0, 75900000.0, 22.2574154721699], [1441490688.0, 75920000.0, 22.287437927473114], [1441492416.0, 75940000.0, 22.317492797636746], [1441494144.0, 75960000.0, 22.347580108924674], [1441495872.0, 75980000.0, 22.37769988761499], [1441497600.0, 76000000.0, 22.40785215999999], [1441499328.0, 76020000.0, 22.438036952386195], [1441501056.0, 76040000.0, 22.468254291094276], [1441502784.0, 76060000.0, 22.49850420245916], [1441504512.0, 76080000.0, 22.52878671282998], [1441506240.0, 76100000.0, 22.559101848570105], [1441507968.0, 76120000.0, 22.589449636057086], [1441509696.0, 76140000.0, 22.619830101682723], [1441511424.0, 76160000.0, 22.65024327185308], [1441513152.0, 76180000.0, 22.680689172988405], [1441514880.0, 76200000.0, 22.7111678315232], [1441516608.0, 76220000.0, 22.741679273906225], [1441518336.0, 76240000.0, 22.77222352660047], [1441520064.0, 76260000.0, 22.802800616083196], [1441521792.0, 76280000.0, 22.83341056884589], [1441523520.0, 76300000.0, 22.8640534113943], [1441525248.0, 76320000.0, 22.89472917024846], [1441526976.0, 76340000.0, 22.925437871942666], [1441528704.0, 76360000.0, 22.956179543025456], [1441530432.0, 76380000.0, 22.98695421005966], [1441532160.0, 76400000.0, 23.017761899622393], [1441533888.0, 76420000.0, 23.04860263830505], [1441535616.0, 76440000.0, 23.079476452713273], [1441537344.0, 76460000.0, 23.110383369467034], [1441539072.0, 76480000.0, 23.141323415200592], [1441540800.0, 76500000.0, 23.172296616562505], [1441542528.0, 76520000.0, 23.203303000215598], [1441544256.0, 76540000.0, 23.234342592837034], [1441545984.0, 76560000.0, 23.26541542111828], [1441547712.0, 76580000.0, 23.296521511765118], [1441549440.0, 76600000.0, 23.3276608914976], [1441551168.0, 76620000.0, 23.358833587050164], [1441552896.0, 76640000.0, 23.390039625171532], [1441554624.0, 76660000.0, 23.42127903262477], [1441556352.0, 76680000.0, 23.452551836187254], [1441558080.0, 76700000.0, 23.483858062650697], [1441559808.0, 76720000.0, 23.515197738821183], [1441561536.0, 76740000.0, 23.546570891519124], [1441563264.0, 76760000.0, 23.57797754757924], [1441564992.0, 76780000.0, 23.609417733850645], [1441566720.0, 76800000.0, 23.640891477196792], [1441568448.0, 76820000.0, 23.67239880449552], [1441570176.0, 76840000.0, 23.70393974263896], [1441571904.0, 76860000.0, 23.735514318533667], [1441573632.0, 76880000.0, 23.767122559100542], [1441575360.0, 76900000.0, 23.798764491274905], [1441577088.0, 76920000.0, 23.83044014200637], [1441578816.0, 76940000.0, 23.86214953825899], [1441580544.0, 76960000.0, 23.893892707011194], [1441582272.0, 76980000.0, 23.9256696752558], [1441584000.0, 77000000.0, 23.957480470000004], [1441585728.0, 77020000.0, 23.989325118265402], [1441587456.0, 77040000.0, 24.021203647087997], [1441589184.0, 77060000.0, 24.053116083518212], [1441590912.0, 77080000.0, 24.085062454620836], [1441592640.0, 77100000.0, 24.117042787475096], [1441594368.0, 77120000.0, 24.149057109174638], [1441596096.0, 77140000.0, 24.181105446827544], [1441597824.0, 77160000.0, 24.213187827556254], [1441599552.0, 77180000.0, 24.24530427849769], [1441601280.0, 77200000.0, 24.277454826803197], [1441603008.0, 77220000.0, 24.309639499638564], [1441604736.0, 77240000.0, 24.341858324183963], [1441606464.0, 77260000.0, 24.37411132763408], [1441608192.0, 77280000.0, 24.406398537198005], [1441609920.0, 77300000.0, 24.438719980099307], [1441611648.0, 77320000.0, 24.47107568357596], [1441613376.0, 77340000.0, 24.503465674880438], [1441615104.0, 77360000.0, 24.535889981279663], [1441616832.0, 77380000.0, 24.56834863005504], [1441618560.0, 77400000.0, 24.600841648502406], [1441620288.0, 77420000.0, 24.63336906393209], [1441622016.0, 77440000.0, 24.66593090366891], [1441623744.0, 77460000.0, 24.69852719505217], [1441625472.0, 77480000.0, 24.731157965435607], [1441627200.0, 77500000.0, 24.7638232421875], [1441628928.0, 77520000.0, 24.7965230526906], [1441630656.0, 77540000.0, 24.829257424342156], [1441632384.0, 77560000.0, 24.86202638455394], [1441634112.0, 77580000.0, 24.89482996075216], [1441635840.0, 77600000.0, 24.927668180377594], [1441637568.0, 77620000.0, 24.960541070885522], [1441639296.0, 77640000.0, 24.993448659745745], [1441641024.0, 77660000.0, 25.026390974442535], [1441642752.0, 77680000.0, 25.059368042474734], [1441644480.0, 77700000.0, 25.092379891355694], [1441646208.0, 77720000.0, 25.12542654861332], [1441647936.0, 77740000.0, 25.158508041790004], [1441649664.0, 77760000.0, 25.191624398442723], [1441651392.0, 77780000.0, 25.224775646142966], [1441653120.0, 77800000.0, 25.2579618124768], [1441654848.0, 77820000.0, 25.2911829250448], [1441656576.0, 77840000.0, 25.324439011462115], [1441658304.0, 77860000.0, 25.357730099358466], [1441660032.0, 77880000.0, 25.39105621637812], [1441661760.0, 77900000.0, 25.424417390179904], [1441663488.0, 77920000.0, 25.457813648437217], [1441665216.0, 77940000.0, 25.491245018838036], [1441666944.0, 77960000.0, 25.524711529084932], [1441668672.0, 77980000.0, 25.558213206895005], [1441670400.0, 78000000.0, 25.591750079999994], [1441672128.0, 78020000.0, 25.625322176146202], [1441673856.0, 78040000.0, 25.658929523094532], [1441675584.0, 78060000.0, 25.692572148620457], [1441677312.0, 78080000.0, 25.726250080514077], [1441679040.0, 78100000.0, 25.75996334658009], [1441680768.0, 78120000.0, 25.793711974637827], [1441682496.0, 78140000.0, 25.827495992521147], [1441684224.0, 78160000.0, 25.861315428078612], [1441685952.0, 78180000.0, 25.89517030917337], [1441687680.0, 78200000.0, 25.92906066368321], [1441689408.0, 78220000.0, 25.962986519500483], [1441691136.0, 78240000.0, 25.99694790453225], [1441692864.0, 78260000.0, 26.03094484670016], [1441694592.0, 78280000.0, 26.064977373940543], [1441696320.0, 78300000.0, 26.099045514204303], [1441698048.0, 78320000.0, 26.133149295457038], [1441699776.0, 78340000.0, 26.167288745679], [1441701504.0, 78360000.0, 26.20146389286508], [1441703232.0, 78380000.0, 26.235674765024804], [1441704960.0, 78400000.0, 26.2699213901824], [1441706688.0, 78420000.0, 26.304203796376733], [1441708416.0, 78440000.0, 26.33852201166137], [1441710144.0, 78460000.0, 26.372876064104492], [1441711872.0, 78480000.0, 26.407265981789013], [1441713600.0, 78500000.0, 26.441691792812488], [1441715328.0, 78520000.0, 26.476153525287216], [1441717056.0, 78540000.0, 26.510651207340096], [1441718784.0, 78560000.0, 26.54518486711278], [1441720512.0, 78580000.0, 26.579754532761594], [1441722240.0, 78600000.0, 26.614360232457603], [1441723968.0, 78620000.0, 26.649001994386506], [1441725696.0, 78640000.0, 26.68367984674875], [1441727424.0, 78660000.0, 26.718393817759498], [1441729152.0, 78680000.0, 26.753143935648627], [1441730880.0, 78700000.0, 26.7879302286607], [1441732608.0, 78720000.0, 26.822752725055043], [1441734336.0, 78740000.0, 26.857611453105687], [1441736064.0, 78760000.0, 26.89250644110142], [1441737792.0, 78780000.0, 26.927437717345708], [1441739520.0, 78800000.0, 26.9624053101568], [1441741248.0, 78820000.0, 26.99740924786768], [1441742976.0, 78840000.0, 27.03244955882609], [1441744704.0, 78860000.0, 27.067526271394478], [1441746432.0, 78880000.0, 27.102639413950083], [1441748160.0, 78900000.0, 27.13778901488489], [1441749888.0, 78920000.0, 27.172975102605673], [1441751616.0, 78940000.0, 27.208197705533895], [1441753344.0, 78960000.0, 27.24345685210585], [1441755072.0, 78980000.0, 27.278752570772614], [1441756800.0, 79000000.0, 27.314084890000007], [1441758528.0, 79020000.0, 27.34945383826862], [1441760256.0, 79040000.0, 27.384859444073857], [1441761984.0, 79060000.0, 27.420301735925896], [1441763712.0, 79080000.0, 27.45578074234973], [1441765440.0, 79100000.0, 27.491296491885098], [1441767168.0, 79120000.0, 27.526849013086583], [1441768896.0, 79140000.0, 27.562438334523552], [1441770624.0, 79160000.0, 27.59806448478019], [1441772352.0, 79180000.0, 27.63372749245547], [1441774080.0, 79200000.0, 27.669427386163196], [1441775808.0, 79220000.0, 27.705164194532], [1441777536.0, 79240000.0, 27.740937946205342], [1441779264.0, 79260000.0, 27.776748669841457], [1441780992.0, 79280000.0, 27.812596394113466], [1441782720.0, 79300000.0, 27.848481147709293], [1441784448.0, 79320000.0, 27.884402959331734], [1441786176.0, 79340000.0, 27.92036185769837], [1441787904.0, 79360000.0, 27.956357871541684], [1441789632.0, 79380000.0, 27.992391029608967], [1441791360.0, 79400000.0, 28.028461360662405], [1441793088.0, 79420000.0, 28.064568893478988], [1441794816.0, 79440000.0, 28.100713656850612], [1441796544.0, 79460000.0, 28.136895679584015], [1441798272.0, 79480000.0, 28.173114990500824], [1441800000.0, 79500000.0, 28.209371618437505], [1441801728.0, 79520000.0, 28.24566559224542], [1441803456.0, 79540000.0, 28.28199694079082], [1441805184.0, 79560000.0, 28.31836569295484], [1441806912.0, 79580000.0, 28.354771877633457], [1441808640.0, 79600000.0, 28.3912155237376], [1441810368.0, 79620000.0, 28.42769666019306], [1441812096.0, 79640000.0, 28.464215315940564], [1441813824.0, 79660000.0, 28.50077151993567], [1441815552.0, 79680000.0, 28.53736530114891], [1441817280.0, 79700000.0, 28.573996688565696], [1441819008.0, 79720000.0, 28.610665711186382], [1441820736.0, 79740000.0, 28.647372398026185], [1441822464.0, 79760000.0, 28.6841167781153], [1441824192.0, 79780000.0, 28.720898880498826], [1441825920.0, 79800000.0, 28.757718734236803], [1441827648.0, 79820000.0, 28.79457636840418], [1441829376.0, 79840000.0, 28.83147181209085], [1441831104.0, 79860000.0, 28.868405094401684], [1441832832.0, 79880000.0, 28.905376244456463], [1441834560.0, 79900000.0, 28.942385291389908], [1441836288.0, 79920000.0, 28.97943226435171], [1441838016.0, 79940000.0, 29.01651719250653], [1441839744.0, 79960000.0, 29.05364010503399], [1441841472.0, 79980000.0, 29.09080103112863], [1441843200.0, 80000000.0, 29.128], [1441844928.0, 80020000.0, 29.165237040872643], [1441846656.0, 80040000.0, 29.20251218298597], [1441848384.0, 80060000.0, 29.23982545559456], [1441850112.0, 80080000.0, 29.27717688796776], [1441851840.0, 80100000.0, 29.31456650939009], [1441853568.0, 80120000.0, 29.35199434916096], [1441855296.0, 80140000.0, 29.389460436594753], [1441857024.0, 80160000.0, 29.42696480102095], [1441858752.0, 80180000.0, 29.464507471783968], [1441860480.0, 80200000.0, 29.5020884782432], [1441862208.0, 80220000.0, 29.53970784977314], [1441863936.0, 80240000.0, 29.577365615763213], [1441865664.0, 80260000.0, 29.615061805617945], [1441867392.0, 80280000.0, 29.652796448756806], [1441869120.0, 80300000.0, 29.690569574614287], [1441870848.0, 80320000.0, 29.728381212640016], [1441872576.0, 80340000.0, 29.766231392298558], [1441874304.0, 80360000.0, 29.804120143069483], [1441876032.0, 80380000.0, 29.84204749444754], [1441877760.0, 80400000.0, 29.880013475942384], [1441879488.0, 80420000.0, 29.91801811707883], [1441881216.0, 80440000.0, 29.95606144739667], [1441882944.0, 80460000.0, 29.994143496450732], [1441884672.0, 80480000.0, 30.032264293811025], [1441886400.0, 80500000.0, 30.070423869062505], [1441888128.0, 80520000.0, 30.108622251805222], [1441889856.0, 80540000.0, 30.146859471654356], [1441891584.0, 80560000.0, 30.185135558240066], [1441893312.0, 80580000.0, 30.2234505412077], [1441895040.0, 80600000.0, 30.261804450217614], [1441896768.0, 80620000.0, 30.300197314945223], [1441898496.0, 80640000.0, 30.33862916508117], [1441900224.0, 80660000.0, 30.37710003033105], [1441901952.0, 80680000.0, 30.415609940415585], [1441903680.0, 80700000.0, 30.454158925070704], [1441905408.0, 80720000.0, 30.492747014047282], [1441907136.0, 80740000.0, 30.53137423711147], [1441908864.0, 80760000.0, 30.5700406240444], [1441910592.0, 80780000.0, 30.608746204642348], [1441912320.0, 80800000.0, 30.647491008716806], [1441914048.0, 80820000.0, 30.68627506609427], [1441915776.0, 80840000.0, 30.725098406616414], [1441917504.0, 80860000.0, 30.7639610601401], [1441919232.0, 80880000.0, 30.802863056537205], [1441920960.0, 80900000.0, 30.841804425694892], [1441922688.0, 80920000.0, 30.88078519751537], [1441924416.0, 80940000.0, 30.919805401915976], [1441926144.0, 80960000.0, 30.95886506882932], [1441927872.0, 80980000.0, 30.99796422820305], [1441929600.0, 81000000.0, 31.03710290999999], [1441931328.0, 81020000.0, 31.07628114419824], [1441933056.0, 81040000.0, 31.115498960790898], [1441934784.0, 81060000.0, 31.154756389786403], [1441936512.0, 81080000.0, 31.19405346120823], [1441938240.0, 81100000.0, 31.233390205095088], [1441939968.0, 81120000.0, 31.27276665150093], [1441941696.0, 81140000.0, 31.312182830494784], [1441943424.0, 81160000.0, 31.351638772160914], [1441945152.0, 81180000.0, 31.39113450659884], [1441946880.0, 81200000.0, 31.430670063923184], [1441948608.0, 81220000.0, 31.47024547426386], [1441950336.0, 81240000.0, 31.509860767765925], [1441952064.0, 81260000.0, 31.549515974589625], [1441953792.0, 81280000.0, 31.589211124910527], [1441955520.0, 81300000.0, 31.62894624891931], [1441957248.0, 81320000.0, 31.6687213768219], [1441958976.0, 81340000.0, 31.708536538839514], [1441960704.0, 81360000.0, 31.74839176520848], [1441962432.0, 81380000.0, 31.788287086180503], [1441964160.0, 81400000.0, 31.82822253202241], [1441965888.0, 81420000.0, 31.868198133016275], [1441967616.0, 81440000.0, 31.908213919459516], [1441969344.0, 81460000.0, 31.94826992166469], [1441971072.0, 81480000.0, 31.988366169959626], [1441972800.0, 81500000.0, 32.0285026946875], [1441974528.0, 81520000.0, 32.068679526206616], [1441976256.0, 81540000.0, 32.10889669489068], [1441977984.0, 81560000.0, 32.149154231128534], [1441979712.0, 81580000.0, 32.18945216532434], [1441981440.0, 81600000.0, 32.229790527897606], [1441983168.0, 81620000.0, 32.27016934928302], [1441984896.0, 81640000.0, 32.31058865993057], [1441986624.0, 81660000.0, 32.35104849030561], [1441988352.0, 81680000.0, 32.39154887088867], [1441990080.0, 81700000.0, 32.43208983217569], [1441991808.0, 81720000.0, 32.47267140467783], [1441993536.0, 81740000.0, 32.513293618921544], [1441995264.0, 81760000.0, 32.553956505448674], [1441996992.0, 81780000.0, 32.594660094816305], [1441998720.0, 81800000.0, 32.635404417596796], [1442000448.0, 81820000.0, 32.67618950437796], [1442002176.0, 81840000.0, 32.71701538576277], [1442003904.0, 81860000.0, 32.7578820923697], [1442005632.0, 81880000.0, 32.79878965483241], [1442007360.0, 81900000.0, 32.8397381037999], [1442009088.0, 81920000.0, 32.88072746993661], [1442010816.0, 81940000.0, 32.92175778392225], [1442012544.0, 81960000.0, 32.96282907645183], [1442014272.0, 81980000.0, 33.00394137823584], [1442016000.0, 82000000.0, 33.04509471999999], [1442017728.0, 82020000.0, 33.08628913248543], [1442019456.0, 82040000.0, 33.127524646448656], [1442021184.0, 82060000.0, 33.16880129266144], [1442022912.0, 82080000.0, 33.21011910191107], [1442024640.0, 82100000.0, 33.25147810500012], [1442026368.0, 82120000.0, 33.292878332746476], [1442028096.0, 82140000.0, 33.334319815983584], [1442029824.0, 82160000.0, 33.37580258556008], [1442031552.0, 82180000.0, 33.41732667234013], [1442033280.0, 82200000.0, 33.45889210720322], [1442035008.0, 82220000.0, 33.50049892104418], [1442036736.0, 82240000.0, 33.542147144773416], [1442038464.0, 82260000.0, 33.583836809316544], [1442040192.0, 82280000.0, 33.62556794561465], [1442041920.0, 82300000.0, 33.667340584624306], [1442043648.0, 82320000.0, 33.70915475731738], [1442045376.0, 82340000.0, 33.75101049468128], [1442047104.0, 82360000.0, 33.79290782771872], [1442048832.0, 82380000.0, 33.834846787447866], [1442050560.0, 82400000.0, 33.87682740490241], [1442052288.0, 82420000.0, 33.91884971113135], [1442054016.0, 82440000.0, 33.96091373719914], [1442055744.0, 82460000.0, 34.003019514185816], [1442057472.0, 82480000.0, 34.04516707318663], [1442059200.0, 82500000.0, 34.0873564453125], [1442060928.0, 82520000.0, 34.12958766168966], [1442062656.0, 82540000.0, 34.1718607534598], [1442064384.0, 82560000.0, 34.21417575178018], [1442066112.0, 82580000.0, 34.25653268782338], [1442067840.0, 82600000.0, 34.2989315927776], [1442069568.0, 82620000.0, 34.34137249784638], [1442071296.0, 82640000.0, 34.38385543424877], [1442073024.0, 82660000.0, 34.42638043321937], [1442074752.0, 82680000.0, 34.468947526008186], [1442076480.0, 82700000.0, 34.51155674388069], [1442078208.0, 82720000.0, 34.55420811811796], [1442079936.0, 82740000.0, 34.59690168001642], [1442081664.0, 82760000.0, 34.63963746088816], [1442083392.0, 82780000.0, 34.68241549206061], [1442085120.0, 82800000.0, 34.72523580487678], [1442086848.0, 82820000.0, 34.76809843069524], [1442088576.0, 82840000.0, 34.81100340088997], [1442090304.0, 82860000.0, 34.8539507468505], [1442092032.0, 82880000.0, 34.896940499981966], [1442093760.0, 82900000.0, 34.93997269170488], [1442095488.0, 82920000.0, 34.98304735345545], [1442097216.0, 82940000.0, 35.026164516685284], [1442098944.0, 82960000.0, 35.06932421286155], [1442100672.0, 82980000.0, 35.11252647346706], [1442102400.0, 83000000.0, 35.155771330000015], [1442104128.0, 83020000.0, 35.19905881397425], [1442105856.0, 83040000.0, 35.24238895691917], [1442107584.0, 83060000.0, 35.28576179037968], [1442109312.0, 83080000.0, 35.329177345916314], [1442111040.0, 83100000.0, 35.3726356551051], [1442112768.0, 83120000.0, 35.41613674953764], [1442114496.0, 83140000.0, 35.459680660821185], [1442116224.0, 83160000.0, 35.503267420578474], [1442117952.0, 83180000.0, 35.54689706044782], [1442119680.0, 83200000.0, 35.59056961208321], [1442121408.0, 83220000.0, 35.6342851071541], [1442123136.0, 83240000.0, 35.67804357734568], [1442124864.0, 83260000.0, 35.721845054358624], [1442126592.0, 83280000.0, 35.76568956990917], [1442128320.0, 83300000.0, 35.80957715572931], [1442130048.0, 83320000.0, 35.8535078435665], [1442131776.0, 83340000.0, 35.89748166518384], [1442133504.0, 83360000.0, 35.941498652360124], [1442135232.0, 83380000.0, 35.98555883688963], [1442136960.0, 83400000.0, 36.02966225058239], [1442138688.0, 83420000.0, 36.07380892526398], [1442140416.0, 83440000.0, 36.11799889277558], [1442142144.0, 83460000.0, 36.16223218497413], [1442143872.0, 83480000.0, 36.20650883373207], [1442145600.0, 83500000.0, 36.25082887093748], [1442147328.0, 83520000.0, 36.29519232849427], [1442149056.0, 83540000.0, 36.33959923832171], [1442150784.0, 83560000.0, 36.38404963235501], [1442152512.0, 83580000.0, 36.42854354254486], [1442154240.0, 83600000.0, 36.47308100085758], [1442155968.0, 83620000.0, 36.517662039275336], [1442157696.0, 83640000.0, 36.56228668979581], [1442159424.0, 83660000.0, 36.60695498443234], [1442161152.0, 83680000.0, 36.651666955214075], [1442162880.0, 83700000.0, 36.69642263418569], [1442164608.0, 83720000.0, 36.74122205340768], [1442166336.0, 83740000.0, 36.786065244956156], [1442168064.0, 83760000.0, 36.83095224092284], [1442169792.0, 83780000.0, 36.87588307341534], [1442171520.0, 83800000.0, 36.920857774556815], [1442173248.0, 83820000.0, 36.96587637648612], [1442174976.0, 83840000.0, 37.01093891135794], [1442176704.0, 83860000.0, 37.056045411342495], [1442178432.0, 83880000.0, 37.101195908625925], [1442180160.0, 83900000.0, 37.14639043540991], [1442181888.0, 83920000.0, 37.19162902391189], [1442183616.0, 83940000.0, 37.23691170636513], [1442185344.0, 83960000.0, 37.28223851501851], [1442187072.0, 83980000.0, 37.32760948213665], [1442188800.0, 84000000.0, 37.37302464000001], [1442190528.0, 84020000.0, 37.418484020904636], [1442192256.0, 84040000.0, 37.46398765716249], [1442193984.0, 84060000.0, 37.509535581101154], [1442195712.0, 84080000.0, 37.555127825063956], [1442197440.0, 84100000.0, 37.60076442141011], [1442199168.0, 84120000.0, 37.64644540251444], [1442200896.0, 84140000.0, 37.692170800767585], [1442202624.0, 84160000.0, 37.73794064857603], [1442204352.0, 84180000.0, 37.78375497836189], [1442206080.0, 84200000.0, 37.829613822563196], [1442207808.0, 84220000.0, 37.875517213633664], [1442209536.0, 84240000.0, 37.92146518404277], [1442211264.0, 84260000.0, 37.967457766275906], [1442212992.0, 84280000.0, 38.01349499283413], [1442214720.0, 84300000.0, 38.05957689623429], [1442216448.0, 84320000.0, 38.10570350900918], [1442218176.0, 84340000.0, 38.1518748637072], [1442219904.0, 84360000.0, 38.19809099289273], [1442221632.0, 84380000.0, 38.24435192914582], [1442223360.0, 84400000.0, 38.29065770506239], [1442225088.0, 84420000.0, 38.33700835325423], [1442226816.0, 84440000.0, 38.383403906348875], [1442228544.0, 84460000.0, 38.42984439698965], [1442230272.0, 84480000.0, 38.476329857835864], [1442232000.0, 84500000.0, 38.52286032156248], [1442233728.0, 84520000.0, 38.569435820860456], [1442235456.0, 84540000.0, 38.616056388436476], [1442237184.0, 84560000.0, 38.662722057013056], [1442238912.0, 84580000.0, 38.7094328593287], [1442240640.0, 84600000.0, 38.75618882813761], [1442242368.0, 84620000.0, 38.8029899962099], [1442244096.0, 84640000.0, 38.84983639633161], [1442245824.0, 84660000.0, 38.89672806130449], [1442247552.0, 84680000.0, 38.94366502394635], [1442249280.0, 84700000.0, 38.990647317090726], [1442251008.0, 84720000.0, 39.037674973587], [1442252736.0, 84740000.0, 39.08474802630062], [1442254464.0, 84760000.0, 39.131866508112765], [1442256192.0, 84780000.0, 39.179030451920475], [1442257920.0, 84800000.0, 39.22623989063681], [1442259648.0, 84820000.0, 39.273494857190606], [1442261376.0, 84840000.0, 39.32079538452668], [1442263104.0, 84860000.0, 39.36814150560573], [1442264832.0, 84880000.0, 39.415533253404284], [1442266560.0, 84900000.0, 39.462970660914905], [1442268288.0, 84920000.0, 39.510453761145975], [1442270016.0, 84940000.0, 39.55798258712177], [1442271744.0, 84960000.0, 39.60555717188263], [1442273472.0, 84980000.0, 39.65317754848465], [1442275200.0, 85000000.0, 39.70084375], [1442276928.0, 85020000.0, 39.74855580951668], [1442278656.0, 85040000.0, 39.79631376013862], [1442280384.0, 85060000.0, 39.84411763498579], [1442282112.0, 85080000.0, 39.89196746719399], [1442283840.0, 85100000.0, 39.939863289915095], [1442285568.0, 85120000.0, 39.9878051363168], [1442287296.0, 85140000.0, 40.03579303958279], [1442289024.0, 85160000.0, 40.0838270329128], [1442290752.0, 85180000.0, 40.13190714952241], [1442292480.0, 85200000.0, 40.18003342264318], [1442294208.0, 85220000.0, 40.22820588552278], [1442295936.0, 85240000.0, 40.27642457142464], [1442297664.0, 85260000.0, 40.32468951362838], [1442299392.0, 85280000.0, 40.37300074542944], [1442301120.0, 85300000.0, 40.42135830013928], [1442302848.0, 85320000.0, 40.46976221108546], [1442304576.0, 85340000.0, 40.518212511611395], [1442306304.0, 85360000.0, 40.566709235076516], [1442308032.0, 85380000.0, 40.615252414856386], [1442309760.0, 85400000.0, 40.663842084342384], [1442311488.0, 85420000.0, 40.71247827694208], [1442313216.0, 85440000.0, 40.76116102607891], [1442314944.0, 85460000.0, 40.809890365192366], [1442316672.0, 85480000.0, 40.85866632773807], [1442318400.0, 85500000.0, 40.907488947187524], [1442320128.0, 85520000.0, 40.95635825702827], [1442321856.0, 85540000.0, 41.00527429076399], [1442323584.0, 85560000.0, 41.054237081914295], [1442325312.0, 85580000.0, 41.10324666401494], [1442327040.0, 85600000.0, 41.152303070617606], [1442328768.0, 85620000.0, 41.20140633529006], [1442330496.0, 85640000.0, 41.2505564916162], [1442332224.0, 85660000.0, 41.2997535731959], [1442333952.0, 85680000.0, 41.34899761364503], [1442335680.0, 85700000.0, 41.3982886465957], [1442337408.0, 85720000.0, 41.447626705695924], [1442339136.0, 85740000.0, 41.49701182460991], [1442340864.0, 85760000.0, 41.54644403701784], [1442342592.0, 85780000.0, 41.59592337661598], [1442344320.0, 85800000.0, 41.6454498771168], [1442346048.0, 85820000.0, 41.69502357224873], [1442347776.0, 85840000.0, 41.74464449575625], [1442349504.0, 85860000.0, 41.79431268140015], [1442351232.0, 85880000.0, 41.84402816295704], [1442352960.0, 85900000.0, 41.89379097421989], [1442354688.0, 85920000.0, 41.943601148997615], [1442356416.0, 85940000.0, 41.99345872111521], [1442358144.0, 85960000.0, 42.04336372441395], [1442359872.0, 85980000.0, 42.09331619275109], [1442361600.0, 86000000.0, 42.14331615999999], [1442363328.0, 86020000.0, 42.19336366005029], [1442365056.0, 86040000.0, 42.24345872680753], [1442366784.0, 86060000.0, 42.29360139419362], [1442368512.0, 86080000.0, 42.343791696146475], [1442370240.0, 86100000.0, 42.394029666620085], [1442371968.0, 86120000.0, 42.44431533958476], [1442373696.0, 86140000.0, 42.49464874902684], [1442375424.0, 86160000.0, 42.54502992894874], [1442377152.0, 86180000.0, 42.59545891336929], [1442378880.0, 86200000.0, 42.64593573632318], [1442380608.0, 86220000.0, 42.6964604318615], [1442382336.0, 86240000.0, 42.74703303405137], [1442384064.0, 86260000.0, 42.79765357697606], [1442385792.0, 86280000.0, 42.84832209473516], [1442387520.0, 86300000.0, 42.89903862144431], [1442389248.0, 86320000.0, 42.94980319123534], [1442390976.0, 86340000.0, 43.00061583825635], [1442392704.0, 86360000.0, 43.05147659667151], [1442394432.0, 86380000.0, 43.10238550066134], [1442396160.0, 86400000.0, 43.15334258442242], [1442397888.0, 86420000.0, 43.20434788216751], [1442399616.0, 86440000.0, 43.25540142812575], [1442401344.0, 86460000.0, 43.306503256542335], [1442403072.0, 86480000.0, 43.357653401678675], [1442404800.0, 86500000.0, 43.408851897812504], [1442406528.0, 86520000.0, 43.46009877923766], [1442408256.0, 86540000.0, 43.51139408026432], [1442409984.0, 86560000.0, 43.56273783521879], [1442411712.0, 86580000.0, 43.61413007844357], [1442413440.0, 86600000.0, 43.665570844297605], [1442415168.0, 86620000.0, 43.71706016715587], [1442416896.0, 86640000.0, 43.7685980814096], [1442418624.0, 86660000.0, 43.820184621466446], [1442420352.0, 86680000.0, 43.87181982175011], [1442422080.0, 86700000.0, 43.923503716700694], [1442423808.0, 86720000.0, 43.97523634077449], [1442425536.0, 86740000.0, 44.027017728443994], [1442427264.0, 86760000.0, 44.07884791419812], [1442428992.0, 86780000.0, 44.130726932541954], [1442430720.0, 86800000.0, 44.182654817996784], [1442432448.0, 86820000.0, 44.234631605100404], [1442434176.0, 86840000.0, 44.28665732840662], [1442435904.0, 86860000.0, 44.33873202248574], [1442437632.0, 86880000.0, 44.39085572192425], [1442439360.0, 86900000.0, 44.443028461324886], [1442441088.0, 86920000.0, 44.49525027530685], [1442442816.0, 86940000.0, 44.54752119850549], [1442444544.0, 86960000.0, 44.59984126557247], [1442446272.0, 86980000.0, 44.65221051117589], [1442448000.0, 87000000.0, 44.704628969999966], [1442449728.0, 87020000.0, 44.757096676745476], [1442451456.0, 87040000.0, 44.8096136661293], [1442453184.0, 87060000.0, 44.862179972884675], [1442454912.0, 87080000.0, 44.914795631761315], [1442456640.0, 87100000.0, 44.967460677525125], [1442458368.0, 87120000.0, 45.020175144958316], [1442460096.0, 87140000.0, 45.07293906885963], [1442461824.0, 87160000.0, 45.125752484043915], [1442463552.0, 87180000.0, 45.17861542534257], [1442465280.0, 87200000.0, 45.23152792760322], [1442467008.0, 87220000.0, 45.28449002568983], [1442468736.0, 87240000.0, 45.337501754482844], [1442470464.0, 87260000.0, 45.39056314887899], [1442472192.0, 87280000.0, 45.44367424379129], [1442473920.0, 87300000.0, 45.49683507414932], [1442475648.0, 87320000.0, 45.55004567489881], [1442477376.0, 87340000.0, 45.60330608100211], [1442479104.0, 87360000.0, 45.65661632743777], [1442480832.0, 87380000.0, 45.7099764492007], [1442482560.0, 87400000.0, 45.763386481302405], [1442484288.0, 87420000.0, 45.81684645877059], [1442486016.0, 87440000.0, 45.870356416649386], [1442487744.0, 87460000.0, 45.92391638999946], [1442489472.0, 87480000.0, 45.977526413897664], [1442491200.0, 87500000.0, 46.0311865234375], [1442492928.0, 87520000.0, 46.08489675372871], [1442494656.0, 87540000.0, 46.13865713989744], [1442496384.0, 87560000.0, 46.192467717086416], [1442498112.0, 87580000.0, 46.24632852045461], [1442499840.0, 87600000.0, 46.30023958517759], [1442501568.0, 87620000.0, 46.354200946447236], [1442503296.0, 87640000.0, 46.4082126394718], [1442505024.0, 87660000.0, 46.46227469947622], [1442506752.0, 87680000.0, 46.51638716170162], [1442508480.0, 87700000.0, 46.57055006140569], [1442510208.0, 87720000.0, 46.624763433862604], [1442511936.0, 87740000.0, 46.679027314362855], [1442513664.0, 87760000.0, 46.733341738213596], [1442515392.0, 87780000.0, 46.787706740738265], [1442517120.0, 87800000.0, 46.842122357276786], [1442518848.0, 87820000.0, 46.89658862318568], [1442520576.0, 87840000.0, 46.95110557383782], [1442522304.0, 87860000.0, 47.00567324462254], [1442524032.0, 87880000.0, 47.0602916709458], [1442525760.0, 87900000.0, 47.11496088822988], [1442527488.0, 87920000.0, 47.16968093191369], [1442529216.0, 87940000.0, 47.22445183745254], [1442530944.0, 87960000.0, 47.279273640318195], [1442532672.0, 87980000.0, 47.3341463759991], [1442534400.0, 88000000.0, 47.38907008000002], [1442536128.0, 88020000.0, 47.44404478784228], [1442537856.0, 88040000.0, 47.49907053506381], [1442539584.0, 88060000.0, 47.554147357218916], [1442541312.0, 88080000.0, 47.609275289878546], [1442543040.0, 88100000.0, 47.66445436863011], [1442544768.0, 88120000.0, 47.71968462907748], [1442546496.0, 88140000.0, 47.77496610684123], [1442548224.0, 88160000.0, 47.830298837558324], [1442549952.0, 88180000.0, 47.88568285688224], [1442551680.0, 88200000.0, 47.9411182004832], [1442553408.0, 88220000.0, 47.996604904047736], [1442555136.0, 88240000.0, 48.052143003279134], [1442556864.0, 88260000.0, 48.107732533897064], [1442558592.0, 88280000.0, 48.16337353163781], [1442560320.0, 88300000.0, 48.2190660322543], [1442562048.0, 88320000.0, 48.27481007151595], [1442563776.0, 88340000.0, 48.33060568520867], [1442565504.0, 88360000.0, 48.38645290913516], [1442567232.0, 88380000.0, 48.44235177911445], [1442568960.0, 88400000.0, 48.49830233098239], [1442570688.0, 88420000.0, 48.55430460059123], [1442572416.0, 88440000.0, 48.61035862380983], [1442574144.0, 88460000.0, 48.66646443652377], [1442575872.0, 88480000.0, 48.722622074635105], [1442577600.0, 88500000.0, 48.77883157406248], [1442579328.0, 88520000.0, 48.8350929707413], [1442581056.0, 88540000.0, 48.891406300623345], [1442582784.0, 88560000.0, 48.94777159967725], [1442584512.0, 88580000.0, 49.00418890388811], [1442586240.0, 88600000.0, 49.060658249257585], [1442587968.0, 88620000.0, 49.11717967180419], [1442589696.0, 88640000.0, 49.173753207562854], [1442591424.0, 88660000.0, 49.23037889258518], [1442593152.0, 88680000.0, 49.28705676293951], [1442594880.0, 88700000.0, 49.343786854710686], [1442596608.0, 88720000.0, 49.40056920400032], [1442598336.0, 88740000.0, 49.457403846926596], [1442600064.0, 88760000.0, 49.51429081962427], [1442601792.0, 88780000.0, 49.57123015824498], [1442603520.0, 88800000.0, 49.62822189895683], [1442605248.0, 88820000.0, 49.68526607794455], [1442606976.0, 88840000.0, 49.74236273140978], [1442608704.0, 88860000.0, 49.79951189557053], [1442610432.0, 88880000.0, 49.85671360666177], [1442612160.0, 88900000.0, 49.91396790093492], [1442613888.0, 88920000.0, 49.97127481465812], [1442615616.0, 88940000.0, 50.028634384116366], [1442617344.0, 88960000.0, 50.08604664561116], [1442619072.0, 88980000.0, 50.1435116354607], [1442620800.0, 89000000.0, 50.20102939000001], [1442622528.0, 89020000.0, 50.25859994558068], [1442624256.0, 89040000.0, 50.316223338571135], [1442625984.0, 89060000.0, 50.37389960535641], [1442627712.0, 89080000.0, 50.431628782338194], [1442629440.0, 89100000.0, 50.48941090593512], [1442631168.0, 89120000.0, 50.547246012582285], [1442632896.0, 89140000.0, 50.60513413873163], [1442634624.0, 89160000.0, 50.663075320851874], [1442636352.0, 89180000.0, 50.72106959542833], [1442638080.0, 89200000.0, 50.7791169989632], [1442639808.0, 89220000.0, 50.83721756797531], [1442641536.0, 89240000.0, 50.8953713390002], [1442643264.0, 89260000.0, 50.95357834859034], [1442644992.0, 89280000.0, 51.011838633314774], [1442646720.0, 89300000.0, 51.070152229759294], [1442648448.0, 89320000.0, 51.12851917452662], [1442650176.0, 89340000.0, 51.18693950423602], [1442651904.0, 89360000.0, 51.245413255523765], [1442653632.0, 89380000.0, 51.30394046504267], [1442655360.0, 89400000.0, 51.36252116946239], [1442657088.0, 89420000.0, 51.42115540546947], [1442658816.0, 89440000.0, 51.479843209767125], [1442660544.0, 89460000.0, 51.538584619075294], [1442662272.0, 89480000.0, 51.59737967013091], [1442664000.0, 89500000.0, 51.65622839968748], [1442665728.0, 89520000.0, 51.71513084451549], [1442667456.0, 89540000.0, 51.77408704140211], [1442669184.0, 89560000.0, 51.83309702715129], [1442670912.0, 89580000.0, 51.89216083858394], [1442672640.0, 89600000.0, 51.95127851253762], [1442674368.0, 89620000.0, 52.01045008586674], [1442676096.0, 89640000.0, 52.06967559544265], [1442677824.0, 89660000.0, 52.128955078153325], [1442679552.0, 89680000.0, 52.188288570903794], [1442681280.0, 89700000.0, 52.24767611061572], [1442683008.0, 89720000.0, 52.307117734227646], [1442684736.0, 89740000.0, 52.36661347869507], [1442686464.0, 89760000.0, 52.42616338099021], [1442688192.0, 89780000.0, 52.485767478102105], [1442689920.0, 89800000.0, 52.545425807036814], [1442691648.0, 89820000.0, 52.605138404817026], [1442693376.0, 89840000.0, 52.66490530848254], [1442695104.0, 89860000.0, 52.72472655508978], [1442696832.0, 89880000.0, 52.784602181712124], [1442698560.0, 89900000.0, 52.844532225439906], [1442700288.0, 89920000.0, 52.90451672338022], [1442702016.0, 89940000.0, 52.964555712657], [1442703744.0, 89960000.0, 53.02464923041128], [1442705472.0, 89980000.0, 53.084797313800685], [1442707200.0, 90000000.0, 53.145], [1442708928.0, 90020000.0, 53.20525732620073], [1442710656.0, 90040000.0, 53.26556932961126], [1442712384.0, 90060000.0, 53.32593604745704], [1442714112.0, 90080000.0, 53.38635751698023], [1442715840.0, 90100000.0, 53.44683377544009], [1442717568.0, 90120000.0, 53.50736486011265], [1442719296.0, 90140000.0, 53.567950808290824], [1442721024.0, 90160000.0, 53.62859165728463], [1442722752.0, 90180000.0, 53.689287444420856], [1442724480.0, 90200000.0, 53.75003820704318], [1442726208.0, 90220000.0, 53.810843982512424], [1442727936.0, 90240000.0, 53.87170480820607], [1442729664.0, 90260000.0, 53.932620721518816], [1442731392.0, 90280000.0, 53.993591759862085], [1442733120.0, 90300000.0, 54.05461796066428], [1442734848.0, 90320000.0, 54.1156993613709], [1442736576.0, 90340000.0, 54.17683599944424], [1442738304.0, 90360000.0, 54.238027912363556], [1442740032.0, 90380000.0, 54.29927513762523], [1442741760.0, 90400000.0, 54.360577712742376], [1442743488.0, 90420000.0, 54.42193567524531], [1442745216.0, 90440000.0, 54.48334906268116], [1442746944.0, 90460000.0, 54.54481791261401], [1442748672.0, 90480000.0, 54.60634226262511], [1442750400.0, 90500000.0, 54.66792215031252], [1442752128.0, 90520000.0, 54.7295576132913], [1442753856.0, 90540000.0, 54.79124868919364], [1442755584.0, 90560000.0, 54.85299541566853], [1442757312.0, 90580000.0, 54.91479783038217], [1442759040.0, 90600000.0, 54.976655971017614], [1442760768.0, 90620000.0, 55.0385698752749], [1442762496.0, 90640000.0, 55.10053958087125], [1442764224.0, 90660000.0, 55.16256512554074], [1442765952.0, 90680000.0, 55.22464654703445], [1442767680.0, 90700000.0, 55.286783883120705], [1442769408.0, 90720000.0, 55.34897717158455], [1442771136.0, 90740000.0, 55.41122645022835], [1442772864.0, 90760000.0, 55.473531756871296], [1442774592.0, 90780000.0, 55.53589312934962], [1442776320.0, 90800000.0, 55.59831060551681], [1442778048.0, 90820000.0, 55.66078422324317], [1442779776.0, 90840000.0, 55.7233140204161], [1442781504.0, 90860000.0, 55.785900034940184], [1442783232.0, 90880000.0, 55.84854230473688], [1442784960.0, 90900000.0, 55.911240867744894], [1442786688.0, 90920000.0, 55.97399576191985], [1442788416.0, 90940000.0, 56.03680702523444], [1442790144.0, 90960000.0, 56.09967469567859], [1442791872.0, 90980000.0, 56.16259881125913], [1442793600.0, 91000000.0, 56.22557941], [1442795328.0, 91020000.0, 56.288616529942324], [1442797056.0, 91040000.0, 56.35171020914418], [1442798784.0, 91060000.0, 56.414860485680876], [1442800512.0, 91080000.0, 56.47806739764472], [1442802240.0, 91100000.0, 56.54133098314507], [1442803968.0, 91120000.0, 56.6046512803086], [1442805696.0, 91140000.0, 56.66802832727888], [1442807424.0, 91160000.0, 56.731462162216594], [1442809152.0, 91180000.0, 56.79495282329973], [1442810880.0, 91200000.0, 56.858500348723176], [1442812608.0, 91220000.0, 56.92210477669916], [1442814336.0, 91240000.0, 56.985766145456815], [1442816064.0, 91260000.0, 57.04948449324248], [1442817792.0, 91280000.0, 57.11325985831981], [1442819520.0, 91300000.0, 57.177092278969326], [1442821248.0, 91320000.0, 57.24098179348877], [1442822976.0, 91340000.0, 57.3049284401932], [1442824704.0, 91360000.0, 57.36893225741455], [1442826432.0, 91380000.0, 57.432993283502185], [1442828160.0, 91400000.0, 57.49711155682242], [1442829888.0, 91420000.0, 57.56128711575875], [1442831616.0, 91440000.0, 57.625519998711994], [1442833344.0, 91460000.0, 57.68981024409998], [1442835072.0, 91480000.0, 57.75415789035771], [1442836800.0, 91500000.0, 57.81856297593752], [1442838528.0, 91520000.0, 57.8830255393087], [1442840256.0, 91540000.0, 57.94754561895795], [1442841984.0, 91560000.0, 58.01212325338902], [1442843712.0, 91580000.0, 58.076758481122816], [1442845440.0, 91600000.0, 58.14145134069762], [1442847168.0, 91620000.0, 58.20620187066871], [1442848896.0, 91640000.0, 58.27101010960864], [1442850624.0, 91660000.0, 58.33587609610729], [1442852352.0, 91680000.0, 58.40079986877154], [1442854080.0, 91700000.0, 58.46578146622569], [1442855808.0, 91720000.0, 58.53082092711113], [1442857536.0, 91740000.0, 58.595918290086416], [1442859264.0, 91760000.0, 58.66107359382757], [1442860992.0, 91780000.0, 58.72628687702759], [1442862720.0, 91800000.0, 58.791558178396784], [1442864448.0, 91820000.0, 58.85688753666284], [1442866176.0, 91840000.0, 58.92227499057045], [1442867904.0, 91860000.0, 58.98772057888177], [1442869632.0, 91880000.0, 59.0532243403761], [1442871360.0, 91900000.0, 59.11878631384989], [1442873088.0, 91920000.0, 59.1844065381171], [1442874816.0, 91940000.0, 59.25008505200874], [1442876544.0, 91960000.0, 59.315821894373116], [1442878272.0, 91980000.0, 59.38161710407592], [1442880000.0, 92000000.0, 59.447470719999984], [1442881728.0, 92020000.0, 59.51338278104552], [1442883456.0, 92040000.0, 59.57935332612994], [1442885184.0, 92060000.0, 59.64538239418791], [1442886912.0, 92080000.0, 59.71147002417157], [1442888640.0, 92100000.0, 59.77761625505013], [1442890368.0, 92120000.0, 59.84382112581016], [1442892096.0, 92140000.0, 59.91008467545567], [1442893824.0, 92160000.0, 59.97640694300775], [1442895552.0, 92180000.0, 60.04278796750501], [1442897280.0, 92200000.0, 60.109227788003224], [1442899008.0, 92220000.0, 60.17572644357546], [1442900736.0, 92240000.0, 60.24228397331229], [1442902464.0, 92260000.0, 60.308900416321436], [1442904192.0, 92280000.0, 60.37557581172793], [1442905920.0, 92300000.0, 60.44231019867432], [1442907648.0, 92320000.0, 60.50910361632025], [1442909376.0, 92340000.0, 60.57595610384296], [1442911104.0, 92360000.0, 60.6428677004368], [1442912832.0, 92380000.0, 60.70983844531354], [1442914560.0, 92400000.0, 60.7768683777024], [1442916288.0, 92420000.0, 60.84395753684984], [1442918016.0, 92440000.0, 60.911105962019626], [1442919744.0, 92460000.0, 60.9783136924931], [1442921472.0, 92480000.0, 61.04558076756871], [1442923200.0, 92500000.0, 61.1129072265625], [1442924928.0, 92520000.0, 61.18029310880775], [1442926656.0, 92540000.0, 61.247738453655074], [1442928384.0, 92560000.0, 61.315243300472666], [1442930112.0, 92580000.0, 61.38280768864584], [1442931840.0, 92600000.0, 61.45043165757759], [1442933568.0, 92620000.0, 61.51811524668808], [1442935296.0, 92640000.0, 61.58585849541484], [1442937024.0, 92660000.0, 61.65366144321305], [1442938752.0, 92680000.0, 61.72152412955507], [1442940480.0, 92700000.0, 61.789446593930684], [1442942208.0, 92720000.0, 61.85742887584724], [1442943936.0, 92740000.0, 61.92547101482929], [1442945664.0, 92760000.0, 61.99357305041903], [1442947392.0, 92780000.0, 62.06173502217591], [1442949120.0, 92800000.0, 62.12995696967677], [1442950848.0, 92820000.0, 62.19823893251611], [1442952576.0, 92840000.0, 62.26658095030566], [1442954304.0, 92860000.0, 62.33498306267457], [1442956032.0, 92880000.0, 62.40344530926964], [1442957760.0, 92900000.0, 62.47196772975487], [1442959488.0, 92920000.0, 62.540550363811924], [1442961216.0, 92940000.0, 62.609193251139786], [1442962944.0, 92960000.0, 62.67789643145483], [1442964672.0, 92980000.0, 62.746659944491135], [1442966400.0, 93000000.0, 62.815483830000026], [1442968128.0, 93020000.0, 62.88436812775032], [1442969856.0, 93040000.0, 62.95331287752845], [1442971584.0, 93060000.0, 63.02231811913814], [1442973312.0, 93080000.0, 63.09138389240079], [1442975040.0, 93100000.0, 63.16051023715511], [1442976768.0, 93120000.0, 63.229697193257316], [1442978496.0, 93140000.0, 63.29894480058127], [1442980224.0, 93160000.0, 63.36825309901816], [1442981952.0, 93180000.0, 63.43762212847669], [1442983680.0, 93200000.0, 63.5070519288832], [1442985408.0, 93220000.0, 63.57654254018137], [1442987136.0, 93240000.0, 63.646094002332575], [1442988864.0, 93260000.0, 63.71570635531551], [1442990592.0, 93280000.0, 63.78537963912643], [1442992320.0, 93300000.0, 63.85511389377929], [1442994048.0, 93320000.0, 63.92490915930538], [1442995776.0, 93340000.0, 63.99476547575352], [1442997504.0, 93360000.0, 64.0646828831902], [1442999232.0, 93380000.0, 64.13466142169929], [1443000960.0, 93400000.0, 64.2047011313824], [1443002688.0, 93420000.0, 64.27480205235847], [1443004416.0, 93440000.0, 64.34496422476406], [1443006144.0, 93460000.0, 64.41518768875342], [1443007872.0, 93480000.0, 64.48547248449816], [1443009600.0, 93500000.0, 64.55581865218748], [1443011328.0, 93520000.0, 64.62622623202834], [1443013056.0, 93540000.0, 64.696695264245], [1443014784.0, 93560000.0, 64.76722578907949], [1443016512.0, 93580000.0, 64.83781784679135], [1443018240.0, 93600000.0, 64.90847147765757], [1443019968.0, 93620000.0, 64.97918672197302], [1443021696.0, 93640000.0, 65.0499636200499], [1443023424.0, 93660000.0, 65.12080221221801], [1443025152.0, 93680000.0, 65.19170253882496], [1443026880.0, 93700000.0, 65.26266464023568], [1443028608.0, 93720000.0, 65.33368855683295], [1443030336.0, 93740000.0, 65.40477432901704], [1443032064.0, 93760000.0, 65.4759219972057], [1443033792.0, 93780000.0, 65.54713160183462], [1443035520.0, 93800000.0, 65.61840318335685], [1443037248.0, 93820000.0, 65.68973678224299], [1443038976.0, 93840000.0, 65.76113243898162], [1443040704.0, 93860000.0, 65.83259019407856], [1443042432.0, 93880000.0, 65.9041100880576], [1443044160.0, 93900000.0, 65.97569216145993], [1443045888.0, 93920000.0, 66.04733645484438], [1443047616.0, 93940000.0, 66.11904300878761], [1443049344.0, 93960000.0, 66.1908118638838], [1443051072.0, 93980000.0, 66.26264306074472], [1443052800.0, 94000000.0, 66.33453664000001], [1443054528.0, 94020000.0, 66.40649264229671], [1443056256.0, 94040000.0, 66.47851110829977], [1443057984.0, 94060000.0, 66.55059207869164], [1443059712.0, 94080000.0, 66.62273559417243], [1443061440.0, 94100000.0, 66.6949416954601], [1443063168.0, 94120000.0, 66.76721042329014], [1443064896.0, 94140000.0, 66.83954181841567], [1443066624.0, 94160000.0, 66.91193592160771], [1443068352.0, 94180000.0, 66.98439277365476], [1443070080.0, 94200000.0, 67.0569124153632], [1443071808.0, 94220000.0, 67.12949488755696], [1443073536.0, 94240000.0, 67.20214023107765], [1443075264.0, 94260000.0, 67.27484848678479], [1443076992.0, 94280000.0, 67.34761969555541], [1443078720.0, 94300000.0, 67.4204538982843], [1443080448.0, 94320000.0, 67.49335113588407], [1443082176.0, 94340000.0, 67.56631144928485], [1443083904.0, 94360000.0, 67.63933487943478], [1443085632.0, 94380000.0, 67.71242146729952], [1443087360.0, 94400000.0, 67.78557125386239], [1443089088.0, 94420000.0, 67.85878428012471], [1443090816.0, 94440000.0, 67.93206058710537], [1443092544.0, 94460000.0, 68.00540021584092], [1443094272.0, 94480000.0, 68.07880320738596], [1443096000.0, 94500000.0, 68.15226960281247], [1443097728.0, 94520000.0, 68.22579944321053], [1443099456.0, 94540000.0, 68.29939276968776], [1443101184.0, 94560000.0, 68.37304962336952], [1443102912.0, 94580000.0, 68.44677004539918], [1443104640.0, 94600000.0, 68.52055407693766], [1443106368.0, 94620000.0, 68.59440175916356], [1443108096.0, 94640000.0, 68.6683131332737], [1443109824.0, 94660000.0, 68.74228824048215], [1443111552.0, 94680000.0, 68.81632712202124], [1443113280.0, 94700000.0, 68.89042981914072], [1443115008.0, 94720000.0, 68.96459637310828], [1443116736.0, 94740000.0, 69.03882682520951], [1443118464.0, 94760000.0, 69.11312121674766], [1443120192.0, 94780000.0, 69.18747958904373], [1443121920.0, 94800000.0, 69.26190198343683], [1443123648.0, 94820000.0, 69.33638844128346], [1443125376.0, 94840000.0, 69.41093900395836], [1443127104.0, 94860000.0, 69.48555371285383], [1443128832.0, 94880000.0, 69.56023260937995], [1443130560.0, 94900000.0, 69.63497573496491], [1443132288.0, 94920000.0, 69.70978313105445], [1443134016.0, 94940000.0, 69.78465483911226], [1443135744.0, 94960000.0, 69.8595909006199], [1443137472.0, 94980000.0, 69.93459135707671], [1443139200.0, 95000000.0, 70.00965625], [1443140928.0, 95020000.0, 70.08478562092476], [1443142656.0, 95040000.0, 70.15997951140389], [1443144384.0, 95060000.0, 70.23523796300827], [1443146112.0, 95080000.0, 70.31056101732648], [1443147840.0, 95100000.0, 70.38594871596507], [1443149568.0, 95120000.0, 70.4614011005485], [1443151296.0, 95140000.0, 70.53691821271886], [1443153024.0, 95160000.0, 70.61250009413648], [1443154752.0, 95180000.0, 70.6881467864793], [1443156480.0, 95200000.0, 70.76385833144319], [1443158208.0, 95220000.0, 70.83963477074207], [1443159936.0, 95240000.0, 70.91547614610752], [1443161664.0, 95260000.0, 70.99138249928924], [1443163392.0, 95280000.0, 71.06735387205475], [1443165120.0, 95300000.0, 71.14339030618926], [1443166848.0, 95320000.0, 71.21949184349634], [1443168576.0, 95340000.0, 71.29565852579707], [1443170304.0, 95360000.0, 71.3718903949306], [1443172032.0, 95380000.0, 71.44818749275406], [1443173760.0, 95400000.0, 71.52454986114236], [1443175488.0, 95420000.0, 71.60097754198856], [1443177216.0, 95440000.0, 71.6774705772034], [1443178944.0, 95460000.0, 71.75402900871565], [1443180672.0, 95480000.0, 71.83065287847214], [1443182400.0, 95500000.0, 71.90734222843754], [1443184128.0, 95520000.0, 71.98409710059433], [1443185856.0, 95540000.0, 72.0609175369433], [1443187584.0, 95560000.0, 72.13780357950277], [1443189312.0, 95580000.0, 72.21475527030941], [1443191040.0, 95600000.0, 72.2917726514176], [1443192768.0, 95620000.0, 72.36885576489973], [1443194496.0, 95640000.0, 72.44600465284628], [1443196224.0, 95660000.0, 72.52321935736559], [1443197952.0, 95680000.0, 72.60049992058391], [1443199680.0, 95700000.0, 72.67784638464572], [1443201408.0, 95720000.0, 72.75525879171319], [1443203136.0, 95740000.0, 72.83273718396677], [1443204864.0, 95760000.0, 72.91028160360473], [1443206592.0, 95780000.0, 72.98789209284324], [1443208320.0, 95800000.0, 73.06556869391679], [1443210048.0, 95820000.0, 73.14331144907761], [1443211776.0, 95840000.0, 73.22112040059592], [1443213504.0, 95860000.0, 73.29899559076021], [1443215232.0, 95880000.0, 73.37693706187672], [1443216960.0, 95900000.0, 73.45494485626989], [1443218688.0, 95920000.0, 73.5330190162821], [1443220416.0, 95940000.0, 73.61115958427368], [1443222144.0, 95960000.0, 73.68936660262324], [1443223872.0, 95980000.0, 73.7676401137272], [1443225600.0, 96000000.0, 73.84598016], [1443227328.0, 96020000.0, 73.92438678387435], [1443229056.0, 96040000.0, 74.0028600278008], [1443230784.0, 96060000.0, 74.08139993424811], [1443232512.0, 96080000.0, 74.16000654570294], [1443234240.0, 96100000.0, 74.23867990467008], [1443235968.0, 96120000.0, 74.31742005367245], [1443237696.0, 96140000.0, 74.39622703525092], [1443239424.0, 96160000.0, 74.47510089196442], [1443241152.0, 96180000.0, 74.55404166639018], [1443242880.0, 96200000.0, 74.63304940112316], [1443244608.0, 96220000.0, 74.71212413877679], [1443246336.0, 96240000.0, 74.79126592198227], [1443248064.0, 96260000.0, 74.87047479338894], [1443249792.0, 96280000.0, 74.94975079566444], [1443251520.0, 96300000.0, 75.02909397149433], [1443253248.0, 96320000.0, 75.10850436358221], [1443254976.0, 96340000.0, 75.18798201465006], [1443256704.0, 96360000.0, 75.26752696743758], [1443258432.0, 96380000.0, 75.34713926470303], [1443260160.0, 96400000.0, 75.42681894922242], [1443261888.0, 96420000.0, 75.50656606379], [1443263616.0, 96440000.0, 75.58638065121825], [1443265344.0, 96460000.0, 75.6662627543376], [1443267072.0, 96480000.0, 75.74621241599674], [1443268800.0, 96500000.0, 75.82622967906251], [1443270528.0, 96520000.0, 75.90631458641973], [1443272256.0, 96540000.0, 75.98646718097157], [1443273984.0, 96560000.0, 76.06668750563928], [1443275712.0, 96580000.0, 76.14697560336204], [1443277440.0, 96600000.0, 76.22733151709761], [1443279168.0, 96620000.0, 76.30775528982154], [1443280896.0, 96640000.0, 76.38824696452768], [1443282624.0, 96660000.0, 76.46880658422813], [1443284352.0, 96680000.0, 76.54943419195297], [1443286080.0, 96700000.0, 76.63012983075068], [1443287808.0, 96720000.0, 76.71089354368777], [1443289536.0, 96740000.0, 76.79172537384885], [1443291264.0, 96760000.0, 76.872625364337], [1443292992.0, 96780000.0, 76.95359355827324], [1443294720.0, 96800000.0, 77.03462999879677], [1443296448.0, 96820000.0, 77.11573472906528], [1443298176.0, 96840000.0, 77.19690779225428], [1443299904.0, 96860000.0, 77.27814923155782], [1443301632.0, 96880000.0, 77.35945909018793], [1443303360.0, 96900000.0, 77.44083741137487], [1443305088.0, 96920000.0, 77.52228423836735], [1443306816.0, 96940000.0, 77.60379961443199], [1443308544.0, 96960000.0, 77.68538358285376], [1443310272.0, 96980000.0, 77.76703618693598], [1443312000.0, 97000000.0, 77.84875746999995], [1443313728.0, 97020000.0, 77.93054747538557], [1443315456.0, 97040000.0, 78.01240624645058], [1443317184.0, 97060000.0, 78.09433382657114], [1443318912.0, 97080000.0, 78.17633025914179], [1443320640.0, 97100000.0, 78.25839558757514], [1443322368.0, 97120000.0, 78.340529855302], [1443324096.0, 97140000.0, 78.42273310577173], [1443325824.0, 97160000.0, 78.50500538245159], [1443327552.0, 97180000.0, 78.58734672882744], [1443329280.0, 97200000.0, 78.66975718840322], [1443331008.0, 97220000.0, 78.75223680470108], [1443332736.0, 97240000.0, 78.83478562126173], [1443334464.0, 97260000.0, 78.91740368164386], [1443336192.0, 97280000.0, 79.00009102942457], [1443337920.0, 97300000.0, 79.08284770819932], [1443339648.0, 97320000.0, 79.16567376158169], [1443341376.0, 97340000.0, 79.24856923320378], [1443343104.0, 97360000.0, 79.33153416671585], [1443344832.0, 97380000.0, 79.41456860578639], [1443346560.0, 97400000.0, 79.49767259410241], [1443348288.0, 97420000.0, 79.58084617536908], [1443350016.0, 97440000.0, 79.66408939330988], [1443351744.0, 97460000.0, 79.74740229166673], [1443353472.0, 97480000.0, 79.83078491419974], [1443355200.0, 97500000.0, 79.9142373046875], [1443356928.0, 97520000.0, 79.99775950692678], [1443358656.0, 97540000.0, 80.0813515647327], [1443360384.0, 97560000.0, 80.16501352193889], [1443362112.0, 97580000.0, 80.24874542239708], [1443363840.0, 97600000.0, 80.33254730997758], [1443365568.0, 97620000.0, 80.41641922856893], [1443367296.0, 97640000.0, 80.50036122207786], [1443369024.0, 97660000.0, 80.58437333442988], [1443370752.0, 97680000.0, 80.66845560956853], [1443372480.0, 97700000.0, 80.75260809145568], [1443374208.0, 97720000.0, 80.8368308240719], [1443375936.0, 97740000.0, 80.92112385141574], [1443377664.0, 97760000.0, 81.00548721750447], [1443379392.0, 97780000.0, 81.08992096637355], [1443381120.0, 97800000.0, 81.17442514207677], [1443382848.0, 97820000.0, 81.25899978868658], [1443384576.0, 97840000.0, 81.34364495029351], [1443386304.0, 97860000.0, 81.4283606710066], [1443388032.0, 97880000.0, 81.5131469949535], [1443389760.0, 97900000.0, 81.59800396627985], [1443391488.0, 97920000.0, 81.68293162915018], [1443393216.0, 97940000.0, 81.76793002774701], [1443394944.0, 97960000.0, 81.85299920627146], [1443396672.0, 97980000.0, 81.93813920894317], [1443398400.0, 98000000.0, 82.02335008000004], [1443400128.0, 98020000.0, 82.10863186369835], [1443401856.0, 98040000.0, 82.19398460431312], [1443403584.0, 98060000.0, 82.27940834613739], [1443405312.0, 98080000.0, 82.36490313348305], [1443407040.0, 98100000.0, 82.45046901068011], [1443408768.0, 98120000.0, 82.53610602207716], [1443410496.0, 98140000.0, 82.62181421204131], [1443412224.0, 98160000.0, 82.70759362495802], [1443413952.0, 98180000.0, 82.79344430523112], [1443415680.0, 98200000.0, 82.87936629728321], [1443417408.0, 98220000.0, 82.965359645555], [1443419136.0, 98240000.0, 83.05142439450599], [1443420864.0, 98260000.0, 83.13756058861397], [1443422592.0, 98280000.0, 83.22376827237508], [1443424320.0, 98300000.0, 83.31004749030431], [1443426048.0, 98320000.0, 83.39639828693484], [1443427776.0, 98340000.0, 83.48282070681836], [1443429504.0, 98360000.0, 83.56931479452525], [1443431232.0, 98380000.0, 83.65588059464415], [1443432960.0, 98400000.0, 83.74251815178239], [1443434688.0, 98420000.0, 83.82922751056573], [1443436416.0, 98440000.0, 83.9160087156383], [1443438144.0, 98460000.0, 84.00286181166307], [1443439872.0, 98480000.0, 84.0897868433212], [1443441600.0, 98500000.0, 84.17678385531248], [1443443328.0, 98520000.0, 84.26385289235539], [1443445056.0, 98540000.0, 84.35099399918663], [1443446784.0, 98560000.0, 84.43820722056174], [1443448512.0, 98580000.0, 84.52549260125457], [1443450240.0, 98600000.0, 84.61285018605757], [1443451968.0, 98620000.0, 84.70028001978186], [1443453696.0, 98640000.0, 84.78778214725693], [1443455424.0, 98660000.0, 84.87535661333084], [1443457152.0, 98680000.0, 84.96300346287039], [1443458880.0, 98700000.0, 85.05072274076068], [1443460608.0, 98720000.0, 85.1385144919056], [1443462336.0, 98740000.0, 85.22637876122747], [1443464064.0, 98760000.0, 85.31431559366716], [1443465792.0, 98780000.0, 85.40232503418424], [1443467520.0, 98800000.0, 85.49040712775682], [1443469248.0, 98820000.0, 85.57856191938143], [1443470976.0, 98840000.0, 85.66678945407348], [1443472704.0, 98860000.0, 85.75508977686658], [1443474432.0, 98880000.0, 85.84346293281345], [1443476160.0, 98900000.0, 85.93190896698493], [1443477888.0, 98920000.0, 86.02042792447061], [1443479616.0, 98940000.0, 86.10901985037886], [1443481344.0, 98960000.0, 86.19768478983644], [1443483072.0, 98980000.0, 86.28642278798876], [1443484800.0, 99000000.0, 86.37523389000002], [1443486528.0, 99020000.0, 86.46411814105275], [1443488256.0, 99040000.0, 86.55307558634841], [1443489984.0, 99060000.0, 86.6421062711069], [1443491712.0, 99080000.0, 86.73121024056665], [1443493440.0, 99100000.0, 86.8203875399851], [1443495168.0, 99120000.0, 86.90963821463798], [1443496896.0, 99140000.0, 86.9989623098197], [1443498624.0, 99160000.0, 87.08835987084358], [1443500352.0, 99180000.0, 87.17783094304119], [1443502080.0, 99200000.0, 87.26737557176318], [1443503808.0, 99220000.0, 87.3569938023786], [1443505536.0, 99240000.0, 87.44668568027507], [1443507264.0, 99260000.0, 87.53645125085924], [1443508992.0, 99280000.0, 87.62629055955605], [1443510720.0, 99300000.0, 87.71620365180928], [1443512448.0, 99320000.0, 87.80619057308152], [1443514176.0, 99340000.0, 87.89625136885368], [1443515904.0, 99360000.0, 87.98638608462585], [1443517632.0, 99380000.0, 88.07659476591635], [1443519360.0, 99400000.0, 88.16687745826239], [1443521088.0, 99420000.0, 88.25723420721994], [1443522816.0, 99440000.0, 88.3476650583636], [1443524544.0, 99460000.0, 88.43817005728657], [1443526272.0, 99480000.0, 88.52874924960099], [1443528000.0, 99500000.0, 88.61940268093747], [1443529728.0, 99520000.0, 88.71013039694557], [1443531456.0, 99540000.0, 88.80093244329339], [1443533184.0, 99560000.0, 88.89180886566778], [1443534912.0, 99580000.0, 88.98275970977441], [1443536640.0, 99600000.0, 89.07378502133766], [1443538368.0, 99620000.0, 89.16488484610042], [1443540096.0, 99640000.0, 89.25605922982476], [1443541824.0, 99660000.0, 89.34730821829099], [1443543552.0, 99680000.0, 89.43863185729866], [1443545280.0, 99700000.0, 89.53003019266575], [1443547008.0, 99720000.0, 89.6215032702289], [1443548736.0, 99740000.0, 89.71305113584395], [1443550464.0, 99760000.0, 89.8046738353851], [1443552192.0, 99780000.0, 89.89637141474539], [1443553920.0, 99800000.0, 89.98814391983682], [1443555648.0, 99820000.0, 90.07999139658989], [1443557376.0, 99840000.0, 90.17191389095422], [1443559104.0, 99860000.0, 90.2639114488979], [1443560832.0, 99880000.0, 90.3559841164078], [1443562560.0, 99900000.0, 90.44813193948993], [1443564288.0, 99920000.0, 90.54035496416871], [1443566016.0, 99940000.0, 90.6326532364875], [1443567744.0, 99960000.0, 90.72502680250857], [1443569472.0, 99980000.0, 90.81747570831276]] \ No newline at end of file
diff --git a/tensorflow/tensorboard/app/demo/data/runs.json b/tensorflow/tensorboard/app/demo/data/runs.json
new file mode 100644
index 0000000000..3ee46d9ef1
--- /dev/null
+++ b/tensorflow/tensorboard/app/demo/data/runs.json
@@ -0,0 +1,542 @@
+{
+ "cubic_function_with_a_very_long_name_how_will_it_truncate": {
+ "images": [],
+ "histograms": [],
+ "scalars": [
+ "electric/raihu",
+ "electric/voltorb",
+ "fire/arcanine",
+ "fire/charmander",
+ "fire/magmar",
+ "grass/bulbasaur",
+ "grass/ivysaur",
+ "grass/venasaur",
+ "ground/diglet",
+ "psychic/abra",
+ "psychic/mew",
+ "psychic/mewtwo",
+ "water/goldeen",
+ "water/lapras",
+ "water/psychic/starmie",
+ "water/squirtle",
+ "water/tentacool"
+ ]
+ },
+ "sin": {
+ "graph": true,
+ "images": [],
+ "histograms": [],
+ "scalars": [
+ "electric/pikachu",
+ "electric/voltorb",
+ "fire/arcanine",
+ "fire/charmander",
+ "fire/flying/charizard/except/made/really/long/to/check/truncation/characteristics",
+ "fire/flying/moltres",
+ "fire/vulpix",
+ "grass/ivysaur",
+ "grass/venasaur",
+ "ground/dugtrio",
+ "psychic/abra",
+ "psychic/mewtwo",
+ "water/goldeen",
+ "water/lapras",
+ "water/psychic/starmie",
+ "water/squirtle",
+ "water/tentacool"
+ ]
+ },
+ "poly5": {
+ "graph": true,
+ "images": [],
+ "histograms": [],
+ "scalars": [
+ "electric/pikachu",
+ "electric/raihu",
+ "electric/voltorb",
+ "fire/charmander",
+ "fire/flying/charizard",
+ "fire/flying/moltres",
+ "fire/magmar",
+ "fire/vulpix",
+ "grass/bulbasaur",
+ "grass/venasaur",
+ "ground/diglet",
+ "psychic/abra",
+ "psychic/mewtwo",
+ "water/lapras",
+ "water/psychic/starmie",
+ "water/squirtle",
+ "water/tentacool"
+ ]
+ },
+ "cos": {
+ "images": [],
+ "histograms": [],
+ "scalars": [
+ "electric/pikachu",
+ "electric/raihu",
+ "electric/voltorb",
+ "fire/arcanine",
+ "fire/charmander",
+ "fire/flying/moltres",
+ "fire/vulpix",
+ "grass/bulbasaur",
+ "grass/venasaur",
+ "ground/diglet",
+ "psychic/abra",
+ "psychic/mew",
+ "psychic/mewtwo",
+ "water/goldeen",
+ "water/psychic/starmie",
+ "water/squirtle",
+ "water/tentacool"
+ ]
+ },
+ "sq": {
+ "images": [],
+ "histograms": [],
+ "scalars": [
+ "electric/pikachu",
+ "electric/voltorb",
+ "fire/arcanine",
+ "fire/flying/charizard",
+ "fire/flying/moltres",
+ "fire/vulpix",
+ "grass/bulbasaur",
+ "grass/venasaur",
+ "ground/diglet",
+ "ground/dugtrio",
+ "psychic/abra",
+ "psychic/mew",
+ "psychic/mewtwo",
+ "water/goldeen",
+ "water/lapras",
+ "water/psychic/starmie",
+ "water/squirtle"
+ ]
+ },
+ "linear_function_can_get_a_long_name_too!": {
+ "images": [],
+ "histograms": [],
+ "scalars": [
+ "electric/pikachu",
+ "electric/raihu",
+ "electric/voltorb",
+ "fire/arcanine",
+ "fire/charmander",
+ "fire/flying/moltres",
+ "fire/magmar",
+ "fire/vulpix",
+ "grass/bulbasaur",
+ "grass/ivysaur",
+ "grass/venasaur",
+ "psychic/abra",
+ "psychic/mew",
+ "water/lapras",
+ "water/psychic/starmie",
+ "water/squirtle",
+ "water/tentacool"
+ ]
+ },
+ "z_hidden+0": {
+ "images": [],
+ "histograms": [],
+ "scalars": []
+ },
+ "z_hidden+1": {
+ "images": [],
+ "histograms": [],
+ "scalars": []
+ },
+ "z_hidden+2": {
+ "images": [],
+ "histograms": [],
+ "scalars": []
+ },
+ "z_hidden+3": {
+ "images": [],
+ "histograms": [],
+ "scalars": []
+ },
+ "z_hidden+4": {
+ "images": [],
+ "histograms": [],
+ "scalars": []
+ },
+ "z_hidden+5": {
+ "images": [],
+ "histograms": [],
+ "scalars": []
+ },
+ "z_hidden+6": {
+ "images": [],
+ "histograms": [],
+ "scalars": []
+ },
+ "z_hidden+7": {
+ "images": [],
+ "histograms": [],
+ "scalars": []
+ },
+ "z_hidden+8": {
+ "images": [],
+ "histograms": [],
+ "scalars": []
+ },
+ "z_hidden+9": {
+ "images": [],
+ "histograms": [],
+ "scalars": []
+ },
+ "z_hidden+10": {
+ "images": [],
+ "histograms": [],
+ "scalars": []
+ },
+ "z_hidden+11": {
+ "images": [],
+ "histograms": [],
+ "scalars": []
+ },
+ "z_hidden+12": {
+ "images": [],
+ "histograms": [],
+ "scalars": []
+ },
+ "z_hidden+13": {
+ "images": [],
+ "histograms": [],
+ "scalars": []
+ },
+ "z_hidden+14": {
+ "images": [],
+ "histograms": [],
+ "scalars": []
+ },
+ "z_hidden+15": {
+ "images": [],
+ "histograms": [],
+ "scalars": []
+ },
+ "z_hidden+16": {
+ "images": [],
+ "histograms": [],
+ "scalars": []
+ },
+ "z_hidden+17": {
+ "images": [],
+ "histograms": [],
+ "scalars": []
+ },
+ "z_hidden+18": {
+ "images": [],
+ "histograms": [],
+ "scalars": []
+ },
+ "z_hidden+19": {
+ "images": [],
+ "histograms": [],
+ "scalars": []
+ },
+ "z_hidden+20": {
+ "images": [],
+ "histograms": [],
+ "scalars": []
+ },
+ "z_hidden+21": {
+ "images": [],
+ "histograms": [],
+ "scalars": []
+ },
+ "z_hidden+22": {
+ "images": [],
+ "histograms": [],
+ "scalars": []
+ },
+ "z_hidden+23": {
+ "images": [],
+ "histograms": [],
+ "scalars": []
+ },
+ "z_hidden+24": {
+ "images": [],
+ "histograms": [],
+ "scalars": []
+ },
+ "z_hidden+25": {
+ "images": [],
+ "histograms": [],
+ "scalars": []
+ },
+ "z_hidden+26": {
+ "images": [],
+ "histograms": [],
+ "scalars": []
+ },
+ "z_hidden+27": {
+ "images": [],
+ "histograms": [],
+ "scalars": []
+ },
+ "z_hidden+28": {
+ "images": [],
+ "histograms": [],
+ "scalars": []
+ },
+ "z_hidden+29": {
+ "images": [],
+ "histograms": [],
+ "scalars": []
+ },
+ "z_hidden+30": {
+ "images": [],
+ "histograms": [],
+ "scalars": []
+ },
+ "z_hidden+31": {
+ "images": [],
+ "histograms": [],
+ "scalars": []
+ },
+ "z_hidden+32": {
+ "images": [],
+ "histograms": [],
+ "scalars": []
+ },
+ "z_hidden+33": {
+ "images": [],
+ "histograms": [],
+ "scalars": []
+ },
+ "z_hidden+34": {
+ "images": [],
+ "histograms": [],
+ "scalars": []
+ },
+ "z_hidden+35": {
+ "images": [],
+ "histograms": [],
+ "scalars": []
+ },
+ "z_hidden+36": {
+ "images": [],
+ "histograms": [],
+ "scalars": []
+ },
+ "z_hidden+37": {
+ "images": [],
+ "histograms": [],
+ "scalars": []
+ },
+ "z_hidden+38": {
+ "images": [],
+ "histograms": [],
+ "scalars": []
+ },
+ "z_hidden+39": {
+ "images": [],
+ "histograms": [],
+ "scalars": []
+ },
+ "z_hidden+40": {
+ "images": [],
+ "histograms": [],
+ "scalars": []
+ },
+ "z_hidden+41": {
+ "images": [],
+ "histograms": [],
+ "scalars": []
+ },
+ "z_hidden+42": {
+ "images": [],
+ "histograms": [],
+ "scalars": []
+ },
+ "z_hidden+43": {
+ "images": [],
+ "histograms": [],
+ "scalars": []
+ },
+ "z_hidden+44": {
+ "images": [],
+ "histograms": [],
+ "scalars": []
+ },
+ "z_hidden+45": {
+ "images": [],
+ "histograms": [],
+ "scalars": []
+ },
+ "z_hidden+46": {
+ "images": [],
+ "histograms": [],
+ "scalars": []
+ },
+ "z_hidden+47": {
+ "images": [],
+ "histograms": [],
+ "scalars": []
+ },
+ "z_hidden+48": {
+ "images": [],
+ "histograms": [],
+ "scalars": []
+ },
+ "z_hidden+49": {
+ "images": [],
+ "histograms": [],
+ "scalars": []
+ },
+ "z_hidden+50": {
+ "images": [],
+ "histograms": [],
+ "scalars": []
+ },
+ "z_hidden+51": {
+ "images": [],
+ "histograms": [],
+ "scalars": []
+ },
+ "z_hidden+52": {
+ "images": [],
+ "histograms": [],
+ "scalars": []
+ },
+ "z_hidden+53": {
+ "images": [],
+ "histograms": [],
+ "scalars": []
+ },
+ "z_hidden+54": {
+ "images": [],
+ "histograms": [],
+ "scalars": []
+ },
+ "z_hidden+55": {
+ "images": [],
+ "histograms": [],
+ "scalars": []
+ },
+ "z_hidden+56": {
+ "images": [],
+ "histograms": [],
+ "scalars": []
+ },
+ "z_hidden+57": {
+ "images": [],
+ "histograms": [],
+ "scalars": []
+ },
+ "z_hidden+58": {
+ "images": [],
+ "histograms": [],
+ "scalars": []
+ },
+ "z_hidden+59": {
+ "images": [],
+ "histograms": [],
+ "scalars": []
+ },
+ "z_hidden+60": {
+ "images": [],
+ "histograms": [],
+ "scalars": []
+ },
+ "z_hidden+61": {
+ "images": [],
+ "histograms": [],
+ "scalars": []
+ },
+ "z_hidden+62": {
+ "images": [],
+ "histograms": [],
+ "scalars": []
+ },
+ "z_hidden+63": {
+ "images": [],
+ "histograms": [],
+ "scalars": []
+ },
+ "z_hidden+64": {
+ "images": [],
+ "histograms": [],
+ "scalars": []
+ },
+ "z_hidden+65": {
+ "images": [],
+ "histograms": [],
+ "scalars": []
+ },
+ "z_hidden+66": {
+ "images": [],
+ "histograms": [],
+ "scalars": []
+ },
+ "z_hidden+67": {
+ "images": [],
+ "histograms": [],
+ "scalars": []
+ },
+ "z_hidden+68": {
+ "images": [],
+ "histograms": [],
+ "scalars": []
+ },
+ "z_hidden+69": {
+ "images": [],
+ "histograms": [],
+ "scalars": []
+ },
+ "z_hidden+70": {
+ "images": [],
+ "histograms": [],
+ "scalars": []
+ },
+ "z_hidden+71": {
+ "images": [],
+ "histograms": [],
+ "scalars": []
+ },
+ "z_hidden+72": {
+ "images": [],
+ "histograms": [],
+ "scalars": []
+ },
+ "z_hidden+73": {
+ "images": [],
+ "histograms": [],
+ "scalars": []
+ },
+ "z_hidden+74": {
+ "images": [],
+ "histograms": [],
+ "scalars": []
+ },
+ "z_hidden+75": {
+ "images": [],
+ "histograms": [],
+ "scalars": []
+ },
+ "z_hidden+76": {
+ "images": [],
+ "histograms": [],
+ "scalars": []
+ },
+ "z_hidden+77": {
+ "images": [],
+ "histograms": [],
+ "scalars": []
+ },
+ "z_hidden+78": {
+ "images": [],
+ "histograms": [],
+ "scalars": []
+ },
+ "z_hidden+79": {
+ "images": [],
+ "histograms": [],
+ "scalars": []
+ }
+}
diff --git a/tensorflow/tensorboard/app/demo/data/sin-graph.pbtxt b/tensorflow/tensorboard/app/demo/data/sin-graph.pbtxt
new file mode 100644
index 0000000000..319ec1c4bd
--- /dev/null
+++ b/tensorflow/tensorboard/app/demo/data/sin-graph.pbtxt
@@ -0,0 +1,14 @@
+node {
+ name: "Q"
+ op: "Input"
+}
+node {
+ name: "W"
+ op: "Input"
+}
+node {
+ name: "X"
+ op: "MatMul"
+ input: "Q"
+ input: "W"
+}
diff --git a/tensorflow/tensorboard/app/demo/data/sin.json b/tensorflow/tensorboard/app/demo/data/sin.json
new file mode 100644
index 0000000000..a91fe63d54
--- /dev/null
+++ b/tensorflow/tensorboard/app/demo/data/sin.json
@@ -0,0 +1 @@
+[[1434931200.0, 0.0, 0.0], [1434932928.0, 20000.0, 0.012566039883352607], [1434934656.0, 40000.0, 0.02513009544333748], [1434936384.0, 60000.0, 0.03769018266993454], [1434938112.0, 80000.0, 0.050244318179769556], [1434939840.0, 100000.0, 0.06279051952931337], [1434941568.0, 120000.0, 0.07532680552793272], [1434943296.0, 140000.0, 0.08785119655074317], [1434945024.0, 160000.0, 0.1003617148512149], [1434946752.0, 180000.0, 0.11285638487348167], [1434948480.0, 200000.0, 0.12533323356430426], [1434950208.0, 220000.0, 0.13779029068463805], [1434951936.0, 240000.0, 0.15022558912075706], [1434953664.0, 260000.0, 0.16263716519488358], [1434955392.0, 280000.0, 0.17502305897527604], [1434957120.0, 300000.0, 0.1873813145857246], [1434958848.0, 320000.0, 0.19970998051440703], [1434960576.0, 340000.0, 0.21200710992205463], [1434962304.0, 360000.0, 0.22427076094938114], [1434964032.0, 380000.0, 0.23649899702372468], [1434965760.0, 400000.0, 0.2486898871648548], [1434967488.0, 420000.0, 0.26084150628989694], [1434969216.0, 440000.0, 0.27295193551732516], [1434970944.0, 460000.0, 0.2850192624699761], [1434972672.0, 480000.0, 0.2970415815770349], [1434974400.0, 500000.0, 0.3090169943749474], [1434976128.0, 520000.0, 0.3209436098072095], [1434977856.0, 540000.0, 0.3328195445229866], [1434979584.0, 560000.0, 0.34464292317451706], [1434981312.0, 580000.0, 0.35641187871325075], [1434983040.0, 600000.0, 0.3681245526846779], [1434984768.0, 620000.0, 0.37977909552180106], [1434986496.0, 640000.0, 0.3913736668372024], [1434988224.0, 660000.0, 0.40290643571366264], [1434989952.0, 680000.0, 0.41437558099328414], [1434991680.0, 700000.0, 0.4257792915650727], [1434993408.0, 720000.0, 0.4371157666509328], [1434995136.0, 740000.0, 0.44838321609003223], [1434996864.0, 760000.0, 0.4595798606214878], [1434998592.0, 780000.0, 0.4707039321653325], [1435000320.0, 800000.0, 0.4817536741017153], [1435002048.0, 820000.0, 0.49272734154829156], [1435003776.0, 840000.0, 0.5036232016357608], [1435005504.0, 860000.0, 0.5144395337815064], [1435007232.0, 880000.0, 0.5251746299612956], [1435008960.0, 900000.0, 0.5358267949789967], [1435010688.0, 920000.0, 0.5463943467342691], [1435012416.0, 940000.0, 0.556875616488188], [1435014144.0, 960000.0, 0.5672689491267565], [1435015872.0, 980000.0, 0.5775727034222676], [1435017600.0, 1000000.0, 0.5877852522924731], [1435019328.0, 1020000.0, 0.5979049830575188], [1435021056.0, 1040000.0, 0.6079302976946054], [1435022784.0, 1060000.0, 0.6178596130903343], [1435024512.0, 1080000.0, 0.6276913612907005], [1435026240.0, 1100000.0, 0.6374239897486896], [1435027968.0, 1120000.0, 0.6470559615694442], [1435029696.0, 1140000.0, 0.6565857557529565], [1435031424.0, 1160000.0, 0.6660118674342517], [1435033152.0, 1180000.0, 0.6753328081210244], [1435034880.0, 1200000.0, 0.6845471059286886], [1435036608.0, 1220000.0, 0.6936533058128049], [1435038336.0, 1240000.0, 0.7026499697988492], [1435040064.0, 1260000.0, 0.7115356772092853], [1435041792.0, 1280000.0, 0.7203090248879069], [1435043520.0, 1300000.0, 0.7289686274214116], [1435045248.0, 1320000.0, 0.7375131173581739], [1435046976.0, 1340000.0, 0.7459411454241821], [1435048704.0, 1360000.0, 0.7542513807361038], [1435050432.0, 1380000.0, 0.7624425110114479], [1435052160.0, 1400000.0, 0.7705132427757893], [1435053888.0, 1420000.0, 0.7784623015670233], [1435055616.0, 1440000.0, 0.7862884321366188], [1435057344.0, 1460000.0, 0.7939903986478353], [1435059072.0, 1480000.0, 0.8015669848708765], [1435060800.0, 1500000.0, 0.8090169943749475], [1435062528.0, 1520000.0, 0.8163392507171839], [1435064256.0, 1540000.0, 0.8235325976284275], [1435065984.0, 1560000.0, 0.8305958991958126], [1435067712.0, 1580000.0, 0.8375280400421417], [1435069440.0, 1600000.0, 0.8443279255020151], [1435071168.0, 1620000.0, 0.8509944817946918], [1435072896.0, 1640000.0, 0.8575266561936523], [1435074624.0, 1660000.0, 0.8639234171928353], [1435076352.0, 1680000.0, 0.8701837546695257], [1435078080.0, 1700000.0, 0.8763066800438637], [1435079808.0, 1720000.0, 0.8822912264349532], [1435081536.0, 1740000.0, 0.8881364488135445], [1435083264.0, 1760000.0, 0.8938414241512637], [1435084992.0, 1780000.0, 0.899405251566371], [1435086720.0, 1800000.0, 0.9048270524660196], [1435088448.0, 1820000.0, 0.9101059706849957], [1435090176.0, 1840000.0, 0.9152411726209175], [1435091904.0, 1860000.0, 0.9202318473658703], [1435093632.0, 1880000.0, 0.925077206834458], [1435095360.0, 1900000.0, 0.9297764858882513], [1435097088.0, 1920000.0, 0.934328942456612], [1435098816.0, 1940000.0, 0.9387338576538741], [1435100544.0, 1960000.0, 0.9429905358928644], [1435102272.0, 1980000.0, 0.9470983049947443], [1435104000.0, 2000000.0, 0.9510565162951535], [1435105728.0, 2020000.0, 0.954864544746643], [1435107456.0, 2040000.0, 0.9585217890173758], [1435109184.0, 2060000.0, 0.9620276715860858], [1435110912.0, 2080000.0, 0.9653816388332739], [1435112640.0, 2100000.0, 0.9685831611286311], [1435114368.0, 2120000.0, 0.9716317329146739], [1435116096.0, 2140000.0, 0.9745268727865771], [1435117824.0, 2160000.0, 0.9772681235681935], [1435119552.0, 2180000.0, 0.9798550523842469], [1435121280.0, 2200000.0, 0.9822872507286886], [1435123008.0, 2220000.0, 0.9845643345292053], [1435124736.0, 2240000.0, 0.986685944207868], [1435126464.0, 2260000.0, 0.9886517447379141], [1435128192.0, 2280000.0, 0.9904614256966512], [1435129920.0, 2300000.0, 0.9921147013144779], [1435131648.0, 2320000.0, 0.9936113105200084], [1435133376.0, 2340000.0, 0.9949510169813002], [1435135104.0, 2360000.0, 0.9961336091431725], [1435136832.0, 2380000.0, 0.9971589002606139], [1435138560.0, 2400000.0, 0.9980267284282716], [1435140288.0, 2420000.0, 0.9987369566060175], [1435142016.0, 2440000.0, 0.9992894726405892], [1435143744.0, 2460000.0, 0.9996841892832999], [1435145472.0, 2480000.0, 0.9999210442038161], [1435147200.0, 2500000.0, 1.0], [1435148928.0, 2520000.0, 0.9999210442038161], [1435150656.0, 2540000.0, 0.9996841892832999], [1435152384.0, 2560000.0, 0.9992894726405892], [1435154112.0, 2580000.0, 0.9987369566060175], [1435155840.0, 2600000.0, 0.9980267284282716], [1435157568.0, 2620000.0, 0.9971589002606139], [1435159296.0, 2640000.0, 0.9961336091431725], [1435161024.0, 2660000.0, 0.9949510169813002], [1435162752.0, 2680000.0, 0.9936113105200084], [1435164480.0, 2700000.0, 0.9921147013144778], [1435166208.0, 2720000.0, 0.9904614256966512], [1435167936.0, 2740000.0, 0.988651744737914], [1435169664.0, 2760000.0, 0.986685944207868], [1435171392.0, 2780000.0, 0.9845643345292053], [1435173120.0, 2800000.0, 0.9822872507286886], [1435174848.0, 2820000.0, 0.9798550523842469], [1435176576.0, 2840000.0, 0.9772681235681935], [1435178304.0, 2860000.0, 0.9745268727865772], [1435180032.0, 2880000.0, 0.971631732914674], [1435181760.0, 2900000.0, 0.9685831611286312], [1435183488.0, 2920000.0, 0.965381638833274], [1435185216.0, 2940000.0, 0.9620276715860859], [1435186944.0, 2960000.0, 0.958521789017376], [1435188672.0, 2980000.0, 0.9548645447466431], [1435190400.0, 3000000.0, 0.9510565162951536], [1435192128.0, 3020000.0, 0.9470983049947443], [1435193856.0, 3040000.0, 0.9429905358928645], [1435195584.0, 3060000.0, 0.9387338576538742], [1435197312.0, 3080000.0, 0.9343289424566121], [1435199040.0, 3100000.0, 0.9297764858882513], [1435200768.0, 3120000.0, 0.925077206834458], [1435202496.0, 3140000.0, 0.9202318473658704], [1435204224.0, 3160000.0, 0.9152411726209176], [1435205952.0, 3180000.0, 0.9101059706849957], [1435207680.0, 3200000.0, 0.9048270524660195], [1435209408.0, 3220000.0, 0.8994052515663712], [1435211136.0, 3240000.0, 0.8938414241512639], [1435212864.0, 3260000.0, 0.8881364488135446], [1435214592.0, 3280000.0, 0.8822912264349533], [1435216320.0, 3300000.0, 0.8763066800438635], [1435218048.0, 3320000.0, 0.8701837546695257], [1435219776.0, 3340000.0, 0.8639234171928354], [1435221504.0, 3360000.0, 0.8575266561936522], [1435223232.0, 3380000.0, 0.8509944817946917], [1435224960.0, 3400000.0, 0.844327925502015], [1435226688.0, 3420000.0, 0.8375280400421418], [1435228416.0, 3440000.0, 0.8305958991958129], [1435230144.0, 3460000.0, 0.8235325976284276], [1435231872.0, 3480000.0, 0.816339250717184], [1435233600.0, 3500000.0, 0.8090169943749475], [1435235328.0, 3520000.0, 0.8015669848708769], [1435237056.0, 3540000.0, 0.7939903986478355], [1435238784.0, 3560000.0, 0.786288432136619], [1435240512.0, 3580000.0, 0.7784623015670235], [1435242240.0, 3600000.0, 0.7705132427757893], [1435243968.0, 3620000.0, 0.7624425110114481], [1435245696.0, 3640000.0, 0.754251380736104], [1435247424.0, 3660000.0, 0.7459411454241822], [1435249152.0, 3680000.0, 0.7375131173581739], [1435250880.0, 3700000.0, 0.7289686274214114], [1435252608.0, 3720000.0, 0.720309024887907], [1435254336.0, 3740000.0, 0.7115356772092855], [1435256064.0, 3760000.0, 0.7026499697988492], [1435257792.0, 3780000.0, 0.6936533058128049], [1435259520.0, 3800000.0, 0.6845471059286888], [1435261248.0, 3820000.0, 0.6753328081210246], [1435262976.0, 3840000.0, 0.6660118674342517], [1435264704.0, 3860000.0, 0.6565857557529564], [1435266432.0, 3880000.0, 0.6470559615694442], [1435268160.0, 3900000.0, 0.6374239897486899], [1435269888.0, 3920000.0, 0.6276913612907006], [1435271616.0, 3940000.0, 0.6178596130903343], [1435273344.0, 3960000.0, 0.6079302976946053], [1435275072.0, 3980000.0, 0.5979049830575187], [1435276800.0, 4000000.0, 0.5877852522924732], [1435278528.0, 4020000.0, 0.5775727034222676], [1435280256.0, 4040000.0, 0.5672689491267564], [1435281984.0, 4060000.0, 0.5568756164881878], [1435283712.0, 4080000.0, 0.5463943467342692], [1435285440.0, 4100000.0, 0.535826794978997], [1435287168.0, 4120000.0, 0.525174629961296], [1435288896.0, 4140000.0, 0.5144395337815066], [1435290624.0, 4160000.0, 0.5036232016357609], [1435292352.0, 4180000.0, 0.4927273415482916], [1435294080.0, 4200000.0, 0.4817536741017156], [1435295808.0, 4220000.0, 0.4707039321653328], [1435297536.0, 4240000.0, 0.459579860621488], [1435299264.0, 4260000.0, 0.4483832160900323], [1435300992.0, 4280000.0, 0.4371157666509329], [1435302720.0, 4300000.0, 0.4257792915650729], [1435304448.0, 4320000.0, 0.4143755809932843], [1435306176.0, 4340000.0, 0.40290643571366275], [1435307904.0, 4360000.0, 0.39137366683720237], [1435309632.0, 4380000.0, 0.3797790955218014], [1435311360.0, 4400000.0, 0.36812455268467814], [1435313088.0, 4420000.0, 0.3564118787132508], [1435314816.0, 4440000.0, 0.34464292317451706], [1435316544.0, 4460000.0, 0.3328195445229865], [1435318272.0, 4480000.0, 0.3209436098072097], [1435320000.0, 4500000.0, 0.3090169943749475], [1435321728.0, 4520000.0, 0.2970415815770349], [1435323456.0, 4540000.0, 0.28501926246997605], [1435325184.0, 4560000.0, 0.27295193551732505], [1435326912.0, 4580000.0, 0.26084150628989705], [1435328640.0, 4600000.0, 0.24868988716485482], [1435330368.0, 4620000.0, 0.2364989970237246], [1435332096.0, 4640000.0, 0.224270760949381], [1435333824.0, 4660000.0, 0.2120071099220548], [1435335552.0, 4680000.0, 0.19970998051440705], [1435337280.0, 4700000.0, 0.18738131458572502], [1435339008.0, 4720000.0, 0.1750230589752763], [1435340736.0, 4740000.0, 0.16263716519488378], [1435342464.0, 4760000.0, 0.15022558912075712], [1435344192.0, 4780000.0, 0.13779029068463847], [1435345920.0, 4800000.0, 0.12533323356430454], [1435347648.0, 4820000.0, 0.11285638487348187], [1435349376.0, 4840000.0, 0.10036171485121498], [1435351104.0, 4860000.0, 0.08785119655074315], [1435352832.0, 4880000.0, 0.07532680552793304], [1435354560.0, 4900000.0, 0.06279051952931358], [1435356288.0, 4920000.0, 0.05024431817976966], [1435358016.0, 4940000.0, 0.037690182669934534], [1435359744.0, 4960000.0, 0.025130095443337813], [1435361472.0, 4980000.0, 0.012566039883352836], [1435363200.0, 5000000.0, 1.2246467991473532e-16], [1435364928.0, 5020000.0, -0.012566039883352592], [1435366656.0, 5040000.0, -0.02513009544333757], [1435368384.0, 5060000.0, -0.03769018266993429], [1435370112.0, 5080000.0, -0.05024431817976942], [1435371840.0, 5100000.0, -0.06279051952931335], [1435373568.0, 5120000.0, -0.07532680552793279], [1435375296.0, 5140000.0, -0.0878511965507429], [1435377024.0, 5160000.0, -0.10036171485121473], [1435378752.0, 5180000.0, -0.11285638487348164], [1435380480.0, 5200000.0, -0.12533323356430429], [1435382208.0, 5220000.0, -0.13779029068463822], [1435383936.0, 5240000.0, -0.15022558912075687], [1435385664.0, 5260000.0, -0.16263716519488353], [1435387392.0, 5280000.0, -0.1750230589752761], [1435389120.0, 5300000.0, -0.18738131458572477], [1435390848.0, 5320000.0, -0.19970998051440725], [1435392576.0, 5340000.0, -0.21200710992205454], [1435394304.0, 5360000.0, -0.2242707609493812], [1435396032.0, 5380000.0, -0.2364989970237248], [1435397760.0, 5400000.0, -0.24868988716485502], [1435399488.0, 5420000.0, -0.26084150628989683], [1435401216.0, 5440000.0, -0.2729519355173252], [1435402944.0, 5460000.0, -0.2850192624699762], [1435404672.0, 5480000.0, -0.2970415815770351], [1435406400.0, 5500000.0, -0.30901699437494773], [1435408128.0, 5520000.0, -0.3209436098072095], [1435409856.0, 5540000.0, -0.33281954452298673], [1435411584.0, 5560000.0, -0.3446429231745172], [1435413312.0, 5580000.0, -0.356411878713251], [1435415040.0, 5600000.0, -0.3681245526846783], [1435416768.0, 5620000.0, -0.37977909552180117], [1435418496.0, 5640000.0, -0.39137366683720215], [1435420224.0, 5660000.0, -0.4029064357136621], [1435421952.0, 5680000.0, -0.41437558099328364], [1435423680.0, 5700000.0, -0.42577929156507227], [1435425408.0, 5720000.0, -0.43711576665093266], [1435427136.0, 5740000.0, -0.4483832160900317], [1435428864.0, 5760000.0, -0.45957986062148737], [1435430592.0, 5780000.0, -0.4707039321653322], [1435432320.0, 5800000.0, -0.481753674101715], [1435434048.0, 5820000.0, -0.4927273415482914], [1435435776.0, 5840000.0, -0.5036232016357604], [1435437504.0, 5860000.0, -0.5144395337815061], [1435439232.0, 5880000.0, -0.5251746299612954], [1435440960.0, 5900000.0, -0.5358267949789964], [1435442688.0, 5920000.0, -0.546394346734269], [1435444416.0, 5940000.0, -0.5568756164881876], [1435446144.0, 5960000.0, -0.5672689491267562], [1435447872.0, 5980000.0, -0.5775727034222674], [1435449600.0, 6000000.0, -0.587785252292473], [1435451328.0, 6020000.0, -0.5979049830575185], [1435453056.0, 6040000.0, -0.607930297694605], [1435454784.0, 6060000.0, -0.6178596130903341], [1435456512.0, 6080000.0, -0.6276913612907004], [1435458240.0, 6100000.0, -0.6374239897486896], [1435459968.0, 6120000.0, -0.647055961569444], [1435461696.0, 6140000.0, -0.6565857557529562], [1435463424.0, 6160000.0, -0.6660118674342514], [1435465152.0, 6180000.0, -0.6753328081210244], [1435466880.0, 6200000.0, -0.6845471059286887], [1435468608.0, 6220000.0, -0.6936533058128047], [1435470336.0, 6240000.0, -0.7026499697988491], [1435472064.0, 6260000.0, -0.7115356772092852], [1435473792.0, 6280000.0, -0.7203090248879069], [1435475520.0, 6300000.0, -0.7289686274214113], [1435477248.0, 6320000.0, -0.7375131173581737], [1435478976.0, 6340000.0, -0.7459411454241821], [1435480704.0, 6360000.0, -0.7542513807361038], [1435482432.0, 6380000.0, -0.7624425110114479], [1435484160.0, 6400000.0, -0.7705132427757894], [1435485888.0, 6420000.0, -0.7784623015670236], [1435487616.0, 6440000.0, -0.7862884321366186], [1435489344.0, 6460000.0, -0.793990398647835], [1435491072.0, 6480000.0, -0.8015669848708764], [1435492800.0, 6500000.0, -0.8090169943749473], [1435494528.0, 6520000.0, -0.8163392507171839], [1435496256.0, 6540000.0, -0.8235325976284275], [1435497984.0, 6560000.0, -0.8305958991958128], [1435499712.0, 6580000.0, -0.8375280400421419], [1435501440.0, 6600000.0, -0.8443279255020153], [1435503168.0, 6620000.0, -0.8509944817946921], [1435504896.0, 6640000.0, -0.8575266561936521], [1435506624.0, 6660000.0, -0.8639234171928352], [1435508352.0, 6680000.0, -0.8701837546695256], [1435510080.0, 6700000.0, -0.8763066800438636], [1435511808.0, 6720000.0, -0.8822912264349534], [1435513536.0, 6740000.0, -0.8881364488135446], [1435515264.0, 6760000.0, -0.8938414241512639], [1435516992.0, 6780000.0, -0.8994052515663712], [1435518720.0, 6800000.0, -0.9048270524660198], [1435520448.0, 6820000.0, -0.9101059706849955], [1435522176.0, 6840000.0, -0.9152411726209175], [1435523904.0, 6860000.0, -0.9202318473658704], [1435525632.0, 6880000.0, -0.9250772068344577], [1435527360.0, 6900000.0, -0.9297764858882511], [1435529088.0, 6920000.0, -0.9343289424566118], [1435530816.0, 6940000.0, -0.938733857653874], [1435532544.0, 6960000.0, -0.9429905358928643], [1435534272.0, 6980000.0, -0.9470983049947442], [1435536000.0, 7000000.0, -0.9510565162951535], [1435537728.0, 7020000.0, -0.954864544746643], [1435539456.0, 7040000.0, -0.9585217890173756], [1435541184.0, 7060000.0, -0.9620276715860857], [1435542912.0, 7080000.0, -0.9653816388332738], [1435544640.0, 7100000.0, -0.968583161128631], [1435546368.0, 7120000.0, -0.9716317329146739], [1435548096.0, 7140000.0, -0.9745268727865771], [1435549824.0, 7160000.0, -0.9772681235681934], [1435551552.0, 7180000.0, -0.9798550523842469], [1435553280.0, 7200000.0, -0.9822872507286887], [1435555008.0, 7220000.0, -0.9845643345292054], [1435556736.0, 7240000.0, -0.9866859442078679], [1435558464.0, 7260000.0, -0.988651744737914], [1435560192.0, 7280000.0, -0.9904614256966512], [1435561920.0, 7300000.0, -0.9921147013144778], [1435563648.0, 7320000.0, -0.9936113105200084], [1435565376.0, 7340000.0, -0.9949510169813002], [1435567104.0, 7360000.0, -0.9961336091431725], [1435568832.0, 7380000.0, -0.9971589002606139], [1435570560.0, 7400000.0, -0.9980267284282716], [1435572288.0, 7420000.0, -0.9987369566060175], [1435574016.0, 7440000.0, -0.9992894726405892], [1435575744.0, 7460000.0, -0.9996841892832999], [1435577472.0, 7480000.0, -0.9999210442038161], [1435579200.0, 7500000.0, -1.0], [1435580928.0, 7520000.0, -0.9999210442038161], [1435582656.0, 7540000.0, -0.9996841892832999], [1435584384.0, 7560000.0, -0.9992894726405892], [1435586112.0, 7580000.0, -0.9987369566060175], [1435587840.0, 7600000.0, -0.9980267284282716], [1435589568.0, 7620000.0, -0.9971589002606139], [1435591296.0, 7640000.0, -0.9961336091431725], [1435593024.0, 7660000.0, -0.9949510169813002], [1435594752.0, 7680000.0, -0.9936113105200084], [1435596480.0, 7700000.0, -0.9921147013144779], [1435598208.0, 7720000.0, -0.9904614256966512], [1435599936.0, 7740000.0, -0.988651744737914], [1435601664.0, 7760000.0, -0.986685944207868], [1435603392.0, 7780000.0, -0.9845643345292054], [1435605120.0, 7800000.0, -0.9822872507286887], [1435606848.0, 7820000.0, -0.979855052384247], [1435608576.0, 7840000.0, -0.9772681235681935], [1435610304.0, 7860000.0, -0.9745268727865771], [1435612032.0, 7880000.0, -0.971631732914674], [1435613760.0, 7900000.0, -0.9685831611286311], [1435615488.0, 7920000.0, -0.9653816388332738], [1435617216.0, 7940000.0, -0.9620276715860858], [1435618944.0, 7960000.0, -0.9585217890173757], [1435620672.0, 7980000.0, -0.9548645447466431], [1435622400.0, 8000000.0, -0.9510565162951536], [1435624128.0, 8020000.0, -0.9470983049947443], [1435625856.0, 8040000.0, -0.9429905358928644], [1435627584.0, 8060000.0, -0.9387338576538741], [1435629312.0, 8080000.0, -0.934328942456612], [1435631040.0, 8100000.0, -0.9297764858882512], [1435632768.0, 8120000.0, -0.9250772068344579], [1435634496.0, 8140000.0, -0.9202318473658705], [1435636224.0, 8160000.0, -0.9152411726209176], [1435637952.0, 8180000.0, -0.9101059706849958], [1435639680.0, 8200000.0, -0.9048270524660199], [1435641408.0, 8220000.0, -0.8994052515663714], [1435643136.0, 8240000.0, -0.8938414241512641], [1435644864.0, 8260000.0, -0.8881364488135448], [1435646592.0, 8280000.0, -0.8822912264349535], [1435648320.0, 8300000.0, -0.8763066800438638], [1435650048.0, 8320000.0, -0.8701837546695258], [1435651776.0, 8340000.0, -0.8639234171928354], [1435653504.0, 8360000.0, -0.8575266561936523], [1435655232.0, 8380000.0, -0.8509944817946923], [1435656960.0, 8400000.0, -0.8443279255020155], [1435658688.0, 8420000.0, -0.8375280400421421], [1435660416.0, 8440000.0, -0.8305958991958129], [1435662144.0, 8460000.0, -0.8235325976284277], [1435663872.0, 8480000.0, -0.8163392507171842], [1435665600.0, 8500000.0, -0.8090169943749476], [1435667328.0, 8520000.0, -0.8015669848708766], [1435669056.0, 8540000.0, -0.7939903986478353], [1435670784.0, 8560000.0, -0.7862884321366188], [1435672512.0, 8580000.0, -0.7784623015670239], [1435674240.0, 8600000.0, -0.7705132427757896], [1435675968.0, 8620000.0, -0.7624425110114481], [1435677696.0, 8640000.0, -0.7542513807361041], [1435679424.0, 8660000.0, -0.7459411454241823], [1435681152.0, 8680000.0, -0.737513117358174], [1435682880.0, 8700000.0, -0.7289686274214116], [1435684608.0, 8720000.0, -0.7203090248879068], [1435686336.0, 8740000.0, -0.7115356772092852], [1435688064.0, 8760000.0, -0.7026499697988496], [1435689792.0, 8780000.0, -0.6936533058128054], [1435691520.0, 8800000.0, -0.684547105928689], [1435693248.0, 8820000.0, -0.6753328081210247], [1435694976.0, 8840000.0, -0.6660118674342518], [1435696704.0, 8860000.0, -0.6565857557529565], [1435698432.0, 8880000.0, -0.6470559615694443], [1435700160.0, 8900000.0, -0.6374239897486896], [1435701888.0, 8920000.0, -0.6276913612907002], [1435703616.0, 8940000.0, -0.6178596130903348], [1435705344.0, 8960000.0, -0.6079302976946057], [1435707072.0, 8980000.0, -0.5979049830575192], [1435708800.0, 9000000.0, -0.5877852522924734], [1435710528.0, 9020000.0, -0.5775727034222677], [1435712256.0, 9040000.0, -0.5672689491267565], [1435713984.0, 9060000.0, -0.556875616488188], [1435715712.0, 9080000.0, -0.5463943467342689], [1435717440.0, 9100000.0, -0.5358267949789963], [1435719168.0, 9120000.0, -0.5251746299612954], [1435720896.0, 9140000.0, -0.5144395337815068], [1435722624.0, 9160000.0, -0.503623201635761], [1435724352.0, 9180000.0, -0.4927273415482917], [1435726080.0, 9200000.0, -0.4817536741017153], [1435727808.0, 9220000.0, -0.4707039321653325], [1435729536.0, 9240000.0, -0.4595798606214877], [1435731264.0, 9260000.0, -0.448383216090032], [1435732992.0, 9280000.0, -0.43711576665093255], [1435734720.0, 9300000.0, -0.4257792915650722], [1435736448.0, 9320000.0, -0.4143755809932844], [1435738176.0, 9340000.0, -0.40290643571366286], [1435739904.0, 9360000.0, -0.3913736668372025], [1435741632.0, 9380000.0, -0.3797790955218019], [1435743360.0, 9400000.0, -0.3681245526846787], [1435745088.0, 9420000.0, -0.3564118787132513], [1435746816.0, 9440000.0, -0.34464292317451756], [1435748544.0, 9460000.0, -0.33281954452298707], [1435750272.0, 9480000.0, -0.3209436098072098], [1435752000.0, 9500000.0, -0.3090169943749476], [1435753728.0, 9520000.0, -0.29704158157703503], [1435755456.0, 9540000.0, -0.285019262469977], [1435757184.0, 9560000.0, -0.272951935517326], [1435758912.0, 9580000.0, -0.2608415062898976], [1435760640.0, 9600000.0, -0.24868988716485535], [1435762368.0, 9620000.0, -0.23649899702372515], [1435764096.0, 9640000.0, -0.22427076094938156], [1435765824.0, 9660000.0, -0.2120071099220549], [1435767552.0, 9680000.0, -0.1997099805144072], [1435769280.0, 9700000.0, -0.18738131458572468], [1435771008.0, 9720000.0, -0.175023058975276], [1435772736.0, 9740000.0, -0.16263716519488433], [1435774464.0, 9760000.0, -0.15022558912075767], [1435776192.0, 9780000.0, -0.13779029068463858], [1435777920.0, 9800000.0, -0.12533323356430465], [1435779648.0, 9820000.0, -0.112856384873482], [1435781376.0, 9840000.0, -0.10036171485121509], [1435783104.0, 9860000.0, -0.08785119655074328], [1435784832.0, 9880000.0, -0.07532680552793272], [1435786560.0, 9900000.0, -0.06279051952931326], [1435788288.0, 9920000.0, -0.05024431817977022], [1435790016.0, 9940000.0, -0.0376901826699351], [1435791744.0, 9960000.0, -0.025130095443337937], [1435793472.0, 9980000.0, -0.01256603988335296], [1435795200.0, 10000000.0, -2.4492935982947064e-16], [1435796928.0, 10020000.0, 0.012566039883352469], [1435798656.0, 10040000.0, 0.025130095443337445], [1435800384.0, 10060000.0, 0.03769018266993461], [1435802112.0, 10080000.0, 0.05024431817976974], [1435803840.0, 10100000.0, 0.06279051952931278], [1435805568.0, 10120000.0, 0.07532680552793222], [1435807296.0, 10140000.0, 0.08785119655074279], [1435809024.0, 10160000.0, 0.1003617148512146], [1435810752.0, 10180000.0, 0.11285638487348151], [1435812480.0, 10200000.0, 0.12533323356430418], [1435814208.0, 10220000.0, 0.1377902906846381], [1435815936.0, 10240000.0, 0.1502255891207572], [1435817664.0, 10260000.0, 0.16263716519488383], [1435819392.0, 10280000.0, 0.1750230589752755], [1435821120.0, 10300000.0, 0.1873813145857242], [1435822848.0, 10320000.0, 0.1997099805144067], [1435824576.0, 10340000.0, 0.21200710992205443], [1435826304.0, 10360000.0, 0.2242707609493811], [1435828032.0, 10380000.0, 0.23649899702372468], [1435829760.0, 10400000.0, 0.24868988716485488], [1435831488.0, 10420000.0, 0.2608415062898971], [1435833216.0, 10440000.0, 0.27295193551732555], [1435834944.0, 10460000.0, 0.28501926246997655], [1435836672.0, 10480000.0, 0.2970415815770346], [1435838400.0, 10500000.0, 0.3090169943749472], [1435840128.0, 10520000.0, 0.3209436098072094], [1435841856.0, 10540000.0, 0.3328195445229866], [1435843584.0, 10560000.0, 0.3446429231745171], [1435845312.0, 10580000.0, 0.35641187871325086], [1435847040.0, 10600000.0, 0.3681245526846782], [1435848768.0, 10620000.0, 0.37977909552180145], [1435850496.0, 10640000.0, 0.39137366683720287], [1435852224.0, 10660000.0, 0.4029064357136624], [1435853952.0, 10680000.0, 0.414375580993284], [1435855680.0, 10700000.0, 0.42577929156507255], [1435857408.0, 10720000.0, 0.43711576665093294], [1435859136.0, 10740000.0, 0.44838321609003234], [1435860864.0, 10760000.0, 0.4595798606214881], [1435862592.0, 10780000.0, 0.47070393216533285], [1435864320.0, 10800000.0, 0.48175367410171566], [1435866048.0, 10820000.0, 0.49272734154829206], [1435867776.0, 10840000.0, 0.5036232016357607], [1435869504.0, 10860000.0, 0.5144395337815063], [1435871232.0, 10880000.0, 0.5251746299612957], [1435872960.0, 10900000.0, 0.5358267949789967], [1435874688.0, 10920000.0, 0.5463943467342692], [1435876416.0, 10940000.0, 0.5568756164881883], [1435878144.0, 10960000.0, 0.5672689491267568], [1435879872.0, 10980000.0, 0.577572703422268], [1435881600.0, 11000000.0, 0.5877852522924736], [1435883328.0, 11020000.0, 0.5979049830575195], [1435885056.0, 11040000.0, 0.6079302976946054], [1435886784.0, 11060000.0, 0.6178596130903344], [1435888512.0, 11080000.0, 0.6276913612907006], [1435890240.0, 11100000.0, 0.6374239897486899], [1435891968.0, 11120000.0, 0.6470559615694446], [1435893696.0, 11140000.0, 0.6565857557529567], [1435895424.0, 11160000.0, 0.666011867434252], [1435897152.0, 11180000.0, 0.6753328081210249], [1435898880.0, 11200000.0, 0.6845471059286893], [1435900608.0, 11220000.0, 0.6936533058128049], [1435902336.0, 11240000.0, 0.7026499697988493], [1435904064.0, 11260000.0, 0.7115356772092849], [1435905792.0, 11280000.0, 0.7203090248879065], [1435907520.0, 11300000.0, 0.7289686274214106], [1435909248.0, 11320000.0, 0.737513117358173], [1435910976.0, 11340000.0, 0.7459411454241814], [1435912704.0, 11360000.0, 0.7542513807361031], [1435914432.0, 11380000.0, 0.7624425110114472], [1435916160.0, 11400000.0, 0.7705132427757887], [1435917888.0, 11420000.0, 0.778462301567023], [1435919616.0, 11440000.0, 0.7862884321366185], [1435921344.0, 11460000.0, 0.793990398647835], [1435923072.0, 11480000.0, 0.8015669848708759], [1435924800.0, 11500000.0, 0.8090169943749468], [1435926528.0, 11520000.0, 0.8163392507171834], [1435928256.0, 11540000.0, 0.8235325976284269], [1435929984.0, 11560000.0, 0.8305958991958121], [1435931712.0, 11580000.0, 0.8375280400421413], [1435933440.0, 11600000.0, 0.8443279255020147], [1435935168.0, 11620000.0, 0.8509944817946916], [1435936896.0, 11640000.0, 0.8575266561936521], [1435938624.0, 11660000.0, 0.8639234171928352], [1435940352.0, 11680000.0, 0.8701837546695251], [1435942080.0, 11700000.0, 0.8763066800438631], [1435943808.0, 11720000.0, 0.8822912264349528], [1435945536.0, 11740000.0, 0.8881364488135441], [1435947264.0, 11760000.0, 0.8938414241512634], [1435948992.0, 11780000.0, 0.8994052515663707], [1435950720.0, 11800000.0, 0.9048270524660194], [1435952448.0, 11820000.0, 0.9101059706849955], [1435954176.0, 11840000.0, 0.9152411726209174], [1435955904.0, 11860000.0, 0.9202318473658699], [1435957632.0, 11880000.0, 0.9250772068344577], [1435959360.0, 11900000.0, 0.9297764858882511], [1435961088.0, 11920000.0, 0.9343289424566118], [1435962816.0, 11940000.0, 0.9387338576538738], [1435964544.0, 11960000.0, 0.9429905358928643], [1435966272.0, 11980000.0, 0.9470983049947441], [1435968000.0, 12000000.0, 0.9510565162951535], [1435969728.0, 12020000.0, 0.954864544746643], [1435971456.0, 12040000.0, 0.9585217890173756], [1435973184.0, 12060000.0, 0.9620276715860857], [1435974912.0, 12080000.0, 0.9653816388332737], [1435976640.0, 12100000.0, 0.968583161128631], [1435978368.0, 12120000.0, 0.9716317329146738], [1435980096.0, 12140000.0, 0.974526872786577], [1435981824.0, 12160000.0, 0.9772681235681934], [1435983552.0, 12180000.0, 0.9798550523842469], [1435985280.0, 12200000.0, 0.9822872507286886], [1435987008.0, 12220000.0, 0.9845643345292053], [1435988736.0, 12240000.0, 0.9866859442078679], [1435990464.0, 12260000.0, 0.988651744737914], [1435992192.0, 12280000.0, 0.9904614256966512], [1435993920.0, 12300000.0, 0.9921147013144778], [1435995648.0, 12320000.0, 0.9936113105200084], [1435997376.0, 12340000.0, 0.9949510169813002], [1435999104.0, 12360000.0, 0.9961336091431725], [1436000832.0, 12380000.0, 0.9971589002606139], [1436002560.0, 12400000.0, 0.9980267284282716], [1436004288.0, 12420000.0, 0.9987369566060175], [1436006016.0, 12440000.0, 0.9992894726405892], [1436007744.0, 12460000.0, 0.9996841892832999], [1436009472.0, 12480000.0, 0.9999210442038161], [1436011200.0, 12500000.0, 1.0], [1436012928.0, 12520000.0, 0.9999210442038161], [1436014656.0, 12540000.0, 0.9996841892832999], [1436016384.0, 12560000.0, 0.9992894726405892], [1436018112.0, 12580000.0, 0.9987369566060175], [1436019840.0, 12600000.0, 0.9980267284282716], [1436021568.0, 12620000.0, 0.9971589002606139], [1436023296.0, 12640000.0, 0.9961336091431725], [1436025024.0, 12660000.0, 0.9949510169813002], [1436026752.0, 12680000.0, 0.9936113105200084], [1436028480.0, 12700000.0, 0.9921147013144779], [1436030208.0, 12720000.0, 0.9904614256966512], [1436031936.0, 12740000.0, 0.9886517447379142], [1436033664.0, 12760000.0, 0.986685944207868], [1436035392.0, 12780000.0, 0.9845643345292054], [1436037120.0, 12800000.0, 0.9822872507286886], [1436038848.0, 12820000.0, 0.979855052384247], [1436040576.0, 12840000.0, 0.9772681235681934], [1436042304.0, 12860000.0, 0.9745268727865772], [1436044032.0, 12880000.0, 0.9716317329146742], [1436045760.0, 12900000.0, 0.9685831611286311], [1436047488.0, 12920000.0, 0.9653816388332741], [1436049216.0, 12940000.0, 0.9620276715860858], [1436050944.0, 12960000.0, 0.9585217890173761], [1436052672.0, 12980000.0, 0.9548645447466428], [1436054400.0, 13000000.0, 0.9510565162951536], [1436056128.0, 13020000.0, 0.947098304994744], [1436057856.0, 13040000.0, 0.9429905358928645], [1436059584.0, 13060000.0, 0.9387338576538744], [1436061312.0, 13080000.0, 0.934328942456612], [1436063040.0, 13100000.0, 0.9297764858882517], [1436064768.0, 13120000.0, 0.9250772068344579], [1436066496.0, 13140000.0, 0.9202318473658705], [1436068224.0, 13160000.0, 0.9152411726209173], [1436069952.0, 13180000.0, 0.9101059706849958], [1436071680.0, 13200000.0, 0.9048270524660192], [1436073408.0, 13220000.0, 0.8994052515663711], [1436075136.0, 13240000.0, 0.8938414241512633], [1436076864.0, 13260000.0, 0.8881364488135445], [1436078592.0, 13280000.0, 0.8822912264349536], [1436080320.0, 13300000.0, 0.8763066800438634], [1436082048.0, 13320000.0, 0.8701837546695259], [1436083776.0, 13340000.0, 0.863923417192835], [1436085504.0, 13360000.0, 0.8575266561936523], [1436087232.0, 13380000.0, 0.8509944817946914], [1436088960.0, 13400000.0, 0.8443279255020151], [1436090688.0, 13420000.0, 0.8375280400421411], [1436092416.0, 13440000.0, 0.8305958991958126], [1436094144.0, 13460000.0, 0.8235325976284278], [1436095872.0, 13480000.0, 0.8163392507171837], [1436097600.0, 13500000.0, 0.8090169943749477], [1436099328.0, 13520000.0, 0.8015669848708762], [1436101056.0, 13540000.0, 0.7939903986478354], [1436102784.0, 13560000.0, 0.7862884321366184], [1436104512.0, 13580000.0, 0.7784623015670233], [1436106240.0, 13600000.0, 0.7705132427757886], [1436107968.0, 13620000.0, 0.7624425110114477], [1436109696.0, 13640000.0, 0.7542513807361041], [1436111424.0, 13660000.0, 0.7459411454241818], [1436113152.0, 13680000.0, 0.737513117358174], [1436114880.0, 13700000.0, 0.728968627421411], [1436116608.0, 13720000.0, 0.7203090248879069], [1436118336.0, 13740000.0, 0.7115356772092847], [1436120064.0, 13760000.0, 0.7026499697988503], [1436121792.0, 13780000.0, 0.6936533058128054], [1436123520.0, 13800000.0, 0.6845471059286897], [1436125248.0, 13820000.0, 0.6753328081210247], [1436126976.0, 13840000.0, 0.6660118674342526], [1436128704.0, 13860000.0, 0.6565857557529566], [1436130432.0, 13880000.0, 0.6470559615694451], [1436132160.0, 13900000.0, 0.6374239897486911], [1436133888.0, 13920000.0, 0.627691361290701], [1436135616.0, 13940000.0, 0.6178596130903355], [1436137344.0, 13960000.0, 0.6079302976946058], [1436139072.0, 13980000.0, 0.5979049830575199], [1436140800.0, 14000000.0, 0.5877852522924734], [1436142528.0, 14020000.0, 0.5775727034222685], [1436144256.0, 14040000.0, 0.5672689491267566], [1436145984.0, 14060000.0, 0.5568756164881887], [1436147712.0, 14080000.0, 0.5463943467342705], [1436149440.0, 14100000.0, 0.5358267949789972], [1436151168.0, 14120000.0, 0.5251746299612969], [1436152896.0, 14140000.0, 0.5144395337815069], [1436154624.0, 14160000.0, 0.5036232016357619], [1436156352.0, 14180000.0, 0.4927273415482918], [1436158080.0, 14200000.0, 0.4817536741017162], [1436159808.0, 14220000.0, 0.47070393216533263], [1436161536.0, 14240000.0, 0.4595798606214886], [1436163264.0, 14260000.0, 0.44838321609003373], [1436164992.0, 14280000.0, 0.4371157666509335], [1436166720.0, 14300000.0, 0.42577929156507394], [1436168448.0, 14320000.0, 0.41437558099328453], [1436170176.0, 14340000.0, 0.40290643571366375], [1436171904.0, 14360000.0, 0.3913736668372026], [1436173632.0, 14380000.0, 0.379779095521802], [1436175360.0, 14400000.0, 0.368124552684678], [1436177088.0, 14420000.0, 0.3564118787132514], [1436178816.0, 14440000.0, 0.34464292317451684], [1436180544.0, 14460000.0, 0.3328195445229872], [1436182272.0, 14480000.0, 0.32094360980721076], [1436184000.0, 14500000.0, 0.3090169943749478], [1436185728.0, 14520000.0, 0.297041581577036], [1436187456.0, 14540000.0, 0.2850192624699763], [1436189184.0, 14560000.0, 0.2729519355173261], [1436190912.0, 14580000.0, 0.2608415062898969], [1436192640.0, 14600000.0, 0.2486898871648555], [1436194368.0, 14620000.0, 0.2364989970237244], [1436196096.0, 14640000.0, 0.22427076094938167], [1436197824.0, 14660000.0, 0.2120071099220559], [1436199552.0, 14680000.0, 0.1997099805144073], [1436201280.0, 14700000.0, 0.18738131458572568], [1436203008.0, 14720000.0, 0.17502305897527612], [1436204736.0, 14740000.0, 0.16263716519488444], [1436206464.0, 14760000.0, 0.15022558912075692], [1436208192.0, 14780000.0, 0.13779029068463872], [1436209920.0, 14800000.0, 0.1253332335643039], [1436211648.0, 14820000.0, 0.11285638487348212], [1436213376.0, 14840000.0, 0.1003617148512161], [1436215104.0, 14860000.0, 0.0878511965507434], [1436216832.0, 14880000.0, 0.07532680552793372], [1436218560.0, 14900000.0, 0.06279051952931339], [1436220288.0, 14920000.0, 0.05024431817977035], [1436222016.0, 14940000.0, 0.03769018266993433], [1436223744.0, 14960000.0, 0.02513009544333806], [1436225472.0, 14980000.0, 0.012566039883352193], [1436227200.0, 15000000.0, 3.6739403974420594e-16], [1436228928.0, 15020000.0, -0.012566039883351459], [1436230656.0, 15040000.0, -0.025130095443337323], [1436232384.0, 15060000.0, -0.037690182669933604], [1436234112.0, 15080000.0, -0.05024431817976961], [1436235840.0, 15100000.0, -0.06279051952931265], [1436237568.0, 15120000.0, -0.07532680552793299], [1436239296.0, 15140000.0, -0.08785119655074267], [1436241024.0, 15160000.0, -0.10036171485121537], [1436242752.0, 15180000.0, -0.11285638487348139], [1436244480.0, 15200000.0, -0.12533323356430318], [1436246208.0, 15220000.0, -0.13779029068463797], [1436247936.0, 15240000.0, -0.1502255891207562], [1436249664.0, 15260000.0, -0.16263716519488372], [1436251392.0, 15280000.0, -0.1750230589752754], [1436253120.0, 15300000.0, -0.18738131458572496], [1436254848.0, 15320000.0, -0.19970998051440658], [1436256576.0, 15340000.0, -0.21200710992205518], [1436258304.0, 15360000.0, -0.22427076094938095], [1436260032.0, 15380000.0, -0.2364989970237237], [1436261760.0, 15400000.0, -0.24868988716485477], [1436263488.0, 15420000.0, -0.26084150628989616], [1436265216.0, 15440000.0, -0.27295193551732544], [1436266944.0, 15460000.0, -0.28501926246997555], [1436268672.0, 15480000.0, -0.2970415815770353], [1436270400.0, 15500000.0, -0.30901699437494706], [1436272128.0, 15520000.0, -0.3209436098072101], [1436273856.0, 15540000.0, -0.3328195445229865], [1436275584.0, 15560000.0, -0.34464292317451617], [1436277312.0, 15580000.0, -0.35641187871325075], [1436279040.0, 15600000.0, -0.36812455268467725], [1436280768.0, 15620000.0, -0.37977909552180134], [1436282496.0, 15640000.0, -0.39137366683720193], [1436284224.0, 15660000.0, -0.4029064357136631], [1436285952.0, 15680000.0, -0.41437558099328387], [1436287680.0, 15700000.0, -0.42577929156507327], [1436289408.0, 15720000.0, -0.4371157666509328], [1436291136.0, 15740000.0, -0.44838321609003307], [1436292864.0, 15760000.0, -0.459579860621488], [1436294592.0, 15780000.0, -0.47070393216533196], [1436296320.0, 15800000.0, -0.48175367410171555], [1436298048.0, 15820000.0, -0.4927273415482912], [1436299776.0, 15840000.0, -0.5036232016357614], [1436301504.0, 15860000.0, -0.5144395337815062], [1436303232.0, 15880000.0, -0.5251746299612964], [1436304960.0, 15900000.0, -0.5358267949789965], [1436306688.0, 15920000.0, -0.5463943467342699], [1436308416.0, 15940000.0, -0.5568756164881882], [1436310144.0, 15960000.0, -0.567268949126756], [1436311872.0, 15980000.0, -0.577572703422268], [1436313600.0, 16000000.0, -0.5877852522924728], [1436315328.0, 16020000.0, -0.5979049830575194], [1436317056.0, 16040000.0, -0.6079302976946053], [1436318784.0, 16060000.0, -0.617859613090335], [1436320512.0, 16080000.0, -0.6276913612907005], [1436322240.0, 16100000.0, -0.6374239897486905], [1436323968.0, 16120000.0, -0.6470559615694444], [1436325696.0, 16140000.0, -0.6565857557529561], [1436327424.0, 16160000.0, -0.666011867434252], [1436329152.0, 16180000.0, -0.6753328081210243], [1436330880.0, 16200000.0, -0.6845471059286892], [1436332608.0, 16220000.0, -0.6936533058128049], [1436334336.0, 16240000.0, -0.7026499697988499], [1436336064.0, 16260000.0, -0.7115356772092841], [1436337792.0, 16280000.0, -0.7203090248879064], [1436339520.0, 16300000.0, -0.7289686274214106], [1436341248.0, 16320000.0, -0.7375131173581736], [1436342976.0, 16340000.0, -0.7459411454241813], [1436344704.0, 16360000.0, -0.7542513807361036], [1436346432.0, 16380000.0, -0.7624425110114472], [1436348160.0, 16400000.0, -0.770513242775788], [1436349888.0, 16420000.0, -0.7784623015670229], [1436351616.0, 16440000.0, -0.7862884321366179], [1436353344.0, 16460000.0, -0.7939903986478349], [1436355072.0, 16480000.0, -0.8015669848708757], [1436356800.0, 16500000.0, -0.8090169943749472], [1436358528.0, 16520000.0, -0.8163392507171833], [1436360256.0, 16540000.0, -0.8235325976284273], [1436361984.0, 16560000.0, -0.8305958991958121], [1436363712.0, 16580000.0, -0.8375280400421408], [1436365440.0, 16600000.0, -0.8443279255020146], [1436367168.0, 16620000.0, -0.8509944817946911], [1436368896.0, 16640000.0, -0.857526656193652], [1436370624.0, 16660000.0, -0.8639234171928346], [1436372352.0, 16680000.0, -0.8701837546695255], [1436374080.0, 16700000.0, -0.876306680043863], [1436375808.0, 16720000.0, -0.8822912264349532], [1436377536.0, 16740000.0, -0.8881364488135441], [1436379264.0, 16760000.0, -0.893841424151263], [1436380992.0, 16780000.0, -0.8994052515663707], [1436382720.0, 16800000.0, -0.9048270524660189], [1436384448.0, 16820000.0, -0.9101059706849954], [1436386176.0, 16840000.0, -0.9152411726209171], [1436387904.0, 16860000.0, -0.9202318473658703], [1436389632.0, 16880000.0, -0.9250772068344576], [1436391360.0, 16900000.0, -0.9297764858882513], [1436393088.0, 16920000.0, -0.9343289424566118], [1436394816.0, 16940000.0, -0.9387338576538742], [1436396544.0, 16960000.0, -0.9429905358928643], [1436398272.0, 16980000.0, -0.9470983049947438], [1436400000.0, 17000000.0, -0.9510565162951534], [1436401728.0, 17020000.0, -0.9548645447466426], [1436403456.0, 17040000.0, -0.9585217890173758], [1436405184.0, 17060000.0, -0.9620276715860856], [1436406912.0, 17080000.0, -0.9653816388332739], [1436408640.0, 17100000.0, -0.968583161128631], [1436410368.0, 17120000.0, -0.971631732914674], [1436412096.0, 17140000.0, -0.974526872786577], [1436413824.0, 17160000.0, -0.9772681235681931], [1436415552.0, 17180000.0, -0.9798550523842467], [1436417280.0, 17200000.0, -0.9822872507286885], [1436419008.0, 17220000.0, -0.9845643345292053], [1436420736.0, 17240000.0, -0.9866859442078679], [1436422464.0, 17260000.0, -0.9886517447379141], [1436424192.0, 17280000.0, -0.9904614256966511], [1436425920.0, 17300000.0, -0.9921147013144779], [1436427648.0, 17320000.0, -0.9936113105200084], [1436429376.0, 17340000.0, -0.9949510169813001], [1436431104.0, 17360000.0, -0.9961336091431724], [1436432832.0, 17380000.0, -0.9971589002606138], [1436434560.0, 17400000.0, -0.9980267284282716], [1436436288.0, 17420000.0, -0.9987369566060175], [1436438016.0, 17440000.0, -0.9992894726405892], [1436439744.0, 17460000.0, -0.9996841892832999], [1436441472.0, 17480000.0, -0.9999210442038161], [1436443200.0, 17500000.0, -1.0], [1436444928.0, 17520000.0, -0.9999210442038161], [1436446656.0, 17540000.0, -0.9996841892832999], [1436448384.0, 17560000.0, -0.9992894726405893], [1436450112.0, 17580000.0, -0.9987369566060175], [1436451840.0, 17600000.0, -0.9980267284282716], [1436453568.0, 17620000.0, -0.9971589002606139], [1436455296.0, 17640000.0, -0.9961336091431725], [1436457024.0, 17660000.0, -0.9949510169813001], [1436458752.0, 17680000.0, -0.9936113105200084], [1436460480.0, 17700000.0, -0.992114701314478], [1436462208.0, 17720000.0, -0.9904614256966512], [1436463936.0, 17740000.0, -0.9886517447379142], [1436465664.0, 17760000.0, -0.986685944207868], [1436467392.0, 17780000.0, -0.9845643345292056], [1436469120.0, 17800000.0, -0.9822872507286886], [1436470848.0, 17820000.0, -0.979855052384247], [1436472576.0, 17840000.0, -0.9772681235681934], [1436474304.0, 17860000.0, -0.9745268727865772], [1436476032.0, 17880000.0, -0.9716317329146742], [1436477760.0, 17900000.0, -0.9685831611286312], [1436479488.0, 17920000.0, -0.9653816388332741], [1436481216.0, 17940000.0, -0.9620276715860858], [1436482944.0, 17960000.0, -0.9585217890173761], [1436484672.0, 17980000.0, -0.9548645447466428], [1436486400.0, 18000000.0, -0.9510565162951538], [1436488128.0, 18020000.0, -0.9470983049947441], [1436489856.0, 18040000.0, -0.9429905358928645], [1436491584.0, 18060000.0, -0.9387338576538744], [1436493312.0, 18080000.0, -0.934328942456612], [1436495040.0, 18100000.0, -0.9297764858882517], [1436496768.0, 18120000.0, -0.9250772068344579], [1436498496.0, 18140000.0, -0.9202318473658706], [1436500224.0, 18160000.0, -0.9152411726209174], [1436501952.0, 18180000.0, -0.9101059706849959], [1436503680.0, 18200000.0, -0.9048270524660192], [1436505408.0, 18220000.0, -0.8994052515663711], [1436507136.0, 18240000.0, -0.8938414241512634], [1436508864.0, 18260000.0, -0.8881364488135445], [1436510592.0, 18280000.0, -0.8822912264349536], [1436512320.0, 18300000.0, -0.8763066800438635], [1436514048.0, 18320000.0, -0.8701837546695259], [1436515776.0, 18340000.0, -0.863923417192835], [1436517504.0, 18360000.0, -0.8575266561936524], [1436519232.0, 18380000.0, -0.8509944817946915], [1436520960.0, 18400000.0, -0.8443279255020151], [1436522688.0, 18420000.0, -0.8375280400421412], [1436524416.0, 18440000.0, -0.8305958991958126], [1436526144.0, 18460000.0, -0.8235325976284278], [1436527872.0, 18480000.0, -0.8163392507171837], [1436529600.0, 18500000.0, -0.8090169943749477], [1436531328.0, 18520000.0, -0.8015669848708763], [1436533056.0, 18540000.0, -0.7939903986478355], [1436534784.0, 18560000.0, -0.7862884321366185], [1436536512.0, 18580000.0, -0.7784623015670235], [1436538240.0, 18600000.0, -0.7705132427757886], [1436539968.0, 18620000.0, -0.7624425110114478], [1436541696.0, 18640000.0, -0.7542513807361042], [1436543424.0, 18660000.0, -0.7459411454241819], [1436545152.0, 18680000.0, -0.7375131173581742], [1436546880.0, 18700000.0, -0.7289686274214111], [1436548608.0, 18720000.0, -0.720309024887907], [1436550336.0, 18740000.0, -0.7115356772092848], [1436552064.0, 18760000.0, -0.7026499697988504], [1436553792.0, 18780000.0, -0.6936533058128055], [1436555520.0, 18800000.0, -0.6845471059286898], [1436557248.0, 18820000.0, -0.6753328081210248], [1436558976.0, 18840000.0, -0.6660118674342526], [1436560704.0, 18860000.0, -0.6565857557529566], [1436562432.0, 18880000.0, -0.6470559615694451], [1436564160.0, 18900000.0, -0.6374239897486912], [1436565888.0, 18920000.0, -0.6276913612907011], [1436567616.0, 18940000.0, -0.6178596130903357], [1436569344.0, 18960000.0, -0.6079302976946059], [1436571072.0, 18980000.0, -0.59790498305752], [1436572800.0, 19000000.0, -0.5877852522924735], [1436574528.0, 19020000.0, -0.5775727034222686], [1436576256.0, 19040000.0, -0.5672689491267567], [1436577984.0, 19060000.0, -0.5568756164881888], [1436579712.0, 19080000.0, -0.5463943467342706], [1436581440.0, 19100000.0, -0.5358267949789973], [1436583168.0, 19120000.0, -0.525174629961297], [1436584896.0, 19140000.0, -0.514439533781507], [1436586624.0, 19160000.0, -0.503623201635762], [1436588352.0, 19180000.0, -0.4927273415482919], [1436590080.0, 19200000.0, -0.4817536741017163], [1436591808.0, 19220000.0, -0.47070393216533274], [1436593536.0, 19240000.0, -0.4595798606214887], [1436595264.0, 19260000.0, -0.44838321609003384], [1436596992.0, 19280000.0, -0.4371157666509336], [1436598720.0, 19300000.0, -0.42577929156507405], [1436600448.0, 19320000.0, -0.41437558099328464], [1436602176.0, 19340000.0, -0.40290643571366386], [1436603904.0, 19360000.0, -0.3913736668372027], [1436605632.0, 19380000.0, -0.3797790955218021], [1436607360.0, 19400000.0, -0.3681245526846781], [1436609088.0, 19420000.0, -0.35641187871325153], [1436610816.0, 19440000.0, -0.34464292317451695], [1436612544.0, 19460000.0, -0.3328195445229873], [1436614272.0, 19480000.0, -0.3209436098072109], [1436616000.0, 19500000.0, -0.3090169943749479], [1436617728.0, 19520000.0, -0.29704158157703614], [1436619456.0, 19540000.0, -0.2850192624699764], [1436621184.0, 19560000.0, -0.2729519355173262], [1436622912.0, 19580000.0, -0.260841506289897], [1436624640.0, 19600000.0, -0.2486898871648556], [1436626368.0, 19620000.0, -0.23649899702372454], [1436628096.0, 19640000.0, -0.22427076094938178], [1436629824.0, 19660000.0, -0.21200710992205601], [1436631552.0, 19680000.0, -0.19970998051440741], [1436633280.0, 19700000.0, -0.1873813145857258], [1436635008.0, 19720000.0, -0.17502305897527623], [1436636736.0, 19740000.0, -0.16263716519488458], [1436638464.0, 19760000.0, -0.15022558912075704], [1436640192.0, 19780000.0, -0.13779029068463883], [1436641920.0, 19800000.0, -0.125333233564304], [1436643648.0, 19820000.0, -0.11285638487348224], [1436645376.0, 19840000.0, -0.10036171485121623], [1436647104.0, 19860000.0, -0.08785119655074351], [1436648832.0, 19880000.0, -0.07532680552793385], [1436650560.0, 19900000.0, -0.06279051952931351], [1436652288.0, 19920000.0, -0.05024431817977047], [1436654016.0, 19940000.0, -0.03769018266993446], [1436655744.0, 19960000.0, -0.02513009544333818], [1436657472.0, 19980000.0, -0.012566039883352316], [1436659200.0, 20000000.0, -4.898587196589413e-16], [1436660928.0, 20020000.0, 0.012566039883351336], [1436662656.0, 20040000.0, 0.025130095443337202], [1436664384.0, 20060000.0, 0.03769018266993348], [1436666112.0, 20080000.0, 0.050244318179769494], [1436667840.0, 20100000.0, 0.06279051952931075], [1436669568.0, 20120000.0, 0.07532680552793287], [1436671296.0, 20140000.0, 0.08785119655074078], [1436673024.0, 20160000.0, 0.10036171485121524], [1436674752.0, 20180000.0, 0.1128563848734795], [1436676480.0, 20200000.0, 0.12533323356430304], [1436678208.0, 20220000.0, 0.1377902906846361], [1436679936.0, 20240000.0, 0.15022558912075606], [1436681664.0, 20260000.0, 0.16263716519488186], [1436683392.0, 20280000.0, 0.1750230589752753], [1436685120.0, 20300000.0, 0.1873813145857231], [1436686848.0, 20320000.0, 0.19970998051440647], [1436688576.0, 20340000.0, 0.21200710992205332], [1436690304.0, 20360000.0, 0.22427076094938084], [1436692032.0, 20380000.0, 0.23649899702372357], [1436693760.0, 20400000.0, 0.24868988716485466], [1436695488.0, 20420000.0, 0.26084150628989605], [1436697216.0, 20440000.0, 0.2729519355173253], [1436698944.0, 20460000.0, 0.2850192624699737], [1436700672.0, 20480000.0, 0.2970415815770352], [1436702400.0, 20500000.0, 0.30901699437494523], [1436704128.0, 20520000.0, 0.32094360980720993], [1436705856.0, 20540000.0, 0.3328195445229847], [1436707584.0, 20560000.0, 0.34464292317451606], [1436709312.0, 20580000.0, 0.356411878713249], [1436711040.0, 20600000.0, 0.36812455268467714], [1436712768.0, 20620000.0, 0.3797790955217996], [1436714496.0, 20640000.0, 0.3913736668372018], [1436716224.0, 20660000.0, 0.40290643571366136], [1436717952.0, 20680000.0, 0.41437558099328375], [1436719680.0, 20700000.0, 0.42577929156507155], [1436721408.0, 20720000.0, 0.4371157666509327], [1436723136.0, 20740000.0, 0.44838321609003134], [1436724864.0, 20760000.0, 0.45957986062148787], [1436726592.0, 20780000.0, 0.47070393216533185], [1436728320.0, 20800000.0, 0.48175367410171543], [1436730048.0, 20820000.0, 0.49272734154829106], [1436731776.0, 20840000.0, 0.5036232016357612], [1436733504.0, 20860000.0, 0.5144395337815046], [1436735232.0, 20880000.0, 0.5251746299612963], [1436736960.0, 20900000.0, 0.535826794978995], [1436738688.0, 20920000.0, 0.5463943467342698], [1436740416.0, 20940000.0, 0.5568756164881866], [1436742144.0, 20960000.0, 0.5672689491267559], [1436743872.0, 20980000.0, 0.5775727034222664], [1436745600.0, 21000000.0, 0.5877852522924727], [1436747328.0, 21020000.0, 0.5979049830575178], [1436749056.0, 21040000.0, 0.6079302976946052], [1436750784.0, 21060000.0, 0.6178596130903335], [1436752512.0, 21080000.0, 0.6276913612907004], [1436754240.0, 21100000.0, 0.6374239897486891], [1436755968.0, 21120000.0, 0.6470559615694444], [1436757696.0, 21140000.0, 0.656585755752956], [1436759424.0, 21160000.0, 0.6660118674342519], [1436761152.0, 21180000.0, 0.6753328081210241], [1436762880.0, 21200000.0, 0.6845471059286891], [1436764608.0, 21220000.0, 0.6936533058128035], [1436766336.0, 21240000.0, 0.7026499697988497], [1436768064.0, 21260000.0, 0.7115356772092841], [1436769792.0, 21280000.0, 0.7203090248879076], [1436771520.0, 21300000.0, 0.7289686274214104], [1436773248.0, 21320000.0, 0.7375131173581735], [1436774976.0, 21340000.0, 0.7459411454241812], [1436776704.0, 21360000.0, 0.7542513807361035], [1436778432.0, 21380000.0, 0.7624425110114471], [1436780160.0, 21400000.0, 0.7705132427757891], [1436781888.0, 21420000.0, 0.7784623015670228], [1436783616.0, 21440000.0, 0.7862884321366189], [1436785344.0, 21460000.0, 0.7939903986478348], [1436787072.0, 21480000.0, 0.8015669848708767], [1436788800.0, 21500000.0, 0.8090169943749471], [1436790528.0, 21520000.0, 0.8163392507171843], [1436792256.0, 21540000.0, 0.8235325976284272], [1436793984.0, 21560000.0, 0.830595899195813], [1436795712.0, 21580000.0, 0.8375280400421407], [1436797440.0, 21600000.0, 0.8443279255020155], [1436799168.0, 21620000.0, 0.850994481794691], [1436800896.0, 21640000.0, 0.8575266561936529], [1436802624.0, 21660000.0, 0.8639234171928346], [1436804352.0, 21680000.0, 0.8701837546695255], [1436806080.0, 21700000.0, 0.876306680043863], [1436807808.0, 21720000.0, 0.8822912264349532], [1436809536.0, 21740000.0, 0.888136448813544], [1436811264.0, 21760000.0, 0.8938414241512638], [1436812992.0, 21780000.0, 0.8994052515663706], [1436814720.0, 21800000.0, 0.9048270524660196], [1436816448.0, 21820000.0, 0.9101059706849954], [1436818176.0, 21840000.0, 0.9152411726209178], [1436819904.0, 21860000.0, 0.9202318473658702], [1436821632.0, 21880000.0, 0.9250772068344583], [1436823360.0, 21900000.0, 0.9297764858882513], [1436825088.0, 21920000.0, 0.9343289424566124], [1436826816.0, 21940000.0, 0.9387338576538741], [1436828544.0, 21960000.0, 0.9429905358928649], [1436830272.0, 21980000.0, 0.9470983049947438], [1436832000.0, 22000000.0, 0.951056516295154], [1436833728.0, 22020000.0, 0.9548645447466426], [1436835456.0, 22040000.0, 0.9585217890173763], [1436837184.0, 22060000.0, 0.9620276715860856], [1436838912.0, 22080000.0, 0.9653816388332739], [1436840640.0, 22100000.0, 0.9685831611286309], [1436842368.0, 22120000.0, 0.971631732914674], [1436844096.0, 22140000.0, 0.974526872786577], [1436845824.0, 22160000.0, 0.9772681235681935], [1436847552.0, 22180000.0, 0.9798550523842467], [1436849280.0, 22200000.0, 0.9822872507286888], [1436851008.0, 22220000.0, 0.9845643345292053], [1436852736.0, 22240000.0, 0.9866859442078681], [1436854464.0, 22260000.0, 0.988651744737914], [1436856192.0, 22280000.0, 0.9904614256966513], [1436857920.0, 22300000.0, 0.9921147013144779], [1436859648.0, 22320000.0, 0.9936113105200085], [1436861376.0, 22340000.0, 0.9949510169813001], [1436863104.0, 22360000.0, 0.9961336091431726], [1436864832.0, 22380000.0, 0.9971589002606138], [1436866560.0, 22400000.0, 0.9980267284282717], [1436868288.0, 22420000.0, 0.9987369566060175], [1436870016.0, 22440000.0, 0.9992894726405892], [1436871744.0, 22460000.0, 0.9996841892832999], [1436873472.0, 22480000.0, 0.9999210442038161], [1436875200.0, 22500000.0, 1.0], [1436876928.0, 22520000.0, 0.9999210442038161], [1436878656.0, 22540000.0, 0.9996841892832999], [1436880384.0, 22560000.0, 0.9992894726405893], [1436882112.0, 22580000.0, 0.9987369566060175], [1436883840.0, 22600000.0, 0.9980267284282718], [1436885568.0, 22620000.0, 0.9971589002606139], [1436887296.0, 22640000.0, 0.9961336091431727], [1436889024.0, 22660000.0, 0.9949510169813002], [1436890752.0, 22680000.0, 0.9936113105200086], [1436892480.0, 22700000.0, 0.992114701314478], [1436894208.0, 22720000.0, 0.9904614256966515], [1436895936.0, 22740000.0, 0.9886517447379142], [1436897664.0, 22760000.0, 0.9866859442078684], [1436899392.0, 22780000.0, 0.9845643345292056], [1436901120.0, 22800000.0, 0.9822872507286889], [1436902848.0, 22820000.0, 0.979855052384247], [1436904576.0, 22840000.0, 0.9772681235681938], [1436906304.0, 22860000.0, 0.9745268727865772], [1436908032.0, 22880000.0, 0.9716317329146742], [1436909760.0, 22900000.0, 0.9685831611286312], [1436911488.0, 22920000.0, 0.9653816388332741], [1436913216.0, 22940000.0, 0.9620276715860859], [1436914944.0, 22960000.0, 0.9585217890173766], [1436916672.0, 22980000.0, 0.9548645447466428], [1436918400.0, 23000000.0, 0.9510565162951543], [1436920128.0, 23020000.0, 0.9470983049947441], [1436921856.0, 23040000.0, 0.9429905358928652], [1436923584.0, 23060000.0, 0.9387338576538745], [1436925312.0, 23080000.0, 0.9343289424566127], [1436927040.0, 23100000.0, 0.9297764858882518], [1436928768.0, 23120000.0, 0.9250772068344587], [1436930496.0, 23140000.0, 0.9202318473658706], [1436932224.0, 23160000.0, 0.9152411726209182], [1436933952.0, 23180000.0, 0.9101059706849959], [1436935680.0, 23200000.0, 0.90482705246602], [1436937408.0, 23220000.0, 0.8994052515663712], [1436939136.0, 23240000.0, 0.8938414241512642], [1436940864.0, 23260000.0, 0.8881364488135446], [1436942592.0, 23280000.0, 0.8822912264349537], [1436944320.0, 23300000.0, 0.8763066800438635], [1436946048.0, 23320000.0, 0.870183754669526], [1436947776.0, 23340000.0, 0.8639234171928352], [1436949504.0, 23360000.0, 0.8575266561936534], [1436951232.0, 23380000.0, 0.8509944817946915], [1436952960.0, 23400000.0, 0.8443279255020162], [1436954688.0, 23420000.0, 0.8375280400421413], [1436956416.0, 23440000.0, 0.8305958991958137], [1436958144.0, 23460000.0, 0.8235325976284279], [1436959872.0, 23480000.0, 0.8163392507171848], [1436961600.0, 23500000.0, 0.8090169943749478], [1436963328.0, 23520000.0, 0.8015669848708774], [1436965056.0, 23540000.0, 0.7939903986478356], [1436966784.0, 23560000.0, 0.7862884321366196], [1436968512.0, 23580000.0, 0.7784623015670236], [1436970240.0, 23600000.0, 0.7705132427757898], [1436971968.0, 23620000.0, 0.7624425110114478], [1436973696.0, 23640000.0, 0.7542513807361043], [1436975424.0, 23660000.0, 0.745941145424182], [1436977152.0, 23680000.0, 0.7375131173581743], [1436978880.0, 23700000.0, 0.7289686274214112], [1436980608.0, 23720000.0, 0.7203090248879084], [1436982336.0, 23740000.0, 0.7115356772092849], [1436984064.0, 23760000.0, 0.7026499697988505], [1436985792.0, 23780000.0, 0.6936533058128043], [1436987520.0, 23800000.0, 0.6845471059286898], [1436989248.0, 23820000.0, 0.6753328081210249], [1436990976.0, 23840000.0, 0.6660118674342527], [1436992704.0, 23860000.0, 0.6565857557529567], [1436994432.0, 23880000.0, 0.6470559615694452], [1436996160.0, 23900000.0, 0.6374239897486899], [1436997888.0, 23920000.0, 0.6276913612907012], [1436999616.0, 23940000.0, 0.6178596130903343], [1437001344.0, 23960000.0, 0.607930297694606], [1437003072.0, 23980000.0, 0.5979049830575187], [1437004800.0, 24000000.0, 0.5877852522924736], [1437006528.0, 24020000.0, 0.5775727034222673], [1437008256.0, 24040000.0, 0.5672689491267568], [1437009984.0, 24060000.0, 0.5568756164881875], [1437011712.0, 24080000.0, 0.5463943467342707], [1437013440.0, 24100000.0, 0.5358267949789959], [1437015168.0, 24120000.0, 0.5251746299612972], [1437016896.0, 24140000.0, 0.5144395337815055], [1437018624.0, 24160000.0, 0.5036232016357621], [1437020352.0, 24180000.0, 0.492727341548292], [1437022080.0, 24200000.0, 0.48175367410171643], [1437023808.0, 24220000.0, 0.47070393216533285], [1437025536.0, 24240000.0, 0.4595798606214888], [1437027264.0, 24260000.0, 0.44838321609003234], [1437028992.0, 24280000.0, 0.4371157666509337], [1437030720.0, 24300000.0, 0.42577929156507255], [1437032448.0, 24320000.0, 0.41437558099328475], [1437034176.0, 24340000.0, 0.40290643571366236], [1437035904.0, 24360000.0, 0.3913736668372028], [1437037632.0, 24380000.0, 0.3797790955218006], [1437039360.0, 24400000.0, 0.3681245526846782], [1437041088.0, 24420000.0, 0.35641187871325003], [1437042816.0, 24440000.0, 0.3446429231745171], [1437044544.0, 24460000.0, 0.33281954452298573], [1437046272.0, 24480000.0, 0.320943609807211], [1437048000.0, 24500000.0, 0.3090169943749463], [1437049728.0, 24520000.0, 0.29704158157703625], [1437051456.0, 24540000.0, 0.2850192624699748], [1437053184.0, 24560000.0, 0.2729519355173264], [1437054912.0, 24580000.0, 0.2608415062898971], [1437056640.0, 24600000.0, 0.2486898871648557], [1437058368.0, 24620000.0, 0.23649899702372465], [1437060096.0, 24640000.0, 0.22427076094938192], [1437061824.0, 24660000.0, 0.2120071099220544], [1437063552.0, 24680000.0, 0.19970998051440755], [1437065280.0, 24700000.0, 0.18738131458572418], [1437067008.0, 24720000.0, 0.17502305897527637], [1437068736.0, 24740000.0, 0.16263716519488294], [1437070464.0, 24760000.0, 0.15022558912075717], [1437072192.0, 24780000.0, 0.1377902906846372], [1437073920.0, 24800000.0, 0.12533323356430415], [1437075648.0, 24820000.0, 0.1128563848734806], [1437077376.0, 24840000.0, 0.10036171485121634], [1437079104.0, 24860000.0, 0.08785119655074188], [1437080832.0, 24880000.0, 0.07532680552793397], [1437082560.0, 24900000.0, 0.06279051952931186], [1437084288.0, 24920000.0, 0.05024431817977059], [1437086016.0, 24940000.0, 0.03769018266993458], [1437087744.0, 24960000.0, 0.0251300954433383], [1437089472.0, 24980000.0, 0.012566039883352437], [1437091200.0, 25000000.0, 6.123233995736766e-16], [1437092928.0, 25020000.0, -0.012566039883351214], [1437094656.0, 25040000.0, -0.02513009544333708], [1437096384.0, 25060000.0, -0.037690182669933354], [1437098112.0, 25080000.0, -0.05024431817976937], [1437099840.0, 25100000.0, -0.06279051952931064], [1437101568.0, 25120000.0, -0.07532680552793275], [1437103296.0, 25140000.0, -0.08785119655074065], [1437105024.0, 25160000.0, -0.10036171485121513], [1437106752.0, 25180000.0, -0.11285638487347938], [1437108480.0, 25200000.0, -0.12533323356430293], [1437110208.0, 25220000.0, -0.13779029068463597], [1437111936.0, 25240000.0, -0.15022558912075595], [1437113664.0, 25260000.0, -0.16263716519488172], [1437115392.0, 25280000.0, -0.17502305897527515], [1437117120.0, 25300000.0, -0.18738131458572296], [1437118848.0, 25320000.0, -0.19970998051440633], [1437120576.0, 25340000.0, -0.2120071099220532], [1437122304.0, 25360000.0, -0.22427076094938073], [1437124032.0, 25380000.0, -0.23649899702372346], [1437125760.0, 25400000.0, -0.24868988716485452], [1437127488.0, 25420000.0, -0.26084150628989594], [1437129216.0, 25440000.0, -0.27295193551732516], [1437130944.0, 25460000.0, -0.2850192624699736], [1437132672.0, 25480000.0, -0.29704158157703336], [1437134400.0, 25500000.0, -0.3090169943749451], [1437136128.0, 25520000.0, -0.3209436098072098], [1437137856.0, 25540000.0, -0.33281954452298623], [1437139584.0, 25560000.0, -0.34464292317451595], [1437141312.0, 25580000.0, -0.35641187871324886], [1437143040.0, 25600000.0, -0.3681245526846787], [1437144768.0, 25620000.0, -0.3797790955218011], [1437146496.0, 25640000.0, -0.3913736668372017], [1437148224.0, 25660000.0, -0.40290643571366125], [1437149952.0, 25680000.0, -0.41437558099328525], [1437151680.0, 25700000.0, -0.42577929156506983], [1437153408.0, 25720000.0, -0.4371157666509326], [1437155136.0, 25740000.0, -0.44838321609003123], [1437156864.0, 25760000.0, -0.45957986062148615], [1437158592.0, 25780000.0, -0.4707039321653302], [1437160320.0, 25800000.0, -0.4817536741017153], [1437162048.0, 25820000.0, -0.49272734154829095], [1437163776.0, 25840000.0, -0.5036232016357596], [1437165504.0, 25860000.0, -0.5144395337815045], [1437167232.0, 25880000.0, -0.5251746299612962], [1437168960.0, 25900000.0, -0.5358267949789964], [1437170688.0, 25920000.0, -0.5463943467342682], [1437172416.0, 25940000.0, -0.5568756164881865], [1437174144.0, 25960000.0, -0.5672689491267573], [1437175872.0, 25980000.0, -0.5775727034222677], [1437177600.0, 26000000.0, -0.5877852522924726], [1437179328.0, 26020000.0, -0.5979049830575177], [1437181056.0, 26040000.0, -0.6079302976946065], [1437182784.0, 26060000.0, -0.617859613090332], [1437184512.0, 26080000.0, -0.6276913612907004], [1437186240.0, 26100000.0, -0.637423989748689], [1437187968.0, 26120000.0, -0.647055961569443], [1437189696.0, 26140000.0, -0.6565857557529545], [1437191424.0, 26160000.0, -0.6660118674342518], [1437193152.0, 26180000.0, -0.675332808121024], [1437194880.0, 26200000.0, -0.6845471059286877], [1437196608.0, 26220000.0, -0.6936533058128034], [1437198336.0, 26240000.0, -0.7026499697988496], [1437200064.0, 26260000.0, -0.7115356772092852], [1437201792.0, 26280000.0, -0.7203090248879063], [1437203520.0, 26300000.0, -0.7289686274214103], [1437205248.0, 26320000.0, -0.7375131173581746], [1437206976.0, 26340000.0, -0.7459411454241823], [1437208704.0, 26360000.0, -0.7542513807361034], [1437210432.0, 26380000.0, -0.762442511011447], [1437212160.0, 26400000.0, -0.7705132427757901], [1437213888.0, 26420000.0, -0.7784623015670217], [1437215616.0, 26440000.0, -0.7862884321366188], [1437217344.0, 26460000.0, -0.7939903986478348], [1437219072.0, 26480000.0, -0.8015669848708777], [1437220800.0, 26500000.0, -0.809016994374946], [1437222528.0, 26520000.0, -0.8163392507171842], [1437224256.0, 26540000.0, -0.8235325976284272], [1437225984.0, 26560000.0, -0.830595899195812], [1437227712.0, 26580000.0, -0.8375280400421407], [1437229440.0, 26600000.0, -0.8443279255020155], [1437231168.0, 26620000.0, -0.8509944817946918], [1437232896.0, 26640000.0, -0.8575266561936519], [1437234624.0, 26660000.0, -0.8639234171928345], [1437236352.0, 26680000.0, -0.8701837546695262], [1437238080.0, 26700000.0, -0.8763066800438638], [1437239808.0, 26720000.0, -0.8822912264349531], [1437241536.0, 26740000.0, -0.888136448813544], [1437243264.0, 26760000.0, -0.8938414241512646], [1437244992.0, 26780000.0, -0.8994052515663699], [1437246720.0, 26800000.0, -0.9048270524660196], [1437248448.0, 26820000.0, -0.9101059706849953], [1437250176.0, 26840000.0, -0.9152411726209184], [1437251904.0, 26860000.0, -0.9202318473658695], [1437253632.0, 26880000.0, -0.9250772068344583], [1437255360.0, 26900000.0, -0.9297764858882513], [1437257088.0, 26920000.0, -0.9343289424566117], [1437258816.0, 26940000.0, -0.9387338576538734], [1437260544.0, 26960000.0, -0.9429905358928647], [1437262272.0, 26980000.0, -0.9470983049947443], [1437264000.0, 27000000.0, -0.9510565162951534], [1437265728.0, 27020000.0, -0.9548645447466425], [1437267456.0, 27040000.0, -0.9585217890173763], [1437269184.0, 27060000.0, -0.962027671586086], [1437270912.0, 27080000.0, -0.9653816388332738], [1437272640.0, 27100000.0, -0.9685831611286309], [1437274368.0, 27120000.0, -0.9716317329146743], [1437276096.0, 27140000.0, -0.9745268727865766], [1437277824.0, 27160000.0, -0.9772681235681935], [1437279552.0, 27180000.0, -0.9798550523842467], [1437281280.0, 27200000.0, -0.982287250728689], [1437283008.0, 27220000.0, -0.984564334529205], [1437284736.0, 27240000.0, -0.9866859442078681], [1437286464.0, 27260000.0, -0.988651744737914], [1437288192.0, 27280000.0, -0.9904614256966511], [1437289920.0, 27300000.0, -0.9921147013144777], [1437291648.0, 27320000.0, -0.9936113105200085], [1437293376.0, 27340000.0, -0.9949510169813002], [1437295104.0, 27360000.0, -0.9961336091431724], [1437296832.0, 27380000.0, -0.9971589002606138], [1437298560.0, 27400000.0, -0.9980267284282717], [1437300288.0, 27420000.0, -0.9987369566060176], [1437302016.0, 27440000.0, -0.9992894726405892], [1437303744.0, 27460000.0, -0.9996841892832999], [1437305472.0, 27480000.0, -0.9999210442038161], [1437307200.0, 27500000.0, -1.0], [1437308928.0, 27520000.0, -0.9999210442038161], [1437310656.0, 27540000.0, -0.9996841892832999], [1437312384.0, 27560000.0, -0.9992894726405893], [1437314112.0, 27580000.0, -0.9987369566060176], [1437315840.0, 27600000.0, -0.9980267284282718], [1437317568.0, 27620000.0, -0.9971589002606139], [1437319296.0, 27640000.0, -0.9961336091431725], [1437321024.0, 27660000.0, -0.9949510169813003], [1437322752.0, 27680000.0, -0.9936113105200087], [1437324480.0, 27700000.0, -0.9921147013144778], [1437326208.0, 27720000.0, -0.9904614256966513], [1437327936.0, 27740000.0, -0.9886517447379142], [1437329664.0, 27760000.0, -0.9866859442078684], [1437331392.0, 27780000.0, -0.9845643345292052], [1437333120.0, 27800000.0, -0.9822872507286894], [1437334848.0, 27820000.0, -0.979855052384247], [1437336576.0, 27840000.0, -0.9772681235681938], [1437338304.0, 27860000.0, -0.9745268727865769], [1437340032.0, 27880000.0, -0.9716317329146746], [1437341760.0, 27900000.0, -0.9685831611286312], [1437343488.0, 27920000.0, -0.9653816388332742], [1437345216.0, 27940000.0, -0.9620276715860864], [1437346944.0, 27960000.0, -0.9585217890173766], [1437348672.0, 27980000.0, -0.954864544746643], [1437350400.0, 28000000.0, -0.9510565162951538], [1437352128.0, 28020000.0, -0.9470983049947448], [1437353856.0, 28040000.0, -0.9429905358928652], [1437355584.0, 28060000.0, -0.938733857653874], [1437357312.0, 28080000.0, -0.9343289424566121], [1437359040.0, 28100000.0, -0.9297764858882518], [1437360768.0, 28120000.0, -0.9250772068344587], [1437362496.0, 28140000.0, -0.9202318473658699], [1437364224.0, 28160000.0, -0.915241172620919], [1437365952.0, 28180000.0, -0.910105970684996], [1437367680.0, 28200000.0, -0.9048270524660201], [1437369408.0, 28220000.0, -0.8994052515663704], [1437371136.0, 28240000.0, -0.8938414241512651], [1437372864.0, 28260000.0, -0.8881364488135446], [1437374592.0, 28280000.0, -0.8822912264349537], [1437376320.0, 28300000.0, -0.8763066800438645], [1437378048.0, 28320000.0, -0.8701837546695269], [1437379776.0, 28340000.0, -0.8639234171928352], [1437381504.0, 28360000.0, -0.8575266561936525], [1437383232.0, 28380000.0, -0.8509944817946925], [1437384960.0, 28400000.0, -0.8443279255020162], [1437386688.0, 28420000.0, -0.8375280400421413], [1437388416.0, 28440000.0, -0.8305958991958127], [1437390144.0, 28460000.0, -0.8235325976284279], [1437391872.0, 28480000.0, -0.8163392507171849], [1437393600.0, 28500000.0, -0.8090169943749468], [1437395328.0, 28520000.0, -0.8015669848708785], [1437397056.0, 28540000.0, -0.7939903986478356], [1437398784.0, 28560000.0, -0.7862884321366197], [1437400512.0, 28580000.0, -0.7784623015670225], [1437402240.0, 28600000.0, -0.770513242775791], [1437403968.0, 28620000.0, -0.7624425110114479], [1437405696.0, 28640000.0, -0.7542513807361043], [1437407424.0, 28660000.0, -0.7459411454241832], [1437409152.0, 28680000.0, -0.7375131173581755], [1437410880.0, 28700000.0, -0.7289686274214112], [1437412608.0, 28720000.0, -0.7203090248879072], [1437414336.0, 28740000.0, -0.7115356772092862], [1437416064.0, 28760000.0, -0.7026499697988506], [1437417792.0, 28780000.0, -0.6936533058128044], [1437419520.0, 28800000.0, -0.6845471059286886], [1437421248.0, 28820000.0, -0.675332808121025], [1437422976.0, 28840000.0, -0.6660118674342528], [1437424704.0, 28860000.0, -0.6565857557529555], [1437426432.0, 28880000.0, -0.647055961569444], [1437428160.0, 28900000.0, -0.63742398974869], [1437429888.0, 28920000.0, -0.6276913612907014], [1437431616.0, 28940000.0, -0.6178596130903331], [1437433344.0, 28960000.0, -0.6079302976946075], [1437435072.0, 28980000.0, -0.5979049830575188], [1437436800.0, 29000000.0, -0.5877852522924737], [1437438528.0, 29020000.0, -0.5775727034222689], [1437440256.0, 29040000.0, -0.5672689491267584], [1437441984.0, 29060000.0, -0.5568756164881876], [1437443712.0, 29080000.0, -0.5463943467342693], [1437445440.0, 29100000.0, -0.5358267949789975], [1437447168.0, 29120000.0, -0.5251746299612973], [1437448896.0, 29140000.0, -0.5144395337815056], [1437450624.0, 29160000.0, -0.5036232016357607], [1437452352.0, 29180000.0, -0.4927273415482921], [1437454080.0, 29200000.0, -0.48175367410171654], [1437455808.0, 29220000.0, -0.47070393216533135], [1437457536.0, 29240000.0, -0.45957986062148737], [1437459264.0, 29260000.0, -0.44838321609003245], [1437460992.0, 29280000.0, -0.4371157666509338], [1437462720.0, 29300000.0, -0.42577929156507105], [1437464448.0, 29320000.0, -0.4143755809932865], [1437466176.0, 29340000.0, -0.40290643571366247], [1437467904.0, 29360000.0, -0.3913736668372029], [1437469632.0, 29380000.0, -0.3797790955218024], [1437471360.0, 29400000.0, -0.36812455268468], [1437473088.0, 29420000.0, -0.35641187871325014], [1437474816.0, 29440000.0, -0.3446429231745172], [1437476544.0, 29460000.0, -0.3328195445229875], [1437478272.0, 29480000.0, -0.3209436098072111], [1437480000.0, 29500000.0, -0.3090169943749464], [1437481728.0, 29520000.0, -0.29704158157703464], [1437483456.0, 29540000.0, -0.2850192624699766], [1437485184.0, 29560000.0, -0.2729519355173265], [1437486912.0, 29580000.0, -0.2608415062898955], [1437488640.0, 29600000.0, -0.2486898871648541], [1437490368.0, 29620000.0, -0.23649899702372476], [1437492096.0, 29640000.0, -0.22427076094938203], [1437493824.0, 29660000.0, -0.2120071099220528], [1437495552.0, 29680000.0, -0.1997099805144094], [1437497280.0, 29700000.0, -0.1873813145857243], [1437499008.0, 29720000.0, -0.17502305897527648], [1437500736.0, 29740000.0, -0.1626371651948848], [1437502464.0, 29760000.0, -0.15022558912075903], [1437504192.0, 29780000.0, -0.1377902906846373], [1437505920.0, 29800000.0, -0.12533323356430426], [1437507648.0, 29820000.0, -0.11285638487348248], [1437509376.0, 29840000.0, -0.10036171485121646], [1437511104.0, 29860000.0, -0.087851196550742], [1437512832.0, 29880000.0, -0.07532680552793232], [1437514560.0, 29900000.0, -0.06279051952931375], [1437516288.0, 29920000.0, -0.050244318179770715], [1437518016.0, 29940000.0, -0.03769018266993293], [1437519744.0, 29960000.0, -0.02513009544333665], [1437521472.0, 29980000.0, -0.01256603988335256], [1437523200.0, 30000000.0, -7.347880794884119e-16], [1437524928.0, 30020000.0, 0.012566039883351091], [1437526656.0, 30040000.0, 0.02513009544333518], [1437528384.0, 30060000.0, 0.03769018266993146], [1437530112.0, 30080000.0, 0.050244318179769244], [1437531840.0, 30100000.0, 0.06279051952931229], [1437533568.0, 30120000.0, 0.07532680552793085], [1437535296.0, 30140000.0, 0.08785119655074053], [1437537024.0, 30160000.0, 0.100361714851215], [1437538752.0, 30180000.0, 0.11285638487348103], [1437540480.0, 30200000.0, 0.12533323356430282], [1437542208.0, 30220000.0, 0.13779029068463586], [1437543936.0, 30240000.0, 0.1502255891207576], [1437545664.0, 30260000.0, 0.16263716519488336], [1437547392.0, 30280000.0, 0.17502305897527504], [1437549120.0, 30300000.0, 0.18738131458572285], [1437550848.0, 30320000.0, 0.19970998051440797], [1437552576.0, 30340000.0, 0.21200710992205135], [1437554304.0, 30360000.0, 0.2242707609493806], [1437556032.0, 30380000.0, 0.23649899702372335], [1437557760.0, 30400000.0, 0.24868988716485269], [1437559488.0, 30420000.0, 0.2608415062898941], [1437561216.0, 30440000.0, 0.27295193551732505], [1437562944.0, 30460000.0, 0.2850192624699752], [1437564672.0, 30480000.0, 0.29704158157703325], [1437566400.0, 30500000.0, 0.309016994374945], [1437568128.0, 30520000.0, 0.3209436098072097], [1437569856.0, 30540000.0, 0.3328195445229861], [1437571584.0, 30560000.0, 0.34464292317451584], [1437573312.0, 30580000.0, 0.35641187871324875], [1437575040.0, 30600000.0, 0.3681245526846786], [1437576768.0, 30620000.0, 0.379779095521801], [1437578496.0, 30640000.0, 0.3913736668372016], [1437580224.0, 30660000.0, 0.40290643571366114], [1437581952.0, 30680000.0, 0.41437558099328514], [1437583680.0, 30700000.0, 0.4257792915650697], [1437585408.0, 30720000.0, 0.4371157666509325], [1437587136.0, 30740000.0, 0.4483832160900311], [1437588864.0, 30760000.0, 0.45957986062148604], [1437590592.0, 30780000.0, 0.4707039321653301], [1437592320.0, 30800000.0, 0.4817536741017152], [1437594048.0, 30820000.0, 0.49272734154829084], [1437595776.0, 30840000.0, 0.5036232016357595], [1437597504.0, 30860000.0, 0.5144395337815044], [1437599232.0, 30880000.0, 0.525174629961296], [1437600960.0, 30900000.0, 0.5358267949789963], [1437602688.0, 30920000.0, 0.5463943467342681], [1437604416.0, 30940000.0, 0.5568756164881864], [1437606144.0, 30960000.0, 0.5672689491267572], [1437607872.0, 30980000.0, 0.5775727034222676], [1437609600.0, 31000000.0, 0.5877852522924725], [1437611328.0, 31020000.0, 0.5979049830575176], [1437613056.0, 31040000.0, 0.6079302976946064], [1437614784.0, 31060000.0, 0.6178596130903319], [1437616512.0, 31080000.0, 0.6276913612907002], [1437618240.0, 31100000.0, 0.6374239897486889], [1437619968.0, 31120000.0, 0.6470559615694429], [1437621696.0, 31140000.0, 0.6565857557529544], [1437623424.0, 31160000.0, 0.6660118674342517], [1437625152.0, 31180000.0, 0.6753328081210239], [1437626880.0, 31200000.0, 0.6845471059286876], [1437628608.0, 31220000.0, 0.6936533058128034], [1437630336.0, 31240000.0, 0.7026499697988495], [1437632064.0, 31260000.0, 0.7115356772092851], [1437633792.0, 31280000.0, 0.7203090248879062], [1437635520.0, 31300000.0, 0.7289686274214102], [1437637248.0, 31320000.0, 0.7375131173581745], [1437638976.0, 31340000.0, 0.7459411454241822], [1437640704.0, 31360000.0, 0.7542513807361034], [1437642432.0, 31380000.0, 0.762442511011447], [1437644160.0, 31400000.0, 0.7705132427757901], [1437645888.0, 31420000.0, 0.7784623015670216], [1437647616.0, 31440000.0, 0.7862884321366188], [1437649344.0, 31460000.0, 0.7939903986478347], [1437651072.0, 31480000.0, 0.8015669848708776], [1437652800.0, 31500000.0, 0.8090169943749459], [1437654528.0, 31520000.0, 0.816339250717184], [1437656256.0, 31540000.0, 0.8235325976284271], [1437657984.0, 31560000.0, 0.8305958991958119], [1437659712.0, 31580000.0, 0.8375280400421405], [1437661440.0, 31600000.0, 0.8443279255020154], [1437663168.0, 31620000.0, 0.8509944817946918], [1437664896.0, 31640000.0, 0.8575266561936518], [1437666624.0, 31660000.0, 0.8639234171928345], [1437668352.0, 31680000.0, 0.8701837546695262], [1437670080.0, 31700000.0, 0.8763066800438637], [1437671808.0, 31720000.0, 0.8822912264349531], [1437673536.0, 31740000.0, 0.8881364488135439], [1437675264.0, 31760000.0, 0.8938414241512644], [1437676992.0, 31780000.0, 0.8994052515663697], [1437678720.0, 31800000.0, 0.9048270524660195], [1437680448.0, 31820000.0, 0.9101059706849953], [1437682176.0, 31840000.0, 0.9152411726209183], [1437683904.0, 31860000.0, 0.9202318473658694], [1437685632.0, 31880000.0, 0.9250772068344582], [1437687360.0, 31900000.0, 0.9297764858882512], [1437689088.0, 31920000.0, 0.9343289424566116], [1437690816.0, 31940000.0, 0.9387338576538734], [1437692544.0, 31960000.0, 0.9429905358928647], [1437694272.0, 31980000.0, 0.9470983049947442], [1437696000.0, 32000000.0, 0.9510565162951533], [1437697728.0, 32020000.0, 0.9548645447466425], [1437699456.0, 32040000.0, 0.9585217890173763], [1437701184.0, 32060000.0, 0.962027671586086], [1437702912.0, 32080000.0, 0.9653816388332738], [1437704640.0, 32100000.0, 0.9685831611286309], [1437706368.0, 32120000.0, 0.9716317329146743], [1437708096.0, 32140000.0, 0.9745268727865766], [1437709824.0, 32160000.0, 0.9772681235681935], [1437711552.0, 32180000.0, 0.9798550523842467], [1437713280.0, 32200000.0, 0.982287250728689], [1437715008.0, 32220000.0, 0.984564334529205], [1437716736.0, 32240000.0, 0.9866859442078681], [1437718464.0, 32260000.0, 0.988651744737914], [1437720192.0, 32280000.0, 0.9904614256966511], [1437721920.0, 32300000.0, 0.9921147013144775], [1437723648.0, 32320000.0, 0.9936113105200085], [1437725376.0, 32340000.0, 0.9949510169813002], [1437727104.0, 32360000.0, 0.9961336091431724], [1437728832.0, 32380000.0, 0.9971589002606138], [1437730560.0, 32400000.0, 0.9980267284282717], [1437732288.0, 32420000.0, 0.9987369566060176], [1437734016.0, 32440000.0, 0.9992894726405892], [1437735744.0, 32460000.0, 0.9996841892832999], [1437737472.0, 32480000.0, 0.9999210442038161], [1437739200.0, 32500000.0, 1.0], [1437740928.0, 32520000.0, 0.9999210442038161], [1437742656.0, 32540000.0, 0.9996841892833], [1437744384.0, 32560000.0, 0.9992894726405893], [1437746112.0, 32580000.0, 0.9987369566060176], [1437747840.0, 32600000.0, 0.9980267284282718], [1437749568.0, 32620000.0, 0.9971589002606139], [1437751296.0, 32640000.0, 0.9961336091431725], [1437753024.0, 32660000.0, 0.9949510169813003], [1437754752.0, 32680000.0, 0.9936113105200087], [1437756480.0, 32700000.0, 0.9921147013144778], [1437758208.0, 32720000.0, 0.9904614256966513], [1437759936.0, 32740000.0, 0.9886517447379142], [1437761664.0, 32760000.0, 0.9866859442078684], [1437763392.0, 32780000.0, 0.9845643345292052], [1437765120.0, 32800000.0, 0.9822872507286894], [1437766848.0, 32820000.0, 0.9798550523842471], [1437768576.0, 32840000.0, 0.9772681235681938], [1437770304.0, 32860000.0, 0.9745268727865769], [1437772032.0, 32880000.0, 0.9716317329146748], [1437773760.0, 32900000.0, 0.9685831611286312], [1437775488.0, 32920000.0, 0.9653816388332742], [1437777216.0, 32940000.0, 0.9620276715860865], [1437778944.0, 32960000.0, 0.9585217890173767], [1437780672.0, 32980000.0, 0.954864544746643], [1437782400.0, 33000000.0, 0.9510565162951539], [1437784128.0, 33020000.0, 0.9470983049947448], [1437785856.0, 33040000.0, 0.9429905358928653], [1437787584.0, 33060000.0, 0.938733857653874], [1437789312.0, 33080000.0, 0.9343289424566121], [1437791040.0, 33100000.0, 0.9297764858882518], [1437792768.0, 33120000.0, 0.9250772068344588], [1437794496.0, 33140000.0, 0.92023184736587], [1437796224.0, 33160000.0, 0.915241172620919], [1437797952.0, 33180000.0, 0.910105970684996], [1437799680.0, 33200000.0, 0.9048270524660201], [1437801408.0, 33220000.0, 0.8994052515663705], [1437803136.0, 33240000.0, 0.8938414241512652], [1437804864.0, 33260000.0, 0.8881364488135447], [1437806592.0, 33280000.0, 0.8822912264349538], [1437808320.0, 33300000.0, 0.8763066800438645], [1437810048.0, 33320000.0, 0.870183754669527], [1437811776.0, 33340000.0, 0.8639234171928353], [1437813504.0, 33360000.0, 0.8575266561936526], [1437815232.0, 33380000.0, 0.8509944817946926], [1437816960.0, 33400000.0, 0.8443279255020163], [1437818688.0, 33420000.0, 0.8375280400421414], [1437820416.0, 33440000.0, 0.8305958991958128], [1437822144.0, 33460000.0, 0.823532597628428], [1437823872.0, 33480000.0, 0.816339250717185], [1437825600.0, 33500000.0, 0.8090169943749469], [1437827328.0, 33520000.0, 0.8015669848708786], [1437829056.0, 33540000.0, 0.7939903986478357], [1437830784.0, 33560000.0, 0.7862884321366198], [1437832512.0, 33580000.0, 0.7784623015670226], [1437834240.0, 33600000.0, 0.7705132427757911], [1437835968.0, 33620000.0, 0.762442511011448], [1437837696.0, 33640000.0, 0.7542513807361044], [1437839424.0, 33660000.0, 0.7459411454241833], [1437841152.0, 33680000.0, 0.7375131173581756], [1437842880.0, 33700000.0, 0.7289686274214113], [1437844608.0, 33720000.0, 0.7203090248879073], [1437846336.0, 33740000.0, 0.7115356772092862], [1437848064.0, 33760000.0, 0.7026499697988507], [1437849792.0, 33780000.0, 0.6936533058128045], [1437851520.0, 33800000.0, 0.6845471059286887], [1437853248.0, 33820000.0, 0.6753328081210251], [1437854976.0, 33840000.0, 0.6660118674342529], [1437856704.0, 33860000.0, 0.6565857557529556], [1437858432.0, 33880000.0, 0.6470559615694441], [1437860160.0, 33900000.0, 0.6374239897486901], [1437861888.0, 33920000.0, 0.6276913612907015], [1437863616.0, 33940000.0, 0.6178596130903331], [1437865344.0, 33960000.0, 0.6079302976946076], [1437867072.0, 33980000.0, 0.5979049830575189], [1437868800.0, 34000000.0, 0.5877852522924738], [1437870528.0, 34020000.0, 0.577572703422269], [1437872256.0, 34040000.0, 0.5672689491267585], [1437873984.0, 34060000.0, 0.5568756164881877], [1437875712.0, 34080000.0, 0.5463943467342695], [1437877440.0, 34100000.0, 0.5358267949789977], [1437879168.0, 34120000.0, 0.5251746299612974], [1437880896.0, 34140000.0, 0.5144395337815058], [1437882624.0, 34160000.0, 0.5036232016357608], [1437884352.0, 34180000.0, 0.49272734154829223], [1437886080.0, 34200000.0, 0.48175367410171666], [1437887808.0, 34220000.0, 0.47070393216533146], [1437889536.0, 34240000.0, 0.4595798606214875], [1437891264.0, 34260000.0, 0.44838321609003257], [1437892992.0, 34280000.0, 0.43711576665093393], [1437894720.0, 34300000.0, 0.42577929156507116], [1437896448.0, 34320000.0, 0.4143755809932866], [1437898176.0, 34340000.0, 0.4029064357136626], [1437899904.0, 34360000.0, 0.39137366683720304], [1437901632.0, 34380000.0, 0.3797790955218025], [1437903360.0, 34400000.0, 0.3681245526846801], [1437905088.0, 34420000.0, 0.35641187871325025], [1437906816.0, 34440000.0, 0.34464292317451733], [1437908544.0, 34460000.0, 0.3328195445229876], [1437910272.0, 34480000.0, 0.3209436098072112], [1437912000.0, 34500000.0, 0.30901699437494656], [1437913728.0, 34520000.0, 0.29704158157703475], [1437915456.0, 34540000.0, 0.2850192624699767], [1437917184.0, 34560000.0, 0.2729519355173266], [1437918912.0, 34580000.0, 0.2608415062898956], [1437920640.0, 34600000.0, 0.24868988716485424], [1437922368.0, 34620000.0, 0.2364989970237249], [1437924096.0, 34640000.0, 0.22427076094938214], [1437925824.0, 34660000.0, 0.2120071099220529], [1437927552.0, 34680000.0, 0.19970998051440952], [1437929280.0, 34700000.0, 0.1873813145857244], [1437931008.0, 34720000.0, 0.17502305897527662], [1437932736.0, 34740000.0, 0.16263716519488494], [1437934464.0, 34760000.0, 0.15022558912075917], [1437936192.0, 34780000.0, 0.13779029068463744], [1437937920.0, 34800000.0, 0.1253332335643044], [1437939648.0, 34820000.0, 0.11285638487348261], [1437941376.0, 34840000.0, 0.10036171485121659], [1437943104.0, 34860000.0, 0.08785119655074211], [1437944832.0, 34880000.0, 0.07532680552793244], [1437946560.0, 34900000.0, 0.06279051952931387], [1437948288.0, 34920000.0, 0.05024431817977084], [1437950016.0, 34940000.0, 0.03769018266993305], [1437951744.0, 34960000.0, 0.02513009544333677], [1437953472.0, 34980000.0, 0.012566039883352684], [1437955200.0, 35000000.0, 8.572527594031472e-16], [1437956928.0, 35020000.0, -0.012566039883350968], [1437958656.0, 35040000.0, -0.025130095443335058], [1437960384.0, 35060000.0, -0.037690182669931335], [1437962112.0, 35080000.0, -0.050244318179769126], [1437963840.0, 35100000.0, -0.06279051952931217], [1437965568.0, 35120000.0, -0.07532680552793074], [1437967296.0, 35140000.0, -0.0878511965507404], [1437969024.0, 35160000.0, -0.10036171485121488], [1437970752.0, 35180000.0, -0.1128563848734809], [1437972480.0, 35200000.0, -0.12533323356430268], [1437974208.0, 35220000.0, -0.13779029068463572], [1437975936.0, 35240000.0, -0.15022558912075745], [1437977664.0, 35260000.0, -0.16263716519488325], [1437979392.0, 35280000.0, -0.17502305897527493], [1437981120.0, 35300000.0, -0.18738131458572274], [1437982848.0, 35320000.0, -0.19970998051440783], [1437984576.0, 35340000.0, -0.2120071099220512], [1437986304.0, 35360000.0, -0.22427076094938048], [1437988032.0, 35380000.0, -0.23649899702372323], [1437989760.0, 35400000.0, -0.24868988716485257], [1437991488.0, 35420000.0, -0.26084150628989394], [1437993216.0, 35440000.0, -0.27295193551732494], [1437994944.0, 35460000.0, -0.2850192624699751], [1437996672.0, 35480000.0, -0.29704158157703314], [1437998400.0, 35500000.0, -0.3090169943749449], [1438000128.0, 35520000.0, -0.3209436098072096], [1438001856.0, 35540000.0, -0.332819544522986], [1438003584.0, 35560000.0, -0.3446429231745157], [1438005312.0, 35580000.0, -0.35641187871324864], [1438007040.0, 35600000.0, -0.3681245526846785], [1438008768.0, 35620000.0, -0.3797790955218009], [1438010496.0, 35640000.0, -0.3913736668372015], [1438012224.0, 35660000.0, -0.402906435713661], [1438013952.0, 35680000.0, -0.41437558099328503], [1438015680.0, 35700000.0, -0.4257792915650696], [1438017408.0, 35720000.0, -0.4371157666509324], [1438019136.0, 35740000.0, -0.448383216090031], [1438020864.0, 35760000.0, -0.4595798606214859], [1438022592.0, 35780000.0, -0.47070393216532996], [1438024320.0, 35800000.0, -0.48175367410171516], [1438026048.0, 35820000.0, -0.49272734154829073], [1438027776.0, 35840000.0, -0.5036232016357594], [1438029504.0, 35860000.0, -0.5144395337815043], [1438031232.0, 35880000.0, -0.5251746299612959], [1438032960.0, 35900000.0, -0.5358267949789962], [1438034688.0, 35920000.0, -0.546394346734268], [1438036416.0, 35940000.0, -0.5568756164881863], [1438038144.0, 35960000.0, -0.5672689491267571], [1438039872.0, 35980000.0, -0.5775727034222675], [1438041600.0, 36000000.0, -0.5877852522924725], [1438043328.0, 36020000.0, -0.5979049830575175], [1438045056.0, 36040000.0, -0.6079302976946063], [1438046784.0, 36060000.0, -0.6178596130903318], [1438048512.0, 36080000.0, -0.6276913612907001], [1438050240.0, 36100000.0, -0.6374239897486887], [1438051968.0, 36120000.0, -0.6470559615694428], [1438053696.0, 36140000.0, -0.6565857557529543], [1438055424.0, 36160000.0, -0.6660118674342516], [1438057152.0, 36180000.0, -0.6753328081210238], [1438058880.0, 36200000.0, -0.6845471059286875], [1438060608.0, 36220000.0, -0.6936533058128033], [1438062336.0, 36240000.0, -0.7026499697988495], [1438064064.0, 36260000.0, -0.7115356772092851], [1438065792.0, 36280000.0, -0.720309024887906], [1438067520.0, 36300000.0, -0.7289686274214102], [1438069248.0, 36320000.0, -0.7375131173581745], [1438070976.0, 36340000.0, -0.7459411454241821], [1438072704.0, 36360000.0, -0.7542513807361033], [1438074432.0, 36380000.0, -0.7624425110114469], [1438076160.0, 36400000.0, -0.77051324277579], [1438077888.0, 36420000.0, -0.7784623015670215], [1438079616.0, 36440000.0, -0.7862884321366187], [1438081344.0, 36460000.0, -0.7939903986478346], [1438083072.0, 36480000.0, -0.8015669848708775], [1438084800.0, 36500000.0, -0.8090169943749459], [1438086528.0, 36520000.0, -0.816339250717184], [1438088256.0, 36540000.0, -0.823532597628427], [1438089984.0, 36560000.0, -0.8305958991958118], [1438091712.0, 36580000.0, -0.8375280400421404], [1438093440.0, 36600000.0, -0.8443279255020154], [1438095168.0, 36620000.0, -0.8509944817946917], [1438096896.0, 36640000.0, -0.8575266561936518], [1438098624.0, 36660000.0, -0.8639234171928344], [1438100352.0, 36680000.0, -0.8701837546695261], [1438102080.0, 36700000.0, -0.8763066800438637], [1438103808.0, 36720000.0, -0.882291226434953], [1438105536.0, 36740000.0, -0.8881364488135439], [1438107264.0, 36760000.0, -0.8938414241512644], [1438108992.0, 36780000.0, -0.8994052515663697], [1438110720.0, 36800000.0, -0.9048270524660195], [1438112448.0, 36820000.0, -0.9101059706849953], [1438114176.0, 36840000.0, -0.9152411726209183], [1438115904.0, 36860000.0, -0.9202318473658694], [1438117632.0, 36880000.0, -0.9250772068344582], [1438119360.0, 36900000.0, -0.9297764858882512], [1438121088.0, 36920000.0, -0.9343289424566116], [1438122816.0, 36940000.0, -0.9387338576538734], [1438124544.0, 36960000.0, -0.9429905358928646], [1438126272.0, 36980000.0, -0.9470983049947442], [1438128000.0, 37000000.0, -0.9510565162951533], [1438129728.0, 37020000.0, -0.9548645447466425], [1438131456.0, 37040000.0, -0.9585217890173762], [1438133184.0, 37060000.0, -0.9620276715860859], [1438134912.0, 37080000.0, -0.9653816388332738], [1438136640.0, 37100000.0, -0.9685831611286309], [1438138368.0, 37120000.0, -0.9716317329146743], [1438140096.0, 37140000.0, -0.9745268727865765], [1438141824.0, 37160000.0, -0.9772681235681935], [1438143552.0, 37180000.0, -0.9798550523842467], [1438145280.0, 37200000.0, -0.982287250728689], [1438147008.0, 37220000.0, -0.984564334529205], [1438148736.0, 37240000.0, -0.9866859442078681], [1438150464.0, 37260000.0, -0.988651744737914], [1438152192.0, 37280000.0, -0.9904614256966511], [1438153920.0, 37300000.0, -0.9921147013144775], [1438155648.0, 37320000.0, -0.9936113105200085], [1438157376.0, 37340000.0, -0.9949510169813002], [1438159104.0, 37360000.0, -0.9961336091431724], [1438160832.0, 37380000.0, -0.9971589002606138], [1438162560.0, 37400000.0, -0.9980267284282717], [1438164288.0, 37420000.0, -0.9987369566060175], [1438166016.0, 37440000.0, -0.9992894726405892], [1438167744.0, 37460000.0, -0.9996841892832999], [1438169472.0, 37480000.0, -0.9999210442038161], [1438171200.0, 37500000.0, -1.0], [1438172928.0, 37520000.0, -0.9999210442038161], [1438174656.0, 37540000.0, -0.9996841892833], [1438176384.0, 37560000.0, -0.9992894726405893], [1438178112.0, 37580000.0, -0.9987369566060176], [1438179840.0, 37600000.0, -0.9980267284282718], [1438181568.0, 37620000.0, -0.9971589002606139], [1438183296.0, 37640000.0, -0.9961336091431725], [1438185024.0, 37660000.0, -0.9949510169813004], [1438186752.0, 37680000.0, -0.9936113105200087], [1438188480.0, 37700000.0, -0.9921147013144778], [1438190208.0, 37720000.0, -0.9904614256966513], [1438191936.0, 37740000.0, -0.9886517447379142], [1438193664.0, 37760000.0, -0.9866859442078685], [1438195392.0, 37780000.0, -0.9845643345292053], [1438197120.0, 37800000.0, -0.9822872507286894], [1438198848.0, 37820000.0, -0.9798550523842471], [1438200576.0, 37840000.0, -0.9772681235681938], [1438202304.0, 37860000.0, -0.9745268727865769], [1438204032.0, 37880000.0, -0.9716317329146748], [1438205760.0, 37900000.0, -0.9685831611286313], [1438207488.0, 37920000.0, -0.9653816388332742], [1438209216.0, 37940000.0, -0.9620276715860865], [1438210944.0, 37960000.0, -0.9585217890173767], [1438212672.0, 37980000.0, -0.954864544746643], [1438214400.0, 38000000.0, -0.9510565162951539], [1438216128.0, 38020000.0, -0.9470983049947448], [1438217856.0, 38040000.0, -0.9429905358928653], [1438219584.0, 38060000.0, -0.938733857653874], [1438221312.0, 38080000.0, -0.9343289424566122], [1438223040.0, 38100000.0, -0.9297764858882519], [1438224768.0, 38120000.0, -0.9250772068344588], [1438226496.0, 38140000.0, -0.92023184736587], [1438228224.0, 38160000.0, -0.915241172620919], [1438229952.0, 38180000.0, -0.910105970684996], [1438231680.0, 38200000.0, -0.9048270524660202], [1438233408.0, 38220000.0, -0.8994052515663705], [1438235136.0, 38240000.0, -0.8938414241512652], [1438236864.0, 38260000.0, -0.8881364488135447], [1438238592.0, 38280000.0, -0.8822912264349538], [1438240320.0, 38300000.0, -0.8763066800438646], [1438242048.0, 38320000.0, -0.870183754669527], [1438243776.0, 38340000.0, -0.8639234171928353], [1438245504.0, 38360000.0, -0.8575266561936526], [1438247232.0, 38380000.0, -0.8509944817946927], [1438248960.0, 38400000.0, -0.8443279255020163], [1438250688.0, 38420000.0, -0.8375280400421415], [1438252416.0, 38440000.0, -0.8305958991958129], [1438254144.0, 38460000.0, -0.8235325976284281], [1438255872.0, 38480000.0, -0.816339250717185], [1438257600.0, 38500000.0, -0.8090169943749469], [1438259328.0, 38520000.0, -0.8015669848708786], [1438261056.0, 38540000.0, -0.7939903986478358], [1438262784.0, 38560000.0, -0.7862884321366198], [1438264512.0, 38580000.0, -0.7784623015670227], [1438266240.0, 38600000.0, -0.7705132427757911], [1438267968.0, 38620000.0, -0.7624425110114481], [1438269696.0, 38640000.0, -0.7542513807361045], [1438271424.0, 38660000.0, -0.7459411454241834], [1438273152.0, 38680000.0, -0.7375131173581757], [1438274880.0, 38700000.0, -0.7289686274214114], [1438276608.0, 38720000.0, -0.7203090248879074], [1438278336.0, 38740000.0, -0.7115356772092863], [1438280064.0, 38760000.0, -0.7026499697988507], [1438281792.0, 38780000.0, -0.6936533058128046], [1438283520.0, 38800000.0, -0.6845471059286888], [1438285248.0, 38820000.0, -0.6753328081210251], [1438286976.0, 38840000.0, -0.666011867434253], [1438288704.0, 38860000.0, -0.6565857557529557], [1438290432.0, 38880000.0, -0.6470559615694442], [1438292160.0, 38900000.0, -0.6374239897486902], [1438293888.0, 38920000.0, -0.6276913612907016], [1438295616.0, 38940000.0, -0.6178596130903332], [1438297344.0, 38960000.0, -0.6079302976946077], [1438299072.0, 38980000.0, -0.597904983057519], [1438300800.0, 39000000.0, -0.5877852522924739], [1438302528.0, 39020000.0, -0.577572703422269], [1438304256.0, 39040000.0, -0.5672689491267585], [1438305984.0, 39060000.0, -0.5568756164881878], [1438307712.0, 39080000.0, -0.5463943467342696], [1438309440.0, 39100000.0, -0.5358267949789978], [1438311168.0, 39120000.0, -0.5251746299612975], [1438312896.0, 39140000.0, -0.5144395337815059], [1438314624.0, 39160000.0, -0.5036232016357609], [1438316352.0, 39180000.0, -0.49272734154829234], [1438318080.0, 39200000.0, -0.48175367410171677], [1438319808.0, 39220000.0, -0.4707039321653316], [1438321536.0, 39240000.0, -0.4595798606214876], [1438323264.0, 39260000.0, -0.4483832160900327], [1438324992.0, 39280000.0, -0.43711576665093405], [1438326720.0, 39300000.0, -0.42577929156507127], [1438328448.0, 39320000.0, -0.4143755809932867], [1438330176.0, 39340000.0, -0.4029064357136627], [1438331904.0, 39360000.0, -0.39137366683720315], [1438333632.0, 39380000.0, -0.3797790955218026], [1438335360.0, 39400000.0, -0.3681245526846802], [1438337088.0, 39420000.0, -0.35641187871325036], [1438338816.0, 39440000.0, -0.34464292317451745], [1438340544.0, 39460000.0, -0.33281954452298773], [1438342272.0, 39480000.0, -0.32094360980721137], [1438344000.0, 39500000.0, -0.3090169943749467], [1438345728.0, 39520000.0, -0.29704158157703486], [1438347456.0, 39540000.0, -0.28501926246997683], [1438349184.0, 39560000.0, -0.2729519355173267], [1438350912.0, 39580000.0, -0.2608415062898957], [1438352640.0, 39600000.0, -0.24868988716485435], [1438354368.0, 39620000.0, -0.236498997023725], [1438356096.0, 39640000.0, -0.22427076094938228], [1438357824.0, 39660000.0, -0.21200710992205302], [1438359552.0, 39680000.0, -0.19970998051440964], [1438361280.0, 39700000.0, -0.18738131458572455], [1438363008.0, 39720000.0, -0.17502305897527673], [1438364736.0, 39740000.0, -0.16263716519488505], [1438366464.0, 39760000.0, -0.15022558912075928], [1438368192.0, 39780000.0, -0.13779029068463755], [1438369920.0, 39800000.0, -0.1253332335643045], [1438371648.0, 39820000.0, -0.11285638487348272], [1438373376.0, 39840000.0, -0.10036171485121671], [1438375104.0, 39860000.0, -0.08785119655074224], [1438376832.0, 39880000.0, -0.07532680552793257], [1438378560.0, 39900000.0, -0.062790519529314], [1438380288.0, 39920000.0, -0.05024431817977096], [1438382016.0, 39940000.0, -0.037690182669933174], [1438383744.0, 39960000.0, -0.025130095443336893], [1438385472.0, 39980000.0, -0.012566039883352805], [1438387200.0, 40000000.0, -9.797174393178826e-16], [1438388928.0, 40020000.0, 0.012566039883350847], [1438390656.0, 40040000.0, 0.025130095443334936], [1438392384.0, 40060000.0, 0.03769018266993476], [1438394112.0, 40080000.0, 0.050244318179769], [1438395840.0, 40100000.0, 0.06279051952931204], [1438397568.0, 40120000.0, 0.07532680552793061], [1438399296.0, 40140000.0, 0.08785119655074382], [1438401024.0, 40160000.0, 0.10036171485121476], [1438402752.0, 40180000.0, 0.11285638487348078], [1438404480.0, 40200000.0, 0.12533323356429904], [1438406208.0, 40220000.0, 0.13779029068463913], [1438407936.0, 40240000.0, 0.15022558912075734], [1438409664.0, 40260000.0, 0.1626371651948831], [1438411392.0, 40280000.0, 0.1750230589752713], [1438413120.0, 40300000.0, 0.1873813145857261], [1438414848.0, 40320000.0, 0.19970998051440772], [1438416576.0, 40340000.0, 0.2120071099220511], [1438418304.0, 40360000.0, 0.2242707609493769], [1438420032.0, 40380000.0, 0.23649899702372656], [1438421760.0, 40400000.0, 0.24868988716485246], [1438423488.0, 40420000.0, 0.26084150628989383], [1438425216.0, 40440000.0, 0.2729519355173214], [1438426944.0, 40460000.0, 0.2850192624699784], [1438428672.0, 40480000.0, 0.29704158157703303], [1438430400.0, 40500000.0, 0.3090169943749448], [1438432128.0, 40520000.0, 0.32094360980720615], [1438433856.0, 40540000.0, 0.3328195445229859], [1438435584.0, 40560000.0, 0.3446429231745156], [1438437312.0, 40580000.0, 0.35641187871324853], [1438439040.0, 40600000.0, 0.36812455268467503], [1438440768.0, 40620000.0, 0.3797790955218008], [1438442496.0, 40640000.0, 0.3913736668372014], [1438444224.0, 40660000.0, 0.4029064357136609], [1438445952.0, 40680000.0, 0.4143755809932817], [1438447680.0, 40700000.0, 0.4257792915650727], [1438449408.0, 40720000.0, 0.43711576665093227], [1438451136.0, 40740000.0, 0.4483832160900309], [1438452864.0, 40760000.0, 0.4595798606214858], [1438454592.0, 40780000.0, 0.470703932165333], [1438456320.0, 40800000.0, 0.48175367410171505], [1438458048.0, 40820000.0, 0.4927273415482906], [1438459776.0, 40840000.0, 0.5036232016357592], [1438461504.0, 40860000.0, 0.5144395337815072], [1438463232.0, 40880000.0, 0.5251746299612958], [1438464960.0, 40900000.0, 0.5358267949789961], [1438466688.0, 40920000.0, 0.5463943467342649], [1438468416.0, 40940000.0, 0.5568756164881892], [1438470144.0, 40960000.0, 0.567268949126757], [1438471872.0, 40980000.0, 0.5775727034222674], [1438473600.0, 41000000.0, 0.5877852522924695], [1438475328.0, 41020000.0, 0.5979049830575203], [1438477056.0, 41040000.0, 0.6079302976946062], [1438478784.0, 41060000.0, 0.6178596130903317], [1438480512.0, 41080000.0, 0.6276913612906972], [1438482240.0, 41100000.0, 0.6374239897486914], [1438483968.0, 41120000.0, 0.6470559615694427], [1438485696.0, 41140000.0, 0.6565857557529542], [1438487424.0, 41160000.0, 0.6660118674342489], [1438489152.0, 41180000.0, 0.6753328081210264], [1438490880.0, 41200000.0, 0.6845471059286874], [1438492608.0, 41220000.0, 0.6936533058128032], [1438494336.0, 41240000.0, 0.7026499697988469], [1438496064.0, 41260000.0, 0.711535677209285], [1438497792.0, 41280000.0, 0.720309024887906], [1438499520.0, 41300000.0, 0.7289686274214101], [1438501248.0, 41320000.0, 0.7375131173581719], [1438502976.0, 41340000.0, 0.7459411454241821], [1438504704.0, 41360000.0, 0.7542513807361032], [1438506432.0, 41380000.0, 0.7624425110114468], [1438508160.0, 41400000.0, 0.7705132427757877], [1438509888.0, 41420000.0, 0.7784623015670237], [1438511616.0, 41440000.0, 0.7862884321366186], [1438513344.0, 41460000.0, 0.7939903986478346], [1438515072.0, 41480000.0, 0.8015669848708754], [1438516800.0, 41500000.0, 0.8090169943749479], [1438518528.0, 41520000.0, 0.8163392507171839], [1438520256.0, 41540000.0, 0.823532597628427], [1438521984.0, 41560000.0, 0.8305958991958118], [1438523712.0, 41580000.0, 0.8375280400421423], [1438525440.0, 41600000.0, 0.8443279255020153], [1438527168.0, 41620000.0, 0.8509944817946916], [1438528896.0, 41640000.0, 0.8575266561936516], [1438530624.0, 41660000.0, 0.8639234171928362], [1438532352.0, 41680000.0, 0.870183754669526], [1438534080.0, 41700000.0, 0.8763066800438636], [1438535808.0, 41720000.0, 0.8822912264349513], [1438537536.0, 41740000.0, 0.8881364488135455], [1438539264.0, 41760000.0, 0.8938414241512643], [1438540992.0, 41780000.0, 0.8994052515663697], [1438542720.0, 41800000.0, 0.9048270524660179], [1438544448.0, 41820000.0, 0.9101059706849967], [1438546176.0, 41840000.0, 0.9152411726209182], [1438547904.0, 41860000.0, 0.9202318473658693], [1438549632.0, 41880000.0, 0.9250772068344567], [1438551360.0, 41900000.0, 0.9297764858882525], [1438553088.0, 41920000.0, 0.9343289424566116], [1438554816.0, 41940000.0, 0.9387338576538733], [1438556544.0, 41960000.0, 0.9429905358928634], [1438558272.0, 41980000.0, 0.9470983049947442], [1438560000.0, 42000000.0, 0.9510565162951533], [1438561728.0, 42020000.0, 0.9548645447466424], [1438563456.0, 42040000.0, 0.9585217890173752], [1438565184.0, 42060000.0, 0.9620276715860859], [1438566912.0, 42080000.0, 0.9653816388332738], [1438568640.0, 42100000.0, 0.9685831611286307], [1438570368.0, 42120000.0, 0.9716317329146734], [1438572096.0, 42140000.0, 0.9745268727865772], [1438573824.0, 42160000.0, 0.9772681235681934], [1438575552.0, 42180000.0, 0.9798550523842466], [1438577280.0, 42200000.0, 0.9822872507286884], [1438579008.0, 42220000.0, 0.9845643345292056], [1438580736.0, 42240000.0, 0.9866859442078681], [1438582464.0, 42260000.0, 0.988651744737914], [1438584192.0, 42280000.0, 0.9904614256966511], [1438585920.0, 42300000.0, 0.992114701314478], [1438587648.0, 42320000.0, 0.9936113105200085], [1438589376.0, 42340000.0, 0.9949510169813002], [1438591104.0, 42360000.0, 0.9961336091431724], [1438592832.0, 42380000.0, 0.997158900260614], [1438594560.0, 42400000.0, 0.9980267284282717], [1438596288.0, 42420000.0, 0.9987369566060175], [1438598016.0, 42440000.0, 0.9992894726405891], [1438599744.0, 42460000.0, 0.9996841892833], [1438601472.0, 42480000.0, 0.9999210442038161], [1438603200.0, 42500000.0, 1.0], [1438604928.0, 42520000.0, 0.9999210442038161], [1438606656.0, 42540000.0, 0.9996841892833], [1438608384.0, 42560000.0, 0.9992894726405892], [1438610112.0, 42580000.0, 0.9987369566060176], [1438611840.0, 42600000.0, 0.9980267284282718], [1438613568.0, 42620000.0, 0.9971589002606143], [1438615296.0, 42640000.0, 0.9961336091431726], [1438617024.0, 42660000.0, 0.9949510169813004], [1438618752.0, 42680000.0, 0.9936113105200087], [1438620480.0, 42700000.0, 0.9921147013144783], [1438622208.0, 42720000.0, 0.9904614256966513], [1438623936.0, 42740000.0, 0.9886517447379143], [1438625664.0, 42760000.0, 0.9866859442078685], [1438627392.0, 42780000.0, 0.9845643345292059], [1438629120.0, 42800000.0, 0.9822872507286887], [1438630848.0, 42820000.0, 0.9798550523842471], [1438632576.0, 42840000.0, 0.9772681235681938], [1438634304.0, 42860000.0, 0.9745268727865778], [1438636032.0, 42880000.0, 0.9716317329146739], [1438637760.0, 42900000.0, 0.9685831611286313], [1438639488.0, 42920000.0, 0.9653816388332743], [1438641216.0, 42940000.0, 0.9620276715860865], [1438642944.0, 42960000.0, 0.9585217890173757], [1438644672.0, 42980000.0, 0.9548645447466431], [1438646400.0, 43000000.0, 0.9510565162951539], [1438648128.0, 43020000.0, 0.9470983049947449], [1438649856.0, 43040000.0, 0.9429905358928642], [1438651584.0, 43060000.0, 0.9387338576538741], [1438653312.0, 43080000.0, 0.9343289424566122], [1438655040.0, 43100000.0, 0.9297764858882532], [1438656768.0, 43120000.0, 0.9250772068344575], [1438658496.0, 43140000.0, 0.9202318473658702], [1438660224.0, 43160000.0, 0.9152411726209191], [1438661952.0, 43180000.0, 0.9101059706849975], [1438663680.0, 43200000.0, 0.9048270524660188], [1438665408.0, 43220000.0, 0.8994052515663706], [1438667136.0, 43240000.0, 0.8938414241512652], [1438668864.0, 43260000.0, 0.8881364488135464], [1438670592.0, 43280000.0, 0.8822912264349523], [1438672320.0, 43300000.0, 0.8763066800438646], [1438674048.0, 43320000.0, 0.8701837546695271], [1438675776.0, 43340000.0, 0.8639234171928372], [1438677504.0, 43360000.0, 0.8575266561936528], [1438679232.0, 43380000.0, 0.8509944817946927], [1438680960.0, 43400000.0, 0.8443279255020164], [1438682688.0, 43420000.0, 0.8375280400421435], [1438684416.0, 43440000.0, 0.8305958991958129], [1438686144.0, 43460000.0, 0.8235325976284281], [1438687872.0, 43480000.0, 0.8163392507171852], [1438689600.0, 43500000.0, 0.8090169943749491], [1438691328.0, 43520000.0, 0.8015669848708766], [1438693056.0, 43540000.0, 0.7939903986478358], [1438694784.0, 43560000.0, 0.7862884321366199], [1438696512.0, 43580000.0, 0.7784623015670249], [1438698240.0, 43600000.0, 0.770513242775789], [1438699968.0, 43620000.0, 0.7624425110114481], [1438701696.0, 43640000.0, 0.7542513807361046], [1438703424.0, 43660000.0, 0.7459411454241834], [1438705152.0, 43680000.0, 0.7375131173581734], [1438706880.0, 43700000.0, 0.7289686274214116], [1438708608.0, 43720000.0, 0.7203090248879075], [1438710336.0, 43740000.0, 0.7115356772092865], [1438712064.0, 43760000.0, 0.7026499697988483], [1438713792.0, 43780000.0, 0.6936533058128047], [1438715520.0, 43800000.0, 0.684547105928689], [1438717248.0, 43820000.0, 0.6753328081210279], [1438718976.0, 43840000.0, 0.6660118674342504], [1438720704.0, 43860000.0, 0.6565857557529557], [1438722432.0, 43880000.0, 0.6470559615694442], [1438724160.0, 43900000.0, 0.637423989748693], [1438725888.0, 43920000.0, 0.6276913612906989], [1438727616.0, 43940000.0, 0.6178596130903333], [1438729344.0, 43960000.0, 0.6079302976946078], [1438731072.0, 43980000.0, 0.5979049830575219], [1438732800.0, 44000000.0, 0.5877852522924711], [1438734528.0, 44020000.0, 0.5775727034222691], [1438736256.0, 44040000.0, 0.5672689491267586], [1438737984.0, 44060000.0, 0.5568756164881908], [1438739712.0, 44080000.0, 0.5463943467342667], [1438741440.0, 44100000.0, 0.5358267949789979], [1438743168.0, 44120000.0, 0.5251746299612976], [1438744896.0, 44140000.0, 0.514439533781509], [1438746624.0, 44160000.0, 0.503623201635761], [1438748352.0, 44180000.0, 0.49272734154829245], [1438750080.0, 44200000.0, 0.4817536741017168], [1438751808.0, 44220000.0, 0.47070393216533485], [1438753536.0, 44240000.0, 0.4595798606214877], [1438755264.0, 44260000.0, 0.4483832160900328], [1438756992.0, 44280000.0, 0.43711576665093416], [1438758720.0, 44300000.0, 0.4257792915650746], [1438760448.0, 44320000.0, 0.4143755809932836], [1438762176.0, 44340000.0, 0.4029064357136628], [1438763904.0, 44360000.0, 0.39137366683720326], [1438765632.0, 44380000.0, 0.3797790955218027], [1438767360.0, 44400000.0, 0.368124552684677], [1438769088.0, 44420000.0, 0.3564118787132505], [1438770816.0, 44440000.0, 0.34464292317451756], [1438772544.0, 44460000.0, 0.3328195445229879], [1438774272.0, 44480000.0, 0.3209436098072081], [1438776000.0, 44500000.0, 0.3090169943749468], [1438777728.0, 44520000.0, 0.29704158157703503], [1438779456.0, 44540000.0, 0.2850192624699804], [1438781184.0, 44560000.0, 0.2729519355173234], [1438782912.0, 44580000.0, 0.2608415062898959], [1438784640.0, 44600000.0, 0.24868988716485446], [1438786368.0, 44620000.0, 0.23649899702372856], [1438788096.0, 44640000.0, 0.22427076094937892], [1438789824.0, 44660000.0, 0.21200710992205313], [1438791552.0, 44680000.0, 0.19970998051440977], [1438793280.0, 44700000.0, 0.18738131458572815], [1438795008.0, 44720000.0, 0.17502305897527334], [1438796736.0, 44740000.0, 0.16263716519488516], [1438798464.0, 44760000.0, 0.1502255891207594], [1438800192.0, 44780000.0, 0.1377902906846412], [1438801920.0, 44800000.0, 0.1253332335643011], [1438803648.0, 44820000.0, 0.11285638487348285], [1438805376.0, 44840000.0, 0.10036171485121682], [1438807104.0, 44860000.0, 0.0878511965507459], [1438808832.0, 44880000.0, 0.07532680552793268], [1438810560.0, 44900000.0, 0.06279051952931412], [1438812288.0, 44920000.0, 0.05024431817977108], [1438814016.0, 44940000.0, 0.037690182669936845], [1438815744.0, 44960000.0, 0.025130095443337018], [1438817472.0, 44980000.0, 0.012566039883352928], [1438819200.0, 45000000.0, 1.102182119232618e-15], [1438820928.0, 45020000.0, -0.012566039883350723], [1438822656.0, 45040000.0, -0.025130095443334815], [1438824384.0, 45060000.0, -0.037690182669934645], [1438826112.0, 45080000.0, -0.05024431817976888], [1438827840.0, 45100000.0, -0.06279051952931192], [1438829568.0, 45120000.0, -0.07532680552793049], [1438831296.0, 45140000.0, -0.08785119655074371], [1438833024.0, 45160000.0, -0.10036171485121463], [1438834752.0, 45180000.0, -0.11285638487348065], [1438836480.0, 45200000.0, -0.12533323356429893], [1438838208.0, 45220000.0, -0.137790290684639], [1438839936.0, 45240000.0, -0.15022558912075723], [1438841664.0, 45260000.0, -0.162637165194883], [1438843392.0, 45280000.0, -0.17502305897527118], [1438845120.0, 45300000.0, -0.187381314585726], [1438846848.0, 45320000.0, -0.1997099805144076], [1438848576.0, 45340000.0, -0.212007109922051], [1438850304.0, 45360000.0, -0.22427076094937679], [1438852032.0, 45380000.0, -0.23649899702372643], [1438853760.0, 45400000.0, -0.24868988716485232], [1438855488.0, 45420000.0, -0.2608415062898937], [1438857216.0, 45440000.0, -0.2729519355173213], [1438858944.0, 45460000.0, -0.2850192624699783], [1438860672.0, 45480000.0, -0.2970415815770329], [1438862400.0, 45500000.0, -0.3090169943749447], [1438864128.0, 45520000.0, -0.320943609807206], [1438865856.0, 45540000.0, -0.3328195445229858], [1438867584.0, 45560000.0, -0.3446429231745155], [1438869312.0, 45580000.0, -0.3564118787132484], [1438871040.0, 45600000.0, -0.3681245526846749], [1438872768.0, 45620000.0, -0.37977909552180067], [1438874496.0, 45640000.0, -0.39137366683720126], [1438876224.0, 45660000.0, -0.4029064357136608], [1438877952.0, 45680000.0, -0.4143755809932816], [1438879680.0, 45700000.0, -0.4257792915650726], [1438881408.0, 45720000.0, -0.43711576665093216], [1438883136.0, 45740000.0, -0.4483832160900308], [1438884864.0, 45760000.0, -0.4595798606214857], [1438886592.0, 45780000.0, -0.4707039321653329], [1438888320.0, 45800000.0, -0.48175367410171493], [1438890048.0, 45820000.0, -0.4927273415482905], [1438891776.0, 45840000.0, -0.5036232016357591], [1438893504.0, 45860000.0, -0.5144395337815071], [1438895232.0, 45880000.0, -0.5251746299612957], [1438896960.0, 45900000.0, -0.535826794978996], [1438898688.0, 45920000.0, -0.5463943467342648], [1438900416.0, 45940000.0, -0.5568756164881891], [1438902144.0, 45960000.0, -0.5672689491267568], [1438903872.0, 45980000.0, -0.5775727034222673], [1438905600.0, 46000000.0, -0.5877852522924694], [1438907328.0, 46020000.0, -0.5979049830575202], [1438909056.0, 46040000.0, -0.607930297694606], [1438910784.0, 46060000.0, -0.6178596130903317], [1438912512.0, 46080000.0, -0.6276913612906971], [1438914240.0, 46100000.0, -0.6374239897486913], [1438915968.0, 46120000.0, -0.6470559615694426], [1438917696.0, 46140000.0, -0.6565857557529542], [1438919424.0, 46160000.0, -0.6660118674342488], [1438921152.0, 46180000.0, -0.6753328081210263], [1438922880.0, 46200000.0, -0.6845471059286873], [1438924608.0, 46220000.0, -0.693653305812803], [1438926336.0, 46240000.0, -0.7026499697988468], [1438928064.0, 46260000.0, -0.7115356772092849], [1438929792.0, 46280000.0, -0.7203090248879059], [1438931520.0, 46300000.0, -0.72896862742141], [1438933248.0, 46320000.0, -0.7375131173581719], [1438934976.0, 46340000.0, -0.745941145424182], [1438936704.0, 46360000.0, -0.7542513807361032], [1438938432.0, 46380000.0, -0.7624425110114467], [1438940160.0, 46400000.0, -0.7705132427757876], [1438941888.0, 46420000.0, -0.7784623015670236], [1438943616.0, 46440000.0, -0.7862884321366186], [1438945344.0, 46460000.0, -0.7939903986478345], [1438947072.0, 46480000.0, -0.8015669848708753], [1438948800.0, 46500000.0, -0.8090169943749478], [1438950528.0, 46520000.0, -0.8163392507171838], [1438952256.0, 46540000.0, -0.8235325976284269], [1438953984.0, 46560000.0, -0.8305958991958117], [1438955712.0, 46580000.0, -0.8375280400421423], [1438957440.0, 46600000.0, -0.8443279255020152], [1438959168.0, 46620000.0, -0.8509944817946916], [1438960896.0, 46640000.0, -0.8575266561936516], [1438962624.0, 46660000.0, -0.863923417192836], [1438964352.0, 46680000.0, -0.870183754669526], [1438966080.0, 46700000.0, -0.8763066800438636], [1438967808.0, 46720000.0, -0.8822912264349512], [1438969536.0, 46740000.0, -0.8881364488135454], [1438971264.0, 46760000.0, -0.8938414241512643], [1438972992.0, 46780000.0, -0.8994052515663696], [1438974720.0, 46800000.0, -0.9048270524660178], [1438976448.0, 46820000.0, -0.9101059706849967], [1438978176.0, 46840000.0, -0.9152411726209182], [1438979904.0, 46860000.0, -0.9202318473658693], [1438981632.0, 46880000.0, -0.9250772068344567], [1438983360.0, 46900000.0, -0.9297764858882525], [1438985088.0, 46920000.0, -0.9343289424566115], [1438986816.0, 46940000.0, -0.9387338576538733], [1438988544.0, 46960000.0, -0.9429905358928634], [1438990272.0, 46980000.0, -0.9470983049947441], [1438992000.0, 47000000.0, -0.9510565162951532], [1438993728.0, 47020000.0, -0.9548645447466424], [1438995456.0, 47040000.0, -0.9585217890173751], [1438997184.0, 47060000.0, -0.9620276715860859], [1438998912.0, 47080000.0, -0.9653816388332737], [1439000640.0, 47100000.0, -0.9685831611286307], [1439002368.0, 47120000.0, -0.9716317329146734], [1439004096.0, 47140000.0, -0.9745268727865772], [1439005824.0, 47160000.0, -0.9772681235681934], [1439007552.0, 47180000.0, -0.9798550523842466], [1439009280.0, 47200000.0, -0.9822872507286883], [1439011008.0, 47220000.0, -0.9845643345292056], [1439012736.0, 47240000.0, -0.986685944207868], [1439014464.0, 47260000.0, -0.988651744737914], [1439016192.0, 47280000.0, -0.990461425696651], [1439017920.0, 47300000.0, -0.992114701314478], [1439019648.0, 47320000.0, -0.9936113105200085], [1439021376.0, 47340000.0, -0.9949510169813002], [1439023104.0, 47360000.0, -0.9961336091431724], [1439024832.0, 47380000.0, -0.997158900260614], [1439026560.0, 47400000.0, -0.9980267284282717], [1439028288.0, 47420000.0, -0.9987369566060175], [1439030016.0, 47440000.0, -0.9992894726405891], [1439031744.0, 47460000.0, -0.9996841892833], [1439033472.0, 47480000.0, -0.9999210442038161], [1439035200.0, 47500000.0, -1.0], [1439036928.0, 47520000.0, -0.9999210442038161], [1439038656.0, 47540000.0, -0.9996841892833], [1439040384.0, 47560000.0, -0.9992894726405892], [1439042112.0, 47580000.0, -0.9987369566060176], [1439043840.0, 47600000.0, -0.9980267284282718], [1439045568.0, 47620000.0, -0.9971589002606143], [1439047296.0, 47640000.0, -0.9961336091431726], [1439049024.0, 47660000.0, -0.9949510169813004], [1439050752.0, 47680000.0, -0.9936113105200087], [1439052480.0, 47700000.0, -0.9921147013144783], [1439054208.0, 47720000.0, -0.9904614256966513], [1439055936.0, 47740000.0, -0.9886517447379143], [1439057664.0, 47760000.0, -0.9866859442078685], [1439059392.0, 47780000.0, -0.984564334529206], [1439061120.0, 47800000.0, -0.9822872507286887], [1439062848.0, 47820000.0, -0.9798550523842471], [1439064576.0, 47840000.0, -0.9772681235681939], [1439066304.0, 47860000.0, -0.9745268727865778], [1439068032.0, 47880000.0, -0.971631732914674], [1439069760.0, 47900000.0, -0.9685831611286313], [1439071488.0, 47920000.0, -0.9653816388332743], [1439073216.0, 47940000.0, -0.9620276715860865], [1439074944.0, 47960000.0, -0.9585217890173757], [1439076672.0, 47980000.0, -0.9548645447466431], [1439078400.0, 48000000.0, -0.951056516295154], [1439080128.0, 48020000.0, -0.9470983049947449], [1439081856.0, 48040000.0, -0.9429905358928642], [1439083584.0, 48060000.0, -0.9387338576538741], [1439085312.0, 48080000.0, -0.9343289424566124], [1439087040.0, 48100000.0, -0.9297764858882532], [1439088768.0, 48120000.0, -0.9250772068344576], [1439090496.0, 48140000.0, -0.9202318473658702], [1439092224.0, 48160000.0, -0.9152411726209191], [1439093952.0, 48180000.0, -0.9101059706849977], [1439095680.0, 48200000.0, -0.9048270524660188], [1439097408.0, 48220000.0, -0.8994052515663706], [1439099136.0, 48240000.0, -0.8938414241512653], [1439100864.0, 48260000.0, -0.8881364488135465], [1439102592.0, 48280000.0, -0.8822912264349523], [1439104320.0, 48300000.0, -0.8763066800438647], [1439106048.0, 48320000.0, -0.8701837546695271], [1439107776.0, 48340000.0, -0.8639234171928373], [1439109504.0, 48360000.0, -0.8575266561936528], [1439111232.0, 48380000.0, -0.8509944817946928], [1439112960.0, 48400000.0, -0.8443279255020165], [1439114688.0, 48420000.0, -0.8375280400421435], [1439116416.0, 48440000.0, -0.830595899195813], [1439118144.0, 48460000.0, -0.8235325976284282], [1439119872.0, 48480000.0, -0.8163392507171852], [1439121600.0, 48500000.0, -0.8090169943749491], [1439123328.0, 48520000.0, -0.8015669848708766], [1439125056.0, 48540000.0, -0.7939903986478359], [1439126784.0, 48560000.0, -0.78628843213662], [1439128512.0, 48580000.0, -0.778462301567025], [1439130240.0, 48600000.0, -0.770513242775789], [1439131968.0, 48620000.0, -0.7624425110114482], [1439133696.0, 48640000.0, -0.7542513807361046], [1439135424.0, 48660000.0, -0.7459411454241835], [1439137152.0, 48680000.0, -0.7375131173581735], [1439138880.0, 48700000.0, -0.7289686274214117], [1439140608.0, 48720000.0, -0.7203090248879075], [1439142336.0, 48740000.0, -0.7115356772092866], [1439144064.0, 48760000.0, -0.7026499697988484], [1439145792.0, 48780000.0, -0.6936533058128047], [1439147520.0, 48800000.0, -0.6845471059286891], [1439149248.0, 48820000.0, -0.675332808121028], [1439150976.0, 48840000.0, -0.6660118674342504], [1439152704.0, 48860000.0, -0.6565857557529559], [1439154432.0, 48880000.0, -0.6470559615694443], [1439156160.0, 48900000.0, -0.6374239897486931], [1439157888.0, 48920000.0, -0.627691361290699], [1439159616.0, 48940000.0, -0.6178596130903334], [1439161344.0, 48960000.0, -0.6079302976946079], [1439163072.0, 48980000.0, -0.597904983057522], [1439164800.0, 49000000.0, -0.5877852522924712], [1439166528.0, 49020000.0, -0.5775727034222692], [1439168256.0, 49040000.0, -0.5672689491267587], [1439169984.0, 49060000.0, -0.556875616488191], [1439171712.0, 49080000.0, -0.5463943467342668], [1439173440.0, 49100000.0, -0.535826794978998], [1439175168.0, 49120000.0, -0.5251746299612977], [1439176896.0, 49140000.0, -0.5144395337815091], [1439178624.0, 49160000.0, -0.5036232016357611], [1439180352.0, 49180000.0, -0.49272734154829256], [1439182080.0, 49200000.0, -0.48175367410171693], [1439183808.0, 49220000.0, -0.47070393216533496], [1439185536.0, 49240000.0, -0.4595798606214878], [1439187264.0, 49260000.0, -0.4483832160900329], [1439188992.0, 49280000.0, -0.43711576665093427], [1439190720.0, 49300000.0, -0.4257792915650747], [1439192448.0, 49320000.0, -0.4143755809932837], [1439194176.0, 49340000.0, -0.4029064357136629], [1439195904.0, 49360000.0, -0.3913736668372034], [1439197632.0, 49380000.0, -0.37977909552180283], [1439199360.0, 49400000.0, -0.3681245526846771], [1439201088.0, 49420000.0, -0.3564118787132506], [1439202816.0, 49440000.0, -0.34464292317451767], [1439204544.0, 49460000.0, -0.332819544522988], [1439206272.0, 49480000.0, -0.3209436098072082], [1439208000.0, 49500000.0, -0.3090169943749469], [1439209728.0, 49520000.0, -0.29704158157703514], [1439211456.0, 49540000.0, -0.2850192624699805], [1439213184.0, 49560000.0, -0.27295193551732355], [1439214912.0, 49580000.0, -0.260841506289896], [1439216640.0, 49600000.0, -0.2486898871648546], [1439218368.0, 49620000.0, -0.2364989970237287], [1439220096.0, 49640000.0, -0.22427076094937903], [1439221824.0, 49660000.0, -0.21200710992205327], [1439223552.0, 49680000.0, -0.19970998051440988], [1439225280.0, 49700000.0, -0.18738131458572826], [1439227008.0, 49720000.0, -0.17502305897527348], [1439228736.0, 49740000.0, -0.1626371651948853], [1439230464.0, 49760000.0, -0.15022558912075953], [1439232192.0, 49780000.0, -0.13779029068464133], [1439233920.0, 49800000.0, -0.12533323356430123], [1439235648.0, 49820000.0, -0.11285638487348297], [1439237376.0, 49840000.0, -0.10036171485121695], [1439239104.0, 49860000.0, -0.08785119655074602], [1439240832.0, 49880000.0, -0.0753268055279328], [1439242560.0, 49900000.0, -0.06279051952931425], [1439244288.0, 49920000.0, -0.0502443181797712], [1439246016.0, 49940000.0, -0.03769018266993697], [1439247744.0, 49960000.0, -0.02513009544333714], [1439249472.0, 49980000.0, -0.01256603988335305], [1439251200.0, 50000000.0, -1.2246467991473533e-15], [1439252928.0, 50020000.0, 0.012566039883350602], [1439254656.0, 50040000.0, 0.02513009544333469], [1439256384.0, 50060000.0, 0.03769018266993452], [1439258112.0, 50080000.0, 0.05024431817976876], [1439259840.0, 50100000.0, 0.06279051952931179], [1439261568.0, 50120000.0, 0.07532680552793036], [1439263296.0, 50140000.0, 0.08785119655074358], [1439265024.0, 50160000.0, 0.10036171485121452], [1439266752.0, 50180000.0, 0.11285638487348054], [1439268480.0, 50200000.0, 0.1253332335642988], [1439270208.0, 50220000.0, 0.13779029068463888], [1439271936.0, 50240000.0, 0.1502255891207571], [1439273664.0, 50260000.0, 0.1626371651948829], [1439275392.0, 50280000.0, 0.17502305897527107], [1439277120.0, 50300000.0, 0.18738131458572585], [1439278848.0, 50320000.0, 0.19970998051440747], [1439280576.0, 50340000.0, 0.21200710992205088], [1439282304.0, 50360000.0, 0.22427076094937665], [1439284032.0, 50380000.0, 0.23649899702372632], [1439285760.0, 50400000.0, 0.2486898871648522], [1439287488.0, 50420000.0, 0.2608415062898936], [1439289216.0, 50440000.0, 0.27295193551732116], [1439290944.0, 50460000.0, 0.28501926246997816], [1439292672.0, 50480000.0, 0.29704158157703275], [1439294400.0, 50500000.0, 0.30901699437494456], [1439296128.0, 50520000.0, 0.3209436098072059], [1439297856.0, 50540000.0, 0.3328195445229857], [1439299584.0, 50560000.0, 0.34464292317451534], [1439301312.0, 50580000.0, 0.3564118787132483], [1439303040.0, 50600000.0, 0.3681245526846748], [1439304768.0, 50620000.0, 0.37977909552180056], [1439306496.0, 50640000.0, 0.39137366683720115], [1439308224.0, 50660000.0, 0.4029064357136607], [1439309952.0, 50680000.0, 0.4143755809932815], [1439311680.0, 50700000.0, 0.4257792915650725], [1439313408.0, 50720000.0, 0.43711576665093205], [1439315136.0, 50740000.0, 0.4483832160900307], [1439316864.0, 50760000.0, 0.4595798606214856], [1439318592.0, 50780000.0, 0.4707039321653328], [1439320320.0, 50800000.0, 0.4817536741017148], [1439322048.0, 50820000.0, 0.4927273415482904], [1439323776.0, 50840000.0, 0.503623201635759], [1439325504.0, 50860000.0, 0.514439533781507], [1439327232.0, 50880000.0, 0.5251746299612956], [1439328960.0, 50900000.0, 0.5358267949789959], [1439330688.0, 50920000.0, 0.5463943467342647], [1439332416.0, 50940000.0, 0.556875616488186], [1439334144.0, 50960000.0, 0.5672689491267539], [1439335872.0, 50980000.0, 0.5775727034222643], [1439337600.0, 51000000.0, 0.5877852522924693], [1439339328.0, 51020000.0, 0.59790498305752], [1439341056.0, 51040000.0, 0.6079302976946059], [1439342784.0, 51060000.0, 0.6178596130903343], [1439344512.0, 51080000.0, 0.6276913612906998], [1439346240.0, 51100000.0, 0.6374239897486885], [1439347968.0, 51120000.0, 0.6470559615694425], [1439349696.0, 51140000.0, 0.6565857557529541], [1439351424.0, 51160000.0, 0.6660118674342487], [1439353152.0, 51180000.0, 0.6753328081210261], [1439354880.0, 51200000.0, 0.6845471059286898], [1439356608.0, 51220000.0, 0.6936533058128056], [1439358336.0, 51240000.0, 0.7026499697988492], [1439360064.0, 51260000.0, 0.7115356772092848], [1439361792.0, 51280000.0, 0.7203090248879058], [1439363520.0, 51300000.0, 0.7289686274214099], [1439365248.0, 51320000.0, 0.7375131173581718], [1439366976.0, 51340000.0, 0.7459411454241843], [1439368704.0, 51360000.0, 0.7542513807361054], [1439370432.0, 51380000.0, 0.7624425110114489], [1439372160.0, 51400000.0, 0.7705132427757853], [1439373888.0, 51420000.0, 0.7784623015670235], [1439375616.0, 51440000.0, 0.7862884321366185], [1439377344.0, 51460000.0, 0.7939903986478344], [1439379072.0, 51480000.0, 0.8015669848708752], [1439380800.0, 51500000.0, 0.8090169943749498], [1439382528.0, 51520000.0, 0.8163392507171817], [1439384256.0, 51540000.0, 0.8235325976284248], [1439385984.0, 51560000.0, 0.8305958991958097], [1439387712.0, 51580000.0, 0.8375280400421422], [1439389440.0, 51600000.0, 0.8443279255020152], [1439391168.0, 51620000.0, 0.8509944817946915], [1439392896.0, 51640000.0, 0.8575266561936515], [1439394624.0, 51660000.0, 0.8639234171928342], [1439396352.0, 51680000.0, 0.8701837546695242], [1439398080.0, 51700000.0, 0.8763066800438618], [1439399808.0, 51720000.0, 0.8822912264349512], [1439401536.0, 51740000.0, 0.8881364488135454], [1439403264.0, 51760000.0, 0.8938414241512642], [1439404992.0, 51780000.0, 0.8994052515663712], [1439406720.0, 51800000.0, 0.9048270524660192], [1439408448.0, 51820000.0, 0.9101059706849951], [1439410176.0, 51840000.0, 0.9152411726209168], [1439411904.0, 51860000.0, 0.9202318473658692], [1439413632.0, 51880000.0, 0.9250772068344566], [1439415360.0, 51900000.0, 0.9297764858882523], [1439417088.0, 51920000.0, 0.9343289424566127], [1439418816.0, 51940000.0, 0.9387338576538744], [1439420544.0, 51960000.0, 0.9429905358928645], [1439422272.0, 51980000.0, 0.9470983049947441], [1439424000.0, 52000000.0, 0.9510565162951532], [1439425728.0, 52020000.0, 0.9548645447466424], [1439427456.0, 52040000.0, 0.9585217890173751], [1439429184.0, 52060000.0, 0.9620276715860868], [1439430912.0, 52080000.0, 0.9653816388332745], [1439432640.0, 52100000.0, 0.9685831611286316], [1439434368.0, 52120000.0, 0.9716317329146725], [1439436096.0, 52140000.0, 0.9745268727865772], [1439437824.0, 52160000.0, 0.9772681235681934], [1439439552.0, 52180000.0, 0.9798550523842466], [1439441280.0, 52200000.0, 0.9822872507286883], [1439443008.0, 52220000.0, 0.9845643345292061], [1439444736.0, 52240000.0, 0.9866859442078675], [1439446464.0, 52260000.0, 0.9886517447379134], [1439448192.0, 52280000.0, 0.9904614256966505], [1439449920.0, 52300000.0, 0.992114701314478], [1439451648.0, 52320000.0, 0.9936113105200085], [1439453376.0, 52340000.0, 0.9949510169813002], [1439455104.0, 52360000.0, 0.9961336091431724], [1439456832.0, 52380000.0, 0.9971589002606138], [1439458560.0, 52400000.0, 0.9980267284282713], [1439460288.0, 52420000.0, 0.9987369566060174], [1439462016.0, 52440000.0, 0.9992894726405891], [1439463744.0, 52460000.0, 0.9996841892833], [1439465472.0, 52480000.0, 0.9999210442038161], [1439467200.0, 52500000.0, 1.0], [1439468928.0, 52520000.0, 0.9999210442038161], [1439470656.0, 52540000.0, 0.9996841892833], [1439472384.0, 52560000.0, 0.9992894726405893], [1439474112.0, 52580000.0, 0.9987369566060176], [1439475840.0, 52600000.0, 0.9980267284282718], [1439477568.0, 52620000.0, 0.9971589002606143], [1439479296.0, 52640000.0, 0.9961336091431723], [1439481024.0, 52660000.0, 0.9949510169813001], [1439482752.0, 52680000.0, 0.9936113105200084], [1439484480.0, 52700000.0, 0.9921147013144788], [1439486208.0, 52720000.0, 0.9904614256966514], [1439487936.0, 52740000.0, 0.9886517447379143], [1439489664.0, 52760000.0, 0.9866859442078685], [1439491392.0, 52780000.0, 0.984564334529206], [1439493120.0, 52800000.0, 0.9822872507286882], [1439494848.0, 52820000.0, 0.9798550523842464], [1439496576.0, 52840000.0, 0.9772681235681947], [1439498304.0, 52860000.0, 0.9745268727865786], [1439500032.0, 52880000.0, 0.971631732914674], [1439501760.0, 52900000.0, 0.9685831611286313], [1439503488.0, 52920000.0, 0.9653816388332743], [1439505216.0, 52940000.0, 0.9620276715860866], [1439506944.0, 52960000.0, 0.9585217890173748], [1439508672.0, 52980000.0, 0.9548645447466442], [1439510400.0, 53000000.0, 0.9510565162951551], [1439512128.0, 53020000.0, 0.9470983049947461], [1439513856.0, 53040000.0, 0.9429905358928642], [1439515584.0, 53060000.0, 0.9387338576538741], [1439517312.0, 53080000.0, 0.9343289424566124], [1439519040.0, 53100000.0, 0.929776485888252], [1439520768.0, 53120000.0, 0.9250772068344589], [1439522496.0, 53140000.0, 0.9202318473658716], [1439524224.0, 53160000.0, 0.9152411726209192], [1439525952.0, 53180000.0, 0.9101059706849977], [1439527680.0, 53200000.0, 0.9048270524660189], [1439529408.0, 53220000.0, 0.8994052515663707], [1439531136.0, 53240000.0, 0.8938414241512638], [1439532864.0, 53260000.0, 0.8881364488135449], [1439534592.0, 53280000.0, 0.8822912264349541], [1439536320.0, 53300000.0, 0.8763066800438647], [1439538048.0, 53320000.0, 0.8701837546695272], [1439539776.0, 53340000.0, 0.8639234171928373], [1439541504.0, 53360000.0, 0.857526656193651], [1439543232.0, 53380000.0, 0.8509944817946911], [1439544960.0, 53400000.0, 0.8443279255020146], [1439546688.0, 53420000.0, 0.8375280400421455], [1439548416.0, 53440000.0, 0.830595899195813], [1439550144.0, 53460000.0, 0.8235325976284283], [1439551872.0, 53480000.0, 0.8163392507171853], [1439553600.0, 53500000.0, 0.8090169943749492], [1439555328.0, 53520000.0, 0.8015669848708746], [1439557056.0, 53540000.0, 0.7939903986478338], [1439558784.0, 53560000.0, 0.7862884321366223], [1439560512.0, 53580000.0, 0.7784623015670273], [1439562240.0, 53600000.0, 0.7705132427757891], [1439563968.0, 53620000.0, 0.7624425110114483], [1439565696.0, 53640000.0, 0.7542513807361048], [1439567424.0, 53660000.0, 0.7459411454241837], [1439569152.0, 53680000.0, 0.7375131173581712], [1439570880.0, 53700000.0, 0.7289686274214141], [1439572608.0, 53720000.0, 0.72030902488791], [1439574336.0, 53740000.0, 0.7115356772092891], [1439576064.0, 53760000.0, 0.7026499697988485], [1439577792.0, 53780000.0, 0.6936533058128048], [1439579520.0, 53800000.0, 0.6845471059286892], [1439581248.0, 53820000.0, 0.6753328081210255], [1439582976.0, 53840000.0, 0.6660118674342532], [1439584704.0, 53860000.0, 0.6565857557529586], [1439586432.0, 53880000.0, 0.6470559615694471], [1439588160.0, 53900000.0, 0.6374239897486932], [1439589888.0, 53920000.0, 0.627691361290699], [1439591616.0, 53940000.0, 0.6178596130903335], [1439593344.0, 53960000.0, 0.6079302976946052], [1439595072.0, 53980000.0, 0.5979049830575193], [1439596800.0, 54000000.0, 0.5877852522924742], [1439598528.0, 54020000.0, 0.5775727034222693], [1439600256.0, 54040000.0, 0.5672689491267588], [1439601984.0, 54060000.0, 0.5568756164881911], [1439603712.0, 54080000.0, 0.5463943467342669], [1439605440.0, 54100000.0, 0.535826794978995], [1439607168.0, 54120000.0, 0.5251746299612948], [1439608896.0, 54140000.0, 0.5144395337815062], [1439610624.0, 54160000.0, 0.5036232016357612], [1439612352.0, 54180000.0, 0.4927273415482927], [1439614080.0, 54200000.0, 0.48175367410171704], [1439615808.0, 54220000.0, 0.47070393216533507], [1439617536.0, 54240000.0, 0.45957986062148476], [1439619264.0, 54260000.0, 0.44838321609002985], [1439620992.0, 54280000.0, 0.43711576665093754], [1439622720.0, 54300000.0, 0.42577929156507804], [1439624448.0, 54320000.0, 0.4143755809932838], [1439626176.0, 54340000.0, 0.402906435713663], [1439627904.0, 54360000.0, 0.39137366683720354], [1439629632.0, 54380000.0, 0.37977909552180295], [1439631360.0, 54400000.0, 0.3681245526846739], [1439633088.0, 54420000.0, 0.356411878713254], [1439634816.0, 54440000.0, 0.3446429231745211], [1439636544.0, 54460000.0, 0.33281954452299145], [1439638272.0, 54480000.0, 0.3209436098072083], [1439640000.0, 54500000.0, 0.309016994374947], [1439641728.0, 54520000.0, 0.29704158157703525], [1439643456.0, 54540000.0, 0.2850192624699772], [1439645184.0, 54560000.0, 0.27295193551732705], [1439646912.0, 54580000.0, 0.26084150628989955], [1439648640.0, 54600000.0, 0.24868988716485815], [1439650368.0, 54620000.0, 0.2364989970237288], [1439652096.0, 54640000.0, 0.22427076094937917], [1439653824.0, 54660000.0, 0.21200710992205338], [1439655552.0, 54680000.0, 0.19970998051440653], [1439657280.0, 54700000.0, 0.1873813145857249], [1439659008.0, 54720000.0, 0.1750230589752771], [1439660736.0, 54740000.0, 0.1626371651948854], [1439662464.0, 54760000.0, 0.15022558912075964], [1439664192.0, 54780000.0, 0.13779029068464144], [1439665920.0, 54800000.0, 0.12533323356430134], [1439667648.0, 54820000.0, 0.11285638487347956], [1439669376.0, 54840000.0, 0.10036171485121353], [1439671104.0, 54860000.0, 0.0878511965507426], [1439672832.0, 54880000.0, 0.07532680552793293], [1439674560.0, 54900000.0, 0.06279051952931436], [1439676288.0, 54920000.0, 0.050244318179771326], [1439678016.0, 54940000.0, 0.03769018266993709], [1439679744.0, 54960000.0, 0.02513009544333371], [1439681472.0, 54980000.0, 0.01256603988334962], [1439683200.0, 55000000.0, 4.899825157862589e-15], [1439684928.0, 55020000.0, -0.012566039883346926], [1439686656.0, 55040000.0, -0.025130095443331016], [1439688384.0, 55060000.0, -0.037690182669934395], [1439690112.0, 55080000.0, -0.050244318179768634], [1439691840.0, 55100000.0, -0.06279051952931168], [1439693568.0, 55120000.0, -0.07532680552793024], [1439695296.0, 55140000.0, -0.08785119655073992], [1439697024.0, 55160000.0, -0.10036171485121086], [1439698752.0, 55180000.0, -0.11285638487347688], [1439700480.0, 55200000.0, -0.12533323356429868], [1439702208.0, 55220000.0, -0.13779029068463877], [1439703936.0, 55240000.0, -0.15022558912075698], [1439705664.0, 55260000.0, -0.16263716519488275], [1439707392.0, 55280000.0, -0.17502305897527443], [1439709120.0, 55300000.0, -0.18738131458572224], [1439710848.0, 55320000.0, -0.1997099805144039], [1439712576.0, 55340000.0, -0.21200710992205074], [1439714304.0, 55360000.0, -0.22427076094937654], [1439716032.0, 55380000.0, -0.2364989970237262], [1439717760.0, 55400000.0, -0.24868988716485554], [1439719488.0, 55420000.0, -0.26084150628989694], [1439721216.0, 55440000.0, -0.2729519355173245], [1439722944.0, 55460000.0, -0.2850192624699746], [1439724672.0, 55480000.0, -0.29704158157703264], [1439726400.0, 55500000.0, -0.30901699437494445], [1439728128.0, 55520000.0, -0.32094360980720577], [1439729856.0, 55540000.0, -0.3328195445229889], [1439731584.0, 55560000.0, -0.34464292317451856], [1439733312.0, 55580000.0, -0.3564118787132515], [1439735040.0, 55600000.0, -0.3681245526846714], [1439736768.0, 55620000.0, -0.37977909552180045], [1439738496.0, 55640000.0, -0.39137366683720104], [1439740224.0, 55660000.0, -0.4029064357136606], [1439741952.0, 55680000.0, -0.41437558099328137], [1439743680.0, 55700000.0, -0.4257792915650756], [1439745408.0, 55720000.0, -0.4371157666509351], [1439747136.0, 55740000.0, -0.4483832160900274], [1439748864.0, 55760000.0, -0.4595798606214824], [1439750592.0, 55780000.0, -0.4707039321653327], [1439752320.0, 55800000.0, -0.4817536741017147], [1439754048.0, 55820000.0, -0.49272734154829034], [1439755776.0, 55840000.0, -0.5036232016357589], [1439757504.0, 55860000.0, -0.5144395337815039], [1439759232.0, 55880000.0, -0.5251746299612925], [1439760960.0, 55900000.0, -0.5358267949789928], [1439762688.0, 55920000.0, -0.5463943467342646], [1439764416.0, 55940000.0, -0.5568756164881888], [1439766144.0, 55960000.0, -0.5672689491267566], [1439767872.0, 55980000.0, -0.5775727034222671], [1439769600.0, 56000000.0, -0.587785252292472], [1439771328.0, 56020000.0, -0.5979049830575172], [1439773056.0, 56040000.0, -0.607930297694603], [1439774784.0, 56060000.0, -0.6178596130903314], [1439776512.0, 56080000.0, -0.627691361290697], [1439778240.0, 56100000.0, -0.6374239897486911], [1439779968.0, 56120000.0, -0.6470559615694451], [1439781696.0, 56140000.0, -0.6565857557529566], [1439783424.0, 56160000.0, -0.6660118674342512], [1439785152.0, 56180000.0, -0.6753328081210235], [1439786880.0, 56200000.0, -0.6845471059286872], [1439788608.0, 56220000.0, -0.6936533058128029], [1439790336.0, 56240000.0, -0.7026499697988466], [1439792064.0, 56260000.0, -0.7115356772092872], [1439793792.0, 56280000.0, -0.7203090248879082], [1439795520.0, 56300000.0, -0.7289686274214123], [1439797248.0, 56320000.0, -0.7375131173581693], [1439798976.0, 56340000.0, -0.7459411454241819], [1439800704.0, 56360000.0, -0.754251380736103], [1439802432.0, 56380000.0, -0.7624425110114466], [1439804160.0, 56400000.0, -0.7705132427757875], [1439805888.0, 56420000.0, -0.7784623015670257], [1439807616.0, 56440000.0, -0.7862884321366206], [1439809344.0, 56460000.0, -0.7939903986478322], [1439811072.0, 56480000.0, -0.801566984870873], [1439812800.0, 56500000.0, -0.8090169943749477], [1439814528.0, 56520000.0, -0.8163392507171837], [1439816256.0, 56540000.0, -0.8235325976284268], [1439817984.0, 56560000.0, -0.8305958991958116], [1439819712.0, 56580000.0, -0.8375280400421441], [1439821440.0, 56600000.0, -0.8443279255020132], [1439823168.0, 56620000.0, -0.8509944817946896], [1439824896.0, 56640000.0, -0.8575266561936497], [1439826624.0, 56660000.0, -0.8639234171928359], [1439828352.0, 56680000.0, -0.8701837546695259], [1439830080.0, 56700000.0, -0.8763066800438635], [1439831808.0, 56720000.0, -0.8822912264349527], [1439833536.0, 56740000.0, -0.8881364488135437], [1439835264.0, 56760000.0, -0.8938414241512626], [1439836992.0, 56780000.0, -0.8994052515663695], [1439838720.0, 56800000.0, -0.9048270524660177], [1439840448.0, 56820000.0, -0.9101059706849965], [1439842176.0, 56840000.0, -0.9152411726209181], [1439843904.0, 56860000.0, -0.9202318473658705], [1439845632.0, 56880000.0, -0.9250772068344579], [1439847360.0, 56900000.0, -0.929776485888251], [1439849088.0, 56920000.0, -0.9343289424566114], [1439850816.0, 56940000.0, -0.9387338576538732], [1439852544.0, 56960000.0, -0.9429905358928633], [1439854272.0, 56980000.0, -0.9470983049947452], [1439856000.0, 57000000.0, -0.9510565162951542], [1439857728.0, 57020000.0, -0.9548645447466434], [1439859456.0, 57040000.0, -0.9585217890173741], [1439861184.0, 57060000.0, -0.9620276715860858], [1439862912.0, 57080000.0, -0.9653816388332737], [1439864640.0, 57100000.0, -0.9685831611286306], [1439866368.0, 57120000.0, -0.9716317329146733], [1439868096.0, 57140000.0, -0.974526872786578], [1439869824.0, 57160000.0, -0.9772681235681941], [1439871552.0, 57180000.0, -0.9798550523842459], [1439873280.0, 57200000.0, -0.9822872507286876], [1439875008.0, 57220000.0, -0.9845643345292054], [1439876736.0, 57240000.0, -0.986685944207868], [1439878464.0, 57260000.0, -0.9886517447379138], [1439880192.0, 57280000.0, -0.990461425696651], [1439881920.0, 57300000.0, -0.9921147013144784], [1439883648.0, 57320000.0, -0.9936113105200081], [1439885376.0, 57340000.0, -0.9949510169812997], [1439887104.0, 57360000.0, -0.9961336091431721], [1439888832.0, 57380000.0, -0.997158900260614], [1439890560.0, 57400000.0, -0.9980267284282716], [1439892288.0, 57420000.0, -0.9987369566060175], [1439894016.0, 57440000.0, -0.9992894726405892], [1439895744.0, 57460000.0, -0.9996841892832999], [1439897472.0, 57480000.0, -0.9999210442038161], [1439899200.0, 57500000.0, -1.0], [1439900928.0, 57520000.0, -0.9999210442038162], [1439902656.0, 57540000.0, -0.9996841892833], [1439904384.0, 57560000.0, -0.9992894726405892], [1439906112.0, 57580000.0, -0.9987369566060175], [1439907840.0, 57600000.0, -0.9980267284282716], [1439909568.0, 57620000.0, -0.997158900260614], [1439911296.0, 57640000.0, -0.9961336091431726], [1439913024.0, 57660000.0, -0.9949510169813004], [1439914752.0, 57680000.0, -0.9936113105200087], [1439916480.0, 57700000.0, -0.9921147013144783], [1439918208.0, 57720000.0, -0.9904614256966509], [1439919936.0, 57740000.0, -0.9886517447379137], [1439921664.0, 57760000.0, -0.9866859442078679], [1439923392.0, 57780000.0, -0.9845643345292067], [1439925120.0, 57800000.0, -0.9822872507286888], [1439926848.0, 57820000.0, -0.9798550523842472], [1439928576.0, 57840000.0, -0.9772681235681939], [1439930304.0, 57860000.0, -0.9745268727865778], [1439932032.0, 57880000.0, -0.9716317329146732], [1439933760.0, 57900000.0, -0.9685831611286323], [1439935488.0, 57920000.0, -0.9653816388332753], [1439937216.0, 57940000.0, -0.9620276715860876], [1439938944.0, 57960000.0, -0.9585217890173758], [1439940672.0, 57980000.0, -0.9548645447466432], [1439942400.0, 58000000.0, -0.951056516295154], [1439944128.0, 58020000.0, -0.947098304994745], [1439945856.0, 58040000.0, -0.9429905358928654], [1439947584.0, 58060000.0, -0.9387338576538754], [1439949312.0, 58080000.0, -0.9343289424566137], [1439951040.0, 58100000.0, -0.9297764858882533], [1439952768.0, 58120000.0, -0.9250772068344577], [1439954496.0, 58140000.0, -0.9202318473658703], [1439956224.0, 58160000.0, -0.9152411726209178], [1439957952.0, 58180000.0, -0.9101059706849962], [1439959680.0, 58200000.0, -0.9048270524660205], [1439961408.0, 58220000.0, -0.8994052515663723], [1439963136.0, 58240000.0, -0.8938414241512654], [1439964864.0, 58260000.0, -0.8881364488135466], [1439966592.0, 58280000.0, -0.8822912264349524], [1439968320.0, 58300000.0, -0.876306680043863], [1439970048.0, 58320000.0, -0.8701837546695256], [1439971776.0, 58340000.0, -0.8639234171928356], [1439973504.0, 58360000.0, -0.8575266561936529], [1439975232.0, 58380000.0, -0.850994481794693], [1439976960.0, 58400000.0, -0.8443279255020166], [1439978688.0, 58420000.0, -0.8375280400421437], [1439980416.0, 58440000.0, -0.8305958991958111], [1439982144.0, 58460000.0, -0.8235325976284263], [1439983872.0, 58480000.0, -0.8163392507171833], [1439985600.0, 58500000.0, -0.8090169943749514], [1439987328.0, 58520000.0, -0.8015669848708769], [1439989056.0, 58540000.0, -0.793990398647836], [1439990784.0, 58560000.0, -0.7862884321366201], [1439992512.0, 58580000.0, -0.7784623015670251], [1439994240.0, 58600000.0, -0.7705132427757869], [1439995968.0, 58620000.0, -0.7624425110114507], [1439997696.0, 58640000.0, -0.7542513807361072], [1439999424.0, 58660000.0, -0.7459411454241861], [1440001152.0, 58680000.0, -0.7375131173581736], [1440002880.0, 58700000.0, -0.7289686274214118], [1440004608.0, 58720000.0, -0.7203090248879077], [1440006336.0, 58740000.0, -0.7115356772092867], [1440008064.0, 58760000.0, -0.7026499697988511], [1440009792.0, 58780000.0, -0.6936533058128075], [1440011520.0, 58800000.0, -0.6845471059286918], [1440013248.0, 58820000.0, -0.6753328081210281], [1440014976.0, 58840000.0, -0.6660118674342507], [1440016704.0, 58860000.0, -0.6565857557529561], [1440018432.0, 58880000.0, -0.6470559615694446], [1440020160.0, 58900000.0, -0.6374239897486905], [1440021888.0, 58920000.0, -0.6276913612907019], [1440023616.0, 58940000.0, -0.6178596130903364], [1440025344.0, 58960000.0, -0.6079302976946082], [1440027072.0, 58980000.0, -0.5979049830575223], [1440028800.0, 59000000.0, -0.5877852522924715], [1440030528.0, 59020000.0, -0.5775727034222665], [1440032256.0, 59040000.0, -0.5672689491267561], [1440033984.0, 59060000.0, -0.5568756164881882], [1440035712.0, 59080000.0, -0.5463943467342699], [1440037440.0, 59100000.0, -0.5358267949789981], [1440039168.0, 59120000.0, -0.5251746299612979], [1440040896.0, 59140000.0, -0.5144395337815093], [1440042624.0, 59160000.0, -0.5036232016357582], [1440044352.0, 59180000.0, -0.4927273415482897], [1440046080.0, 59200000.0, -0.48175367410171405], [1440047808.0, 59220000.0, -0.4707039321653383], [1440049536.0, 59240000.0, -0.45957986062148803], [1440051264.0, 59260000.0, -0.4483832160900331], [1440052992.0, 59280000.0, -0.4371157666509345], [1440054720.0, 59300000.0, -0.42577929156507494], [1440056448.0, 59320000.0, -0.41437558099328065], [1440058176.0, 59340000.0, -0.4029064357136599], [1440059904.0, 59360000.0, -0.39137366683720687], [1440061632.0, 59380000.0, -0.37977909552180633], [1440063360.0, 59400000.0, -0.3681245526846773], [1440065088.0, 59420000.0, -0.3564118787132508], [1440066816.0, 59440000.0, -0.3446429231745179], [1440068544.0, 59460000.0, -0.33281954452298823], [1440070272.0, 59480000.0, -0.3209436098072118], [1440072000.0, 59500000.0, -0.3090169943749505], [1440073728.0, 59520000.0, -0.29704158157703875], [1440075456.0, 59540000.0, -0.2850192624699807], [1440077184.0, 59560000.0, -0.2729519355173238], [1440078912.0, 59580000.0, -0.2608415062898962], [1440080640.0, 59600000.0, -0.24868988716485482], [1440082368.0, 59620000.0, -0.23649899702372548], [1440084096.0, 59640000.0, -0.22427076094938275], [1440085824.0, 59660000.0, -0.21200710992205696], [1440087552.0, 59680000.0, -0.19970998051441013], [1440089280.0, 59700000.0, -0.18738131458572851], [1440091008.0, 59720000.0, -0.1750230589752737], [1440092736.0, 59740000.0, -0.16263716519488203], [1440094464.0, 59760000.0, -0.15022558912075626], [1440096192.0, 59780000.0, -0.13779029068463802], [1440097920.0, 59800000.0, -0.12533323356430498], [1440099648.0, 59820000.0, -0.11285638487348322], [1440101376.0, 59840000.0, -0.1003617148512172], [1440103104.0, 59860000.0, -0.08785119655074626], [1440104832.0, 59880000.0, -0.0753268055279295], [1440106560.0, 59900000.0, -0.06279051952931095], [1440108288.0, 59920000.0, -0.0502443181797679], [1440110016.0, 59940000.0, -0.037690182669940765], [1440111744.0, 59960000.0, -0.025130095443337386], [1440113472.0, 59980000.0, -0.012566039883353296], [1440115200.0, 60000000.0, -1.4695761589768238e-15], [1440116928.0, 60020000.0, 0.012566039883350356], [1440118656.0, 60040000.0, 0.025130095443334447], [1440120384.0, 60060000.0, 0.03769018266993782], [1440122112.0, 60080000.0, 0.05024431817976496], [1440123840.0, 60100000.0, 0.062790519529308], [1440125568.0, 60120000.0, 0.07532680552792657], [1440127296.0, 60140000.0, 0.08785119655074333], [1440129024.0, 60160000.0, 0.10036171485121427], [1440130752.0, 60180000.0, 0.11285638487348029], [1440132480.0, 60200000.0, 0.12533323356430207], [1440134208.0, 60220000.0, 0.13779029068463514], [1440135936.0, 60240000.0, 0.15022558912075334], [1440137664.0, 60260000.0, 0.16263716519487914], [1440139392.0, 60280000.0, 0.17502305897527082], [1440141120.0, 60300000.0, 0.18738131458572563], [1440142848.0, 60320000.0, 0.19970998051440725], [1440144576.0, 60340000.0, 0.2120071099220541], [1440146304.0, 60360000.0, 0.2242707609493799], [1440148032.0, 60380000.0, 0.23649899702372262], [1440149760.0, 60400000.0, 0.248689887164852], [1440151488.0, 60420000.0, 0.2608415062898934], [1440153216.0, 60440000.0, 0.27295193551732094], [1440154944.0, 60460000.0, 0.2850192624699779], [1440156672.0, 60480000.0, 0.2970415815770359], [1440158400.0, 60500000.0, 0.30901699437494773], [1440160128.0, 60520000.0, 0.32094360980720904], [1440161856.0, 60540000.0, 0.33281954452298546], [1440163584.0, 60560000.0, 0.3446429231745151], [1440165312.0, 60580000.0, 0.35641187871324803], [1440167040.0, 60600000.0, 0.3681245526846746], [1440168768.0, 60620000.0, 0.3797790955218036], [1440170496.0, 60640000.0, 0.3913736668372042], [1440172224.0, 60660000.0, 0.4029064357136572], [1440173952.0, 60680000.0, 0.414375580993278], [1440175680.0, 60700000.0, 0.42577929156507227], [1440177408.0, 60720000.0, 0.4371157666509318], [1440179136.0, 60740000.0, 0.44838321609003046], [1440180864.0, 60760000.0, 0.4595798606214854], [1440182592.0, 60780000.0, 0.4707039321653357], [1440184320.0, 60800000.0, 0.4817536741017115], [1440186048.0, 60820000.0, 0.4927273415482871], [1440187776.0, 60840000.0, 0.5036232016357557], [1440189504.0, 60860000.0, 0.5144395337815069], [1440191232.0, 60880000.0, 0.5251746299612954], [1440192960.0, 60900000.0, 0.5358267949789957], [1440194688.0, 60920000.0, 0.5463943467342675], [1440196416.0, 60940000.0, 0.5568756164881857], [1440198144.0, 60960000.0, 0.5672689491267536], [1440199872.0, 60980000.0, 0.5775727034222641], [1440201600.0, 61000000.0, 0.587785252292469], [1440203328.0, 61020000.0, 0.5979049830575199], [1440205056.0, 61040000.0, 0.6079302976946058], [1440206784.0, 61060000.0, 0.6178596130903341], [1440208512.0, 61080000.0, 0.6276913612906997], [1440210240.0, 61100000.0, 0.6374239897486883], [1440211968.0, 61120000.0, 0.6470559615694423], [1440213696.0, 61140000.0, 0.6565857557529539], [1440215424.0, 61160000.0, 0.6660118674342485], [1440217152.0, 61180000.0, 0.675332808121026], [1440218880.0, 61200000.0, 0.6845471059286896], [1440220608.0, 61220000.0, 0.6936533058128054], [1440222336.0, 61240000.0, 0.7026499697988491], [1440224064.0, 61260000.0, 0.7115356772092847], [1440225792.0, 61280000.0, 0.7203090248879056], [1440227520.0, 61300000.0, 0.7289686274214098], [1440229248.0, 61320000.0, 0.7375131173581716], [1440230976.0, 61340000.0, 0.7459411454241841], [1440232704.0, 61360000.0, 0.7542513807361052], [1440234432.0, 61380000.0, 0.7624425110114488], [1440236160.0, 61400000.0, 0.7705132427757851], [1440237888.0, 61420000.0, 0.7784623015670233], [1440239616.0, 61440000.0, 0.7862884321366184], [1440241344.0, 61460000.0, 0.7939903986478343], [1440243072.0, 61480000.0, 0.8015669848708751], [1440244800.0, 61500000.0, 0.8090169943749497], [1440246528.0, 61520000.0, 0.8163392507171816], [1440248256.0, 61540000.0, 0.8235325976284247], [1440249984.0, 61560000.0, 0.8305958991958095], [1440251712.0, 61580000.0, 0.8375280400421421], [1440253440.0, 61600000.0, 0.8443279255020151], [1440255168.0, 61620000.0, 0.8509944817946914], [1440256896.0, 61640000.0, 0.8575266561936514], [1440258624.0, 61660000.0, 0.863923417192834], [1440260352.0, 61680000.0, 0.870183754669524], [1440262080.0, 61700000.0, 0.8763066800438617], [1440263808.0, 61720000.0, 0.8822912264349511], [1440265536.0, 61740000.0, 0.8881364488135453], [1440267264.0, 61760000.0, 0.8938414241512641], [1440268992.0, 61780000.0, 0.8994052515663711], [1440270720.0, 61800000.0, 0.9048270524660191], [1440272448.0, 61820000.0, 0.910105970684995], [1440274176.0, 61840000.0, 0.9152411726209166], [1440275904.0, 61860000.0, 0.9202318473658692], [1440277632.0, 61880000.0, 0.9250772068344566], [1440279360.0, 61900000.0, 0.9297764858882522], [1440281088.0, 61920000.0, 0.9343289424566126], [1440282816.0, 61940000.0, 0.9387338576538744], [1440284544.0, 61960000.0, 0.9429905358928645], [1440286272.0, 61980000.0, 0.947098304994744], [1440288000.0, 62000000.0, 0.9510565162951531], [1440289728.0, 62020000.0, 0.9548645447466423], [1440291456.0, 62040000.0, 0.9585217890173751], [1440293184.0, 62060000.0, 0.9620276715860868], [1440294912.0, 62080000.0, 0.9653816388332745], [1440296640.0, 62100000.0, 0.9685831611286315], [1440298368.0, 62120000.0, 0.9716317329146724], [1440300096.0, 62140000.0, 0.9745268727865771], [1440301824.0, 62160000.0, 0.9772681235681934], [1440303552.0, 62180000.0, 0.9798550523842465], [1440305280.0, 62200000.0, 0.9822872507286883], [1440307008.0, 62220000.0, 0.9845643345292061], [1440308736.0, 62240000.0, 0.9866859442078675], [1440310464.0, 62260000.0, 0.9886517447379133], [1440312192.0, 62280000.0, 0.9904614256966505], [1440313920.0, 62300000.0, 0.992114701314478], [1440315648.0, 62320000.0, 0.9936113105200084], [1440317376.0, 62340000.0, 0.9949510169813001], [1440319104.0, 62360000.0, 0.9961336091431724], [1440320832.0, 62380000.0, 0.9971589002606138], [1440322560.0, 62400000.0, 0.9980267284282713], [1440324288.0, 62420000.0, 0.9987369566060174], [1440326016.0, 62440000.0, 0.9992894726405891], [1440327744.0, 62460000.0, 0.9996841892833], [1440329472.0, 62480000.0, 0.9999210442038161], [1440331200.0, 62500000.0, 1.0], [1440332928.0, 62520000.0, 0.9999210442038161], [1440334656.0, 62540000.0, 0.9996841892833], [1440336384.0, 62560000.0, 0.9992894726405893], [1440338112.0, 62580000.0, 0.9987369566060177], [1440339840.0, 62600000.0, 0.9980267284282718], [1440341568.0, 62620000.0, 0.9971589002606143], [1440343296.0, 62640000.0, 0.9961336091431723], [1440345024.0, 62660000.0, 0.9949510169813001], [1440346752.0, 62680000.0, 0.9936113105200084], [1440348480.0, 62700000.0, 0.9921147013144788], [1440350208.0, 62720000.0, 0.9904614256966514], [1440351936.0, 62740000.0, 0.9886517447379143], [1440353664.0, 62760000.0, 0.9866859442078685], [1440355392.0, 62780000.0, 0.984564334529206], [1440357120.0, 62800000.0, 0.9822872507286882], [1440358848.0, 62820000.0, 0.9798550523842465], [1440360576.0, 62840000.0, 0.9772681235681947], [1440362304.0, 62860000.0, 0.9745268727865787], [1440364032.0, 62880000.0, 0.9716317329146741], [1440365760.0, 62900000.0, 0.9685831611286314], [1440367488.0, 62920000.0, 0.9653816388332744], [1440369216.0, 62940000.0, 0.9620276715860866], [1440370944.0, 62960000.0, 0.9585217890173748], [1440372672.0, 62980000.0, 0.9548645447466443], [1440374400.0, 63000000.0, 0.9510565162951552], [1440376128.0, 63020000.0, 0.9470983049947461], [1440377856.0, 63040000.0, 0.9429905358928643], [1440379584.0, 63060000.0, 0.9387338576538742], [1440381312.0, 63080000.0, 0.9343289424566125], [1440383040.0, 63100000.0, 0.9297764858882521], [1440384768.0, 63120000.0, 0.925077206834459], [1440386496.0, 63140000.0, 0.9202318473658717], [1440388224.0, 63160000.0, 0.9152411726209193], [1440389952.0, 63180000.0, 0.9101059706849978], [1440391680.0, 63200000.0, 0.904827052466019], [1440393408.0, 63220000.0, 0.8994052515663709], [1440395136.0, 63240000.0, 0.8938414241512639], [1440396864.0, 63260000.0, 0.888136448813545], [1440398592.0, 63280000.0, 0.8822912264349542], [1440400320.0, 63300000.0, 0.8763066800438648], [1440402048.0, 63320000.0, 0.8701837546695274], [1440403776.0, 63340000.0, 0.8639234171928374], [1440405504.0, 63360000.0, 0.8575266561936512], [1440407232.0, 63380000.0, 0.8509944817946912], [1440408960.0, 63400000.0, 0.8443279255020147], [1440410688.0, 63420000.0, 0.8375280400421456], [1440412416.0, 63440000.0, 0.8305958991958132], [1440414144.0, 63460000.0, 0.8235325976284285], [1440415872.0, 63480000.0, 0.8163392507171854], [1440417600.0, 63500000.0, 0.8090169943749493], [1440419328.0, 63520000.0, 0.8015669848708747], [1440421056.0, 63540000.0, 0.7939903986478339], [1440422784.0, 63560000.0, 0.7862884321366224], [1440424512.0, 63580000.0, 0.7784623015670274], [1440426240.0, 63600000.0, 0.7705132427757894], [1440427968.0, 63620000.0, 0.7624425110114484], [1440429696.0, 63640000.0, 0.754251380736105], [1440431424.0, 63660000.0, 0.7459411454241838], [1440433152.0, 63680000.0, 0.7375131173581713], [1440434880.0, 63700000.0, 0.7289686274214143], [1440436608.0, 63720000.0, 0.7203090248879103], [1440438336.0, 63740000.0, 0.7115356772092892], [1440440064.0, 63760000.0, 0.7026499697988488], [1440441792.0, 63780000.0, 0.693653305812805], [1440443520.0, 63800000.0, 0.6845471059286893], [1440445248.0, 63820000.0, 0.6753328081210257], [1440446976.0, 63840000.0, 0.6660118674342534], [1440448704.0, 63860000.0, 0.6565857557529589], [1440450432.0, 63880000.0, 0.6470559615694473], [1440452160.0, 63900000.0, 0.6374239897486934], [1440453888.0, 63920000.0, 0.6276913612906992], [1440455616.0, 63940000.0, 0.6178596130903338], [1440457344.0, 63960000.0, 0.6079302976946054], [1440459072.0, 63980000.0, 0.5979049830575195], [1440460800.0, 64000000.0, 0.5877852522924744], [1440462528.0, 64020000.0, 0.5775727034222695], [1440464256.0, 64040000.0, 0.5672689491267591], [1440465984.0, 64060000.0, 0.5568756164881913], [1440467712.0, 64080000.0, 0.5463943467342671], [1440469440.0, 64100000.0, 0.5358267949789952], [1440471168.0, 64120000.0, 0.5251746299612949], [1440472896.0, 64140000.0, 0.5144395337815064], [1440474624.0, 64160000.0, 0.5036232016357615], [1440476352.0, 64180000.0, 0.4927273415482929], [1440478080.0, 64200000.0, 0.48175367410171727], [1440479808.0, 64220000.0, 0.4707039321653353], [1440481536.0, 64240000.0, 0.459579860621485], [1440483264.0, 64260000.0, 0.44838321609003007], [1440484992.0, 64280000.0, 0.43711576665093776], [1440486720.0, 64300000.0, 0.42577929156507827], [1440488448.0, 64320000.0, 0.41437558099328403], [1440490176.0, 64340000.0, 0.40290643571366325], [1440491904.0, 64360000.0, 0.39137366683720376], [1440493632.0, 64380000.0, 0.37977909552180317], [1440495360.0, 64400000.0, 0.36812455268467414], [1440497088.0, 64420000.0, 0.35641187871325425], [1440498816.0, 64440000.0, 0.34464292317452133], [1440500544.0, 64460000.0, 0.3328195445229917], [1440502272.0, 64480000.0, 0.32094360980720854], [1440504000.0, 64500000.0, 0.30901699437494723], [1440505728.0, 64520000.0, 0.2970415815770355], [1440507456.0, 64540000.0, 0.28501926246997744], [1440509184.0, 64560000.0, 0.2729519355173273], [1440510912.0, 64580000.0, 0.26084150628989977], [1440512640.0, 64600000.0, 0.24868988716485838], [1440514368.0, 64620000.0, 0.23649899702372906], [1440516096.0, 64640000.0, 0.2242707609493794], [1440517824.0, 64660000.0, 0.21200710992205363], [1440519552.0, 64680000.0, 0.19970998051440675], [1440521280.0, 64700000.0, 0.18738131458572513], [1440523008.0, 64720000.0, 0.17502305897527734], [1440524736.0, 64740000.0, 0.16263716519488566], [1440526464.0, 64760000.0, 0.1502255891207599], [1440528192.0, 64780000.0, 0.1377902906846417], [1440529920.0, 64800000.0, 0.1253332335643016], [1440531648.0, 64820000.0, 0.1128563848734798], [1440533376.0, 64840000.0, 0.10036171485121378], [1440535104.0, 64860000.0, 0.08785119655074285], [1440536832.0, 64880000.0, 0.07532680552793318], [1440538560.0, 64900000.0, 0.06279051952931461], [1440540288.0, 64920000.0, 0.05024431817977157], [1440542016.0, 64940000.0, 0.03769018266993734], [1440543744.0, 64960000.0, 0.025130095443333954], [1440545472.0, 64980000.0, 0.012566039883349865], [1440547200.0, 65000000.0, -1.9606728399089416e-15], [1440548928.0, 65020000.0, -0.012566039883346682], [1440550656.0, 65040000.0, -0.025130095443330773], [1440552384.0, 65060000.0, -0.03769018266993415], [1440554112.0, 65080000.0, -0.05024431817976839], [1440555840.0, 65100000.0, -0.06279051952931143], [1440557568.0, 65120000.0, -0.07532680552793], [1440559296.0, 65140000.0, -0.08785119655073967], [1440561024.0, 65160000.0, -0.10036171485121062], [1440562752.0, 65180000.0, -0.11285638487347664], [1440564480.0, 65200000.0, -0.12533323356429843], [1440566208.0, 65220000.0, -0.13779029068463852], [1440567936.0, 65240000.0, -0.15022558912075673], [1440569664.0, 65260000.0, -0.16263716519488253], [1440571392.0, 65280000.0, -0.1750230589752742], [1440573120.0, 65300000.0, -0.18738131458572202], [1440574848.0, 65320000.0, -0.19970998051440364], [1440576576.0, 65340000.0, -0.21200710992205052], [1440578304.0, 65360000.0, -0.2242707609493763], [1440580032.0, 65380000.0, -0.23649899702372595], [1440581760.0, 65400000.0, -0.2486898871648553], [1440583488.0, 65420000.0, -0.26084150628989666], [1440585216.0, 65440000.0, -0.2729519355173242], [1440586944.0, 65460000.0, -0.2850192624699744], [1440588672.0, 65480000.0, -0.2970415815770324], [1440590400.0, 65500000.0, -0.30901699437494423], [1440592128.0, 65520000.0, -0.32094360980720554], [1440593856.0, 65540000.0, -0.3328195445229887], [1440595584.0, 65560000.0, -0.34464292317451833], [1440597312.0, 65580000.0, -0.35641187871325125], [1440599040.0, 65600000.0, -0.3681245526846712], [1440600768.0, 65620000.0, -0.3797790955218002], [1440602496.0, 65640000.0, -0.3913736668372008], [1440604224.0, 65660000.0, -0.40290643571366036], [1440605952.0, 65680000.0, -0.41437558099328115], [1440607680.0, 65700000.0, -0.4257792915650754], [1440609408.0, 65720000.0, -0.43711576665093493], [1440611136.0, 65740000.0, -0.4483832160900272], [1440612864.0, 65760000.0, -0.45957986062148215], [1440614592.0, 65780000.0, -0.47070393216533246], [1440616320.0, 65800000.0, -0.4817536741017145], [1440618048.0, 65820000.0, -0.4927273415482901], [1440619776.0, 65840000.0, -0.5036232016357587], [1440621504.0, 65860000.0, -0.5144395337815036], [1440623232.0, 65880000.0, -0.5251746299612923], [1440624960.0, 65900000.0, -0.5358267949789925], [1440626688.0, 65920000.0, -0.5463943467342643], [1440628416.0, 65940000.0, -0.5568756164881886], [1440630144.0, 65960000.0, -0.5672689491267564], [1440631872.0, 65980000.0, -0.577572703422267], [1440633600.0, 66000000.0, -0.5877852522924718], [1440635328.0, 66020000.0, -0.5979049830575169], [1440637056.0, 66040000.0, -0.6079302976946028], [1440638784.0, 66060000.0, -0.6178596130903312], [1440640512.0, 66080000.0, -0.6276913612906968], [1440642240.0, 66100000.0, -0.637423989748691], [1440643968.0, 66120000.0, -0.6470559615694449], [1440645696.0, 66140000.0, -0.6565857557529564], [1440647424.0, 66160000.0, -0.666011867434251], [1440649152.0, 66180000.0, -0.6753328081210233], [1440650880.0, 66200000.0, -0.684547105928687], [1440652608.0, 66220000.0, -0.6936533058128027], [1440654336.0, 66240000.0, -0.7026499697988464], [1440656064.0, 66260000.0, -0.711535677209287], [1440657792.0, 66280000.0, -0.720309024887908], [1440659520.0, 66300000.0, -0.7289686274214121], [1440661248.0, 66320000.0, -0.7375131173581692], [1440662976.0, 66340000.0, -0.7459411454241817], [1440664704.0, 66360000.0, -0.7542513807361029], [1440666432.0, 66380000.0, -0.7624425110114464], [1440668160.0, 66400000.0, -0.7705132427757873], [1440669888.0, 66420000.0, -0.7784623015670254], [1440671616.0, 66440000.0, -0.7862884321366205], [1440673344.0, 66460000.0, -0.793990398647832], [1440675072.0, 66480000.0, -0.8015669848708729], [1440676800.0, 66500000.0, -0.8090169943749476], [1440678528.0, 66520000.0, -0.8163392507171836], [1440680256.0, 66540000.0, -0.8235325976284267], [1440681984.0, 66560000.0, -0.8305958991958114], [1440683712.0, 66580000.0, -0.837528040042144], [1440685440.0, 66600000.0, -0.8443279255020131], [1440687168.0, 66620000.0, -0.8509944817946895], [1440688896.0, 66640000.0, -0.8575266561936495], [1440690624.0, 66660000.0, -0.8639234171928358], [1440692352.0, 66680000.0, -0.8701837546695258], [1440694080.0, 66700000.0, -0.8763066800438634], [1440695808.0, 66720000.0, -0.8822912264349526], [1440697536.0, 66740000.0, -0.8881364488135436], [1440699264.0, 66760000.0, -0.8938414241512624], [1440700992.0, 66780000.0, -0.8994052515663694], [1440702720.0, 66800000.0, -0.9048270524660176], [1440704448.0, 66820000.0, -0.9101059706849964], [1440706176.0, 66840000.0, -0.915241172620918], [1440707904.0, 66860000.0, -0.9202318473658705], [1440709632.0, 66880000.0, -0.9250772068344578], [1440711360.0, 66900000.0, -0.9297764858882509], [1440713088.0, 66920000.0, -0.9343289424566114], [1440714816.0, 66940000.0, -0.9387338576538731], [1440716544.0, 66960000.0, -0.9429905358928633], [1440718272.0, 66980000.0, -0.9470983049947451], [1440720000.0, 67000000.0, -0.9510565162951542], [1440721728.0, 67020000.0, -0.9548645447466433], [1440723456.0, 67040000.0, -0.958521789017374], [1440725184.0, 67060000.0, -0.9620276715860858], [1440726912.0, 67080000.0, -0.9653816388332735], [1440728640.0, 67100000.0, -0.9685831611286306], [1440730368.0, 67120000.0, -0.9716317329146733], [1440732096.0, 67140000.0, -0.9745268727865779], [1440733824.0, 67160000.0, -0.977268123568194], [1440735552.0, 67180000.0, -0.9798550523842459], [1440737280.0, 67200000.0, -0.9822872507286876], [1440739008.0, 67220000.0, -0.9845643345292054], [1440740736.0, 67240000.0, -0.986685944207868], [1440742464.0, 67260000.0, -0.9886517447379138], [1440744192.0, 67280000.0, -0.990461425696651], [1440745920.0, 67300000.0, -0.9921147013144784], [1440747648.0, 67320000.0, -0.9936113105200081], [1440749376.0, 67340000.0, -0.9949510169812997], [1440751104.0, 67360000.0, -0.9961336091431721], [1440752832.0, 67380000.0, -0.997158900260614], [1440754560.0, 67400000.0, -0.9980267284282716], [1440756288.0, 67420000.0, -0.9987369566060175], [1440758016.0, 67440000.0, -0.9992894726405892], [1440759744.0, 67460000.0, -0.9996841892832999], [1440761472.0, 67480000.0, -0.9999210442038161], [1440763200.0, 67500000.0, -1.0], [1440764928.0, 67520000.0, -0.9999210442038162], [1440766656.0, 67540000.0, -0.9996841892833002], [1440768384.0, 67560000.0, -0.9992894726405892], [1440770112.0, 67580000.0, -0.9987369566060175], [1440771840.0, 67600000.0, -0.9980267284282716], [1440773568.0, 67620000.0, -0.997158900260614], [1440775296.0, 67640000.0, -0.9961336091431726], [1440777024.0, 67660000.0, -0.9949510169813004], [1440778752.0, 67680000.0, -0.9936113105200088], [1440780480.0, 67700000.0, -0.9921147013144783], [1440782208.0, 67720000.0, -0.990461425696651], [1440783936.0, 67740000.0, -0.9886517447379138], [1440785664.0, 67760000.0, -0.9866859442078679], [1440787392.0, 67780000.0, -0.9845643345292067], [1440789120.0, 67800000.0, -0.9822872507286888], [1440790848.0, 67820000.0, -0.9798550523842472], [1440792576.0, 67840000.0, -0.977268123568194], [1440794304.0, 67860000.0, -0.9745268727865779], [1440796032.0, 67880000.0, -0.9716317329146732], [1440797760.0, 67900000.0, -0.9685831611286323], [1440799488.0, 67920000.0, -0.9653816388332753], [1440801216.0, 67940000.0, -0.9620276715860876], [1440802944.0, 67960000.0, -0.958521789017376], [1440804672.0, 67980000.0, -0.9548645447466432], [1440806400.0, 68000000.0, -0.9510565162951541], [1440808128.0, 68020000.0, -0.9470983049947451], [1440809856.0, 68040000.0, -0.9429905358928655], [1440811584.0, 68060000.0, -0.9387338576538755], [1440813312.0, 68080000.0, -0.9343289424566138], [1440815040.0, 68100000.0, -0.9297764858882535], [1440816768.0, 68120000.0, -0.9250772068344577], [1440818496.0, 68140000.0, -0.9202318473658704], [1440820224.0, 68160000.0, -0.9152411726209179], [1440821952.0, 68180000.0, -0.9101059706849963], [1440823680.0, 68200000.0, -0.9048270524660206], [1440825408.0, 68220000.0, -0.8994052515663724], [1440827136.0, 68240000.0, -0.8938414241512656], [1440828864.0, 68260000.0, -0.8881364488135467], [1440830592.0, 68280000.0, -0.8822912264349525], [1440832320.0, 68300000.0, -0.8763066800438631], [1440834048.0, 68320000.0, -0.8701837546695257], [1440835776.0, 68340000.0, -0.8639234171928357], [1440837504.0, 68360000.0, -0.8575266561936531], [1440839232.0, 68380000.0, -0.8509944817946931], [1440840960.0, 68400000.0, -0.8443279255020167], [1440842688.0, 68420000.0, -0.8375280400421439], [1440844416.0, 68440000.0, -0.8305958991958112], [1440846144.0, 68460000.0, -0.8235325976284265], [1440847872.0, 68480000.0, -0.8163392507171835], [1440849600.0, 68500000.0, -0.8090169943749516], [1440851328.0, 68520000.0, -0.801566984870877], [1440853056.0, 68540000.0, -0.7939903986478363], [1440854784.0, 68560000.0, -0.7862884321366203], [1440856512.0, 68580000.0, -0.7784623015670253], [1440858240.0, 68600000.0, -0.7705132427757871], [1440859968.0, 68620000.0, -0.7624425110114509], [1440861696.0, 68640000.0, -0.7542513807361073], [1440863424.0, 68660000.0, -0.7459411454241862], [1440865152.0, 68680000.0, -0.7375131173581738], [1440866880.0, 68700000.0, -0.728968627421412], [1440868608.0, 68720000.0, -0.7203090248879078], [1440870336.0, 68740000.0, -0.7115356772092869], [1440872064.0, 68760000.0, -0.7026499697988513], [1440873792.0, 68780000.0, -0.6936533058128077], [1440875520.0, 68800000.0, -0.684547105928692], [1440877248.0, 68820000.0, -0.6753328081210284], [1440878976.0, 68840000.0, -0.6660118674342509], [1440880704.0, 68860000.0, -0.6565857557529563], [1440882432.0, 68880000.0, -0.6470559615694448], [1440884160.0, 68900000.0, -0.6374239897486907], [1440885888.0, 68920000.0, -0.6276913612907021], [1440887616.0, 68940000.0, -0.6178596130903367], [1440889344.0, 68960000.0, -0.6079302976946083], [1440891072.0, 68980000.0, -0.5979049830575225], [1440892800.0, 69000000.0, -0.5877852522924716], [1440894528.0, 69020000.0, -0.5775727034222667], [1440896256.0, 69040000.0, -0.5672689491267563], [1440897984.0, 69060000.0, -0.5568756164881884], [1440899712.0, 69080000.0, -0.5463943467342701], [1440901440.0, 69100000.0, -0.5358267949789983], [1440903168.0, 69120000.0, -0.5251746299612982], [1440904896.0, 69140000.0, -0.5144395337815095], [1440906624.0, 69160000.0, -0.5036232016357585], [1440908352.0, 69180000.0, -0.4927273415482899], [1440910080.0, 69200000.0, -0.48175367410171427], [1440911808.0, 69220000.0, -0.4707039321653385], [1440913536.0, 69240000.0, -0.4595798606214882], [1440915264.0, 69260000.0, -0.44838321609003334], [1440916992.0, 69280000.0, -0.4371157666509347], [1440918720.0, 69300000.0, -0.42577929156507516], [1440920448.0, 69320000.0, -0.4143755809932809], [1440922176.0, 69340000.0, -0.40290643571366014], [1440923904.0, 69360000.0, -0.39137366683720715], [1440925632.0, 69380000.0, -0.37977909552180655], [1440927360.0, 69400000.0, -0.36812455268467753], [1440929088.0, 69420000.0, -0.35641187871325103], [1440930816.0, 69440000.0, -0.3446429231745181], [1440932544.0, 69460000.0, -0.33281954452298845], [1440934272.0, 69480000.0, -0.32094360980721204], [1440936000.0, 69500000.0, -0.3090169943749507], [1440937728.0, 69520000.0, -0.29704158157703897], [1440939456.0, 69540000.0, -0.28501926246998094], [1440941184.0, 69560000.0, -0.272951935517324], [1440942912.0, 69580000.0, -0.26084150628989644], [1440944640.0, 69600000.0, -0.24868988716485507], [1440946368.0, 69620000.0, -0.23649899702372573], [1440948096.0, 69640000.0, -0.22427076094938297], [1440949824.0, 69660000.0, -0.2120071099220572], [1440951552.0, 69680000.0, -0.19970998051441036], [1440953280.0, 69700000.0, -0.18738131458572874], [1440955008.0, 69720000.0, -0.17502305897527395], [1440956736.0, 69740000.0, -0.16263716519488228], [1440958464.0, 69760000.0, -0.1502255891207565], [1440960192.0, 69780000.0, -0.13779029068463827], [1440961920.0, 69800000.0, -0.12533323356430523], [1440963648.0, 69820000.0, -0.11285638487348346], [1440965376.0, 69840000.0, -0.10036171485121743], [1440967104.0, 69860000.0, -0.08785119655074651], [1440968832.0, 69880000.0, -0.07532680552792975], [1440970560.0, 69900000.0, -0.06279051952931118], [1440972288.0, 69920000.0, -0.05024431817976815], [1440974016.0, 69940000.0, -0.03769018266994101], [1440975744.0, 69960000.0, -0.02513009544333763], [1440977472.0, 69980000.0, -0.01256603988335354], [1440979200.0, 70000000.0, -1.7145055188062944e-15], [1440980928.0, 70020000.0, 0.012566039883350111], [1440982656.0, 70040000.0, 0.0251300954433342], [1440984384.0, 70060000.0, 0.03769018266993758], [1440986112.0, 70080000.0, 0.05024431817976472], [1440987840.0, 70100000.0, 0.06279051952930777], [1440989568.0, 70120000.0, 0.07532680552792634], [1440991296.0, 70140000.0, 0.0878511965507431], [1440993024.0, 70160000.0, 0.10036171485121402], [1440994752.0, 70180000.0, 0.11285638487348006], [1440996480.0, 70200000.0, 0.12533323356430184], [1440998208.0, 70220000.0, 0.1377902906846349], [1440999936.0, 70240000.0, 0.1502255891207531], [1441001664.0, 70260000.0, 0.1626371651948789], [1441003392.0, 70280000.0, 0.17502305897527057], [1441005120.0, 70300000.0, 0.18738131458572538], [1441006848.0, 70320000.0, 0.199709980514407], [1441008576.0, 70340000.0, 0.21200710992205385], [1441010304.0, 70360000.0, 0.22427076094937964], [1441012032.0, 70380000.0, 0.23649899702372237], [1441013760.0, 70400000.0, 0.24868988716485174], [1441015488.0, 70420000.0, 0.26084150628989317], [1441017216.0, 70440000.0, 0.2729519355173207], [1441018944.0, 70460000.0, 0.28501926246997766], [1441020672.0, 70480000.0, 0.2970415815770357], [1441022400.0, 70500000.0, 0.30901699437494745], [1441024128.0, 70520000.0, 0.3209436098072088], [1441025856.0, 70540000.0, 0.33281954452298523], [1441027584.0, 70560000.0, 0.3446429231745149], [1441029312.0, 70580000.0, 0.3564118787132478], [1441031040.0, 70600000.0, 0.36812455268467437], [1441032768.0, 70620000.0, 0.3797790955218034], [1441034496.0, 70640000.0, 0.391373666837204], [1441036224.0, 70660000.0, 0.402906435713657], [1441037952.0, 70680000.0, 0.41437558099327776], [1441039680.0, 70700000.0, 0.42577929156507205], [1441041408.0, 70720000.0, 0.4371157666509316], [1441043136.0, 70740000.0, 0.4483832160900303], [1441044864.0, 70760000.0, 0.4595798606214852], [1441046592.0, 70780000.0, 0.47070393216533546], [1441048320.0, 70800000.0, 0.48175367410171127], [1441050048.0, 70820000.0, 0.4927273415482869], [1441051776.0, 70840000.0, 0.5036232016357556], [1441053504.0, 70860000.0, 0.5144395337815066], [1441055232.0, 70880000.0, 0.5251746299612952], [1441056960.0, 70900000.0, 0.5358267949789954], [1441058688.0, 70920000.0, 0.5463943467342672], [1441060416.0, 70940000.0, 0.5568756164881855], [1441062144.0, 70960000.0, 0.5672689491267534], [1441063872.0, 70980000.0, 0.577572703422264], [1441065600.0, 71000000.0, 0.5877852522924688], [1441067328.0, 71020000.0, 0.5979049830575197], [1441069056.0, 71040000.0, 0.6079302976946056], [1441070784.0, 71060000.0, 0.6178596130903339], [1441072512.0, 71080000.0, 0.6276913612906995], [1441074240.0, 71100000.0, 0.6374239897486881], [1441075968.0, 71120000.0, 0.6470559615694421], [1441077696.0, 71140000.0, 0.6565857557529536], [1441079424.0, 71160000.0, 0.6660118674342483], [1441081152.0, 71180000.0, 0.6753328081210258], [1441082880.0, 71200000.0, 0.6845471059286895], [1441084608.0, 71220000.0, 0.6936533058128052], [1441086336.0, 71240000.0, 0.7026499697988489], [1441088064.0, 71260000.0, 0.7115356772092845], [1441089792.0, 71280000.0, 0.7203090248879055], [1441091520.0, 71300000.0, 0.7289686274214096], [1441093248.0, 71320000.0, 0.7375131173581715], [1441094976.0, 71340000.0, 0.745941145424184], [1441096704.0, 71360000.0, 0.7542513807361051], [1441098432.0, 71380000.0, 0.7624425110114487], [1441100160.0, 71400000.0, 0.7705132427757849], [1441101888.0, 71420000.0, 0.7784623015670231], [1441103616.0, 71440000.0, 0.7862884321366181], [1441105344.0, 71460000.0, 0.7939903986478342], [1441107072.0, 71480000.0, 0.801566984870875], [1441108800.0, 71500000.0, 0.8090169943749496], [1441110528.0, 71520000.0, 0.8163392507171815], [1441112256.0, 71540000.0, 0.8235325976284246], [1441113984.0, 71560000.0, 0.8305958991958093], [1441115712.0, 71580000.0, 0.837528040042142], [1441117440.0, 71600000.0, 0.8443279255020149], [1441119168.0, 71620000.0, 0.8509944817946913], [1441120896.0, 71640000.0, 0.8575266561936513], [1441122624.0, 71660000.0, 0.8639234171928339], [1441124352.0, 71680000.0, 0.8701837546695239], [1441126080.0, 71700000.0, 0.8763066800438616], [1441127808.0, 71720000.0, 0.882291226434951], [1441129536.0, 71740000.0, 0.8881364488135451], [1441131264.0, 71760000.0, 0.893841424151264], [1441132992.0, 71780000.0, 0.899405251566371], [1441134720.0, 71800000.0, 0.9048270524660191], [1441136448.0, 71820000.0, 0.9101059706849949], [1441138176.0, 71840000.0, 0.9152411726209165], [1441139904.0, 71860000.0, 0.920231847365869], [1441141632.0, 71880000.0, 0.9250772068344565], [1441143360.0, 71900000.0, 0.9297764858882522], [1441145088.0, 71920000.0, 0.9343289424566126], [1441146816.0, 71940000.0, 0.9387338576538743], [1441148544.0, 71960000.0, 0.9429905358928644], [1441150272.0, 71980000.0, 0.947098304994744], [1441152000.0, 72000000.0, 0.951056516295153], [1441153728.0, 72020000.0, 0.9548645447466422], [1441155456.0, 72040000.0, 0.958521789017375], [1441157184.0, 72060000.0, 0.9620276715860867], [1441158912.0, 72080000.0, 0.9653816388332744], [1441160640.0, 72100000.0, 0.9685831611286315], [1441162368.0, 72120000.0, 0.9716317329146724], [1441164096.0, 72140000.0, 0.9745268727865771], [1441165824.0, 72160000.0, 0.9772681235681933], [1441167552.0, 72180000.0, 0.9798550523842465], [1441169280.0, 72200000.0, 0.9822872507286882], [1441171008.0, 72220000.0, 0.9845643345292061], [1441172736.0, 72240000.0, 0.9866859442078674], [1441174464.0, 72260000.0, 0.9886517447379133], [1441176192.0, 72280000.0, 0.9904614256966504], [1441177920.0, 72300000.0, 0.9921147013144779], [1441179648.0, 72320000.0, 0.9936113105200084], [1441181376.0, 72340000.0, 0.9949510169813001], [1441183104.0, 72360000.0, 0.9961336091431723], [1441184832.0, 72380000.0, 0.9971589002606137], [1441186560.0, 72400000.0, 0.9980267284282713], [1441188288.0, 72420000.0, 0.9987369566060172], [1441190016.0, 72440000.0, 0.9992894726405891], [1441191744.0, 72460000.0, 0.9996841892833], [1441193472.0, 72480000.0, 0.9999210442038161], [1441195200.0, 72500000.0, 1.0], [1441196928.0, 72520000.0, 0.9999210442038161], [1441198656.0, 72540000.0, 0.9996841892833], [1441200384.0, 72560000.0, 0.9992894726405893], [1441202112.0, 72580000.0, 0.9987369566060177], [1441203840.0, 72600000.0, 0.9980267284282718], [1441205568.0, 72620000.0, 0.9971589002606143], [1441207296.0, 72640000.0, 0.9961336091431723], [1441209024.0, 72660000.0, 0.9949510169813001], [1441210752.0, 72680000.0, 0.9936113105200084], [1441212480.0, 72700000.0, 0.9921147013144788], [1441214208.0, 72720000.0, 0.9904614256966514], [1441215936.0, 72740000.0, 0.9886517447379144], [1441217664.0, 72760000.0, 0.9866859442078686], [1441219392.0, 72780000.0, 0.984564334529206], [1441221120.0, 72800000.0, 0.9822872507286882], [1441222848.0, 72820000.0, 0.9798550523842465], [1441224576.0, 72840000.0, 0.9772681235681948], [1441226304.0, 72860000.0, 0.9745268727865787], [1441228032.0, 72880000.0, 0.9716317329146741], [1441229760.0, 72900000.0, 0.9685831611286315], [1441231488.0, 72920000.0, 0.9653816388332744], [1441233216.0, 72940000.0, 0.9620276715860867], [1441234944.0, 72960000.0, 0.958521789017375], [1441236672.0, 72980000.0, 0.9548645447466443], [1441238400.0, 73000000.0, 0.9510565162951552], [1441240128.0, 73020000.0, 0.9470983049947462], [1441241856.0, 73040000.0, 0.9429905358928644], [1441243584.0, 73060000.0, 0.9387338576538743], [1441245312.0, 73080000.0, 0.9343289424566126], [1441247040.0, 73100000.0, 0.9297764858882522], [1441248768.0, 73120000.0, 0.9250772068344592], [1441250496.0, 73140000.0, 0.9202318473658718], [1441252224.0, 73160000.0, 0.9152411726209194], [1441253952.0, 73180000.0, 0.9101059706849979], [1441255680.0, 73200000.0, 0.9048270524660191], [1441257408.0, 73220000.0, 0.899405251566371], [1441259136.0, 73240000.0, 0.893841424151264], [1441260864.0, 73260000.0, 0.8881364488135451], [1441262592.0, 73280000.0, 0.8822912264349543], [1441264320.0, 73300000.0, 0.8763066800438649], [1441266048.0, 73320000.0, 0.8701837546695275], [1441267776.0, 73340000.0, 0.8639234171928375], [1441269504.0, 73360000.0, 0.8575266561936513], [1441271232.0, 73380000.0, 0.8509944817946913], [1441272960.0, 73400000.0, 0.8443279255020149], [1441274688.0, 73420000.0, 0.8375280400421459], [1441276416.0, 73440000.0, 0.8305958991958133], [1441278144.0, 73460000.0, 0.8235325976284286], [1441279872.0, 73480000.0, 0.8163392507171856], [1441281600.0, 73500000.0, 0.8090169943749496], [1441283328.0, 73520000.0, 0.801566984870875], [1441285056.0, 73540000.0, 0.7939903986478342], [1441286784.0, 73560000.0, 0.7862884321366226], [1441288512.0, 73580000.0, 0.7784623015670277], [1441290240.0, 73600000.0, 0.7705132427757895], [1441291968.0, 73620000.0, 0.7624425110114487], [1441293696.0, 73640000.0, 0.7542513807361051], [1441295424.0, 73660000.0, 0.745941145424184], [1441297152.0, 73680000.0, 0.7375131173581715], [1441298880.0, 73700000.0, 0.7289686274214144], [1441300608.0, 73720000.0, 0.7203090248879104], [1441302336.0, 73740000.0, 0.7115356772092895], [1441304064.0, 73760000.0, 0.7026499697988489], [1441305792.0, 73780000.0, 0.6936533058128052], [1441307520.0, 73800000.0, 0.6845471059286895], [1441309248.0, 73820000.0, 0.6753328081210258], [1441310976.0, 73840000.0, 0.6660118674342536], [1441312704.0, 73860000.0, 0.6565857557529591], [1441314432.0, 73880000.0, 0.6470559615694476], [1441316160.0, 73900000.0, 0.6374239897486935], [1441317888.0, 73920000.0, 0.6276913612906995], [1441319616.0, 73940000.0, 0.6178596130903339], [1441321344.0, 73960000.0, 0.6079302976946056], [1441323072.0, 73980000.0, 0.5979049830575197], [1441324800.0, 74000000.0, 0.5877852522924746], [1441326528.0, 74020000.0, 0.5775727034222697], [1441328256.0, 74040000.0, 0.5672689491267593], [1441329984.0, 74060000.0, 0.5568756164881915], [1441331712.0, 74080000.0, 0.5463943467342672], [1441333440.0, 74100000.0, 0.5358267949789954], [1441335168.0, 74120000.0, 0.5251746299612952], [1441336896.0, 74140000.0, 0.5144395337815066], [1441338624.0, 74160000.0, 0.5036232016357617], [1441340352.0, 74180000.0, 0.49272734154829306], [1441342080.0, 74200000.0, 0.4817536741017175], [1441343808.0, 74220000.0, 0.47070393216533546], [1441345536.0, 74240000.0, 0.4595798606214852], [1441347264.0, 74260000.0, 0.4483832160900303], [1441348992.0, 74280000.0, 0.437115766650938], [1441350720.0, 74300000.0, 0.4257792915650785], [1441352448.0, 74320000.0, 0.41437558099328425], [1441354176.0, 74340000.0, 0.40290643571366347], [1441355904.0, 74360000.0, 0.391373666837204], [1441357632.0, 74380000.0, 0.3797790955218034], [1441359360.0, 74400000.0, 0.36812455268467437], [1441361088.0, 74420000.0, 0.35641187871325447], [1441362816.0, 74440000.0, 0.34464292317452155], [1441364544.0, 74460000.0, 0.3328195445229919], [1441366272.0, 74480000.0, 0.3209436098072088], [1441368000.0, 74500000.0, 0.30901699437494745], [1441369728.0, 74520000.0, 0.2970415815770357], [1441371456.0, 74540000.0, 0.28501926246997766], [1441373184.0, 74560000.0, 0.27295193551732755], [1441374912.0, 74580000.0, 0.2608415062899], [1441376640.0, 74600000.0, 0.24868988716485863], [1441378368.0, 74620000.0, 0.23649899702372928], [1441380096.0, 74640000.0, 0.22427076094937964], [1441381824.0, 74660000.0, 0.21200710992205385], [1441383552.0, 74680000.0, 0.199709980514407], [1441385280.0, 74700000.0, 0.18738131458572538], [1441387008.0, 74720000.0, 0.17502305897527756], [1441388736.0, 74740000.0, 0.1626371651948859], [1441390464.0, 74760000.0, 0.15022558912076012], [1441392192.0, 74780000.0, 0.1377902906846419], [1441393920.0, 74800000.0, 0.12533323356430184], [1441395648.0, 74820000.0, 0.11285638487348004], [1441397376.0, 74840000.0, 0.10036171485121402], [1441399104.0, 74860000.0, 0.0878511965507431], [1441400832.0, 74880000.0, 0.07532680552793342], [1441402560.0, 74900000.0, 0.06279051952931486], [1441404288.0, 74920000.0, 0.05024431817977182], [1441406016.0, 74940000.0, 0.03769018266993758], [1441407744.0, 74960000.0, 0.0251300954433342], [1441409472.0, 74980000.0, 0.012566039883350111], [1441411200.0, 75000000.0, 5.3896838775215305e-15], [1441412928.0, 75020000.0, -0.012566039883346437], [1441414656.0, 75040000.0, -0.025130095443330527], [1441416384.0, 75060000.0, -0.03769018266993391], [1441418112.0, 75080000.0, -0.05024431817976815], [1441419840.0, 75100000.0, -0.06279051952931118], [1441421568.0, 75120000.0, -0.07532680552792975], [1441423296.0, 75140000.0, -0.08785119655073943], [1441425024.0, 75160000.0, -0.10036171485121037], [1441426752.0, 75180000.0, -0.11285638487347639], [1441428480.0, 75200000.0, -0.12533323356429818], [1441430208.0, 75220000.0, -0.13779029068463827], [1441431936.0, 75240000.0, -0.1502255891207565], [1441433664.0, 75260000.0, -0.16263716519488228], [1441435392.0, 75280000.0, -0.17502305897527395], [1441437120.0, 75300000.0, -0.18738131458572177], [1441438848.0, 75320000.0, -0.1997099805144034], [1441440576.0, 75340000.0, -0.21200710992205027], [1441442304.0, 75360000.0, -0.22427076094937606], [1441444032.0, 75380000.0, -0.23649899702372573], [1441445760.0, 75400000.0, -0.24868988716485507], [1441447488.0, 75420000.0, -0.26084150628989644], [1441449216.0, 75440000.0, -0.272951935517324], [1441450944.0, 75460000.0, -0.28501926246997417], [1441452672.0, 75480000.0, -0.2970415815770322], [1441454400.0, 75500000.0, -0.30901699437494395], [1441456128.0, 75520000.0, -0.3209436098072053], [1441457856.0, 75540000.0, -0.33281954452298845], [1441459584.0, 75560000.0, -0.3446429231745181], [1441461312.0, 75580000.0, -0.35641187871325103], [1441463040.0, 75600000.0, -0.3681245526846709], [1441464768.0, 75620000.0, -0.3797790955218], [1441466496.0, 75640000.0, -0.3913736668372006], [1441468224.0, 75660000.0, -0.40290643571366014], [1441469952.0, 75680000.0, -0.4143755809932809], [1441471680.0, 75700000.0, -0.42577929156507516], [1441473408.0, 75720000.0, -0.4371157666509347], [1441475136.0, 75740000.0, -0.44838321609002696], [1441476864.0, 75760000.0, -0.45957986062148193], [1441478592.0, 75780000.0, -0.47070393216533224], [1441480320.0, 75800000.0, -0.48175367410171427], [1441482048.0, 75820000.0, -0.4927273415482899], [1441483776.0, 75840000.0, -0.5036232016357585], [1441485504.0, 75860000.0, -0.5144395337815034], [1441487232.0, 75880000.0, -0.525174629961292], [1441488960.0, 75900000.0, -0.5358267949789923], [1441490688.0, 75920000.0, -0.5463943467342642], [1441492416.0, 75940000.0, -0.5568756164881884], [1441494144.0, 75960000.0, -0.5672689491267563], [1441495872.0, 75980000.0, -0.5775727034222667], [1441497600.0, 76000000.0, -0.5877852522924716], [1441499328.0, 76020000.0, -0.5979049830575167], [1441501056.0, 76040000.0, -0.6079302976946027], [1441502784.0, 76060000.0, -0.617859613090331], [1441504512.0, 76080000.0, -0.6276913612906966], [1441506240.0, 76100000.0, -0.6374239897486907], [1441507968.0, 76120000.0, -0.6470559615694448], [1441509696.0, 76140000.0, -0.6565857557529563], [1441511424.0, 76160000.0, -0.6660118674342509], [1441513152.0, 76180000.0, -0.6753328081210231], [1441514880.0, 76200000.0, -0.6845471059286868], [1441516608.0, 76220000.0, -0.6936533058128026], [1441518336.0, 76240000.0, -0.7026499697988463], [1441520064.0, 76260000.0, -0.7115356772092869], [1441521792.0, 76280000.0, -0.7203090248879078], [1441523520.0, 76300000.0, -0.728968627421412], [1441525248.0, 76320000.0, -0.737513117358169], [1441526976.0, 76340000.0, -0.7459411454241816], [1441528704.0, 76360000.0, -0.7542513807361027], [1441530432.0, 76380000.0, -0.7624425110114462], [1441532160.0, 76400000.0, -0.7705132427757871], [1441533888.0, 76420000.0, -0.7784623015670253], [1441535616.0, 76440000.0, -0.7862884321366203], [1441537344.0, 76460000.0, -0.7939903986478319], [1441539072.0, 76480000.0, -0.8015669848708727], [1441540800.0, 76500000.0, -0.8090169943749473], [1441542528.0, 76520000.0, -0.8163392507171835], [1441544256.0, 76540000.0, -0.8235325976284265], [1441545984.0, 76560000.0, -0.8305958991958112], [1441547712.0, 76580000.0, -0.8375280400421439], [1441549440.0, 76600000.0, -0.844327925502013], [1441551168.0, 76620000.0, -0.8509944817946894], [1441552896.0, 76640000.0, -0.8575266561936494], [1441554624.0, 76660000.0, -0.8639234171928357], [1441556352.0, 76680000.0, -0.8701837546695257], [1441558080.0, 76700000.0, -0.8763066800438633], [1441559808.0, 76720000.0, -0.8822912264349525], [1441561536.0, 76740000.0, -0.8881364488135435], [1441563264.0, 76760000.0, -0.8938414241512623], [1441564992.0, 76780000.0, -0.8994052515663693], [1441566720.0, 76800000.0, -0.9048270524660175], [1441568448.0, 76820000.0, -0.9101059706849963], [1441570176.0, 76840000.0, -0.9152411726209179], [1441571904.0, 76860000.0, -0.9202318473658704], [1441573632.0, 76880000.0, -0.9250772068344577], [1441575360.0, 76900000.0, -0.9297764858882508], [1441577088.0, 76920000.0, -0.9343289424566112], [1441578816.0, 76940000.0, -0.9387338576538731], [1441580544.0, 76960000.0, -0.9429905358928632], [1441582272.0, 76980000.0, -0.9470983049947451], [1441584000.0, 77000000.0, -0.9510565162951541], [1441585728.0, 77020000.0, -0.9548645447466432], [1441587456.0, 77040000.0, -0.9585217890173738], [1441589184.0, 77060000.0, -0.9620276715860857], [1441590912.0, 77080000.0, -0.9653816388332735], [1441592640.0, 77100000.0, -0.9685831611286305], [1441594368.0, 77120000.0, -0.9716317329146732], [1441596096.0, 77140000.0, -0.9745268727865779], [1441597824.0, 77160000.0, -0.977268123568194], [1441599552.0, 77180000.0, -0.9798550523842458], [1441601280.0, 77200000.0, -0.9822872507286875], [1441603008.0, 77220000.0, -0.9845643345292054], [1441604736.0, 77240000.0, -0.9866859442078679], [1441606464.0, 77260000.0, -0.9886517447379138], [1441608192.0, 77280000.0, -0.990461425696651], [1441609920.0, 77300000.0, -0.9921147013144783], [1441611648.0, 77320000.0, -0.993611310520008], [1441613376.0, 77340000.0, -0.9949510169812997], [1441615104.0, 77360000.0, -0.996133609143172], [1441616832.0, 77380000.0, -0.997158900260614], [1441618560.0, 77400000.0, -0.9980267284282716], [1441620288.0, 77420000.0, -0.9987369566060175], [1441622016.0, 77440000.0, -0.9992894726405892], [1441623744.0, 77460000.0, -0.9996841892832999], [1441625472.0, 77480000.0, -0.9999210442038161], [1441627200.0, 77500000.0, -1.0], [1441628928.0, 77520000.0, -0.9999210442038162], [1441630656.0, 77540000.0, -0.9996841892833002], [1441632384.0, 77560000.0, -0.9992894726405892], [1441634112.0, 77580000.0, -0.9987369566060175], [1441635840.0, 77600000.0, -0.9980267284282716], [1441637568.0, 77620000.0, -0.997158900260614], [1441639296.0, 77640000.0, -0.9961336091431726], [1441641024.0, 77660000.0, -0.9949510169813004], [1441642752.0, 77680000.0, -0.9936113105200088], [1441644480.0, 77700000.0, -0.9921147013144784], [1441646208.0, 77720000.0, -0.990461425696651], [1441647936.0, 77740000.0, -0.9886517447379138], [1441649664.0, 77760000.0, -0.986685944207868], [1441651392.0, 77780000.0, -0.9845643345292067], [1441653120.0, 77800000.0, -0.9822872507286889], [1441654848.0, 77820000.0, -0.9798550523842473], [1441656576.0, 77840000.0, -0.977268123568194], [1441658304.0, 77860000.0, -0.9745268727865779], [1441660032.0, 77880000.0, -0.9716317329146733], [1441661760.0, 77900000.0, -0.9685831611286324], [1441663488.0, 77920000.0, -0.9653816388332754], [1441665216.0, 77940000.0, -0.9620276715860877], [1441666944.0, 77960000.0, -0.958521789017376], [1441668672.0, 77980000.0, -0.9548645447466433], [1441670400.0, 78000000.0, -0.9510565162951542], [1441672128.0, 78020000.0, -0.9470983049947451], [1441673856.0, 78040000.0, -0.9429905358928656], [1441675584.0, 78060000.0, -0.9387338576538755], [1441677312.0, 78080000.0, -0.9343289424566138], [1441679040.0, 78100000.0, -0.9297764858882536], [1441680768.0, 78120000.0, -0.9250772068344578], [1441682496.0, 78140000.0, -0.9202318473658705], [1441684224.0, 78160000.0, -0.915241172620918], [1441685952.0, 78180000.0, -0.9101059706849964], [1441687680.0, 78200000.0, -0.9048270524660207], [1441689408.0, 78220000.0, -0.8994052515663725], [1441691136.0, 78240000.0, -0.8938414241512657], [1441692864.0, 78260000.0, -0.8881364488135468], [1441694592.0, 78280000.0, -0.8822912264349526], [1441696320.0, 78300000.0, -0.8763066800438634], [1441698048.0, 78320000.0, -0.8701837546695258], [1441699776.0, 78340000.0, -0.8639234171928358], [1441701504.0, 78360000.0, -0.8575266561936532], [1441703232.0, 78380000.0, -0.8509944817946932], [1441704960.0, 78400000.0, -0.8443279255020169], [1441706688.0, 78420000.0, -0.837528040042144], [1441708416.0, 78440000.0, -0.8305958991958114], [1441710144.0, 78460000.0, -0.8235325976284267], [1441711872.0, 78480000.0, -0.8163392507171836], [1441713600.0, 78500000.0, -0.8090169943749517], [1441715328.0, 78520000.0, -0.8015669848708771], [1441717056.0, 78540000.0, -0.7939903986478364], [1441718784.0, 78560000.0, -0.7862884321366205], [1441720512.0, 78580000.0, -0.7784623015670254], [1441722240.0, 78600000.0, -0.7705132427757873], [1441723968.0, 78620000.0, -0.762442511011451], [1441725696.0, 78640000.0, -0.7542513807361075], [1441727424.0, 78660000.0, -0.7459411454241864], [1441729152.0, 78680000.0, -0.7375131173581739], [1441730880.0, 78700000.0, -0.7289686274214121], [1441732608.0, 78720000.0, -0.720309024887908], [1441734336.0, 78740000.0, -0.711535677209287], [1441736064.0, 78760000.0, -0.7026499697988515], [1441737792.0, 78780000.0, -0.6936533058128078], [1441739520.0, 78800000.0, -0.6845471059286922], [1441741248.0, 78820000.0, -0.6753328081210286], [1441742976.0, 78840000.0, -0.666011867434251], [1441744704.0, 78860000.0, -0.6565857557529564], [1441746432.0, 78880000.0, -0.6470559615694449], [1441748160.0, 78900000.0, -0.637423989748691], [1441749888.0, 78920000.0, -0.6276913612907024], [1441751616.0, 78940000.0, -0.6178596130903368], [1441753344.0, 78960000.0, -0.6079302976946085], [1441755072.0, 78980000.0, -0.5979049830575226], [1441756800.0, 79000000.0, -0.5877852522924718], [1441758528.0, 79020000.0, -0.577572703422267], [1441760256.0, 79040000.0, -0.5672689491267564], [1441761984.0, 79060000.0, -0.5568756164881886], [1441763712.0, 79080000.0, -0.5463943467342703], [1441765440.0, 79100000.0, -0.5358267949789985], [1441767168.0, 79120000.0, -0.5251746299612983], [1441768896.0, 79140000.0, -0.5144395337815098], [1441770624.0, 79160000.0, -0.5036232016357587], [1441772352.0, 79180000.0, -0.4927273415482901], [1441774080.0, 79200000.0, -0.4817536741017145], [1441775808.0, 79220000.0, -0.47070393216533873], [1441777536.0, 79240000.0, -0.4595798606214884], [1441779264.0, 79260000.0, -0.44838321609003357], [1441780992.0, 79280000.0, -0.43711576665093493], [1441782720.0, 79300000.0, -0.4257792915650754], [1441784448.0, 79320000.0, -0.41437558099328115], [1441786176.0, 79340000.0, -0.40290643571366036], [1441787904.0, 79360000.0, -0.39137366683720737], [1441789632.0, 79380000.0, -0.3797790955218068], [1441791360.0, 79400000.0, -0.3681245526846778], [1441793088.0, 79420000.0, -0.35641187871325125], [1441794816.0, 79440000.0, -0.34464292317451833], [1441796544.0, 79460000.0, -0.3328195445229887], [1441798272.0, 79480000.0, -0.32094360980721226], [1441800000.0, 79500000.0, -0.30901699437495095], [1441801728.0, 79520000.0, -0.2970415815770392], [1441803456.0, 79540000.0, -0.2850192624699812], [1441805184.0, 79560000.0, -0.2729519355173242], [1441806912.0, 79580000.0, -0.26084150628989666], [1441808640.0, 79600000.0, -0.2486898871648553], [1441810368.0, 79620000.0, -0.23649899702372595], [1441812096.0, 79640000.0, -0.22427076094938322], [1441813824.0, 79660000.0, -0.21200710992205746], [1441815552.0, 79680000.0, -0.1997099805144106], [1441817280.0, 79700000.0, -0.187381314585729], [1441819008.0, 79720000.0, -0.1750230589752742], [1441820736.0, 79740000.0, -0.16263716519488253], [1441822464.0, 79760000.0, -0.15022558912075673], [1441824192.0, 79780000.0, -0.13779029068463852], [1441825920.0, 79800000.0, -0.12533323356430548], [1441827648.0, 79820000.0, -0.1128563848734837], [1441829376.0, 79840000.0, -0.10036171485121768], [1441831104.0, 79860000.0, -0.08785119655074675], [1441832832.0, 79880000.0, -0.07532680552793], [1441834560.0, 79900000.0, -0.06279051952931143], [1441836288.0, 79920000.0, -0.05024431817976839], [1441838016.0, 79940000.0, -0.03769018266994125], [1441839744.0, 79960000.0, -0.025130095443337875], [1441841472.0, 79980000.0, -0.012566039883353785], [1441843200.0, 80000000.0, -1.959434878635765e-15], [1441844928.0, 80020000.0, 0.012566039883356972], [1441846656.0, 80040000.0, 0.025130095443333958], [1441848384.0, 80060000.0, 0.03769018266993734], [1441850112.0, 80080000.0, 0.05024431817976448], [1441851840.0, 80100000.0, 0.06279051952930752], [1441853568.0, 80120000.0, 0.07532680552793318], [1441855296.0, 80140000.0, 0.08785119655073577], [1441857024.0, 80160000.0, 0.10036171485121378], [1441858752.0, 80180000.0, 0.11285638487348687], [1441860480.0, 80200000.0, 0.1253332335643016], [1441862208.0, 80220000.0, 0.13779029068463464], [1441863936.0, 80240000.0, 0.15022558912075287], [1441865664.0, 80260000.0, 0.16263716519487864], [1441867392.0, 80280000.0, 0.17502305897527734], [1441869120.0, 80300000.0, 0.18738131458571816], [1441870848.0, 80320000.0, 0.19970998051440675], [1441872576.0, 80340000.0, 0.21200710992205363], [1441874304.0, 80360000.0, 0.2242707609493794], [1441876032.0, 80380000.0, 0.23649899702372215], [1441877760.0, 80400000.0, 0.2486898871648446], [1441879488.0, 80420000.0, 0.2608415062898929], [1441881216.0, 80440000.0, 0.2729519355173273], [1441882944.0, 80460000.0, 0.2850192624699706], [1441884672.0, 80480000.0, 0.2970415815770355], [1441886400.0, 80500000.0, 0.30901699437494723], [1441888128.0, 80520000.0, 0.32094360980720854], [1441889856.0, 80540000.0, 0.33281954452298496], [1441891584.0, 80560000.0, 0.344642923174508], [1441893312.0, 80580000.0, 0.3564118787132476], [1441895040.0, 80600000.0, 0.36812455268468075], [1441896768.0, 80620000.0, 0.37977909552179656], [1441898496.0, 80640000.0, 0.39137366683720376], [1441900224.0, 80660000.0, 0.40290643571366325], [1441901952.0, 80680000.0, 0.41437558099327754], [1441903680.0, 80700000.0, 0.4257792915650718], [1441905408.0, 80720000.0, 0.437115766650925], [1441907136.0, 80740000.0, 0.44838321609003007], [1441908864.0, 80760000.0, 0.45957986062149125], [1441910592.0, 80780000.0, 0.470703932165329], [1441912320.0, 80800000.0, 0.48175367410171105], [1441914048.0, 80820000.0, 0.4927273415482929], [1441915776.0, 80840000.0, 0.5036232016357554], [1441917504.0, 80860000.0, 0.5144395337815064], [1441919232.0, 80880000.0, 0.5251746299612889], [1441920960.0, 80900000.0, 0.5358267949789952], [1441922688.0, 80920000.0, 0.546394346734273], [1441924416.0, 80940000.0, 0.5568756164881854], [1441926144.0, 80960000.0, 0.5672689491267532], [1441927872.0, 80980000.0, 0.5775727034222695], [1441929600.0, 81000000.0, 0.5877852522924687], [1441931328.0, 81020000.0, 0.5979049830575195], [1441933056.0, 81040000.0, 0.6079302976945997], [1441934784.0, 81060000.0, 0.6178596130903338], [1441936512.0, 81080000.0, 0.6276913612906992], [1441938240.0, 81100000.0, 0.6374239897486879], [1441939968.0, 81120000.0, 0.6470559615694419], [1441941696.0, 81140000.0, 0.6565857557529589], [1441943424.0, 81160000.0, 0.6660118674342481], [1441945152.0, 81180000.0, 0.6753328081210257], [1441946880.0, 81200000.0, 0.6845471059286841], [1441948608.0, 81220000.0, 0.693653305812805], [1441950336.0, 81240000.0, 0.7026499697988488], [1441952064.0, 81260000.0, 0.7115356772092793], [1441953792.0, 81280000.0, 0.7203090248879053], [1441955520.0, 81300000.0, 0.7289686274214143], [1441957248.0, 81320000.0, 0.7375131173581713], [1441958976.0, 81340000.0, 0.7459411454241838], [1441960704.0, 81360000.0, 0.7542513807361003], [1441962432.0, 81380000.0, 0.7624425110114484], [1441964160.0, 81400000.0, 0.7705132427757894], [1441965888.0, 81420000.0, 0.7784623015670186], [1441967616.0, 81440000.0, 0.786288432136618], [1441969344.0, 81460000.0, 0.7939903986478383], [1441971072.0, 81480000.0, 0.8015669848708747], [1441972800.0, 81500000.0, 0.8090169943749493], [1441974528.0, 81520000.0, 0.8163392507171813], [1441976256.0, 81540000.0, 0.8235325976284243], [1441977984.0, 81560000.0, 0.8305958991958132], [1441979712.0, 81580000.0, 0.837528040042138], [1441981440.0, 81600000.0, 0.8443279255020147], [1441983168.0, 81620000.0, 0.8509944817946948], [1441984896.0, 81640000.0, 0.8575266561936512], [1441986624.0, 81660000.0, 0.8639234171928338], [1441988352.0, 81680000.0, 0.8701837546695238], [1441990080.0, 81700000.0, 0.8763066800438615], [1441991808.0, 81720000.0, 0.8822912264349542], [1441993536.0, 81740000.0, 0.8881364488135417], [1441995264.0, 81760000.0, 0.8938414241512639], [1441996992.0, 81780000.0, 0.899405251566374], [1441998720.0, 81800000.0, 0.904827052466019], [1442000448.0, 81820000.0, 0.9101059706849948], [1442002176.0, 81840000.0, 0.9152411726209135], [1442003904.0, 81860000.0, 0.9202318473658689], [1442005632.0, 81880000.0, 0.925077206834459], [1442007360.0, 81900000.0, 0.9297764858882495], [1442009088.0, 81920000.0, 0.9343289424566125], [1442010816.0, 81940000.0, 0.9387338576538742], [1442012544.0, 81960000.0, 0.9429905358928643], [1442014272.0, 81980000.0, 0.9470983049947439], [1442016000.0, 82000000.0, 0.9510565162951508], [1442017728.0, 82020000.0, 0.9548645447466422], [1442019456.0, 82040000.0, 0.958521789017377], [1442021184.0, 82060000.0, 0.9620276715860847], [1442022912.0, 82080000.0, 0.9653816388332744], [1442024640.0, 82100000.0, 0.9685831611286314], [1442026368.0, 82120000.0, 0.9716317329146723], [1442028096.0, 82140000.0, 0.974526872786577], [1442029824.0, 82160000.0, 0.9772681235681917], [1442031552.0, 82180000.0, 0.9798550523842465], [1442033280.0, 82200000.0, 0.9822872507286895], [1442035008.0, 82220000.0, 0.9845643345292048], [1442036736.0, 82240000.0, 0.9866859442078674], [1442038464.0, 82260000.0, 0.9886517447379143], [1442040192.0, 82280000.0, 0.9904614256966504], [1442041920.0, 82300000.0, 0.9921147013144779], [1442043648.0, 82320000.0, 0.9936113105200076], [1442045376.0, 82340000.0, 0.9949510169813001], [1442047104.0, 82360000.0, 0.996133609143173], [1442048832.0, 82380000.0, 0.9971589002606137], [1442050560.0, 82400000.0, 0.9980267284282713], [1442052288.0, 82420000.0, 0.9987369566060177], [1442054016.0, 82440000.0, 0.9992894726405891], [1442055744.0, 82460000.0, 0.9996841892833], [1442057472.0, 82480000.0, 0.999921044203816], [1442059200.0, 82500000.0, 1.0], [1442060928.0, 82520000.0, 0.9999210442038161], [1442062656.0, 82540000.0, 0.9996841892833], [1442064384.0, 82560000.0, 0.9992894726405893], [1442066112.0, 82580000.0, 0.998736956606018], [1442067840.0, 82600000.0, 0.9980267284282718], [1442069568.0, 82620000.0, 0.9971589002606138], [1442071296.0, 82640000.0, 0.996133609143173], [1442073024.0, 82660000.0, 0.9949510169813001], [1442074752.0, 82680000.0, 0.9936113105200084], [1442076480.0, 82700000.0, 0.9921147013144789], [1442078208.0, 82720000.0, 0.9904614256966514], [1442079936.0, 82740000.0, 0.9886517447379155], [1442081664.0, 82760000.0, 0.9866859442078686], [1442083392.0, 82780000.0, 0.9845643345292049], [1442085120.0, 82800000.0, 0.9822872507286896], [1442086848.0, 82820000.0, 0.9798550523842465], [1442088576.0, 82840000.0, 0.9772681235681934], [1442090304.0, 82860000.0, 0.9745268727865788], [1442092032.0, 82880000.0, 0.9716317329146742], [1442093760.0, 82900000.0, 0.9685831611286333], [1442095488.0, 82920000.0, 0.9653816388332745], [1442097216.0, 82940000.0, 0.9620276715860848], [1442098944.0, 82960000.0, 0.9585217890173771], [1442100672.0, 82980000.0, 0.9548645447466444], [1442102400.0, 83000000.0, 0.9510565162951531], [1442104128.0, 83020000.0, 0.9470983049947463], [1442105856.0, 83040000.0, 0.9429905358928645], [1442107584.0, 83060000.0, 0.9387338576538768], [1442109312.0, 83080000.0, 0.9343289424566126], [1442111040.0, 83100000.0, 0.9297764858882522], [1442112768.0, 83120000.0, 0.9250772068344593], [1442114496.0, 83140000.0, 0.9202318473658719], [1442116224.0, 83160000.0, 0.9152411726209166], [1442117952.0, 83180000.0, 0.910105970684998], [1442119680.0, 83200000.0, 0.9048270524660191], [1442121408.0, 83220000.0, 0.8994052515663742], [1442123136.0, 83240000.0, 0.8938414241512641], [1442124864.0, 83260000.0, 0.8881364488135453], [1442126592.0, 83280000.0, 0.8822912264349544], [1442128320.0, 83300000.0, 0.8763066800438651], [1442130048.0, 83320000.0, 0.870183754669524], [1442131776.0, 83340000.0, 0.8639234171928377], [1442133504.0, 83360000.0, 0.8575266561936514], [1442135232.0, 83380000.0, 0.8509944817946952], [1442136960.0, 83400000.0, 0.8443279255020151], [1442138688.0, 83420000.0, 0.8375280400421421], [1442140416.0, 83440000.0, 0.8305958991958174], [1442142144.0, 83460000.0, 0.8235325976284287], [1442143872.0, 83480000.0, 0.8163392507171816], [1442145600.0, 83500000.0, 0.8090169943749497], [1442147328.0, 83520000.0, 0.8015669848708751], [1442149056.0, 83540000.0, 0.7939903986478386], [1442150784.0, 83560000.0, 0.7862884321366227], [1442152512.0, 83580000.0, 0.7784623015670233], [1442154240.0, 83600000.0, 0.7705132427757941], [1442155968.0, 83620000.0, 0.7624425110114488], [1442157696.0, 83640000.0, 0.7542513807361005], [1442159424.0, 83660000.0, 0.7459411454241841], [1442161152.0, 83680000.0, 0.7375131173581716], [1442162880.0, 83700000.0, 0.7289686274214147], [1442164608.0, 83720000.0, 0.7203090248879106], [1442166336.0, 83740000.0, 0.7115356772092847], [1442168064.0, 83760000.0, 0.7026499697988541], [1442169792.0, 83780000.0, 0.6936533058128054], [1442171520.0, 83800000.0, 0.6845471059286845], [1442173248.0, 83820000.0, 0.675332808121026], [1442174976.0, 83840000.0, 0.6660118674342538], [1442176704.0, 83860000.0, 0.6565857557529592], [1442178432.0, 83880000.0, 0.6470559615694477], [1442180160.0, 83900000.0, 0.6374239897486883], [1442181888.0, 83920000.0, 0.6276913612907051], [1442183616.0, 83940000.0, 0.6178596130903341], [1442185344.0, 83960000.0, 0.6079302976946058], [1442187072.0, 83980000.0, 0.5979049830575199], [1442188800.0, 84000000.0, 0.5877852522924748], [1442190528.0, 84020000.0, 0.5775727034222757], [1442192256.0, 84040000.0, 0.5672689491267595], [1442193984.0, 84060000.0, 0.5568756164881857], [1442195712.0, 84080000.0, 0.5463943467342735], [1442197440.0, 84100000.0, 0.5358267949789957], [1442199168.0, 84120000.0, 0.5251746299612954], [1442200896.0, 84140000.0, 0.5144395337815069], [1442202624.0, 84160000.0, 0.5036232016357619], [1442204352.0, 84180000.0, 0.4927273415482995], [1442206080.0, 84200000.0, 0.4817536741017177], [1442207808.0, 84220000.0, 0.4707039321653294], [1442209536.0, 84240000.0, 0.4595798606214917], [1442211264.0, 84260000.0, 0.44838321609003046], [1442212992.0, 84280000.0, 0.4371157666509318], [1442214720.0, 84300000.0, 0.4257792915650787], [1442216448.0, 84320000.0, 0.4143755809932845], [1442218176.0, 84340000.0, 0.4029064357136702], [1442219904.0, 84360000.0, 0.3913736668372042], [1442221632.0, 84380000.0, 0.37977909552179706], [1442223360.0, 84400000.0, 0.3681245526846812], [1442225088.0, 84420000.0, 0.3564118787132547], [1442226816.0, 84440000.0, 0.3446429231745151], [1442228544.0, 84460000.0, 0.3328195445229921], [1442230272.0, 84480000.0, 0.32094360980720904], [1442232000.0, 84500000.0, 0.30901699437495445], [1442233728.0, 84520000.0, 0.2970415815770359], [1442235456.0, 84540000.0, 0.2850192624699711], [1442237184.0, 84560000.0, 0.27295193551732777], [1442238912.0, 84580000.0, 0.2608415062899002], [1442240640.0, 84600000.0, 0.248689887164852], [1442242368.0, 84620000.0, 0.23649899702372953], [1442244096.0, 84640000.0, 0.2242707609493799], [1442245824.0, 84660000.0, 0.21200710992206104], [1442247552.0, 84680000.0, 0.19970998051440725], [1442249280.0, 84700000.0, 0.18738131458572563], [1442251008.0, 84720000.0, 0.1750230589752778], [1442252736.0, 84740000.0, 0.16263716519488614], [1442254464.0, 84760000.0, 0.15022558912075334], [1442256192.0, 84780000.0, 0.13779029068464216], [1442257920.0, 84800000.0, 0.12533323356430207], [1442259648.0, 84820000.0, 0.11285638487348736], [1442261376.0, 84840000.0, 0.10036171485121427], [1442263104.0, 84860000.0, 0.08785119655074333], [1442264832.0, 84880000.0, 0.07532680552794074], [1442266560.0, 84900000.0, 0.0627905195293151], [1442268288.0, 84920000.0, 0.05024431817976496], [1442270016.0, 84940000.0, 0.03769018266993782], [1442271744.0, 84960000.0, 0.025130095443334444], [1442273472.0, 84980000.0, 0.01256603988335746], [1442275200.0, 85000000.0, -1.4708141202500005e-15], [1442276928.0, 85020000.0, -0.012566039883353296], [1442278656.0, 85040000.0, -0.025130095443330284], [1442280384.0, 85060000.0, -0.03769018266993367], [1442282112.0, 85080000.0, -0.05024431817976081], [1442283840.0, 85100000.0, -0.06279051952931095], [1442285568.0, 85120000.0, -0.0753268055279366], [1442287296.0, 85140000.0, -0.08785119655073918], [1442289024.0, 85160000.0, -0.10036171485121012], [1442290752.0, 85180000.0, -0.11285638487348322], [1442292480.0, 85200000.0, -0.12533323356429796], [1442294208.0, 85220000.0, -0.13779029068463805], [1442295936.0, 85240000.0, -0.15022558912074924], [1442297664.0, 85260000.0, -0.16263716519488203], [1442299392.0, 85280000.0, -0.1750230589752737], [1442301120.0, 85300000.0, -0.18738131458572152], [1442302848.0, 85320000.0, -0.19970998051440317], [1442304576.0, 85340000.0, -0.21200710992205699], [1442306304.0, 85360000.0, -0.2242707609493758], [1442308032.0, 85380000.0, -0.23649899702372548], [1442309760.0, 85400000.0, -0.24868988716484794], [1442311488.0, 85420000.0, -0.2608415062898962], [1442313216.0, 85440000.0, -0.2729519355173238], [1442314944.0, 85460000.0, -0.2850192624699671], [1442316672.0, 85480000.0, -0.297041581577032], [1442318400.0, 85500000.0, -0.3090169943749505], [1442320128.0, 85520000.0, -0.3209436098072051], [1442321856.0, 85540000.0, -0.33281954452298823], [1442323584.0, 85560000.0, -0.34464292317451123], [1442325312.0, 85580000.0, -0.3564118787132508], [1442327040.0, 85600000.0, -0.3681245526846773], [1442328768.0, 85620000.0, -0.3797790955217932], [1442330496.0, 85640000.0, -0.3913736668372004], [1442332224.0, 85660000.0, -0.4029064357136664], [1442333952.0, 85680000.0, -0.4143755809932807], [1442335680.0, 85700000.0, -0.42577929156507494], [1442337408.0, 85720000.0, -0.43711576665092805], [1442339136.0, 85740000.0, -0.44838321609002674], [1442340864.0, 85760000.0, -0.45957986062148803], [1442342592.0, 85780000.0, -0.47070393216532574], [1442344320.0, 85800000.0, -0.48175367410171405], [1442346048.0, 85820000.0, -0.49272734154829584], [1442347776.0, 85840000.0, -0.5036232016357582], [1442349504.0, 85860000.0, -0.5144395337815032], [1442351232.0, 85880000.0, -0.5251746299612918], [1442352960.0, 85900000.0, -0.5358267949789921], [1442354688.0, 85920000.0, -0.5463943467342699], [1442356416.0, 85940000.0, -0.5568756164881823], [1442358144.0, 85960000.0, -0.5672689491267561], [1442359872.0, 85980000.0, -0.5775727034222723], [1442361600.0, 86000000.0, -0.5877852522924715], [1442363328.0, 86020000.0, -0.5979049830575166], [1442365056.0, 86040000.0, -0.6079302976946025], [1442366784.0, 86060000.0, -0.6178596130903309], [1442368512.0, 86080000.0, -0.6276913612907019], [1442370240.0, 86100000.0, -0.6374239897486851], [1442371968.0, 86120000.0, -0.6470559615694446], [1442373696.0, 86140000.0, -0.6565857557529561], [1442375424.0, 86160000.0, -0.6660118674342507], [1442377152.0, 86180000.0, -0.6753328081210229], [1442378880.0, 86200000.0, -0.6845471059286814], [1442380608.0, 86220000.0, -0.6936533058128024], [1442382336.0, 86240000.0, -0.7026499697988511], [1442384064.0, 86260000.0, -0.7115356772092817], [1442385792.0, 86280000.0, -0.7203090248879077], [1442387520.0, 86300000.0, -0.7289686274214118], [1442389248.0, 86320000.0, -0.7375131173581688], [1442390976.0, 86340000.0, -0.7459411454241813], [1442392704.0, 86360000.0, -0.7542513807360979], [1442394432.0, 86380000.0, -0.7624425110114461], [1442396160.0, 86400000.0, -0.7705132427757915], [1442397888.0, 86420000.0, -0.7784623015670207], [1442399616.0, 86440000.0, -0.7862884321366201], [1442401344.0, 86460000.0, -0.793990398647836], [1442403072.0, 86480000.0, -0.8015669848708726], [1442404800.0, 86500000.0, -0.8090169943749472], [1442406528.0, 86520000.0, -0.8163392507171792], [1442408256.0, 86540000.0, -0.8235325976284263], [1442409984.0, 86560000.0, -0.8305958991958151], [1442411712.0, 86580000.0, -0.8375280400421398], [1442413440.0, 86600000.0, -0.8443279255020129], [1442415168.0, 86620000.0, -0.850994481794693], [1442416896.0, 86640000.0, -0.8575266561936493], [1442418624.0, 86660000.0, -0.8639234171928356], [1442420352.0, 86680000.0, -0.870183754669522], [1442422080.0, 86700000.0, -0.876306680043863], [1442423808.0, 86720000.0, -0.8822912264349524], [1442425536.0, 86740000.0, -0.8881364488135434], [1442427264.0, 86760000.0, -0.8938414241512622], [1442428992.0, 86780000.0, -0.8994052515663723], [1442430720.0, 86800000.0, -0.9048270524660175], [1442432448.0, 86820000.0, -0.9101059706849962], [1442434176.0, 86840000.0, -0.915241172620915], [1442435904.0, 86860000.0, -0.9202318473658703], [1442437632.0, 86880000.0, -0.9250772068344577], [1442439360.0, 86900000.0, -0.9297764858882508], [1442441088.0, 86920000.0, -0.9343289424566111], [1442442816.0, 86940000.0, -0.9387338576538754], [1442444544.0, 86960000.0, -0.9429905358928631], [1442446272.0, 86980000.0, -0.947098304994745], [1442448000.0, 87000000.0, -0.9510565162951519], [1442449728.0, 87020000.0, -0.9548645447466432], [1442451456.0, 87040000.0, -0.9585217890173758], [1442453184.0, 87060000.0, -0.9620276715860837], [1442454912.0, 87080000.0, -0.9653816388332734], [1442456640.0, 87100000.0, -0.9685831611286323], [1442458368.0, 87120000.0, -0.9716317329146732], [1442460096.0, 87140000.0, -0.9745268727865778], [1442461824.0, 87160000.0, -0.9772681235681925], [1442463552.0, 87180000.0, -0.9798550523842458], [1442465280.0, 87200000.0, -0.9822872507286888], [1442467008.0, 87220000.0, -0.9845643345292041], [1442468736.0, 87240000.0, -0.9866859442078679], [1442470464.0, 87260000.0, -0.9886517447379148], [1442472192.0, 87280000.0, -0.9904614256966509], [1442473920.0, 87300000.0, -0.9921147013144783], [1442475648.0, 87320000.0, -0.993611310520008], [1442477376.0, 87340000.0, -0.9949510169812997], [1442479104.0, 87360000.0, -0.9961336091431726], [1442480832.0, 87380000.0, -0.9971589002606135], [1442482560.0, 87400000.0, -0.9980267284282716], [1442484288.0, 87420000.0, -0.9987369566060178], [1442486016.0, 87440000.0, -0.9992894726405892], [1442487744.0, 87460000.0, -0.9996841892832999], [1442489472.0, 87480000.0, -0.9999210442038161], [1442491200.0, 87500000.0, -1.0], [1442492928.0, 87520000.0, -0.9999210442038161], [1442494656.0, 87540000.0, -0.9996841892833002], [1442496384.0, 87560000.0, -0.9992894726405892], [1442498112.0, 87580000.0, -0.9987369566060178], [1442499840.0, 87600000.0, -0.9980267284282716], [1442501568.0, 87620000.0, -0.997158900260614], [1442503296.0, 87640000.0, -0.9961336091431733], [1442505024.0, 87660000.0, -0.9949510169813005], [1442506752.0, 87680000.0, -0.9936113105200081], [1442508480.0, 87700000.0, -0.9921147013144784], [1442510208.0, 87720000.0, -0.990461425696651], [1442511936.0, 87740000.0, -0.988651744737915], [1442513664.0, 87760000.0, -0.986685944207868], [1442515392.0, 87780000.0, -0.9845643345292054], [1442517120.0, 87800000.0, -0.9822872507286903], [1442518848.0, 87820000.0, -0.9798550523842473], [1442520576.0, 87840000.0, -0.9772681235681926], [1442522304.0, 87860000.0, -0.974526872786578], [1442524032.0, 87880000.0, -0.9716317329146733], [1442525760.0, 87900000.0, -0.9685831611286324], [1442527488.0, 87920000.0, -0.9653816388332754], [1442529216.0, 87940000.0, -0.9620276715860858], [1442530944.0, 87960000.0, -0.9585217890173781], [1442532672.0, 87980000.0, -0.9548645447466434], [1442534400.0, 88000000.0, -0.9510565162951521], [1442536128.0, 88020000.0, -0.9470983049947452], [1442537856.0, 88040000.0, -0.9429905358928657], [1442539584.0, 88060000.0, -0.9387338576538756], [1442541312.0, 88080000.0, -0.9343289424566139], [1442543040.0, 88100000.0, -0.929776485888251], [1442544768.0, 88120000.0, -0.9250772068344606], [1442546496.0, 88140000.0, -0.9202318473658705], [1442548224.0, 88160000.0, -0.9152411726209152], [1442549952.0, 88180000.0, -0.9101059706849965], [1442551680.0, 88200000.0, -0.9048270524660208], [1442553408.0, 88220000.0, -0.8994052515663757], [1442555136.0, 88240000.0, -0.8938414241512658], [1442556864.0, 88260000.0, -0.8881364488135437], [1442558592.0, 88280000.0, -0.882291226434956], [1442560320.0, 88300000.0, -0.8763066800438635], [1442562048.0, 88320000.0, -0.8701837546695259], [1442563776.0, 88340000.0, -0.8639234171928359], [1442565504.0, 88360000.0, -0.8575266561936533], [1442567232.0, 88380000.0, -0.850994481794697], [1442568960.0, 88400000.0, -0.844327925502017], [1442570688.0, 88420000.0, -0.8375280400421402], [1442572416.0, 88440000.0, -0.8305958991958156], [1442574144.0, 88460000.0, -0.8235325976284268], [1442575872.0, 88480000.0, -0.8163392507171837], [1442577600.0, 88500000.0, -0.8090169943749518], [1442579328.0, 88520000.0, -0.8015669848708773], [1442581056.0, 88540000.0, -0.7939903986478408], [1442582784.0, 88560000.0, -0.7862884321366206], [1442584512.0, 88580000.0, -0.7784623015670211], [1442586240.0, 88600000.0, -0.7705132427757919], [1442587968.0, 88620000.0, -0.7624425110114511], [1442589696.0, 88640000.0, -0.754251380736103], [1442591424.0, 88660000.0, -0.7459411454241865], [1442593152.0, 88680000.0, -0.7375131173581742], [1442594880.0, 88700000.0, -0.7289686274214171], [1442596608.0, 88720000.0, -0.7203090248879082], [1442598336.0, 88740000.0, -0.7115356772092822], [1442600064.0, 88760000.0, -0.7026499697988516], [1442601792.0, 88780000.0, -0.693653305812808], [1442603520.0, 88800000.0, -0.6845471059286872], [1442605248.0, 88820000.0, -0.6753328081210287], [1442606976.0, 88840000.0, -0.6660118674342512], [1442608704.0, 88860000.0, -0.656585755752962], [1442610432.0, 88880000.0, -0.6470559615694451], [1442612160.0, 88900000.0, -0.6374239897486911], [1442613888.0, 88920000.0, -0.6276913612907025], [1442615616.0, 88940000.0, -0.617859613090337], [1442617344.0, 88960000.0, -0.607930297694603], [1442619072.0, 88980000.0, -0.5979049830575228], [1442620800.0, 89000000.0, -0.587785252292472], [1442622528.0, 89020000.0, -0.577572703422273], [1442624256.0, 89040000.0, -0.5672689491267566], [1442625984.0, 89060000.0, -0.5568756164881888], [1442627712.0, 89080000.0, -0.5463943467342766], [1442629440.0, 89100000.0, -0.5358267949789988], [1442631168.0, 89120000.0, -0.5251746299612925], [1442632896.0, 89140000.0, -0.51443953378151], [1442634624.0, 89160000.0, -0.5036232016357589], [1442636352.0, 89180000.0, -0.4927273415482965], [1442638080.0, 89200000.0, -0.4817536741017147], [1442639808.0, 89220000.0, -0.4707039321653327], [1442641536.0, 89240000.0, -0.459579860621495], [1442643264.0, 89260000.0, -0.4483832160900338], [1442644992.0, 89280000.0, -0.4371157666509287], [1442646720.0, 89300000.0, -0.4257792915650756], [1442648448.0, 89320000.0, -0.41437558099328137], [1442650176.0, 89340000.0, -0.4029064357136671], [1442651904.0, 89360000.0, -0.3913736668372076], [1442653632.0, 89380000.0, -0.37977909552180045], [1442655360.0, 89400000.0, -0.36812455268468464], [1442657088.0, 89420000.0, -0.3564118787132515], [1442658816.0, 89440000.0, -0.3446429231745119], [1442660544.0, 89460000.0, -0.3328195445229889], [1442662272.0, 89480000.0, -0.3209436098072125], [1442664000.0, 89500000.0, -0.3090169943749512], [1442665728.0, 89520000.0, -0.29704158157703947], [1442667456.0, 89540000.0, -0.2850192624699746], [1442669184.0, 89560000.0, -0.2729519355173313], [1442670912.0, 89580000.0, -0.26084150628989694], [1442672640.0, 89600000.0, -0.24868988716484866], [1442674368.0, 89620000.0, -0.2364989970237262], [1442676096.0, 89640000.0, -0.22427076094938347], [1442677824.0, 89660000.0, -0.21200710992205768], [1442679552.0, 89680000.0, -0.19970998051441083], [1442681280.0, 89700000.0, -0.18738131458572224], [1442683008.0, 89720000.0, -0.17502305897528142], [1442684736.0, 89740000.0, -0.16263716519488275], [1442686464.0, 89760000.0, -0.15022558912075698], [1442688192.0, 89780000.0, -0.13779029068463877], [1442689920.0, 89800000.0, -0.12533323356430573], [1442691648.0, 89820000.0, -0.112856384873491], [1442693376.0, 89840000.0, -0.10036171485121792], [1442695104.0, 89860000.0, -0.08785119655073992], [1442696832.0, 89880000.0, -0.07532680552793733], [1442698560.0, 89900000.0, -0.06279051952931167], [1442700288.0, 89920000.0, -0.050244318179768634], [1442702016.0, 89940000.0, -0.037690182669941494], [1442703744.0, 89960000.0, -0.025130095443338118], [1442705472.0, 89980000.0, -0.012566039883361135], [1442707200.0, 90000000.0, -2.204364238465236e-15], [1442708928.0, 90020000.0, 0.012566039883356727], [1442710656.0, 90040000.0, 0.02513009544333371], [1442712384.0, 90060000.0, 0.037690182669937095], [1442714112.0, 90080000.0, 0.050244318179764234], [1442715840.0, 90100000.0, 0.06279051952930727], [1442717568.0, 90120000.0, 0.07532680552793293], [1442719296.0, 90140000.0, 0.08785119655073553], [1442721024.0, 90160000.0, 0.10036171485121353], [1442722752.0, 90180000.0, 0.11285638487348662], [1442724480.0, 90200000.0, 0.12533323356430134], [1442726208.0, 90220000.0, 0.1377902906846344], [1442727936.0, 90240000.0, 0.15022558912075262], [1442729664.0, 90260000.0, 0.16263716519487842], [1442731392.0, 90280000.0, 0.1750230589752771], [1442733120.0, 90300000.0, 0.1873813145857179], [1442734848.0, 90320000.0, 0.19970998051440653], [1442736576.0, 90340000.0, 0.21200710992205338], [1442738304.0, 90360000.0, 0.22427076094937917], [1442740032.0, 90380000.0, 0.2364989970237219], [1442741760.0, 90400000.0, 0.2486898871648444], [1442743488.0, 90420000.0, 0.26084150628989267], [1442745216.0, 90440000.0, 0.27295193551732705], [1442746944.0, 90460000.0, 0.2850192624699704], [1442748672.0, 90480000.0, 0.29704158157703525], [1442750400.0, 90500000.0, 0.309016994374947], [1442752128.0, 90520000.0, 0.3209436098072083], [1442753856.0, 90540000.0, 0.33281954452298473], [1442755584.0, 90560000.0, 0.3446429231745078], [1442757312.0, 90580000.0, 0.35641187871324737], [1442759040.0, 90600000.0, 0.36812455268468053], [1442760768.0, 90620000.0, 0.37977909552179634], [1442762496.0, 90640000.0, 0.39137366683720354], [1442764224.0, 90660000.0, 0.402906435713663], [1442765952.0, 90680000.0, 0.4143755809932773], [1442767680.0, 90700000.0, 0.4257792915650716], [1442769408.0, 90720000.0, 0.4371157666509248], [1442771136.0, 90740000.0, 0.44838321609002985], [1442772864.0, 90760000.0, 0.45957986062149103], [1442774592.0, 90780000.0, 0.4707039321653288], [1442776320.0, 90800000.0, 0.4817536741017108], [1442778048.0, 90820000.0, 0.4927273415482927], [1442779776.0, 90840000.0, 0.5036232016357551], [1442781504.0, 90860000.0, 0.5144395337815062], [1442783232.0, 90880000.0, 0.5251746299612887], [1442784960.0, 90900000.0, 0.535826794978995], [1442786688.0, 90920000.0, 0.5463943467342728], [1442788416.0, 90940000.0, 0.5568756164881852], [1442790144.0, 90960000.0, 0.5672689491267531], [1442791872.0, 90980000.0, 0.5775727034222693], [1442793600.0, 91000000.0, 0.5877852522924685], [1442795328.0, 91020000.0, 0.5979049830575193], [1442797056.0, 91040000.0, 0.6079302976945996], [1442798784.0, 91060000.0, 0.6178596130903335], [1442800512.0, 91080000.0, 0.627691361290699], [1442802240.0, 91100000.0, 0.6374239897486877], [1442803968.0, 91120000.0, 0.6470559615694418], [1442805696.0, 91140000.0, 0.6565857557529586], [1442807424.0, 91160000.0, 0.6660118674342479], [1442809152.0, 91180000.0, 0.6753328081210255], [1442810880.0, 91200000.0, 0.684547105928684], [1442812608.0, 91220000.0, 0.6936533058128048], [1442814336.0, 91240000.0, 0.7026499697988485], [1442816064.0, 91260000.0, 0.7115356772092791], [1442817792.0, 91280000.0, 0.7203090248879052], [1442819520.0, 91300000.0, 0.7289686274214141], [1442821248.0, 91320000.0, 0.7375131173581712], [1442822976.0, 91340000.0, 0.7459411454241837], [1442824704.0, 91360000.0, 0.7542513807361001], [1442826432.0, 91380000.0, 0.7624425110114483], [1442828160.0, 91400000.0, 0.7705132427757891], [1442829888.0, 91420000.0, 0.7784623015670185], [1442831616.0, 91440000.0, 0.7862884321366179], [1442833344.0, 91460000.0, 0.7939903986478382], [1442835072.0, 91480000.0, 0.8015669848708746], [1442836800.0, 91500000.0, 0.8090169943749492], [1442838528.0, 91520000.0, 0.8163392507171812], [1442840256.0, 91540000.0, 0.8235325976284242], [1442841984.0, 91560000.0, 0.830595899195813], [1442843712.0, 91580000.0, 0.8375280400421378], [1442845440.0, 91600000.0, 0.8443279255020146], [1442847168.0, 91620000.0, 0.8509944817946947], [1442848896.0, 91640000.0, 0.857526656193651], [1442850624.0, 91660000.0, 0.8639234171928337], [1442852352.0, 91680000.0, 0.8701837546695237], [1442854080.0, 91700000.0, 0.8763066800438613], [1442855808.0, 91720000.0, 0.8822912264349541], [1442857536.0, 91740000.0, 0.8881364488135416], [1442859264.0, 91760000.0, 0.8938414241512638], [1442860992.0, 91780000.0, 0.8994052515663739], [1442862720.0, 91800000.0, 0.9048270524660189], [1442864448.0, 91820000.0, 0.9101059706849948], [1442866176.0, 91840000.0, 0.9152411726209134], [1442867904.0, 91860000.0, 0.9202318473658688], [1442869632.0, 91880000.0, 0.9250772068344589], [1442871360.0, 91900000.0, 0.9297764858882493], [1442873088.0, 91920000.0, 0.9343289424566124], [1442874816.0, 91940000.0, 0.9387338576538741], [1442876544.0, 91960000.0, 0.9429905358928642], [1442878272.0, 91980000.0, 0.9470983049947438], [1442880000.0, 92000000.0, 0.9510565162951506], [1442881728.0, 92020000.0, 0.9548645447466421], [1442883456.0, 92040000.0, 0.9585217890173768], [1442885184.0, 92060000.0, 0.9620276715860846], [1442886912.0, 92080000.0, 0.9653816388332743], [1442888640.0, 92100000.0, 0.9685831611286314], [1442890368.0, 92120000.0, 0.9716317329146723], [1442892096.0, 92140000.0, 0.974526872786577], [1442893824.0, 92160000.0, 0.9772681235681917], [1442895552.0, 92180000.0, 0.9798550523842464], [1442897280.0, 92200000.0, 0.9822872507286895], [1442899008.0, 92220000.0, 0.9845643345292048], [1442900736.0, 92240000.0, 0.9866859442078674], [1442902464.0, 92260000.0, 0.9886517447379143], [1442904192.0, 92280000.0, 0.9904614256966504], [1442905920.0, 92300000.0, 0.9921147013144779], [1442907648.0, 92320000.0, 0.9936113105200075], [1442909376.0, 92340000.0, 0.9949510169813001], [1442911104.0, 92360000.0, 0.996133609143173], [1442912832.0, 92380000.0, 0.9971589002606137], [1442914560.0, 92400000.0, 0.9980267284282713], [1442916288.0, 92420000.0, 0.9987369566060176], [1442918016.0, 92440000.0, 0.9992894726405891], [1442919744.0, 92460000.0, 0.9996841892833], [1442921472.0, 92480000.0, 0.999921044203816], [1442923200.0, 92500000.0, 1.0], [1442924928.0, 92520000.0, 0.9999210442038161], [1442926656.0, 92540000.0, 0.9996841892833], [1442928384.0, 92560000.0, 0.9992894726405893], [1442930112.0, 92580000.0, 0.998736956606018], [1442931840.0, 92600000.0, 0.9980267284282719], [1442933568.0, 92620000.0, 0.9971589002606138], [1442935296.0, 92640000.0, 0.996133609143173], [1442937024.0, 92660000.0, 0.9949510169813002], [1442938752.0, 92680000.0, 0.9936113105200085], [1442940480.0, 92700000.0, 0.9921147013144789], [1442942208.0, 92720000.0, 0.9904614256966515], [1442943936.0, 92740000.0, 0.9886517447379155], [1442945664.0, 92760000.0, 0.9866859442078686], [1442947392.0, 92780000.0, 0.9845643345292049], [1442949120.0, 92800000.0, 0.9822872507286896], [1442950848.0, 92820000.0, 0.9798550523842466], [1442952576.0, 92840000.0, 0.9772681235681934], [1442954304.0, 92860000.0, 0.9745268727865788], [1442956032.0, 92880000.0, 0.9716317329146742], [1442957760.0, 92900000.0, 0.9685831611286334], [1442959488.0, 92920000.0, 0.9653816388332745], [1442961216.0, 92940000.0, 0.9620276715860849], [1442962944.0, 92960000.0, 0.9585217890173771], [1442964672.0, 92980000.0, 0.9548645447466445], [1442966400.0, 93000000.0, 0.9510565162951532], [1442968128.0, 93020000.0, 0.9470983049947465], [1442969856.0, 93040000.0, 0.9429905358928645], [1442971584.0, 93060000.0, 0.938733857653877], [1442973312.0, 93080000.0, 0.9343289424566127], [1442975040.0, 93100000.0, 0.9297764858882523], [1442976768.0, 93120000.0, 0.9250772068344594], [1442978496.0, 93140000.0, 0.9202318473658719], [1442980224.0, 93160000.0, 0.9152411726209168], [1442981952.0, 93180000.0, 0.9101059706849981], [1442983680.0, 93200000.0, 0.9048270524660192], [1442985408.0, 93220000.0, 0.8994052515663742], [1442987136.0, 93240000.0, 0.8938414241512642], [1442988864.0, 93260000.0, 0.8881364488135454], [1442990592.0, 93280000.0, 0.8822912264349545], [1442992320.0, 93300000.0, 0.8763066800438652], [1442994048.0, 93320000.0, 0.8701837546695242], [1442995776.0, 93340000.0, 0.8639234171928378], [1442997504.0, 93360000.0, 0.8575266561936515], [1442999232.0, 93380000.0, 0.8509944817946953], [1443000960.0, 93400000.0, 0.8443279255020152], [1443002688.0, 93420000.0, 0.8375280400421422], [1443004416.0, 93440000.0, 0.8305958991958176], [1443006144.0, 93460000.0, 0.8235325976284289], [1443007872.0, 93480000.0, 0.8163392507171817], [1443009600.0, 93500000.0, 0.8090169943749498], [1443011328.0, 93520000.0, 0.8015669848708752], [1443013056.0, 93540000.0, 0.7939903986478387], [1443014784.0, 93560000.0, 0.7862884321366228], [1443016512.0, 93580000.0, 0.7784623015670235], [1443018240.0, 93600000.0, 0.7705132427757944], [1443019968.0, 93620000.0, 0.7624425110114489], [1443021696.0, 93640000.0, 0.7542513807361008], [1443023424.0, 93660000.0, 0.7459411454241843], [1443025152.0, 93680000.0, 0.7375131173581718], [1443026880.0, 93700000.0, 0.7289686274214148], [1443028608.0, 93720000.0, 0.7203090248879107], [1443030336.0, 93740000.0, 0.7115356772092848], [1443032064.0, 93760000.0, 0.7026499697988543], [1443033792.0, 93780000.0, 0.6936533058128056], [1443035520.0, 93800000.0, 0.6845471059286846], [1443037248.0, 93820000.0, 0.6753328081210261], [1443038976.0, 93840000.0, 0.666011867434254], [1443040704.0, 93860000.0, 0.6565857557529594], [1443042432.0, 93880000.0, 0.6470559615694479], [1443044160.0, 93900000.0, 0.6374239897486885], [1443045888.0, 93920000.0, 0.6276913612907054], [1443047616.0, 93940000.0, 0.6178596130903343], [1443049344.0, 93960000.0, 0.6079302976946059], [1443051072.0, 93980000.0, 0.59790498305752], [1443052800.0, 94000000.0, 0.587785252292475], [1443054528.0, 94020000.0, 0.577572703422276], [1443056256.0, 94040000.0, 0.5672689491267596], [1443057984.0, 94060000.0, 0.556875616488186], [1443059712.0, 94080000.0, 0.5463943467342737], [1443061440.0, 94100000.0, 0.5358267949789959], [1443063168.0, 94120000.0, 0.5251746299612956], [1443064896.0, 94140000.0, 0.514439533781507], [1443066624.0, 94160000.0, 0.5036232016357621], [1443068352.0, 94180000.0, 0.49272734154829967], [1443070080.0, 94200000.0, 0.48175367410171793], [1443071808.0, 94220000.0, 0.47070393216532963], [1443073536.0, 94240000.0, 0.4595798606214919], [1443075264.0, 94260000.0, 0.4483832160900307], [1443076992.0, 94280000.0, 0.43711576665093205], [1443078720.0, 94300000.0, 0.42577929156507893], [1443080448.0, 94320000.0, 0.4143755809932847], [1443082176.0, 94340000.0, 0.4029064357136704], [1443083904.0, 94360000.0, 0.3913736668372044], [1443085632.0, 94380000.0, 0.3797790955217973], [1443087360.0, 94400000.0, 0.3681245526846814], [1443089088.0, 94420000.0, 0.3564118787132549], [1443090816.0, 94440000.0, 0.34464292317451534], [1443092544.0, 94460000.0, 0.3328195445229924], [1443094272.0, 94480000.0, 0.32094360980720926], [1443096000.0, 94500000.0, 0.30901699437495467], [1443097728.0, 94520000.0, 0.2970415815770362], [1443099456.0, 94540000.0, 0.28501926246997134], [1443101184.0, 94560000.0, 0.272951935517328], [1443102912.0, 94580000.0, 0.2608415062899005], [1443104640.0, 94600000.0, 0.2486898871648522], [1443106368.0, 94620000.0, 0.23649899702372976], [1443108096.0, 94640000.0, 0.22427076094938012], [1443109824.0, 94660000.0, 0.2120071099220613], [1443111552.0, 94680000.0, 0.19970998051440747], [1443113280.0, 94700000.0, 0.18738131458572585], [1443115008.0, 94720000.0, 0.17502305897527806], [1443116736.0, 94740000.0, 0.16263716519488639], [1443118464.0, 94760000.0, 0.1502255891207536], [1443120192.0, 94780000.0, 0.1377902906846424], [1443121920.0, 94800000.0, 0.12533323356430232], [1443123648.0, 94820000.0, 0.11285638487348759], [1443125376.0, 94840000.0, 0.10036171485121452], [1443127104.0, 94860000.0, 0.08785119655074358], [1443128832.0, 94880000.0, 0.075326805527941], [1443130560.0, 94900000.0, 0.06279051952931534], [1443132288.0, 94920000.0, 0.050244318179765206], [1443134016.0, 94940000.0, 0.037690182669938066], [1443135744.0, 94960000.0, 0.02513009544333469], [1443137472.0, 94980000.0, 0.012566039883357706], [1443139200.0, 95000000.0, 5.879542597180472e-15], [1443140928.0, 95020000.0, -0.012566039883353051], [1443142656.0, 95040000.0, -0.025130095443330037], [1443144384.0, 95060000.0, -0.03769018266993342], [1443146112.0, 95080000.0, -0.050244318179760564], [1443147840.0, 95100000.0, -0.0627905195293107], [1443149568.0, 95120000.0, -0.07532680552793634], [1443151296.0, 95140000.0, -0.08785119655073895], [1443153024.0, 95160000.0, -0.10036171485120989], [1443154752.0, 95180000.0, -0.11285638487348297], [1443156480.0, 95200000.0, -0.1253332335642977], [1443158208.0, 95220000.0, -0.1377902906846378], [1443159936.0, 95240000.0, -0.150225589120749], [1443161664.0, 95260000.0, -0.16263716519488178], [1443163392.0, 95280000.0, -0.17502305897527348], [1443165120.0, 95300000.0, -0.1873813145857213], [1443166848.0, 95320000.0, -0.19970998051440292], [1443168576.0, 95340000.0, -0.21200710992205674], [1443170304.0, 95360000.0, -0.2242707609493756], [1443172032.0, 95380000.0, -0.23649899702372523], [1443173760.0, 95400000.0, -0.24868988716484772], [1443175488.0, 95420000.0, -0.260841506289896], [1443177216.0, 95440000.0, -0.27295193551732355], [1443178944.0, 95460000.0, -0.2850192624699669], [1443180672.0, 95480000.0, -0.29704158157703175], [1443182400.0, 95500000.0, -0.3090169943749503], [1443184128.0, 95520000.0, -0.3209436098072049], [1443185856.0, 95540000.0, -0.332819544522988], [1443187584.0, 95560000.0, -0.344642923174511], [1443189312.0, 95580000.0, -0.3564118787132506], [1443191040.0, 95600000.0, -0.3681245526846771], [1443192768.0, 95620000.0, -0.37977909552179295], [1443194496.0, 95640000.0, -0.39137366683720015], [1443196224.0, 95660000.0, -0.4029064357136662], [1443197952.0, 95680000.0, -0.4143755809932805], [1443199680.0, 95700000.0, -0.4257792915650747], [1443201408.0, 95720000.0, -0.43711576665092783], [1443203136.0, 95740000.0, -0.4483832160900265], [1443204864.0, 95760000.0, -0.4595798606214878], [1443206592.0, 95780000.0, -0.4707039321653255], [1443208320.0, 95800000.0, -0.4817536741017138], [1443210048.0, 95820000.0, -0.49272734154829567], [1443211776.0, 95840000.0, -0.503623201635758], [1443213504.0, 95860000.0, -0.5144395337815031], [1443215232.0, 95880000.0, -0.5251746299612916], [1443216960.0, 95900000.0, -0.5358267949789919], [1443218688.0, 95920000.0, -0.5463943467342698], [1443220416.0, 95940000.0, -0.5568756164881821], [1443222144.0, 95960000.0, -0.5672689491267559], [1443223872.0, 95980000.0, -0.5775727034222721], [1443225600.0, 96000000.0, -0.5877852522924712], [1443227328.0, 96020000.0, -0.5979049830575164], [1443229056.0, 96040000.0, -0.6079302976946023], [1443230784.0, 96060000.0, -0.6178596130903307], [1443232512.0, 96080000.0, -0.6276913612907018], [1443234240.0, 96100000.0, -0.6374239897486849], [1443235968.0, 96120000.0, -0.6470559615694443], [1443237696.0, 96140000.0, -0.6565857557529559], [1443239424.0, 96160000.0, -0.6660118674342504], [1443241152.0, 96180000.0, -0.6753328081210227], [1443242880.0, 96200000.0, -0.6845471059286813], [1443244608.0, 96220000.0, -0.6936533058128022], [1443246336.0, 96240000.0, -0.702649969798851], [1443248064.0, 96260000.0, -0.7115356772092816], [1443249792.0, 96280000.0, -0.7203090248879075], [1443251520.0, 96300000.0, -0.7289686274214117], [1443253248.0, 96320000.0, -0.7375131173581687], [1443254976.0, 96340000.0, -0.7459411454241812], [1443256704.0, 96360000.0, -0.7542513807360977], [1443258432.0, 96380000.0, -0.7624425110114459], [1443260160.0, 96400000.0, -0.7705132427757914], [1443261888.0, 96420000.0, -0.7784623015670206], [1443263616.0, 96440000.0, -0.78628843213662], [1443265344.0, 96460000.0, -0.7939903986478359], [1443267072.0, 96480000.0, -0.8015669848708724], [1443268800.0, 96500000.0, -0.8090169943749471], [1443270528.0, 96520000.0, -0.816339250717179], [1443272256.0, 96540000.0, -0.8235325976284262], [1443273984.0, 96560000.0, -0.830595899195815], [1443275712.0, 96580000.0, -0.8375280400421397], [1443277440.0, 96600000.0, -0.8443279255020126], [1443279168.0, 96620000.0, -0.8509944817946928], [1443280896.0, 96640000.0, -0.8575266561936491], [1443282624.0, 96660000.0, -0.8639234171928355], [1443284352.0, 96680000.0, -0.8701837546695219], [1443286080.0, 96700000.0, -0.8763066800438629], [1443287808.0, 96720000.0, -0.8822912264349523], [1443289536.0, 96740000.0, -0.8881364488135433], [1443291264.0, 96760000.0, -0.8938414241512621], [1443292992.0, 96780000.0, -0.8994052515663722], [1443294720.0, 96800000.0, -0.9048270524660174], [1443296448.0, 96820000.0, -0.9101059706849961], [1443298176.0, 96840000.0, -0.9152411726209149], [1443299904.0, 96860000.0, -0.9202318473658702], [1443301632.0, 96880000.0, -0.9250772068344576], [1443303360.0, 96900000.0, -0.9297764858882507], [1443305088.0, 96920000.0, -0.934328942456611], [1443306816.0, 96940000.0, -0.9387338576538753], [1443308544.0, 96960000.0, -0.942990535892863], [1443310272.0, 96980000.0, -0.9470983049947449], [1443312000.0, 97000000.0, -0.9510565162951518], [1443313728.0, 97020000.0, -0.9548645447466431], [1443315456.0, 97040000.0, -0.9585217890173757], [1443317184.0, 97060000.0, -0.9620276715860836], [1443318912.0, 97080000.0, -0.9653816388332733], [1443320640.0, 97100000.0, -0.9685831611286322], [1443322368.0, 97120000.0, -0.9716317329146731], [1443324096.0, 97140000.0, -0.9745268727865778], [1443325824.0, 97160000.0, -0.9772681235681924], [1443327552.0, 97180000.0, -0.9798550523842458], [1443329280.0, 97200000.0, -0.9822872507286887], [1443331008.0, 97220000.0, -0.9845643345292041], [1443332736.0, 97240000.0, -0.9866859442078679], [1443334464.0, 97260000.0, -0.9886517447379148], [1443336192.0, 97280000.0, -0.9904614256966509], [1443337920.0, 97300000.0, -0.9921147013144783], [1443339648.0, 97320000.0, -0.993611310520008], [1443341376.0, 97340000.0, -0.9949510169812996], [1443343104.0, 97360000.0, -0.9961336091431726], [1443344832.0, 97380000.0, -0.9971589002606135], [1443346560.0, 97400000.0, -0.9980267284282716], [1443348288.0, 97420000.0, -0.9987369566060178], [1443350016.0, 97440000.0, -0.9992894726405892], [1443351744.0, 97460000.0, -0.9996841892832999], [1443353472.0, 97480000.0, -0.9999210442038161], [1443355200.0, 97500000.0, -1.0], [1443356928.0, 97520000.0, -0.9999210442038161], [1443358656.0, 97540000.0, -0.9996841892833002], [1443360384.0, 97560000.0, -0.9992894726405892], [1443362112.0, 97580000.0, -0.9987369566060179], [1443363840.0, 97600000.0, -0.9980267284282717], [1443365568.0, 97620000.0, -0.997158900260614], [1443367296.0, 97640000.0, -0.9961336091431733], [1443369024.0, 97660000.0, -0.9949510169813005], [1443370752.0, 97680000.0, -0.9936113105200081], [1443372480.0, 97700000.0, -0.9921147013144784], [1443374208.0, 97720000.0, -0.990461425696651], [1443375936.0, 97740000.0, -0.988651744737915], [1443377664.0, 97760000.0, -0.986685944207868], [1443379392.0, 97780000.0, -0.9845643345292056], [1443381120.0, 97800000.0, -0.9822872507286903], [1443382848.0, 97820000.0, -0.9798550523842473], [1443384576.0, 97840000.0, -0.9772681235681926], [1443386304.0, 97860000.0, -0.974526872786578], [1443388032.0, 97880000.0, -0.9716317329146734], [1443389760.0, 97900000.0, -0.9685831611286325], [1443391488.0, 97920000.0, -0.9653816388332755], [1443393216.0, 97940000.0, -0.9620276715860859], [1443394944.0, 97960000.0, -0.9585217890173782], [1443396672.0, 97980000.0, -0.9548645447466434], [1443398400.0, 98000000.0, -0.9510565162951521], [1443400128.0, 98020000.0, -0.9470983049947453], [1443401856.0, 98040000.0, -0.9429905358928657], [1443403584.0, 98060000.0, -0.9387338576538757], [1443405312.0, 98080000.0, -0.934328942456614], [1443407040.0, 98100000.0, -0.9297764858882511], [1443408768.0, 98120000.0, -0.9250772068344607], [1443410496.0, 98140000.0, -0.9202318473658706], [1443412224.0, 98160000.0, -0.9152411726209153], [1443413952.0, 98180000.0, -0.9101059706849967], [1443415680.0, 98200000.0, -0.9048270524660209], [1443417408.0, 98220000.0, -0.8994052515663759], [1443419136.0, 98240000.0, -0.8938414241512659], [1443420864.0, 98260000.0, -0.8881364488135438], [1443422592.0, 98280000.0, -0.8822912264349562], [1443424320.0, 98300000.0, -0.8763066800438636], [1443426048.0, 98320000.0, -0.870183754669526], [1443427776.0, 98340000.0, -0.863923417192836], [1443429504.0, 98360000.0, -0.8575266561936534], [1443431232.0, 98380000.0, -0.8509944817946972], [1443432960.0, 98400000.0, -0.8443279255020172], [1443434688.0, 98420000.0, -0.8375280400421403], [1443436416.0, 98440000.0, -0.8305958991958157], [1443438144.0, 98460000.0, -0.8235325976284269], [1443439872.0, 98480000.0, -0.8163392507171838], [1443441600.0, 98500000.0, -0.809016994374952], [1443443328.0, 98520000.0, -0.8015669848708774], [1443445056.0, 98540000.0, -0.7939903986478409], [1443446784.0, 98560000.0, -0.7862884321366207], [1443448512.0, 98580000.0, -0.7784623015670213], [1443450240.0, 98600000.0, -0.7705132427757921], [1443451968.0, 98620000.0, -0.7624425110114513], [1443453696.0, 98640000.0, -0.7542513807361032], [1443455424.0, 98660000.0, -0.7459411454241868], [1443457152.0, 98680000.0, -0.7375131173581743], [1443458880.0, 98700000.0, -0.7289686274214173], [1443460608.0, 98720000.0, -0.7203090248879084], [1443462336.0, 98740000.0, -0.7115356772092823], [1443464064.0, 98760000.0, -0.7026499697988519], [1443465792.0, 98780000.0, -0.6936533058128082], [1443467520.0, 98800000.0, -0.6845471059286873], [1443469248.0, 98820000.0, -0.6753328081210289], [1443470976.0, 98840000.0, -0.6660118674342514], [1443472704.0, 98860000.0, -0.6565857557529622], [1443474432.0, 98880000.0, -0.6470559615694453], [1443476160.0, 98900000.0, -0.6374239897486913], [1443477888.0, 98920000.0, -0.6276913612907027], [1443479616.0, 98940000.0, -0.6178596130903372], [1443481344.0, 98960000.0, -0.6079302976946033], [1443483072.0, 98980000.0, -0.597904983057523], [1443484800.0, 99000000.0, -0.5877852522924722], [1443486528.0, 99020000.0, -0.5775727034222731], [1443488256.0, 99040000.0, -0.5672689491267568], [1443489984.0, 99060000.0, -0.5568756164881891], [1443491712.0, 99080000.0, -0.5463943467342767], [1443493440.0, 99100000.0, -0.535826794978999], [1443495168.0, 99120000.0, -0.5251746299612927], [1443496896.0, 99140000.0, -0.5144395337815102], [1443498624.0, 99160000.0, -0.5036232016357591], [1443500352.0, 99180000.0, -0.4927273415482967], [1443502080.0, 99200000.0, -0.48175367410171493], [1443503808.0, 99220000.0, -0.4707039321653329], [1443505536.0, 99240000.0, -0.4595798606214952], [1443507264.0, 99260000.0, -0.448383216090034], [1443508992.0, 99280000.0, -0.43711576665092894], [1443510720.0, 99300000.0, -0.4257792915650758], [1443512448.0, 99320000.0, -0.4143755809932816], [1443514176.0, 99340000.0, -0.4029064357136673], [1443515904.0, 99360000.0, -0.3913736668372078], [1443517632.0, 99380000.0, -0.37977909552180067], [1443519360.0, 99400000.0, -0.36812455268468486], [1443521088.0, 99420000.0, -0.3564118787132517], [1443522816.0, 99440000.0, -0.3446429231745121], [1443524544.0, 99460000.0, -0.3328195445229891], [1443526272.0, 99480000.0, -0.32094360980721276], [1443528000.0, 99500000.0, -0.30901699437495145], [1443529728.0, 99520000.0, -0.2970415815770397], [1443531456.0, 99540000.0, -0.28501926246997483], [1443533184.0, 99560000.0, -0.27295193551733155], [1443534912.0, 99580000.0, -0.26084150628989716], [1443536640.0, 99600000.0, -0.24868988716484888], [1443538368.0, 99620000.0, -0.23649899702372643], [1443540096.0, 99640000.0, -0.2242707609493837], [1443541824.0, 99660000.0, -0.21200710992205793], [1443543552.0, 99680000.0, -0.19970998051441108], [1443545280.0, 99700000.0, -0.1873813145857225], [1443547008.0, 99720000.0, -0.17502305897528167], [1443548736.0, 99740000.0, -0.162637165194883], [1443550464.0, 99760000.0, -0.15022558912075723], [1443552192.0, 99780000.0, -0.137790290684639], [1443553920.0, 99800000.0, -0.12533323356430598], [1443555648.0, 99820000.0, -0.11285638487349124], [1443557376.0, 99840000.0, -0.10036171485121817], [1443559104.0, 99860000.0, -0.08785119655074017], [1443560832.0, 99880000.0, -0.07532680552793757], [1443562560.0, 99900000.0, -0.06279051952931192], [1443564288.0, 99920000.0, -0.050244318179768876], [1443566016.0, 99940000.0, -0.037690182669941744], [1443567744.0, 99960000.0, -0.025130095443338364], [1443569472.0, 99980000.0, -0.01256603988336138]] \ No newline at end of file
diff --git a/tensorflow/tensorboard/app/demo/data/sq.json b/tensorflow/tensorboard/app/demo/data/sq.json
new file mode 100644
index 0000000000..03c99221b9
--- /dev/null
+++ b/tensorflow/tensorboard/app/demo/data/sq.json
@@ -0,0 +1 @@
+[[1434931200.0, 0.0, 100.0], [1434932928.0, 20000.0, 99.999996], [1434934656.0, 40000.0, 99.999984], [1434936384.0, 60000.0, 99.999964], [1434938112.0, 80000.0, 99.999936], [1434939840.0, 100000.0, 99.9999], [1434941568.0, 120000.0, 99.999856], [1434943296.0, 140000.0, 99.999804], [1434945024.0, 160000.0, 99.999744], [1434946752.0, 180000.0, 99.999676], [1434948480.0, 200000.0, 99.9996], [1434950208.0, 220000.0, 99.999516], [1434951936.0, 240000.0, 99.999424], [1434953664.0, 260000.0, 99.999324], [1434955392.0, 280000.0, 99.999216], [1434957120.0, 300000.0, 99.9991], [1434958848.0, 320000.0, 99.998976], [1434960576.0, 340000.0, 99.998844], [1434962304.0, 360000.0, 99.998704], [1434964032.0, 380000.0, 99.998556], [1434965760.0, 400000.0, 99.9984], [1434967488.0, 420000.0, 99.998236], [1434969216.0, 440000.0, 99.998064], [1434970944.0, 460000.0, 99.997884], [1434972672.0, 480000.0, 99.997696], [1434974400.0, 500000.0, 99.9975], [1434976128.0, 520000.0, 99.997296], [1434977856.0, 540000.0, 99.997084], [1434979584.0, 560000.0, 99.996864], [1434981312.0, 580000.0, 99.996636], [1434983040.0, 600000.0, 99.9964], [1434984768.0, 620000.0, 99.996156], [1434986496.0, 640000.0, 99.995904], [1434988224.0, 660000.0, 99.995644], [1434989952.0, 680000.0, 99.995376], [1434991680.0, 700000.0, 99.9951], [1434993408.0, 720000.0, 99.994816], [1434995136.0, 740000.0, 99.994524], [1434996864.0, 760000.0, 99.994224], [1434998592.0, 780000.0, 99.993916], [1435000320.0, 800000.0, 99.9936], [1435002048.0, 820000.0, 99.993276], [1435003776.0, 840000.0, 99.992944], [1435005504.0, 860000.0, 99.992604], [1435007232.0, 880000.0, 99.992256], [1435008960.0, 900000.0, 99.9919], [1435010688.0, 920000.0, 99.991536], [1435012416.0, 940000.0, 99.991164], [1435014144.0, 960000.0, 99.990784], [1435015872.0, 980000.0, 99.990396], [1435017600.0, 1000000.0, 99.99], [1435019328.0, 1020000.0, 99.989596], [1435021056.0, 1040000.0, 99.989184], [1435022784.0, 1060000.0, 99.988764], [1435024512.0, 1080000.0, 99.988336], [1435026240.0, 1100000.0, 99.9879], [1435027968.0, 1120000.0, 99.987456], [1435029696.0, 1140000.0, 99.987004], [1435031424.0, 1160000.0, 99.986544], [1435033152.0, 1180000.0, 99.986076], [1435034880.0, 1200000.0, 99.9856], [1435036608.0, 1220000.0, 99.985116], [1435038336.0, 1240000.0, 99.984624], [1435040064.0, 1260000.0, 99.984124], [1435041792.0, 1280000.0, 99.983616], [1435043520.0, 1300000.0, 99.9831], [1435045248.0, 1320000.0, 99.982576], [1435046976.0, 1340000.0, 99.982044], [1435048704.0, 1360000.0, 99.981504], [1435050432.0, 1380000.0, 99.980956], [1435052160.0, 1400000.0, 99.9804], [1435053888.0, 1420000.0, 99.979836], [1435055616.0, 1440000.0, 99.979264], [1435057344.0, 1460000.0, 99.978684], [1435059072.0, 1480000.0, 99.978096], [1435060800.0, 1500000.0, 99.9775], [1435062528.0, 1520000.0, 99.976896], [1435064256.0, 1540000.0, 99.976284], [1435065984.0, 1560000.0, 99.975664], [1435067712.0, 1580000.0, 99.975036], [1435069440.0, 1600000.0, 99.9744], [1435071168.0, 1620000.0, 99.973756], [1435072896.0, 1640000.0, 99.973104], [1435074624.0, 1660000.0, 99.972444], [1435076352.0, 1680000.0, 99.971776], [1435078080.0, 1700000.0, 99.9711], [1435079808.0, 1720000.0, 99.970416], [1435081536.0, 1740000.0, 99.969724], [1435083264.0, 1760000.0, 99.969024], [1435084992.0, 1780000.0, 99.968316], [1435086720.0, 1800000.0, 99.9676], [1435088448.0, 1820000.0, 99.966876], [1435090176.0, 1840000.0, 99.966144], [1435091904.0, 1860000.0, 99.965404], [1435093632.0, 1880000.0, 99.964656], [1435095360.0, 1900000.0, 99.9639], [1435097088.0, 1920000.0, 99.963136], [1435098816.0, 1940000.0, 99.962364], [1435100544.0, 1960000.0, 99.961584], [1435102272.0, 1980000.0, 99.960796], [1435104000.0, 2000000.0, 99.96], [1435105728.0, 2020000.0, 99.959196], [1435107456.0, 2040000.0, 99.958384], [1435109184.0, 2060000.0, 99.957564], [1435110912.0, 2080000.0, 99.956736], [1435112640.0, 2100000.0, 99.9559], [1435114368.0, 2120000.0, 99.955056], [1435116096.0, 2140000.0, 99.954204], [1435117824.0, 2160000.0, 99.953344], [1435119552.0, 2180000.0, 99.952476], [1435121280.0, 2200000.0, 99.9516], [1435123008.0, 2220000.0, 99.950716], [1435124736.0, 2240000.0, 99.949824], [1435126464.0, 2260000.0, 99.948924], [1435128192.0, 2280000.0, 99.948016], [1435129920.0, 2300000.0, 99.9471], [1435131648.0, 2320000.0, 99.946176], [1435133376.0, 2340000.0, 99.945244], [1435135104.0, 2360000.0, 99.944304], [1435136832.0, 2380000.0, 99.943356], [1435138560.0, 2400000.0, 99.9424], [1435140288.0, 2420000.0, 99.941436], [1435142016.0, 2440000.0, 99.940464], [1435143744.0, 2460000.0, 99.939484], [1435145472.0, 2480000.0, 99.938496], [1435147200.0, 2500000.0, 99.9375], [1435148928.0, 2520000.0, 99.936496], [1435150656.0, 2540000.0, 99.935484], [1435152384.0, 2560000.0, 99.934464], [1435154112.0, 2580000.0, 99.933436], [1435155840.0, 2600000.0, 99.9324], [1435157568.0, 2620000.0, 99.931356], [1435159296.0, 2640000.0, 99.930304], [1435161024.0, 2660000.0, 99.929244], [1435162752.0, 2680000.0, 99.928176], [1435164480.0, 2700000.0, 99.9271], [1435166208.0, 2720000.0, 99.926016], [1435167936.0, 2740000.0, 99.924924], [1435169664.0, 2760000.0, 99.923824], [1435171392.0, 2780000.0, 99.922716], [1435173120.0, 2800000.0, 99.9216], [1435174848.0, 2820000.0, 99.920476], [1435176576.0, 2840000.0, 99.919344], [1435178304.0, 2860000.0, 99.918204], [1435180032.0, 2880000.0, 99.917056], [1435181760.0, 2900000.0, 99.9159], [1435183488.0, 2920000.0, 99.914736], [1435185216.0, 2940000.0, 99.913564], [1435186944.0, 2960000.0, 99.912384], [1435188672.0, 2980000.0, 99.911196], [1435190400.0, 3000000.0, 99.91], [1435192128.0, 3020000.0, 99.908796], [1435193856.0, 3040000.0, 99.907584], [1435195584.0, 3060000.0, 99.906364], [1435197312.0, 3080000.0, 99.905136], [1435199040.0, 3100000.0, 99.9039], [1435200768.0, 3120000.0, 99.902656], [1435202496.0, 3140000.0, 99.901404], [1435204224.0, 3160000.0, 99.900144], [1435205952.0, 3180000.0, 99.898876], [1435207680.0, 3200000.0, 99.8976], [1435209408.0, 3220000.0, 99.896316], [1435211136.0, 3240000.0, 99.895024], [1435212864.0, 3260000.0, 99.893724], [1435214592.0, 3280000.0, 99.892416], [1435216320.0, 3300000.0, 99.8911], [1435218048.0, 3320000.0, 99.889776], [1435219776.0, 3340000.0, 99.888444], [1435221504.0, 3360000.0, 99.887104], [1435223232.0, 3380000.0, 99.885756], [1435224960.0, 3400000.0, 99.8844], [1435226688.0, 3420000.0, 99.883036], [1435228416.0, 3440000.0, 99.881664], [1435230144.0, 3460000.0, 99.880284], [1435231872.0, 3480000.0, 99.878896], [1435233600.0, 3500000.0, 99.8775], [1435235328.0, 3520000.0, 99.876096], [1435237056.0, 3540000.0, 99.874684], [1435238784.0, 3560000.0, 99.873264], [1435240512.0, 3580000.0, 99.871836], [1435242240.0, 3600000.0, 99.8704], [1435243968.0, 3620000.0, 99.868956], [1435245696.0, 3640000.0, 99.867504], [1435247424.0, 3660000.0, 99.866044], [1435249152.0, 3680000.0, 99.864576], [1435250880.0, 3700000.0, 99.8631], [1435252608.0, 3720000.0, 99.861616], [1435254336.0, 3740000.0, 99.860124], [1435256064.0, 3760000.0, 99.858624], [1435257792.0, 3780000.0, 99.857116], [1435259520.0, 3800000.0, 99.8556], [1435261248.0, 3820000.0, 99.854076], [1435262976.0, 3840000.0, 99.852544], [1435264704.0, 3860000.0, 99.851004], [1435266432.0, 3880000.0, 99.849456], [1435268160.0, 3900000.0, 99.8479], [1435269888.0, 3920000.0, 99.846336], [1435271616.0, 3940000.0, 99.844764], [1435273344.0, 3960000.0, 99.843184], [1435275072.0, 3980000.0, 99.841596], [1435276800.0, 4000000.0, 99.84], [1435278528.0, 4020000.0, 99.838396], [1435280256.0, 4040000.0, 99.836784], [1435281984.0, 4060000.0, 99.835164], [1435283712.0, 4080000.0, 99.833536], [1435285440.0, 4100000.0, 99.8319], [1435287168.0, 4120000.0, 99.830256], [1435288896.0, 4140000.0, 99.828604], [1435290624.0, 4160000.0, 99.826944], [1435292352.0, 4180000.0, 99.825276], [1435294080.0, 4200000.0, 99.8236], [1435295808.0, 4220000.0, 99.821916], [1435297536.0, 4240000.0, 99.820224], [1435299264.0, 4260000.0, 99.818524], [1435300992.0, 4280000.0, 99.816816], [1435302720.0, 4300000.0, 99.8151], [1435304448.0, 4320000.0, 99.813376], [1435306176.0, 4340000.0, 99.811644], [1435307904.0, 4360000.0, 99.809904], [1435309632.0, 4380000.0, 99.808156], [1435311360.0, 4400000.0, 99.8064], [1435313088.0, 4420000.0, 99.804636], [1435314816.0, 4440000.0, 99.802864], [1435316544.0, 4460000.0, 99.801084], [1435318272.0, 4480000.0, 99.799296], [1435320000.0, 4500000.0, 99.7975], [1435321728.0, 4520000.0, 99.795696], [1435323456.0, 4540000.0, 99.793884], [1435325184.0, 4560000.0, 99.792064], [1435326912.0, 4580000.0, 99.790236], [1435328640.0, 4600000.0, 99.7884], [1435330368.0, 4620000.0, 99.786556], [1435332096.0, 4640000.0, 99.784704], [1435333824.0, 4660000.0, 99.782844], [1435335552.0, 4680000.0, 99.780976], [1435337280.0, 4700000.0, 99.7791], [1435339008.0, 4720000.0, 99.777216], [1435340736.0, 4740000.0, 99.775324], [1435342464.0, 4760000.0, 99.773424], [1435344192.0, 4780000.0, 99.771516], [1435345920.0, 4800000.0, 99.7696], [1435347648.0, 4820000.0, 99.767676], [1435349376.0, 4840000.0, 99.765744], [1435351104.0, 4860000.0, 99.763804], [1435352832.0, 4880000.0, 99.761856], [1435354560.0, 4900000.0, 99.7599], [1435356288.0, 4920000.0, 99.757936], [1435358016.0, 4940000.0, 99.755964], [1435359744.0, 4960000.0, 99.753984], [1435361472.0, 4980000.0, 99.751996], [1435363200.0, 5000000.0, 99.75], [1435364928.0, 5020000.0, 99.747996], [1435366656.0, 5040000.0, 99.74598399999999], [1435368384.0, 5060000.0, 99.743964], [1435370112.0, 5080000.0, 99.741936], [1435371840.0, 5100000.0, 99.7399], [1435373568.0, 5120000.0, 99.737856], [1435375296.0, 5140000.0, 99.735804], [1435377024.0, 5160000.0, 99.733744], [1435378752.0, 5180000.0, 99.731676], [1435380480.0, 5200000.0, 99.7296], [1435382208.0, 5220000.0, 99.727516], [1435383936.0, 5240000.0, 99.725424], [1435385664.0, 5260000.0, 99.723324], [1435387392.0, 5280000.0, 99.721216], [1435389120.0, 5300000.0, 99.7191], [1435390848.0, 5320000.0, 99.716976], [1435392576.0, 5340000.0, 99.714844], [1435394304.0, 5360000.0, 99.712704], [1435396032.0, 5380000.0, 99.710556], [1435397760.0, 5400000.0, 99.7084], [1435399488.0, 5420000.0, 99.706236], [1435401216.0, 5440000.0, 99.704064], [1435402944.0, 5460000.0, 99.701884], [1435404672.0, 5480000.0, 99.699696], [1435406400.0, 5500000.0, 99.6975], [1435408128.0, 5520000.0, 99.695296], [1435409856.0, 5540000.0, 99.693084], [1435411584.0, 5560000.0, 99.690864], [1435413312.0, 5580000.0, 99.688636], [1435415040.0, 5600000.0, 99.6864], [1435416768.0, 5620000.0, 99.684156], [1435418496.0, 5640000.0, 99.681904], [1435420224.0, 5660000.0, 99.679644], [1435421952.0, 5680000.0, 99.677376], [1435423680.0, 5700000.0, 99.6751], [1435425408.0, 5720000.0, 99.672816], [1435427136.0, 5740000.0, 99.670524], [1435428864.0, 5760000.0, 99.668224], [1435430592.0, 5780000.0, 99.665916], [1435432320.0, 5800000.0, 99.6636], [1435434048.0, 5820000.0, 99.661276], [1435435776.0, 5840000.0, 99.658944], [1435437504.0, 5860000.0, 99.656604], [1435439232.0, 5880000.0, 99.654256], [1435440960.0, 5900000.0, 99.6519], [1435442688.0, 5920000.0, 99.649536], [1435444416.0, 5940000.0, 99.647164], [1435446144.0, 5960000.0, 99.644784], [1435447872.0, 5980000.0, 99.642396], [1435449600.0, 6000000.0, 99.64], [1435451328.0, 6020000.0, 99.637596], [1435453056.0, 6040000.0, 99.635184], [1435454784.0, 6060000.0, 99.632764], [1435456512.0, 6080000.0, 99.630336], [1435458240.0, 6100000.0, 99.6279], [1435459968.0, 6120000.0, 99.625456], [1435461696.0, 6140000.0, 99.623004], [1435463424.0, 6160000.0, 99.620544], [1435465152.0, 6180000.0, 99.618076], [1435466880.0, 6200000.0, 99.6156], [1435468608.0, 6220000.0, 99.613116], [1435470336.0, 6240000.0, 99.610624], [1435472064.0, 6260000.0, 99.608124], [1435473792.0, 6280000.0, 99.605616], [1435475520.0, 6300000.0, 99.6031], [1435477248.0, 6320000.0, 99.600576], [1435478976.0, 6340000.0, 99.598044], [1435480704.0, 6360000.0, 99.595504], [1435482432.0, 6380000.0, 99.592956], [1435484160.0, 6400000.0, 99.5904], [1435485888.0, 6420000.0, 99.587836], [1435487616.0, 6440000.0, 99.585264], [1435489344.0, 6460000.0, 99.582684], [1435491072.0, 6480000.0, 99.580096], [1435492800.0, 6500000.0, 99.5775], [1435494528.0, 6520000.0, 99.574896], [1435496256.0, 6540000.0, 99.572284], [1435497984.0, 6560000.0, 99.569664], [1435499712.0, 6580000.0, 99.567036], [1435501440.0, 6600000.0, 99.5644], [1435503168.0, 6620000.0, 99.561756], [1435504896.0, 6640000.0, 99.559104], [1435506624.0, 6660000.0, 99.556444], [1435508352.0, 6680000.0, 99.553776], [1435510080.0, 6700000.0, 99.5511], [1435511808.0, 6720000.0, 99.548416], [1435513536.0, 6740000.0, 99.545724], [1435515264.0, 6760000.0, 99.543024], [1435516992.0, 6780000.0, 99.540316], [1435518720.0, 6800000.0, 99.5376], [1435520448.0, 6820000.0, 99.534876], [1435522176.0, 6840000.0, 99.532144], [1435523904.0, 6860000.0, 99.529404], [1435525632.0, 6880000.0, 99.526656], [1435527360.0, 6900000.0, 99.5239], [1435529088.0, 6920000.0, 99.521136], [1435530816.0, 6940000.0, 99.518364], [1435532544.0, 6960000.0, 99.515584], [1435534272.0, 6980000.0, 99.512796], [1435536000.0, 7000000.0, 99.51], [1435537728.0, 7020000.0, 99.507196], [1435539456.0, 7040000.0, 99.504384], [1435541184.0, 7060000.0, 99.501564], [1435542912.0, 7080000.0, 99.498736], [1435544640.0, 7100000.0, 99.4959], [1435546368.0, 7120000.0, 99.493056], [1435548096.0, 7140000.0, 99.490204], [1435549824.0, 7160000.0, 99.487344], [1435551552.0, 7180000.0, 99.484476], [1435553280.0, 7200000.0, 99.4816], [1435555008.0, 7220000.0, 99.478716], [1435556736.0, 7240000.0, 99.475824], [1435558464.0, 7260000.0, 99.472924], [1435560192.0, 7280000.0, 99.470016], [1435561920.0, 7300000.0, 99.4671], [1435563648.0, 7320000.0, 99.464176], [1435565376.0, 7340000.0, 99.461244], [1435567104.0, 7360000.0, 99.458304], [1435568832.0, 7380000.0, 99.455356], [1435570560.0, 7400000.0, 99.4524], [1435572288.0, 7420000.0, 99.449436], [1435574016.0, 7440000.0, 99.446464], [1435575744.0, 7460000.0, 99.443484], [1435577472.0, 7480000.0, 99.440496], [1435579200.0, 7500000.0, 99.4375], [1435580928.0, 7520000.0, 99.434496], [1435582656.0, 7540000.0, 99.431484], [1435584384.0, 7560000.0, 99.428464], [1435586112.0, 7580000.0, 99.425436], [1435587840.0, 7600000.0, 99.4224], [1435589568.0, 7620000.0, 99.419356], [1435591296.0, 7640000.0, 99.416304], [1435593024.0, 7660000.0, 99.413244], [1435594752.0, 7680000.0, 99.410176], [1435596480.0, 7700000.0, 99.4071], [1435598208.0, 7720000.0, 99.404016], [1435599936.0, 7740000.0, 99.400924], [1435601664.0, 7760000.0, 99.397824], [1435603392.0, 7780000.0, 99.394716], [1435605120.0, 7800000.0, 99.3916], [1435606848.0, 7820000.0, 99.388476], [1435608576.0, 7840000.0, 99.385344], [1435610304.0, 7860000.0, 99.382204], [1435612032.0, 7880000.0, 99.379056], [1435613760.0, 7900000.0, 99.3759], [1435615488.0, 7920000.0, 99.372736], [1435617216.0, 7940000.0, 99.369564], [1435618944.0, 7960000.0, 99.366384], [1435620672.0, 7980000.0, 99.363196], [1435622400.0, 8000000.0, 99.36], [1435624128.0, 8020000.0, 99.356796], [1435625856.0, 8040000.0, 99.353584], [1435627584.0, 8060000.0, 99.350364], [1435629312.0, 8080000.0, 99.347136], [1435631040.0, 8100000.0, 99.3439], [1435632768.0, 8120000.0, 99.340656], [1435634496.0, 8140000.0, 99.337404], [1435636224.0, 8160000.0, 99.334144], [1435637952.0, 8180000.0, 99.330876], [1435639680.0, 8200000.0, 99.3276], [1435641408.0, 8220000.0, 99.324316], [1435643136.0, 8240000.0, 99.321024], [1435644864.0, 8260000.0, 99.317724], [1435646592.0, 8280000.0, 99.314416], [1435648320.0, 8300000.0, 99.3111], [1435650048.0, 8320000.0, 99.307776], [1435651776.0, 8340000.0, 99.304444], [1435653504.0, 8360000.0, 99.301104], [1435655232.0, 8380000.0, 99.297756], [1435656960.0, 8400000.0, 99.2944], [1435658688.0, 8420000.0, 99.291036], [1435660416.0, 8440000.0, 99.287664], [1435662144.0, 8460000.0, 99.284284], [1435663872.0, 8480000.0, 99.280896], [1435665600.0, 8500000.0, 99.2775], [1435667328.0, 8520000.0, 99.274096], [1435669056.0, 8540000.0, 99.270684], [1435670784.0, 8560000.0, 99.267264], [1435672512.0, 8580000.0, 99.263836], [1435674240.0, 8600000.0, 99.2604], [1435675968.0, 8620000.0, 99.256956], [1435677696.0, 8640000.0, 99.253504], [1435679424.0, 8660000.0, 99.250044], [1435681152.0, 8680000.0, 99.246576], [1435682880.0, 8700000.0, 99.2431], [1435684608.0, 8720000.0, 99.239616], [1435686336.0, 8740000.0, 99.236124], [1435688064.0, 8760000.0, 99.232624], [1435689792.0, 8780000.0, 99.229116], [1435691520.0, 8800000.0, 99.2256], [1435693248.0, 8820000.0, 99.222076], [1435694976.0, 8840000.0, 99.218544], [1435696704.0, 8860000.0, 99.215004], [1435698432.0, 8880000.0, 99.211456], [1435700160.0, 8900000.0, 99.2079], [1435701888.0, 8920000.0, 99.204336], [1435703616.0, 8940000.0, 99.200764], [1435705344.0, 8960000.0, 99.197184], [1435707072.0, 8980000.0, 99.193596], [1435708800.0, 9000000.0, 99.19], [1435710528.0, 9020000.0, 99.186396], [1435712256.0, 9040000.0, 99.182784], [1435713984.0, 9060000.0, 99.179164], [1435715712.0, 9080000.0, 99.175536], [1435717440.0, 9100000.0, 99.1719], [1435719168.0, 9120000.0, 99.168256], [1435720896.0, 9140000.0, 99.164604], [1435722624.0, 9160000.0, 99.160944], [1435724352.0, 9180000.0, 99.157276], [1435726080.0, 9200000.0, 99.1536], [1435727808.0, 9220000.0, 99.149916], [1435729536.0, 9240000.0, 99.146224], [1435731264.0, 9260000.0, 99.142524], [1435732992.0, 9280000.0, 99.138816], [1435734720.0, 9300000.0, 99.1351], [1435736448.0, 9320000.0, 99.131376], [1435738176.0, 9340000.0, 99.127644], [1435739904.0, 9360000.0, 99.123904], [1435741632.0, 9380000.0, 99.120156], [1435743360.0, 9400000.0, 99.1164], [1435745088.0, 9420000.0, 99.112636], [1435746816.0, 9440000.0, 99.108864], [1435748544.0, 9460000.0, 99.105084], [1435750272.0, 9480000.0, 99.101296], [1435752000.0, 9500000.0, 99.0975], [1435753728.0, 9520000.0, 99.093696], [1435755456.0, 9540000.0, 99.089884], [1435757184.0, 9560000.0, 99.086064], [1435758912.0, 9580000.0, 99.082236], [1435760640.0, 9600000.0, 99.0784], [1435762368.0, 9620000.0, 99.074556], [1435764096.0, 9640000.0, 99.070704], [1435765824.0, 9660000.0, 99.066844], [1435767552.0, 9680000.0, 99.062976], [1435769280.0, 9700000.0, 99.0591], [1435771008.0, 9720000.0, 99.055216], [1435772736.0, 9740000.0, 99.051324], [1435774464.0, 9760000.0, 99.047424], [1435776192.0, 9780000.0, 99.043516], [1435777920.0, 9800000.0, 99.03960000000001], [1435779648.0, 9820000.0, 99.035676], [1435781376.0, 9840000.0, 99.031744], [1435783104.0, 9860000.0, 99.027804], [1435784832.0, 9880000.0, 99.023856], [1435786560.0, 9900000.0, 99.0199], [1435788288.0, 9920000.0, 99.015936], [1435790016.0, 9940000.0, 99.011964], [1435791744.0, 9960000.0, 99.007984], [1435793472.0, 9980000.0, 99.003996], [1435795200.0, 10000000.0, 99.0], [1435796928.0, 10020000.0, 98.995996], [1435798656.0, 10040000.0, 98.991984], [1435800384.0, 10060000.0, 98.987964], [1435802112.0, 10080000.0, 98.983936], [1435803840.0, 10100000.0, 98.9799], [1435805568.0, 10120000.0, 98.975856], [1435807296.0, 10140000.0, 98.971804], [1435809024.0, 10160000.0, 98.967744], [1435810752.0, 10180000.0, 98.963676], [1435812480.0, 10200000.0, 98.9596], [1435814208.0, 10220000.0, 98.955516], [1435815936.0, 10240000.0, 98.951424], [1435817664.0, 10260000.0, 98.947324], [1435819392.0, 10280000.0, 98.943216], [1435821120.0, 10300000.0, 98.9391], [1435822848.0, 10320000.0, 98.934976], [1435824576.0, 10340000.0, 98.930844], [1435826304.0, 10360000.0, 98.926704], [1435828032.0, 10380000.0, 98.922556], [1435829760.0, 10400000.0, 98.9184], [1435831488.0, 10420000.0, 98.914236], [1435833216.0, 10440000.0, 98.910064], [1435834944.0, 10460000.0, 98.905884], [1435836672.0, 10480000.0, 98.901696], [1435838400.0, 10500000.0, 98.8975], [1435840128.0, 10520000.0, 98.893296], [1435841856.0, 10540000.0, 98.889084], [1435843584.0, 10560000.0, 98.884864], [1435845312.0, 10580000.0, 98.880636], [1435847040.0, 10600000.0, 98.8764], [1435848768.0, 10620000.0, 98.872156], [1435850496.0, 10640000.0, 98.867904], [1435852224.0, 10660000.0, 98.863644], [1435853952.0, 10680000.0, 98.859376], [1435855680.0, 10700000.0, 98.8551], [1435857408.0, 10720000.0, 98.850816], [1435859136.0, 10740000.0, 98.846524], [1435860864.0, 10760000.0, 98.842224], [1435862592.0, 10780000.0, 98.837916], [1435864320.0, 10800000.0, 98.8336], [1435866048.0, 10820000.0, 98.829276], [1435867776.0, 10840000.0, 98.824944], [1435869504.0, 10860000.0, 98.820604], [1435871232.0, 10880000.0, 98.816256], [1435872960.0, 10900000.0, 98.8119], [1435874688.0, 10920000.0, 98.807536], [1435876416.0, 10940000.0, 98.803164], [1435878144.0, 10960000.0, 98.798784], [1435879872.0, 10980000.0, 98.794396], [1435881600.0, 11000000.0, 98.79], [1435883328.0, 11020000.0, 98.785596], [1435885056.0, 11040000.0, 98.781184], [1435886784.0, 11060000.0, 98.776764], [1435888512.0, 11080000.0, 98.772336], [1435890240.0, 11100000.0, 98.7679], [1435891968.0, 11120000.0, 98.763456], [1435893696.0, 11140000.0, 98.759004], [1435895424.0, 11160000.0, 98.754544], [1435897152.0, 11180000.0, 98.75007599999999], [1435898880.0, 11200000.0, 98.7456], [1435900608.0, 11220000.0, 98.741116], [1435902336.0, 11240000.0, 98.736624], [1435904064.0, 11260000.0, 98.732124], [1435905792.0, 11280000.0, 98.727616], [1435907520.0, 11300000.0, 98.7231], [1435909248.0, 11320000.0, 98.718576], [1435910976.0, 11340000.0, 98.714044], [1435912704.0, 11360000.0, 98.709504], [1435914432.0, 11380000.0, 98.704956], [1435916160.0, 11400000.0, 98.7004], [1435917888.0, 11420000.0, 98.695836], [1435919616.0, 11440000.0, 98.691264], [1435921344.0, 11460000.0, 98.686684], [1435923072.0, 11480000.0, 98.682096], [1435924800.0, 11500000.0, 98.6775], [1435926528.0, 11520000.0, 98.672896], [1435928256.0, 11540000.0, 98.668284], [1435929984.0, 11560000.0, 98.663664], [1435931712.0, 11580000.0, 98.659036], [1435933440.0, 11600000.0, 98.6544], [1435935168.0, 11620000.0, 98.649756], [1435936896.0, 11640000.0, 98.645104], [1435938624.0, 11660000.0, 98.640444], [1435940352.0, 11680000.0, 98.635776], [1435942080.0, 11700000.0, 98.6311], [1435943808.0, 11720000.0, 98.626416], [1435945536.0, 11740000.0, 98.621724], [1435947264.0, 11760000.0, 98.617024], [1435948992.0, 11780000.0, 98.612316], [1435950720.0, 11800000.0, 98.6076], [1435952448.0, 11820000.0, 98.602876], [1435954176.0, 11840000.0, 98.598144], [1435955904.0, 11860000.0, 98.593404], [1435957632.0, 11880000.0, 98.588656], [1435959360.0, 11900000.0, 98.5839], [1435961088.0, 11920000.0, 98.579136], [1435962816.0, 11940000.0, 98.574364], [1435964544.0, 11960000.0, 98.569584], [1435966272.0, 11980000.0, 98.564796], [1435968000.0, 12000000.0, 98.56], [1435969728.0, 12020000.0, 98.555196], [1435971456.0, 12040000.0, 98.550384], [1435973184.0, 12060000.0, 98.545564], [1435974912.0, 12080000.0, 98.540736], [1435976640.0, 12100000.0, 98.5359], [1435978368.0, 12120000.0, 98.531056], [1435980096.0, 12140000.0, 98.526204], [1435981824.0, 12160000.0, 98.521344], [1435983552.0, 12180000.0, 98.516476], [1435985280.0, 12200000.0, 98.5116], [1435987008.0, 12220000.0, 98.506716], [1435988736.0, 12240000.0, 98.501824], [1435990464.0, 12260000.0, 98.496924], [1435992192.0, 12280000.0, 98.492016], [1435993920.0, 12300000.0, 98.4871], [1435995648.0, 12320000.0, 98.482176], [1435997376.0, 12340000.0, 98.477244], [1435999104.0, 12360000.0, 98.472304], [1436000832.0, 12380000.0, 98.467356], [1436002560.0, 12400000.0, 98.4624], [1436004288.0, 12420000.0, 98.457436], [1436006016.0, 12440000.0, 98.452464], [1436007744.0, 12460000.0, 98.447484], [1436009472.0, 12480000.0, 98.442496], [1436011200.0, 12500000.0, 98.4375], [1436012928.0, 12520000.0, 98.432496], [1436014656.0, 12540000.0, 98.427484], [1436016384.0, 12560000.0, 98.422464], [1436018112.0, 12580000.0, 98.417436], [1436019840.0, 12600000.0, 98.4124], [1436021568.0, 12620000.0, 98.407356], [1436023296.0, 12640000.0, 98.402304], [1436025024.0, 12660000.0, 98.397244], [1436026752.0, 12680000.0, 98.392176], [1436028480.0, 12700000.0, 98.3871], [1436030208.0, 12720000.0, 98.382016], [1436031936.0, 12740000.0, 98.376924], [1436033664.0, 12760000.0, 98.371824], [1436035392.0, 12780000.0, 98.366716], [1436037120.0, 12800000.0, 98.3616], [1436038848.0, 12820000.0, 98.356476], [1436040576.0, 12840000.0, 98.351344], [1436042304.0, 12860000.0, 98.346204], [1436044032.0, 12880000.0, 98.341056], [1436045760.0, 12900000.0, 98.3359], [1436047488.0, 12920000.0, 98.330736], [1436049216.0, 12940000.0, 98.325564], [1436050944.0, 12960000.0, 98.320384], [1436052672.0, 12980000.0, 98.315196], [1436054400.0, 13000000.0, 98.31], [1436056128.0, 13020000.0, 98.304796], [1436057856.0, 13040000.0, 98.299584], [1436059584.0, 13060000.0, 98.294364], [1436061312.0, 13080000.0, 98.289136], [1436063040.0, 13100000.0, 98.2839], [1436064768.0, 13120000.0, 98.278656], [1436066496.0, 13140000.0, 98.273404], [1436068224.0, 13160000.0, 98.268144], [1436069952.0, 13180000.0, 98.262876], [1436071680.0, 13200000.0, 98.2576], [1436073408.0, 13220000.0, 98.252316], [1436075136.0, 13240000.0, 98.247024], [1436076864.0, 13260000.0, 98.241724], [1436078592.0, 13280000.0, 98.236416], [1436080320.0, 13300000.0, 98.2311], [1436082048.0, 13320000.0, 98.225776], [1436083776.0, 13340000.0, 98.220444], [1436085504.0, 13360000.0, 98.215104], [1436087232.0, 13380000.0, 98.209756], [1436088960.0, 13400000.0, 98.20439999999999], [1436090688.0, 13420000.0, 98.199036], [1436092416.0, 13440000.0, 98.193664], [1436094144.0, 13460000.0, 98.188284], [1436095872.0, 13480000.0, 98.182896], [1436097600.0, 13500000.0, 98.1775], [1436099328.0, 13520000.0, 98.172096], [1436101056.0, 13540000.0, 98.166684], [1436102784.0, 13560000.0, 98.161264], [1436104512.0, 13580000.0, 98.155836], [1436106240.0, 13600000.0, 98.1504], [1436107968.0, 13620000.0, 98.144956], [1436109696.0, 13640000.0, 98.139504], [1436111424.0, 13660000.0, 98.134044], [1436113152.0, 13680000.0, 98.128576], [1436114880.0, 13700000.0, 98.1231], [1436116608.0, 13720000.0, 98.117616], [1436118336.0, 13740000.0, 98.112124], [1436120064.0, 13760000.0, 98.106624], [1436121792.0, 13780000.0, 98.101116], [1436123520.0, 13800000.0, 98.0956], [1436125248.0, 13820000.0, 98.090076], [1436126976.0, 13840000.0, 98.084544], [1436128704.0, 13860000.0, 98.079004], [1436130432.0, 13880000.0, 98.073456], [1436132160.0, 13900000.0, 98.0679], [1436133888.0, 13920000.0, 98.062336], [1436135616.0, 13940000.0, 98.056764], [1436137344.0, 13960000.0, 98.051184], [1436139072.0, 13980000.0, 98.045596], [1436140800.0, 14000000.0, 98.04], [1436142528.0, 14020000.0, 98.034396], [1436144256.0, 14040000.0, 98.028784], [1436145984.0, 14060000.0, 98.023164], [1436147712.0, 14080000.0, 98.017536], [1436149440.0, 14100000.0, 98.0119], [1436151168.0, 14120000.0, 98.006256], [1436152896.0, 14140000.0, 98.000604], [1436154624.0, 14160000.0, 97.994944], [1436156352.0, 14180000.0, 97.989276], [1436158080.0, 14200000.0, 97.9836], [1436159808.0, 14220000.0, 97.977916], [1436161536.0, 14240000.0, 97.972224], [1436163264.0, 14260000.0, 97.966524], [1436164992.0, 14280000.0, 97.960816], [1436166720.0, 14300000.0, 97.9551], [1436168448.0, 14320000.0, 97.949376], [1436170176.0, 14340000.0, 97.943644], [1436171904.0, 14360000.0, 97.937904], [1436173632.0, 14380000.0, 97.932156], [1436175360.0, 14400000.0, 97.9264], [1436177088.0, 14420000.0, 97.920636], [1436178816.0, 14440000.0, 97.914864], [1436180544.0, 14460000.0, 97.90908400000001], [1436182272.0, 14480000.0, 97.903296], [1436184000.0, 14500000.0, 97.8975], [1436185728.0, 14520000.0, 97.891696], [1436187456.0, 14540000.0, 97.885884], [1436189184.0, 14560000.0, 97.880064], [1436190912.0, 14580000.0, 97.874236], [1436192640.0, 14600000.0, 97.8684], [1436194368.0, 14620000.0, 97.862556], [1436196096.0, 14640000.0, 97.856704], [1436197824.0, 14660000.0, 97.850844], [1436199552.0, 14680000.0, 97.844976], [1436201280.0, 14700000.0, 97.8391], [1436203008.0, 14720000.0, 97.833216], [1436204736.0, 14740000.0, 97.827324], [1436206464.0, 14760000.0, 97.821424], [1436208192.0, 14780000.0, 97.815516], [1436209920.0, 14800000.0, 97.8096], [1436211648.0, 14820000.0, 97.803676], [1436213376.0, 14840000.0, 97.797744], [1436215104.0, 14860000.0, 97.791804], [1436216832.0, 14880000.0, 97.785856], [1436218560.0, 14900000.0, 97.7799], [1436220288.0, 14920000.0, 97.773936], [1436222016.0, 14940000.0, 97.767964], [1436223744.0, 14960000.0, 97.761984], [1436225472.0, 14980000.0, 97.755996], [1436227200.0, 15000000.0, 97.75], [1436228928.0, 15020000.0, 97.743996], [1436230656.0, 15040000.0, 97.737984], [1436232384.0, 15060000.0, 97.731964], [1436234112.0, 15080000.0, 97.725936], [1436235840.0, 15100000.0, 97.7199], [1436237568.0, 15120000.0, 97.71385599999999], [1436239296.0, 15140000.0, 97.707804], [1436241024.0, 15160000.0, 97.701744], [1436242752.0, 15180000.0, 97.695676], [1436244480.0, 15200000.0, 97.6896], [1436246208.0, 15220000.0, 97.683516], [1436247936.0, 15240000.0, 97.677424], [1436249664.0, 15260000.0, 97.671324], [1436251392.0, 15280000.0, 97.665216], [1436253120.0, 15300000.0, 97.6591], [1436254848.0, 15320000.0, 97.652976], [1436256576.0, 15340000.0, 97.646844], [1436258304.0, 15360000.0, 97.640704], [1436260032.0, 15380000.0, 97.634556], [1436261760.0, 15400000.0, 97.6284], [1436263488.0, 15420000.0, 97.622236], [1436265216.0, 15440000.0, 97.616064], [1436266944.0, 15460000.0, 97.609884], [1436268672.0, 15480000.0, 97.603696], [1436270400.0, 15500000.0, 97.5975], [1436272128.0, 15520000.0, 97.591296], [1436273856.0, 15540000.0, 97.585084], [1436275584.0, 15560000.0, 97.578864], [1436277312.0, 15580000.0, 97.572636], [1436279040.0, 15600000.0, 97.5664], [1436280768.0, 15620000.0, 97.560156], [1436282496.0, 15640000.0, 97.553904], [1436284224.0, 15660000.0, 97.547644], [1436285952.0, 15680000.0, 97.541376], [1436287680.0, 15700000.0, 97.5351], [1436289408.0, 15720000.0, 97.528816], [1436291136.0, 15740000.0, 97.522524], [1436292864.0, 15760000.0, 97.516224], [1436294592.0, 15780000.0, 97.509916], [1436296320.0, 15800000.0, 97.5036], [1436298048.0, 15820000.0, 97.497276], [1436299776.0, 15840000.0, 97.490944], [1436301504.0, 15860000.0, 97.484604], [1436303232.0, 15880000.0, 97.478256], [1436304960.0, 15900000.0, 97.4719], [1436306688.0, 15920000.0, 97.465536], [1436308416.0, 15940000.0, 97.459164], [1436310144.0, 15960000.0, 97.452784], [1436311872.0, 15980000.0, 97.446396], [1436313600.0, 16000000.0, 97.44], [1436315328.0, 16020000.0, 97.433596], [1436317056.0, 16040000.0, 97.427184], [1436318784.0, 16060000.0, 97.420764], [1436320512.0, 16080000.0, 97.414336], [1436322240.0, 16100000.0, 97.4079], [1436323968.0, 16120000.0, 97.401456], [1436325696.0, 16140000.0, 97.395004], [1436327424.0, 16160000.0, 97.388544], [1436329152.0, 16180000.0, 97.382076], [1436330880.0, 16200000.0, 97.3756], [1436332608.0, 16220000.0, 97.369116], [1436334336.0, 16240000.0, 97.362624], [1436336064.0, 16260000.0, 97.356124], [1436337792.0, 16280000.0, 97.349616], [1436339520.0, 16300000.0, 97.3431], [1436341248.0, 16320000.0, 97.336576], [1436342976.0, 16340000.0, 97.330044], [1436344704.0, 16360000.0, 97.323504], [1436346432.0, 16380000.0, 97.316956], [1436348160.0, 16400000.0, 97.3104], [1436349888.0, 16420000.0, 97.303836], [1436351616.0, 16440000.0, 97.297264], [1436353344.0, 16460000.0, 97.290684], [1436355072.0, 16480000.0, 97.284096], [1436356800.0, 16500000.0, 97.2775], [1436358528.0, 16520000.0, 97.270896], [1436360256.0, 16540000.0, 97.264284], [1436361984.0, 16560000.0, 97.257664], [1436363712.0, 16580000.0, 97.251036], [1436365440.0, 16600000.0, 97.2444], [1436367168.0, 16620000.0, 97.237756], [1436368896.0, 16640000.0, 97.231104], [1436370624.0, 16660000.0, 97.224444], [1436372352.0, 16680000.0, 97.217776], [1436374080.0, 16700000.0, 97.2111], [1436375808.0, 16720000.0, 97.204416], [1436377536.0, 16740000.0, 97.197724], [1436379264.0, 16760000.0, 97.191024], [1436380992.0, 16780000.0, 97.184316], [1436382720.0, 16800000.0, 97.1776], [1436384448.0, 16820000.0, 97.170876], [1436386176.0, 16840000.0, 97.164144], [1436387904.0, 16860000.0, 97.157404], [1436389632.0, 16880000.0, 97.150656], [1436391360.0, 16900000.0, 97.1439], [1436393088.0, 16920000.0, 97.137136], [1436394816.0, 16940000.0, 97.130364], [1436396544.0, 16960000.0, 97.123584], [1436398272.0, 16980000.0, 97.116796], [1436400000.0, 17000000.0, 97.11], [1436401728.0, 17020000.0, 97.103196], [1436403456.0, 17040000.0, 97.096384], [1436405184.0, 17060000.0, 97.089564], [1436406912.0, 17080000.0, 97.082736], [1436408640.0, 17100000.0, 97.0759], [1436410368.0, 17120000.0, 97.069056], [1436412096.0, 17140000.0, 97.062204], [1436413824.0, 17160000.0, 97.055344], [1436415552.0, 17180000.0, 97.048476], [1436417280.0, 17200000.0, 97.0416], [1436419008.0, 17220000.0, 97.034716], [1436420736.0, 17240000.0, 97.027824], [1436422464.0, 17260000.0, 97.020924], [1436424192.0, 17280000.0, 97.014016], [1436425920.0, 17300000.0, 97.0071], [1436427648.0, 17320000.0, 97.000176], [1436429376.0, 17340000.0, 96.993244], [1436431104.0, 17360000.0, 96.986304], [1436432832.0, 17380000.0, 96.979356], [1436434560.0, 17400000.0, 96.9724], [1436436288.0, 17420000.0, 96.965436], [1436438016.0, 17440000.0, 96.958464], [1436439744.0, 17460000.0, 96.951484], [1436441472.0, 17480000.0, 96.944496], [1436443200.0, 17500000.0, 96.9375], [1436444928.0, 17520000.0, 96.930496], [1436446656.0, 17540000.0, 96.923484], [1436448384.0, 17560000.0, 96.916464], [1436450112.0, 17580000.0, 96.909436], [1436451840.0, 17600000.0, 96.9024], [1436453568.0, 17620000.0, 96.895356], [1436455296.0, 17640000.0, 96.888304], [1436457024.0, 17660000.0, 96.881244], [1436458752.0, 17680000.0, 96.874176], [1436460480.0, 17700000.0, 96.8671], [1436462208.0, 17720000.0, 96.860016], [1436463936.0, 17740000.0, 96.852924], [1436465664.0, 17760000.0, 96.845824], [1436467392.0, 17780000.0, 96.838716], [1436469120.0, 17800000.0, 96.8316], [1436470848.0, 17820000.0, 96.824476], [1436472576.0, 17840000.0, 96.817344], [1436474304.0, 17860000.0, 96.810204], [1436476032.0, 17880000.0, 96.803056], [1436477760.0, 17900000.0, 96.7959], [1436479488.0, 17920000.0, 96.788736], [1436481216.0, 17940000.0, 96.781564], [1436482944.0, 17960000.0, 96.774384], [1436484672.0, 17980000.0, 96.767196], [1436486400.0, 18000000.0, 96.76], [1436488128.0, 18020000.0, 96.752796], [1436489856.0, 18040000.0, 96.745584], [1436491584.0, 18060000.0, 96.738364], [1436493312.0, 18080000.0, 96.731136], [1436495040.0, 18100000.0, 96.7239], [1436496768.0, 18120000.0, 96.716656], [1436498496.0, 18140000.0, 96.709404], [1436500224.0, 18160000.0, 96.702144], [1436501952.0, 18180000.0, 96.694876], [1436503680.0, 18200000.0, 96.6876], [1436505408.0, 18220000.0, 96.680316], [1436507136.0, 18240000.0, 96.673024], [1436508864.0, 18260000.0, 96.665724], [1436510592.0, 18280000.0, 96.658416], [1436512320.0, 18300000.0, 96.6511], [1436514048.0, 18320000.0, 96.643776], [1436515776.0, 18340000.0, 96.636444], [1436517504.0, 18360000.0, 96.629104], [1436519232.0, 18380000.0, 96.621756], [1436520960.0, 18400000.0, 96.6144], [1436522688.0, 18420000.0, 96.607036], [1436524416.0, 18440000.0, 96.599664], [1436526144.0, 18460000.0, 96.592284], [1436527872.0, 18480000.0, 96.584896], [1436529600.0, 18500000.0, 96.5775], [1436531328.0, 18520000.0, 96.570096], [1436533056.0, 18540000.0, 96.562684], [1436534784.0, 18560000.0, 96.555264], [1436536512.0, 18580000.0, 96.547836], [1436538240.0, 18600000.0, 96.5404], [1436539968.0, 18620000.0, 96.532956], [1436541696.0, 18640000.0, 96.525504], [1436543424.0, 18660000.0, 96.518044], [1436545152.0, 18680000.0, 96.510576], [1436546880.0, 18700000.0, 96.5031], [1436548608.0, 18720000.0, 96.495616], [1436550336.0, 18740000.0, 96.488124], [1436552064.0, 18760000.0, 96.480624], [1436553792.0, 18780000.0, 96.473116], [1436555520.0, 18800000.0, 96.4656], [1436557248.0, 18820000.0, 96.458076], [1436558976.0, 18840000.0, 96.450544], [1436560704.0, 18860000.0, 96.443004], [1436562432.0, 18880000.0, 96.435456], [1436564160.0, 18900000.0, 96.4279], [1436565888.0, 18920000.0, 96.420336], [1436567616.0, 18940000.0, 96.412764], [1436569344.0, 18960000.0, 96.405184], [1436571072.0, 18980000.0, 96.39759600000001], [1436572800.0, 19000000.0, 96.39], [1436574528.0, 19020000.0, 96.382396], [1436576256.0, 19040000.0, 96.374784], [1436577984.0, 19060000.0, 96.367164], [1436579712.0, 19080000.0, 96.359536], [1436581440.0, 19100000.0, 96.3519], [1436583168.0, 19120000.0, 96.344256], [1436584896.0, 19140000.0, 96.336604], [1436586624.0, 19160000.0, 96.328944], [1436588352.0, 19180000.0, 96.321276], [1436590080.0, 19200000.0, 96.3136], [1436591808.0, 19220000.0, 96.305916], [1436593536.0, 19240000.0, 96.298224], [1436595264.0, 19260000.0, 96.290524], [1436596992.0, 19280000.0, 96.282816], [1436598720.0, 19300000.0, 96.2751], [1436600448.0, 19320000.0, 96.267376], [1436602176.0, 19340000.0, 96.259644], [1436603904.0, 19360000.0, 96.251904], [1436605632.0, 19380000.0, 96.244156], [1436607360.0, 19400000.0, 96.2364], [1436609088.0, 19420000.0, 96.228636], [1436610816.0, 19440000.0, 96.220864], [1436612544.0, 19460000.0, 96.213084], [1436614272.0, 19480000.0, 96.205296], [1436616000.0, 19500000.0, 96.1975], [1436617728.0, 19520000.0, 96.189696], [1436619456.0, 19540000.0, 96.181884], [1436621184.0, 19560000.0, 96.174064], [1436622912.0, 19580000.0, 96.166236], [1436624640.0, 19600000.0, 96.1584], [1436626368.0, 19620000.0, 96.150556], [1436628096.0, 19640000.0, 96.142704], [1436629824.0, 19660000.0, 96.134844], [1436631552.0, 19680000.0, 96.126976], [1436633280.0, 19700000.0, 96.1191], [1436635008.0, 19720000.0, 96.111216], [1436636736.0, 19740000.0, 96.103324], [1436638464.0, 19760000.0, 96.095424], [1436640192.0, 19780000.0, 96.087516], [1436641920.0, 19800000.0, 96.0796], [1436643648.0, 19820000.0, 96.071676], [1436645376.0, 19840000.0, 96.063744], [1436647104.0, 19860000.0, 96.055804], [1436648832.0, 19880000.0, 96.047856], [1436650560.0, 19900000.0, 96.0399], [1436652288.0, 19920000.0, 96.031936], [1436654016.0, 19940000.0, 96.023964], [1436655744.0, 19960000.0, 96.015984], [1436657472.0, 19980000.0, 96.007996], [1436659200.0, 20000000.0, 96.0], [1436660928.0, 20020000.0, 95.991996], [1436662656.0, 20040000.0, 95.983984], [1436664384.0, 20060000.0, 95.975964], [1436666112.0, 20080000.0, 95.967936], [1436667840.0, 20100000.0, 95.9599], [1436669568.0, 20120000.0, 95.951856], [1436671296.0, 20140000.0, 95.943804], [1436673024.0, 20160000.0, 95.935744], [1436674752.0, 20180000.0, 95.927676], [1436676480.0, 20200000.0, 95.9196], [1436678208.0, 20220000.0, 95.911516], [1436679936.0, 20240000.0, 95.903424], [1436681664.0, 20260000.0, 95.895324], [1436683392.0, 20280000.0, 95.887216], [1436685120.0, 20300000.0, 95.8791], [1436686848.0, 20320000.0, 95.870976], [1436688576.0, 20340000.0, 95.862844], [1436690304.0, 20360000.0, 95.854704], [1436692032.0, 20380000.0, 95.846556], [1436693760.0, 20400000.0, 95.83840000000001], [1436695488.0, 20420000.0, 95.830236], [1436697216.0, 20440000.0, 95.822064], [1436698944.0, 20460000.0, 95.813884], [1436700672.0, 20480000.0, 95.805696], [1436702400.0, 20500000.0, 95.7975], [1436704128.0, 20520000.0, 95.78929600000001], [1436705856.0, 20540000.0, 95.781084], [1436707584.0, 20560000.0, 95.772864], [1436709312.0, 20580000.0, 95.764636], [1436711040.0, 20600000.0, 95.7564], [1436712768.0, 20620000.0, 95.748156], [1436714496.0, 20640000.0, 95.739904], [1436716224.0, 20660000.0, 95.731644], [1436717952.0, 20680000.0, 95.723376], [1436719680.0, 20700000.0, 95.7151], [1436721408.0, 20720000.0, 95.706816], [1436723136.0, 20740000.0, 95.698524], [1436724864.0, 20760000.0, 95.690224], [1436726592.0, 20780000.0, 95.681916], [1436728320.0, 20800000.0, 95.6736], [1436730048.0, 20820000.0, 95.665276], [1436731776.0, 20840000.0, 95.656944], [1436733504.0, 20860000.0, 95.648604], [1436735232.0, 20880000.0, 95.640256], [1436736960.0, 20900000.0, 95.6319], [1436738688.0, 20920000.0, 95.623536], [1436740416.0, 20940000.0, 95.61516400000001], [1436742144.0, 20960000.0, 95.606784], [1436743872.0, 20980000.0, 95.598396], [1436745600.0, 21000000.0, 95.59], [1436747328.0, 21020000.0, 95.581596], [1436749056.0, 21040000.0, 95.573184], [1436750784.0, 21060000.0, 95.564764], [1436752512.0, 21080000.0, 95.556336], [1436754240.0, 21100000.0, 95.5479], [1436755968.0, 21120000.0, 95.539456], [1436757696.0, 21140000.0, 95.531004], [1436759424.0, 21160000.0, 95.522544], [1436761152.0, 21180000.0, 95.514076], [1436762880.0, 21200000.0, 95.5056], [1436764608.0, 21220000.0, 95.497116], [1436766336.0, 21240000.0, 95.488624], [1436768064.0, 21260000.0, 95.480124], [1436769792.0, 21280000.0, 95.471616], [1436771520.0, 21300000.0, 95.4631], [1436773248.0, 21320000.0, 95.454576], [1436774976.0, 21340000.0, 95.446044], [1436776704.0, 21360000.0, 95.437504], [1436778432.0, 21380000.0, 95.428956], [1436780160.0, 21400000.0, 95.4204], [1436781888.0, 21420000.0, 95.411836], [1436783616.0, 21440000.0, 95.403264], [1436785344.0, 21460000.0, 95.394684], [1436787072.0, 21480000.0, 95.386096], [1436788800.0, 21500000.0, 95.3775], [1436790528.0, 21520000.0, 95.368896], [1436792256.0, 21540000.0, 95.36028400000001], [1436793984.0, 21560000.0, 95.351664], [1436795712.0, 21580000.0, 95.343036], [1436797440.0, 21600000.0, 95.3344], [1436799168.0, 21620000.0, 95.325756], [1436800896.0, 21640000.0, 95.317104], [1436802624.0, 21660000.0, 95.308444], [1436804352.0, 21680000.0, 95.299776], [1436806080.0, 21700000.0, 95.2911], [1436807808.0, 21720000.0, 95.282416], [1436809536.0, 21740000.0, 95.273724], [1436811264.0, 21760000.0, 95.265024], [1436812992.0, 21780000.0, 95.256316], [1436814720.0, 21800000.0, 95.2476], [1436816448.0, 21820000.0, 95.238876], [1436818176.0, 21840000.0, 95.230144], [1436819904.0, 21860000.0, 95.221404], [1436821632.0, 21880000.0, 95.212656], [1436823360.0, 21900000.0, 95.2039], [1436825088.0, 21920000.0, 95.195136], [1436826816.0, 21940000.0, 95.186364], [1436828544.0, 21960000.0, 95.177584], [1436830272.0, 21980000.0, 95.168796], [1436832000.0, 22000000.0, 95.16], [1436833728.0, 22020000.0, 95.151196], [1436835456.0, 22040000.0, 95.14238399999999], [1436837184.0, 22060000.0, 95.133564], [1436838912.0, 22080000.0, 95.124736], [1436840640.0, 22100000.0, 95.1159], [1436842368.0, 22120000.0, 95.107056], [1436844096.0, 22140000.0, 95.098204], [1436845824.0, 22160000.0, 95.089344], [1436847552.0, 22180000.0, 95.080476], [1436849280.0, 22200000.0, 95.0716], [1436851008.0, 22220000.0, 95.062716], [1436852736.0, 22240000.0, 95.05382399999999], [1436854464.0, 22260000.0, 95.044924], [1436856192.0, 22280000.0, 95.036016], [1436857920.0, 22300000.0, 95.0271], [1436859648.0, 22320000.0, 95.018176], [1436861376.0, 22340000.0, 95.009244], [1436863104.0, 22360000.0, 95.000304], [1436864832.0, 22380000.0, 94.991356], [1436866560.0, 22400000.0, 94.9824], [1436868288.0, 22420000.0, 94.973436], [1436870016.0, 22440000.0, 94.96446399999999], [1436871744.0, 22460000.0, 94.955484], [1436873472.0, 22480000.0, 94.946496], [1436875200.0, 22500000.0, 94.9375], [1436876928.0, 22520000.0, 94.928496], [1436878656.0, 22540000.0, 94.919484], [1436880384.0, 22560000.0, 94.910464], [1436882112.0, 22580000.0, 94.901436], [1436883840.0, 22600000.0, 94.8924], [1436885568.0, 22620000.0, 94.883356], [1436887296.0, 22640000.0, 94.874304], [1436889024.0, 22660000.0, 94.865244], [1436890752.0, 22680000.0, 94.856176], [1436892480.0, 22700000.0, 94.8471], [1436894208.0, 22720000.0, 94.838016], [1436895936.0, 22740000.0, 94.828924], [1436897664.0, 22760000.0, 94.819824], [1436899392.0, 22780000.0, 94.810716], [1436901120.0, 22800000.0, 94.80160000000001], [1436902848.0, 22820000.0, 94.792476], [1436904576.0, 22840000.0, 94.783344], [1436906304.0, 22860000.0, 94.774204], [1436908032.0, 22880000.0, 94.765056], [1436909760.0, 22900000.0, 94.7559], [1436911488.0, 22920000.0, 94.746736], [1436913216.0, 22940000.0, 94.737564], [1436914944.0, 22960000.0, 94.728384], [1436916672.0, 22980000.0, 94.719196], [1436918400.0, 23000000.0, 94.71000000000001], [1436920128.0, 23020000.0, 94.700796], [1436921856.0, 23040000.0, 94.691584], [1436923584.0, 23060000.0, 94.682364], [1436925312.0, 23080000.0, 94.673136], [1436927040.0, 23100000.0, 94.6639], [1436928768.0, 23120000.0, 94.654656], [1436930496.0, 23140000.0, 94.645404], [1436932224.0, 23160000.0, 94.636144], [1436933952.0, 23180000.0, 94.626876], [1436935680.0, 23200000.0, 94.6176], [1436937408.0, 23220000.0, 94.608316], [1436939136.0, 23240000.0, 94.599024], [1436940864.0, 23260000.0, 94.589724], [1436942592.0, 23280000.0, 94.580416], [1436944320.0, 23300000.0, 94.5711], [1436946048.0, 23320000.0, 94.561776], [1436947776.0, 23340000.0, 94.552444], [1436949504.0, 23360000.0, 94.543104], [1436951232.0, 23380000.0, 94.533756], [1436952960.0, 23400000.0, 94.5244], [1436954688.0, 23420000.0, 94.515036], [1436956416.0, 23440000.0, 94.505664], [1436958144.0, 23460000.0, 94.496284], [1436959872.0, 23480000.0, 94.486896], [1436961600.0, 23500000.0, 94.47749999999999], [1436963328.0, 23520000.0, 94.468096], [1436965056.0, 23540000.0, 94.458684], [1436966784.0, 23560000.0, 94.449264], [1436968512.0, 23580000.0, 94.439836], [1436970240.0, 23600000.0, 94.4304], [1436971968.0, 23620000.0, 94.420956], [1436973696.0, 23640000.0, 94.41150400000001], [1436975424.0, 23660000.0, 94.402044], [1436977152.0, 23680000.0, 94.392576], [1436978880.0, 23700000.0, 94.3831], [1436980608.0, 23720000.0, 94.373616], [1436982336.0, 23740000.0, 94.364124], [1436984064.0, 23760000.0, 94.354624], [1436985792.0, 23780000.0, 94.345116], [1436987520.0, 23800000.0, 94.3356], [1436989248.0, 23820000.0, 94.326076], [1436990976.0, 23840000.0, 94.316544], [1436992704.0, 23860000.0, 94.307004], [1436994432.0, 23880000.0, 94.297456], [1436996160.0, 23900000.0, 94.2879], [1436997888.0, 23920000.0, 94.278336], [1436999616.0, 23940000.0, 94.268764], [1437001344.0, 23960000.0, 94.259184], [1437003072.0, 23980000.0, 94.249596], [1437004800.0, 24000000.0, 94.24], [1437006528.0, 24020000.0, 94.230396], [1437008256.0, 24040000.0, 94.220784], [1437009984.0, 24060000.0, 94.211164], [1437011712.0, 24080000.0, 94.201536], [1437013440.0, 24100000.0, 94.1919], [1437015168.0, 24120000.0, 94.182256], [1437016896.0, 24140000.0, 94.17260399999999], [1437018624.0, 24160000.0, 94.162944], [1437020352.0, 24180000.0, 94.153276], [1437022080.0, 24200000.0, 94.1436], [1437023808.0, 24220000.0, 94.133916], [1437025536.0, 24240000.0, 94.124224], [1437027264.0, 24260000.0, 94.114524], [1437028992.0, 24280000.0, 94.104816], [1437030720.0, 24300000.0, 94.0951], [1437032448.0, 24320000.0, 94.085376], [1437034176.0, 24340000.0, 94.075644], [1437035904.0, 24360000.0, 94.065904], [1437037632.0, 24380000.0, 94.056156], [1437039360.0, 24400000.0, 94.0464], [1437041088.0, 24420000.0, 94.036636], [1437042816.0, 24440000.0, 94.026864], [1437044544.0, 24460000.0, 94.017084], [1437046272.0, 24480000.0, 94.007296], [1437048000.0, 24500000.0, 93.9975], [1437049728.0, 24520000.0, 93.987696], [1437051456.0, 24540000.0, 93.977884], [1437053184.0, 24560000.0, 93.968064], [1437054912.0, 24580000.0, 93.958236], [1437056640.0, 24600000.0, 93.9484], [1437058368.0, 24620000.0, 93.938556], [1437060096.0, 24640000.0, 93.928704], [1437061824.0, 24660000.0, 93.91884399999999], [1437063552.0, 24680000.0, 93.908976], [1437065280.0, 24700000.0, 93.8991], [1437067008.0, 24720000.0, 93.889216], [1437068736.0, 24740000.0, 93.879324], [1437070464.0, 24760000.0, 93.869424], [1437072192.0, 24780000.0, 93.859516], [1437073920.0, 24800000.0, 93.8496], [1437075648.0, 24820000.0, 93.839676], [1437077376.0, 24840000.0, 93.829744], [1437079104.0, 24860000.0, 93.819804], [1437080832.0, 24880000.0, 93.809856], [1437082560.0, 24900000.0, 93.7999], [1437084288.0, 24920000.0, 93.789936], [1437086016.0, 24940000.0, 93.77996399999999], [1437087744.0, 24960000.0, 93.769984], [1437089472.0, 24980000.0, 93.759996], [1437091200.0, 25000000.0, 93.75], [1437092928.0, 25020000.0, 93.739996], [1437094656.0, 25040000.0, 93.729984], [1437096384.0, 25060000.0, 93.719964], [1437098112.0, 25080000.0, 93.709936], [1437099840.0, 25100000.0, 93.6999], [1437101568.0, 25120000.0, 93.689856], [1437103296.0, 25140000.0, 93.679804], [1437105024.0, 25160000.0, 93.669744], [1437106752.0, 25180000.0, 93.659676], [1437108480.0, 25200000.0, 93.64959999999999], [1437110208.0, 25220000.0, 93.639516], [1437111936.0, 25240000.0, 93.629424], [1437113664.0, 25260000.0, 93.619324], [1437115392.0, 25280000.0, 93.609216], [1437117120.0, 25300000.0, 93.5991], [1437118848.0, 25320000.0, 93.588976], [1437120576.0, 25340000.0, 93.578844], [1437122304.0, 25360000.0, 93.568704], [1437124032.0, 25380000.0, 93.558556], [1437125760.0, 25400000.0, 93.5484], [1437127488.0, 25420000.0, 93.538236], [1437129216.0, 25440000.0, 93.528064], [1437130944.0, 25460000.0, 93.517884], [1437132672.0, 25480000.0, 93.507696], [1437134400.0, 25500000.0, 93.4975], [1437136128.0, 25520000.0, 93.487296], [1437137856.0, 25540000.0, 93.477084], [1437139584.0, 25560000.0, 93.466864], [1437141312.0, 25580000.0, 93.456636], [1437143040.0, 25600000.0, 93.4464], [1437144768.0, 25620000.0, 93.436156], [1437146496.0, 25640000.0, 93.425904], [1437148224.0, 25660000.0, 93.415644], [1437149952.0, 25680000.0, 93.405376], [1437151680.0, 25700000.0, 93.3951], [1437153408.0, 25720000.0, 93.384816], [1437155136.0, 25740000.0, 93.37452400000001], [1437156864.0, 25760000.0, 93.364224], [1437158592.0, 25780000.0, 93.353916], [1437160320.0, 25800000.0, 93.3436], [1437162048.0, 25820000.0, 93.333276], [1437163776.0, 25840000.0, 93.322944], [1437165504.0, 25860000.0, 93.312604], [1437167232.0, 25880000.0, 93.302256], [1437168960.0, 25900000.0, 93.2919], [1437170688.0, 25920000.0, 93.281536], [1437172416.0, 25940000.0, 93.271164], [1437174144.0, 25960000.0, 93.260784], [1437175872.0, 25980000.0, 93.250396], [1437177600.0, 26000000.0, 93.24], [1437179328.0, 26020000.0, 93.229596], [1437181056.0, 26040000.0, 93.219184], [1437182784.0, 26060000.0, 93.208764], [1437184512.0, 26080000.0, 93.198336], [1437186240.0, 26100000.0, 93.1879], [1437187968.0, 26120000.0, 93.177456], [1437189696.0, 26140000.0, 93.167004], [1437191424.0, 26160000.0, 93.156544], [1437193152.0, 26180000.0, 93.146076], [1437194880.0, 26200000.0, 93.1356], [1437196608.0, 26220000.0, 93.125116], [1437198336.0, 26240000.0, 93.11462399999999], [1437200064.0, 26260000.0, 93.104124], [1437201792.0, 26280000.0, 93.093616], [1437203520.0, 26300000.0, 93.0831], [1437205248.0, 26320000.0, 93.072576], [1437206976.0, 26340000.0, 93.062044], [1437208704.0, 26360000.0, 93.051504], [1437210432.0, 26380000.0, 93.040956], [1437212160.0, 26400000.0, 93.0304], [1437213888.0, 26420000.0, 93.019836], [1437215616.0, 26440000.0, 93.009264], [1437217344.0, 26460000.0, 92.998684], [1437219072.0, 26480000.0, 92.988096], [1437220800.0, 26500000.0, 92.9775], [1437222528.0, 26520000.0, 92.966896], [1437224256.0, 26540000.0, 92.956284], [1437225984.0, 26560000.0, 92.945664], [1437227712.0, 26580000.0, 92.935036], [1437229440.0, 26600000.0, 92.9244], [1437231168.0, 26620000.0, 92.913756], [1437232896.0, 26640000.0, 92.903104], [1437234624.0, 26660000.0, 92.892444], [1437236352.0, 26680000.0, 92.881776], [1437238080.0, 26700000.0, 92.8711], [1437239808.0, 26720000.0, 92.860416], [1437241536.0, 26740000.0, 92.849724], [1437243264.0, 26760000.0, 92.839024], [1437244992.0, 26780000.0, 92.828316], [1437246720.0, 26800000.0, 92.8176], [1437248448.0, 26820000.0, 92.806876], [1437250176.0, 26840000.0, 92.796144], [1437251904.0, 26860000.0, 92.785404], [1437253632.0, 26880000.0, 92.774656], [1437255360.0, 26900000.0, 92.7639], [1437257088.0, 26920000.0, 92.753136], [1437258816.0, 26940000.0, 92.742364], [1437260544.0, 26960000.0, 92.731584], [1437262272.0, 26980000.0, 92.720796], [1437264000.0, 27000000.0, 92.71], [1437265728.0, 27020000.0, 92.699196], [1437267456.0, 27040000.0, 92.688384], [1437269184.0, 27060000.0, 92.677564], [1437270912.0, 27080000.0, 92.666736], [1437272640.0, 27100000.0, 92.6559], [1437274368.0, 27120000.0, 92.645056], [1437276096.0, 27140000.0, 92.634204], [1437277824.0, 27160000.0, 92.623344], [1437279552.0, 27180000.0, 92.612476], [1437281280.0, 27200000.0, 92.6016], [1437283008.0, 27220000.0, 92.590716], [1437284736.0, 27240000.0, 92.579824], [1437286464.0, 27260000.0, 92.568924], [1437288192.0, 27280000.0, 92.558016], [1437289920.0, 27300000.0, 92.5471], [1437291648.0, 27320000.0, 92.536176], [1437293376.0, 27340000.0, 92.525244], [1437295104.0, 27360000.0, 92.514304], [1437296832.0, 27380000.0, 92.503356], [1437298560.0, 27400000.0, 92.4924], [1437300288.0, 27420000.0, 92.481436], [1437302016.0, 27440000.0, 92.47046399999999], [1437303744.0, 27460000.0, 92.459484], [1437305472.0, 27480000.0, 92.448496], [1437307200.0, 27500000.0, 92.4375], [1437308928.0, 27520000.0, 92.426496], [1437310656.0, 27540000.0, 92.415484], [1437312384.0, 27560000.0, 92.404464], [1437314112.0, 27580000.0, 92.393436], [1437315840.0, 27600000.0, 92.3824], [1437317568.0, 27620000.0, 92.371356], [1437319296.0, 27640000.0, 92.360304], [1437321024.0, 27660000.0, 92.349244], [1437322752.0, 27680000.0, 92.338176], [1437324480.0, 27700000.0, 92.3271], [1437326208.0, 27720000.0, 92.316016], [1437327936.0, 27740000.0, 92.304924], [1437329664.0, 27760000.0, 92.293824], [1437331392.0, 27780000.0, 92.282716], [1437333120.0, 27800000.0, 92.2716], [1437334848.0, 27820000.0, 92.260476], [1437336576.0, 27840000.0, 92.24934400000001], [1437338304.0, 27860000.0, 92.238204], [1437340032.0, 27880000.0, 92.227056], [1437341760.0, 27900000.0, 92.2159], [1437343488.0, 27920000.0, 92.204736], [1437345216.0, 27940000.0, 92.193564], [1437346944.0, 27960000.0, 92.182384], [1437348672.0, 27980000.0, 92.171196], [1437350400.0, 28000000.0, 92.16], [1437352128.0, 28020000.0, 92.148796], [1437353856.0, 28040000.0, 92.137584], [1437355584.0, 28060000.0, 92.126364], [1437357312.0, 28080000.0, 92.115136], [1437359040.0, 28100000.0, 92.1039], [1437360768.0, 28120000.0, 92.092656], [1437362496.0, 28140000.0, 92.081404], [1437364224.0, 28160000.0, 92.070144], [1437365952.0, 28180000.0, 92.058876], [1437367680.0, 28200000.0, 92.0476], [1437369408.0, 28220000.0, 92.036316], [1437371136.0, 28240000.0, 92.025024], [1437372864.0, 28260000.0, 92.013724], [1437374592.0, 28280000.0, 92.002416], [1437376320.0, 28300000.0, 91.9911], [1437378048.0, 28320000.0, 91.979776], [1437379776.0, 28340000.0, 91.968444], [1437381504.0, 28360000.0, 91.957104], [1437383232.0, 28380000.0, 91.945756], [1437384960.0, 28400000.0, 91.9344], [1437386688.0, 28420000.0, 91.923036], [1437388416.0, 28440000.0, 91.911664], [1437390144.0, 28460000.0, 91.900284], [1437391872.0, 28480000.0, 91.888896], [1437393600.0, 28500000.0, 91.8775], [1437395328.0, 28520000.0, 91.866096], [1437397056.0, 28540000.0, 91.85468399999999], [1437398784.0, 28560000.0, 91.843264], [1437400512.0, 28580000.0, 91.831836], [1437402240.0, 28600000.0, 91.8204], [1437403968.0, 28620000.0, 91.808956], [1437405696.0, 28640000.0, 91.797504], [1437407424.0, 28660000.0, 91.786044], [1437409152.0, 28680000.0, 91.774576], [1437410880.0, 28700000.0, 91.7631], [1437412608.0, 28720000.0, 91.751616], [1437414336.0, 28740000.0, 91.740124], [1437416064.0, 28760000.0, 91.728624], [1437417792.0, 28780000.0, 91.717116], [1437419520.0, 28800000.0, 91.7056], [1437421248.0, 28820000.0, 91.694076], [1437422976.0, 28840000.0, 91.68254400000001], [1437424704.0, 28860000.0, 91.671004], [1437426432.0, 28880000.0, 91.659456], [1437428160.0, 28900000.0, 91.64789999999999], [1437429888.0, 28920000.0, 91.636336], [1437431616.0, 28940000.0, 91.624764], [1437433344.0, 28960000.0, 91.613184], [1437435072.0, 28980000.0, 91.601596], [1437436800.0, 29000000.0, 91.59], [1437438528.0, 29020000.0, 91.578396], [1437440256.0, 29040000.0, 91.566784], [1437441984.0, 29060000.0, 91.555164], [1437443712.0, 29080000.0, 91.543536], [1437445440.0, 29100000.0, 91.5319], [1437447168.0, 29120000.0, 91.520256], [1437448896.0, 29140000.0, 91.50860399999999], [1437450624.0, 29160000.0, 91.496944], [1437452352.0, 29180000.0, 91.485276], [1437454080.0, 29200000.0, 91.4736], [1437455808.0, 29220000.0, 91.461916], [1437457536.0, 29240000.0, 91.450224], [1437459264.0, 29260000.0, 91.438524], [1437460992.0, 29280000.0, 91.426816], [1437462720.0, 29300000.0, 91.4151], [1437464448.0, 29320000.0, 91.403376], [1437466176.0, 29340000.0, 91.391644], [1437467904.0, 29360000.0, 91.379904], [1437469632.0, 29380000.0, 91.368156], [1437471360.0, 29400000.0, 91.35640000000001], [1437473088.0, 29420000.0, 91.344636], [1437474816.0, 29440000.0, 91.332864], [1437476544.0, 29460000.0, 91.321084], [1437478272.0, 29480000.0, 91.309296], [1437480000.0, 29500000.0, 91.2975], [1437481728.0, 29520000.0, 91.285696], [1437483456.0, 29540000.0, 91.273884], [1437485184.0, 29560000.0, 91.262064], [1437486912.0, 29580000.0, 91.250236], [1437488640.0, 29600000.0, 91.2384], [1437490368.0, 29620000.0, 91.226556], [1437492096.0, 29640000.0, 91.214704], [1437493824.0, 29660000.0, 91.202844], [1437495552.0, 29680000.0, 91.190976], [1437497280.0, 29700000.0, 91.1791], [1437499008.0, 29720000.0, 91.167216], [1437500736.0, 29740000.0, 91.155324], [1437502464.0, 29760000.0, 91.143424], [1437504192.0, 29780000.0, 91.131516], [1437505920.0, 29800000.0, 91.1196], [1437507648.0, 29820000.0, 91.107676], [1437509376.0, 29840000.0, 91.095744], [1437511104.0, 29860000.0, 91.083804], [1437512832.0, 29880000.0, 91.071856], [1437514560.0, 29900000.0, 91.0599], [1437516288.0, 29920000.0, 91.04793599999999], [1437518016.0, 29940000.0, 91.03596399999999], [1437519744.0, 29960000.0, 91.023984], [1437521472.0, 29980000.0, 91.011996], [1437523200.0, 30000000.0, 91.0], [1437524928.0, 30020000.0, 90.987996], [1437526656.0, 30040000.0, 90.975984], [1437528384.0, 30060000.0, 90.963964], [1437530112.0, 30080000.0, 90.951936], [1437531840.0, 30100000.0, 90.9399], [1437533568.0, 30120000.0, 90.927856], [1437535296.0, 30140000.0, 90.91580400000001], [1437537024.0, 30160000.0, 90.903744], [1437538752.0, 30180000.0, 90.891676], [1437540480.0, 30200000.0, 90.8796], [1437542208.0, 30220000.0, 90.867516], [1437543936.0, 30240000.0, 90.855424], [1437545664.0, 30260000.0, 90.843324], [1437547392.0, 30280000.0, 90.831216], [1437549120.0, 30300000.0, 90.8191], [1437550848.0, 30320000.0, 90.806976], [1437552576.0, 30340000.0, 90.794844], [1437554304.0, 30360000.0, 90.782704], [1437556032.0, 30380000.0, 90.770556], [1437557760.0, 30400000.0, 90.7584], [1437559488.0, 30420000.0, 90.746236], [1437561216.0, 30440000.0, 90.734064], [1437562944.0, 30460000.0, 90.721884], [1437564672.0, 30480000.0, 90.709696], [1437566400.0, 30500000.0, 90.6975], [1437568128.0, 30520000.0, 90.685296], [1437569856.0, 30540000.0, 90.673084], [1437571584.0, 30560000.0, 90.660864], [1437573312.0, 30580000.0, 90.648636], [1437575040.0, 30600000.0, 90.6364], [1437576768.0, 30620000.0, 90.624156], [1437578496.0, 30640000.0, 90.611904], [1437580224.0, 30660000.0, 90.599644], [1437581952.0, 30680000.0, 90.587376], [1437583680.0, 30700000.0, 90.5751], [1437585408.0, 30720000.0, 90.562816], [1437587136.0, 30740000.0, 90.550524], [1437588864.0, 30760000.0, 90.538224], [1437590592.0, 30780000.0, 90.525916], [1437592320.0, 30800000.0, 90.5136], [1437594048.0, 30820000.0, 90.501276], [1437595776.0, 30840000.0, 90.488944], [1437597504.0, 30860000.0, 90.476604], [1437599232.0, 30880000.0, 90.464256], [1437600960.0, 30900000.0, 90.4519], [1437602688.0, 30920000.0, 90.439536], [1437604416.0, 30940000.0, 90.427164], [1437606144.0, 30960000.0, 90.414784], [1437607872.0, 30980000.0, 90.402396], [1437609600.0, 31000000.0, 90.39], [1437611328.0, 31020000.0, 90.377596], [1437613056.0, 31040000.0, 90.365184], [1437614784.0, 31060000.0, 90.35276400000001], [1437616512.0, 31080000.0, 90.340336], [1437618240.0, 31100000.0, 90.3279], [1437619968.0, 31120000.0, 90.315456], [1437621696.0, 31140000.0, 90.303004], [1437623424.0, 31160000.0, 90.290544], [1437625152.0, 31180000.0, 90.278076], [1437626880.0, 31200000.0, 90.2656], [1437628608.0, 31220000.0, 90.253116], [1437630336.0, 31240000.0, 90.240624], [1437632064.0, 31260000.0, 90.22812400000001], [1437633792.0, 31280000.0, 90.215616], [1437635520.0, 31300000.0, 90.2031], [1437637248.0, 31320000.0, 90.190576], [1437638976.0, 31340000.0, 90.178044], [1437640704.0, 31360000.0, 90.165504], [1437642432.0, 31380000.0, 90.152956], [1437644160.0, 31400000.0, 90.1404], [1437645888.0, 31420000.0, 90.127836], [1437647616.0, 31440000.0, 90.115264], [1437649344.0, 31460000.0, 90.102684], [1437651072.0, 31480000.0, 90.090096], [1437652800.0, 31500000.0, 90.0775], [1437654528.0, 31520000.0, 90.064896], [1437656256.0, 31540000.0, 90.052284], [1437657984.0, 31560000.0, 90.039664], [1437659712.0, 31580000.0, 90.027036], [1437661440.0, 31600000.0, 90.0144], [1437663168.0, 31620000.0, 90.001756], [1437664896.0, 31640000.0, 89.989104], [1437666624.0, 31660000.0, 89.976444], [1437668352.0, 31680000.0, 89.963776], [1437670080.0, 31700000.0, 89.9511], [1437671808.0, 31720000.0, 89.938416], [1437673536.0, 31740000.0, 89.925724], [1437675264.0, 31760000.0, 89.913024], [1437676992.0, 31780000.0, 89.900316], [1437678720.0, 31800000.0, 89.88759999999999], [1437680448.0, 31820000.0, 89.874876], [1437682176.0, 31840000.0, 89.862144], [1437683904.0, 31860000.0, 89.84940399999999], [1437685632.0, 31880000.0, 89.836656], [1437687360.0, 31900000.0, 89.8239], [1437689088.0, 31920000.0, 89.811136], [1437690816.0, 31940000.0, 89.798364], [1437692544.0, 31960000.0, 89.785584], [1437694272.0, 31980000.0, 89.772796], [1437696000.0, 32000000.0, 89.75999999999999], [1437697728.0, 32020000.0, 89.747196], [1437699456.0, 32040000.0, 89.734384], [1437701184.0, 32060000.0, 89.721564], [1437702912.0, 32080000.0, 89.708736], [1437704640.0, 32100000.0, 89.6959], [1437706368.0, 32120000.0, 89.683056], [1437708096.0, 32140000.0, 89.670204], [1437709824.0, 32160000.0, 89.657344], [1437711552.0, 32180000.0, 89.644476], [1437713280.0, 32200000.0, 89.63159999999999], [1437715008.0, 32220000.0, 89.618716], [1437716736.0, 32240000.0, 89.605824], [1437718464.0, 32260000.0, 89.592924], [1437720192.0, 32280000.0, 89.580016], [1437721920.0, 32300000.0, 89.5671], [1437723648.0, 32320000.0, 89.554176], [1437725376.0, 32340000.0, 89.541244], [1437727104.0, 32360000.0, 89.52830399999999], [1437728832.0, 32380000.0, 89.515356], [1437730560.0, 32400000.0, 89.5024], [1437732288.0, 32420000.0, 89.489436], [1437734016.0, 32440000.0, 89.47646399999999], [1437735744.0, 32460000.0, 89.463484], [1437737472.0, 32480000.0, 89.450496], [1437739200.0, 32500000.0, 89.4375], [1437740928.0, 32520000.0, 89.424496], [1437742656.0, 32540000.0, 89.411484], [1437744384.0, 32560000.0, 89.398464], [1437746112.0, 32580000.0, 89.385436], [1437747840.0, 32600000.0, 89.3724], [1437749568.0, 32620000.0, 89.359356], [1437751296.0, 32640000.0, 89.346304], [1437753024.0, 32660000.0, 89.33324400000001], [1437754752.0, 32680000.0, 89.320176], [1437756480.0, 32700000.0, 89.3071], [1437758208.0, 32720000.0, 89.294016], [1437759936.0, 32740000.0, 89.280924], [1437761664.0, 32760000.0, 89.267824], [1437763392.0, 32780000.0, 89.254716], [1437765120.0, 32800000.0, 89.2416], [1437766848.0, 32820000.0, 89.228476], [1437768576.0, 32840000.0, 89.215344], [1437770304.0, 32860000.0, 89.202204], [1437772032.0, 32880000.0, 89.189056], [1437773760.0, 32900000.0, 89.1759], [1437775488.0, 32920000.0, 89.162736], [1437777216.0, 32940000.0, 89.149564], [1437778944.0, 32960000.0, 89.136384], [1437780672.0, 32980000.0, 89.12319600000001], [1437782400.0, 33000000.0, 89.11], [1437784128.0, 33020000.0, 89.096796], [1437785856.0, 33040000.0, 89.083584], [1437787584.0, 33060000.0, 89.070364], [1437789312.0, 33080000.0, 89.057136], [1437791040.0, 33100000.0, 89.0439], [1437792768.0, 33120000.0, 89.030656], [1437794496.0, 33140000.0, 89.017404], [1437796224.0, 33160000.0, 89.004144], [1437797952.0, 33180000.0, 88.990876], [1437799680.0, 33200000.0, 88.9776], [1437801408.0, 33220000.0, 88.964316], [1437803136.0, 33240000.0, 88.951024], [1437804864.0, 33260000.0, 88.937724], [1437806592.0, 33280000.0, 88.92441600000001], [1437808320.0, 33300000.0, 88.9111], [1437810048.0, 33320000.0, 88.897776], [1437811776.0, 33340000.0, 88.884444], [1437813504.0, 33360000.0, 88.871104], [1437815232.0, 33380000.0, 88.857756], [1437816960.0, 33400000.0, 88.84440000000001], [1437818688.0, 33420000.0, 88.831036], [1437820416.0, 33440000.0, 88.81766400000001], [1437822144.0, 33460000.0, 88.804284], [1437823872.0, 33480000.0, 88.790896], [1437825600.0, 33500000.0, 88.7775], [1437827328.0, 33520000.0, 88.764096], [1437829056.0, 33540000.0, 88.750684], [1437830784.0, 33560000.0, 88.737264], [1437832512.0, 33580000.0, 88.723836], [1437834240.0, 33600000.0, 88.7104], [1437835968.0, 33620000.0, 88.696956], [1437837696.0, 33640000.0, 88.683504], [1437839424.0, 33660000.0, 88.670044], [1437841152.0, 33680000.0, 88.656576], [1437842880.0, 33700000.0, 88.6431], [1437844608.0, 33720000.0, 88.629616], [1437846336.0, 33740000.0, 88.616124], [1437848064.0, 33760000.0, 88.602624], [1437849792.0, 33780000.0, 88.589116], [1437851520.0, 33800000.0, 88.57560000000001], [1437853248.0, 33820000.0, 88.562076], [1437854976.0, 33840000.0, 88.548544], [1437856704.0, 33860000.0, 88.535004], [1437858432.0, 33880000.0, 88.521456], [1437860160.0, 33900000.0, 88.5079], [1437861888.0, 33920000.0, 88.494336], [1437863616.0, 33940000.0, 88.480764], [1437865344.0, 33960000.0, 88.467184], [1437867072.0, 33980000.0, 88.453596], [1437868800.0, 34000000.0, 88.44], [1437870528.0, 34020000.0, 88.426396], [1437872256.0, 34040000.0, 88.412784], [1437873984.0, 34060000.0, 88.399164], [1437875712.0, 34080000.0, 88.385536], [1437877440.0, 34100000.0, 88.3719], [1437879168.0, 34120000.0, 88.358256], [1437880896.0, 34140000.0, 88.344604], [1437882624.0, 34160000.0, 88.330944], [1437884352.0, 34180000.0, 88.31727599999999], [1437886080.0, 34200000.0, 88.3036], [1437887808.0, 34220000.0, 88.289916], [1437889536.0, 34240000.0, 88.276224], [1437891264.0, 34260000.0, 88.262524], [1437892992.0, 34280000.0, 88.248816], [1437894720.0, 34300000.0, 88.2351], [1437896448.0, 34320000.0, 88.221376], [1437898176.0, 34340000.0, 88.207644], [1437899904.0, 34360000.0, 88.193904], [1437901632.0, 34380000.0, 88.180156], [1437903360.0, 34400000.0, 88.1664], [1437905088.0, 34420000.0, 88.152636], [1437906816.0, 34440000.0, 88.138864], [1437908544.0, 34460000.0, 88.125084], [1437910272.0, 34480000.0, 88.111296], [1437912000.0, 34500000.0, 88.0975], [1437913728.0, 34520000.0, 88.083696], [1437915456.0, 34540000.0, 88.069884], [1437917184.0, 34560000.0, 88.056064], [1437918912.0, 34580000.0, 88.042236], [1437920640.0, 34600000.0, 88.0284], [1437922368.0, 34620000.0, 88.014556], [1437924096.0, 34640000.0, 88.000704], [1437925824.0, 34660000.0, 87.98684399999999], [1437927552.0, 34680000.0, 87.972976], [1437929280.0, 34700000.0, 87.9591], [1437931008.0, 34720000.0, 87.945216], [1437932736.0, 34740000.0, 87.931324], [1437934464.0, 34760000.0, 87.917424], [1437936192.0, 34780000.0, 87.903516], [1437937920.0, 34800000.0, 87.8896], [1437939648.0, 34820000.0, 87.875676], [1437941376.0, 34840000.0, 87.861744], [1437943104.0, 34860000.0, 87.847804], [1437944832.0, 34880000.0, 87.833856], [1437946560.0, 34900000.0, 87.8199], [1437948288.0, 34920000.0, 87.805936], [1437950016.0, 34940000.0, 87.791964], [1437951744.0, 34960000.0, 87.777984], [1437953472.0, 34980000.0, 87.76399599999999], [1437955200.0, 35000000.0, 87.75], [1437956928.0, 35020000.0, 87.735996], [1437958656.0, 35040000.0, 87.721984], [1437960384.0, 35060000.0, 87.707964], [1437962112.0, 35080000.0, 87.69393600000001], [1437963840.0, 35100000.0, 87.6799], [1437965568.0, 35120000.0, 87.665856], [1437967296.0, 35140000.0, 87.651804], [1437969024.0, 35160000.0, 87.637744], [1437970752.0, 35180000.0, 87.623676], [1437972480.0, 35200000.0, 87.6096], [1437974208.0, 35220000.0, 87.595516], [1437975936.0, 35240000.0, 87.581424], [1437977664.0, 35260000.0, 87.567324], [1437979392.0, 35280000.0, 87.55321599999999], [1437981120.0, 35300000.0, 87.5391], [1437982848.0, 35320000.0, 87.524976], [1437984576.0, 35340000.0, 87.510844], [1437986304.0, 35360000.0, 87.496704], [1437988032.0, 35380000.0, 87.482556], [1437989760.0, 35400000.0, 87.4684], [1437991488.0, 35420000.0, 87.45423600000001], [1437993216.0, 35440000.0, 87.440064], [1437994944.0, 35460000.0, 87.425884], [1437996672.0, 35480000.0, 87.411696], [1437998400.0, 35500000.0, 87.39750000000001], [1438000128.0, 35520000.0, 87.383296], [1438001856.0, 35540000.0, 87.369084], [1438003584.0, 35560000.0, 87.35486399999999], [1438005312.0, 35580000.0, 87.340636], [1438007040.0, 35600000.0, 87.3264], [1438008768.0, 35620000.0, 87.312156], [1438010496.0, 35640000.0, 87.297904], [1438012224.0, 35660000.0, 87.283644], [1438013952.0, 35680000.0, 87.269376], [1438015680.0, 35700000.0, 87.2551], [1438017408.0, 35720000.0, 87.240816], [1438019136.0, 35740000.0, 87.226524], [1438020864.0, 35760000.0, 87.21222399999999], [1438022592.0, 35780000.0, 87.197916], [1438024320.0, 35800000.0, 87.1836], [1438026048.0, 35820000.0, 87.169276], [1438027776.0, 35840000.0, 87.154944], [1438029504.0, 35860000.0, 87.140604], [1438031232.0, 35880000.0, 87.126256], [1438032960.0, 35900000.0, 87.1119], [1438034688.0, 35920000.0, 87.097536], [1438036416.0, 35940000.0, 87.083164], [1438038144.0, 35960000.0, 87.068784], [1438039872.0, 35980000.0, 87.054396], [1438041600.0, 36000000.0, 87.03999999999999], [1438043328.0, 36020000.0, 87.02559600000001], [1438045056.0, 36040000.0, 87.011184], [1438046784.0, 36060000.0, 86.996764], [1438048512.0, 36080000.0, 86.982336], [1438050240.0, 36100000.0, 86.9679], [1438051968.0, 36120000.0, 86.953456], [1438053696.0, 36140000.0, 86.939004], [1438055424.0, 36160000.0, 86.924544], [1438057152.0, 36180000.0, 86.910076], [1438058880.0, 36200000.0, 86.8956], [1438060608.0, 36220000.0, 86.881116], [1438062336.0, 36240000.0, 86.866624], [1438064064.0, 36260000.0, 86.852124], [1438065792.0, 36280000.0, 86.837616], [1438067520.0, 36300000.0, 86.8231], [1438069248.0, 36320000.0, 86.808576], [1438070976.0, 36340000.0, 86.794044], [1438072704.0, 36360000.0, 86.779504], [1438074432.0, 36380000.0, 86.764956], [1438076160.0, 36400000.0, 86.7504], [1438077888.0, 36420000.0, 86.735836], [1438079616.0, 36440000.0, 86.721264], [1438081344.0, 36460000.0, 86.706684], [1438083072.0, 36480000.0, 86.69209599999999], [1438084800.0, 36500000.0, 86.6775], [1438086528.0, 36520000.0, 86.662896], [1438088256.0, 36540000.0, 86.648284], [1438089984.0, 36560000.0, 86.633664], [1438091712.0, 36580000.0, 86.619036], [1438093440.0, 36600000.0, 86.6044], [1438095168.0, 36620000.0, 86.589756], [1438096896.0, 36640000.0, 86.575104], [1438098624.0, 36660000.0, 86.560444], [1438100352.0, 36680000.0, 86.545776], [1438102080.0, 36700000.0, 86.5311], [1438103808.0, 36720000.0, 86.51641599999999], [1438105536.0, 36740000.0, 86.501724], [1438107264.0, 36760000.0, 86.48702399999999], [1438108992.0, 36780000.0, 86.472316], [1438110720.0, 36800000.0, 86.4576], [1438112448.0, 36820000.0, 86.442876], [1438114176.0, 36840000.0, 86.428144], [1438115904.0, 36860000.0, 86.413404], [1438117632.0, 36880000.0, 86.398656], [1438119360.0, 36900000.0, 86.3839], [1438121088.0, 36920000.0, 86.369136], [1438122816.0, 36940000.0, 86.354364], [1438124544.0, 36960000.0, 86.339584], [1438126272.0, 36980000.0, 86.324796], [1438128000.0, 37000000.0, 86.31], [1438129728.0, 37020000.0, 86.295196], [1438131456.0, 37040000.0, 86.280384], [1438133184.0, 37060000.0, 86.265564], [1438134912.0, 37080000.0, 86.250736], [1438136640.0, 37100000.0, 86.2359], [1438138368.0, 37120000.0, 86.221056], [1438140096.0, 37140000.0, 86.206204], [1438141824.0, 37160000.0, 86.191344], [1438143552.0, 37180000.0, 86.17647600000001], [1438145280.0, 37200000.0, 86.16159999999999], [1438147008.0, 37220000.0, 86.146716], [1438148736.0, 37240000.0, 86.131824], [1438150464.0, 37260000.0, 86.116924], [1438152192.0, 37280000.0, 86.10201599999999], [1438153920.0, 37300000.0, 86.08709999999999], [1438155648.0, 37320000.0, 86.072176], [1438157376.0, 37340000.0, 86.057244], [1438159104.0, 37360000.0, 86.042304], [1438160832.0, 37380000.0, 86.027356], [1438162560.0, 37400000.0, 86.0124], [1438164288.0, 37420000.0, 85.997436], [1438166016.0, 37440000.0, 85.982464], [1438167744.0, 37460000.0, 85.967484], [1438169472.0, 37480000.0, 85.952496], [1438171200.0, 37500000.0, 85.9375], [1438172928.0, 37520000.0, 85.922496], [1438174656.0, 37540000.0, 85.907484], [1438176384.0, 37560000.0, 85.892464], [1438178112.0, 37580000.0, 85.877436], [1438179840.0, 37600000.0, 85.86240000000001], [1438181568.0, 37620000.0, 85.847356], [1438183296.0, 37640000.0, 85.83230400000001], [1438185024.0, 37660000.0, 85.817244], [1438186752.0, 37680000.0, 85.802176], [1438188480.0, 37700000.0, 85.7871], [1438190208.0, 37720000.0, 85.77201600000001], [1438191936.0, 37740000.0, 85.756924], [1438193664.0, 37760000.0, 85.74182400000001], [1438195392.0, 37780000.0, 85.726716], [1438197120.0, 37800000.0, 85.7116], [1438198848.0, 37820000.0, 85.696476], [1438200576.0, 37840000.0, 85.681344], [1438202304.0, 37860000.0, 85.666204], [1438204032.0, 37880000.0, 85.651056], [1438205760.0, 37900000.0, 85.63589999999999], [1438207488.0, 37920000.0, 85.620736], [1438209216.0, 37940000.0, 85.605564], [1438210944.0, 37960000.0, 85.590384], [1438212672.0, 37980000.0, 85.575196], [1438214400.0, 38000000.0, 85.56], [1438216128.0, 38020000.0, 85.544796], [1438217856.0, 38040000.0, 85.529584], [1438219584.0, 38060000.0, 85.514364], [1438221312.0, 38080000.0, 85.49913600000001], [1438223040.0, 38100000.0, 85.4839], [1438224768.0, 38120000.0, 85.468656], [1438226496.0, 38140000.0, 85.453404], [1438228224.0, 38160000.0, 85.438144], [1438229952.0, 38180000.0, 85.422876], [1438231680.0, 38200000.0, 85.4076], [1438233408.0, 38220000.0, 85.392316], [1438235136.0, 38240000.0, 85.377024], [1438236864.0, 38260000.0, 85.361724], [1438238592.0, 38280000.0, 85.346416], [1438240320.0, 38300000.0, 85.33109999999999], [1438242048.0, 38320000.0, 85.315776], [1438243776.0, 38340000.0, 85.300444], [1438245504.0, 38360000.0, 85.285104], [1438247232.0, 38380000.0, 85.269756], [1438248960.0, 38400000.0, 85.2544], [1438250688.0, 38420000.0, 85.239036], [1438252416.0, 38440000.0, 85.223664], [1438254144.0, 38460000.0, 85.20828399999999], [1438255872.0, 38480000.0, 85.192896], [1438257600.0, 38500000.0, 85.1775], [1438259328.0, 38520000.0, 85.162096], [1438261056.0, 38540000.0, 85.146684], [1438262784.0, 38560000.0, 85.131264], [1438264512.0, 38580000.0, 85.115836], [1438266240.0, 38600000.0, 85.10040000000001], [1438267968.0, 38620000.0, 85.084956], [1438269696.0, 38640000.0, 85.069504], [1438271424.0, 38660000.0, 85.054044], [1438273152.0, 38680000.0, 85.038576], [1438274880.0, 38700000.0, 85.0231], [1438276608.0, 38720000.0, 85.007616], [1438278336.0, 38740000.0, 84.992124], [1438280064.0, 38760000.0, 84.976624], [1438281792.0, 38780000.0, 84.961116], [1438283520.0, 38800000.0, 84.9456], [1438285248.0, 38820000.0, 84.930076], [1438286976.0, 38840000.0, 84.914544], [1438288704.0, 38860000.0, 84.899004], [1438290432.0, 38880000.0, 84.883456], [1438292160.0, 38900000.0, 84.86789999999999], [1438293888.0, 38920000.0, 84.85233600000001], [1438295616.0, 38940000.0, 84.836764], [1438297344.0, 38960000.0, 84.821184], [1438299072.0, 38980000.0, 84.805596], [1438300800.0, 39000000.0, 84.79], [1438302528.0, 39020000.0, 84.774396], [1438304256.0, 39040000.0, 84.758784], [1438305984.0, 39060000.0, 84.743164], [1438307712.0, 39080000.0, 84.727536], [1438309440.0, 39100000.0, 84.7119], [1438311168.0, 39120000.0, 84.696256], [1438312896.0, 39140000.0, 84.680604], [1438314624.0, 39160000.0, 84.664944], [1438316352.0, 39180000.0, 84.649276], [1438318080.0, 39200000.0, 84.6336], [1438319808.0, 39220000.0, 84.617916], [1438321536.0, 39240000.0, 84.602224], [1438323264.0, 39260000.0, 84.586524], [1438324992.0, 39280000.0, 84.57081600000001], [1438326720.0, 39300000.0, 84.5551], [1438328448.0, 39320000.0, 84.539376], [1438330176.0, 39340000.0, 84.523644], [1438331904.0, 39360000.0, 84.507904], [1438333632.0, 39380000.0, 84.492156], [1438335360.0, 39400000.0, 84.4764], [1438337088.0, 39420000.0, 84.460636], [1438338816.0, 39440000.0, 84.444864], [1438340544.0, 39460000.0, 84.429084], [1438342272.0, 39480000.0, 84.413296], [1438344000.0, 39500000.0, 84.3975], [1438345728.0, 39520000.0, 84.381696], [1438347456.0, 39540000.0, 84.365884], [1438349184.0, 39560000.0, 84.350064], [1438350912.0, 39580000.0, 84.334236], [1438352640.0, 39600000.0, 84.3184], [1438354368.0, 39620000.0, 84.302556], [1438356096.0, 39640000.0, 84.286704], [1438357824.0, 39660000.0, 84.270844], [1438359552.0, 39680000.0, 84.254976], [1438361280.0, 39700000.0, 84.2391], [1438363008.0, 39720000.0, 84.22321600000001], [1438364736.0, 39740000.0, 84.207324], [1438366464.0, 39760000.0, 84.191424], [1438368192.0, 39780000.0, 84.175516], [1438369920.0, 39800000.0, 84.1596], [1438371648.0, 39820000.0, 84.143676], [1438373376.0, 39840000.0, 84.127744], [1438375104.0, 39860000.0, 84.11180399999999], [1438376832.0, 39880000.0, 84.095856], [1438378560.0, 39900000.0, 84.0799], [1438380288.0, 39920000.0, 84.063936], [1438382016.0, 39940000.0, 84.047964], [1438383744.0, 39960000.0, 84.031984], [1438385472.0, 39980000.0, 84.015996], [1438387200.0, 40000000.0, 84.0], [1438388928.0, 40020000.0, 83.983996], [1438390656.0, 40040000.0, 83.967984], [1438392384.0, 40060000.0, 83.951964], [1438394112.0, 40080000.0, 83.935936], [1438395840.0, 40100000.0, 83.9199], [1438397568.0, 40120000.0, 83.903856], [1438399296.0, 40140000.0, 83.887804], [1438401024.0, 40160000.0, 83.871744], [1438402752.0, 40180000.0, 83.855676], [1438404480.0, 40200000.0, 83.8396], [1438406208.0, 40220000.0, 83.823516], [1438407936.0, 40240000.0, 83.807424], [1438409664.0, 40260000.0, 83.791324], [1438411392.0, 40280000.0, 83.775216], [1438413120.0, 40300000.0, 83.75909999999999], [1438414848.0, 40320000.0, 83.742976], [1438416576.0, 40340000.0, 83.726844], [1438418304.0, 40360000.0, 83.710704], [1438420032.0, 40380000.0, 83.694556], [1438421760.0, 40400000.0, 83.6784], [1438423488.0, 40420000.0, 83.66223600000001], [1438425216.0, 40440000.0, 83.646064], [1438426944.0, 40460000.0, 83.629884], [1438428672.0, 40480000.0, 83.613696], [1438430400.0, 40500000.0, 83.5975], [1438432128.0, 40520000.0, 83.58129600000001], [1438433856.0, 40540000.0, 83.565084], [1438435584.0, 40560000.0, 83.548864], [1438437312.0, 40580000.0, 83.532636], [1438439040.0, 40600000.0, 83.5164], [1438440768.0, 40620000.0, 83.500156], [1438442496.0, 40640000.0, 83.483904], [1438444224.0, 40660000.0, 83.467644], [1438445952.0, 40680000.0, 83.45137600000001], [1438447680.0, 40700000.0, 83.4351], [1438449408.0, 40720000.0, 83.41881599999999], [1438451136.0, 40740000.0, 83.402524], [1438452864.0, 40760000.0, 83.386224], [1438454592.0, 40780000.0, 83.36991599999999], [1438456320.0, 40800000.0, 83.3536], [1438458048.0, 40820000.0, 83.337276], [1438459776.0, 40840000.0, 83.320944], [1438461504.0, 40860000.0, 83.304604], [1438463232.0, 40880000.0, 83.288256], [1438464960.0, 40900000.0, 83.2719], [1438466688.0, 40920000.0, 83.255536], [1438468416.0, 40940000.0, 83.239164], [1438470144.0, 40960000.0, 83.222784], [1438471872.0, 40980000.0, 83.206396], [1438473600.0, 41000000.0, 83.19], [1438475328.0, 41020000.0, 83.173596], [1438477056.0, 41040000.0, 83.157184], [1438478784.0, 41060000.0, 83.140764], [1438480512.0, 41080000.0, 83.124336], [1438482240.0, 41100000.0, 83.1079], [1438483968.0, 41120000.0, 83.091456], [1438485696.0, 41140000.0, 83.075004], [1438487424.0, 41160000.0, 83.058544], [1438489152.0, 41180000.0, 83.042076], [1438490880.0, 41200000.0, 83.0256], [1438492608.0, 41220000.0, 83.009116], [1438494336.0, 41240000.0, 82.992624], [1438496064.0, 41260000.0, 82.976124], [1438497792.0, 41280000.0, 82.959616], [1438499520.0, 41300000.0, 82.9431], [1438501248.0, 41320000.0, 82.92657600000001], [1438502976.0, 41340000.0, 82.910044], [1438504704.0, 41360000.0, 82.89350400000001], [1438506432.0, 41380000.0, 82.876956], [1438508160.0, 41400000.0, 82.8604], [1438509888.0, 41420000.0, 82.843836], [1438511616.0, 41440000.0, 82.827264], [1438513344.0, 41460000.0, 82.81068400000001], [1438515072.0, 41480000.0, 82.794096], [1438516800.0, 41500000.0, 82.7775], [1438518528.0, 41520000.0, 82.760896], [1438520256.0, 41540000.0, 82.744284], [1438521984.0, 41560000.0, 82.727664], [1438523712.0, 41580000.0, 82.711036], [1438525440.0, 41600000.0, 82.6944], [1438527168.0, 41620000.0, 82.677756], [1438528896.0, 41640000.0, 82.661104], [1438530624.0, 41660000.0, 82.644444], [1438532352.0, 41680000.0, 82.627776], [1438534080.0, 41700000.0, 82.6111], [1438535808.0, 41720000.0, 82.594416], [1438537536.0, 41740000.0, 82.57772399999999], [1438539264.0, 41760000.0, 82.561024], [1438540992.0, 41780000.0, 82.54431600000001], [1438542720.0, 41800000.0, 82.5276], [1438544448.0, 41820000.0, 82.510876], [1438546176.0, 41840000.0, 82.494144], [1438547904.0, 41860000.0, 82.477404], [1438549632.0, 41880000.0, 82.460656], [1438551360.0, 41900000.0, 82.4439], [1438553088.0, 41920000.0, 82.42713599999999], [1438554816.0, 41940000.0, 82.410364], [1438556544.0, 41960000.0, 82.393584], [1438558272.0, 41980000.0, 82.376796], [1438560000.0, 42000000.0, 82.36], [1438561728.0, 42020000.0, 82.343196], [1438563456.0, 42040000.0, 82.326384], [1438565184.0, 42060000.0, 82.309564], [1438566912.0, 42080000.0, 82.29273599999999], [1438568640.0, 42100000.0, 82.27590000000001], [1438570368.0, 42120000.0, 82.259056], [1438572096.0, 42140000.0, 82.242204], [1438573824.0, 42160000.0, 82.225344], [1438575552.0, 42180000.0, 82.208476], [1438577280.0, 42200000.0, 82.1916], [1438579008.0, 42220000.0, 82.17471599999999], [1438580736.0, 42240000.0, 82.157824], [1438582464.0, 42260000.0, 82.140924], [1438584192.0, 42280000.0, 82.124016], [1438585920.0, 42300000.0, 82.1071], [1438587648.0, 42320000.0, 82.090176], [1438589376.0, 42340000.0, 82.073244], [1438591104.0, 42360000.0, 82.056304], [1438592832.0, 42380000.0, 82.039356], [1438594560.0, 42400000.0, 82.0224], [1438596288.0, 42420000.0, 82.005436], [1438598016.0, 42440000.0, 81.988464], [1438599744.0, 42460000.0, 81.971484], [1438601472.0, 42480000.0, 81.954496], [1438603200.0, 42500000.0, 81.9375], [1438604928.0, 42520000.0, 81.920496], [1438606656.0, 42540000.0, 81.903484], [1438608384.0, 42560000.0, 81.88646399999999], [1438610112.0, 42580000.0, 81.86943600000001], [1438611840.0, 42600000.0, 81.8524], [1438613568.0, 42620000.0, 81.835356], [1438615296.0, 42640000.0, 81.818304], [1438617024.0, 42660000.0, 81.801244], [1438618752.0, 42680000.0, 81.784176], [1438620480.0, 42700000.0, 81.7671], [1438622208.0, 42720000.0, 81.750016], [1438623936.0, 42740000.0, 81.732924], [1438625664.0, 42760000.0, 81.715824], [1438627392.0, 42780000.0, 81.698716], [1438629120.0, 42800000.0, 81.6816], [1438630848.0, 42820000.0, 81.66447600000001], [1438632576.0, 42840000.0, 81.647344], [1438634304.0, 42860000.0, 81.630204], [1438636032.0, 42880000.0, 81.613056], [1438637760.0, 42900000.0, 81.5959], [1438639488.0, 42920000.0, 81.578736], [1438641216.0, 42940000.0, 81.561564], [1438642944.0, 42960000.0, 81.544384], [1438644672.0, 42980000.0, 81.527196], [1438646400.0, 43000000.0, 81.51], [1438648128.0, 43020000.0, 81.492796], [1438649856.0, 43040000.0, 81.475584], [1438651584.0, 43060000.0, 81.458364], [1438653312.0, 43080000.0, 81.441136], [1438655040.0, 43100000.0, 81.4239], [1438656768.0, 43120000.0, 81.406656], [1438658496.0, 43140000.0, 81.389404], [1438660224.0, 43160000.0, 81.372144], [1438661952.0, 43180000.0, 81.354876], [1438663680.0, 43200000.0, 81.3376], [1438665408.0, 43220000.0, 81.32031599999999], [1438667136.0, 43240000.0, 81.303024], [1438668864.0, 43260000.0, 81.285724], [1438670592.0, 43280000.0, 81.268416], [1438672320.0, 43300000.0, 81.25110000000001], [1438674048.0, 43320000.0, 81.233776], [1438675776.0, 43340000.0, 81.216444], [1438677504.0, 43360000.0, 81.199104], [1438679232.0, 43380000.0, 81.18175600000001], [1438680960.0, 43400000.0, 81.1644], [1438682688.0, 43420000.0, 81.147036], [1438684416.0, 43440000.0, 81.12966399999999], [1438686144.0, 43460000.0, 81.112284], [1438687872.0, 43480000.0, 81.094896], [1438689600.0, 43500000.0, 81.0775], [1438691328.0, 43520000.0, 81.060096], [1438693056.0, 43540000.0, 81.042684], [1438694784.0, 43560000.0, 81.02526399999999], [1438696512.0, 43580000.0, 81.007836], [1438698240.0, 43600000.0, 80.9904], [1438699968.0, 43620000.0, 80.972956], [1438701696.0, 43640000.0, 80.955504], [1438703424.0, 43660000.0, 80.938044], [1438705152.0, 43680000.0, 80.920576], [1438706880.0, 43700000.0, 80.9031], [1438708608.0, 43720000.0, 80.885616], [1438710336.0, 43740000.0, 80.868124], [1438712064.0, 43760000.0, 80.850624], [1438713792.0, 43780000.0, 80.833116], [1438715520.0, 43800000.0, 80.8156], [1438717248.0, 43820000.0, 80.79807600000001], [1438718976.0, 43840000.0, 80.78054399999999], [1438720704.0, 43860000.0, 80.763004], [1438722432.0, 43880000.0, 80.745456], [1438724160.0, 43900000.0, 80.7279], [1438725888.0, 43920000.0, 80.710336], [1438727616.0, 43940000.0, 80.692764], [1438729344.0, 43960000.0, 80.675184], [1438731072.0, 43980000.0, 80.657596], [1438732800.0, 44000000.0, 80.64], [1438734528.0, 44020000.0, 80.622396], [1438736256.0, 44040000.0, 80.604784], [1438737984.0, 44060000.0, 80.587164], [1438739712.0, 44080000.0, 80.569536], [1438741440.0, 44100000.0, 80.5519], [1438743168.0, 44120000.0, 80.534256], [1438744896.0, 44140000.0, 80.516604], [1438746624.0, 44160000.0, 80.498944], [1438748352.0, 44180000.0, 80.481276], [1438750080.0, 44200000.0, 80.4636], [1438751808.0, 44220000.0, 80.44591600000001], [1438753536.0, 44240000.0, 80.428224], [1438755264.0, 44260000.0, 80.410524], [1438756992.0, 44280000.0, 80.392816], [1438758720.0, 44300000.0, 80.3751], [1438760448.0, 44320000.0, 80.35737599999999], [1438762176.0, 44340000.0, 80.33964399999999], [1438763904.0, 44360000.0, 80.321904], [1438765632.0, 44380000.0, 80.304156], [1438767360.0, 44400000.0, 80.2864], [1438769088.0, 44420000.0, 80.268636], [1438770816.0, 44440000.0, 80.250864], [1438772544.0, 44460000.0, 80.233084], [1438774272.0, 44480000.0, 80.215296], [1438776000.0, 44500000.0, 80.19749999999999], [1438777728.0, 44520000.0, 80.179696], [1438779456.0, 44540000.0, 80.161884], [1438781184.0, 44560000.0, 80.144064], [1438782912.0, 44580000.0, 80.126236], [1438784640.0, 44600000.0, 80.1084], [1438786368.0, 44620000.0, 80.090556], [1438788096.0, 44640000.0, 80.07270399999999], [1438789824.0, 44660000.0, 80.054844], [1438791552.0, 44680000.0, 80.036976], [1438793280.0, 44700000.0, 80.01910000000001], [1438795008.0, 44720000.0, 80.001216], [1438796736.0, 44740000.0, 79.983324], [1438798464.0, 44760000.0, 79.965424], [1438800192.0, 44780000.0, 79.94751600000001], [1438801920.0, 44800000.0, 79.9296], [1438803648.0, 44820000.0, 79.911676], [1438805376.0, 44840000.0, 79.893744], [1438807104.0, 44860000.0, 79.875804], [1438808832.0, 44880000.0, 79.857856], [1438810560.0, 44900000.0, 79.8399], [1438812288.0, 44920000.0, 79.821936], [1438814016.0, 44940000.0, 79.80396400000001], [1438815744.0, 44960000.0, 79.785984], [1438817472.0, 44980000.0, 79.767996], [1438819200.0, 45000000.0, 79.75], [1438820928.0, 45020000.0, 79.73199600000001], [1438822656.0, 45040000.0, 79.71398400000001], [1438824384.0, 45060000.0, 79.695964], [1438826112.0, 45080000.0, 79.677936], [1438827840.0, 45100000.0, 79.6599], [1438829568.0, 45120000.0, 79.641856], [1438831296.0, 45140000.0, 79.62380399999999], [1438833024.0, 45160000.0, 79.605744], [1438834752.0, 45180000.0, 79.587676], [1438836480.0, 45200000.0, 79.56960000000001], [1438838208.0, 45220000.0, 79.55151599999999], [1438839936.0, 45240000.0, 79.533424], [1438841664.0, 45260000.0, 79.515324], [1438843392.0, 45280000.0, 79.49721600000001], [1438845120.0, 45300000.0, 79.4791], [1438846848.0, 45320000.0, 79.460976], [1438848576.0, 45340000.0, 79.44284400000001], [1438850304.0, 45360000.0, 79.424704], [1438852032.0, 45380000.0, 79.406556], [1438853760.0, 45400000.0, 79.3884], [1438855488.0, 45420000.0, 79.370236], [1438857216.0, 45440000.0, 79.352064], [1438858944.0, 45460000.0, 79.333884], [1438860672.0, 45480000.0, 79.315696], [1438862400.0, 45500000.0, 79.2975], [1438864128.0, 45520000.0, 79.279296], [1438865856.0, 45540000.0, 79.261084], [1438867584.0, 45560000.0, 79.242864], [1438869312.0, 45580000.0, 79.224636], [1438871040.0, 45600000.0, 79.2064], [1438872768.0, 45620000.0, 79.18815599999999], [1438874496.0, 45640000.0, 79.169904], [1438876224.0, 45660000.0, 79.151644], [1438877952.0, 45680000.0, 79.133376], [1438879680.0, 45700000.0, 79.1151], [1438881408.0, 45720000.0, 79.096816], [1438883136.0, 45740000.0, 79.078524], [1438884864.0, 45760000.0, 79.060224], [1438886592.0, 45780000.0, 79.041916], [1438888320.0, 45800000.0, 79.0236], [1438890048.0, 45820000.0, 79.00527600000001], [1438891776.0, 45840000.0, 78.98694400000001], [1438893504.0, 45860000.0, 78.968604], [1438895232.0, 45880000.0, 78.950256], [1438896960.0, 45900000.0, 78.9319], [1438898688.0, 45920000.0, 78.91353600000001], [1438900416.0, 45940000.0, 78.895164], [1438902144.0, 45960000.0, 78.876784], [1438903872.0, 45980000.0, 78.858396], [1438905600.0, 46000000.0, 78.84], [1438907328.0, 46020000.0, 78.821596], [1438909056.0, 46040000.0, 78.803184], [1438910784.0, 46060000.0, 78.784764], [1438912512.0, 46080000.0, 78.766336], [1438914240.0, 46100000.0, 78.7479], [1438915968.0, 46120000.0, 78.729456], [1438917696.0, 46140000.0, 78.711004], [1438919424.0, 46160000.0, 78.692544], [1438921152.0, 46180000.0, 78.674076], [1438922880.0, 46200000.0, 78.65559999999999], [1438924608.0, 46220000.0, 78.637116], [1438926336.0, 46240000.0, 78.61862400000001], [1438928064.0, 46260000.0, 78.600124], [1438929792.0, 46280000.0, 78.581616], [1438931520.0, 46300000.0, 78.5631], [1438933248.0, 46320000.0, 78.544576], [1438934976.0, 46340000.0, 78.526044], [1438936704.0, 46360000.0, 78.507504], [1438938432.0, 46380000.0, 78.488956], [1438940160.0, 46400000.0, 78.4704], [1438941888.0, 46420000.0, 78.451836], [1438943616.0, 46440000.0, 78.433264], [1438945344.0, 46460000.0, 78.414684], [1438947072.0, 46480000.0, 78.396096], [1438948800.0, 46500000.0, 78.3775], [1438950528.0, 46520000.0, 78.358896], [1438952256.0, 46540000.0, 78.340284], [1438953984.0, 46560000.0, 78.321664], [1438955712.0, 46580000.0, 78.30303599999999], [1438957440.0, 46600000.0, 78.2844], [1438959168.0, 46620000.0, 78.265756], [1438960896.0, 46640000.0, 78.24710400000001], [1438962624.0, 46660000.0, 78.228444], [1438964352.0, 46680000.0, 78.209776], [1438966080.0, 46700000.0, 78.1911], [1438967808.0, 46720000.0, 78.172416], [1438969536.0, 46740000.0, 78.153724], [1438971264.0, 46760000.0, 78.135024], [1438972992.0, 46780000.0, 78.116316], [1438974720.0, 46800000.0, 78.0976], [1438976448.0, 46820000.0, 78.078876], [1438978176.0, 46840000.0, 78.060144], [1438979904.0, 46860000.0, 78.041404], [1438981632.0, 46880000.0, 78.022656], [1438983360.0, 46900000.0, 78.0039], [1438985088.0, 46920000.0, 77.985136], [1438986816.0, 46940000.0, 77.966364], [1438988544.0, 46960000.0, 77.947584], [1438990272.0, 46980000.0, 77.92879599999999], [1438992000.0, 47000000.0, 77.91], [1438993728.0, 47020000.0, 77.89119600000001], [1438995456.0, 47040000.0, 77.87238400000001], [1438997184.0, 47060000.0, 77.85356399999999], [1438998912.0, 47080000.0, 77.83473599999999], [1439000640.0, 47100000.0, 77.8159], [1439002368.0, 47120000.0, 77.797056], [1439004096.0, 47140000.0, 77.77820399999999], [1439005824.0, 47160000.0, 77.759344], [1439007552.0, 47180000.0, 77.740476], [1439009280.0, 47200000.0, 77.7216], [1439011008.0, 47220000.0, 77.702716], [1439012736.0, 47240000.0, 77.683824], [1439014464.0, 47260000.0, 77.664924], [1439016192.0, 47280000.0, 77.646016], [1439017920.0, 47300000.0, 77.6271], [1439019648.0, 47320000.0, 77.608176], [1439021376.0, 47340000.0, 77.58924400000001], [1439023104.0, 47360000.0, 77.57030400000001], [1439024832.0, 47380000.0, 77.551356], [1439026560.0, 47400000.0, 77.5324], [1439028288.0, 47420000.0, 77.513436], [1439030016.0, 47440000.0, 77.494464], [1439031744.0, 47460000.0, 77.475484], [1439033472.0, 47480000.0, 77.456496], [1439035200.0, 47500000.0, 77.4375], [1439036928.0, 47520000.0, 77.418496], [1439038656.0, 47540000.0, 77.399484], [1439040384.0, 47560000.0, 77.38046399999999], [1439042112.0, 47580000.0, 77.361436], [1439043840.0, 47600000.0, 77.3424], [1439045568.0, 47620000.0, 77.323356], [1439047296.0, 47640000.0, 77.304304], [1439049024.0, 47660000.0, 77.285244], [1439050752.0, 47680000.0, 77.266176], [1439052480.0, 47700000.0, 77.2471], [1439054208.0, 47720000.0, 77.228016], [1439055936.0, 47740000.0, 77.208924], [1439057664.0, 47760000.0, 77.189824], [1439059392.0, 47780000.0, 77.170716], [1439061120.0, 47800000.0, 77.1516], [1439062848.0, 47820000.0, 77.132476], [1439064576.0, 47840000.0, 77.113344], [1439066304.0, 47860000.0, 77.094204], [1439068032.0, 47880000.0, 77.07505599999999], [1439069760.0, 47900000.0, 77.05590000000001], [1439071488.0, 47920000.0, 77.036736], [1439073216.0, 47940000.0, 77.01756400000001], [1439074944.0, 47960000.0, 76.998384], [1439076672.0, 47980000.0, 76.979196], [1439078400.0, 48000000.0, 76.96000000000001], [1439080128.0, 48020000.0, 76.940796], [1439081856.0, 48040000.0, 76.921584], [1439083584.0, 48060000.0, 76.902364], [1439085312.0, 48080000.0, 76.88313600000001], [1439087040.0, 48100000.0, 76.8639], [1439088768.0, 48120000.0, 76.844656], [1439090496.0, 48140000.0, 76.82540399999999], [1439092224.0, 48160000.0, 76.806144], [1439093952.0, 48180000.0, 76.786876], [1439095680.0, 48200000.0, 76.7676], [1439097408.0, 48220000.0, 76.748316], [1439099136.0, 48240000.0, 76.72902400000001], [1439100864.0, 48260000.0, 76.70972400000001], [1439102592.0, 48280000.0, 76.690416], [1439104320.0, 48300000.0, 76.6711], [1439106048.0, 48320000.0, 76.651776], [1439107776.0, 48340000.0, 76.632444], [1439109504.0, 48360000.0, 76.61310399999999], [1439111232.0, 48380000.0, 76.593756], [1439112960.0, 48400000.0, 76.5744], [1439114688.0, 48420000.0, 76.555036], [1439116416.0, 48440000.0, 76.535664], [1439118144.0, 48460000.0, 76.516284], [1439119872.0, 48480000.0, 76.49689599999999], [1439121600.0, 48500000.0, 76.4775], [1439123328.0, 48520000.0, 76.458096], [1439125056.0, 48540000.0, 76.438684], [1439126784.0, 48560000.0, 76.419264], [1439128512.0, 48580000.0, 76.39983600000001], [1439130240.0, 48600000.0, 76.3804], [1439131968.0, 48620000.0, 76.360956], [1439133696.0, 48640000.0, 76.341504], [1439135424.0, 48660000.0, 76.322044], [1439137152.0, 48680000.0, 76.302576], [1439138880.0, 48700000.0, 76.28309999999999], [1439140608.0, 48720000.0, 76.263616], [1439142336.0, 48740000.0, 76.244124], [1439144064.0, 48760000.0, 76.22462399999999], [1439145792.0, 48780000.0, 76.205116], [1439147520.0, 48800000.0, 76.1856], [1439149248.0, 48820000.0, 76.166076], [1439150976.0, 48840000.0, 76.14654399999999], [1439152704.0, 48860000.0, 76.127004], [1439154432.0, 48880000.0, 76.107456], [1439156160.0, 48900000.0, 76.0879], [1439157888.0, 48920000.0, 76.06833599999999], [1439159616.0, 48940000.0, 76.048764], [1439161344.0, 48960000.0, 76.029184], [1439163072.0, 48980000.0, 76.009596], [1439164800.0, 49000000.0, 75.99], [1439166528.0, 49020000.0, 75.970396], [1439168256.0, 49040000.0, 75.950784], [1439169984.0, 49060000.0, 75.931164], [1439171712.0, 49080000.0, 75.911536], [1439173440.0, 49100000.0, 75.89189999999999], [1439175168.0, 49120000.0, 75.872256], [1439176896.0, 49140000.0, 75.852604], [1439178624.0, 49160000.0, 75.832944], [1439180352.0, 49180000.0, 75.813276], [1439182080.0, 49200000.0, 75.7936], [1439183808.0, 49220000.0, 75.773916], [1439185536.0, 49240000.0, 75.754224], [1439187264.0, 49260000.0, 75.734524], [1439188992.0, 49280000.0, 75.714816], [1439190720.0, 49300000.0, 75.6951], [1439192448.0, 49320000.0, 75.675376], [1439194176.0, 49340000.0, 75.655644], [1439195904.0, 49360000.0, 75.635904], [1439197632.0, 49380000.0, 75.616156], [1439199360.0, 49400000.0, 75.59639999999999], [1439201088.0, 49420000.0, 75.576636], [1439202816.0, 49440000.0, 75.556864], [1439204544.0, 49460000.0, 75.53708400000001], [1439206272.0, 49480000.0, 75.51729599999999], [1439208000.0, 49500000.0, 75.4975], [1439209728.0, 49520000.0, 75.47769600000001], [1439211456.0, 49540000.0, 75.457884], [1439213184.0, 49560000.0, 75.438064], [1439214912.0, 49580000.0, 75.418236], [1439216640.0, 49600000.0, 75.3984], [1439218368.0, 49620000.0, 75.378556], [1439220096.0, 49640000.0, 75.35870399999999], [1439221824.0, 49660000.0, 75.338844], [1439223552.0, 49680000.0, 75.31897599999999], [1439225280.0, 49700000.0, 75.29910000000001], [1439227008.0, 49720000.0, 75.27921599999999], [1439228736.0, 49740000.0, 75.25932399999999], [1439230464.0, 49760000.0, 75.239424], [1439232192.0, 49780000.0, 75.219516], [1439233920.0, 49800000.0, 75.1996], [1439235648.0, 49820000.0, 75.179676], [1439237376.0, 49840000.0, 75.159744], [1439239104.0, 49860000.0, 75.139804], [1439240832.0, 49880000.0, 75.119856], [1439242560.0, 49900000.0, 75.09989999999999], [1439244288.0, 49920000.0, 75.079936], [1439246016.0, 49940000.0, 75.05996400000001], [1439247744.0, 49960000.0, 75.039984], [1439249472.0, 49980000.0, 75.01999599999999], [1439251200.0, 50000000.0, 75.0], [1439252928.0, 50020000.0, 74.979996], [1439254656.0, 50040000.0, 74.959984], [1439256384.0, 50060000.0, 74.939964], [1439258112.0, 50080000.0, 74.919936], [1439259840.0, 50100000.0, 74.8999], [1439261568.0, 50120000.0, 74.879856], [1439263296.0, 50140000.0, 74.859804], [1439265024.0, 50160000.0, 74.839744], [1439266752.0, 50180000.0, 74.819676], [1439268480.0, 50200000.0, 74.7996], [1439270208.0, 50220000.0, 74.779516], [1439271936.0, 50240000.0, 74.759424], [1439273664.0, 50260000.0, 74.73932400000001], [1439275392.0, 50280000.0, 74.719216], [1439277120.0, 50300000.0, 74.6991], [1439278848.0, 50320000.0, 74.678976], [1439280576.0, 50340000.0, 74.658844], [1439282304.0, 50360000.0, 74.638704], [1439284032.0, 50380000.0, 74.618556], [1439285760.0, 50400000.0, 74.5984], [1439287488.0, 50420000.0, 74.578236], [1439289216.0, 50440000.0, 74.558064], [1439290944.0, 50460000.0, 74.53788399999999], [1439292672.0, 50480000.0, 74.517696], [1439294400.0, 50500000.0, 74.4975], [1439296128.0, 50520000.0, 74.477296], [1439297856.0, 50540000.0, 74.457084], [1439299584.0, 50560000.0, 74.436864], [1439301312.0, 50580000.0, 74.416636], [1439303040.0, 50600000.0, 74.3964], [1439304768.0, 50620000.0, 74.376156], [1439306496.0, 50640000.0, 74.355904], [1439308224.0, 50660000.0, 74.335644], [1439309952.0, 50680000.0, 74.315376], [1439311680.0, 50700000.0, 74.29509999999999], [1439313408.0, 50720000.0, 74.274816], [1439315136.0, 50740000.0, 74.254524], [1439316864.0, 50760000.0, 74.23422400000001], [1439318592.0, 50780000.0, 74.213916], [1439320320.0, 50800000.0, 74.1936], [1439322048.0, 50820000.0, 74.173276], [1439323776.0, 50840000.0, 74.152944], [1439325504.0, 50860000.0, 74.132604], [1439327232.0, 50880000.0, 74.112256], [1439328960.0, 50900000.0, 74.09190000000001], [1439330688.0, 50920000.0, 74.07153600000001], [1439332416.0, 50940000.0, 74.051164], [1439334144.0, 50960000.0, 74.030784], [1439335872.0, 50980000.0, 74.010396], [1439337600.0, 51000000.0, 73.99000000000001], [1439339328.0, 51020000.0, 73.969596], [1439341056.0, 51040000.0, 73.949184], [1439342784.0, 51060000.0, 73.928764], [1439344512.0, 51080000.0, 73.908336], [1439346240.0, 51100000.0, 73.8879], [1439347968.0, 51120000.0, 73.867456], [1439349696.0, 51140000.0, 73.847004], [1439351424.0, 51160000.0, 73.826544], [1439353152.0, 51180000.0, 73.80607599999999], [1439354880.0, 51200000.0, 73.7856], [1439356608.0, 51220000.0, 73.765116], [1439358336.0, 51240000.0, 73.744624], [1439360064.0, 51260000.0, 73.72412399999999], [1439361792.0, 51280000.0, 73.703616], [1439363520.0, 51300000.0, 73.6831], [1439365248.0, 51320000.0, 73.662576], [1439366976.0, 51340000.0, 73.642044], [1439368704.0, 51360000.0, 73.621504], [1439370432.0, 51380000.0, 73.600956], [1439372160.0, 51400000.0, 73.5804], [1439373888.0, 51420000.0, 73.55983599999999], [1439375616.0, 51440000.0, 73.539264], [1439377344.0, 51460000.0, 73.51868400000001], [1439379072.0, 51480000.0, 73.498096], [1439380800.0, 51500000.0, 73.47749999999999], [1439382528.0, 51520000.0, 73.456896], [1439384256.0, 51540000.0, 73.436284], [1439385984.0, 51560000.0, 73.415664], [1439387712.0, 51580000.0, 73.395036], [1439389440.0, 51600000.0, 73.3744], [1439391168.0, 51620000.0, 73.353756], [1439392896.0, 51640000.0, 73.333104], [1439394624.0, 51660000.0, 73.312444], [1439396352.0, 51680000.0, 73.291776], [1439398080.0, 51700000.0, 73.2711], [1439399808.0, 51720000.0, 73.250416], [1439401536.0, 51740000.0, 73.229724], [1439403264.0, 51760000.0, 73.209024], [1439404992.0, 51780000.0, 73.188316], [1439406720.0, 51800000.0, 73.16760000000001], [1439408448.0, 51820000.0, 73.14687599999999], [1439410176.0, 51840000.0, 73.126144], [1439411904.0, 51860000.0, 73.105404], [1439413632.0, 51880000.0, 73.084656], [1439415360.0, 51900000.0, 73.06389999999999], [1439417088.0, 51920000.0, 73.043136], [1439418816.0, 51940000.0, 73.022364], [1439420544.0, 51960000.0, 73.00158400000001], [1439422272.0, 51980000.0, 72.980796], [1439424000.0, 52000000.0, 72.96], [1439425728.0, 52020000.0, 72.939196], [1439427456.0, 52040000.0, 72.918384], [1439429184.0, 52060000.0, 72.89756399999999], [1439430912.0, 52080000.0, 72.876736], [1439432640.0, 52100000.0, 72.8559], [1439434368.0, 52120000.0, 72.83505600000001], [1439436096.0, 52140000.0, 72.81420399999999], [1439437824.0, 52160000.0, 72.79334399999999], [1439439552.0, 52180000.0, 72.772476], [1439441280.0, 52200000.0, 72.7516], [1439443008.0, 52220000.0, 72.730716], [1439444736.0, 52240000.0, 72.709824], [1439446464.0, 52260000.0, 72.688924], [1439448192.0, 52280000.0, 72.668016], [1439449920.0, 52300000.0, 72.6471], [1439451648.0, 52320000.0, 72.626176], [1439453376.0, 52340000.0, 72.605244], [1439455104.0, 52360000.0, 72.584304], [1439456832.0, 52380000.0, 72.563356], [1439458560.0, 52400000.0, 72.5424], [1439460288.0, 52420000.0, 72.521436], [1439462016.0, 52440000.0, 72.500464], [1439463744.0, 52460000.0, 72.479484], [1439465472.0, 52480000.0, 72.458496], [1439467200.0, 52500000.0, 72.4375], [1439468928.0, 52520000.0, 72.416496], [1439470656.0, 52540000.0, 72.39548400000001], [1439472384.0, 52560000.0, 72.37446399999999], [1439474112.0, 52580000.0, 72.353436], [1439475840.0, 52600000.0, 72.3324], [1439477568.0, 52620000.0, 72.311356], [1439479296.0, 52640000.0, 72.29030399999999], [1439481024.0, 52660000.0, 72.269244], [1439482752.0, 52680000.0, 72.248176], [1439484480.0, 52700000.0, 72.22710000000001], [1439486208.0, 52720000.0, 72.206016], [1439487936.0, 52740000.0, 72.184924], [1439489664.0, 52760000.0, 72.163824], [1439491392.0, 52780000.0, 72.14271600000001], [1439493120.0, 52800000.0, 72.1216], [1439494848.0, 52820000.0, 72.100476], [1439496576.0, 52840000.0, 72.079344], [1439498304.0, 52860000.0, 72.058204], [1439500032.0, 52880000.0, 72.03705599999999], [1439501760.0, 52900000.0, 72.0159], [1439503488.0, 52920000.0, 71.994736], [1439505216.0, 52940000.0, 71.97356400000001], [1439506944.0, 52960000.0, 71.952384], [1439508672.0, 52980000.0, 71.931196], [1439510400.0, 53000000.0, 71.91], [1439512128.0, 53020000.0, 71.888796], [1439513856.0, 53040000.0, 71.867584], [1439515584.0, 53060000.0, 71.846364], [1439517312.0, 53080000.0, 71.825136], [1439519040.0, 53100000.0, 71.8039], [1439520768.0, 53120000.0, 71.782656], [1439522496.0, 53140000.0, 71.761404], [1439524224.0, 53160000.0, 71.740144], [1439525952.0, 53180000.0, 71.71887600000001], [1439527680.0, 53200000.0, 71.6976], [1439529408.0, 53220000.0, 71.676316], [1439531136.0, 53240000.0, 71.655024], [1439532864.0, 53260000.0, 71.633724], [1439534592.0, 53280000.0, 71.612416], [1439536320.0, 53300000.0, 71.5911], [1439538048.0, 53320000.0, 71.569776], [1439539776.0, 53340000.0, 71.548444], [1439541504.0, 53360000.0, 71.527104], [1439543232.0, 53380000.0, 71.50575599999999], [1439544960.0, 53400000.0, 71.4844], [1439546688.0, 53420000.0, 71.463036], [1439548416.0, 53440000.0, 71.441664], [1439550144.0, 53460000.0, 71.420284], [1439551872.0, 53480000.0, 71.39889600000001], [1439553600.0, 53500000.0, 71.3775], [1439555328.0, 53520000.0, 71.356096], [1439557056.0, 53540000.0, 71.334684], [1439558784.0, 53560000.0, 71.313264], [1439560512.0, 53580000.0, 71.291836], [1439562240.0, 53600000.0, 71.2704], [1439563968.0, 53620000.0, 71.24895599999999], [1439565696.0, 53640000.0, 71.227504], [1439567424.0, 53660000.0, 71.206044], [1439569152.0, 53680000.0, 71.18457599999999], [1439570880.0, 53700000.0, 71.1631], [1439572608.0, 53720000.0, 71.141616], [1439574336.0, 53740000.0, 71.120124], [1439576064.0, 53760000.0, 71.098624], [1439577792.0, 53780000.0, 71.077116], [1439579520.0, 53800000.0, 71.0556], [1439581248.0, 53820000.0, 71.034076], [1439582976.0, 53840000.0, 71.01254399999999], [1439584704.0, 53860000.0, 70.991004], [1439586432.0, 53880000.0, 70.96945600000001], [1439588160.0, 53900000.0, 70.9479], [1439589888.0, 53920000.0, 70.92633599999999], [1439591616.0, 53940000.0, 70.904764], [1439593344.0, 53960000.0, 70.883184], [1439595072.0, 53980000.0, 70.861596], [1439596800.0, 54000000.0, 70.84], [1439598528.0, 54020000.0, 70.818396], [1439600256.0, 54040000.0, 70.796784], [1439601984.0, 54060000.0, 70.775164], [1439603712.0, 54080000.0, 70.753536], [1439605440.0, 54100000.0, 70.7319], [1439607168.0, 54120000.0, 70.710256], [1439608896.0, 54140000.0, 70.688604], [1439610624.0, 54160000.0, 70.666944], [1439612352.0, 54180000.0, 70.645276], [1439614080.0, 54200000.0, 70.6236], [1439615808.0, 54220000.0, 70.601916], [1439617536.0, 54240000.0, 70.580224], [1439619264.0, 54260000.0, 70.558524], [1439620992.0, 54280000.0, 70.536816], [1439622720.0, 54300000.0, 70.5151], [1439624448.0, 54320000.0, 70.493376], [1439626176.0, 54340000.0, 70.471644], [1439627904.0, 54360000.0, 70.449904], [1439629632.0, 54380000.0, 70.428156], [1439631360.0, 54400000.0, 70.40639999999999], [1439633088.0, 54420000.0, 70.384636], [1439634816.0, 54440000.0, 70.362864], [1439636544.0, 54460000.0, 70.341084], [1439638272.0, 54480000.0, 70.319296], [1439640000.0, 54500000.0, 70.2975], [1439641728.0, 54520000.0, 70.275696], [1439643456.0, 54540000.0, 70.253884], [1439645184.0, 54560000.0, 70.232064], [1439646912.0, 54580000.0, 70.210236], [1439648640.0, 54600000.0, 70.1884], [1439650368.0, 54620000.0, 70.166556], [1439652096.0, 54640000.0, 70.14470399999999], [1439653824.0, 54660000.0, 70.122844], [1439655552.0, 54680000.0, 70.100976], [1439657280.0, 54700000.0, 70.07910000000001], [1439659008.0, 54720000.0, 70.057216], [1439660736.0, 54740000.0, 70.035324], [1439662464.0, 54760000.0, 70.013424], [1439664192.0, 54780000.0, 69.991516], [1439665920.0, 54800000.0, 69.9696], [1439667648.0, 54820000.0, 69.947676], [1439669376.0, 54840000.0, 69.92574400000001], [1439671104.0, 54860000.0, 69.90380400000001], [1439672832.0, 54880000.0, 69.881856], [1439674560.0, 54900000.0, 69.8599], [1439676288.0, 54920000.0, 69.837936], [1439678016.0, 54940000.0, 69.81596400000001], [1439679744.0, 54960000.0, 69.793984], [1439681472.0, 54980000.0, 69.771996], [1439683200.0, 55000000.0, 69.75], [1439684928.0, 55020000.0, 69.727996], [1439686656.0, 55040000.0, 69.705984], [1439688384.0, 55060000.0, 69.683964], [1439690112.0, 55080000.0, 69.661936], [1439691840.0, 55100000.0, 69.6399], [1439693568.0, 55120000.0, 69.617856], [1439695296.0, 55140000.0, 69.595804], [1439697024.0, 55160000.0, 69.573744], [1439698752.0, 55180000.0, 69.551676], [1439700480.0, 55200000.0, 69.5296], [1439702208.0, 55220000.0, 69.507516], [1439703936.0, 55240000.0, 69.485424], [1439705664.0, 55260000.0, 69.463324], [1439707392.0, 55280000.0, 69.441216], [1439709120.0, 55300000.0, 69.4191], [1439710848.0, 55320000.0, 69.396976], [1439712576.0, 55340000.0, 69.374844], [1439714304.0, 55360000.0, 69.352704], [1439716032.0, 55380000.0, 69.330556], [1439717760.0, 55400000.0, 69.3084], [1439719488.0, 55420000.0, 69.286236], [1439721216.0, 55440000.0, 69.264064], [1439722944.0, 55460000.0, 69.241884], [1439724672.0, 55480000.0, 69.219696], [1439726400.0, 55500000.0, 69.1975], [1439728128.0, 55520000.0, 69.175296], [1439729856.0, 55540000.0, 69.15308399999999], [1439731584.0, 55560000.0, 69.130864], [1439733312.0, 55580000.0, 69.108636], [1439735040.0, 55600000.0, 69.0864], [1439736768.0, 55620000.0, 69.064156], [1439738496.0, 55640000.0, 69.041904], [1439740224.0, 55660000.0, 69.019644], [1439741952.0, 55680000.0, 68.997376], [1439743680.0, 55700000.0, 68.9751], [1439745408.0, 55720000.0, 68.952816], [1439747136.0, 55740000.0, 68.930524], [1439748864.0, 55760000.0, 68.908224], [1439750592.0, 55780000.0, 68.885916], [1439752320.0, 55800000.0, 68.86359999999999], [1439754048.0, 55820000.0, 68.841276], [1439755776.0, 55840000.0, 68.818944], [1439757504.0, 55860000.0, 68.796604], [1439759232.0, 55880000.0, 68.774256], [1439760960.0, 55900000.0, 68.7519], [1439762688.0, 55920000.0, 68.729536], [1439764416.0, 55940000.0, 68.70716399999999], [1439766144.0, 55960000.0, 68.68478400000001], [1439767872.0, 55980000.0, 68.662396], [1439769600.0, 56000000.0, 68.64], [1439771328.0, 56020000.0, 68.61759599999999], [1439773056.0, 56040000.0, 68.595184], [1439774784.0, 56060000.0, 68.572764], [1439776512.0, 56080000.0, 68.550336], [1439778240.0, 56100000.0, 68.52789999999999], [1439779968.0, 56120000.0, 68.505456], [1439781696.0, 56140000.0, 68.483004], [1439783424.0, 56160000.0, 68.460544], [1439785152.0, 56180000.0, 68.438076], [1439786880.0, 56200000.0, 68.4156], [1439788608.0, 56220000.0, 68.393116], [1439790336.0, 56240000.0, 68.370624], [1439792064.0, 56260000.0, 68.348124], [1439793792.0, 56280000.0, 68.325616], [1439795520.0, 56300000.0, 68.3031], [1439797248.0, 56320000.0, 68.280576], [1439798976.0, 56340000.0, 68.258044], [1439800704.0, 56360000.0, 68.23550399999999], [1439802432.0, 56380000.0, 68.212956], [1439804160.0, 56400000.0, 68.19040000000001], [1439805888.0, 56420000.0, 68.167836], [1439807616.0, 56440000.0, 68.145264], [1439809344.0, 56460000.0, 68.12268399999999], [1439811072.0, 56480000.0, 68.10009600000001], [1439812800.0, 56500000.0, 68.0775], [1439814528.0, 56520000.0, 68.054896], [1439816256.0, 56540000.0, 68.032284], [1439817984.0, 56560000.0, 68.009664], [1439819712.0, 56580000.0, 67.98703599999999], [1439821440.0, 56600000.0, 67.9644], [1439823168.0, 56620000.0, 67.941756], [1439824896.0, 56640000.0, 67.919104], [1439826624.0, 56660000.0, 67.896444], [1439828352.0, 56680000.0, 67.87377599999999], [1439830080.0, 56700000.0, 67.8511], [1439831808.0, 56720000.0, 67.828416], [1439833536.0, 56740000.0, 67.805724], [1439835264.0, 56760000.0, 67.783024], [1439836992.0, 56780000.0, 67.760316], [1439838720.0, 56800000.0, 67.7376], [1439840448.0, 56820000.0, 67.714876], [1439842176.0, 56840000.0, 67.692144], [1439843904.0, 56860000.0, 67.669404], [1439845632.0, 56880000.0, 67.64665600000001], [1439847360.0, 56900000.0, 67.62389999999999], [1439849088.0, 56920000.0, 67.601136], [1439850816.0, 56940000.0, 67.578364], [1439852544.0, 56960000.0, 67.55558400000001], [1439854272.0, 56980000.0, 67.53279599999999], [1439856000.0, 57000000.0, 67.50999999999999], [1439857728.0, 57020000.0, 67.487196], [1439859456.0, 57040000.0, 67.464384], [1439861184.0, 57060000.0, 67.441564], [1439862912.0, 57080000.0, 67.418736], [1439864640.0, 57100000.0, 67.3959], [1439866368.0, 57120000.0, 67.373056], [1439868096.0, 57140000.0, 67.35020399999999], [1439869824.0, 57160000.0, 67.327344], [1439871552.0, 57180000.0, 67.304476], [1439873280.0, 57200000.0, 67.2816], [1439875008.0, 57220000.0, 67.25871599999999], [1439876736.0, 57240000.0, 67.23582400000001], [1439878464.0, 57260000.0, 67.212924], [1439880192.0, 57280000.0, 67.190016], [1439881920.0, 57300000.0, 67.1671], [1439883648.0, 57320000.0, 67.14417599999999], [1439885376.0, 57340000.0, 67.12124399999999], [1439887104.0, 57360000.0, 67.09830400000001], [1439888832.0, 57380000.0, 67.075356], [1439890560.0, 57400000.0, 67.0524], [1439892288.0, 57420000.0, 67.029436], [1439894016.0, 57440000.0, 67.006464], [1439895744.0, 57460000.0, 66.983484], [1439897472.0, 57480000.0, 66.960496], [1439899200.0, 57500000.0, 66.9375], [1439900928.0, 57520000.0, 66.914496], [1439902656.0, 57540000.0, 66.891484], [1439904384.0, 57560000.0, 66.86846399999999], [1439906112.0, 57580000.0, 66.845436], [1439907840.0, 57600000.0, 66.8224], [1439909568.0, 57620000.0, 66.799356], [1439911296.0, 57640000.0, 66.776304], [1439913024.0, 57660000.0, 66.753244], [1439914752.0, 57680000.0, 66.730176], [1439916480.0, 57700000.0, 66.7071], [1439918208.0, 57720000.0, 66.684016], [1439919936.0, 57740000.0, 66.660924], [1439921664.0, 57760000.0, 66.637824], [1439923392.0, 57780000.0, 66.614716], [1439925120.0, 57800000.0, 66.5916], [1439926848.0, 57820000.0, 66.568476], [1439928576.0, 57840000.0, 66.545344], [1439930304.0, 57860000.0, 66.522204], [1439932032.0, 57880000.0, 66.499056], [1439933760.0, 57900000.0, 66.4759], [1439935488.0, 57920000.0, 66.452736], [1439937216.0, 57940000.0, 66.429564], [1439938944.0, 57960000.0, 66.406384], [1439940672.0, 57980000.0, 66.383196], [1439942400.0, 58000000.0, 66.36], [1439944128.0, 58020000.0, 66.336796], [1439945856.0, 58040000.0, 66.31358399999999], [1439947584.0, 58060000.0, 66.290364], [1439949312.0, 58080000.0, 66.267136], [1439951040.0, 58100000.0, 66.2439], [1439952768.0, 58120000.0, 66.22065599999999], [1439954496.0, 58140000.0, 66.197404], [1439956224.0, 58160000.0, 66.17414400000001], [1439957952.0, 58180000.0, 66.15087600000001], [1439959680.0, 58200000.0, 66.1276], [1439961408.0, 58220000.0, 66.104316], [1439963136.0, 58240000.0, 66.081024], [1439964864.0, 58260000.0, 66.05772400000001], [1439966592.0, 58280000.0, 66.034416], [1439968320.0, 58300000.0, 66.0111], [1439970048.0, 58320000.0, 65.987776], [1439971776.0, 58340000.0, 65.96444400000001], [1439973504.0, 58360000.0, 65.941104], [1439975232.0, 58380000.0, 65.917756], [1439976960.0, 58400000.0, 65.8944], [1439978688.0, 58420000.0, 65.871036], [1439980416.0, 58440000.0, 65.847664], [1439982144.0, 58460000.0, 65.824284], [1439983872.0, 58480000.0, 65.800896], [1439985600.0, 58500000.0, 65.7775], [1439987328.0, 58520000.0, 65.754096], [1439989056.0, 58540000.0, 65.730684], [1439990784.0, 58560000.0, 65.70726400000001], [1439992512.0, 58580000.0, 65.68383600000001], [1439994240.0, 58600000.0, 65.6604], [1439995968.0, 58620000.0, 65.636956], [1439997696.0, 58640000.0, 65.613504], [1439999424.0, 58660000.0, 65.590044], [1440001152.0, 58680000.0, 65.566576], [1440002880.0, 58700000.0, 65.5431], [1440004608.0, 58720000.0, 65.519616], [1440006336.0, 58740000.0, 65.49612400000001], [1440008064.0, 58760000.0, 65.472624], [1440009792.0, 58780000.0, 65.449116], [1440011520.0, 58800000.0, 65.4256], [1440013248.0, 58820000.0, 65.402076], [1440014976.0, 58840000.0, 65.378544], [1440016704.0, 58860000.0, 65.35500400000001], [1440018432.0, 58880000.0, 65.331456], [1440020160.0, 58900000.0, 65.3079], [1440021888.0, 58920000.0, 65.284336], [1440023616.0, 58940000.0, 65.260764], [1440025344.0, 58960000.0, 65.237184], [1440027072.0, 58980000.0, 65.213596], [1440028800.0, 59000000.0, 65.19], [1440030528.0, 59020000.0, 65.16639599999999], [1440032256.0, 59040000.0, 65.142784], [1440033984.0, 59060000.0, 65.11916400000001], [1440035712.0, 59080000.0, 65.095536], [1440037440.0, 59100000.0, 65.0719], [1440039168.0, 59120000.0, 65.04825600000001], [1440040896.0, 59140000.0, 65.02460400000001], [1440042624.0, 59160000.0, 65.000944], [1440044352.0, 59180000.0, 64.97727599999999], [1440046080.0, 59200000.0, 64.9536], [1440047808.0, 59220000.0, 64.929916], [1440049536.0, 59240000.0, 64.906224], [1440051264.0, 59260000.0, 64.88252399999999], [1440052992.0, 59280000.0, 64.85881599999999], [1440054720.0, 59300000.0, 64.83510000000001], [1440056448.0, 59320000.0, 64.811376], [1440058176.0, 59340000.0, 64.787644], [1440059904.0, 59360000.0, 64.763904], [1440061632.0, 59380000.0, 64.74015600000001], [1440063360.0, 59400000.0, 64.7164], [1440065088.0, 59420000.0, 64.692636], [1440066816.0, 59440000.0, 64.668864], [1440068544.0, 59460000.0, 64.645084], [1440070272.0, 59480000.0, 64.621296], [1440072000.0, 59500000.0, 64.5975], [1440073728.0, 59520000.0, 64.573696], [1440075456.0, 59540000.0, 64.549884], [1440077184.0, 59560000.0, 64.52606399999999], [1440078912.0, 59580000.0, 64.502236], [1440080640.0, 59600000.0, 64.4784], [1440082368.0, 59620000.0, 64.454556], [1440084096.0, 59640000.0, 64.43070399999999], [1440085824.0, 59660000.0, 64.406844], [1440087552.0, 59680000.0, 64.382976], [1440089280.0, 59700000.0, 64.35910000000001], [1440091008.0, 59720000.0, 64.335216], [1440092736.0, 59740000.0, 64.311324], [1440094464.0, 59760000.0, 64.287424], [1440096192.0, 59780000.0, 64.26351600000001], [1440097920.0, 59800000.0, 64.2396], [1440099648.0, 59820000.0, 64.215676], [1440101376.0, 59840000.0, 64.191744], [1440103104.0, 59860000.0, 64.167804], [1440104832.0, 59880000.0, 64.143856], [1440106560.0, 59900000.0, 64.1199], [1440108288.0, 59920000.0, 64.095936], [1440110016.0, 59940000.0, 64.07196400000001], [1440111744.0, 59960000.0, 64.04798399999999], [1440113472.0, 59980000.0, 64.023996], [1440115200.0, 60000000.0, 64.0], [1440116928.0, 60020000.0, 63.975996], [1440118656.0, 60040000.0, 63.951984], [1440120384.0, 60060000.0, 63.927963999999996], [1440122112.0, 60080000.0, 63.903936], [1440123840.0, 60100000.0, 63.8799], [1440125568.0, 60120000.0, 63.855856], [1440127296.0, 60140000.0, 63.831804], [1440129024.0, 60160000.0, 63.807744], [1440130752.0, 60180000.0, 63.783676], [1440132480.0, 60200000.0, 63.759600000000006], [1440134208.0, 60220000.0, 63.735516], [1440135936.0, 60240000.0, 63.711424], [1440137664.0, 60260000.0, 63.687324000000004], [1440139392.0, 60280000.0, 63.663216000000006], [1440141120.0, 60300000.0, 63.6391], [1440142848.0, 60320000.0, 63.614976], [1440144576.0, 60340000.0, 63.590844000000004], [1440146304.0, 60360000.0, 63.566704], [1440148032.0, 60380000.0, 63.542556], [1440149760.0, 60400000.0, 63.5184], [1440151488.0, 60420000.0, 63.494236], [1440153216.0, 60440000.0, 63.47006400000001], [1440154944.0, 60460000.0, 63.445884], [1440156672.0, 60480000.0, 63.421696], [1440158400.0, 60500000.0, 63.3975], [1440160128.0, 60520000.0, 63.373296], [1440161856.0, 60540000.0, 63.349084], [1440163584.0, 60560000.0, 63.324864], [1440165312.0, 60580000.0, 63.300636000000004], [1440167040.0, 60600000.0, 63.2764], [1440168768.0, 60620000.0, 63.252156], [1440170496.0, 60640000.0, 63.227904], [1440172224.0, 60660000.0, 63.203644000000004], [1440173952.0, 60680000.0, 63.179376000000005], [1440175680.0, 60700000.0, 63.1551], [1440177408.0, 60720000.0, 63.130815999999996], [1440179136.0, 60740000.0, 63.106524], [1440180864.0, 60760000.0, 63.082224000000004], [1440182592.0, 60780000.0, 63.057916], [1440184320.0, 60800000.0, 63.0336], [1440186048.0, 60820000.0, 63.009276], [1440187776.0, 60840000.0, 62.984944000000006], [1440189504.0, 60860000.0, 62.960604], [1440191232.0, 60880000.0, 62.936256], [1440192960.0, 60900000.0, 62.9119], [1440194688.0, 60920000.0, 62.887536000000004], [1440196416.0, 60940000.0, 62.863164], [1440198144.0, 60960000.0, 62.838784], [1440199872.0, 60980000.0, 62.814396], [1440201600.0, 61000000.0, 62.790000000000006], [1440203328.0, 61020000.0, 62.765595999999995], [1440205056.0, 61040000.0, 62.741184], [1440206784.0, 61060000.0, 62.716764000000005], [1440208512.0, 61080000.0, 62.692336000000005], [1440210240.0, 61100000.0, 62.667899999999996], [1440211968.0, 61120000.0, 62.643456], [1440213696.0, 61140000.0, 62.619004000000004], [1440215424.0, 61160000.0, 62.594544000000006], [1440217152.0, 61180000.0, 62.57007599999999], [1440218880.0, 61200000.0, 62.5456], [1440220608.0, 61220000.0, 62.521116], [1440222336.0, 61240000.0, 62.496624000000004], [1440224064.0, 61260000.0, 62.472123999999994], [1440225792.0, 61280000.0, 62.447616], [1440227520.0, 61300000.0, 62.4231], [1440229248.0, 61320000.0, 62.398576000000006], [1440230976.0, 61340000.0, 62.374044], [1440232704.0, 61360000.0, 62.349503999999996], [1440234432.0, 61380000.0, 62.324956], [1440236160.0, 61400000.0, 62.3004], [1440237888.0, 61420000.0, 62.275836], [1440239616.0, 61440000.0, 62.251264], [1440241344.0, 61460000.0, 62.226684], [1440243072.0, 61480000.0, 62.202096000000004], [1440244800.0, 61500000.0, 62.177499999999995], [1440246528.0, 61520000.0, 62.152896], [1440248256.0, 61540000.0, 62.128284], [1440249984.0, 61560000.0, 62.103664], [1440251712.0, 61580000.0, 62.079035999999995], [1440253440.0, 61600000.0, 62.0544], [1440255168.0, 61620000.0, 62.029756], [1440256896.0, 61640000.0, 62.005104], [1440258624.0, 61660000.0, 61.980444], [1440260352.0, 61680000.0, 61.955776], [1440262080.0, 61700000.0, 61.9311], [1440263808.0, 61720000.0, 61.906416], [1440265536.0, 61740000.0, 61.881724], [1440267264.0, 61760000.0, 61.857023999999996], [1440268992.0, 61780000.0, 61.832316], [1440270720.0, 61800000.0, 61.8076], [1440272448.0, 61820000.0, 61.782875999999995], [1440274176.0, 61840000.0, 61.758144], [1440275904.0, 61860000.0, 61.733404], [1440277632.0, 61880000.0, 61.708656000000005], [1440279360.0, 61900000.0, 61.683899999999994], [1440281088.0, 61920000.0, 61.659136], [1440282816.0, 61940000.0, 61.634364], [1440284544.0, 61960000.0, 61.609584000000005], [1440286272.0, 61980000.0, 61.584796], [1440288000.0, 62000000.0, 61.559999999999995], [1440289728.0, 62020000.0, 61.535196], [1440291456.0, 62040000.0, 61.510384], [1440293184.0, 62060000.0, 61.485564], [1440294912.0, 62080000.0, 61.460736], [1440296640.0, 62100000.0, 61.435900000000004], [1440298368.0, 62120000.0, 61.411056], [1440300096.0, 62140000.0, 61.38620399999999], [1440301824.0, 62160000.0, 61.361343999999995], [1440303552.0, 62180000.0, 61.336476], [1440305280.0, 62200000.0, 61.311600000000006], [1440307008.0, 62220000.0, 61.28671599999999], [1440308736.0, 62240000.0, 61.261824], [1440310464.0, 62260000.0, 61.236924], [1440312192.0, 62280000.0, 61.212016000000006], [1440313920.0, 62300000.0, 61.187099999999994], [1440315648.0, 62320000.0, 61.162175999999995], [1440317376.0, 62340000.0, 61.137244], [1440319104.0, 62360000.0, 61.112304], [1440320832.0, 62380000.0, 61.08735599999999], [1440322560.0, 62400000.0, 61.0624], [1440324288.0, 62420000.0, 61.037436], [1440326016.0, 62440000.0, 61.012464], [1440327744.0, 62460000.0, 60.987483999999995], [1440329472.0, 62480000.0, 60.962495999999994], [1440331200.0, 62500000.0, 60.9375], [1440332928.0, 62520000.0, 60.912496000000004], [1440334656.0, 62540000.0, 60.88748400000001], [1440336384.0, 62560000.0, 60.862463999999996], [1440338112.0, 62580000.0, 60.837436], [1440339840.0, 62600000.0, 60.812400000000004], [1440341568.0, 62620000.0, 60.787356], [1440343296.0, 62640000.0, 60.762304], [1440345024.0, 62660000.0, 60.737244], [1440346752.0, 62680000.0, 60.712176], [1440348480.0, 62700000.0, 60.68710000000001], [1440350208.0, 62720000.0, 60.662015999999994], [1440351936.0, 62740000.0, 60.636924], [1440353664.0, 62760000.0, 60.611824000000006], [1440355392.0, 62780000.0, 60.586716], [1440357120.0, 62800000.0, 60.5616], [1440358848.0, 62820000.0, 60.536476], [1440360576.0, 62840000.0, 60.511344], [1440362304.0, 62860000.0, 60.48620400000001], [1440364032.0, 62880000.0, 60.461056], [1440365760.0, 62900000.0, 60.4359], [1440367488.0, 62920000.0, 60.410736], [1440369216.0, 62940000.0, 60.385564], [1440370944.0, 62960000.0, 60.360383999999996], [1440372672.0, 62980000.0, 60.335195999999996], [1440374400.0, 63000000.0, 60.31], [1440376128.0, 63020000.0, 60.28479600000001], [1440377856.0, 63040000.0, 60.259584], [1440379584.0, 63060000.0, 60.234364], [1440381312.0, 63080000.0, 60.209136], [1440383040.0, 63100000.0, 60.18390000000001], [1440384768.0, 63120000.0, 60.15865599999999], [1440386496.0, 63140000.0, 60.133404], [1440388224.0, 63160000.0, 60.108144], [1440389952.0, 63180000.0, 60.082876000000006], [1440391680.0, 63200000.0, 60.057599999999994], [1440393408.0, 63220000.0, 60.032316], [1440395136.0, 63240000.0, 60.007024], [1440396864.0, 63260000.0, 59.98172400000001], [1440398592.0, 63280000.0, 59.956416], [1440400320.0, 63300000.0, 59.9311], [1440402048.0, 63320000.0, 59.905776], [1440403776.0, 63340000.0, 59.880444000000004], [1440405504.0, 63360000.0, 59.855104], [1440407232.0, 63380000.0, 59.829755999999996], [1440408960.0, 63400000.0, 59.8044], [1440410688.0, 63420000.0, 59.779036000000005], [1440412416.0, 63440000.0, 59.75366399999999], [1440414144.0, 63460000.0, 59.728284], [1440415872.0, 63480000.0, 59.702896], [1440417600.0, 63500000.0, 59.6775], [1440419328.0, 63520000.0, 59.65209599999999], [1440421056.0, 63540000.0, 59.626684], [1440422784.0, 63560000.0, 59.601264], [1440424512.0, 63580000.0, 59.575836], [1440426240.0, 63600000.0, 59.550399999999996], [1440427968.0, 63620000.0, 59.524955999999996], [1440429696.0, 63640000.0, 59.499504], [1440431424.0, 63660000.0, 59.474044000000006], [1440433152.0, 63680000.0, 59.448575999999996], [1440434880.0, 63700000.0, 59.4231], [1440436608.0, 63720000.0, 59.397616], [1440438336.0, 63740000.0, 59.37212400000001], [1440440064.0, 63760000.0, 59.346624], [1440441792.0, 63780000.0, 59.321115999999996], [1440443520.0, 63800000.0, 59.2956], [1440445248.0, 63820000.0, 59.270076], [1440446976.0, 63840000.0, 59.244544], [1440448704.0, 63860000.0, 59.219004], [1440450432.0, 63880000.0, 59.193456000000005], [1440452160.0, 63900000.0, 59.1679], [1440453888.0, 63920000.0, 59.14233599999999], [1440455616.0, 63940000.0, 59.116763999999996], [1440457344.0, 63960000.0, 59.091184], [1440459072.0, 63980000.0, 59.065596000000006], [1440460800.0, 64000000.0, 59.03999999999999], [1440462528.0, 64020000.0, 59.014396], [1440464256.0, 64040000.0, 58.988784], [1440465984.0, 64060000.0, 58.963164000000006], [1440467712.0, 64080000.0, 58.937535999999994], [1440469440.0, 64100000.0, 58.911899999999996], [1440471168.0, 64120000.0, 58.886256], [1440472896.0, 64140000.0, 58.860604], [1440474624.0, 64160000.0, 58.83494399999999], [1440476352.0, 64180000.0, 58.809276], [1440478080.0, 64200000.0, 58.7836], [1440479808.0, 64220000.0, 58.757916], [1440481536.0, 64240000.0, 58.732223999999995], [1440483264.0, 64260000.0, 58.706523999999995], [1440484992.0, 64280000.0, 58.680816], [1440486720.0, 64300000.0, 58.655100000000004], [1440488448.0, 64320000.0, 58.62937599999999], [1440490176.0, 64340000.0, 58.603643999999996], [1440491904.0, 64360000.0, 58.577904000000004], [1440493632.0, 64380000.0, 58.552156000000004], [1440495360.0, 64400000.0, 58.526399999999995], [1440497088.0, 64420000.0, 58.500636], [1440498816.0, 64440000.0, 58.474864000000004], [1440500544.0, 64460000.0, 58.449084000000006], [1440502272.0, 64480000.0, 58.42329599999999], [1440504000.0, 64500000.0, 58.3975], [1440505728.0, 64520000.0, 58.371696], [1440507456.0, 64540000.0, 58.345884000000005], [1440509184.0, 64560000.0, 58.320063999999995], [1440510912.0, 64580000.0, 58.294236], [1440512640.0, 64600000.0, 58.2684], [1440514368.0, 64620000.0, 58.242556], [1440516096.0, 64640000.0, 58.21670399999999], [1440517824.0, 64660000.0, 58.190844], [1440519552.0, 64680000.0, 58.164976], [1440521280.0, 64700000.0, 58.139100000000006], [1440523008.0, 64720000.0, 58.113215999999994], [1440524736.0, 64740000.0, 58.087323999999995], [1440526464.0, 64760000.0, 58.061424], [1440528192.0, 64780000.0, 58.035516], [1440529920.0, 64800000.0, 58.00959999999999], [1440531648.0, 64820000.0, 57.983675999999996], [1440533376.0, 64840000.0, 57.957744], [1440535104.0, 64860000.0, 57.931804], [1440536832.0, 64880000.0, 57.90585599999999], [1440538560.0, 64900000.0, 57.8799], [1440540288.0, 64920000.0, 57.853936], [1440542016.0, 64940000.0, 57.827964], [1440543744.0, 64960000.0, 57.801984], [1440545472.0, 64980000.0, 57.775996], [1440547200.0, 65000000.0, 57.75], [1440548928.0, 65020000.0, 57.723996], [1440550656.0, 65040000.0, 57.697984000000005], [1440552384.0, 65060000.0, 57.671963999999996], [1440554112.0, 65080000.0, 57.645936], [1440555840.0, 65100000.0, 57.6199], [1440557568.0, 65120000.0, 57.593856], [1440559296.0, 65140000.0, 57.567803999999995], [1440561024.0, 65160000.0, 57.541744], [1440562752.0, 65180000.0, 57.515676], [1440564480.0, 65200000.0, 57.4896], [1440566208.0, 65220000.0, 57.463516], [1440567936.0, 65240000.0, 57.437424], [1440569664.0, 65260000.0, 57.411324], [1440571392.0, 65280000.0, 57.38521600000001], [1440573120.0, 65300000.0, 57.3591], [1440574848.0, 65320000.0, 57.332976], [1440576576.0, 65340000.0, 57.306844000000005], [1440578304.0, 65360000.0, 57.28070400000001], [1440580032.0, 65380000.0, 57.254555999999994], [1440581760.0, 65400000.0, 57.2284], [1440583488.0, 65420000.0, 57.202236], [1440585216.0, 65440000.0, 57.176064000000004], [1440586944.0, 65460000.0, 57.14988399999999], [1440588672.0, 65480000.0, 57.123696], [1440590400.0, 65500000.0, 57.097500000000004], [1440592128.0, 65520000.0, 57.071296000000004], [1440593856.0, 65540000.0, 57.045083999999996], [1440595584.0, 65560000.0, 57.018864], [1440597312.0, 65580000.0, 56.992636000000005], [1440599040.0, 65600000.0, 56.96640000000001], [1440600768.0, 65620000.0, 56.940155999999995], [1440602496.0, 65640000.0, 56.913904], [1440604224.0, 65660000.0, 56.887644], [1440605952.0, 65680000.0, 56.86137600000001], [1440607680.0, 65700000.0, 56.8351], [1440609408.0, 65720000.0, 56.808816], [1440611136.0, 65740000.0, 56.782524], [1440612864.0, 65760000.0, 56.756224], [1440614592.0, 65780000.0, 56.729915999999996], [1440616320.0, 65800000.0, 56.7036], [1440618048.0, 65820000.0, 56.677276], [1440619776.0, 65840000.0, 56.650944], [1440621504.0, 65860000.0, 56.624604], [1440623232.0, 65880000.0, 56.598256], [1440624960.0, 65900000.0, 56.5719], [1440626688.0, 65920000.0, 56.545536000000006], [1440628416.0, 65940000.0, 56.519163999999996], [1440630144.0, 65960000.0, 56.492784], [1440631872.0, 65980000.0, 56.466396], [1440633600.0, 66000000.0, 56.440000000000005], [1440635328.0, 66020000.0, 56.413596], [1440637056.0, 66040000.0, 56.387184], [1440638784.0, 66060000.0, 56.360764], [1440640512.0, 66080000.0, 56.33433600000001], [1440642240.0, 66100000.0, 56.3079], [1440643968.0, 66120000.0, 56.281456], [1440645696.0, 66140000.0, 56.255004], [1440647424.0, 66160000.0, 56.22854400000001], [1440649152.0, 66180000.0, 56.202076], [1440650880.0, 66200000.0, 56.175599999999996], [1440652608.0, 66220000.0, 56.149116], [1440654336.0, 66240000.0, 56.122624], [1440656064.0, 66260000.0, 56.096123999999996], [1440657792.0, 66280000.0, 56.069615999999996], [1440659520.0, 66300000.0, 56.0431], [1440661248.0, 66320000.0, 56.01657600000001], [1440662976.0, 66340000.0, 55.990044], [1440664704.0, 66360000.0, 55.963504], [1440666432.0, 66380000.0, 55.936956], [1440668160.0, 66400000.0, 55.9104], [1440669888.0, 66420000.0, 55.883835999999995], [1440671616.0, 66440000.0, 55.857264], [1440673344.0, 66460000.0, 55.830684], [1440675072.0, 66480000.0, 55.804096], [1440676800.0, 66500000.0, 55.777499999999996], [1440678528.0, 66520000.0, 55.750896], [1440680256.0, 66540000.0, 55.724284000000004], [1440681984.0, 66560000.0, 55.697664], [1440683712.0, 66580000.0, 55.671035999999994], [1440685440.0, 66600000.0, 55.6444], [1440687168.0, 66620000.0, 55.617756], [1440688896.0, 66640000.0, 55.591104], [1440690624.0, 66660000.0, 55.564443999999995], [1440692352.0, 66680000.0, 55.537776], [1440694080.0, 66700000.0, 55.5111], [1440695808.0, 66720000.0, 55.484416], [1440697536.0, 66740000.0, 55.45772399999999], [1440699264.0, 66760000.0, 55.431024], [1440700992.0, 66780000.0, 55.404316], [1440702720.0, 66800000.0, 55.3776], [1440704448.0, 66820000.0, 55.35087599999999], [1440706176.0, 66840000.0, 55.324144], [1440707904.0, 66860000.0, 55.297404], [1440709632.0, 66880000.0, 55.270656], [1440711360.0, 66900000.0, 55.2439], [1440713088.0, 66920000.0, 55.217135999999996], [1440714816.0, 66940000.0, 55.190364], [1440716544.0, 66960000.0, 55.163584], [1440718272.0, 66980000.0, 55.136796], [1440720000.0, 67000000.0, 55.11], [1440721728.0, 67020000.0, 55.083196], [1440723456.0, 67040000.0, 55.056384], [1440725184.0, 67060000.0, 55.02956399999999], [1440726912.0, 67080000.0, 55.002736], [1440728640.0, 67100000.0, 54.9759], [1440730368.0, 67120000.0, 54.949056000000006], [1440732096.0, 67140000.0, 54.922203999999994], [1440733824.0, 67160000.0, 54.895343999999994], [1440735552.0, 67180000.0, 54.868476], [1440737280.0, 67200000.0, 54.84160000000001], [1440739008.0, 67220000.0, 54.814716], [1440740736.0, 67240000.0, 54.787824], [1440742464.0, 67260000.0, 54.760924], [1440744192.0, 67280000.0, 54.734016000000004], [1440745920.0, 67300000.0, 54.7071], [1440747648.0, 67320000.0, 54.680175999999996], [1440749376.0, 67340000.0, 54.653244], [1440751104.0, 67360000.0, 54.626304000000005], [1440752832.0, 67380000.0, 54.59935599999999], [1440754560.0, 67400000.0, 54.572399999999995], [1440756288.0, 67420000.0, 54.545436], [1440758016.0, 67440000.0, 54.518464], [1440759744.0, 67460000.0, 54.49148399999999], [1440761472.0, 67480000.0, 54.464496], [1440763200.0, 67500000.0, 54.4375], [1440764928.0, 67520000.0, 54.410496], [1440766656.0, 67540000.0, 54.383484], [1440768384.0, 67560000.0, 54.356463999999995], [1440770112.0, 67580000.0, 54.329436], [1440771840.0, 67600000.0, 54.302400000000006], [1440773568.0, 67620000.0, 54.27535600000001], [1440775296.0, 67640000.0, 54.248304], [1440777024.0, 67660000.0, 54.221244], [1440778752.0, 67680000.0, 54.194176000000006], [1440780480.0, 67700000.0, 54.167100000000005], [1440782208.0, 67720000.0, 54.140015999999996], [1440783936.0, 67740000.0, 54.112924], [1440785664.0, 67760000.0, 54.085824], [1440787392.0, 67780000.0, 54.058716000000004], [1440789120.0, 67800000.0, 54.0316], [1440790848.0, 67820000.0, 54.004476], [1440792576.0, 67840000.0, 53.977344], [1440794304.0, 67860000.0, 53.95020400000001], [1440796032.0, 67880000.0, 53.923055999999995], [1440797760.0, 67900000.0, 53.8959], [1440799488.0, 67920000.0, 53.868736000000006], [1440801216.0, 67940000.0, 53.841564000000005], [1440802944.0, 67960000.0, 53.814384], [1440804672.0, 67980000.0, 53.787196], [1440806400.0, 68000000.0, 53.760000000000005], [1440808128.0, 68020000.0, 53.73279600000001], [1440809856.0, 68040000.0, 53.705583999999995], [1440811584.0, 68060000.0, 53.678364], [1440813312.0, 68080000.0, 53.651136], [1440815040.0, 68100000.0, 53.623900000000006], [1440816768.0, 68120000.0, 53.596655999999996], [1440818496.0, 68140000.0, 53.569404], [1440820224.0, 68160000.0, 53.542144], [1440821952.0, 68180000.0, 53.51487600000001], [1440823680.0, 68200000.0, 53.48759999999999], [1440825408.0, 68220000.0, 53.460316], [1440827136.0, 68240000.0, 53.433024], [1440828864.0, 68260000.0, 53.405724000000006], [1440830592.0, 68280000.0, 53.378415999999994], [1440832320.0, 68300000.0, 53.3511], [1440834048.0, 68320000.0, 53.323776], [1440835776.0, 68340000.0, 53.29644400000001], [1440837504.0, 68360000.0, 53.269104], [1440839232.0, 68380000.0, 53.241756], [1440840960.0, 68400000.0, 53.214400000000005], [1440842688.0, 68420000.0, 53.187036000000006], [1440844416.0, 68440000.0, 53.159664], [1440846144.0, 68460000.0, 53.132284], [1440847872.0, 68480000.0, 53.104896000000004], [1440849600.0, 68500000.0, 53.07750000000001], [1440851328.0, 68520000.0, 53.050095999999996], [1440853056.0, 68540000.0, 53.022684], [1440854784.0, 68560000.0, 52.995264], [1440856512.0, 68580000.0, 52.967836000000005], [1440858240.0, 68600000.0, 52.9404], [1440859968.0, 68620000.0, 52.912956], [1440861696.0, 68640000.0, 52.885504000000005], [1440863424.0, 68660000.0, 52.85804400000001], [1440865152.0, 68680000.0, 52.83057599999999], [1440866880.0, 68700000.0, 52.8031], [1440868608.0, 68720000.0, 52.775616], [1440870336.0, 68740000.0, 52.748124000000004], [1440872064.0, 68760000.0, 52.720623999999994], [1440873792.0, 68780000.0, 52.693115999999996], [1440875520.0, 68800000.0, 52.665600000000005], [1440877248.0, 68820000.0, 52.638076000000005], [1440878976.0, 68840000.0, 52.610544], [1440880704.0, 68860000.0, 52.583003999999995], [1440882432.0, 68880000.0, 52.555456], [1440884160.0, 68900000.0, 52.5279], [1440885888.0, 68920000.0, 52.500336], [1440887616.0, 68940000.0, 52.472764], [1440889344.0, 68960000.0, 52.445184000000005], [1440891072.0, 68980000.0, 52.417596], [1440892800.0, 69000000.0, 52.38999999999999], [1440894528.0, 69020000.0, 52.362396], [1440896256.0, 69040000.0, 52.334784], [1440897984.0, 69060000.0, 52.30716400000001], [1440899712.0, 69080000.0, 52.27953599999999], [1440901440.0, 69100000.0, 52.2519], [1440903168.0, 69120000.0, 52.224256000000004], [1440904896.0, 69140000.0, 52.196604], [1440906624.0, 69160000.0, 52.168943999999996], [1440908352.0, 69180000.0, 52.141276], [1440910080.0, 69200000.0, 52.1136], [1440911808.0, 69220000.0, 52.085916000000005], [1440913536.0, 69240000.0, 52.058223999999996], [1440915264.0, 69260000.0, 52.030524], [1440916992.0, 69280000.0, 52.002816], [1440918720.0, 69300000.0, 51.975100000000005], [1440920448.0, 69320000.0, 51.94737599999999], [1440922176.0, 69340000.0, 51.919644], [1440923904.0, 69360000.0, 51.891904000000004], [1440925632.0, 69380000.0, 51.864156], [1440927360.0, 69400000.0, 51.8364], [1440929088.0, 69420000.0, 51.808636], [1440930816.0, 69440000.0, 51.780864], [1440932544.0, 69460000.0, 51.753084], [1440934272.0, 69480000.0, 51.72529599999999], [1440936000.0, 69500000.0, 51.6975], [1440937728.0, 69520000.0, 51.669696], [1440939456.0, 69540000.0, 51.641884000000005], [1440941184.0, 69560000.0, 51.61406399999999], [1440942912.0, 69580000.0, 51.586236], [1440944640.0, 69600000.0, 51.5584], [1440946368.0, 69620000.0, 51.530556000000004], [1440948096.0, 69640000.0, 51.502703999999994], [1440949824.0, 69660000.0, 51.474844], [1440951552.0, 69680000.0, 51.446976], [1440953280.0, 69700000.0, 51.4191], [1440955008.0, 69720000.0, 51.39121599999999], [1440956736.0, 69740000.0, 51.363324], [1440958464.0, 69760000.0, 51.335424], [1440960192.0, 69780000.0, 51.30751600000001], [1440961920.0, 69800000.0, 51.279599999999995], [1440963648.0, 69820000.0, 51.251675999999996], [1440965376.0, 69840000.0, 51.223744], [1440967104.0, 69860000.0, 51.195804], [1440968832.0, 69880000.0, 51.16785599999999], [1440970560.0, 69900000.0, 51.1399], [1440972288.0, 69920000.0, 51.111936], [1440974016.0, 69940000.0, 51.083964], [1440975744.0, 69960000.0, 51.055983999999995], [1440977472.0, 69980000.0, 51.027995999999995], [1440979200.0, 70000000.0, 51.0], [1440980928.0, 70020000.0, 50.971996000000004], [1440982656.0, 70040000.0, 50.94398400000001], [1440984384.0, 70060000.0, 50.915963999999995], [1440986112.0, 70080000.0, 50.887936], [1440987840.0, 70100000.0, 50.8599], [1440989568.0, 70120000.0, 50.83185600000001], [1440991296.0, 70140000.0, 50.803804], [1440993024.0, 70160000.0, 50.775744], [1440994752.0, 70180000.0, 50.747676000000006], [1440996480.0, 70200000.0, 50.71960000000001], [1440998208.0, 70220000.0, 50.691516], [1440999936.0, 70240000.0, 50.663424], [1441001664.0, 70260000.0, 50.635324000000004], [1441003392.0, 70280000.0, 50.60721600000001], [1441005120.0, 70300000.0, 50.5791], [1441006848.0, 70320000.0, 50.550976], [1441008576.0, 70340000.0, 50.522844], [1441010304.0, 70360000.0, 50.494704000000006], [1441012032.0, 70380000.0, 50.466556], [1441013760.0, 70400000.0, 50.4384], [1441015488.0, 70420000.0, 50.410236000000005], [1441017216.0, 70440000.0, 50.38206400000001], [1441018944.0, 70460000.0, 50.353883999999994], [1441020672.0, 70480000.0, 50.325696], [1441022400.0, 70500000.0, 50.2975], [1441024128.0, 70520000.0, 50.269296000000004], [1441025856.0, 70540000.0, 50.241083999999994], [1441027584.0, 70560000.0, 50.212863999999996], [1441029312.0, 70580000.0, 50.184636000000005], [1441031040.0, 70600000.0, 50.156400000000005], [1441032768.0, 70620000.0, 50.128156], [1441034496.0, 70640000.0, 50.099904], [1441036224.0, 70660000.0, 50.071644], [1441037952.0, 70680000.0, 50.043376], [1441039680.0, 70700000.0, 50.0151], [1441041408.0, 70720000.0, 49.986816], [1441043136.0, 70740000.0, 49.958524000000004], [1441044864.0, 70760000.0, 49.930224], [1441046592.0, 70780000.0, 49.90191599999999], [1441048320.0, 70800000.0, 49.873599999999996], [1441050048.0, 70820000.0, 49.845276000000005], [1441051776.0, 70840000.0, 49.81694400000001], [1441053504.0, 70860000.0, 49.78860399999999], [1441055232.0, 70880000.0, 49.760256], [1441056960.0, 70900000.0, 49.7319], [1441058688.0, 70920000.0, 49.70353600000001], [1441060416.0, 70940000.0, 49.675163999999995], [1441062144.0, 70960000.0, 49.646784], [1441063872.0, 70980000.0, 49.618396000000004], [1441065600.0, 71000000.0, 49.59], [1441067328.0, 71020000.0, 49.561595999999994], [1441069056.0, 71040000.0, 49.533184], [1441070784.0, 71060000.0, 49.504764], [1441072512.0, 71080000.0, 49.476336], [1441074240.0, 71100000.0, 49.4479], [1441075968.0, 71120000.0, 49.419456], [1441077696.0, 71140000.0, 49.391004], [1441079424.0, 71160000.0, 49.36254400000001], [1441081152.0, 71180000.0, 49.334075999999996], [1441082880.0, 71200000.0, 49.3056], [1441084608.0, 71220000.0, 49.277116], [1441086336.0, 71240000.0, 49.24862400000001], [1441088064.0, 71260000.0, 49.220124], [1441089792.0, 71280000.0, 49.191615999999996], [1441091520.0, 71300000.0, 49.1631], [1441093248.0, 71320000.0, 49.134576], [1441094976.0, 71340000.0, 49.106044], [1441096704.0, 71360000.0, 49.077504], [1441098432.0, 71380000.0, 49.048956000000004], [1441100160.0, 71400000.0, 49.0204], [1441101888.0, 71420000.0, 48.99183599999999], [1441103616.0, 71440000.0, 48.963263999999995], [1441105344.0, 71460000.0, 48.934684000000004], [1441107072.0, 71480000.0, 48.906096000000005], [1441108800.0, 71500000.0, 48.8775], [1441110528.0, 71520000.0, 48.848895999999996], [1441112256.0, 71540000.0, 48.820284], [1441113984.0, 71560000.0, 48.791664000000004], [1441115712.0, 71580000.0, 48.76303599999999], [1441117440.0, 71600000.0, 48.7344], [1441119168.0, 71620000.0, 48.705756], [1441120896.0, 71640000.0, 48.67710400000001], [1441122624.0, 71660000.0, 48.648444], [1441124352.0, 71680000.0, 48.619775999999995], [1441126080.0, 71700000.0, 48.591100000000004], [1441127808.0, 71720000.0, 48.562416000000006], [1441129536.0, 71740000.0, 48.53372399999999], [1441131264.0, 71760000.0, 48.505024], [1441132992.0, 71780000.0, 48.476316000000004], [1441134720.0, 71800000.0, 48.4476], [1441136448.0, 71820000.0, 48.418876], [1441138176.0, 71840000.0, 48.390144], [1441139904.0, 71860000.0, 48.361404], [1441141632.0, 71880000.0, 48.33265600000001], [1441143360.0, 71900000.0, 48.30389999999999], [1441145088.0, 71920000.0, 48.275135999999996], [1441146816.0, 71940000.0, 48.246364], [1441148544.0, 71960000.0, 48.217584], [1441150272.0, 71980000.0, 48.188795999999996], [1441152000.0, 72000000.0, 48.16], [1441153728.0, 72020000.0, 48.131196], [1441155456.0, 72040000.0, 48.102384], [1441157184.0, 72060000.0, 48.073564], [1441158912.0, 72080000.0, 48.044736], [1441160640.0, 72100000.0, 48.0159], [1441162368.0, 72120000.0, 47.987056], [1441164096.0, 72140000.0, 47.958203999999995], [1441165824.0, 72160000.0, 47.929344], [1441167552.0, 72180000.0, 47.900476], [1441169280.0, 72200000.0, 47.8716], [1441171008.0, 72220000.0, 47.842715999999996], [1441172736.0, 72240000.0, 47.813824], [1441174464.0, 72260000.0, 47.784924000000004], [1441176192.0, 72280000.0, 47.756016], [1441177920.0, 72300000.0, 47.72709999999999], [1441179648.0, 72320000.0, 47.698176], [1441181376.0, 72340000.0, 47.669244], [1441183104.0, 72360000.0, 47.640304], [1441184832.0, 72380000.0, 47.611355999999994], [1441186560.0, 72400000.0, 47.5824], [1441188288.0, 72420000.0, 47.553436], [1441190016.0, 72440000.0, 47.524464], [1441191744.0, 72460000.0, 47.49548399999999], [1441193472.0, 72480000.0, 47.466496], [1441195200.0, 72500000.0, 47.4375], [1441196928.0, 72520000.0, 47.40849600000001], [1441198656.0, 72540000.0, 47.379484000000005], [1441200384.0, 72560000.0, 47.350463999999995], [1441202112.0, 72580000.0, 47.321436], [1441203840.0, 72600000.0, 47.2924], [1441205568.0, 72620000.0, 47.26335600000001], [1441207296.0, 72640000.0, 47.234303999999995], [1441209024.0, 72660000.0, 47.205244], [1441210752.0, 72680000.0, 47.176176000000005], [1441212480.0, 72700000.0, 47.14710000000001], [1441214208.0, 72720000.0, 47.118016], [1441215936.0, 72740000.0, 47.088924], [1441217664.0, 72760000.0, 47.059824000000006], [1441219392.0, 72780000.0, 47.030716000000005], [1441221120.0, 72800000.0, 47.001599999999996], [1441222848.0, 72820000.0, 46.972476], [1441224576.0, 72840000.0, 46.943344], [1441226304.0, 72860000.0, 46.914204000000005], [1441228032.0, 72880000.0, 46.885056], [1441229760.0, 72900000.0, 46.8559], [1441231488.0, 72920000.0, 46.826736000000004], [1441233216.0, 72940000.0, 46.79756400000001], [1441234944.0, 72960000.0, 46.768384], [1441236672.0, 72980000.0, 46.739196], [1441238400.0, 73000000.0, 46.71], [1441240128.0, 73020000.0, 46.68079600000001], [1441241856.0, 73040000.0, 46.65158399999999], [1441243584.0, 73060000.0, 46.622364], [1441245312.0, 73080000.0, 46.593136], [1441247040.0, 73100000.0, 46.563900000000004], [1441248768.0, 73120000.0, 46.534656], [1441250496.0, 73140000.0, 46.505404], [1441252224.0, 73160000.0, 46.476144000000005], [1441253952.0, 73180000.0, 46.446876], [1441255680.0, 73200000.0, 46.41759999999999], [1441257408.0, 73220000.0, 46.388315999999996], [1441259136.0, 73240000.0, 46.359024000000005], [1441260864.0, 73260000.0, 46.329724000000006], [1441262592.0, 73280000.0, 46.300416], [1441264320.0, 73300000.0, 46.2711], [1441266048.0, 73320000.0, 46.241776], [1441267776.0, 73340000.0, 46.212444000000005], [1441269504.0, 73360000.0, 46.18310399999999], [1441271232.0, 73380000.0, 46.153756], [1441272960.0, 73400000.0, 46.1244], [1441274688.0, 73420000.0, 46.09503600000001], [1441276416.0, 73440000.0, 46.065664], [1441278144.0, 73460000.0, 46.036284], [1441279872.0, 73480000.0, 46.006896000000005], [1441281600.0, 73500000.0, 45.977500000000006], [1441283328.0, 73520000.0, 45.94809599999999], [1441285056.0, 73540000.0, 45.918684], [1441286784.0, 73560000.0, 45.889264000000004], [1441288512.0, 73580000.0, 45.85983600000001], [1441290240.0, 73600000.0, 45.8304], [1441291968.0, 73620000.0, 45.800956], [1441293696.0, 73640000.0, 45.771504], [1441295424.0, 73660000.0, 45.74204400000001], [1441297152.0, 73680000.0, 45.712576], [1441298880.0, 73700000.0, 45.683099999999996], [1441300608.0, 73720000.0, 45.653616], [1441302336.0, 73740000.0, 45.624124], [1441304064.0, 73760000.0, 45.594623999999996], [1441305792.0, 73780000.0, 45.565115999999996], [1441307520.0, 73800000.0, 45.5356], [1441309248.0, 73820000.0, 45.50607600000001], [1441310976.0, 73840000.0, 45.476544], [1441312704.0, 73860000.0, 45.447004], [1441314432.0, 73880000.0, 45.417456], [1441316160.0, 73900000.0, 45.3879], [1441317888.0, 73920000.0, 45.358335999999994], [1441319616.0, 73940000.0, 45.328764], [1441321344.0, 73960000.0, 45.299184000000004], [1441323072.0, 73980000.0, 45.26959600000001], [1441324800.0, 74000000.0, 45.239999999999995], [1441326528.0, 74020000.0, 45.210395999999996], [1441328256.0, 74040000.0, 45.180784], [1441329984.0, 74060000.0, 45.151164], [1441331712.0, 74080000.0, 45.12153599999999], [1441333440.0, 74100000.0, 45.091899999999995], [1441335168.0, 74120000.0, 45.062256], [1441336896.0, 74140000.0, 45.032604000000006], [1441338624.0, 74160000.0, 45.00294399999999], [1441340352.0, 74180000.0, 44.973276], [1441342080.0, 74200000.0, 44.9436], [1441343808.0, 74220000.0, 44.91391600000001], [1441345536.0, 74240000.0, 44.884223999999996], [1441347264.0, 74260000.0, 44.854524], [1441348992.0, 74280000.0, 44.824816], [1441350720.0, 74300000.0, 44.795100000000005], [1441352448.0, 74320000.0, 44.765375999999996], [1441354176.0, 74340000.0, 44.735644], [1441355904.0, 74360000.0, 44.705904000000004], [1441357632.0, 74380000.0, 44.676156000000006], [1441359360.0, 74400000.0, 44.64639999999999], [1441361088.0, 74420000.0, 44.616636], [1441362816.0, 74440000.0, 44.586864], [1441364544.0, 74460000.0, 44.557084], [1441366272.0, 74480000.0, 44.52729599999999], [1441368000.0, 74500000.0, 44.497499999999995], [1441369728.0, 74520000.0, 44.467696000000004], [1441371456.0, 74540000.0, 44.437884000000004], [1441373184.0, 74560000.0, 44.408063999999996], [1441374912.0, 74580000.0, 44.378235999999994], [1441376640.0, 74600000.0, 44.3484], [1441378368.0, 74620000.0, 44.318556], [1441380096.0, 74640000.0, 44.288703999999996], [1441381824.0, 74660000.0, 44.258843999999996], [1441383552.0, 74680000.0, 44.228976], [1441385280.0, 74700000.0, 44.1991], [1441387008.0, 74720000.0, 44.16921599999999], [1441388736.0, 74740000.0, 44.139323999999995], [1441390464.0, 74760000.0, 44.109424], [1441392192.0, 74780000.0, 44.079516000000005], [1441393920.0, 74800000.0, 44.04959999999999], [1441395648.0, 74820000.0, 44.019676], [1441397376.0, 74840000.0, 43.989744], [1441399104.0, 74860000.0, 43.959804000000005], [1441400832.0, 74880000.0, 43.929855999999994], [1441402560.0, 74900000.0, 43.899899999999995], [1441404288.0, 74920000.0, 43.869936], [1441406016.0, 74940000.0, 43.839964], [1441407744.0, 74960000.0, 43.80998399999999], [1441409472.0, 74980000.0, 43.779996], [1441411200.0, 75000000.0, 43.75], [1441412928.0, 75020000.0, 43.719996], [1441414656.0, 75040000.0, 43.68998400000001], [1441416384.0, 75060000.0, 43.659963999999995], [1441418112.0, 75080000.0, 43.629936], [1441419840.0, 75100000.0, 43.599900000000005], [1441421568.0, 75120000.0, 43.56985600000001], [1441423296.0, 75140000.0, 43.539804], [1441425024.0, 75160000.0, 43.509744], [1441426752.0, 75180000.0, 43.479676000000005], [1441428480.0, 75200000.0, 43.449600000000004], [1441430208.0, 75220000.0, 43.419515999999994], [1441431936.0, 75240000.0, 43.389424], [1441433664.0, 75260000.0, 43.359324], [1441435392.0, 75280000.0, 43.32921600000001], [1441437120.0, 75300000.0, 43.299099999999996], [1441438848.0, 75320000.0, 43.268976], [1441440576.0, 75340000.0, 43.238844], [1441442304.0, 75360000.0, 43.208704000000004], [1441444032.0, 75380000.0, 43.17855599999999], [1441445760.0, 75400000.0, 43.1484], [1441447488.0, 75420000.0, 43.118236], [1441449216.0, 75440000.0, 43.088064], [1441450944.0, 75460000.0, 43.057883999999994], [1441452672.0, 75480000.0, 43.027696], [1441454400.0, 75500000.0, 42.9975], [1441456128.0, 75520000.0, 42.967296000000005], [1441457856.0, 75540000.0, 42.937084], [1441459584.0, 75560000.0, 42.906864], [1441461312.0, 75580000.0, 42.876636000000005], [1441463040.0, 75600000.0, 42.8464], [1441464768.0, 75620000.0, 42.81615599999999], [1441466496.0, 75640000.0, 42.785904], [1441468224.0, 75660000.0, 42.755644000000004], [1441469952.0, 75680000.0, 42.725376000000004], [1441471680.0, 75700000.0, 42.6951], [1441473408.0, 75720000.0, 42.664816], [1441475136.0, 75740000.0, 42.634524], [1441476864.0, 75760000.0, 42.60422400000001], [1441478592.0, 75780000.0, 42.573916], [1441480320.0, 75800000.0, 42.5436], [1441482048.0, 75820000.0, 42.513276000000005], [1441483776.0, 75840000.0, 42.482944], [1441485504.0, 75860000.0, 42.452603999999994], [1441487232.0, 75880000.0, 42.422256], [1441488960.0, 75900000.0, 42.3919], [1441490688.0, 75920000.0, 42.36153600000001], [1441492416.0, 75940000.0, 42.331163999999994], [1441494144.0, 75960000.0, 42.300784], [1441495872.0, 75980000.0, 42.270396000000005], [1441497600.0, 76000000.0, 42.24], [1441499328.0, 76020000.0, 42.209596], [1441501056.0, 76040000.0, 42.179184], [1441502784.0, 76060000.0, 42.148764], [1441504512.0, 76080000.0, 42.118336000000006], [1441506240.0, 76100000.0, 42.0879], [1441507968.0, 76120000.0, 42.057456], [1441509696.0, 76140000.0, 42.027004000000005], [1441511424.0, 76160000.0, 41.99654400000001], [1441513152.0, 76180000.0, 41.966075999999994], [1441514880.0, 76200000.0, 41.9356], [1441516608.0, 76220000.0, 41.905116], [1441518336.0, 76240000.0, 41.874624000000004], [1441520064.0, 76260000.0, 41.844123999999994], [1441521792.0, 76280000.0, 41.813615999999996], [1441523520.0, 76300000.0, 41.783100000000005], [1441525248.0, 76320000.0, 41.752576000000005], [1441526976.0, 76340000.0, 41.722044], [1441528704.0, 76360000.0, 41.691503999999995], [1441530432.0, 76380000.0, 41.660956], [1441532160.0, 76400000.0, 41.6304], [1441533888.0, 76420000.0, 41.599835999999996], [1441535616.0, 76440000.0, 41.569264], [1441537344.0, 76460000.0, 41.538684], [1441539072.0, 76480000.0, 41.508096], [1441540800.0, 76500000.0, 41.47749999999999], [1441542528.0, 76520000.0, 41.446895999999995], [1441544256.0, 76540000.0, 41.416284000000005], [1441545984.0, 76560000.0, 41.385664000000006], [1441547712.0, 76580000.0, 41.35503599999999], [1441549440.0, 76600000.0, 41.3244], [1441551168.0, 76620000.0, 41.293756], [1441552896.0, 76640000.0, 41.263104000000006], [1441554624.0, 76660000.0, 41.232443999999994], [1441556352.0, 76680000.0, 41.201775999999995], [1441558080.0, 76700000.0, 41.1711], [1441559808.0, 76720000.0, 41.140416], [1441561536.0, 76740000.0, 41.10972399999999], [1441563264.0, 76760000.0, 41.079024], [1441564992.0, 76780000.0, 41.048316], [1441566720.0, 76800000.0, 41.0176], [1441568448.0, 76820000.0, 40.986875999999995], [1441570176.0, 76840000.0, 40.956143999999995], [1441571904.0, 76860000.0, 40.925404], [1441573632.0, 76880000.0, 40.894656000000005], [1441575360.0, 76900000.0, 40.863899999999994], [1441577088.0, 76920000.0, 40.833135999999996], [1441578816.0, 76940000.0, 40.802364000000004], [1441580544.0, 76960000.0, 40.771584000000004], [1441582272.0, 76980000.0, 40.740795999999996], [1441584000.0, 77000000.0, 40.709999999999994], [1441585728.0, 77020000.0, 40.679196], [1441587456.0, 77040000.0, 40.64838400000001], [1441589184.0, 77060000.0, 40.617563999999994], [1441590912.0, 77080000.0, 40.586735999999995], [1441592640.0, 77100000.0, 40.5559], [1441594368.0, 77120000.0, 40.525056000000006], [1441596096.0, 77140000.0, 40.494203999999996], [1441597824.0, 77160000.0, 40.463344], [1441599552.0, 77180000.0, 40.432476], [1441601280.0, 77200000.0, 40.4016], [1441603008.0, 77220000.0, 40.370715999999994], [1441604736.0, 77240000.0, 40.339824], [1441606464.0, 77260000.0, 40.308924], [1441608192.0, 77280000.0, 40.278016], [1441609920.0, 77300000.0, 40.247099999999996], [1441611648.0, 77320000.0, 40.216176], [1441613376.0, 77340000.0, 40.185244], [1441615104.0, 77360000.0, 40.154304], [1441616832.0, 77380000.0, 40.123355999999994], [1441618560.0, 77400000.0, 40.0924], [1441620288.0, 77420000.0, 40.061436], [1441622016.0, 77440000.0, 40.030464], [1441623744.0, 77460000.0, 39.999483999999995], [1441625472.0, 77480000.0, 39.968495999999995], [1441627200.0, 77500000.0, 39.9375], [1441628928.0, 77520000.0, 39.906496000000004], [1441630656.0, 77540000.0, 39.87548400000001], [1441632384.0, 77560000.0, 39.844463999999995], [1441634112.0, 77580000.0, 39.813436], [1441635840.0, 77600000.0, 39.7824], [1441637568.0, 77620000.0, 39.75135600000001], [1441639296.0, 77640000.0, 39.720304], [1441641024.0, 77660000.0, 39.689244], [1441642752.0, 77680000.0, 39.658176000000005], [1441644480.0, 77700000.0, 39.627100000000006], [1441646208.0, 77720000.0, 39.596016], [1441647936.0, 77740000.0, 39.564924], [1441649664.0, 77760000.0, 39.533824], [1441651392.0, 77780000.0, 39.50271600000001], [1441653120.0, 77800000.0, 39.471599999999995], [1441654848.0, 77820000.0, 39.440476], [1441656576.0, 77840000.0, 39.409344000000004], [1441658304.0, 77860000.0, 39.378204000000004], [1441660032.0, 77880000.0, 39.347055999999995], [1441661760.0, 77900000.0, 39.3159], [1441663488.0, 77920000.0, 39.284736], [1441665216.0, 77940000.0, 39.253564000000004], [1441666944.0, 77960000.0, 39.222384], [1441668672.0, 77980000.0, 39.191196], [1441670400.0, 78000000.0, 39.160000000000004], [1441672128.0, 78020000.0, 39.12879600000001], [1441673856.0, 78040000.0, 39.097584], [1441675584.0, 78060000.0, 39.066364], [1441677312.0, 78080000.0, 39.035136], [1441679040.0, 78100000.0, 39.00390000000001], [1441680768.0, 78120000.0, 38.97265599999999], [1441682496.0, 78140000.0, 38.941404], [1441684224.0, 78160000.0, 38.910144], [1441685952.0, 78180000.0, 38.878876000000005], [1441687680.0, 78200000.0, 38.84759999999999], [1441689408.0, 78220000.0, 38.816316], [1441691136.0, 78240000.0, 38.785024], [1441692864.0, 78260000.0, 38.753724000000005], [1441694592.0, 78280000.0, 38.722415999999996], [1441696320.0, 78300000.0, 38.6911], [1441698048.0, 78320000.0, 38.659776], [1441699776.0, 78340000.0, 38.62844400000001], [1441701504.0, 78360000.0, 38.597103999999995], [1441703232.0, 78380000.0, 38.565756], [1441704960.0, 78400000.0, 38.534400000000005], [1441706688.0, 78420000.0, 38.50303600000001], [1441708416.0, 78440000.0, 38.471664], [1441710144.0, 78460000.0, 38.440284], [1441711872.0, 78480000.0, 38.408896], [1441713600.0, 78500000.0, 38.377500000000005], [1441715328.0, 78520000.0, 38.346095999999996], [1441717056.0, 78540000.0, 38.314684], [1441718784.0, 78560000.0, 38.283264], [1441720512.0, 78580000.0, 38.251836000000004], [1441722240.0, 78600000.0, 38.2204], [1441723968.0, 78620000.0, 38.188956], [1441725696.0, 78640000.0, 38.157504], [1441727424.0, 78660000.0, 38.12604400000001], [1441729152.0, 78680000.0, 38.094575999999996], [1441730880.0, 78700000.0, 38.0631], [1441732608.0, 78720000.0, 38.031616], [1441734336.0, 78740000.0, 38.00012400000001], [1441736064.0, 78760000.0, 37.96862399999999], [1441737792.0, 78780000.0, 37.937115999999996], [1441739520.0, 78800000.0, 37.9056], [1441741248.0, 78820000.0, 37.874076], [1441742976.0, 78840000.0, 37.842544], [1441744704.0, 78860000.0, 37.811004], [1441746432.0, 78880000.0, 37.779456], [1441748160.0, 78900000.0, 37.74790000000001], [1441749888.0, 78920000.0, 37.71633599999999], [1441751616.0, 78940000.0, 37.684764], [1441753344.0, 78960000.0, 37.653184], [1441755072.0, 78980000.0, 37.621596000000004], [1441756800.0, 79000000.0, 37.589999999999996], [1441758528.0, 79020000.0, 37.558395999999995], [1441760256.0, 79040000.0, 37.526784], [1441761984.0, 79060000.0, 37.495164], [1441763712.0, 79080000.0, 37.463536], [1441765440.0, 79100000.0, 37.4319], [1441767168.0, 79120000.0, 37.400256], [1441768896.0, 79140000.0, 37.368604000000005], [1441770624.0, 79160000.0, 37.336943999999995], [1441772352.0, 79180000.0, 37.305276], [1441774080.0, 79200000.0, 37.2736], [1441775808.0, 79220000.0, 37.241916], [1441777536.0, 79240000.0, 37.210224], [1441779264.0, 79260000.0, 37.178523999999996], [1441780992.0, 79280000.0, 37.146816], [1441782720.0, 79300000.0, 37.115100000000005], [1441784448.0, 79320000.0, 37.083375999999994], [1441786176.0, 79340000.0, 37.051643999999996], [1441787904.0, 79360000.0, 37.019904000000004], [1441789632.0, 79380000.0, 36.988156000000004], [1441791360.0, 79400000.0, 36.956399999999995], [1441793088.0, 79420000.0, 36.924636], [1441794816.0, 79440000.0, 36.892864], [1441796544.0, 79460000.0, 36.861084000000005], [1441798272.0, 79480000.0, 36.82929599999999], [1441800000.0, 79500000.0, 36.7975], [1441801728.0, 79520000.0, 36.765696], [1441803456.0, 79540000.0, 36.733884], [1441805184.0, 79560000.0, 36.70206399999999], [1441806912.0, 79580000.0, 36.670235999999996], [1441808640.0, 79600000.0, 36.6384], [1441810368.0, 79620000.0, 36.606556000000005], [1441812096.0, 79640000.0, 36.57470399999999], [1441813824.0, 79660000.0, 36.542843999999995], [1441815552.0, 79680000.0, 36.510976], [1441817280.0, 79700000.0, 36.4791], [1441819008.0, 79720000.0, 36.44721599999999], [1441820736.0, 79740000.0, 36.415324], [1441822464.0, 79760000.0, 36.383424], [1441824192.0, 79780000.0, 36.351516000000004], [1441825920.0, 79800000.0, 36.319599999999994], [1441827648.0, 79820000.0, 36.287676], [1441829376.0, 79840000.0, 36.255744], [1441831104.0, 79860000.0, 36.223804], [1441832832.0, 79880000.0, 36.191855999999994], [1441834560.0, 79900000.0, 36.15989999999999], [1441836288.0, 79920000.0, 36.127936], [1441838016.0, 79940000.0, 36.095964], [1441839744.0, 79960000.0, 36.06398399999999], [1441841472.0, 79980000.0, 36.031996], [1441843200.0, 80000000.0, 36.0], [1441844928.0, 80020000.0, 35.967995999999985], [1441846656.0, 80040000.0, 35.935984000000005], [1441848384.0, 80060000.0, 35.903964], [1441850112.0, 80080000.0, 35.87193600000002], [1441851840.0, 80100000.0, 35.8399], [1441853568.0, 80120000.0, 35.80785599999999], [1441855296.0, 80140000.0, 35.77580400000001], [1441857024.0, 80160000.0, 35.74374400000001], [1441858752.0, 80180000.0, 35.71167599999998], [1441860480.0, 80200000.0, 35.67960000000001], [1441862208.0, 80220000.0, 35.647515999999996], [1441863936.0, 80240000.0, 35.61542400000002], [1441865664.0, 80260000.0, 35.583324000000005], [1441867392.0, 80280000.0, 35.551216], [1441869120.0, 80300000.0, 35.51910000000001], [1441870848.0, 80320000.0, 35.486976], [1441872576.0, 80340000.0, 35.454843999999994], [1441874304.0, 80360000.0, 35.42270400000001], [1441876032.0, 80380000.0, 35.39055599999999], [1441877760.0, 80400000.0, 35.35840000000002], [1441879488.0, 80420000.0, 35.32623600000001], [1441881216.0, 80440000.0, 35.29406399999999], [1441882944.0, 80460000.0, 35.26188400000001], [1441884672.0, 80480000.0, 35.229696000000004], [1441886400.0, 80500000.0, 35.19749999999999], [1441888128.0, 80520000.0, 35.16529600000001], [1441889856.0, 80540000.0, 35.133084], [1441891584.0, 80560000.0, 35.100864000000016], [1441893312.0, 80580000.0, 35.068636], [1441895040.0, 80600000.0, 35.036399999999986], [1441896768.0, 80620000.0, 35.00415600000001], [1441898496.0, 80640000.0, 34.971903999999995], [1441900224.0, 80660000.0, 34.93964399999999], [1441901952.0, 80680000.0, 34.907376], [1441903680.0, 80700000.0, 34.87509999999999], [1441905408.0, 80720000.0, 34.84281600000001], [1441907136.0, 80740000.0, 34.810524], [1441908864.0, 80760000.0, 34.778223999999994], [1441910592.0, 80780000.0, 34.74591600000001], [1441912320.0, 80800000.0, 34.7136], [1441914048.0, 80820000.0, 34.68127599999998], [1441915776.0, 80840000.0, 34.648944], [1441917504.0, 80860000.0, 34.616603999999995], [1441919232.0, 80880000.0, 34.58425600000001], [1441920960.0, 80900000.0, 34.5519], [1441922688.0, 80920000.0, 34.51953599999999], [1441924416.0, 80940000.0, 34.48716400000001], [1441926144.0, 80960000.0, 34.454784000000004], [1441927872.0, 80980000.0, 34.42239599999999], [1441929600.0, 81000000.0, 34.39], [1441931328.0, 81020000.0, 34.357596], [1441933056.0, 81040000.0, 34.32518400000001], [1441934784.0, 81060000.0, 34.292764000000005], [1441936512.0, 81080000.0, 34.260335999999995], [1441938240.0, 81100000.0, 34.227900000000005], [1441939968.0, 81120000.0, 34.19545599999999], [1441941696.0, 81140000.0, 34.16300399999999], [1441943424.0, 81160000.0, 34.130544], [1441945152.0, 81180000.0, 34.09807599999999], [1441946880.0, 81200000.0, 34.06560000000002], [1441948608.0, 81220000.0, 34.03311600000001], [1441950336.0, 81240000.0, 34.00062399999999], [1441952064.0, 81260000.0, 33.968124], [1441953792.0, 81280000.0, 33.935615999999996], [1441955520.0, 81300000.0, 33.90309999999998], [1441957248.0, 81320000.0, 33.870576], [1441958976.0, 81340000.0, 33.838044], [1441960704.0, 81360000.0, 33.80550400000001], [1441962432.0, 81380000.0, 33.77295600000001], [1441964160.0, 81400000.0, 33.740399999999994], [1441965888.0, 81420000.0, 33.707836000000015], [1441967616.0, 81440000.0, 33.675264], [1441969344.0, 81460000.0, 33.64268399999999], [1441971072.0, 81480000.0, 33.610096], [1441972800.0, 81500000.0, 33.5775], [1441974528.0, 81520000.0, 33.54489600000001], [1441976256.0, 81540000.0, 33.51228400000001], [1441977984.0, 81560000.0, 33.479663999999985], [1441979712.0, 81580000.0, 33.44703600000001], [1441981440.0, 81600000.0, 33.4144], [1441983168.0, 81620000.0, 33.38175599999998], [1441984896.0, 81640000.0, 33.34910400000001], [1441986624.0, 81660000.0, 33.31644399999999], [1441988352.0, 81680000.0, 33.28377600000002], [1441990080.0, 81700000.0, 33.25110000000001], [1441991808.0, 81720000.0, 33.21841599999999], [1441993536.0, 81740000.0, 33.18572400000001], [1441995264.0, 81760000.0, 33.153024], [1441996992.0, 81780000.0, 33.12031599999999], [1441998720.0, 81800000.0, 33.08760000000001], [1442000448.0, 81820000.0, 33.05487599999999], [1442002176.0, 81840000.0, 33.02214400000001], [1442003904.0, 81860000.0, 32.98940400000001], [1442005632.0, 81880000.0, 32.956655999999995], [1442007360.0, 81900000.0, 32.9239], [1442009088.0, 81920000.0, 32.891136], [1442010816.0, 81940000.0, 32.85836399999998], [1442012544.0, 81960000.0, 32.825584000000006], [1442014272.0, 81980000.0, 32.792795999999996], [1442016000.0, 82000000.0, 32.760000000000005], [1442017728.0, 82020000.0, 32.727196000000006], [1442019456.0, 82040000.0, 32.694383999999985], [1442021184.0, 82060000.0, 32.66156400000001], [1442022912.0, 82080000.0, 32.628736], [1442024640.0, 82100000.0, 32.595899999999986], [1442026368.0, 82120000.0, 32.563056], [1442028096.0, 82140000.0, 32.530204], [1442029824.0, 82160000.0, 32.49734400000001], [1442031552.0, 82180000.0, 32.464476000000005], [1442033280.0, 82200000.0, 32.43159999999999], [1442035008.0, 82220000.0, 32.39871600000001], [1442036736.0, 82240000.0, 32.365824], [1442038464.0, 82260000.0, 32.33292399999999], [1442040192.0, 82280000.0, 32.300016], [1442041920.0, 82300000.0, 32.2671], [1442043648.0, 82320000.0, 32.234176000000005], [1442045376.0, 82340000.0, 32.201244], [1442047104.0, 82360000.0, 32.16830399999999], [1442048832.0, 82380000.0, 32.135356], [1442050560.0, 82400000.0, 32.1024], [1442052288.0, 82420000.0, 32.06943599999998], [1442054016.0, 82440000.0, 32.03646400000001], [1442055744.0, 82460000.0, 32.003483999999986], [1442057472.0, 82480000.0, 31.97049600000001], [1442059200.0, 82500000.0, 31.9375], [1442060928.0, 82520000.0, 31.904495999999995], [1442062656.0, 82540000.0, 31.87148400000001], [1442064384.0, 82560000.0, 31.838464000000002], [1442066112.0, 82580000.0, 31.805436000000014], [1442067840.0, 82600000.0, 31.772400000000005], [1442069568.0, 82620000.0, 31.739355999999987], [1442071296.0, 82640000.0, 31.706304000000017], [1442073024.0, 82660000.0, 31.673243999999997], [1442074752.0, 82680000.0, 31.640175999999983], [1442076480.0, 82700000.0, 31.607100000000003], [1442078208.0, 82720000.0, 31.574016], [1442079936.0, 82740000.0, 31.540924000000018], [1442081664.0, 82760000.0, 31.507824], [1442083392.0, 82780000.0, 31.474715999999987], [1442085120.0, 82800000.0, 31.441600000000008], [1442086848.0, 82820000.0, 31.408475999999993], [1442088576.0, 82840000.0, 31.375343999999984], [1442090304.0, 82860000.0, 31.34220400000001], [1442092032.0, 82880000.0, 31.309055999999998], [1442093760.0, 82900000.0, 31.275900000000007], [1442095488.0, 82920000.0, 31.242736000000008], [1442097216.0, 82940000.0, 31.209563999999986], [1442098944.0, 82960000.0, 31.176384000000013], [1442100672.0, 82980000.0, 31.143196000000003], [1442102400.0, 83000000.0, 31.109999999999985], [1442104128.0, 83020000.0, 31.076796], [1442105856.0, 83040000.0, 31.043583999999996], [1442107584.0, 83060000.0, 31.01036400000001], [1442109312.0, 83080000.0, 30.977136], [1442111040.0, 83100000.0, 30.943899999999985], [1442112768.0, 83120000.0, 30.910656000000017], [1442114496.0, 83140000.0, 30.877404], [1442116224.0, 83160000.0, 30.844143999999986], [1442117952.0, 83180000.0, 30.810876000000007], [1442119680.0, 83200000.0, 30.777599999999993], [1442121408.0, 83220000.0, 30.744316000000012], [1442123136.0, 83240000.0, 30.71102400000001], [1442124864.0, 83260000.0, 30.677723999999998], [1442126592.0, 83280000.0, 30.644416000000007], [1442128320.0, 83300000.0, 30.611099999999993], [1442130048.0, 83320000.0, 30.577775999999986], [1442131776.0, 83340000.0, 30.544444000000013], [1442133504.0, 83360000.0, 30.51110399999999], [1442135232.0, 83380000.0, 30.477756000000014], [1442136960.0, 83400000.0, 30.4444], [1442138688.0, 83420000.0, 30.411035999999996], [1442140416.0, 83440000.0, 30.37766400000001], [1442142144.0, 83460000.0, 30.344284000000002], [1442143872.0, 83480000.0, 30.310895999999985], [1442145600.0, 83500000.0, 30.277500000000003], [1442147328.0, 83520000.0, 30.244096], [1442149056.0, 83540000.0, 30.210684000000015], [1442150784.0, 83560000.0, 30.177264000000008], [1442152512.0, 83580000.0, 30.143835999999993], [1442154240.0, 83600000.0, 30.110400000000013], [1442155968.0, 83620000.0, 30.076955999999996], [1442157696.0, 83640000.0, 30.043503999999984], [1442159424.0, 83660000.0, 30.010044000000008], [1442161152.0, 83680000.0, 29.976575999999994], [1442162880.0, 83700000.0, 29.943100000000015], [1442164608.0, 83720000.0, 29.909616], [1442166336.0, 83740000.0, 29.87612399999999], [1442168064.0, 83760000.0, 29.842624000000015], [1442169792.0, 83780000.0, 29.809116000000003], [1442171520.0, 83800000.0, 29.775599999999983], [1442173248.0, 83820000.0, 29.74207600000001], [1442174976.0, 83840000.0, 29.70854399999999], [1442176704.0, 83860000.0, 29.675004000000015], [1442178432.0, 83880000.0, 29.641456000000005], [1442180160.0, 83900000.0, 29.607899999999987], [1442181888.0, 83920000.0, 29.574336000000002], [1442183616.0, 83940000.0, 29.540763999999996], [1442185344.0, 83960000.0, 29.50718399999998], [1442187072.0, 83980000.0, 29.473596], [1442188800.0, 84000000.0, 29.439999999999998], [1442190528.0, 84020000.0, 29.406396000000015], [1442192256.0, 84040000.0, 29.372783999999996], [1442193984.0, 84060000.0, 29.339163999999997], [1442195712.0, 84080000.0, 29.305536000000004], [1442197440.0, 84100000.0, 29.271900000000002], [1442199168.0, 84120000.0, 29.238255999999993], [1442200896.0, 84140000.0, 29.204604000000003], [1442202624.0, 84160000.0, 29.17094399999999], [1442204352.0, 84180000.0, 29.137276000000014], [1442206080.0, 84200000.0, 29.1036], [1442207808.0, 84220000.0, 29.069915999999992], [1442209536.0, 84240000.0, 29.036224000000004], [1442211264.0, 84260000.0, 29.002523999999994], [1442212992.0, 84280000.0, 28.96881599999999], [1442214720.0, 84300000.0, 28.935100000000006], [1442216448.0, 84320000.0, 28.901376], [1442218176.0, 84340000.0, 28.867644000000013], [1442219904.0, 84360000.0, 28.833904000000004], [1442221632.0, 84380000.0, 28.800155999999987], [1442223360.0, 84400000.0, 28.766400000000004], [1442225088.0, 84420000.0, 28.732636], [1442226816.0, 84440000.0, 28.698863999999986], [1442228544.0, 84460000.0, 28.665084000000007], [1442230272.0, 84480000.0, 28.631295999999992], [1442232000.0, 84500000.0, 28.59750000000001], [1442233728.0, 84520000.0, 28.563696000000007], [1442235456.0, 84540000.0, 28.529883999999996], [1442237184.0, 84560000.0, 28.496064000000004], [1442238912.0, 84580000.0, 28.46223599999999], [1442240640.0, 84600000.0, 28.428399999999982], [1442242368.0, 84620000.0, 28.39455600000001], [1442244096.0, 84640000.0, 28.360704], [1442245824.0, 84660000.0, 28.32684400000001], [1442247552.0, 84680000.0, 28.292975999999996], [1442249280.0, 84700000.0, 28.25909999999999], [1442251008.0, 84720000.0, 28.225216000000003], [1442252736.0, 84740000.0, 28.191323999999994], [1442254464.0, 84760000.0, 28.157423999999992], [1442256192.0, 84780000.0, 28.12351600000001], [1442257920.0, 84800000.0, 28.08959999999999], [1442259648.0, 84820000.0, 28.055676000000005], [1442261376.0, 84840000.0, 28.021743999999998], [1442263104.0, 84860000.0, 27.987803999999983], [1442264832.0, 84880000.0, 27.953856000000002], [1442266560.0, 84900000.0, 27.9199], [1442268288.0, 84920000.0, 27.885935999999987], [1442270016.0, 84940000.0, 27.85196400000001], [1442271744.0, 84960000.0, 27.817983999999996], [1442273472.0, 84980000.0, 27.783996000000016], [1442275200.0, 85000000.0, 27.75], [1442276928.0, 85020000.0, 27.71599599999999], [1442278656.0, 85040000.0, 27.681984000000014], [1442280384.0, 85060000.0, 27.647964], [1442282112.0, 85080000.0, 27.61393600000001], [1442283840.0, 85100000.0, 27.57990000000001], [1442285568.0, 85120000.0, 27.545855999999986], [1442287296.0, 85140000.0, 27.511804000000012], [1442289024.0, 85160000.0, 27.477744], [1442290752.0, 85180000.0, 27.443675999999982], [1442292480.0, 85200000.0, 27.40960000000001], [1442294208.0, 85220000.0, 27.37551599999999], [1442295936.0, 85240000.0, 27.341424000000018], [1442297664.0, 85260000.0, 27.30732400000001], [1442299392.0, 85280000.0, 27.27321599999999], [1442301120.0, 85300000.0, 27.239100000000008], [1442302848.0, 85320000.0, 27.204976000000002], [1442304576.0, 85340000.0, 27.17084399999999], [1442306304.0, 85360000.0, 27.13670400000001], [1442308032.0, 85380000.0, 27.102555999999993], [1442309760.0, 85400000.0, 27.06840000000001], [1442311488.0, 85420000.0, 27.034236000000007], [1442313216.0, 85440000.0, 27.000063999999995], [1442314944.0, 85460000.0, 26.965884000000017], [1442316672.0, 85480000.0, 26.931696000000002], [1442318400.0, 85500000.0, 26.897499999999994], [1442320128.0, 85520000.0, 26.863296000000005], [1442321856.0, 85540000.0, 26.829083999999995], [1442323584.0, 85560000.0, 26.794864000000018], [1442325312.0, 85580000.0, 26.760636000000005], [1442327040.0, 85600000.0, 26.726399999999998], [1442328768.0, 85620000.0, 26.69215600000001], [1442330496.0, 85640000.0, 26.657904000000002], [1442332224.0, 85660000.0, 26.623643999999985], [1442333952.0, 85680000.0, 26.589376], [1442335680.0, 85700000.0, 26.555099999999996], [1442337408.0, 85720000.0, 26.52081600000001], [1442339136.0, 85740000.0, 26.486524000000003], [1442340864.0, 85760000.0, 26.452223999999987], [1442342592.0, 85780000.0, 26.417916000000005], [1442344320.0, 85800000.0, 26.3836], [1442346048.0, 85820000.0, 26.34927599999999], [1442347776.0, 85840000.0, 26.31494400000001], [1442349504.0, 85860000.0, 26.280603999999997], [1442351232.0, 85880000.0, 26.246256000000017], [1442352960.0, 85900000.0, 26.2119], [1442354688.0, 85920000.0, 26.17753599999999], [1442356416.0, 85940000.0, 26.143164000000013], [1442358144.0, 85960000.0, 26.108784], [1442359872.0, 85980000.0, 26.074395999999993], [1442361600.0, 86000000.0, 26.040000000000006], [1442363328.0, 86020000.0, 26.005595999999997], [1442365056.0, 86040000.0, 25.971184000000008], [1442366784.0, 86060000.0, 25.936763999999997], [1442368512.0, 86080000.0, 25.90233599999999], [1442370240.0, 86100000.0, 25.867900000000006], [1442371968.0, 86120000.0, 25.833455999999998], [1442373696.0, 86140000.0, 25.799003999999982], [1442375424.0, 86160000.0, 25.764544], [1442377152.0, 86180000.0, 25.730075999999997], [1442378880.0, 86200000.0, 25.695600000000013], [1442380608.0, 86220000.0, 25.661116000000007], [1442382336.0, 86240000.0, 25.626623999999993], [1442384064.0, 86260000.0, 25.592124000000013], [1442385792.0, 86280000.0, 25.557615999999996], [1442387520.0, 86300000.0, 25.523099999999985], [1442389248.0, 86320000.0, 25.48857600000001], [1442390976.0, 86340000.0, 25.454043999999996], [1442392704.0, 86360000.0, 25.419504000000018], [1442394432.0, 86380000.0, 25.384956000000003], [1442396160.0, 86400000.0, 25.350399999999993], [1442397888.0, 86420000.0, 25.315836000000004], [1442399616.0, 86440000.0, 25.281263999999993], [1442401344.0, 86460000.0, 25.246683999999988], [1442403072.0, 86480000.0, 25.212096000000003], [1442404800.0, 86500000.0, 25.177499999999995], [1442406528.0, 86520000.0, 25.142896000000007], [1442408256.0, 86540000.0, 25.108283999999998], [1442409984.0, 86560000.0, 25.073663999999994], [1442411712.0, 86580000.0, 25.03903600000001], [1442413440.0, 86600000.0, 25.004400000000004], [1442415168.0, 86620000.0, 24.96975599999999], [1442416896.0, 86640000.0, 24.93510400000001], [1442418624.0, 86660000.0, 24.900443999999993], [1442420352.0, 86680000.0, 24.86577600000001], [1442422080.0, 86700000.0, 24.831100000000006], [1442423808.0, 86720000.0, 24.796415999999994], [1442425536.0, 86740000.0, 24.761724000000015], [1442427264.0, 86760000.0, 24.727024], [1442428992.0, 86780000.0, 24.69231599999999], [1442430720.0, 86800000.0, 24.657600000000002], [1442432448.0, 86820000.0, 24.62287599999999], [1442434176.0, 86840000.0, 24.588144000000014], [1442435904.0, 86860000.0, 24.553404], [1442437632.0, 86880000.0, 24.518655999999993], [1442439360.0, 86900000.0, 24.483900000000006], [1442441088.0, 86920000.0, 24.449135999999996], [1442442816.0, 86940000.0, 24.414363999999992], [1442444544.0, 86960000.0, 24.37958400000001], [1442446272.0, 86980000.0, 24.344795999999988], [1442448000.0, 87000000.0, 24.310000000000016], [1442449728.0, 87020000.0, 24.275195999999994], [1442451456.0, 87040000.0, 24.24038399999999], [1442453184.0, 87060000.0, 24.20556400000001], [1442454912.0, 87080000.0, 24.17073599999999], [1442456640.0, 87100000.0, 24.135899999999978], [1442458368.0, 87120000.0, 24.101056], [1442460096.0, 87140000.0, 24.066204], [1442461824.0, 87160000.0, 24.03134400000002], [1442463552.0, 87180000.0, 23.996476], [1442465280.0, 87200000.0, 23.96159999999999], [1442467008.0, 87220000.0, 23.926716000000013], [1442468736.0, 87240000.0, 23.891824], [1442470464.0, 87260000.0, 23.856923999999978], [1442472192.0, 87280000.0, 23.822016000000005], [1442473920.0, 87300000.0, 23.787099999999995], [1442475648.0, 87320000.0, 23.752176000000006], [1442477376.0, 87340000.0, 23.717243999999994], [1442479104.0, 87360000.0, 23.682303999999988], [1442480832.0, 87380000.0, 23.647356000000002], [1442482560.0, 87400000.0, 23.612399999999994], [1442484288.0, 87420000.0, 23.57743599999999], [1442486016.0, 87440000.0, 23.54246400000001], [1442487744.0, 87460000.0, 23.50748399999999], [1442489472.0, 87480000.0, 23.472496000000007], [1442491200.0, 87500000.0, 23.4375], [1442492928.0, 87520000.0, 23.402495999999985], [1442494656.0, 87540000.0, 23.367484000000005], [1442496384.0, 87560000.0, 23.332464], [1442498112.0, 87580000.0, 23.29743600000002], [1442499840.0, 87600000.0, 23.2624], [1442501568.0, 87620000.0, 23.227355999999986], [1442503296.0, 87640000.0, 23.192304000000007], [1442505024.0, 87660000.0, 23.157244000000006], [1442506752.0, 87680000.0, 23.122175999999982], [1442508480.0, 87700000.0, 23.087100000000007], [1442510208.0, 87720000.0, 23.052015999999995], [1442511936.0, 87740000.0, 23.016924000000017], [1442513664.0, 87760000.0, 22.981824000000003], [1442515392.0, 87780000.0, 22.946715999999995], [1442517120.0, 87800000.0, 22.911600000000007], [1442518848.0, 87820000.0, 22.876475999999997], [1442520576.0, 87840000.0, 22.841343999999992], [1442522304.0, 87860000.0, 22.806204000000008], [1442524032.0, 87880000.0, 22.771056], [1442525760.0, 87900000.0, 22.735900000000015], [1442527488.0, 87920000.0, 22.700736000000006], [1442529216.0, 87940000.0, 22.66556399999999], [1442530944.0, 87960000.0, 22.630384000000006], [1442532672.0, 87980000.0, 22.595196], [1442534400.0, 88000000.0, 22.559999999999988], [1442536128.0, 88020000.0, 22.52479600000001], [1442537856.0, 88040000.0, 22.489583999999994], [1442539584.0, 88060000.0, 22.454364000000012], [1442541312.0, 88080000.0, 22.41913600000001], [1442543040.0, 88100000.0, 22.383899999999997], [1442544768.0, 88120000.0, 22.348656000000005], [1442546496.0, 88140000.0, 22.313404000000006], [1442548224.0, 88160000.0, 22.278143999999983], [1442549952.0, 88180000.0, 22.24287600000001], [1442551680.0, 88200000.0, 22.2076], [1442553408.0, 88220000.0, 22.17231600000001], [1442555136.0, 88240000.0, 22.137023999999997], [1442556864.0, 88260000.0, 22.10172399999999], [1442558592.0, 88280000.0, 22.066416000000004], [1442560320.0, 88300000.0, 22.031099999999995], [1442562048.0, 88320000.0, 21.995775999999992], [1442563776.0, 88340000.0, 21.96044400000001], [1442565504.0, 88360000.0, 21.92510399999999], [1442567232.0, 88380000.0, 21.88975600000002], [1442568960.0, 88400000.0, 21.8544], [1442570688.0, 88420000.0, 21.819035999999997], [1442572416.0, 88440000.0, 21.783664000000016], [1442574144.0, 88460000.0, 21.748283999999998], [1442575872.0, 88480000.0, 21.712895999999986], [1442577600.0, 88500000.0, 21.67750000000001], [1442579328.0, 88520000.0, 21.642095999999995], [1442581056.0, 88540000.0, 21.606684000000016], [1442582784.0, 88560000.0, 21.571264], [1442584512.0, 88580000.0, 21.53583599999999], [1442586240.0, 88600000.0, 21.500400000000013], [1442587968.0, 88620000.0, 21.464956], [1442589696.0, 88640000.0, 21.42950399999998], [1442591424.0, 88660000.0, 21.394044000000008], [1442593152.0, 88680000.0, 21.358576], [1442594880.0, 88700000.0, 21.32310000000001], [1442596608.0, 88720000.0, 21.287616], [1442598336.0, 88740000.0, 21.252123999999995], [1442600064.0, 88760000.0, 21.21662400000001], [1442601792.0, 88780000.0, 21.181116000000003], [1442603520.0, 88800000.0, 21.145599999999988], [1442605248.0, 88820000.0, 21.110076000000007], [1442606976.0, 88840000.0, 21.07454399999999], [1442608704.0, 88860000.0, 21.03900400000002], [1442610432.0, 88880000.0, 21.003456], [1442612160.0, 88900000.0, 20.967899999999986], [1442613888.0, 88920000.0, 20.932336000000006], [1442615616.0, 88940000.0, 20.896764000000005], [1442617344.0, 88960000.0, 20.86118399999998], [1442619072.0, 88980000.0, 20.825596000000004], [1442620800.0, 89000000.0, 20.789999999999992], [1442622528.0, 89020000.0, 20.754396000000014], [1442624256.0, 89040000.0, 20.718784], [1442625984.0, 89060000.0, 20.68316399999999], [1442627712.0, 89080000.0, 20.647536000000002], [1442629440.0, 89100000.0, 20.61189999999999], [1442631168.0, 89120000.0, 20.576255999999987], [1442632896.0, 89140000.0, 20.540604000000002], [1442634624.0, 89160000.0, 20.504943999999995], [1442636352.0, 89180000.0, 20.469276000000008], [1442638080.0, 89200000.0, 20.4336], [1442639808.0, 89220000.0, 20.397915999999995], [1442641536.0, 89240000.0, 20.362224000000012], [1442643264.0, 89260000.0, 20.326523999999992], [1442644992.0, 89280000.0, 20.290815999999978], [1442646720.0, 89300000.0, 20.2551], [1442648448.0, 89320000.0, 20.219375999999997], [1442650176.0, 89340000.0, 20.183644000000015], [1442651904.0, 89360000.0, 20.147903999999997], [1442653632.0, 89380000.0, 20.112155999999985], [1442655360.0, 89400000.0, 20.076400000000007], [1442657088.0, 89420000.0, 20.040635999999992], [1442658816.0, 89440000.0, 20.004863999999984], [1442660544.0, 89460000.0, 19.96908400000001], [1442662272.0, 89480000.0, 19.933296], [1442664000.0, 89500000.0, 19.897500000000008], [1442665728.0, 89520000.0, 19.861695999999995], [1442667456.0, 89540000.0, 19.825883999999988], [1442669184.0, 89560000.0, 19.790064000000015], [1442670912.0, 89580000.0, 19.75423599999999], [1442672640.0, 89600000.0, 19.71839999999999], [1442674368.0, 89620000.0, 19.682556000000005], [1442676096.0, 89640000.0, 19.646703999999986], [1442677824.0, 89660000.0, 19.610844000000014], [1442679552.0, 89680000.0, 19.574976000000007], [1442681280.0, 89700000.0, 19.53909999999999], [1442683008.0, 89720000.0, 19.50321600000001], [1442684736.0, 89740000.0, 19.46732399999999], [1442686464.0, 89760000.0, 19.43142399999998], [1442688192.0, 89780000.0, 19.395516], [1442689920.0, 89800000.0, 19.359599999999986], [1442691648.0, 89820000.0, 19.323676000000006], [1442693376.0, 89840000.0, 19.287744000000004], [1442695104.0, 89860000.0, 19.251803999999993], [1442696832.0, 89880000.0, 19.215856000000002], [1442698560.0, 89900000.0, 19.17989999999999], [1442700288.0, 89920000.0, 19.143935999999982], [1442702016.0, 89940000.0, 19.10796400000001], [1442703744.0, 89960000.0, 19.071983999999986], [1442705472.0, 89980000.0, 19.03599600000001], [1442707200.0, 90000000.0, 19.0], [1442708928.0, 90020000.0, 18.963995999999995], [1442710656.0, 90040000.0, 18.92798400000001], [1442712384.0, 90060000.0, 18.891964], [1442714112.0, 90080000.0, 18.855936000000014], [1442715840.0, 90100000.0, 18.819900000000004], [1442717568.0, 90120000.0, 18.783855999999986], [1442719296.0, 90140000.0, 18.747804000000016], [1442721024.0, 90160000.0, 18.711743999999996], [1442722752.0, 90180000.0, 18.67567599999998], [1442724480.0, 90200000.0, 18.6396], [1442726208.0, 90220000.0, 18.603516], [1442727936.0, 90240000.0, 18.567424000000017], [1442729664.0, 90260000.0, 18.531323999999998], [1442731392.0, 90280000.0, 18.495215999999985], [1442733120.0, 90300000.0, 18.459100000000007], [1442734848.0, 90320000.0, 18.422976000000006], [1442736576.0, 90340000.0, 18.386843999999982], [1442738304.0, 90360000.0, 18.350704000000007], [1442740032.0, 90380000.0, 18.314555999999996], [1442741760.0, 90400000.0, 18.27840000000002], [1442743488.0, 90420000.0, 18.242236000000005], [1442745216.0, 90440000.0, 18.206063999999998], [1442746944.0, 90460000.0, 18.16988400000001], [1442748672.0, 90480000.0, 18.133696], [1442750400.0, 90500000.0, 18.097499999999982], [1442752128.0, 90520000.0, 18.061296000000013], [1442753856.0, 90540000.0, 18.025083999999993], [1442755584.0, 90560000.0, 17.98886400000002], [1442757312.0, 90580000.0, 17.952636], [1442759040.0, 90600000.0, 17.916399999999996], [1442760768.0, 90620000.0, 17.880156000000014], [1442762496.0, 90640000.0, 17.843903999999995], [1442764224.0, 90660000.0, 17.807643999999982], [1442765952.0, 90680000.0, 17.771376000000004], [1442767680.0, 90700000.0, 17.73509999999999], [1442769408.0, 90720000.0, 17.698816000000008], [1442771136.0, 90740000.0, 17.662524000000005], [1442772864.0, 90760000.0, 17.626223999999993], [1442774592.0, 90780000.0, 17.589916000000017], [1442776320.0, 90800000.0, 17.553600000000003], [1442778048.0, 90820000.0, 17.51727599999998], [1442779776.0, 90840000.0, 17.480944000000008], [1442781504.0, 90860000.0, 17.444603999999998], [1442783232.0, 90880000.0, 17.40825600000001], [1442784960.0, 90900000.0, 17.371899999999997], [1442786688.0, 90920000.0, 17.33553599999999], [1442788416.0, 90940000.0, 17.299164000000005], [1442790144.0, 90960000.0, 17.262783999999996], [1442791872.0, 90980000.0, 17.22639599999998], [1442793600.0, 91000000.0, 17.190000000000012], [1442795328.0, 91020000.0, 17.153595999999993], [1442797056.0, 91040000.0, 17.11718400000001], [1442798784.0, 91060000.0, 17.080764000000002], [1442800512.0, 91080000.0, 17.044335999999987], [1442802240.0, 91100000.0, 17.007900000000006], [1442803968.0, 91120000.0, 16.971456000000003], [1442805696.0, 91140000.0, 16.935003999999992], [1442807424.0, 91160000.0, 16.898544], [1442809152.0, 91180000.0, 16.862075999999988], [1442810880.0, 91200000.0, 16.82560000000001], [1442812608.0, 91220000.0, 16.789116000000007], [1442814336.0, 91240000.0, 16.752623999999983], [1442816064.0, 91260000.0, 16.716124000000008], [1442817792.0, 91280000.0, 16.679615999999996], [1442819520.0, 91300000.0, 16.64309999999999], [1442821248.0, 91320000.0, 16.606576000000004], [1442822976.0, 91340000.0, 16.570043999999996], [1442824704.0, 91360000.0, 16.533504000000008], [1442826432.0, 91380000.0, 16.496955999999997], [1442828160.0, 91400000.0, 16.460399999999993], [1442829888.0, 91420000.0, 16.42383600000001], [1442831616.0, 91440000.0, 16.387264000000002], [1442833344.0, 91460000.0, 16.350683999999987], [1442835072.0, 91480000.0, 16.314096000000006], [1442836800.0, 91500000.0, 16.27749999999999], [1442838528.0, 91520000.0, 16.24089600000002], [1442840256.0, 91540000.0, 16.204284], [1442841984.0, 91560000.0, 16.167663999999988], [1442843712.0, 91580000.0, 16.13103600000001], [1442845440.0, 91600000.0, 16.094399999999993], [1442847168.0, 91620000.0, 16.057755999999983], [1442848896.0, 91640000.0, 16.02110400000001], [1442850624.0, 91660000.0, 15.984443999999996], [1442852352.0, 91680000.0, 15.947776000000019], [1442854080.0, 91700000.0, 15.911100000000005], [1442855808.0, 91720000.0, 15.874415999999982], [1442857536.0, 91740000.0, 15.837724000000009], [1442859264.0, 91760000.0, 15.801023999999998], [1442860992.0, 91780000.0, 15.76431599999998], [1442862720.0, 91800000.0, 15.72760000000001], [1442864448.0, 91820000.0, 15.690875999999989], [1442866176.0, 91840000.0, 15.654144000000016], [1442867904.0, 91860000.0, 15.617404000000008], [1442869632.0, 91880000.0, 15.58065599999999], [1442871360.0, 91900000.0, 15.543900000000008], [1442873088.0, 91920000.0, 15.507136000000003], [1442874816.0, 91940000.0, 15.47036399999999], [1442876544.0, 91960000.0, 15.43358400000001], [1442878272.0, 91980000.0, 15.396795999999995], [1442880000.0, 92000000.0, 15.360000000000014], [1442881728.0, 92020000.0, 15.323195999999996], [1442883456.0, 92040000.0, 15.286383999999984], [1442885184.0, 92060000.0, 15.249564000000007], [1442886912.0, 92080000.0, 15.212735999999992], [1442888640.0, 92100000.0, 15.175899999999984], [1442890368.0, 92120000.0, 15.13905600000001], [1442892096.0, 92140000.0, 15.102203999999986], [1442893824.0, 92160000.0, 15.06534400000001], [1442895552.0, 92180000.0, 15.028475999999998], [1442897280.0, 92200000.0, 14.991599999999991], [1442899008.0, 92220000.0, 14.954716000000005], [1442900736.0, 92240000.0, 14.917823999999996], [1442902464.0, 92260000.0, 14.880923999999979], [1442904192.0, 92280000.0, 14.84401600000001], [1442905920.0, 92300000.0, 14.807099999999991], [1442907648.0, 92320000.0, 14.770176000000006], [1442909376.0, 92340000.0, 14.733244], [1442911104.0, 92360000.0, 14.696303999999984], [1442912832.0, 92380000.0, 14.659356000000002], [1442914560.0, 92400000.0, 14.622399999999999], [1442916288.0, 92420000.0, 14.585435999999987], [1442918016.0, 92440000.0, 14.54846400000001], [1442919744.0, 92460000.0, 14.511483999999996], [1442921472.0, 92480000.0, 14.474496000000016], [1442923200.0, 92500000.0, 14.4375], [1442924928.0, 92520000.0, 14.40049599999999], [1442926656.0, 92540000.0, 14.363484000000014], [1442928384.0, 92560000.0, 14.326464000000001], [1442930112.0, 92580000.0, 14.289436000000023], [1442931840.0, 92600000.0, 14.252400000000009], [1442933568.0, 92620000.0, 14.215355999999986], [1442935296.0, 92640000.0, 14.178304000000011], [1442937024.0, 92660000.0, 14.141244], [1442938752.0, 92680000.0, 14.104175999999981], [1442940480.0, 92700000.0, 14.06710000000001], [1442942208.0, 92720000.0, 14.03001599999999], [1442943936.0, 92740000.0, 13.992924000000016], [1442945664.0, 92760000.0, 13.955824000000007], [1442947392.0, 92780000.0, 13.91871599999999], [1442949120.0, 92800000.0, 13.881600000000006], [1442950848.0, 92820000.0, 13.844476], [1442952576.0, 92840000.0, 13.807343999999986], [1442954304.0, 92860000.0, 13.770204000000007], [1442956032.0, 92880000.0, 13.73305599999999], [1442957760.0, 92900000.0, 13.695900000000009], [1442959488.0, 92920000.0, 13.658736000000005], [1442961216.0, 92940000.0, 13.621563999999992], [1442962944.0, 92960000.0, 13.584384000000014], [1442964672.0, 92980000.0, 13.547196], [1442966400.0, 93000000.0, 13.509999999999991], [1442968128.0, 93020000.0, 13.472796000000002], [1442969856.0, 93040000.0, 13.435583999999992], [1442971584.0, 93060000.0, 13.398364000000015], [1442973312.0, 93080000.0, 13.361136000000002], [1442975040.0, 93100000.0, 13.323899999999995], [1442976768.0, 93120000.0, 13.286656000000008], [1442978496.0, 93140000.0, 13.249403999999998], [1442980224.0, 93160000.0, 13.21214399999998], [1442981952.0, 93180000.0, 13.174876000000012], [1442983680.0, 93200000.0, 13.137599999999992], [1442985408.0, 93220000.0, 13.10031600000002], [1442987136.0, 93240000.0, 13.063023999999999], [1442988864.0, 93260000.0, 13.025723999999997], [1442990592.0, 93280000.0, 12.988416000000015], [1442992320.0, 93300000.0, 12.951099999999997], [1442994048.0, 93320000.0, 12.913775999999984], [1442995776.0, 93340000.0, 12.876444000000006], [1442997504.0, 93360000.0, 12.839103999999992], [1442999232.0, 93380000.0, 12.801756000000012], [1443000960.0, 93400000.0, 12.764400000000009], [1443002688.0, 93420000.0, 12.727035999999984], [1443004416.0, 93440000.0, 12.689664000000008], [1443006144.0, 93460000.0, 12.652283999999995], [1443007872.0, 93480000.0, 12.614895999999987], [1443009600.0, 93500000.0, 12.5775], [1443011328.0, 93520000.0, 12.540095999999991], [1443013056.0, 93540000.0, 12.502684000000016], [1443014784.0, 93560000.0, 12.465264000000005], [1443016512.0, 93580000.0, 12.427835999999985], [1443018240.0, 93600000.0, 12.390400000000014], [1443019968.0, 93620000.0, 12.352955999999992], [1443021696.0, 93640000.0, 12.31550399999999], [1443023424.0, 93660000.0, 12.278044000000008], [1443025152.0, 93680000.0, 12.24057599999999], [1443026880.0, 93700000.0, 12.20310000000002], [1443028608.0, 93720000.0, 12.165616], [1443030336.0, 93740000.0, 12.128123999999985], [1443032064.0, 93760000.0, 12.090624000000005], [1443033792.0, 93780000.0, 12.053116000000003], [1443035520.0, 93800000.0, 12.015599999999992], [1443037248.0, 93820000.0, 11.978076000000001], [1443038976.0, 93840000.0, 11.940543999999989], [1443040704.0, 93860000.0, 11.90300400000001], [1443042432.0, 93880000.0, 11.865456000000009], [1443044160.0, 93900000.0, 11.827899999999985], [1443045888.0, 93920000.0, 11.79033600000001], [1443047616.0, 93940000.0, 11.752763999999999], [1443049344.0, 93960000.0, 11.71518399999998], [1443051072.0, 93980000.0, 11.677596000000008], [1443052800.0, 94000000.0, 11.639999999999986], [1443054528.0, 94020000.0, 11.602396000000013], [1443056256.0, 94040000.0, 11.564784000000003], [1443057984.0, 94060000.0, 11.527163999999985], [1443059712.0, 94080000.0, 11.489536000000015], [1443061440.0, 94100000.0, 11.451899999999995], [1443063168.0, 94120000.0, 11.41425599999998], [1443064896.0, 94140000.0, 11.376604], [1443066624.0, 94160000.0, 11.338943999999998], [1443068352.0, 94180000.0, 11.301276000000016], [1443070080.0, 94200000.0, 11.263599999999997], [1443071808.0, 94220000.0, 11.225915999999984], [1443073536.0, 94240000.0, 11.188224000000005], [1443075264.0, 94260000.0, 11.15052399999999], [1443076992.0, 94280000.0, 11.112815999999981], [1443078720.0, 94300000.0, 11.075100000000006], [1443080448.0, 94320000.0, 11.037375999999995], [1443082176.0, 94340000.0, 10.999644000000018], [1443083904.0, 94360000.0, 10.961904000000004], [1443085632.0, 94380000.0, 10.924155999999982], [1443087360.0, 94400000.0, 10.886400000000009], [1443089088.0, 94420000.0, 10.848635999999999], [1443090816.0, 94440000.0, 10.810863999999981], [1443092544.0, 94460000.0, 10.773084000000011], [1443094272.0, 94480000.0, 10.735295999999991], [1443096000.0, 94500000.0, 10.69750000000002], [1443097728.0, 94520000.0, 10.659695999999997], [1443099456.0, 94540000.0, 10.621883999999994], [1443101184.0, 94560000.0, 10.584064000000012], [1443102912.0, 94580000.0, 10.546235999999993], [1443104640.0, 94600000.0, 10.50839999999998], [1443106368.0, 94620000.0, 10.470556000000002], [1443108096.0, 94640000.0, 10.432703999999987], [1443109824.0, 94660000.0, 10.394844000000006], [1443111552.0, 94680000.0, 10.356976000000003], [1443113280.0, 94700000.0, 10.319099999999992], [1443115008.0, 94720000.0, 10.281216000000015], [1443116736.0, 94740000.0, 10.243324000000001], [1443118464.0, 94760000.0, 10.20542399999998], [1443120192.0, 94780000.0, 10.167516000000006], [1443121920.0, 94800000.0, 10.129599999999996], [1443123648.0, 94820000.0, 10.091676000000007], [1443125376.0, 94840000.0, 10.053743999999995], [1443127104.0, 94860000.0, 10.015803999999989], [1443128832.0, 94880000.0, 9.977856000000003], [1443130560.0, 94900000.0, 9.939899999999994], [1443132288.0, 94920000.0, 9.901935999999978], [1443134016.0, 94940000.0, 9.86396400000001], [1443135744.0, 94960000.0, 9.825983999999991], [1443137472.0, 94980000.0, 9.787996000000007], [1443139200.0, 95000000.0, 9.75], [1443140928.0, 95020000.0, 9.711995999999985], [1443142656.0, 95040000.0, 9.673984000000004], [1443144384.0, 95060000.0, 9.635964000000001], [1443146112.0, 95080000.0, 9.597936000000018], [1443147840.0, 95100000.0, 9.559899999999999], [1443149568.0, 95120000.0, 9.521855999999985], [1443151296.0, 95140000.0, 9.483804000000006], [1443153024.0, 95160000.0, 9.445744000000005], [1443154752.0, 95180000.0, 9.40767599999998], [1443156480.0, 95200000.0, 9.369600000000005], [1443158208.0, 95220000.0, 9.331515999999993], [1443159936.0, 95240000.0, 9.293424000000016], [1443161664.0, 95260000.0, 9.255324000000002], [1443163392.0, 95280000.0, 9.217215999999993], [1443165120.0, 95300000.0, 9.179100000000005], [1443166848.0, 95320000.0, 9.140975999999995], [1443168576.0, 95340000.0, 9.10284399999999], [1443170304.0, 95360000.0, 9.064704000000006], [1443172032.0, 95380000.0, 9.026556], [1443173760.0, 95400000.0, 8.988400000000013], [1443175488.0, 95420000.0, 8.950236000000004], [1443177216.0, 95440000.0, 8.912063999999987], [1443178944.0, 95460000.0, 8.873884000000018], [1443180672.0, 95480000.0, 8.835695999999999], [1443182400.0, 95500000.0, 8.797499999999985], [1443184128.0, 95520000.0, 8.759296000000006], [1443185856.0, 95540000.0, 8.72108399999999], [1443187584.0, 95560000.0, 8.68286400000001], [1443189312.0, 95580000.0, 8.644636000000006], [1443191040.0, 95600000.0, 8.606399999999994], [1443192768.0, 95620000.0, 8.568156000000016], [1443194496.0, 95640000.0, 8.529904000000002], [1443196224.0, 95660000.0, 8.49164399999998], [1443197952.0, 95680000.0, 8.453376000000006], [1443199680.0, 95700000.0, 8.415099999999995], [1443201408.0, 95720000.0, 8.37681600000002], [1443203136.0, 95740000.0, 8.338524000000007], [1443204864.0, 95760000.0, 8.300223999999986], [1443206592.0, 95780000.0, 8.261916000000014], [1443208320.0, 95800000.0, 8.223600000000005], [1443210048.0, 95820000.0, 8.185275999999988], [1443211776.0, 95840000.0, 8.146944000000005], [1443213504.0, 95860000.0, 8.108604], [1443215232.0, 95880000.0, 8.070256000000015], [1443216960.0, 95900000.0, 8.031900000000007], [1443218688.0, 95920000.0, 7.993535999999992], [1443220416.0, 95940000.0, 7.955164000000011], [1443222144.0, 95960000.0, 7.916783999999993], [1443223872.0, 95980000.0, 7.878395999999981], [1443225600.0, 96000000.0, 7.840000000000003], [1443227328.0, 96020000.0, 7.801595999999989], [1443229056.0, 96040000.0, 7.76318400000001], [1443230784.0, 96060000.0, 7.7247640000000075], [1443232512.0, 96080000.0, 7.686335999999983], [1443234240.0, 96100000.0, 7.647900000000007], [1443235968.0, 96120000.0, 7.6094559999999944], [1443237696.0, 96140000.0, 7.571003999999988], [1443239424.0, 96160000.0, 7.5325440000000015], [1443241152.0, 96180000.0, 7.494075999999993], [1443242880.0, 96200000.0, 7.455600000000018], [1443244608.0, 96220000.0, 7.417116000000007], [1443246336.0, 96240000.0, 7.378623999999988], [1443248064.0, 96260000.0, 7.340124000000017], [1443249792.0, 96280000.0, 7.301615999999996], [1443251520.0, 96300000.0, 7.26309999999998], [1443253248.0, 96320000.0, 7.224576000000013], [1443254976.0, 96340000.0, 7.186043999999995], [1443256704.0, 96360000.0, 7.147504000000012], [1443258432.0, 96380000.0, 7.108956000000006], [1443260160.0, 96400000.0, 7.070399999999992], [1443261888.0, 96420000.0, 7.031836000000013], [1443263616.0, 96440000.0, 6.993263999999996], [1443265344.0, 96460000.0, 6.954683999999986], [1443267072.0, 96480000.0, 6.91609600000001], [1443268800.0, 96500000.0, 6.877499999999998], [1443270528.0, 96520000.0, 6.83889600000002], [1443272256.0, 96540000.0, 6.800284000000005], [1443273984.0, 96560000.0, 6.761663999999982], [1443275712.0, 96580000.0, 6.723036000000008], [1443277440.0, 96600000.0, 6.684399999999997], [1443279168.0, 96620000.0, 6.645755999999977], [1443280896.0, 96640000.0, 6.607104000000007], [1443282624.0, 96660000.0, 6.5684439999999995], [1443284352.0, 96680000.0, 6.5297760000000125], [1443286080.0, 96700000.0, 6.491100000000003], [1443287808.0, 96720000.0, 6.452415999999985], [1443289536.0, 96740000.0, 6.413724000000016], [1443291264.0, 96760000.0, 6.375023999999996], [1443292992.0, 96780000.0, 6.336315999999982], [1443294720.0, 96800000.0, 6.297600000000003], [1443296448.0, 96820000.0, 6.258875999999987], [1443298176.0, 96840000.0, 6.220144000000019], [1443299904.0, 96860000.0, 6.181404000000001], [1443301632.0, 96880000.0, 6.142655999999988], [1443303360.0, 96900000.0, 6.10390000000001], [1443305088.0, 96920000.0, 6.065135999999995], [1443306816.0, 96940000.0, 6.026363999999987], [1443308544.0, 96960000.0, 5.987583999999998], [1443310272.0, 96980000.0, 5.948795999999987], [1443312000.0, 97000000.0, 5.910000000000011], [1443313728.0, 97020000.0, 5.871195999999998], [1443315456.0, 97040000.0, 5.8323839999999905], [1443317184.0, 97060000.0, 5.7935640000000035], [1443318912.0, 97080000.0, 5.754735999999994], [1443320640.0, 97100000.0, 5.715899999999976], [1443322368.0, 97120000.0, 5.677056000000007], [1443324096.0, 97140000.0, 5.638203999999988], [1443325824.0, 97160000.0, 5.599344000000016], [1443327552.0, 97180000.0, 5.560475999999994], [1443329280.0, 97200000.0, 5.521599999999992], [1443331008.0, 97220000.0, 5.482716000000011], [1443332736.0, 97240000.0, 5.443823999999992], [1443334464.0, 97260000.0, 5.40492399999998], [1443336192.0, 97280000.0, 5.366016000000002], [1443337920.0, 97300000.0, 5.327099999999987], [1443339648.0, 97320000.0, 5.288176000000007], [1443341376.0, 97340000.0, 5.2492440000000045], [1443343104.0, 97360000.0, 5.210303999999994], [1443344832.0, 97380000.0, 5.171356000000003], [1443346560.0, 97400000.0, 5.13239999999999], [1443348288.0, 97420000.0, 5.093435999999983], [1443350016.0, 97440000.0, 5.05446400000001], [1443351744.0, 97460000.0, 5.0154839999999865], [1443353472.0, 97480000.0, 4.976496000000012], [1443355200.0, 97500000.0, 4.9375], [1443356928.0, 97520000.0, 4.89849599999998], [1443358656.0, 97540000.0, 4.859484000000009], [1443360384.0, 97560000.0, 4.820464000000001], [1443362112.0, 97580000.0, 4.781436000000014], [1443363840.0, 97600000.0, 4.7424000000000035], [1443365568.0, 97620000.0, 4.703355999999985], [1443367296.0, 97640000.0, 4.6643040000000155], [1443369024.0, 97660000.0, 4.625243999999995], [1443370752.0, 97680000.0, 4.5861759999999805], [1443372480.0, 97700000.0, 4.547100000000015], [1443374208.0, 97720000.0, 4.508015999999998], [1443375936.0, 97740000.0, 4.468924000000015], [1443377664.0, 97760000.0, 4.429824000000011], [1443379392.0, 97780000.0, 4.390715999999998], [1443381120.0, 97800000.0, 4.351600000000019], [1443382848.0, 97820000.0, 4.312476000000004], [1443384576.0, 97840000.0, 4.27334399999998], [1443386304.0, 97860000.0, 4.234204000000005], [1443388032.0, 97880000.0, 4.195055999999994], [1443389760.0, 97900000.0, 4.155900000000017], [1443391488.0, 97920000.0, 4.116736000000003], [1443393216.0, 97940000.0, 4.077563999999995], [1443394944.0, 97960000.0, 4.038384000000008], [1443396672.0, 97980000.0, 3.9991959999999978], [1443398400.0, 98000000.0, 3.9599999999999795], [1443400128.0, 98020000.0, 3.92079600000001], [1443401856.0, 98040000.0, 3.8815839999999895], [1443403584.0, 98060000.0, 3.8423640000000177], [1443405312.0, 98080000.0, 3.803136000000009], [1443407040.0, 98100000.0, 3.7638999999999925], [1443408768.0, 98120000.0, 3.72465600000001], [1443410496.0, 98140000.0, 3.6854040000000055], [1443412224.0, 98160000.0, 3.6461439999999925], [1443413952.0, 98180000.0, 3.606876000000014], [1443415680.0, 98200000.0, 3.5675999999999988], [1443417408.0, 98220000.0, 3.528316000000018], [1443419136.0, 98240000.0, 3.4890240000000006], [1443420864.0, 98260000.0, 3.449723999999989], [1443422592.0, 98280000.0, 3.410416000000012], [1443424320.0, 98300000.0, 3.3710999999999984], [1443426048.0, 98320000.0, 3.3317759999999907], [1443427776.0, 98340000.0, 3.2924440000000033], [1443429504.0, 98360000.0, 3.2531039999999933], [1443431232.0, 98380000.0, 3.213756000000018], [1443432960.0, 98400000.0, 3.1744000000000057], [1443434688.0, 98420000.0, 3.1350359999999853], [1443436416.0, 98440000.0, 3.0956640000000135], [1443438144.0, 98460000.0, 3.056284000000005], [1443439872.0, 98480000.0, 3.0168959999999885], [1443441600.0, 98500000.0, 2.9775000000000063], [1443443328.0, 98520000.0, 2.9380959999999874], [1443445056.0, 98540000.0, 2.898684000000017], [1443446784.0, 98560000.0, 2.859263999999996], [1443448512.0, 98580000.0, 2.819835999999995], [1443450240.0, 98600000.0, 2.7804000000000144], [1443451968.0, 98620000.0, 2.740955999999997], [1443453696.0, 98640000.0, 2.7015039999999857], [1443455424.0, 98660000.0, 2.6620440000000087], [1443457152.0, 98680000.0, 2.622575999999995], [1443458880.0, 98700000.0, 2.583100000000016], [1443460608.0, 98720000.0, 2.543616], [1443462336.0, 98740000.0, 2.5041239999999902], [1443464064.0, 98760000.0, 2.464624000000015], [1443465792.0, 98780000.0, 2.4251160000000027], [1443467520.0, 98800000.0, 2.3855999999999824], [1443469248.0, 98820000.0, 2.3460760000000107], [1443470976.0, 98840000.0, 2.306543999999988], [1443472704.0, 98860000.0, 2.2670040000000142], [1443474432.0, 98880000.0, 2.2274560000000037], [1443476160.0, 98900000.0, 2.187899999999985], [1443477888.0, 98920000.0, 2.1483360000000147], [1443479616.0, 98940000.0, 2.1087639999999936], [1443481344.0, 98960000.0, 2.0691839999999786], [1443483072.0, 98980000.0, 2.029596000000012], [1443484800.0, 99000000.0, 1.9899999999999949], [1443486528.0, 99020000.0, 1.950396000000012], [1443488256.0, 99040000.0, 1.9107840000000067], [1443489984.0, 99060000.0, 1.8711639999999932], [1443491712.0, 99080000.0, 1.831536000000014], [1443493440.0, 99100000.0, 1.7918999999999983], [1443495168.0, 99120000.0, 1.7522559999999885], [1443496896.0, 99140000.0, 1.712603999999999], [1443498624.0, 99160000.0, 1.6729439999999869], [1443500352.0, 99180000.0, 1.6332760000000093], [1443502080.0, 99200000.0, 1.593599999999995], [1443503808.0, 99220000.0, 1.5539159999999868], [1443505536.0, 99240000.0, 1.514224000000013], [1443507264.0, 99260000.0, 1.4745240000000024], [1443508992.0, 99280000.0, 1.4348159999999837], [1443510720.0, 99300000.0, 1.3950999999999993], [1443512448.0, 99320000.0, 1.3553759999999926], [1443514176.0, 99340000.0, 1.3156440000000202], [1443515904.0, 99360000.0, 1.275903999999997], [1443517632.0, 99380000.0, 1.236155999999994], [1443519360.0, 99400000.0, 1.1964000000000112], [1443521088.0, 99420000.0, 1.1566359999999918], [1443522816.0, 99440000.0, 1.1168639999999783], [1443524544.0, 99460000.0, 1.0770839999999993], [1443526272.0, 99480000.0, 1.0372959999999978], [1443528000.0, 99500000.0, 0.9975000000000165], [1443529728.0, 99520000.0, 0.9576959999999985], [1443531456.0, 99540000.0, 0.9178839999999866], [1443533184.0, 99560000.0, 0.8780640000000091], [1443534912.0, 99580000.0, 0.8382359999999949], [1443536640.0, 99600000.0, 0.7983999999999867], [1443538368.0, 99620000.0, 0.7585559999999987], [1443540096.0, 99640000.0, 0.7187039999999882], [1443541824.0, 99660000.0, 0.6788440000000122], [1443543552.0, 99680000.0, 0.6389759999999995], [1443545280.0, 99700000.0, 0.5990999999999929], [1443547008.0, 99720000.0, 0.5592160000000064], [1443548736.0, 99740000.0, 0.5193239999999975], [1443550464.0, 99760000.0, 0.4794239999999803], [1443552192.0, 99780000.0, 0.4395160000000118], [1443553920.0, 99800000.0, 0.3995999999999924], [1443555648.0, 99820000.0, 0.35967600000000743], [1443557376.0, 99840000.0, 0.31974400000000003], [1443559104.0, 99860000.0, 0.2798039999999844], [1443560832.0, 99880000.0, 0.23985600000000318], [1443562560.0, 99900000.0, 0.19989999999999952], [1443564288.0, 99920000.0, 0.15993599999998764], [1443566016.0, 99940000.0, 0.11996400000001017], [1443567744.0, 99960000.0, 0.07998399999999606], [1443569472.0, 99980000.0, 0.03999600000001635]] \ No newline at end of file
diff --git a/tensorflow/tensorboard/app/demo/index.html b/tensorflow/tensorboard/app/demo/index.html
new file mode 100644
index 0000000000..a12b5abc26
--- /dev/null
+++ b/tensorflow/tensorboard/app/demo/index.html
@@ -0,0 +1,25 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <script src="../../bower_components/webcomponentsjs/webcomponents-lite.min.js"></script>
+ <script>
+ function handleLoad() {
+ TF.Urls.runsUrl = function() {return "data/runs.json"};
+ TF.Urls.graphUrl = function(run) {
+ return "data/" + run + "-graph.pbtxt";
+ };
+ TF.Urls.scalarsUrl = function(tag, run) {
+ var path = "data/" + run.split("_")[0] + ".json";
+ return path;
+ };
+ }
+ </script>
+ <link rel="import" href="../tf-tensorboard.html" onload="handleLoad(event)">
+ <link rel="stylesheet" type="text/css" href="../../lib/css/global.css">
+ <title>TensorBoard Demo</title>
+ </head>
+ <body>
+ <script>handleLoad()</script>
+ <tf-tensorboard id="demo"></tf-tensorboard>
+ </body>
+</html>
diff --git a/tensorflow/tensorboard/app/index.html b/tensorflow/tensorboard/app/index.html
new file mode 100644
index 0000000000..7adc063452
--- /dev/null
+++ b/tensorflow/tensorboard/app/index.html
@@ -0,0 +1,13 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <script src="../bower_components/webcomponentsjs/webcomponents-lite.min.js"></script>
+ <script src="../lib/js/analytics.js"></script>
+ <link rel="import" href="tf-tensorboard.html">
+ <link rel="stylesheet" type="text/css" href="../lib/css/global.css">
+ <title>TensorBoard</title>
+ </head>
+ <body>
+ <tf-tensorboard></tf-tensorboard>
+ </body>
+</html>
diff --git a/tensorflow/tensorboard/app/tf-tensorboard-demo.html b/tensorflow/tensorboard/app/tf-tensorboard-demo.html
new file mode 100644
index 0000000000..5f0ef5b00c
--- /dev/null
+++ b/tensorflow/tensorboard/app/tf-tensorboard-demo.html
@@ -0,0 +1,72 @@
+<link rel="import" href="../bower_components/polymer/polymer.html">
+<link rel="import" href="tf-tensorboard.html">
+<!--
+tf-tensorboard-demo creates a demo instance of TensorBoard.
+
+It expects to load data from a folder called tensorboard/
+
+The way it ensures the urls are correct is quite hacky.
+TODO(danmane): Fix the url handling during cleanup.
+-->
+<dom-module id="tf-tensorboard-demo">
+ <template>
+ <template is="dom-if" if="[[_urlsReady]]">
+ <tf-tensorboard mode="[[mode]]"></tf-tensorboard>
+ </template>
+ <template is="dom-if" if="[[!_urlsReady]]">
+ <p>
+ urls not ready - probably because a dataDir was not provided
+ </p>
+ </template>
+ <style>
+ :host {
+ display: block;
+ width: 100%;
+ height: 100%;
+ }
+ </style>
+ </template>
+ <script>
+ Polymer({
+ is: "tf-tensorboard-demo",
+ properties: {
+ mode: {
+ type: String,
+ value: "events",
+ },
+ dataDir: {
+ type: String,
+ },
+ _urlsReady: {
+ type: Boolean,
+ value: false,
+ },
+ },
+ observers: ['_setupUrls(dataDir)'],
+ _setupUrls: function(dataDir) {
+ function router(route) {
+ return function(tag, run) {
+ run = run.replace(/[ \)\(]/g, "_");
+ tag = tag.replace(/[ \)\(]/g, "_");
+ return dataDir + "/" + route + "/" + run + "/" + tag + ".json";
+ };
+ }
+ TF.Urls.runsUrl = function() {
+ return dataDir + "/runs.json"
+ };
+ TF.Urls.graphUrl = function(run) {
+ run = run.replace(/ /g, "_");
+ return dataDir + "/graph/" + run + ".pbtxt";
+ };
+ TF.Urls.scalarsUrl = router("scalars");
+ TF.Urls.histogramsUrl = router("histograms");
+ TF.Urls.compressedHistogramsUrl = router("compressedHistograms");
+ TF.Urls.imagesUrl = router("images");
+ TF.Urls.individualImageUrl = function(query) {
+ return dataDir + "/individualImage/" + query + ".png";
+ }
+ this._urlsReady = true;
+ },
+ });
+ </script>
+</dom-module>
diff --git a/tensorflow/tensorboard/app/tf-tensorboard.html b/tensorflow/tensorboard/app/tf-tensorboard.html
new file mode 100644
index 0000000000..0f5114143e
--- /dev/null
+++ b/tensorflow/tensorboard/app/tf-tensorboard.html
@@ -0,0 +1,135 @@
+<link rel="import" href="../bower_components/polymer/polymer.html">
+<link rel="import" href="../bower_components/paper-toolbar/paper-toolbar.html">
+<link rel="import" href="../bower_components/paper-button/paper-button.html">
+<link rel="import" href="../bower_components/paper-header-panel/paper-header-panel.html">
+<link rel="import" href="../components/tf-event-dashboard/tf-event-dashboard.html">
+<link rel="import" href="../components/tf-histogram-dashboard/tf-histogram-dashboard.html">
+<link rel="import" href="../components/tf-image-dashboard/tf-image-dashboard.html">
+<link rel="import" href="../components/tf-graph-dashboard/tf-graph-dashboard.html">
+<link rel="import" href="../components/tf-dashboard-common/tensorboard-color.html">
+<!--
+tf-tensorboard is the frontend entry point for TensorBoard.
+
+It implements a toolbar (via paper-header-panel and paper-toolbar) that
+allows the user to toggle between various dashboards.
+-->
+<dom-module id="tf-tensorboard">
+ <template>
+ <paper-header-panel>
+ <paper-toolbar id="toolbar">
+ <div id="toolbar-content">
+ <div class="toolbar-title">
+ TensorBoard
+ </div>
+ <div class="right-buttons">
+ <paper-button
+ class="link-button"
+ on-click="chooseEvents"
+ active$="[[eventDashboard(mode)]]"
+ noink
+ >Events</paper-button>
+ <paper-button
+ class="link-button"
+ on-click="chooseImages"
+ active$="[[imageDashboard(mode)]]"
+ noink
+ >Images</paper-button>
+ <paper-button
+ class="link-button"
+ on-click="chooseGraphs"
+ active$="[[graphDashboard(mode)]]"
+ noink
+ >Graph</paper-button>
+ <paper-button
+ class="link-button"
+ on-click="chooseHistograms"
+ active$="[[histogramDashboard(mode)]]"
+ noink
+ >Histograms</paper-button>
+ </div>
+ </div>
+ </paper-toolbar>
+ <div id="content" class="fit">
+ <template is="dom-if" if="[[eventDashboard(mode)]]">
+ <tf-event-dashboard id="eventDash"></tf-event-dashboard>
+ </template>
+
+ <template is="dom-if" if="[[imageDashboard(mode)]]">
+ <tf-image-dashboard id="imageDash"></tf-image-dashboard>
+ </template>
+
+ <template is="dom-if" if="[[graphDashboard(mode)]]">
+ <tf-graph-dashboard id="graphDash"></tf-graph-dashboard>
+ </template>
+
+ <template is="dom-if" if="[[histogramDashboard(mode)]]">
+ <tf-histogram-dashboard id="histogramDash"></tf-histogram-dashboard>
+ </template>
+ </div>
+ </paper-header-panel>
+ <style>
+ #toolbar {
+ background-color: var(--tb-orange-strong);
+ background-image: radial-gradient(ellipse, var(--tb-orange-weak), var(--tb-orange-strong));
+ }
+ #toolbar-content {
+ width: 100%;
+ display: flex;
+ flex-direction: row;
+ justify-content: space-between;
+ align-items: center;
+ }
+ .toolbar-title {
+ font-size: 30px;
+ }
+ #content {
+ height: 100%;
+ }
+ .link-button {
+ height: 30px;
+ }
+ [active] {
+ font-weight: bold;
+ }
+ :host {
+ height: 100%;
+ display: block;
+ }
+ </style>
+ </template>
+ <script>
+ Polymer({
+ is: "tf-tensorboard",
+ properties: {
+ mode: {
+ type: String,
+ value: "events",
+ },
+ },
+ chooseEvents: function() {
+ this.mode = "events";
+ },
+ chooseImages: function() {
+ this.mode = "images";
+ },
+ chooseGraphs: function() {
+ this.mode = "graphs";
+ },
+ chooseHistograms: function() {
+ this.mode = "histograms";
+ },
+ eventDashboard: function(mode) {
+ return mode === "events";
+ },
+ imageDashboard: function(mode) {
+ return mode === "images";
+ },
+ graphDashboard: function(mode) {
+ return mode === "graphs";
+ },
+ histogramDashboard: function(mode) {
+ return mode === "histograms";
+ }
+ });
+ </script>
+</dom-module>
diff --git a/tensorflow/tensorboard/bower.json b/tensorflow/tensorboard/bower.json
new file mode 100644
index 0000000000..bdd16d662a
--- /dev/null
+++ b/tensorflow/tensorboard/bower.json
@@ -0,0 +1,50 @@
+{
+ "name": "tf-vis",
+ "version": "0.0.0",
+ "description": "Visualizations for TensorFlow",
+ "authors": [
+ "Google"
+ ],
+ "license": "Apache-2.0",
+ "ignore": [
+ "**/.*",
+ "node_modules",
+ "bower_components",
+ "test",
+ "tests"
+ ],
+ "private": true,
+ "dependencies": {
+ "d3": "3.5.6",
+ "dagre": "~0.7.4",
+ "es6-promise": "~3.0.2",
+ "graphlib": "~1.0.7",
+ "iron-ajax": "PolymerElements/iron-ajax#~1.0.8",
+ "iron-collapse": "PolymerElements/iron-collapse#~1.0.4",
+ "iron-list": "PolymerElements/iron-list#~1.1.5",
+ "paper-button": "PolymerElements/paper-button#~1.0.7",
+ "paper-checkbox": "PolymerElements/paper-checkbox#~1.0.6",
+ "paper-dropdown-menu": "PolymerElements/paper-dropdown-menu#~1.0.4",
+ "paper-header-panel": "PolymerElements/paper-header-panel#~1.0.5",
+ "paper-icon-button": "PolymerElements/paper-icon-button#~1.0.3",
+ "paper-input": "PolymerElements/paper-input#~1.0.15",
+ "paper-item": "PolymerElements/paper-item#~1.0.3",
+ "paper-menu": "PolymerElements/paper-menu#~1.1.1",
+ "paper-progress": "PolymerElements/paper-progress#~1.0.7",
+ "paper-radio-button": "PolymerElements/paper-radio-button#~1.0.8",
+ "paper-radio-group": "PolymerElements/paper-radio-group#~1.0.4",
+ "paper-slider": "PolymerElements/paper-slider#~1.0.4",
+ "paper-styles": "PolymerElements/paper-styles#~1.0.11",
+ "paper-toggle-button": "PolymerElements/paper-toggle-button#~1.0.6",
+ "paper-toolbar": "PolymerElements/paper-toolbar#~1.0.4",
+ "plottable": "~1.16.1",
+ "polymer": "~1.2.0"
+ },
+ "devDependencies": {
+ "iron-component-page": "PolymerElements/iron-component-page#^1.0.0",
+ "web-component-tester": "*"
+ },
+ "resolutions": {
+ "d3": "3.5.6"
+ }
+}
diff --git a/tensorflow/tensorboard/bower/BUILD b/tensorflow/tensorboard/bower/BUILD
new file mode 100644
index 0000000000..709760b312
--- /dev/null
+++ b/tensorflow/tensorboard/bower/BUILD
@@ -0,0 +1,76 @@
+package(default_visibility = ["//tensorflow:internal"])
+
+filegroup(
+ name = "bower",
+ srcs = [
+ "@accessibility-developer-tools//:accessibility-developer-tools",
+ "@async//:async",
+ "@chai//:chai",
+ "@d3//:d3",
+ "@dagre//:dagre",
+ "@es6-promise//:es6-promise",
+ "@font-roboto//:font-roboto",
+ "@graphlib//:graphlib",
+ "@hydrolysis//:hydrolysis",
+ "@iron-a11y-keys-behavior//:iron-a11y-keys-behavior",
+ "@iron-ajax//:iron-ajax",
+ "@iron-autogrow-textarea//:iron-autogrow-textarea",
+ "@iron-behaviors//:iron-behaviors",
+ "@iron-checked-element-behavior//:iron-checked-element-behavior",
+ "@iron-collapse//:iron-collapse",
+ "@iron-component-page//:iron-component-page",
+ "@iron-doc-viewer//:iron-doc-viewer",
+ "@iron-dropdown//:iron-dropdown",
+ "@iron-fit-behavior//:iron-fit-behavior",
+ "@iron-flex-layout//:iron-flex-layout",
+ "@iron-form-element-behavior//:iron-form-element-behavior",
+ "@iron-icon//:iron-icon",
+ "@iron-icons//:iron-icons",
+ "@iron-iconset-svg//:iron-iconset-svg",
+ "@iron-input//:iron-input",
+ "@iron-list//:iron-list",
+ "@iron-menu-behavior//:iron-menu-behavior",
+ "@iron-meta//:iron-meta",
+ "@iron-overlay-behavior//:iron-overlay-behavior",
+ "@iron-range-behavior//:iron-range-behavior",
+ "@iron-resizable-behavior//:iron-resizable-behavior",
+ "@iron-selector//:iron-selector",
+ "@iron-validatable-behavior//:iron-validatable-behavior",
+ "@lodash//:lodash",
+ "@marked-element//:marked-element",
+ "@marked//:marked",
+ "@mocha//:mocha",
+ "@neon-animation//:neon-animation",
+ "@paper-behaviors//:paper-behaviors",
+ "@paper-button//:paper-button",
+ "@paper-checkbox//:paper-checkbox",
+ "@paper-dropdown-menu//:paper-dropdown-menu",
+ "@paper-header-panel//:paper-header-panel",
+ "@paper-icon-button//:paper-icon-button",
+ "@paper-input//:paper-input",
+ "@paper-item//:paper-item",
+ "@paper-material//:paper-material",
+ "@paper-menu-button//:paper-menu-button",
+ "@paper-menu//:paper-menu",
+ "@paper-progress//:paper-progress",
+ "@paper-radio-button//:paper-radio-button",
+ "@paper-radio-group//:paper-radio-group",
+ "@paper-ripple//:paper-ripple",
+ "@paper-slider//:paper-slider",
+ "@paper-styles//:paper-styles",
+ "@paper-toggle-button//:paper-toggle-button",
+ "@paper-toolbar//:paper-toolbar",
+ "@plottable//:plottable",
+ "@polymer//:polymer",
+ "@prism-element//:prism-element",
+ "@prism//:prism",
+ "@promise-polyfill//:promise-polyfill",
+ "@sinon-chai//:sinon-chai",
+ "@sinonjs//:sinonjs",
+ "@stacky//:stacky",
+ "@svg-typewriter//:svg-typewriter",
+ "@web-animations-js//:web-animations-js",
+ "@web-component-tester//:web-component-tester",
+ "@webcomponentsjs//:webcomponentsjs",
+ ],
+)
diff --git a/tensorflow/tensorboard/components/hydrogen-join/demo/index.html b/tensorflow/tensorboard/components/hydrogen-join/demo/index.html
new file mode 100644
index 0000000000..238cff294d
--- /dev/null
+++ b/tensorflow/tensorboard/components/hydrogen-join/demo/index.html
@@ -0,0 +1,118 @@
+<!doctype html>
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+<html>
+ <head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, minimum-scale=1.0, initial-scale=1.0, user-scalable=yes">
+ <title>tf-graph Demo</title>
+ <script src="../../../bower_components/webcomponentsjs/webcomponents-lite.min.js"></script>
+ <link rel="import" href="../hydrogen-join.html">
+ <link rel="import" href="../../../bower_components/paper-button/paper-button.html">
+ <link rel="import" href="../../../bower_components/paper-slider/paper-slider.html">
+ </head>
+
+ <style>
+ body {
+ font-family: "RobotoDraft","Roboto",sans-serif;
+ font-size: 14;
+ }
+ </style>
+
+ <body unresolved>
+ <dom-module id="button-press-counter">
+ <style>
+ paper-button {
+ background-color: #4DB6AC;
+ color: white;
+ }
+ </style>
+ <template>
+ <paper-button raised on-click="increment"><span>[[count]]<span></paper-button>
+ </template>
+ <script>
+ Polymer({
+ is: "button-press-counter",
+ properties: {count: {notify: true, value: 0}},
+ increment: function() {this.count++;}
+ });
+ </script>
+ </dom-module>
+
+ <dom-module id="args-demo">
+ <template>
+ <h1>args-demo</h1>
+ <button-press-counter count="{{in1}}"></button-press-counter>
+ <button-press-counter count="{{in2}}"></button-press-counter>
+ <button-press-counter count="{{in3}}"></button-press-counter>
+ <hydrogen-join
+ in1="[[in1]]"
+ in2="[[in2]]"
+ in3="[[in3]]"
+ out="{{out}}"
+ id="argsjoin"
+ ></hydrogen-join>
+ <p>Output from the hydrogen-join: <span>[[out]]</span></p>
+ </template>
+ <script>
+ Polymer({
+ is: "args-demo",
+ properties: {
+ in1: Number,
+ in2: Number,
+ in3: Number,
+ out: Array,
+ },
+ });
+ </script>
+ </dom-module>
+
+ <dom-module id="repeat-demo">
+ <style>
+ .button {
+ padding: 3px;
+ margin-bottom: 4px;
+ display: inline-block;
+ }
+ </style>
+ <template>
+ <h1>repeat-demo</h1>
+ <hydrogen-join id="repeatjoin" in-join-property="count" out="{{out}}">
+ <template is="dom-repeat" items="[[counters]]">
+ <button-press-counter class="button" count="[[item]]"></button-press-counter>
+ </template>
+ </hydrogen-join>
+ <br>
+ <p> Move this slider to add/remove buttons. It stays synced! What magic! </p>
+ <paper-slider min="0" max="20" value="{{nCounters}}"></paper-slider>
+ <p>Output from the hydrogen-join: <span>[[out]]</span></p>
+ </template>
+ <script>
+ Polymer({
+ is: "repeat-demo",
+ properties: {
+ nCounters: {type: Number, value: 10},
+ counters: {type: Array, computed: "_makeCounters(nCounters)"},
+ },
+ _makeCounters: function(nCounters) {
+ var c = [];
+ for (var i=0; i<nCounters; i++) {
+ c.push(i);
+ }
+ return c;
+ }
+ });
+ </script>
+ </dom-module>
+
+ <args-demo id="argsdemo"></args-demo>
+ <repeat-demo id="repeatdemo"></repeat-demo>
+ </body>
+</html>
diff --git a/tensorflow/tensorboard/components/hydrogen-join/hydrogen-join.html b/tensorflow/tensorboard/components/hydrogen-join/hydrogen-join.html
new file mode 100644
index 0000000000..9f8dcfe2af
--- /dev/null
+++ b/tensorflow/tensorboard/components/hydrogen-join/hydrogen-join.html
@@ -0,0 +1,118 @@
+<link rel="import" href="../../bower_components/polymer/polymer.html">
+
+<!--
+A plumber component which joins a number of input bindings. It outputs a list
+consisting of all of the inputs that are not null or undefined.
+
+It can take explicit arguments [in0...in98] or it can pull its arguments from
+a dom-repeat template, provided that it is given the property name it is looking
+for on the repeated children, and that property has {notify: true}. The repeat
+binding involves some magic and may not be totally reliable; ping danmane@ if
+something goes wrong.
+
+Example:
+ <hydrogen-join
+ in1="[[foo1]]"
+ in2="[[foo2]]"
+ in3="[[foo3]]"
+ out="{{foos}}" // equivalent to [foo1].push(foo2).push(foo3)
+ ></hydrogen-join>
+
+ <hydrogen-join out="{{foo}}" in-join-property="out">
+ <template is="dom-repeat" items="[[foos]]">
+ <foo item="[[item]]"></foo> //foo has a property out: {type: Array, notify: true}
+ </template>
+ </hydrogen-join>
+
+Swapping the inJoinProperty is not currently supported, it will warn if you try.
+
+There's a possible bug in repeat mode if an element is removed from the dom-repeat,
+but continues to exist somewhere else, and continues to fire property-changed events.
+Then the hydrogen-join will inappropriately record its value, even though it is not
+still connected in hydrogen-join's DOM.
+
+@demo
+-->
+<dom-module id="hydrogen-join">
+ <script>
+ var declaration = {
+ is: 'hydrogen-join',
+ properties: {
+ out: {type: Array, readOnly: true, notify: true},
+ _items: {type: Array, value: function() {return [];}},
+ /* Property to pull from dom-repeated child nodes and then pull and join */
+ inJoinProperty: {type: String, observer: "_modifyJoinProperty"},
+ },
+ listeners: {
+ "dom-change": "_syncListenersAndState",
+ },
+ /* If we are in repeat-mode, ensure all event listeners are setup, and pull
+ * items out of whatever children currently exist
+ */
+ _syncListenersAndState: function() {
+ if (this.inJoinProperty == null) {
+ // this codepath is for pulling properties out of children in a repeat
+ return;
+ }
+ function repeatUpdateFunction(i) {
+ return function(e) {
+ this._items[i] = e.detail.value;
+ // Debounce just in case something else thrashes
+ this.debounce("updateOut", this._updateOutput)
+ }
+ }
+ // create a new items array to replace the old one, otherwise old items
+ // might never get removed when their corresponding element leaves
+ this._items = [];
+ // Sadly, we need to bind an update function onto every child node,
+ // because the property-changed event does not bubble.
+ for (var i=0; i<this.childNodes.length; i++) {
+ var child = this.childNodes[i];
+ if (child.properties != null && child.properties[this.inJoinProperty] != null) {
+ child.addEventListener(this.inJoinProperty + "-changed", repeatUpdateFunction(i).bind(this));
+ this._items[i] = child[this.inJoinProperty];
+ }
+ }
+ this._updateOutput();
+ },
+ _modifyJoinProperty: function(newJoinProperty, oldJoinProperty) {
+ if (oldJoinProperty != null) {
+ console.warning("Changing the join property may be unsafe. Have fun!");
+ }
+ this._syncListenersAndState();
+ },
+ _updateOutput: function() {
+ var out = [];
+ for (var i=0; i<99; i++) {
+ if (this._items[i] != null) {
+ out.push(this._items[i]);
+ }
+ }
+ this._setOut(out);
+ }
+ };
+
+ /* Programatically add properties in0-in98, with associated observers */
+ function argsUpdateFunction(i) {
+ return function(newval) {
+ this._items[i] = newval;
+ if (i === 98) {
+ console.warn("You're updating the last arg (98). Possibly some values are being lost");
+ }
+ if (this.inJoinProperty != null) {
+ console.warn("It looks like you're providing a join property and also arguments. This is not supported.")
+ }
+ this.debounce("updateOut", this._updateOutput)
+ }
+ }
+ // I got 99 arguments and ain't off by 1!
+ for (var i = 0; i < 99; i++) {
+ var propName = "in" + i;
+ var updateName = "_update" + i;
+ var property = {type: Object, observer: updateName};
+ declaration.properties[propName] = property;
+ declaration[updateName] = argsUpdateFunction(i);
+ }
+ Polymer(declaration);
+ </script>
+</dom-module>
diff --git a/tensorflow/tensorboard/components/hydrogen-set/demo/index.html b/tensorflow/tensorboard/components/hydrogen-set/demo/index.html
new file mode 100644
index 0000000000..6a1735a699
--- /dev/null
+++ b/tensorflow/tensorboard/components/hydrogen-set/demo/index.html
@@ -0,0 +1,106 @@
+<!doctype html>
+<!--
+@license
+Copyright (c) 2016 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+<html>
+ <head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, minimum-scale=1.0, initial-scale=1.0, user-scalable=yes">
+ <title>hydrogen-set demo</title>
+ <script src="../../../bower_components/webcomponentsjs/webcomponents-lite.min.js"></script>
+ <link rel="import" href="../hydrogen-set.html">
+ <link rel="import" href="../../../bower_components/paper-checkbox/paper-checkbox.html">
+ </head>
+
+ <style>
+ body {
+ margin: 0;
+ font-family: "RobotoDraft","Roboto",sans-serif;
+ font-size: 14;
+ }
+ </style>
+
+ <body unresolved>
+ <dom-module id="x-a">
+ <template>
+ <template is="dom-repeat" items="[[items]]">
+ <span>[[item]]</span>
+ <paper-checkbox
+ name="[[item]]"
+ on-iron-change="_onChange"
+ checked="[[_isSelected(item, selected.*)]]"
+ ></paper-checkbox>
+ </template>
+ </template>
+ </dom-module>
+ <script>
+ Polymer({
+ is: 'x-a',
+ properties: {
+ selected: {
+ type: Array
+ },
+ items: {
+ type: Array,
+ value: function() {
+ return ["a","b","c","d","e"];
+ }
+ }
+ },
+ _onChange: function(e) {
+ var name = e.srcElement.name;
+ if (name) {
+ if (e.srcElement.checked) {
+ this.fire('select', name);
+ } else {
+ this.fire('unselect', name);
+ }
+ }
+ },
+ _isSelected: function(item, selected) {
+ return selected.base.indexOf(item) >= 0;
+ }
+ });
+ </script>
+ <template is="dom-bind">
+ <hydrogen-set
+ id="set"
+ event-add="{{add}}"
+ event-delete="{{del}}"
+ out-value="{{selected}}"
+ ></hydrogen-set>
+ <div>
+ Mutate the two sets below.
+ </div>
+ <br/>
+ <div>First Set</div>
+ <x-a
+ id="a"
+ on-select="add"
+ on-unselect="del"
+ selected="[[selected]]"
+ ></x-a>
+ <br/>
+ <br/>
+ <div>Second Set</div>
+ <x-a
+ id="b"
+ on-select="add"
+ on-unselect="del"
+ selected="[[selected]]"
+ ></x-a>
+ <br/>
+ <br/>
+ <div>List Selected:</div>
+ <template is="dom-repeat" items="[[selected]]">
+ <div>[[item]]</div>
+ </template>
+ </template>
+ </body>
+</html>
diff --git a/tensorflow/tensorboard/components/hydrogen-set/hydrogen-set.html b/tensorflow/tensorboard/components/hydrogen-set/hydrogen-set.html
new file mode 100644
index 0000000000..28fb8bd2a1
--- /dev/null
+++ b/tensorflow/tensorboard/components/hydrogen-set/hydrogen-set.html
@@ -0,0 +1,174 @@
+<link rel="import" href="../../bower_components/polymer/polymer.html">
+
+<!--
+hydrogen-set is a plumber component that is driven by events
+and produces data in the form of an upward-bindable set.
+It provides event handler functions like event-add and
+event-del, which may be attached elsewhere as event listeners.
+The hydrogen-set then captures those events and adds or
+removes their details to an internal set, which it
+publishes as out-value.
+
+As an example, you may have a list of input widgets that
+generate strings by firing an event. If you attach
+the hydrogen-set `event-add` function as the handler
+for the input widgets' input event, then the hydrogen-set
+will collect and deduplicate all of the strings the
+user generated.
+
+Thus, hydrogen-set is useful for capturing semantic
+events from across an application, and organizing
+the data generated into a single store.
+
+Example:
+
+ <hydrogen-set
+ event-add="{{add}}
+ event-delete="{{del}}
+ out-value="{{selected}}"
+ ></hydrogen-set>
+ <element-one
+ selected="{{selected}}"
+ on-select="add"
+ on-deselect="del"
+ ></element-one>
+ <element-two
+ selected="{{selected}}"
+ on-select="add"
+ on-deselect="del"
+ ></element-two>
+
+@demo demo/index.html
+-->
+<script>
+Polymer({
+ is: 'hydrogen-set',
+ properties: {
+ /**
+ * A function to bind to event callback where
+ * the detail value is the item to add.
+ *
+ * @property eventAdd
+ * @type Function
+ */
+ eventAdd: {
+ readOnly: true,
+ notify: true,
+ type: Function,
+ value: function() {
+ return function(e) {
+ this.add(e.detail);
+ }.bind(this);
+ }
+ },
+ /**
+ * A function to bind to event callback where
+ * the detail value is the item to remove.
+ *
+ * @property eventDelete
+ * @type Function
+ */
+ eventDelete: {
+ readOnly: true,
+ notify: true,
+ type: Function,
+ value: function() {
+ return function(e) {
+ this.delete(e.detail);
+ }.bind(this);
+ }
+ },
+ /**
+ * A function to bind to event callback where
+ * the detail value is the list of items that should
+ * replace the current set.
+ *
+ * @property eventUpdate
+ * @type Function
+ */
+ eventUpdate: {
+ readOnly: true,
+ notify: true,
+ type: Function,
+ value: function() {
+ return function(e) {
+ this.update(e.detail);
+ }.bind(this);
+ }
+ },
+ /**
+ * A function to bind to event callback
+ * which when called reset the set to the
+ * empty set ([]).
+ *
+ * @property eventClear
+ * @type Function
+ */
+ eventClear: {
+ readOnly: true,
+ notify: true,
+ type: Function,
+ value: function() {
+ return function(e) {
+ this.clear(e.detail);
+ }.bind(this);
+ }
+ },
+ /**
+ * The read-only array representing the set of
+ * items in this set.
+ *
+ * @property outValue
+ * @type Array
+ * @default []
+ */
+ outValue: {
+ type: Array,
+ readOnly: true,
+ notify: true,
+ value: function() {
+ return [];
+ }
+ }
+ },
+ /**
+ * Adds an item to the set.
+ */
+ add: function(value) {
+ if (this.outValue.indexOf(value) >= 0) { return; }
+ this.push('outValue', value);
+ },
+ /**
+ * Removes an item from the set.
+ */
+ delete: function(value) {
+ var i = this.outValue.indexOf(value);
+ if (i < 0) { return; }
+ this.splice('outValue', i, 1);
+ },
+ /**
+ * Sets the set to a specific array of items.
+ */
+ update: function(value) {
+ if (value.constructor === Array) {
+ var uniq = {};
+ var list = [];
+ for (var i=0, l = value.length; i < l; ++i) {
+ var item = value[i];
+ if (uniq.hasOwnProperty(item)) {
+ continue;
+ }
+ list.push(item);
+ uniq[item] = true;
+ }
+ this._setOutValue(list)
+ }
+ },
+ /**
+ * Resets the set to the empty set.
+ */
+ clear: function() {
+ this.update([]);
+ }
+});
+</script>
diff --git a/tensorflow/tensorboard/components/imports/d3.html b/tensorflow/tensorboard/components/imports/d3.html
new file mode 100644
index 0000000000..d63c480fd9
--- /dev/null
+++ b/tensorflow/tensorboard/components/imports/d3.html
@@ -0,0 +1 @@
+<script src="../../bower_components/d3/d3.min.js"></script>
diff --git a/tensorflow/tensorboard/components/imports/lodash.html b/tensorflow/tensorboard/components/imports/lodash.html
new file mode 100644
index 0000000000..1e94d2c1c4
--- /dev/null
+++ b/tensorflow/tensorboard/components/imports/lodash.html
@@ -0,0 +1 @@
+<script src="../../bower_components/lodash/lodash.min.js"></script>
diff --git a/tensorflow/tensorboard/components/imports/plottable.html b/tensorflow/tensorboard/components/imports/plottable.html
new file mode 100644
index 0000000000..08e636886a
--- /dev/null
+++ b/tensorflow/tensorboard/components/imports/plottable.html
@@ -0,0 +1,3 @@
+<link rel="import" href="d3.html">
+<script src="../../bower_components/plottable/plottable.min.js"></script>
+<link rel="stylesheet" type="text/css" href="../../bower_components/plottable/plottable.css">
diff --git a/tensorflow/tensorboard/components/tf-categorizer/categorizer.ts b/tensorflow/tensorboard/components/tf-categorizer/categorizer.ts
new file mode 100644
index 0000000000..e05078279e
--- /dev/null
+++ b/tensorflow/tensorboard/components/tf-categorizer/categorizer.ts
@@ -0,0 +1,133 @@
+/// <reference path="../../typings/tsd.d.ts" />
+
+module Categorizer {
+ /**
+ * This module contains methods that allow sorting tags into "categories".
+ * A category contains a name and a list of tags.
+ * The sorting strategy is defined by a "CustomCategorization", which contains
+ * "categoryDefinitions" which are regex rules used to construct a category.
+ * E.g. the regex rule "xent" will create a category called "xent" that
+ * contains values whose tags match the regex.
+ *
+ * After custom categories are evaluated, the tags are sorted by a hardcoded
+ * fallback categorizer, which may, for example, group tags into categories
+ * based on their top namespace.
+ */
+
+ export interface Category {
+ // Categories that data is sorted into
+ name: string;
+ tags: string[];
+ }
+
+ export interface CustomCategorization {
+ // Defines a categorization strategy
+ categoryDefinitions: string[];
+ fallbackCategorizer: string;
+ /* {"TopLevelNamespaceCategorizer",
+ "LegacyUnderscoreCategorizer"} */
+ }
+
+ export interface Categorizer {
+ // Function that generates categories
+ (tags: string[]): Category[];
+ }
+
+ /* Canonical TensorFlow ops are namespaced using forward slashes.
+ * This fallback categorizer categorizes by the top-level namespace.
+ */
+ export var topLevelNamespaceCategorizer: Categorizer = splitCategorizer(/\//);
+
+ // Try to produce good categorizations on legacy graphs, which often
+ // are namespaced like l1_foo/bar or l2_baz/bam.
+ // If there is no leading underscore before the first forward slash,
+ // then it behaves the same as topLevelNamespaceCategorizer
+ export var legacyUnderscoreCategorizer: Categorizer = splitCategorizer(/[\/_]/);
+
+ export function fallbackCategorizer(s: string): Categorizer {
+ switch (s) {
+ case "TopLevelNamespaceCategorizer":
+ return topLevelNamespaceCategorizer;
+ case "LegacyUnderscoreCategorizer":
+ return legacyUnderscoreCategorizer;
+ default:
+ throw new Error("Unrecognized categorization strategy: " + s);
+ }
+ }
+
+ /* An "extractor" is a function that takes a tag name, and "extracts" a category name.
+ * This function takes an extractor, and produces a categorizer.
+ * Currently, it is just used for the fallbackCategorizer, but we may want to
+ * refactor the general categorization logic to use the concept of extractors.
+ */
+ function extractorToCategorizer(extractor: (s: string) => string): Categorizer {
+ return (tags: string[]): Category[] => {
+ if (tags.length === 0) {
+ return [];
+ }
+ var sortedTags = tags.slice().sort();
+ var categories: Category[] = [];
+ var currentCategory = {
+ name: extractor(sortedTags[0]),
+ tags: [],
+ };
+ sortedTags.forEach((t: string) => {
+ var topLevel = extractor(t);
+ if (currentCategory.name !== topLevel) {
+ categories.push(currentCategory);
+ currentCategory = {
+ name: topLevel,
+ tags: [],
+ };
+ }
+ currentCategory.tags.push(t);
+ });
+ categories.push(currentCategory);
+ return categories;
+ };
+ }
+
+ function splitCategorizer(r: RegExp): Categorizer {
+ var extractor = (t: string) => {
+ return t.split(r)[0];
+ };
+ return extractorToCategorizer(extractor);
+ }
+
+ export interface CategoryDefinition {
+ name: string;
+ matches: (t: string) => boolean;
+ }
+
+ export function defineCategory(ruledef: string): CategoryDefinition {
+ var r = new RegExp(ruledef);
+ var f = function(tag: string): boolean {
+ return r.test(tag);
+ };
+ return { name: ruledef, matches: f };
+ }
+
+ export function _categorizer(rules: CategoryDefinition[], fallback: Categorizer) {
+ return function(tags: string[]): Category[] {
+ var remaining: d3.Set = d3.set(tags);
+ var userSpecified = rules.map((def: CategoryDefinition) => {
+ var tags: string[] = [];
+ remaining.forEach((t: string) => {
+ if (def.matches(t)) {
+ tags.push(t);
+ }
+ });
+ var cat = { name: def.name, tags: tags.sort() };
+ return cat;
+ });
+ var defaultCategories = fallback(remaining.values());
+ return userSpecified.concat(defaultCategories);
+ };
+ }
+
+ export function categorizer(s: CustomCategorization): Categorizer {
+ var rules = s.categoryDefinitions.map(defineCategory);
+ var fallback = fallbackCategorizer(s.fallbackCategorizer);
+ return _categorizer(rules, fallback);
+ };
+}
diff --git a/tensorflow/tensorboard/components/tf-categorizer/demo/index.html b/tensorflow/tensorboard/components/tf-categorizer/demo/index.html
new file mode 100644
index 0000000000..ea3f162aa5
--- /dev/null
+++ b/tensorflow/tensorboard/components/tf-categorizer/demo/index.html
@@ -0,0 +1,97 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <script src="../../../bower_components/webcomponentsjs/webcomponents-lite.min.js"></script>
+ <script src="../../../bower_components/d3/d3.js"></script>
+ <link rel="import" href="../tf-categorizer.html">
+ <link rel="import" href="../../../bower_components/iron-flex-layout/classes/iron-flex-layout.html">
+
+ </head>
+ <body>
+ <style>
+ </style>
+ <dom-module id="x-demo">
+ <style>
+ .container {
+ width: 255px;
+ padding: 10px;
+ border: 1px solid var(--paper-indigo-900);
+ border-radius: 5px;
+ position: fixed;
+ }
+ :host {
+ margin: 0px;
+ }
+
+ .categories {
+ font-family: "RobotoDraft",Helvetica;
+ margin-left: 300px;
+ width: 500px;
+ border: 1px solid var(--paper-indigo-500);
+ border-radius: 5px;
+ }
+
+ .category {
+ background-color: var(--paper-indigo-50);
+ margin: 20px;
+ padding: 20px;
+ border-radius: 5px;
+ }
+
+ .cat-name {
+ font-size: 20px;
+ }
+
+ .tag {
+ border-radius: 5px;
+ padding: 5px;
+ margin: 5px;
+ background-color: var(--paper-indigo-900);
+ color: white;
+ }
+ </style>
+ <template>
+ <div class="container">
+ <tf-categorizer categories="{{categories}}" tags="[[tags]]" id="demo"></tf-categorizer>
+ </div>
+ <div class="categories">
+ <template is="dom-repeat" items="[[categories]]">
+ <div class="category">
+ <p class="cat-name">Category: <span>[[item.name]]</span></p>
+ <div class="tags-container layout horizontal wrap">
+ <template is="dom-repeat" items="[[item.tags]]">
+ <span class="tag layout vertical center-center">[[item]]</span>
+ </template>
+ </div>
+ </template>
+ </div>
+ </template>
+ <script>
+
+ function tagsGenerator() {
+ var tags = ["special1", "special2", "special3", "special4", "special5"];
+ ["l1", "l2", "l3", "l4", "l5"].forEach(function(l) {
+ ["foo", "bar", "baz", "boink", "zod", "specialx"].forEach(function(x) {
+ tags.push(l + "/" + x);
+ });
+ });
+ return tags;
+ }
+
+ Polymer({
+ is: "x-demo",
+ properties: {
+ tags: { type: Array, value: tagsGenerator },
+ },
+ });
+ </script>
+ </dom-module>
+
+ <x-demo id="demo"></x-demo>
+ </body>
+ <script>
+ HTMLImports.whenReady(function() {
+ window.demo = document.getElementById("demo");
+ })
+ </script>
+</html>
diff --git a/tensorflow/tensorboard/components/tf-categorizer/index.html b/tensorflow/tensorboard/components/tf-categorizer/index.html
new file mode 100644
index 0000000000..f08a125f7c
--- /dev/null
+++ b/tensorflow/tensorboard/components/tf-categorizer/index.html
@@ -0,0 +1,18 @@
+<!doctype html>
+<html>
+<head>
+
+ <title>tf-categorizer</title>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+ <script src="../../bower_components/webcomponentsjs/webcomponents-lite.min.js"></script>
+ <link rel="import" href="../../bower_components/iron-component-page/iron-component-page.html">
+
+</head>
+<body>
+
+ <iron-component-page></iron-component-page>
+
+</body>
+</html>
diff --git a/tensorflow/tensorboard/components/tf-categorizer/test/categorizerTest.ts b/tensorflow/tensorboard/components/tf-categorizer/test/categorizerTest.ts
new file mode 100644
index 0000000000..be09c56c41
--- /dev/null
+++ b/tensorflow/tensorboard/components/tf-categorizer/test/categorizerTest.ts
@@ -0,0 +1,139 @@
+/// <reference path="../../../typings/tsd.d.ts" />
+/// <reference path="../categorizer.ts" />
+var assert = chai.assert;
+
+module Categorizer {
+ describe("categorizer", () => {
+ describe("topLevelNamespaceCategorizer", () => {
+ it("returns empty array on empty tags", () => {
+ assert.lengthOf(topLevelNamespaceCategorizer([]), 0);
+ });
+
+ it("handles a simple case", () => {
+ var simple = ["foo1/bar", "foo1/zod", "foo2/bar", "foo2/zod",
+ "gosh/lod/mar", "gosh/lod/ned"];
+ var expected = [
+ { name: "foo1", tags: ["foo1/bar", "foo1/zod"] },
+ { name: "foo2", tags: ["foo2/bar", "foo2/zod"] },
+ { name: "gosh", tags: ["gosh/lod/mar", "gosh/lod/ned"] },
+ ];
+ assert.deepEqual(topLevelNamespaceCategorizer(simple), expected);
+ });
+
+ it("orders the categories", () => {
+ var test = ["e", "f", "g", "a", "b", "c"];
+ var expected = [
+ { name: "a", tags: ["a"] },
+ { name: "b", tags: ["b"] },
+ { name: "c", tags: ["c"] },
+ { name: "e", tags: ["e"] },
+ { name: "f", tags: ["f"] },
+ { name: "g", tags: ["g"] },
+ ];
+ assert.deepEqual(topLevelNamespaceCategorizer(test), expected);
+ });
+
+ it("handles cases where category names overlap node names", () => {
+ var test = ["a", "a/a", "a/b", "a/c", "b", "b/a"];
+ var actual = topLevelNamespaceCategorizer(test);
+ var expected = [
+ { name: "a", tags: ["a", "a/a", "a/b", "a/c"] },
+ { name: "b", tags: ["b", "b/a"] },
+ ];
+ assert.deepEqual(actual, expected);
+ });
+
+ it("handles singleton case", () => {
+ assert.deepEqual(topLevelNamespaceCategorizer(["a"]), [{ name: "a", tags: ["a"] }]);
+ });
+ });
+
+ describe("legacyUnderscoreCategorizer", () => {
+ it("splits by shorter of first _ or /", () => {
+ var tags = ["l0_bar/foo", "l0_bar/baz", "l0_foo/wob", "l1_zoink/bla",
+ "l1_wibble/woz", "l1/foo_woink", "l2/wozzle_wizzle"];
+ var actual = legacyUnderscoreCategorizer(tags);
+ var expected = [
+ { name: "l0", tags: ["l0_bar/baz", "l0_bar/foo", "l0_foo/wob"] },
+ { name: "l1", tags: ["l1/foo_woink", "l1_wibble/woz", "l1_zoink/bla"] },
+ { name: "l2", tags: ["l2/wozzle_wizzle"] },
+ ];
+ assert.deepEqual(actual, expected);
+ });
+ });
+
+ describe("customCategorizer", () => {
+ function noFallbackCategorizer(tags: string[]): Category[] {
+ return [];
+ }
+
+ function testCategorizer(defs: string[],
+ fallback: Categorizer, tags: string[]): Category[] {
+ var catDefs = defs.map(defineCategory);
+ return _categorizer(catDefs, fallback)(tags);
+ }
+
+ it("categorizes by regular expression", () => {
+ var defs = ["foo..", "bar.."];
+ var tags = ["fooab", "fooxa", "barts", "barms"];
+ var actual = testCategorizer(defs, noFallbackCategorizer, tags);
+ var expected = [
+ { name: "foo..", tags: ["fooab", "fooxa"] },
+ { name: "bar..", tags: ["barms", "barts"] },
+ ];
+ assert.deepEqual(actual, expected);
+ });
+
+ it("matches non-exclusively", () => {
+ var tags = ["abc", "bar", "zod"];
+ var actual = testCategorizer(["...", "bar"], noFallbackCategorizer, tags);
+ var expected = [
+ { name: "...", tags: ["abc", "bar", "zod"] },
+ { name: "bar", tags: ["bar"] },
+ ];
+ assert.deepEqual(actual, expected);
+ });
+
+ it("creates categories for unmatched rules", () => {
+ var actual = testCategorizer(["a", "b", "c"], noFallbackCategorizer, []);
+ var expected = [
+ { name: "a", tags: [] },
+ { name: "b", tags: [] },
+ { name: "c", tags: [] },
+ ];
+ assert.deepEqual(actual, expected);
+ });
+
+ it("category regexs work with special characters", () => {
+ var defs = ["^\\w+$", "^\\d+$", "^\\/..$"];
+ var tags = ["foo", "3243", "/xa"];
+ var actual = testCategorizer(defs, noFallbackCategorizer, tags);
+ var expected = [
+ { name: "^\\w+$", tags: ["3243", "foo"] },
+ { name: "^\\d+$", tags: ["3243"] },
+ { name: "^\\/..$", tags: ["/xa"] },
+ ];
+ assert.deepEqual(actual, expected);
+ });
+
+ it("category tags are sorted", () => {
+ var tags = ["a", "z", "c", "d", "e", "x", "f", "y", "g"];
+ var sorted = tags.slice().sort();
+ var expected = [{ name: ".*", tags: sorted}];
+ var actual = testCategorizer([".*"], noFallbackCategorizer, tags);
+ assert.deepEqual(actual, expected);
+ });
+
+ it("if nonexclusive: all tags passed to fallback", () => {
+ var passedToDefault = null;
+ function defaultCategorizer(tags: string[]): Category[] {
+ passedToDefault = tags;
+ return [];
+ }
+ var tags = ["foo", "bar", "foo123"];
+ testCategorizer(["foo"], defaultCategorizer, tags);
+ assert.deepEqual(passedToDefault, tags);
+ });
+ });
+ });
+}
diff --git a/tensorflow/tensorboard/components/tf-categorizer/tf-categorizer.html b/tensorflow/tensorboard/components/tf-categorizer/tf-categorizer.html
new file mode 100644
index 0000000000..3672db38a2
--- /dev/null
+++ b/tensorflow/tensorboard/components/tf-categorizer/tf-categorizer.html
@@ -0,0 +1,103 @@
+<link rel="import" href="../../bower_components/polymer/polymer.html">
+<link rel="import" href="../../bower_components/paper-toggle-button/paper-toggle-button.html">
+
+<link rel="import" href="../tf-regex-group/tf-regex-group.html">
+<link rel="import" href="../tf-dashboard-common/tensorboard-color.html">
+
+<!--
+`tf-categorizer` turns an array of tags into an array of categories
+
+The transformation from tags to categories is controlled by the user, through
+interacting with the categorizer widget.
+
+(See type signatures in categorizer.ts)
+
+Example:
+ <tf-categorizer tags="[[tags]]" categories="{{categories}}"></tf-categorizer>
+
+Public Properties:
+`tags` - Array of strings that are the tags to categorize. Should be one-way bound downward.
+`categories` - Array of Categorizer.Category objects that are generated by the Categorizer.
+ Are readOnly and notify: True. Expected to be one-way bound upward.
+
+The categorizer provides inputs for adding regular expression rules and toggling whether
+categories are exclusive.
+-->
+<dom-module id="tf-categorizer">
+ <template>
+ <div class="inputs">
+ <tf-regex-group id="regex-group" regexes="{{regexes}}"></tf-regex-group>
+ </div>
+ <div id="underscore-categorization">
+ <span>Split On Underscores:</span>
+ <paper-toggle-button checked="{{splitOnUnderscore}}"></paper-toggle-button>
+ </div>
+ <style>
+ :host {
+ display: block;
+ padding-bottom: 5px;
+ padding-top: 5px;
+ }
+
+ .inputs {
+ padding-left: 5px;
+ }
+
+ paper-toggle-button {
+ --paper-toggle-button-checked-button-color: var(--tb-orange-strong);
+ --paper-toggle-button-checked-bar-color: var(--tb-orange-weak);
+ }
+ #underscore-categorization {
+ padding-left: 94px;
+ color: var(--paper-grey-700);
+ font-size: 14px;
+ }
+ </style>
+ </template>
+ <script src="categorizer.js"></script>
+ <script>
+ Polymer({
+ is: "tf-categorizer",
+ properties: {
+ regexes: {type: Array},
+ tags: {type: Array},
+ categoriesAreExclusive: {type: Boolean, value: true},
+ fallbackCategorizer: {
+ type: String,
+ computed: "chooseFallbackCategorizer(splitOnUnderscore)"
+ },
+ splitOnUnderscore: {
+ type: Boolean,
+ value: false,
+ },
+ categorizer: {
+ type: Object,
+ computed: "computeCategorization(regexes.*, categoriesAreExclusive, fallbackCategorizer)",
+ },
+ categories: {type: Array, value: function() {return [];}, notify: true, readOnly: true},
+ },
+ observers: ['recategorize(tags.*, categorizer)'],
+ computeCategorization: function(regexes, categoriesAreExclusive, fallbackCategorizer) {
+ var categorizationStrategy = {
+ categoryDefinitions: regexes.base,
+ categoriesAreExclusive: categoriesAreExclusive,
+ fallbackCategorizer: fallbackCategorizer,
+ };
+ return Categorizer.categorizer(categorizationStrategy);
+ },
+ recategorize: function() {
+ this.debounce("tf-categorizer-recategorize", function (){
+ var categories = this.categorizer(this.tags);
+ this._setCategories(categories);
+ })
+ },
+ chooseFallbackCategorizer: function(splitOnUnderscore) {
+ if (splitOnUnderscore) {
+ return "LegacyUnderscoreCategorizer";
+ } else {
+ return "TopLevelNamespaceCategorizer";
+ }
+ },
+ });
+ </script>
+</dom-module>
diff --git a/tensorflow/tensorboard/components/tf-collapsable-pane/demo/index.html b/tensorflow/tensorboard/components/tf-collapsable-pane/demo/index.html
new file mode 100644
index 0000000000..8906b0f3da
--- /dev/null
+++ b/tensorflow/tensorboard/components/tf-collapsable-pane/demo/index.html
@@ -0,0 +1,17 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <script src="../../../bower_components/webcomponentsjs/webcomponents-lite.min.js"></script>
+ <link rel="import" href="../tf-collapsable-pane.html">
+ </head>
+ <body>
+ <style>
+ </style>
+ <tf-collapsable-pane name="foo">
+ <h1>This is content inside the pane.</h1>
+ </tf-collapsable-pane>
+ </body>
+ <script>
+
+ </script>
+</html>
diff --git a/tensorflow/tensorboard/components/tf-collapsable-pane/index.html b/tensorflow/tensorboard/components/tf-collapsable-pane/index.html
new file mode 100644
index 0000000000..032e5be8c8
--- /dev/null
+++ b/tensorflow/tensorboard/components/tf-collapsable-pane/index.html
@@ -0,0 +1,18 @@
+<!doctype html>
+<html>
+<head>
+
+ <title>tf-collapsable-pane</title>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+ <script src="../../bower_components/webcomponentsjs/webcomponents-lite.min.js"></script>
+ <link rel="import" href="../../bower_components/iron-component-page/iron-component-page.html">
+
+</head>
+<body>
+
+ <iron-component-page></iron-component-page>
+
+</body>
+</html>
diff --git a/tensorflow/tensorboard/components/tf-collapsable-pane/tf-collapsable-pane.html b/tensorflow/tensorboard/components/tf-collapsable-pane/tf-collapsable-pane.html
new file mode 100644
index 0000000000..c06d40a2ec
--- /dev/null
+++ b/tensorflow/tensorboard/components/tf-collapsable-pane/tf-collapsable-pane.html
@@ -0,0 +1,90 @@
+<link rel="import" href="../../bower_components/polymer/polymer.html">
+<link rel="import" href="../../bower_components/iron-collapse/iron-collapse.html">
+
+<dom-module id="tf-collapsable-pane">
+ <template>
+ <button
+ class="heading"
+ on-tap="togglePane"
+ open-button$="[[opened]]"
+ >
+ <span class="name">[[name]]</span>
+ <span class="hackpadding"></span>
+ <span class="count">
+ (<span>[[count]]</span>)
+ </span>
+ </button>
+ <iron-collapse opened="[[opened]]">
+ <div class="content">
+ <template is="dom-if" if="[[opened]]" restamp="[[restamp]]">
+ <content></content>
+ </template>
+ </div>
+ </iron-collapse>
+ <style>
+ .heading {
+ margin-top: 10px;
+ padding-left: 15px;
+ background-color: #f3f3f3;
+ border: 1px solid #dedede;
+ border-radius: 5px;
+ font-size: 18px;
+ cursor: pointer;
+ -webkit-tap-highlight-color: rgba(0,0,0,0);
+ width: 100%;
+ height: 30px;
+ box-sizing: border-box;
+ font-size: 16px;
+ display: inline-flex;
+ flex-direction: row;
+ align-items: center;
+ justify-content: space-between;
+ line-height: 1;
+ padding-top: 2px;
+ padding-bottom: 2px;
+ }
+
+ .content {
+ padding: 15px;
+ border: 1px solid #dedede;
+ border-top: none;
+ border-bottom-left-radius: 5px;
+ border-bottom-right-radius: 5px;
+ }
+ [open-button] {
+ border-bottom-left-radius: 0px !important;
+ border-bottom-right-radius: 0px !important;
+ }
+ .name {
+ flex-grow: 0;
+ }
+ .count {
+ flex-grow: 0;
+ float: right;
+ font-size: 12px;
+ }
+ .hackpadding {
+ /* An obnoxious hack, but I can't get justify-content: space-between to work */
+ flex-grow: 1;
+ }
+ </style>
+ </template>
+ <script>
+ Polymer({
+ is: "tf-collapsable-pane",
+ properties: {
+ opened: {type: Boolean, value: false},
+ restamp: {type: Boolean, value: true},
+ name: {type: String, observer: "hide"},
+ count: {type: Number},
+ },
+ hide: function() {
+ this.opened = false;
+ },
+ togglePane: function() {
+ this.opened = !this.opened;
+ }
+ });
+ </script>
+
+</dom-module>
diff --git a/tensorflow/tensorboard/components/tf-dashboard-common/dashboard-style.html b/tensorflow/tensorboard/components/tf-dashboard-common/dashboard-style.html
new file mode 100644
index 0000000000..795cbbcac3
--- /dev/null
+++ b/tensorflow/tensorboard/components/tf-dashboard-common/dashboard-style.html
@@ -0,0 +1,97 @@
+<link rel="import" href="../../bower_components/paper-styles/paper-styles.html">
+<link rel="import" href="../tf-dashboard-common/tensorboard-color.html">
+
+<dom-module id="dashboard-style">
+ <template>
+ <style>
+ .card {
+ height: 200px;
+ width: 300px;
+ display: flex;
+ flex-direction: column;
+ margin: 5px 5px;
+ padding: 5px;
+ border: 1px solid var(--paper-grey-500);
+ border-radius: 3px;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ position: relative;
+ }
+
+ .card .card-title {
+ flex-grow: 0;
+ flex-shrink: 0;
+ margin-bottom: 2px;
+ font-size: 14px;
+ font-weight: bold;
+ text-overflow: ellipsis;
+ overflow: hidden;
+ }
+
+ .card .card-content {
+ flex-grow: 1;
+ flex-shrink: 1;
+ display: flex;
+ }
+ .card .card-bottom-row {
+ flex-grow: 0;
+ flex-shrink: 0;
+ padding-left: 10px;
+ padding-right: 10px;
+ }
+
+ .card.selected {
+ height: 400px;
+ width: 100%;
+ }
+
+ [shift] {
+ bottom: 20px !important;
+ }
+
+ .expand-button {
+ position: absolute;
+ left: 0px;
+ bottom: 0px;
+ color: #2196F3;
+ display: block;
+ }
+
+ #content-container{
+ display: block;
+ }
+
+ .sidebar {
+ display: flex;
+ flex-direction: column;
+ height: 100%;
+ }
+
+ #categorizer {
+ flex-shrink: 0;
+ }
+
+ #xTypeSelector {
+ flex-shrink: 0;
+ margin: 20px 0;
+ }
+
+ #runSelector {
+ flex-shrink: 1;
+ flex-grow: 1;
+ }
+
+ #download-option {
+ padding-left: 55px;
+ color: var(--paper-grey-700);
+ font-size: 14px;
+ }
+
+ #download-option paper-toggle-button {
+ --paper-toggle-button-checked-button-color: var(--tb-orange-strong);
+ --paper-toggle-button-checked-bar-color: var(--tb-orange-weak);
+
+ }
+ </style>
+ </template>
+</dom-module>
diff --git a/tensorflow/tensorboard/components/tf-dashboard-common/run-color-style.html b/tensorflow/tensorboard/components/tf-dashboard-common/run-color-style.html
new file mode 100644
index 0000000000..d9b12f366a
--- /dev/null
+++ b/tensorflow/tensorboard/components/tf-dashboard-common/run-color-style.html
@@ -0,0 +1,62 @@
+<link rel="import" href="../../bower_components/paper-styles/paper-styles.html">
+
+<dom-module id="run-color-style">
+ <template>
+ <style>
+ [color-class="light-blue"] paper-checkbox {
+ --paper-checkbox-checked-color: var(--paper-light-blue-500);
+ --paper-checkbox-checked-ink-color: var(--paper-light-blue-500);
+ --paper-checkbox-unchecked-color: var(--paper-light-blue-900);
+ --paper-checkbox-unchecked-ink-color: var(--paper-light-blue-900);
+ }
+ [color-class="red"] paper-checkbox {
+ --paper-checkbox-checked-color: var(--paper-red-500);
+ --paper-checkbox-checked-ink-color: var(--paper-red-500);
+ --paper-checkbox-unchecked-color: var(--paper-red-900);
+ --paper-checkbox-unchecked-ink-color: var(--paper-red-900);
+ }
+ [color-class="green"] paper-checkbox {
+ --paper-checkbox-checked-color: var(--paper-green-500);
+ --paper-checkbox-checked-ink-color: var(--paper-green-500);
+ --paper-checkbox-unchecked-color: var(--paper-green-900);
+ --paper-checkbox-unchecked-ink-color: var(--paper-green-900);
+ }
+ [color-class="purple"] paper-checkbox {
+ --paper-checkbox-checked-color: var(--paper-purple-500);
+ --paper-checkbox-checked-ink-color: var(--paper-purple-500);
+ --paper-checkbox-unchecked-color: var(--paper-purple-900);
+ --paper-checkbox-unchecked-ink-color: var(--paper-purple-900);
+ }
+ [color-class="teal"] paper-checkbox {
+ --paper-checkbox-checked-color: var(--paper-teal-500);
+ --paper-checkbox-checked-ink-color: var(--paper-teal-500);
+ --paper-checkbox-unchecked-color: var(--paper-teal-900);
+ --paper-checkbox-unchecked-ink-color: var(--paper-teal-900);
+ }
+ [color-class="pink"] paper-checkbox {
+ --paper-checkbox-checked-color: var(--paper-pink-500);
+ --paper-checkbox-checked-ink-color: var(--paper-pink-500);
+ --paper-checkbox-unchecked-color: var(--paper-pink-900);
+ --paper-checkbox-unchecked-ink-color: var(--paper-pink-900);
+ }
+ [color-class="orange"] paper-checkbox {
+ --paper-checkbox-checked-color: var(--paper-orange-500);
+ --paper-checkbox-checked-ink-color: var(--paper-orange-500);
+ --paper-checkbox-unchecked-color: var(--paper-orange-900);
+ --paper-checkbox-unchecked-ink-color: var(--paper-orange-900);
+ }
+ [color-class="brown"] paper-checkbox {
+ --paper-checkbox-checked-color: var(--paper-brown-500);
+ --paper-checkbox-checked-ink-color: var(--paper-brown-500);
+ --paper-checkbox-unchecked-color: var(--paper-brown-900);
+ --paper-checkbox-unchecked-ink-color: var(--paper-brown-900);
+ }
+ [color-class="indigo"] paper-checkbox {
+ --paper-checkbox-checked-color: var(--paper-indigo-500);
+ --paper-checkbox-checked-ink-color: var(--paper-indigo-500);
+ --paper-checkbox-unchecked-color: var(--paper-indigo-900);
+ --paper-checkbox-unchecked-ink-color: var(--paper-indigo-900);
+ }
+ </style>
+ </template>
+</dom-module>
diff --git a/tensorflow/tensorboard/components/tf-dashboard-common/scrollbar-style.html b/tensorflow/tensorboard/components/tf-dashboard-common/scrollbar-style.html
new file mode 100644
index 0000000000..90fc184e8d
--- /dev/null
+++ b/tensorflow/tensorboard/components/tf-dashboard-common/scrollbar-style.html
@@ -0,0 +1,28 @@
+<link rel="import" href="../../bower_components/paper-styles/paper-styles.html">
+
+<dom-module id="scrollbar-style">
+ <template>
+ <style>
+ .scrollbar::-webkit-scrollbar-track
+ {
+ visibility: hidden;
+ }
+
+ .scrollbar::-webkit-scrollbar
+ {
+ width: 10px;
+ }
+
+ .scrollbar::-webkit-scrollbar-thumb
+ {
+ border-radius: 10px;
+ -webkit-box-shadow: inset 0 0 2px rgba(0,0,0,.3);
+ background-color: var(--paper-grey-500);
+ color: var(--paper-grey-900);
+ }
+ .scrollbar {
+ box-sizing: border-box;
+ }
+ </style>
+ </template>
+</dom-module>
diff --git a/tensorflow/tensorboard/components/tf-dashboard-common/tensorboard-color.html b/tensorflow/tensorboard/components/tf-dashboard-common/tensorboard-color.html
new file mode 100644
index 0000000000..c3a59b7a31
--- /dev/null
+++ b/tensorflow/tensorboard/components/tf-dashboard-common/tensorboard-color.html
@@ -0,0 +1,11 @@
+<link rel="import" href="../../bower_components/polymer/polymer.html">
+<style is="custom-style">
+
+ :root {
+ --tb-orange-weak: #fcb938;
+ --tb-orange-strong: #f3913e;
+ --tb-grey-darker: #e2e2e2;
+ --tb-grey-lighter: #f3f3f3;
+ }
+
+</style>
diff --git a/tensorflow/tensorboard/components/tf-dashboard-common/tf-dashboard-layout.html b/tensorflow/tensorboard/components/tf-dashboard-common/tf-dashboard-layout.html
new file mode 100644
index 0000000000..89c51342fe
--- /dev/null
+++ b/tensorflow/tensorboard/components/tf-dashboard-common/tf-dashboard-layout.html
@@ -0,0 +1,50 @@
+<link rel="import" href="../../bower_components/polymer/polymer.html">
+<link rel="import" href="scrollbar-style.html">
+<link rel="import" href="tensorboard-color.html">
+<!--
+Generic layout for a dashboard.
+-->
+<dom-module id="tf-dashboard-layout">
+ <template>
+ <div id="sidebar">
+ <content select=".sidebar"></content>
+ </div>
+
+ <div id="center" class="scrollbar">
+ <content select=".center"></content>
+ </div>
+ <style include="scrollbar-style"></style>
+ <style>
+ #sidebar {
+ width: inherit;
+ height: 100%;
+ background-color: var(--tb-grey-darker);
+ background-image: linear-gradient(to right, var(--tb-grey-lighter), var(--tb-grey-lighter));
+ overflow: ellipsis;
+ padding-left: 10px;
+ padding-right: 10px;
+ flex-grow: 0;
+ flex-shrink: 0;
+ }
+
+ #center {
+ margin: 0 10px;
+ height: 100%;
+ overflow-y: scroll;
+ padding-right: 12px;
+ flex-grow: 1;
+ flex-shrink: 1;
+ }
+ :host {
+ display: flex;
+ flex-direction: row;
+ height: 100%;
+ }
+ </style>
+ </template>
+ <script>
+ Polymer({
+ is: "tf-dashboard-layout",
+ });
+ </script>
+</dom-module>
diff --git a/tensorflow/tensorboard/components/tf-dashboard-common/tf-downloader.html b/tensorflow/tensorboard/components/tf-dashboard-common/tf-downloader.html
new file mode 100644
index 0000000000..c7251ec578
--- /dev/null
+++ b/tensorflow/tensorboard/components/tf-dashboard-common/tf-downloader.html
@@ -0,0 +1,85 @@
+<link rel="import" href="../../bower_components/polymer/polymer.html">
+<link rel="import" href="../../bower_components/paper-dropdown-menu/paper-dropdown-menu.html">
+<link rel="import" href="../../bower_components/paper-menu/paper-menu.html">
+<link rel="import" href="../../bower_components/paper-item/paper-item.html">
+
+<dom-module id="tf-downloader">
+ <template>
+ <paper-dropdown-menu
+ no-label-float="true"
+ label="run to download"
+ selected-item-label="{{_run}}"
+ >
+ <paper-menu class="dropdown-content">
+ <template is="dom-repeat" items="[[_runs]]">
+ <paper-item no-label-float=true>[[item]]</paper-item>
+ </template>
+ </paper-menu>
+ </paper-dropdown-menu>
+ <a
+ download="[[_csvName(_run)]]"
+ href="[[_csvUrl(_run, urlFn)]]"
+ >CSV</a>
+ <a
+ download="[[_jsonName(_run)]]"
+ href="[[_jsonUrl(_run, urlFn)]]"
+ >JSON</a>
+ <style>
+ :host {
+ display: block;
+ }
+ paper-dropdown-menu {
+ width: 220px;
+ --paper-input-container-label: {
+ font-size: 10px;
+ }
+ --paper-input-container-input: {
+ font-size: 10px;
+ }
+ }
+ a {
+ font-size: 10px;
+ border-radius: 3px;
+ border: 1px solid #EEE;
+ }
+ paper-input {
+ font-size: 22px;
+ }
+ </style>
+ </template>
+ <script>
+ Polymer({
+ is: "tf-downloader",
+ properties: {
+ _run: String,
+ _runs: {
+ type: Array,
+ computed: "_computeRuns(runToTag.*, selectedRuns.*)",
+ },
+ selectedRuns: Array,
+ runToTag: Object,
+ tag: String,
+ urlFn: Function,
+ },
+ _computeRuns: function(runToTagChange, selectedRunsChange) {
+ var runToTag = this.runToTag;
+ var tag = this.tag;
+ return this.selectedRuns.filter(function(x) {
+ return runToTag[x].indexOf(tag) !== -1;
+ })
+ },
+ _csvUrl: function(_run, urlFn) {
+ return urlFn(this.tag, _run) + "&format=csv";
+ },
+ _jsonUrl: function(_run, urlFn) {
+ return urlFn(this.tag, _run);
+ },
+ _csvName: function(_run) {
+ return "run_" + _run + ",tag_" + this.tag + ".csv";
+ },
+ _jsonName: function(_run) {
+ return "run-" + _run + "-tag-" + this.tag + ".json";
+ },
+ });
+ </script>
+</dom-module>
diff --git a/tensorflow/tensorboard/components/tf-dashboard-common/tf-run-generator.html b/tensorflow/tensorboard/components/tf-dashboard-common/tf-run-generator.html
new file mode 100644
index 0000000000..4d72552049
--- /dev/null
+++ b/tensorflow/tensorboard/components/tf-dashboard-common/tf-run-generator.html
@@ -0,0 +1,97 @@
+<link rel="import" href="../../bower_components/polymer/polymer.html">
+<link rel="import" href="../../bower_components/iron-ajax/iron-ajax.html">
+<link rel="import" href="../imports/lodash.html">
+
+<!--
+tf-run-generator is a plumbing component that takes in a url to load runs from, and
+ produces the following upward-bindable properties:
+
+ outRunToScalars: Maps from run name (string) to an array of scalar tags (strings).
+ outRunToHistograms: Maps from run name (string) to an array of histogram tags (strings).
+ outRunToImages: Maps from run name (string) to an array of image tags (strings).
+-->
+<dom-module id="tf-run-generator">
+ <template>
+ <iron-ajax
+ id="ajax"
+ auto
+ url="[[url]]"
+ handle-as="json"
+ debounce="300"
+ on-response="_setResponse"
+ verbose=true
+ >
+ </iron-ajax>
+ </template>
+ <script>
+ Polymer({
+ is: "tf-run-generator",
+ properties: {
+ url: String,
+ _runToTag: {
+ type: Object,
+ readOnly: true,
+ },
+ outRunToScalars: {
+ // {[runName: string]: string[]}
+ // the names of scalar tags.
+ type: Object,
+ computed: "_scalars(_runToTag.*)",
+ notify: true,
+ },
+ outRunToHistograms: {
+ // {[runName: string]: string[]}
+ // the names of histogram tags.
+ type: Object,
+ computed: "_histograms(_runToTag.*)",
+ notify: true,
+ },
+ outRunToCompressedHistograms: {
+ // {[runName: string]: string[]}
+ // the names of histogram tags.
+ type: Object,
+ computed: "_compressedHistograms(_runToTag.*)",
+ notify: true,
+ },
+ outRunToImages: {
+ // {[runName: string]: string[]}
+ // the names of image tags.
+ type: Object,
+ computed: "_images(_runToTag.*)",
+ notify: true,
+ },
+ outRunsWithGraph: {
+ // ["run1", "run2", ...]
+ // array of run names that have an associated graph definition.
+ type: Array,
+ computed: "_graphs(_runToTag.*)",
+ notify: true
+ }
+ },
+ _scalars: function(_runToTag) {
+ return _.mapValues(_runToTag.base, "scalars");
+ },
+ _histograms: function(_runToTag) {
+ return _.mapValues(_runToTag.base, "histograms");
+ },
+ _compressedHistograms: function(_runToTag) {
+ return _.mapValues(_runToTag.base, "compressedHistograms");
+ },
+ _images: function(_runToTag) {
+ return _.mapValues(_runToTag.base, "images");
+ },
+ _graphs: function(_runToTag) {
+ var runsWithGraph = [];
+ _.each(_runToTag.base, function(runInfo, runName) {
+ if (runInfo.graph === true) {
+ runsWithGraph.push(runName);
+ }
+ });
+ return runsWithGraph;
+ },
+ _setResponse: function(event) {
+ this._set_runToTag(event.detail.response);
+ }
+ });
+ </script>
+</dom-module>
diff --git a/tensorflow/tensorboard/components/tf-dashboard-common/tf-url-generator.html b/tensorflow/tensorboard/components/tf-dashboard-common/tf-url-generator.html
new file mode 100644
index 0000000000..803998daeb
--- /dev/null
+++ b/tensorflow/tensorboard/components/tf-dashboard-common/tf-url-generator.html
@@ -0,0 +1,50 @@
+<link rel="import" href="../../bower_components/polymer/polymer.html">
+
+<!-- tf-url-generator is a plumbing component that provides two upward bindable properties:
+ outRunsUrl and outValuesUrlGenerator. These may be used by the rest of the application to communicate
+ with the backend, and by overriding the TF.Urls code that backs it, can be modified to load data from
+ a demo data source instead.
+ -->
+<dom-module id="tf-url-generator">
+ <script src="urlGenerator.js"></script>
+ <script>
+ var polymerObject = {
+ is: "tf-url-generator",
+ properties: {
+ outRunsUrl: {
+ type: String,
+ value: function() {
+ return TF.Urls.runsUrl();
+ },
+ readOnly: true,
+ notify: true,
+ },
+ },
+ };
+ TF.Urls.routes.forEach(function(route) {
+ /* for each route (other than runs, handled seperately):
+ * out`RouteName`: {
+ * type: Function,
+ * readOnly: true,
+ * notify: true,
+ * value: function() {
+ * return TF.Urls.`routeName`Url;
+ * }
+ */
+ if (route === "runs") {
+ return;
+ }
+ var urlName = route + "Url";
+ var propertyName = Polymer.CaseMap.dashToCamelCase("out-" + urlName + "Generator");
+ polymerObject.properties[propertyName] = {
+ type: Function,
+ value: function() {
+ return TF.Urls[urlName];
+ },
+ notify: true,
+ readOnly: true,
+ }
+ });
+ Polymer(polymerObject);
+ </script>
+</dom-module>
diff --git a/tensorflow/tensorboard/components/tf-dashboard-common/urlGenerator.ts b/tensorflow/tensorboard/components/tf-dashboard-common/urlGenerator.ts
new file mode 100644
index 0000000000..c7bbcbf434
--- /dev/null
+++ b/tensorflow/tensorboard/components/tf-dashboard-common/urlGenerator.ts
@@ -0,0 +1,33 @@
+/// <reference path="../../typings/tsd.d.ts" />
+/// <reference path="../../bower_components/plottable/plottable.d.ts" />
+
+module TF {
+ export module Urls {
+
+ export var routes = ["runs", "scalars", "histograms",
+ "compressedHistograms", "images",
+ "individualImage", "graph"];
+
+ function router(route: string): ((tag: string, run: string) => string) {
+ return function(tag: string, run: string): string {
+ return "/" + route + "?tag=" + encodeURIComponent(tag)
+ + "&run=" + encodeURIComponent(run);
+ };
+ }
+
+ export function runsUrl() {
+ return "/runs";
+ }
+ export var scalarsUrl = router("scalars");
+ export var histogramsUrl = router("histograms");
+ export var compressedHistogramsUrl = router("compressedHistograms");
+ export var imagesUrl = router("images");
+ export function individualImageUrl(query: string) {
+ return "/individualImage?" + query;
+ }
+ export function graphUrl(run: string) {
+ return "/graph?run=" + encodeURIComponent(run);
+ }
+
+ }
+}
diff --git a/tensorflow/tensorboard/components/tf-dashboard-common/warning-style.html b/tensorflow/tensorboard/components/tf-dashboard-common/warning-style.html
new file mode 100644
index 0000000000..c4103a7248
--- /dev/null
+++ b/tensorflow/tensorboard/components/tf-dashboard-common/warning-style.html
@@ -0,0 +1,10 @@
+<dom-module id="warning-style">
+ <template>
+ <style>
+ .warning {
+ max-width: 540px;
+ margin: 80px auto 0 auto;
+ }
+ </style>
+ </template>
+</dom-module>
diff --git a/tensorflow/tensorboard/components/tf-event-dashboard/dataCoordinator.ts b/tensorflow/tensorboard/components/tf-event-dashboard/dataCoordinator.ts
new file mode 100644
index 0000000000..c489eca17c
--- /dev/null
+++ b/tensorflow/tensorboard/components/tf-event-dashboard/dataCoordinator.ts
@@ -0,0 +1,57 @@
+/// <reference path="../../typings/tsd.d.ts" />
+/// <reference path="../../bower_components/plottable/plottable.d.ts" />
+
+module TF {
+
+ /* The DataCoordinator generates TF.Datasets for each run/tag combination,
+ * and is responsible for communicating with the backend to load data into them.
+ * A key fact about this design is that when Datasets modify their data, they
+ * automatically notify all dependent Plottable charts.
+ */
+ export class DataCoordinator {
+ private urlGenerator: (tag: string, run: string) => string;
+ private datasets: {[key: string]: TF.Dataset};
+ private runToTag: {[run: string]: string[]};
+
+ constructor(urlGenerator: (tag: string, run: string) => string,
+ runToTag: {[run: string]: string[]}) {
+ this.datasets = {};
+ this.urlGenerator = urlGenerator;
+ this.runToTag = runToTag;
+ }
+
+ /* Create or return an array of Datasets for the given
+ * tag and runs. It filters which runs it uses by checking
+ * that data exists for each tag-run combination.
+ * Calling this triggers a load on the dataset.
+ */
+ public getDatasets(tag: string, runs: string[]) {
+ var usableRuns = runs.filter((r) => {
+ var tags = this.runToTag[r];
+ return tags.indexOf(tag) !== -1;
+ });
+ return usableRuns.map((r) => this.getDataset(tag, r));
+ }
+
+ /* Create or return a Dataset for given tag and run.
+ * Calling this triggers a load on the dataset.
+ */
+ public getDataset(tag: string, run: string): TF.Dataset {
+ var dataset = this._getDataset(tag, run);
+ dataset.load();
+ return dataset;
+ }
+
+ private _getDataset(tag: string, run: string): TF.Dataset {
+ var key = [tag, run].toString();
+ var dataset: TF.Dataset;
+ if (this.datasets[key] != null) {
+ dataset = this.datasets[key];
+ } else {
+ dataset = new TF.Dataset(tag, run, this.urlGenerator);
+ this.datasets[key] = dataset;
+ }
+ return dataset;
+ }
+ }
+}
diff --git a/tensorflow/tensorboard/components/tf-event-dashboard/dataset.ts b/tensorflow/tensorboard/components/tf-event-dashboard/dataset.ts
new file mode 100644
index 0000000000..de814583d3
--- /dev/null
+++ b/tensorflow/tensorboard/components/tf-event-dashboard/dataset.ts
@@ -0,0 +1,41 @@
+/// <reference path="../../typings/tsd.d.ts" />
+/// <reference path="../../bower_components/plottable/plottable.d.ts" />
+
+module TF {
+ /* An extension of Plottable.Dataset that knows how to load data from a backend.
+ */
+ export class Dataset extends Plottable.Dataset {
+ public tag: string;
+ public run: string;
+ private lastLoadTime: number;
+ private lastRequest;
+ private urlGenerator: Function;
+
+ constructor(tag: string, run: string, urlGenerator: (run: string, tag: string) => string) {
+ super([], {tag: tag, run: run});
+ this.tag = tag;
+ this.run = run;
+ this.urlGenerator = urlGenerator;
+ }
+
+ public load = _.debounce(this._load, 10);
+
+ private _load() {
+ var url = this.urlGenerator(this.tag, this.run);
+ if (this.lastRequest != null) {
+ this.lastRequest.abort();
+ }
+ this.lastRequest = d3.json(url, (error, json) => {
+ this.lastRequest = null;
+ if (error) {
+ /* tslint:disable */
+ console.log(error);
+ /* tslint:enable */
+ throw new Error("Failure loading JSON at url: \"" + url + "\"");
+ } else {
+ this.data(json);
+ }
+ });
+ }
+ }
+}
diff --git a/tensorflow/tensorboard/components/tf-event-dashboard/demo/data/alpha/d1.json b/tensorflow/tensorboard/components/tf-event-dashboard/demo/data/alpha/d1.json
new file mode 100644
index 0000000000..af17f5c328
--- /dev/null
+++ b/tensorflow/tensorboard/components/tf-event-dashboard/demo/data/alpha/d1.json
@@ -0,0 +1 @@
+[[1436926051.074826, 84, 0.6990088224411011], [1436926530.99861, 2289, 6.9384379386901855], [1436927011.134076, 7611, 13.698328971862793], [1436927490.984256, 16147, 20.168190002441406], [1436927970.957234, 26087, 20.877344131469727], [1436928450.977514, 36241, 21.269058227539062], [1436928930.989548, 46432, 21.329505920410156], [1436929410.976308, 56629, 21.220420837402344], [1436929890.966395, 66791, 21.190065383911133], [1436930370.958199, 76936, 21.108604431152344], [1436930850.985301, 87083, 21.157001495361328], [1436931331.009261, 97161, 21.02127456665039], [1436931810.966042, 107210, 20.891658782958984], [1436932290.955417, 117262, 20.930112838745117], [1436932770.964496, 127333, 20.986324310302734], [1436933250.962592, 137430, 20.981359481811523], [1436933730.992022, 147528, 21.083036422729492], [1436934210.959831, 157635, 21.092649459838867], [1436934690.97072, 167749, 21.11568832397461], [1436935170.957944, 177869, 21.145965576171875], [1436935650.959987, 188025, 21.215585708618164], [1436936130.997541, 198206, 21.227184295654297], [1436936610.965526, 208395, 21.226459503173828], [1436937090.965581, 218592, 21.264968872070312], [1436937570.964874, 228818, 21.335866928100586], [1436938050.965706, 239021, 21.286521911621094], [1436938531.013159, 249210, 21.20963478088379], [1436939010.957926, 259415, 21.28431510925293], [1436939490.96341, 269637, 21.326831817626953], [1436939970.959372, 279876, 21.38308334350586], [1436940450.963802, 290127, 21.355499267578125], [1436940931.004537, 300349, 21.31337547302246], [1436941410.979614, 310601, 21.405778884887695], [1436941890.979674, 320872, 21.368688583374023], [1436942370.975153, 331131, 21.39077377319336], [1436942850.980459, 341399, 21.41745948791504], [1436943331.000808, 351651, 21.384023666381836], [1436943810.968736, 361904, 21.326438903808594], [1436944290.95947, 372158, 21.367351531982422], [1436944770.955783, 382430, 21.476247787475586], [1436945250.966321, 392684, 21.36678695678711], [1436945731.008667, 402950, 21.349145889282227], [1436946210.977922, 413210, 21.373897552490234], [1436946690.975303, 423463, 21.322399139404297], [1436947170.964596, 433723, 21.341150283813477], [1436947650.955017, 443991, 21.366348266601562], [1436948130.992501, 454271, 21.43844223022461], [1436948610.960555, 464519, 21.36829948425293], [1436949090.961079, 474758, 21.266357421875], [1436949570.971528, 484987, 21.316511154174805], [1436950050.977787, 495228, 21.356050491333008], [1436950531.020035, 505458, 21.31462860107422], [1436951010.959775, 515682, 21.277490615844727], [1436951490.967418, 525910, 21.289737701416016], [1436951970.969778, 536112, 21.2515811920166], [1436952450.956291, 546320, 21.254491806030273], [1436952931.005547, 556541, 21.297870635986328], [1436953410.955758, 566755, 21.320045471191406], [1436953890.959151, 576957, 21.23529624938965], [1436954370.959553, 587165, 21.25132179260254], [1436954850.960546, 597371, 21.23470115661621], [1436955330.989932, 607582, 21.19434356689453], [1436955810.957128, 617790, 21.258535385131836], [1436956290.9763, 627991, 21.221921920776367], [1436956770.957785, 638208, 21.309843063354492], [1436957250.974143, 648404, 21.252185821533203], [1436957731.012441, 658613, 21.265626907348633], [1436958210.980787, 668824, 21.239660263061523], [1436958690.973474, 679034, 21.2642765045166], [1436959170.95825, 689249, 21.303138732910156], [1436959650.959345, 699454, 21.24073600769043], [1436960131.008682, 709664, 21.217615127563477], [1436960610.958074, 719876, 21.251184463500977], [1436961090.963638, 730100, 21.290971755981445], [1436961570.979029, 740316, 21.305265426635742], [1436962050.974645, 750534, 21.27857208251953], [1436962531.055479, 760757, 21.329837799072266], [1436963010.975299, 770964, 21.248849868774414], [1436963490.963107, 781164, 21.19978904724121], [1436963970.965936, 791382, 21.30535888671875], [1436964450.959947, 801590, 21.226255416870117], [1436964931.00587, 811785, 21.242237091064453], [1436965410.977997, 821977, 21.226497650146484], [1436965890.988465, 832189, 21.31219482421875], [1436966370.965612, 842399, 21.283390045166016], [1436966850.965794, 852612, 21.273908615112305], [1436967331.009476, 862825, 21.260452270507812], [1436967810.96767, 873037, 21.315444946289062], [1436968290.959107, 883248, 21.28677749633789], [1436968770.9681, 893452, 21.265335083007812], [1436969250.959332, 903655, 21.252891540527344], [1436969731.055609, 913856, 21.233684539794922], [1436970210.961426, 924047, 21.191429138183594], [1436970690.962999, 934250, 21.23288345336914], [1436971170.989107, 944430, 21.17190170288086], [1436971650.956015, 954634, 21.275972366333008], [1436972131.006841, 964844, 21.278474807739258], [1436972610.981754, 975045, 21.25553321838379], [1436973090.961548, 985239, 21.21686553955078], [1436973570.960013, 995439, 21.26004981994629], [1436974050.975653, 1005642, 21.25356101989746], [1436974530.988571, 1015842, 21.23944664001465], [1436975010.95851, 1026048, 21.293363571166992], [1436975490.97355, 1036253, 21.277101516723633], [1436975970.960916, 1046451, 21.242155075073242], [1436976450.990263, 1056636, 21.182037353515625], [1436976930.999578, 1066834, 21.21113395690918], [1436977410.962637, 1077031, 21.230762481689453], [1436977890.970389, 1087222, 21.232444763183594], [1436978370.959059, 1097405, 21.202342987060547], [1436978850.956562, 1107601, 21.23992156982422], [1436979331.021134, 1117786, 21.197628021240234], [1436979810.958593, 1127973, 21.2270565032959], [1436980290.958763, 1138163, 21.250303268432617], [1436980770.967171, 1148348, 21.215538024902344], [1436981250.960473, 1158540, 21.277185440063477], [1436981731.009465, 1168733, 21.268449783325195], [1436982210.960797, 1178930, 21.268077850341797], [1436982690.959709, 1189129, 21.243141174316406], [1436983170.961963, 1199327, 21.21793556213379], [1436983650.958504, 1209524, 21.2817440032959], [1436984130.998057, 1219726, 21.261478424072266], [1436984610.958945, 1229936, 21.300107955932617], [1436985090.978825, 1240145, 21.326183319091797], [1436985570.993741, 1250311, 21.115875244140625], [1436986050.965608, 1260436, 21.19010353088379], [1436986531.026713, 1270611, 21.183719635009766], [1436987010.969056, 1280784, 21.273176193237305], [1436987490.975071, 1290959, 21.182931900024414], [1436987970.96007, 1301147, 21.260244369506836], [1436988450.966092, 1311328, 21.225025177001953], [1436988931.004917, 1321514, 21.242164611816406], [1436989410.980351, 1331709, 21.19801139831543], [1436989890.975192, 1341910, 21.273555755615234], [1436990370.964941, 1352090, 21.175983428955078], [1436990850.973647, 1362240, 21.13412094116211], [1436991330.999346, 1372396, 21.153064727783203], [1436991811.003573, 1382550, 21.155475616455078], [1436992290.962706, 1392710, 21.17011833190918], [1436992770.999149, 1402862, 21.128713607788086], [1436993250.965124, 1413020, 21.1361026763916], [1436993731.020464, 1423164, 21.157777786254883], [1436994210.966935, 1433312, 21.119478225708008], [1436994690.962803, 1443468, 21.161104202270508], [1436995170.972952, 1453657, 21.11492919921875], [1436995650.976233, 1463820, 21.194231033325195], [1436996130.990524, 1473980, 21.169816970825195], [1436996610.97302, 1484152, 21.18223762512207], [1436997090.958457, 1494308, 21.1954402923584], [1436997570.980333, 1504463, 21.140769958496094], [1436998050.969869, 1514618, 21.162744522094727], [1436998530.99688, 1524770, 21.139591217041016], [1436999010.970375, 1534905, 21.107114791870117], [1436999490.960775, 1545070, 21.233396530151367], [1436999970.965087, 1555223, 21.201074600219727], [1437000450.969008, 1565370, 21.147083282470703], [1437000931.007425, 1575517, 21.108510971069336], [1437001410.962798, 1585666, 21.11674690246582], [1437001890.966192, 1595826, 21.17819595336914], [1437002370.961814, 1605980, 21.157669067382812], [1437002850.962206, 1616145, 21.212690353393555], [1437003330.994816, 1626291, 21.177446365356445], [1437003810.966017, 1636448, 21.17884063720703], [1437004290.959479, 1646599, 21.150310516357422], [1437004770.965083, 1656754, 21.21011734008789], [1437005250.958234, 1666902, 21.14912986755371], [1437005731.003528, 1677043, 21.125459671020508], [1437006210.961371, 1687192, 21.124374389648438], [1437006690.962663, 1697338, 21.150362014770508], [1437007170.961639, 1707484, 21.16637420654297], [1437007650.972242, 1717625, 21.163259506225586], [1437008131.003191, 1727767, 21.167280197143555], [1437008610.962644, 1737913, 21.174945831298828], [1437009090.964129, 1748068, 21.17894172668457], [1437009570.962582, 1758219, 21.116622924804688], [1437010050.984863, 1768384, 21.23469352722168], [1437010531.002295, 1778534, 21.143510818481445], [1437011010.961803, 1788677, 21.159791946411133], [1437011490.974074, 1798822, 21.119792938232422], [1437011970.959982, 1808958, 21.10943603515625], [1437012450.95932, 1819091, 21.123899459838867], [1437012931.004909, 1829227, 21.094532012939453], [1437013410.957751, 1839374, 21.200057983398438], [1437013890.960506, 1849509, 21.10895538330078], [1437014370.96113, 1859653, 21.108680725097656], [1437014850.962876, 1869791, 21.141136169433594], [1437015331.009875, 1879944, 21.160165786743164], [1437015810.960671, 1890090, 21.158742904663086], [1437016290.970743, 1900242, 21.16562271118164], [1437016770.961673, 1910391, 21.141860961914062], [1437017250.96735, 1920551, 21.19420051574707], [1437017731.000324, 1930702, 21.16814422607422], [1437018210.967878, 1940856, 21.125978469848633], [1437018690.962742, 1951005, 21.15043067932129], [1437019170.975774, 1961158, 21.157419204711914], [1437019650.964573, 1971309, 21.150177001953125], [1437020130.999343, 1981461, 21.124492645263672], [1437020610.960696, 1991611, 21.109933853149414], [1437021090.958597, 2001766, 21.169754028320312], [1437021570.964477, 2011919, 21.13479995727539], [1437022050.966522, 2022063, 21.131561279296875], [1437022531.005607, 2032219, 21.135629653930664], [1437023010.970667, 2042380, 21.207313537597656], [1437023490.964885, 2052534, 21.108623504638672], [1437023970.965596, 2062691, 21.14097023010254], [1437024450.962296, 2072837, 21.129037857055664], [1437024931.00395, 2082982, 21.077030181884766], [1437025410.96602, 2093128, 21.13152503967285], [1437025890.961753, 2103274, 21.117740631103516], [1437026370.962022, 2113424, 21.141584396362305], [1437026850.975475, 2123570, 21.143577575683594], [1437027331.009277, 2133721, 21.175586700439453], [1437027810.97206, 2143857, 21.099014282226562], [1437028290.961523, 2154015, 21.141523361206055], [1437028770.964366, 2164168, 21.141345977783203], [1437029250.962109, 2174320, 21.14827537536621], [1437029731.003068, 2184453, 21.086946487426758], [1437030210.960946, 2194602, 21.1590576171875], [1437030690.966681, 2204754, 21.17353057861328], [1437031170.961207, 2214899, 21.133989334106445], [1437031650.962809, 2225062, 21.14800453186035], [1437032130.997644, 2235215, 21.15397834777832], [1437032610.962999, 2245366, 21.15763282775879], [1437033090.962192, 2255521, 21.133577346801758], [1437033570.963341, 2265657, 21.058490753173828], [1437034050.979501, 2275787, 21.079614639282227], [1437034531.003514, 2285923, 21.12677574157715], [1437035010.960984, 2296058, 21.100793838500977], [1437035490.97325, 2306176, 21.10753059387207], [1437035970.969759, 2316297, 21.100393295288086], [1437036450.962305, 2326428, 21.041208267211914], [1437036931.001785, 2336571, 21.15167999267578], [1437037410.967681, 2346709, 21.09291648864746], [1437037890.963194, 2356854, 21.18524932861328], [1437038370.96445, 2366985, 21.116247177124023], [1437038850.960718, 2377124, 21.125469207763672], [1437039331.003148, 2387259, 21.132274627685547], [1437039810.974007, 2397400, 21.119945526123047], [1437040290.983415, 2407539, 21.154672622680664], [1437040770.961836, 2417667, 21.066741943359375], [1437041250.964281, 2427791, 21.126564025878906], [1437041731.0196, 2437923, 21.1062068939209], [1437042210.962927, 2448056, 21.124549865722656], [1437042690.964392, 2458193, 21.13232421875], [1437043170.972024, 2468318, 21.066423416137695], [1437043650.966111, 2478449, 21.123788833618164], [1437044131.030028, 2488576, 21.138349533081055], [1437044610.962532, 2498717, 21.11895179748535], [1437045090.965094, 2508839, 21.019609451293945], [1437045570.963352, 2518972, 21.079254150390625], [1437046050.96194, 2529106, 21.15033531188965], [1437046530.995016, 2539243, 21.11912727355957], [1437047010.963313, 2549369, 21.08464813232422], [1437047490.963943, 2559509, 21.133895874023438], [1437047970.958612, 2569646, 21.108659744262695], [1437048450.962392, 2579776, 21.084848403930664], [1437048931.005408, 2589906, 21.092708587646484], [1437049410.984115, 2600033, 21.130634307861328], [1437049890.964103, 2610162, 21.074010848999023], [1437050370.960886, 2620282, 21.086149215698242], [1437050850.959795, 2630402, 21.08969497680664], [1437051331.008292, 2640533, 21.134498596191406], [1437051810.96622, 2650643, 21.065444946289062], [1437052290.98584, 2660774, 21.120830535888672], [1437052770.967707, 2670900, 21.085134506225586], [1437053250.978851, 2681021, 21.037155151367188], [1437053731.021686, 2691151, 21.09203338623047], [1437054210.971744, 2701273, 21.048450469970703], [1437054690.966686, 2711425, 21.048809051513672], [1437055170.964463, 2721564, 21.13330078125], [1437055650.97301, 2731694, 21.097095489501953], [1437056130.997053, 2741810, 21.031536102294922], [1437056610.968681, 2751927, 21.04400634765625], [1437057090.976676, 2762049, 21.114444732666016], [1437057570.962334, 2772169, 21.06243896484375], [1437058050.969524, 2782292, 21.12563133239746], [1437058531.012918, 2792420, 21.12433433532715], [1437059010.972868, 2802545, 21.067407608032227], [1437059490.96188, 2812684, 21.099285125732422], [1437059970.965083, 2822806, 21.08357810974121], [1437060450.964845, 2832940, 21.142192840576172], [1437060931.011947, 2843080, 21.109895706176758], [1437061410.963414, 2853223, 21.13360023498535], [1437061890.969303, 2863361, 21.152849197387695], [1437062370.963703, 2873490, 21.08356285095215], [1437062850.964392, 2883627, 21.115087509155273], [1437063331.025516, 2893758, 21.13198471069336], [1437063810.962087, 2903877, 21.084623336791992], [1437064290.973818, 2914013, 21.14010238647461], [1437064770.967792, 2924145, 21.108346939086914], [1437065250.95886, 2934291, 21.1142635345459], [1437065731.01002, 2944434, 21.17418670654297], [1437066210.959306, 2954576, 21.084075927734375], [1437066690.960644, 2964724, 21.125164031982422], [1437067170.969539, 2974890, 21.200775146484375], [1437067650.960018, 2985036, 21.14740562438965], [1437068130.990731, 2995179, 21.11964225769043], [1437068610.960429, 3005322, 21.141313552856445], [1437069090.95752, 3015461, 21.082963943481445], [1437069570.974879, 3025595, 21.12288475036621], [1437070050.95761, 3035734, 21.107513427734375], [1437070531.0013, 3045868, 21.171630859375], [1437071010.961705, 3056004, 21.066505432128906], [1437071490.961495, 3066137, 21.10834312438965], [1437071970.978122, 3076267, 21.08027458190918], [1437072450.963299, 3086399, 21.089733123779297], [1437072931.018382, 3096524, 21.133176803588867], [1437073050.962102, 3099048, 21.041847229003906], [1437073170.96983, 3101584, 21.131967544555664], [1437073290.957895, 3104118, 21.118793487548828]] \ No newline at end of file
diff --git a/tensorflow/tensorboard/components/tf-event-dashboard/demo/data/alpha/d2.json b/tensorflow/tensorboard/components/tf-event-dashboard/demo/data/alpha/d2.json
new file mode 100644
index 0000000000..92bb414348
--- /dev/null
+++ b/tensorflow/tensorboard/components/tf-event-dashboard/demo/data/alpha/d2.json
@@ -0,0 +1 @@
+[[1436925978.257845, 7, 0.04500000178813934], [1436926413.945391, 1476, 0.04500000178813934], [1436926893.945037, 6006, 0.04500000178813934], [1436927373.995472, 13786, 0.04500000178813934], [1436927853.989794, 23650, 0.04500000178813934], [1436928334.132361, 33755, 0.04500000178813934], [1436928813.973288, 43941, 0.04500000178813934], [1436929293.975949, 54146, 0.04500000178813934], [1436929773.992781, 64316, 0.04500000178813934], [1436930253.997415, 74465, 0.04500000178813934], [1436930734.203004, 84611, 0.04230000078678131], [1436931214.03644, 94700, 0.04230000078678131], [1436931694.094564, 104766, 0.04230000078678131], [1436932174.114955, 114817, 0.04230000078678131], [1436932654.161382, 124880, 0.04230000078678131], [1436933133.960214, 134977, 0.04230000078678131], [1436933614.044337, 145062, 0.04230000078678131], [1436934094.166206, 155169, 0.04230000078678131], [1436934574.106036, 165284, 0.03976200148463249], [1436935054.150647, 175402, 0.03976200148463249], [1436935533.819562, 185538, 0.03976200148463249], [1436936013.710422, 195712, 0.03976200148463249], [1436936493.609025, 205906, 0.03976200148463249], [1436936973.683892, 216099, 0.03976200148463249], [1436937454.138383, 226331, 0.03976200148463249], [1436937933.838475, 236532, 0.03976200148463249], [1436938413.89688, 246724, 0.0373762808740139], [1436938894.018652, 256925, 0.0373762808740139], [1436939373.69067, 267137, 0.0373762808740139], [1436939853.673692, 277369, 0.0373762808740139], [1436940333.651346, 287620, 0.0373762808740139], [1436940813.599579, 297848, 0.0373762808740139], [1436941293.596313, 308088, 0.0373762808740139], [1436941773.659172, 318362, 0.0373762808740139], [1436942253.648479, 328621, 0.03513370454311371], [1436942733.752284, 338892, 0.03513370454311371], [1436943213.621881, 349144, 0.03513370454311371], [1436943693.698743, 359399, 0.03513370454311371], [1436944173.578463, 369649, 0.03513370454311371], [1436944653.692217, 379912, 0.03513370454311371], [1436945133.677298, 390180, 0.03513370454311371], [1436945613.572411, 400445, 0.03302568197250366], [1436946093.56123, 410703, 0.03302568197250366], [1436946573.542364, 420958, 0.03302568197250366], [1436947053.616578, 431216, 0.03302568197250366], [1436947533.636973, 441483, 0.03302568197250366], [1436948013.541574, 451751, 0.03302568197250366], [1436948493.560223, 462015, 0.03302568197250366], [1436948973.512541, 472260, 0.03302568197250366], [1436949453.550055, 482483, 0.031044140458106995], [1436949933.828011, 492731, 0.031044140458106995], [1436950413.603177, 502957, 0.031044140458106995], [1436950893.563009, 513185, 0.031044140458106995], [1436951373.620887, 523410, 0.031044140458106995], [1436951853.61941, 533618, 0.031044140458106995], [1436952333.694447, 543828, 0.031044140458106995], [1436952813.621004, 554042, 0.031044140458106995], [1436953293.588156, 564251, 0.02918149158358574], [1436953773.599734, 574464, 0.02918149158358574], [1436954253.621309, 584672, 0.02918149158358574], [1436954733.738119, 594882, 0.02918149158358574], [1436955213.56617, 605091, 0.02918149158358574], [1436955693.585366, 615296, 0.02918149158358574], [1436956173.626395, 625501, 0.02918149158358574], [1436956653.601937, 635705, 0.02918149158358574], [1436957133.665878, 645915, 0.02743060328066349], [1436957613.584762, 656116, 0.02743060328066349], [1436958093.549783, 666331, 0.02743060328066349], [1436958573.646778, 676543, 0.02743060328066349], [1436959053.585655, 686750, 0.02743060328066349], [1436959533.679696, 696961, 0.02743060328066349], [1436960013.633292, 707173, 0.02743060328066349], [1436960493.578778, 717383, 0.02743060328066349], [1436960973.596715, 727598, 0.025784766301512718], [1436961453.625644, 737818, 0.025784766301512718], [1436961933.740339, 748040, 0.025784766301512718], [1436962413.573845, 758252, 0.025784766301512718], [1436962893.610678, 768470, 0.025784766301512718], [1436963373.642878, 778674, 0.025784766301512718], [1436963853.558388, 788877, 0.025784766301512718], [1436964333.658419, 799099, 0.025784766301512718], [1436964813.573319, 809289, 0.024237681180238724], [1436965293.542098, 819484, 0.024237681180238724], [1436965773.545453, 829687, 0.024237681180238724], [1436966253.586517, 839901, 0.024237681180238724], [1436966733.639348, 850120, 0.024237681180238724], [1436967213.697288, 860330, 0.024237681180238724], [1436967693.617172, 870539, 0.024237681180238724], [1436968173.593885, 880748, 0.024237681180238724], [1436968653.560836, 890955, 0.022783419117331505], [1436969133.676337, 901164, 0.022783419117331505], [1436969613.506638, 911358, 0.022783419117331505], [1436970093.595964, 921560, 0.022783419117331505], [1436970573.541227, 931756, 0.022783419117331505], [1436971053.624316, 941945, 0.022783419117331505], [1436971533.655543, 952138, 0.022783419117331505], [1436972013.604738, 962349, 0.02141641452908516], [1436972493.613199, 972551, 0.02141641452908516], [1436972973.501155, 982746, 0.02141641452908516], [1436973453.64842, 992945, 0.02141641452908516], [1436973933.689516, 1003147, 0.02141641452908516], [1436974413.577769, 1013350, 0.02141641452908516], [1436974893.542281, 1023545, 0.02141641452908516], [1436975373.638453, 1033759, 0.02141641452908516], [1436975853.524388, 1043955, 0.02013142965734005], [1436976333.625792, 1054148, 0.02013142965734005], [1436976813.610661, 1064342, 0.02013142965734005], [1436977293.601581, 1074539, 0.02013142965734005], [1436977773.575627, 1084733, 0.02013142965734005], [1436978253.564972, 1094914, 0.02013142965734005], [1436978733.673144, 1105109, 0.02013142965734005], [1436979213.540585, 1115293, 0.02013142965734005], [1436979693.699591, 1125483, 0.018923543393611908], [1436980173.613012, 1135670, 0.018923543393611908], [1436980653.575769, 1145862, 0.018923543393611908], [1436981133.719264, 1156045, 0.018923543393611908], [1436981613.563551, 1166236, 0.018923543393611908], [1436982093.553233, 1176436, 0.018923543393611908], [1436982573.577846, 1186636, 0.018923543393611908], [1436983053.605749, 1196837, 0.018923543393611908], [1436983533.684994, 1207025, 0.017788130789995193], [1436984013.561492, 1217233, 0.017788130789995193], [1436984493.629873, 1227437, 0.017788130789995193], [1436984973.606714, 1237643, 0.017788130789995193], [1436985453.690084, 1247835, 0.017788130789995193], [1436985933.711388, 1257951, 0.017788130789995193], [1436986413.598807, 1268125, 0.017788130789995193], [1436986893.631797, 1278290, 0.017788130789995193], [1436987373.596962, 1288473, 0.016720842570066452], [1436987853.555549, 1298650, 0.016720842570066452], [1436988333.722032, 1308841, 0.016720842570066452], [1436988813.55697, 1319018, 0.016720842570066452], [1436989293.756905, 1329221, 0.016720842570066452], [1436989773.665141, 1339417, 0.016720842570066452], [1436990253.768302, 1349610, 0.016720842570066452], [1436990733.708919, 1359759, 0.016720842570066452], [1436991213.663033, 1369914, 0.01571759209036827], [1436991693.730925, 1380074, 0.01571759209036827], [1436992173.751791, 1390224, 0.01571759209036827], [1436992653.758682, 1400383, 0.01571759209036827], [1436993133.835604, 1410542, 0.01571759209036827], [1436993613.674655, 1420684, 0.01571759209036827], [1436994093.747454, 1430832, 0.01571759209036827], [1436994573.768973, 1440986, 0.01571759209036827], [1436995053.666661, 1451174, 0.014774537645280361], [1436995533.83439, 1461345, 0.014774537645280361], [1436996013.556996, 1471495, 0.014774537645280361], [1436996493.635477, 1481663, 0.014774537645280361], [1436996973.668684, 1491822, 0.014774537645280361], [1436997453.59326, 1501979, 0.014774537645280361], [1436997933.774019, 1512139, 0.014774537645280361], [1436998413.575162, 1522290, 0.01388806477189064], [1436998893.640468, 1532431, 0.01388806477189064], [1436999373.551661, 1542579, 0.01388806477189064], [1436999853.57906, 1552734, 0.01388806477189064], [1437000333.680409, 1562888, 0.01388806477189064], [1437000813.602383, 1573037, 0.01388806477189064], [1437001293.610337, 1583190, 0.01388806477189064], [1437001773.618199, 1593341, 0.01388806477189064], [1437002253.572966, 1603497, 0.013054781593382359], [1437002733.67994, 1613657, 0.013054781593382359], [1437003213.583266, 1623809, 0.013054781593382359], [1437003693.639943, 1633966, 0.013054781593382359], [1437004173.568287, 1644113, 0.013054781593382359], [1437004653.610772, 1654268, 0.013054781593382359], [1437005133.663045, 1664424, 0.013054781593382359], [1437005613.580984, 1674567, 0.013054781593382359], [1437006093.601019, 1684715, 0.01227149460464716], [1437006573.625314, 1694857, 0.01227149460464716], [1437007053.584514, 1704999, 0.01227149460464716], [1437007533.719303, 1715150, 0.01227149460464716], [1437008013.604962, 1725282, 0.01227149460464716], [1437008493.655091, 1735432, 0.01227149460464716], [1437008973.640165, 1745584, 0.01227149460464716], [1437009453.715067, 1755742, 0.01227149460464716], [1437009933.765712, 1765896, 0.011535204015672207], [1437010413.632128, 1776052, 0.011535204015672207], [1437010893.66766, 1786195, 0.011535204015672207], [1437011373.636164, 1796346, 0.011535204015672207], [1437011853.631224, 1806481, 0.011535204015672207], [1437012333.706205, 1816617, 0.011535204015672207], [1437012813.61987, 1826754, 0.011535204015672207], [1437013293.479904, 1836883, 0.011535204015672207], [1437013773.604574, 1847029, 0.010843091644346714], [1437014253.618884, 1857175, 0.010843091644346714], [1437014733.756419, 1867312, 0.010843091644346714], [1437015213.638607, 1877459, 0.010843091644346714], [1437015693.625763, 1887608, 0.010843091644346714], [1437016173.63194, 1897759, 0.010843091644346714], [1437016653.609074, 1907909, 0.010843091644346714], [1437017133.717601, 1918074, 0.010843091644346714], [1437017613.716011, 1928220, 0.010192506946623325], [1437018093.626005, 1938377, 0.010192506946623325], [1437018573.626522, 1948523, 0.010192506946623325], [1437019053.648174, 1958678, 0.010192506946623325], [1437019533.803011, 1968831, 0.010192506946623325], [1437020013.667751, 1978978, 0.010192506946623325], [1437020493.659028, 1989133, 0.010192506946623325], [1437020973.657346, 1999287, 0.010192506946623325], [1437021453.650634, 2009437, 0.00958095584064722], [1437021933.848661, 2019588, 0.00958095584064722], [1437022413.674963, 2029736, 0.00958095584064722], [1437022893.69086, 2039894, 0.00958095584064722], [1437023373.68883, 2050054, 0.00958095584064722], [1437023853.686116, 2060205, 0.00958095584064722], [1437024333.763876, 2070362, 0.00958095584064722], [1437024813.707845, 2080507, 0.00958095584064722], [1437025293.483294, 2090645, 0.009006098844110966], [1437025773.695712, 2100793, 0.009006098844110966], [1437026253.672994, 2110943, 0.009006098844110966], [1437026733.780775, 2121094, 0.009006098844110966], [1437027213.617849, 2131235, 0.009006098844110966], [1437027693.694451, 2141382, 0.009006098844110966], [1437028173.68596, 2151537, 0.009006098844110966], [1437028653.584833, 2161685, 0.009006098844110966], [1437029133.792483, 2171839, 0.00846573244780302], [1437029613.661672, 2181977, 0.00846573244780302], [1437030093.641009, 2192118, 0.00846573244780302], [1437030573.656274, 2202268, 0.00846573244780302], [1437031053.643631, 2212416, 0.00846573244780302], [1437031533.777478, 2222583, 0.00846573244780302], [1437032013.704008, 2232736, 0.00846573244780302], [1437032493.638393, 2242882, 0.007957788184285164], [1437032973.684986, 2253041, 0.007957788184285164], [1437033453.699562, 2263183, 0.007957788184285164], [1437033933.918074, 2273320, 0.007957788184285164], [1437034413.596351, 2283443, 0.007957788184285164], [1437034893.640496, 2293579, 0.007957788184285164], [1437035373.637761, 2303701, 0.007957788184285164], [1437035853.669947, 2313823, 0.007957788184285164], [1437036333.78905, 2323961, 0.0074803209863603115], [1437036813.699727, 2334089, 0.0074803209863603115], [1437037293.662592, 2344235, 0.0074803209863603115], [1437037773.66716, 2354364, 0.0074803209863603115], [1437038253.603687, 2364507, 0.0074803209863603115], [1437038733.78864, 2374644, 0.0074803209863603115], [1437039213.641799, 2384782, 0.0074803209863603115], [1437039693.687078, 2394923, 0.0074803209863603115], [1437040173.635717, 2405058, 0.0070315017364919186], [1437040653.673331, 2415194, 0.0070315017364919186], [1437041133.764768, 2425322, 0.0070315017364919186], [1437041613.629279, 2435449, 0.0070315017364919186], [1437042093.703985, 2445575, 0.0070315017364919186], [1437042573.496029, 2455712, 0.0070315017364919186], [1437043053.686022, 2465844, 0.0070315017364919186], [1437043533.731929, 2475974, 0.0070315017364919186], [1437044013.636245, 2486095, 0.006609611678868532], [1437044493.69923, 2496238, 0.006609611678868532], [1437044973.652155, 2506373, 0.006609611678868532], [1437045453.691467, 2516497, 0.006609611678868532], [1437045933.935804, 2526637, 0.006609611678868532], [1437046413.635583, 2536770, 0.006609611678868532], [1437046893.626337, 2546896, 0.006609611678868532], [1437047373.67437, 2557029, 0.006609611678868532], [1437047853.652939, 2567169, 0.0062130349688231945], [1437048333.778436, 2577306, 0.0062130349688231945], [1437048813.654248, 2587433, 0.0062130349688231945], [1437049293.610609, 2597552, 0.0062130349688231945], [1437049773.646573, 2607690, 0.0062130349688231945], [1437050253.667925, 2617808, 0.0062130349688231945], [1437050733.735291, 2627933, 0.0062130349688231945], [1437051213.620222, 2638053, 0.0062130349688231945], [1437051693.601978, 2648171, 0.005840253084897995], [1437052173.634985, 2658299, 0.005840253084897995], [1437052653.687176, 2668425, 0.005840253084897995], [1437053133.762819, 2678556, 0.005840253084897995], [1437053613.643698, 2688671, 0.005840253084897995], [1437054093.673047, 2698804, 0.005840253084897995], [1437054573.667371, 2708956, 0.005840253084897995], [1437055053.650441, 2719087, 0.005840253084897995], [1437055533.778469, 2729219, 0.005489837843924761], [1437056013.694082, 2739343, 0.005489837843924761], [1437056493.674871, 2749458, 0.005489837843924761], [1437056973.700234, 2759575, 0.005489837843924761], [1437057453.666129, 2769697, 0.005489837843924761], [1437057933.848506, 2779821, 0.005489837843924761], [1437058413.643799, 2789941, 0.005489837843924761], [1437058893.715386, 2800076, 0.005489837843924761], [1437059373.62596, 2810207, 0.005160447675734758], [1437059853.650848, 2820334, 0.005160447675734758], [1437060333.792248, 2830465, 0.005160447675734758], [1437060813.682955, 2840600, 0.005160447675734758], [1437061293.681795, 2850745, 0.005160447675734758], [1437061773.691182, 2860880, 0.005160447675734758], [1437062253.662987, 2871013, 0.005160447675734758], [1437062733.760419, 2881153, 0.005160447675734758], [1437063213.651969, 2891278, 0.004850820638239384], [1437063693.723523, 2901406, 0.004850820638239384], [1437064173.68663, 2911533, 0.004850820638239384], [1437064653.547643, 2921667, 0.004850820638239384], [1437065133.62645, 2931813, 0.004850820638239384], [1437065613.566569, 2941947, 0.004850820638239384], [1437066093.537804, 2952102, 0.004850820638239384], [1437066573.529332, 2962243, 0.004850820638239384], [1437067053.520098, 2972400, 0.004559771623462439], [1437067533.605733, 2982561, 0.004559771623462439], [1437068013.535467, 2992698, 0.004559771623462439], [1437068493.559976, 3002839, 0.004559771623462439], [1437068973.558743, 3012983, 0.004559771623462439], [1437069453.562661, 3023116, 0.004559771623462439], [1437069933.627071, 3033256, 0.004559771623462439], [1437070413.574131, 3043386, 0.004286185372620821], [1437070893.658803, 3053528, 0.004286185372620821], [1437071373.638711, 3063659, 0.004286185372620821], [1437071853.621384, 3073794, 0.004286185372620821], [1437072333.665269, 3083926, 0.004286185372620821], [1437072813.584388, 3094040, 0.004286185372620821], [1437073293.569178, 3104172, 0.004286185372620821]] \ No newline at end of file
diff --git a/tensorflow/tensorboard/components/tf-event-dashboard/demo/data/alpha/d3.json b/tensorflow/tensorboard/components/tf-event-dashboard/demo/data/alpha/d3.json
new file mode 100644
index 0000000000..69191b9154
--- /dev/null
+++ b/tensorflow/tensorboard/components/tf-event-dashboard/demo/data/alpha/d3.json
@@ -0,0 +1 @@
+[[1436925978.257845, 7, 0.0], [1436927853.989794, 23650, 7360.0], [1436929773.992781, 64316, 7360.0], [1436931694.094564, 104766, 7360.0], [1436933614.044337, 145062, 7360.0], [1436935533.819562, 185538, 7360.0], [1436937454.138383, 226331, 7360.0], [1436939373.69067, 267137, 7360.0], [1436941293.596313, 308088, 7360.0], [1436943213.621881, 349144, 7360.0], [1436945133.677298, 390180, 7360.0], [1436947053.616578, 431216, 7360.0], [1436948973.512541, 472260, 7360.0], [1436950893.563009, 513185, 7360.0], [1436952813.621004, 554042, 7360.0], [1436954733.738119, 594882, 7360.0], [1436956653.601937, 635705, 7360.0], [1436958573.646778, 676543, 7360.0], [1436960493.578778, 717383, 7360.0], [1436962413.573845, 758252, 7360.0], [1436964333.658419, 799099, 7360.0], [1436966253.586517, 839901, 7360.0], [1436968173.593885, 880748, 7360.0], [1436970093.595964, 921560, 7360.0], [1436972013.604738, 962349, 7360.0], [1436973933.689516, 1003147, 7360.0], [1436975853.524388, 1043955, 7360.0], [1436977773.575627, 1084733, 7360.0], [1436979693.699591, 1125483, 7360.0], [1436981613.563551, 1166236, 7360.0], [1436983533.684994, 1207025, 7360.0], [1436985453.690084, 1247835, 7360.0], [1436987373.596962, 1288473, 7360.0], [1436989293.756905, 1329221, 7360.0], [1436991213.663033, 1369914, 7360.0], [1436993133.835604, 1410542, 7360.0], [1436995053.666661, 1451174, 7360.0], [1436996973.668684, 1491822, 7360.0], [1436998893.640468, 1532431, 7360.0], [1437000813.602383, 1573037, 7360.0], [1437002733.67994, 1613657, 7360.0], [1437004653.610772, 1654268, 7360.0], [1437006573.625314, 1694857, 7360.0], [1437008493.655091, 1735432, 7360.0], [1437010413.632128, 1776052, 7360.0], [1437012333.706205, 1816617, 7360.0], [1437014253.618884, 1857175, 7360.0], [1437016173.63194, 1897759, 7360.0], [1437018093.626005, 1938377, 7360.0], [1437020013.667751, 1978978, 7360.0], [1437021933.848661, 2019588, 7360.0], [1437023853.686116, 2060205, 7360.0], [1437025773.695712, 2100793, 7360.0], [1437027693.694451, 2141382, 7360.0], [1437029613.661672, 2181977, 7360.0], [1437031533.777478, 2222583, 7360.0], [1437033453.699562, 2263183, 7360.0], [1437035373.637761, 2303701, 7360.0], [1437037293.662592, 2344235, 7360.0], [1437039213.641799, 2384782, 7360.0], [1437041133.764768, 2425322, 7360.0], [1437043053.686022, 2465844, 7360.0], [1437044973.652155, 2506373, 7360.0], [1437046893.626337, 2546896, 7862.0], [1437048813.654248, 2587433, 7862.0], [1437050733.735291, 2627933, 7862.0], [1437052653.687176, 2668425, 7862.0], [1437054573.667371, 2708956, 7862.0], [1437056493.674871, 2749458, 7862.0], [1437058413.643799, 2789941, 7862.0], [1437060333.792248, 2830465, 7862.0], [1437062253.662987, 2871013, 7862.0], [1437064173.68663, 2911533, 7862.0], [1437066093.537804, 2952102, 7862.0], [1437068013.535467, 2992698, 7862.0], [1437069933.627071, 3033256, 7862.0], [1437071853.621384, 3073794, 7862.0], [1437072333.665269, 3083926, 7862.0], [1437072813.584388, 3094040, 7862.0], [1437073293.569178, 3104172, 7862.0]] \ No newline at end of file
diff --git a/tensorflow/tensorboard/components/tf-event-dashboard/demo/data/alpha/d4.json b/tensorflow/tensorboard/components/tf-event-dashboard/demo/data/alpha/d4.json
new file mode 100644
index 0000000000..caf1ae6e7f
--- /dev/null
+++ b/tensorflow/tensorboard/components/tf-event-dashboard/demo/data/alpha/d4.json
@@ -0,0 +1 @@
+[[1436925978.257845, 7, 2.461352825164795], [1436926413.945391, 1476, 12.772720336914062], [1436926893.945037, 6006, 12.195232391357422], [1436927373.995472, 13786, 11.528279304504395], [1436927853.989794, 23650, 10.722719192504883], [1436928334.132361, 33755, 10.215253829956055], [1436928813.973288, 43941, 9.730447769165039], [1436929293.975949, 54146, 9.399007797241211], [1436929773.992781, 64316, 9.1018648147583], [1436930253.997415, 74465, 8.961446762084961], [1436930734.203004, 84611, 8.757476806640625], [1436931214.03644, 94700, 8.4615478515625], [1436931694.094564, 104766, 8.506814956665039], [1436932174.114955, 114817, 8.246719360351562], [1436932654.161382, 124880, 8.329349517822266], [1436933133.960214, 134977, 7.90853214263916], [1436933614.044337, 145062, 8.192558288574219], [1436934094.166206, 155169, 7.865443229675293], [1436934574.106036, 165284, 7.910976886749268], [1436935054.150647, 175402, 7.925509929656982], [1436935533.819562, 185538, 7.866455078125], [1436936013.710422, 195712, 7.9123406410217285], [1436936493.609025, 205906, 7.748654842376709], [1436936973.683892, 216099, 7.849164009094238], [1436937454.138383, 226331, 7.784902572631836], [1436937933.838475, 236532, 7.749933242797852], [1436938413.89688, 246724, 7.777050971984863], [1436938894.018652, 256925, 7.663984775543213], [1436939373.69067, 267137, 7.602056980133057], [1436939853.673692, 277369, 7.539070129394531], [1436940333.651346, 287620, 7.575552463531494], [1436940813.599579, 297848, 7.47900390625], [1436941293.596313, 308088, 7.403858184814453], [1436941773.659172, 318362, 7.589539527893066], [1436942253.648479, 328621, 7.511919975280762], [1436942733.752284, 338892, 7.31054162979126], [1436943213.621881, 349144, 7.261094570159912], [1436943693.698743, 359399, 7.552957534790039], [1436944173.578463, 369649, 7.449452877044678], [1436944653.692217, 379912, 7.177209854125977], [1436945133.677298, 390180, 7.308793067932129], [1436945613.572411, 400445, 7.229344844818115], [1436946093.56123, 410703, 7.129981994628906], [1436946573.542364, 420958, 7.127549171447754], [1436947053.616578, 431216, 7.538583755493164], [1436947533.636973, 441483, 7.030594825744629], [1436948013.541574, 451751, 6.98097038269043], [1436948493.560223, 462015, 7.213271141052246], [1436948973.512541, 472260, 7.1727519035339355], [1436949453.550055, 482483, 6.985068321228027], [1436949933.828011, 492731, 7.051283836364746], [1436950413.603177, 502957, 7.082402229309082], [1436950893.563009, 513185, 7.1637864112854], [1436951373.620887, 523410, 7.193849086761475], [1436951853.61941, 533618, 7.1212921142578125], [1436952333.694447, 543828, 7.208009719848633], [1436952813.621004, 554042, 7.28671932220459], [1436953293.588156, 564251, 6.941026210784912], [1436953773.599734, 574464, 7.230144500732422], [1436954253.621309, 584672, 6.815900802612305], [1436954733.738119, 594882, 7.060589790344238], [1436955213.56617, 605091, 7.079995155334473], [1436955693.585366, 615296, 7.300849437713623], [1436956173.626395, 625501, 6.927395343780518], [1436956653.601937, 635705, 6.893837928771973], [1436957133.665878, 645915, 6.965301990509033], [1436957613.584762, 656116, 6.902514457702637], [1436958093.549783, 666331, 7.2444868087768555], [1436958573.646778, 676543, 6.784783840179443], [1436959053.585655, 686750, 6.800273418426514], [1436959533.679696, 696961, 6.743415355682373], [1436960013.633292, 707173, 7.012747764587402], [1436960493.578778, 717383, 6.548677921295166], [1436960973.596715, 727598, 6.638228416442871], [1436961453.625644, 737818, 6.884350776672363], [1436961933.740339, 748040, 6.797428607940674], [1436962413.573845, 758252, 6.815422058105469], [1436962893.610678, 768470, 6.7392377853393555], [1436963373.642878, 778674, 6.8375959396362305], [1436963853.558388, 788877, 6.7254252433776855], [1436964333.658419, 799099, 6.765130996704102], [1436964813.573319, 809289, 6.7060980796813965], [1436965293.542098, 819484, 6.63279390335083], [1436965773.545453, 829687, 6.587352752685547], [1436966253.586517, 839901, 6.4957275390625], [1436966733.639348, 850120, 6.765798091888428], [1436967213.697288, 860330, 6.681786060333252], [1436967693.617172, 870539, 6.696804523468018], [1436968173.593885, 880748, 6.571035385131836], [1436968653.560836, 890955, 6.29492712020874], [1436969133.676337, 901164, 6.679598331451416], [1436969613.506638, 911358, 6.548522472381592], [1436970093.595964, 921560, 6.585646629333496], [1436970573.541227, 931756, 6.589619159698486], [1436971053.624316, 941945, 6.333208084106445], [1436971533.655543, 952138, 6.582470417022705], [1436972013.604738, 962349, 6.289045810699463], [1436972493.613199, 972551, 6.360206127166748], [1436972973.501155, 982746, 6.567287921905518], [1436973453.64842, 992945, 6.246123313903809], [1436973933.689516, 1003147, 6.44004487991333], [1436974413.577769, 1013350, 6.315634727478027], [1436974893.542281, 1023545, 6.289544105529785], [1436975373.638453, 1033759, 6.412042140960693], [1436975853.524388, 1043955, 6.165371894836426], [1436976333.625792, 1054148, 6.403027534484863], [1436976813.610661, 1064342, 6.37597131729126], [1436977293.601581, 1074539, 6.336863994598389], [1436977773.575627, 1084733, 6.377552032470703], [1436978253.564972, 1094914, 6.28995943069458], [1436978733.673144, 1105109, 6.28420352935791], [1436979213.540585, 1115293, 6.277828216552734], [1436979693.699591, 1125483, 6.185207843780518], [1436980173.613012, 1135670, 6.186310768127441], [1436980653.575769, 1145862, 5.922095775604248], [1436981133.719264, 1156045, 6.141305923461914], [1436981613.563551, 1166236, 6.10508394241333], [1436982093.553233, 1176436, 5.967081069946289], [1436982573.577846, 1186636, 5.960882186889648], [1436983053.605749, 1196837, 6.2222185134887695], [1436983533.684994, 1207025, 6.051136493682861], [1436984013.561492, 1217233, 6.087917804718018], [1436984493.629873, 1227437, 5.95945405960083], [1436984973.606714, 1237643, 5.971570014953613], [1436985453.690084, 1247835, 5.969781398773193], [1436985933.711388, 1257951, 6.040994644165039], [1436986413.598807, 1268125, 6.142050743103027], [1436986893.631797, 1278290, 6.03120231628418], [1436987373.596962, 1288473, 5.921470642089844], [1436987853.555549, 1298650, 5.921937942504883], [1436988333.722032, 1308841, 6.050085067749023], [1436988813.55697, 1319018, 5.837893486022949], [1436989293.756905, 1329221, 5.927487850189209], [1436989773.665141, 1339417, 6.117348670959473], [1436990253.768302, 1349610, 6.052918434143066], [1436990733.708919, 1359759, 5.8977789878845215], [1436991213.663033, 1369914, 5.903198719024658], [1436991693.730925, 1380074, 5.85245418548584], [1436992173.751791, 1390224, 5.902153968811035], [1436992653.758682, 1400383, 5.822136878967285], [1436993133.835604, 1410542, 5.88037633895874], [1436993613.674655, 1420684, 5.778636932373047], [1436994093.747454, 1430832, 5.876591682434082], [1436994573.768973, 1440986, 6.196285724639893], [1436995053.666661, 1451174, 5.7718634605407715], [1436995533.83439, 1461345, 5.931266784667969], [1436996013.556996, 1471495, 5.9706597328186035], [1436996493.635477, 1481663, 5.589694023132324], [1436996973.668684, 1491822, 5.787637233734131], [1436997453.59326, 1501979, 5.634321689605713], [1436997933.774019, 1512139, 5.699962615966797], [1436998413.575162, 1522290, 5.807012557983398], [1436998893.640468, 1532431, 5.559602737426758], [1436999373.551661, 1542579, 5.918235778808594], [1436999853.57906, 1552734, 5.745569229125977], [1437000333.680409, 1562888, 5.59443473815918], [1437000813.602383, 1573037, 5.703190326690674], [1437001293.610337, 1583190, 5.468636512756348], [1437001773.618199, 1593341, 5.610755920410156], [1437002253.572966, 1603497, 5.4396867752075195], [1437002733.67994, 1613657, 5.7537946701049805], [1437003213.583266, 1623809, 5.7613725662231445], [1437003693.639943, 1633966, 5.439754009246826], [1437004173.568287, 1644113, 5.4889116287231445], [1437004653.610772, 1654268, 5.39843225479126], [1437005133.663045, 1664424, 5.576738357543945], [1437005613.580984, 1674567, 5.662004470825195], [1437006093.601019, 1684715, 5.3926777839660645], [1437006573.625314, 1694857, 5.464866638183594], [1437007053.584514, 1704999, 5.40261173248291], [1437007533.719303, 1715150, 5.23733377456665], [1437008013.604962, 1725282, 5.448479652404785], [1437008493.655091, 1735432, 5.684703826904297], [1437008973.640165, 1745584, 5.400024890899658], [1437009453.715067, 1755742, 5.378822326660156], [1437009933.765712, 1765896, 5.45297384262085], [1437010413.632128, 1776052, 5.248030185699463], [1437010893.66766, 1786195, 5.3377580642700195], [1437011373.636164, 1796346, 5.292956352233887], [1437011853.631224, 1806481, 5.438100814819336], [1437012333.706205, 1816617, 5.148743629455566], [1437012813.61987, 1826754, 5.319127559661865], [1437013293.479904, 1836883, 5.1646199226379395], [1437013773.604574, 1847029, 5.494720458984375], [1437014253.618884, 1857175, 5.17764949798584], [1437014733.756419, 1867312, 5.14331579208374], [1437015213.638607, 1877459, 5.309914588928223], [1437015693.625763, 1887608, 5.542352676391602], [1437016173.63194, 1897759, 5.075393199920654], [1437016653.609074, 1907909, 5.249225616455078], [1437017133.717601, 1918074, 5.392384052276611], [1437017613.716011, 1928220, 5.38590669631958], [1437018093.626005, 1938377, 5.229607105255127], [1437018573.626522, 1948523, 5.287610054016113], [1437019053.648174, 1958678, 5.2798333168029785], [1437019533.803011, 1968831, 5.151246070861816], [1437020013.667751, 1978978, 5.118294715881348], [1437020493.659028, 1989133, 5.327050685882568], [1437020973.657346, 1999287, 5.174264430999756], [1437021453.650634, 2009437, 5.1660661697387695], [1437021933.848661, 2019588, 5.089689254760742], [1437022413.674963, 2029736, 5.06661319732666], [1437022893.69086, 2039894, 5.031608581542969], [1437023373.68883, 2050054, 4.874476432800293], [1437023853.686116, 2060205, 5.107512474060059], [1437024333.763876, 2070362, 5.135380268096924], [1437024813.707845, 2080507, 5.087984561920166], [1437025293.483294, 2090645, 5.240448474884033], [1437025773.695712, 2100793, 4.930302619934082], [1437026253.672994, 2110943, 4.914392471313477], [1437026733.780775, 2121094, 5.182378768920898], [1437027213.617849, 2131235, 4.93843412399292], [1437027693.694451, 2141382, 4.924433708190918], [1437028173.68596, 2151537, 4.957921028137207], [1437028653.584833, 2161685, 5.040386199951172], [1437029133.792483, 2171839, 5.01956033706665], [1437029613.661672, 2181977, 4.987490177154541], [1437030093.641009, 2192118, 4.960195064544678], [1437030573.656274, 2202268, 5.0094523429870605], [1437031053.643631, 2212416, 4.83445930480957], [1437031533.777478, 2222583, 4.922268390655518], [1437032013.704008, 2232736, 5.113382339477539], [1437032493.638393, 2242882, 4.881488800048828], [1437032973.684986, 2253041, 4.953296661376953], [1437033453.699562, 2263183, 4.865671157836914], [1437033933.918074, 2273320, 4.829331874847412], [1437034413.596351, 2283443, 4.777036190032959], [1437034893.640496, 2293579, 4.864566326141357], [1437035373.637761, 2303701, 4.988693714141846], [1437035853.669947, 2313823, 5.016432285308838], [1437036333.78905, 2323961, 4.651939868927002], [1437036813.699727, 2334089, 4.767807960510254], [1437037293.662592, 2344235, 4.628738880157471], [1437037773.66716, 2354364, 4.929834842681885], [1437038253.603687, 2364507, 4.739555835723877], [1437038733.78864, 2374644, 4.821824073791504], [1437039213.641799, 2384782, 4.853730201721191], [1437039693.687078, 2394923, 4.581423759460449], [1437040173.635717, 2405058, 4.452754497528076], [1437040653.673331, 2415194, 4.837629318237305], [1437041133.764768, 2425322, 4.752482891082764], [1437041613.629279, 2435449, 4.730231761932373], [1437042093.703985, 2445575, 4.5618896484375], [1437042573.496029, 2455712, 4.673112869262695], [1437043053.686022, 2465844, 4.565918922424316], [1437043533.731929, 2475974, 4.7191481590271], [1437044013.636245, 2486095, 4.589008331298828], [1437044493.69923, 2496238, 4.599475383758545], [1437044973.652155, 2506373, 4.544175624847412], [1437045453.691467, 2516497, 4.4221673011779785], [1437045933.935804, 2526637, 4.44448709487915], [1437046413.635583, 2536770, 4.647110939025879], [1437046893.626337, 2546896, 4.768988609313965], [1437047373.67437, 2557029, 4.5318827629089355], [1437047853.652939, 2567169, 4.501277923583984], [1437048333.778436, 2577306, 4.6167216300964355], [1437048813.654248, 2587433, 4.66096305847168], [1437049293.610609, 2597552, 4.529193878173828], [1437049773.646573, 2607690, 4.455351829528809], [1437050253.667925, 2617808, 4.51211404800415], [1437050733.735291, 2627933, 4.803231716156006], [1437051213.620222, 2638053, 4.645476341247559], [1437051693.601978, 2648171, 4.419768810272217], [1437052173.634985, 2658299, 4.48175048828125], [1437052653.687176, 2668425, 4.397725582122803], [1437053133.762819, 2678556, 4.188413619995117], [1437053613.643698, 2688671, 4.291479110717773], [1437054093.673047, 2698804, 4.321218013763428], [1437054573.667371, 2708956, 4.311710834503174], [1437055053.650441, 2719087, 4.481810092926025], [1437055533.778469, 2729219, 4.452049255371094], [1437056013.694082, 2739343, 4.455989360809326], [1437056493.674871, 2749458, 4.415104866027832], [1437056973.700234, 2759575, 4.259828567504883], [1437057453.666129, 2769697, 4.510563373565674], [1437057933.848506, 2779821, 4.221935272216797], [1437058413.643799, 2789941, 4.437899112701416], [1437058893.715386, 2800076, 4.302872657775879], [1437059373.62596, 2810207, 4.228428363800049], [1437059853.650848, 2820334, 4.220061779022217], [1437060333.792248, 2830465, 4.138088703155518], [1437060813.682955, 2840600, 4.2196125984191895], [1437061293.681795, 2850745, 4.1594085693359375], [1437061773.691182, 2860880, 4.179514408111572], [1437062253.662987, 2871013, 4.202476978302002], [1437062733.760419, 2881153, 4.282044887542725], [1437063213.651969, 2891278, 4.200533866882324], [1437063693.723523, 2901406, 4.263350486755371], [1437064173.68663, 2911533, 4.378939628601074], [1437064653.547643, 2921667, 4.202810287475586], [1437065133.62645, 2931813, 4.193121910095215], [1437065613.566569, 2941947, 4.132870197296143], [1437066093.537804, 2952102, 4.35767936706543], [1437066573.529332, 2962243, 4.211732864379883], [1437067053.520098, 2972400, 4.020431041717529], [1437067533.605733, 2982561, 4.342063903808594], [1437068013.535467, 2992698, 4.197565078735352], [1437068493.559976, 3002839, 3.8806259632110596], [1437068973.558743, 3012983, 3.871702194213867], [1437069453.562661, 3023116, 4.064865589141846], [1437069933.627071, 3033256, 3.817744731903076], [1437070413.574131, 3043386, 4.106888294219971], [1437070893.658803, 3053528, 4.235474586486816], [1437071373.638711, 3063659, 4.127055644989014], [1437071853.621384, 3073794, 4.176018238067627], [1437072333.665269, 3083926, 4.048959732055664], [1437072813.584388, 3094040, 4.178991794586182], [1437073293.569178, 3104172, 3.8385396003723145]] \ No newline at end of file
diff --git a/tensorflow/tensorboard/components/tf-event-dashboard/demo/data/beta/d1.json b/tensorflow/tensorboard/components/tf-event-dashboard/demo/data/beta/d1.json
new file mode 100644
index 0000000000..27ff64e5dd
--- /dev/null
+++ b/tensorflow/tensorboard/components/tf-event-dashboard/demo/data/beta/d1.json
@@ -0,0 +1 @@
+[[1436925978.257845, 7, 1.009283951483666897], [1436926413.945391, 1476, 0.932567862421274185], [1436926893.945037, 6006, 0.02773338556289673], [1436927373.995472, 13786, 0.021291319280862808], [1436927853.989794, 23650, 0.515582754276692867], [1436928334.132361, 33755, 0.011689444072544575], [1436928813.973288, 43941, 0.009183925576508045], [1436929293.975949, 54146, 0.007850822061300278], [1436929773.992781, 64316, 0.007189035415649414], [1436930253.997415, 74465, 0.007230754010379314], [1436930734.203004, 84611, 0.007685001939535141], [1436931214.03644, 94700, 0.008264732547104359], [1436931694.094564, 104766, 0.008946491405367851], [1436932174.114955, 114817, 0.00966302677989006], [1436932654.161382, 124880, 0.010994276031851768], [1436933133.960214, 134977, 0.01196141354739666], [1436933614.044337, 145062, 0.012673594057559967], [1436934094.166206, 155169, 0.013639944605529308], [1436934574.106036, 165284, 0.014305333606898785], [1436935054.150647, 175402, 0.014946178533136845], [1436935533.819562, 185538, 0.015736915171146393], [1436936013.710422, 195712, 0.01633097417652607], [1436936493.609025, 205906, 0.01669587567448616], [1436936973.683892, 216099, 0.017459288239479065], [1436937454.138383, 226331, 0.018532060086727142], [1436937933.838475, 236532, 0.01949254982173443], [1436938413.89688, 246724, 0.01951725408434868], [1436938894.018652, 256925, 0.019763393327593803], [1436939373.69067, 267137, 0.02008610963821411], [1436939853.673692, 277369, 0.021090799942612648], [1436940333.651346, 287620, 0.021408839151263237], [1436940813.599579, 297848, 0.021988894790410995], [1436941293.596313, 308088, 0.02236073836684227], [1436941773.659172, 318362, 0.022547174245119095], [1436942253.648479, 328621, 0.02303086407482624], [1436942733.752284, 338892, 0.023787079378962517], [1436943213.621881, 349144, 0.024007514119148254], [1436943693.698743, 359399, 0.02414763905107975], [1436944173.578463, 369649, 0.024576496332883835], [1436944653.692217, 379912, 0.02469169721007347], [1436945133.677298, 390180, 0.024951916188001633], [1436945613.572411, 400445, 0.025548970326781273], [1436946093.56123, 410703, 0.025769377127289772], [1436946573.542364, 420958, 0.02602097950875759], [1436947053.616578, 431216, 0.026028109714388847], [1436947533.636973, 441483, 0.026348495855927467], [1436948013.541574, 451751, 0.02621930092573166], [1436948493.560223, 462015, 0.02671053633093834], [1436948973.512541, 472260, 0.0272178016602993], [1436949453.550055, 482483, 0.02734796144068241], [1436949933.828011, 492731, 0.027217809110879898], [1436950413.603177, 502957, 0.027318621054291725], [1436950893.563009, 513185, 0.027304155752062798], [1436951373.620887, 523410, 0.027759933844208717], [1436951853.61941, 533618, 0.028056234121322632], [1436952333.694447, 543828, 0.028620803728699684], [1436952813.621004, 554042, 0.028957637026906013], [1436953293.588156, 564251, 0.029187509790062904], [1436953773.599734, 574464, 0.028960268944501877], [1436954253.621309, 584672, 0.02891424670815468], [1436954733.738119, 594882, 0.029211293905973434], [1436955213.56617, 605091, 0.029444213956594467], [1436955693.585366, 615296, 0.02974688820540905], [1436956173.626395, 625501, 0.03026159666478634], [1436956653.601937, 635705, 0.03039497137069702], [1436957133.665878, 645915, 0.03041839227080345], [1436957613.584762, 656116, 0.030588043853640556], [1436958093.549783, 666331, 0.030284974724054337], [1436958573.646778, 676543, 0.030354496091604233], [1436959053.585655, 686750, 0.030551007017493248], [1436959533.679696, 696961, 0.03068561479449272], [1436960013.633292, 707173, 0.030921893194317818], [1436960493.578778, 717383, 0.031080031767487526], [1436960973.596715, 727598, 0.030773505568504333], [1436961453.625644, 737818, 0.03084484674036503], [1436961933.740339, 748040, 0.03110458515584469], [1436962413.573845, 758252, 0.03114113211631775], [1436962893.610678, 768470, 0.03101053647696972], [1436963373.642878, 778674, 0.03110116347670555], [1436963853.558388, 788877, 0.031342316418886185], [1436964333.658419, 799099, 0.03130127117037773], [1436964813.573319, 809289, 0.031288161873817444], [1436965293.542098, 819484, 0.031435444951057434], [1436965773.545453, 829687, 0.03166936710476875], [1436966253.586517, 839901, 0.03169429674744606], [1436966733.639348, 850120, 0.03191458433866501], [1436967213.697288, 860330, 0.03205746412277222], [1436967693.617172, 870539, 0.03206293657422066], [1436968173.593885, 880748, 0.031957853585481644], [1436968653.560836, 890955, 0.0316658616065979], [1436969133.676337, 901164, 0.031929533928632736], [1436969613.506638, 911358, 0.03174331784248352], [1436970093.595964, 921560, 0.03157960623502731], [1436970573.541227, 931756, 0.03176721930503845], [1436971053.624316, 941945, 0.031810544431209564], [1436971533.655543, 952138, 0.031946416944265366], [1436972013.604738, 962349, 0.03205405920743942], [1436972493.613199, 972551, 0.031924981623888016], [1436972973.501155, 982746, 0.03199697285890579], [1436973453.64842, 992945, 0.03204970061779022], [1436973933.689516, 1003147, 0.032020214945077896], [1436974413.577769, 1013350, 0.03207497298717499], [1436974893.542281, 1023545, 0.03221454098820686], [1436975373.638453, 1033759, 0.032191887497901917], [1436975853.524388, 1043955, 0.03240729123353958], [1436976333.625792, 1054148, 0.032219529151916504], [1436976813.610661, 1064342, 0.03200426697731018], [1436977293.601581, 1074539, 0.03198647499084473], [1436977773.575627, 1084733, 0.0320645235478878], [1436978253.564972, 1094914, 0.0322980061173439], [1436978733.673144, 1105109, 0.032482605427503586], [1436979213.540585, 1115293, 0.032628435641527176], [1436979693.699591, 1125483, 0.032744552940130234], [1436980173.613012, 1135670, 0.03268158435821533], [1436980653.575769, 1145862, 0.0324023962020874], [1436981133.719264, 1156045, 0.03237328305840492], [1436981613.563551, 1166236, 0.03202575817704201], [1436982093.553233, 1176436, 0.03216284513473511], [1436982573.577846, 1186636, 0.03232415020465851], [1436983053.605749, 1196837, 0.0324099175632], [1436983533.684994, 1207025, 0.03245137259364128], [1436984013.561492, 1217233, 0.032246463000774384], [1436984493.629873, 1227437, 0.032042667269706726], [1436984973.606714, 1237643, 0.0318642184138298], [1436985453.690084, 1247835, 0.03191140666604042], [1436985933.711388, 1257951, 0.032287366688251495], [1436986413.598807, 1268125, 0.03226638585329056], [1436986893.631797, 1278290, 0.03252791240811348], [1436987373.596962, 1288473, 0.03241675719618797], [1436987853.555549, 1298650, 0.032103829085826874], [1436988333.722032, 1308841, 0.031904906034469604], [1436988813.55697, 1319018, 0.03179024159908295], [1436989293.756905, 1329221, 0.03168707340955734], [1436989773.665141, 1339417, 0.03160175681114197], [1436990253.768302, 1349610, 0.03161788731813431], [1436990733.708919, 1359759, 0.031772397458553314], [1436991213.663033, 1369914, 0.031758904457092285], [1436991693.730925, 1380074, 0.031629469245672226], [1436992173.751791, 1390224, 0.03154703974723816], [1436992653.758682, 1400383, 0.031527940183877945], [1436993133.835604, 1410542, 0.03169580549001694], [1436993613.674655, 1420684, 0.03182605654001236], [1436994093.747454, 1430832, 0.03185024857521057], [1436994573.768973, 1440986, 0.03199737146496773], [1436995053.666661, 1451174, 0.03156095743179321], [1436995533.83439, 1461345, 0.03150693327188492], [1436996013.556996, 1471495, 0.031496383249759674], [1436996493.635477, 1481663, 0.0313432440161705], [1436996973.668684, 1491822, 0.031145794317126274], [1436997453.59326, 1501979, 0.03106667660176754], [1436997933.774019, 1512139, 0.03143244981765747], [1436998413.575162, 1522290, 0.03142988309264183], [1436998893.640468, 1532431, 0.03132546320557594], [1436999373.551661, 1542579, 0.03125471621751785], [1436999853.57906, 1552734, 0.03098788857460022], [1437000333.680409, 1562888, 0.0308846328407526], [1437000813.602383, 1573037, 0.03082612156867981], [1437001293.610337, 1583190, 0.030793681740760803], [1437001773.618199, 1593341, 0.03087364137172699], [1437002253.572966, 1603497, 0.030839646235108376], [1437002733.67994, 1613657, 0.030705047771334648], [1437003213.583266, 1623809, 0.03071814589202404], [1437003693.639943, 1633966, 0.0304812490940094], [1437004173.568287, 1644113, 0.03030412085354328], [1437004653.610772, 1654268, 0.03032425045967102], [1437005133.663045, 1664424, 0.030430471524596214], [1437005613.580984, 1674567, 0.03036225587129593], [1437006093.601019, 1684715, 0.03056645393371582], [1437006573.625314, 1694857, 0.03043070062994957], [1437007053.584514, 1704999, 0.030224520713090897], [1437007533.719303, 1715150, 0.03024231642484665], [1437008013.604962, 1725282, 0.03009769506752491], [1437008493.655091, 1735432, 0.030214866623282433], [1437008973.640165, 1745584, 0.030181538313627243], [1437009453.715067, 1755742, 0.03017231822013855], [1437009933.765712, 1765896, 0.030141284689307213], [1437010413.632128, 1776052, 0.030052203685045242], [1437010893.66766, 1786195, 0.030078601092100143], [1437011373.636164, 1796346, 0.029969291761517525], [1437011853.631224, 1806481, 0.02999536693096161], [1437012333.706205, 1816617, 0.030100464820861816], [1437012813.61987, 1826754, 0.03008824959397316], [1437013293.479904, 1836883, 0.029995709657669067], [1437013773.604574, 1847029, 0.02995096519589424], [1437014253.618884, 1857175, 0.02980179339647293], [1437014733.756419, 1867312, 0.029607007279992104], [1437015213.638607, 1877459, 0.02952035330235958], [1437015693.625763, 1887608, 0.02937002293765545], [1437016173.63194, 1897759, 0.029285306110978127], [1437016653.609074, 1907909, 0.029194746166467667], [1437017133.717601, 1918074, 0.029153630137443542], [1437017613.716011, 1928220, 0.029063496738672256], [1437018093.626005, 1938377, 0.028990253806114197], [1437018573.626522, 1948523, 0.0290801040828228], [1437019053.648174, 1958678, 0.029026925563812256], [1437019533.803011, 1968831, 0.029071522876620293], [1437020013.667751, 1978978, 0.02911040186882019], [1437020493.659028, 1989133, 0.02908971533179283], [1437020973.657346, 1999287, 0.028982823714613914], [1437021453.650634, 2009437, 0.028793631121516228], [1437021933.848661, 2019588, 0.02868799678981304], [1437022413.674963, 2029736, 0.028585929423570633], [1437022893.69086, 2039894, 0.028488371521234512], [1437023373.68883, 2050054, 0.028293771669268608], [1437023853.686116, 2060205, 0.028227869421243668], [1437024333.763876, 2070362, 0.0280953086912632], [1437024813.707845, 2080507, 0.02794187143445015], [1437025293.483294, 2090645, 0.0278786551207304], [1437025773.695712, 2100793, 0.02786232903599739], [1437026253.672994, 2110943, 0.02783624827861786], [1437026733.780775, 2121094, 0.027756746858358383], [1437027213.617849, 2131235, 0.027644069865345955], [1437027693.694451, 2141382, 0.02752004750072956], [1437028173.68596, 2151537, 0.0274327602237463], [1437028653.584833, 2161685, 0.027434347197413445], [1437029133.792483, 2171839, 0.02731819450855255], [1437029613.661672, 2181977, 0.027138520032167435], [1437030093.641009, 2192118, 0.027088932693004608], [1437030573.656274, 2202268, 0.02713087759912014], [1437031053.643631, 2212416, 0.027159670367836952], [1437031533.777478, 2222583, 0.027089878916740417], [1437032013.704008, 2232736, 0.026989545673131943], [1437032493.638393, 2242882, 0.02692277729511261], [1437032973.684986, 2253041, 0.026783647015690804], [1437033453.699562, 2263183, 0.026735099032521248], [1437033933.918074, 2273320, 0.02665248140692711], [1437034413.596351, 2283443, 0.02659791149199009], [1437034893.640496, 2293579, 0.026540575549006462], [1437035373.637761, 2303701, 0.02647154964506626], [1437035853.669947, 2313823, 0.02645135670900345], [1437036333.78905, 2323961, 0.026429900899529457], [1437036813.699727, 2334089, 0.026324935257434845], [1437037293.662592, 2344235, 0.026287639513611794], [1437037773.66716, 2354364, 0.02626391313970089], [1437038253.603687, 2364507, 0.026225272566080093], [1437038733.78864, 2374644, 0.026248561218380928], [1437039213.641799, 2384782, 0.026243599131703377], [1437039693.687078, 2394923, 0.026255469769239426], [1437040173.635717, 2405058, 0.026186810806393623], [1437040653.673331, 2415194, 0.02606010064482689], [1437041133.764768, 2425322, 0.026031550019979477], [1437041613.629279, 2435449, 0.02595149166882038], [1437042093.703985, 2445575, 0.025885630398988724], [1437042573.496029, 2455712, 0.025858554989099503], [1437043053.686022, 2465844, 0.0257696695625782], [1437043533.731929, 2475974, 0.02574242651462555], [1437044013.636245, 2486095, 0.025741754099726677], [1437044493.69923, 2496238, 0.02561314031481743], [1437044973.652155, 2506373, 0.02550213597714901], [1437045453.691467, 2516497, 0.025422468781471252], [1437045933.935804, 2526637, 0.025300107896327972], [1437046413.635583, 2536770, 0.02533198893070221], [1437046893.626337, 2546896, 0.025261884555220604], [1437047373.67437, 2557029, 0.025176096707582474], [1437047853.652939, 2567169, 0.025054505094885826], [1437048333.778436, 2577306, 0.024978378787636757], [1437048813.654248, 2587433, 0.024952610954642296], [1437049293.610609, 2597552, 0.02484666183590889], [1437049773.646573, 2607690, 0.024764036759734154], [1437050253.667925, 2617808, 0.024689028039574623], [1437050733.735291, 2627933, 0.024599267169833183], [1437051213.620222, 2638053, 0.024585112929344177], [1437051693.601978, 2648171, 0.024474989622831345], [1437052173.634985, 2658299, 0.024343013763427734], [1437052653.687176, 2668425, 0.024294432252645493], [1437053133.762819, 2678556, 0.024164099246263504], [1437053613.643698, 2688671, 0.024035055190324783], [1437054093.673047, 2698804, 0.024000361561775208], [1437054573.667371, 2708956, 0.023914529010653496], [1437055053.650441, 2719087, 0.023955287411808968], [1437055533.778469, 2729219, 0.023859601467847824], [1437056013.694082, 2739343, 0.023759596049785614], [1437056493.674871, 2749458, 0.02367720566689968], [1437056973.700234, 2759575, 0.023645451292395592], [1437057453.666129, 2769697, 0.023565715178847313], [1437057933.848506, 2779821, 0.023514313623309135], [1437058413.643799, 2789941, 0.023489659652113914], [1437058893.715386, 2800076, 0.023429812863469124], [1437059373.62596, 2810207, 0.023344023153185844], [1437059853.650848, 2820334, 0.023226741701364517], [1437060333.792248, 2830465, 0.023134270682930946], [1437060813.682955, 2840600, 0.02305578999221325], [1437061293.681795, 2850745, 0.02298513427376747], [1437061773.691182, 2860880, 0.022913720458745956], [1437062253.662987, 2871013, 0.022864067927002907], [1437062733.760419, 2881153, 0.02278953418135643], [1437063213.651969, 2891278, 0.02276339940726757], [1437063693.723523, 2901406, 0.022675812244415283], [1437064173.68663, 2911533, 0.022622767835855484], [1437064653.547643, 2921667, 0.02255198359489441], [1437065133.62645, 2931813, 0.022431762889027596], [1437065613.566569, 2941947, 0.022368362173438072], [1437066093.537804, 2952102, 0.022323831915855408], [1437066573.529332, 2962243, 0.02226843684911728], [1437067053.520098, 2972400, 0.022210361436009407], [1437067533.605733, 2982561, 0.022118505090475082], [1437068013.535467, 2992698, 0.022013112902641296], [1437068493.559976, 3002839, 0.02197197824716568], [1437068973.558743, 3012983, 0.02191166952252388], [1437069453.562661, 3023116, 0.021851476281881332], [1437069933.627071, 3033256, 0.021762533113360405], [1437070413.574131, 3043386, 0.021733969449996948], [1437070893.658803, 3053528, 0.021669406443834305], [1437071373.638711, 3063659, 0.02159426547586918], [1437071853.621384, 3073794, 0.02153114229440689], [1437072333.665269, 3083926, 0.021499117836356163], [1437072813.584388, 3094040, 0.021457014605402946], [1437073293.569178, 3104172, 0.021365314722061157]]
diff --git a/tensorflow/tensorboard/components/tf-event-dashboard/demo/data/beta/d2.json b/tensorflow/tensorboard/components/tf-event-dashboard/demo/data/beta/d2.json
new file mode 100644
index 0000000000..fb5a18d53a
--- /dev/null
+++ b/tensorflow/tensorboard/components/tf-event-dashboard/demo/data/beta/d2.json
@@ -0,0 +1 @@
+[[1436925978.257845, 7, 0.01034154836088419], [1436926413.945391, 1476, 0.03646053001284599], [1436926893.945037, 6006, 0.031110260635614395], [1436927373.995472, 13786, 0.024214591830968857], [1436927853.989794, 23650, 0.01820789836347103], [1436928334.132361, 33755, 0.01442798599600792], [1436928813.973288, 43941, 0.012150184251368046], [1436929293.975949, 54146, 0.011141776107251644], [1436929773.992781, 64316, 0.010859030298888683], [1436930253.997415, 74465, 0.011160558089613914], [1436930734.203004, 84611, 0.011997541412711143], [1436931214.03644, 94700, 0.01278648804873228], [1436931694.094564, 104766, 0.014073861762881279], [1436932174.114955, 114817, 0.01523376815021038], [1436932654.161382, 124880, 0.016527879983186722], [1436933133.960214, 134977, 0.01782997138798237], [1436933614.044337, 145062, 0.019055265933275223], [1436934094.166206, 155169, 0.02028629370033741], [1436934574.106036, 165284, 0.02116803079843521], [1436935054.150647, 175402, 0.022192901000380516], [1436935533.819562, 185538, 0.022869590669870377], [1436936013.710422, 195712, 0.023398980498313904], [1436936493.609025, 205906, 0.02443159930408001], [1436936973.683892, 216099, 0.025154944509267807], [1436937454.138383, 226331, 0.025802481919527054], [1436937933.838475, 236532, 0.027000702917575836], [1436938413.89688, 246724, 0.02752412110567093], [1436938894.018652, 256925, 0.0278119258582592], [1436939373.69067, 267137, 0.027698883786797523], [1436939853.673692, 277369, 0.028744956478476524], [1436940333.651346, 287620, 0.029281964525580406], [1436940813.599579, 297848, 0.03002205118536949], [1436941293.596313, 308088, 0.030467400327324867], [1436941773.659172, 318362, 0.03132195770740509], [1436942253.648479, 328621, 0.031431782990694046], [1436942733.752284, 338892, 0.03147844970226288], [1436943213.621881, 349144, 0.032013144344091415], [1436943693.698743, 359399, 0.03241390734910965], [1436944173.578463, 369649, 0.03261363133788109], [1436944653.692217, 379912, 0.033306822180747986], [1436945133.677298, 390180, 0.03390969708561897], [1436945613.572411, 400445, 0.03396527096629143], [1436946093.56123, 410703, 0.03388286381959915], [1436946573.542364, 420958, 0.03399669751524925], [1436947053.616578, 431216, 0.03394070267677307], [1436947533.636973, 441483, 0.03419327735900879], [1436948013.541574, 451751, 0.0342416949570179], [1436948493.560223, 462015, 0.034808479249477386], [1436948973.512541, 472260, 0.03552314639091492], [1436949453.550055, 482483, 0.036012329161167145], [1436949933.828011, 492731, 0.035826291888952255], [1436950413.603177, 502957, 0.03600003197789192], [1436950893.563009, 513185, 0.03563224524259567], [1436951373.620887, 523410, 0.03584449738264084], [1436951853.61941, 533618, 0.03587675839662552], [1436952333.694447, 543828, 0.036698292940855026], [1436952813.621004, 554042, 0.03698749095201492], [1436953293.588156, 564251, 0.03712376952171326], [1436953773.599734, 574464, 0.03729996830224991], [1436954253.621309, 584672, 0.03730553761124611], [1436954733.738119, 594882, 0.037479378283023834], [1436955213.56617, 605091, 0.03754287213087082], [1436955693.585366, 615296, 0.0377657376229763], [1436956173.626395, 625501, 0.038117796182632446], [1436956653.601937, 635705, 0.03822959586977959], [1436957133.665878, 645915, 0.03776161000132561], [1436957613.584762, 656116, 0.03816362842917442], [1436958093.549783, 666331, 0.03853853791952133], [1436958573.646778, 676543, 0.03826189786195755], [1436959053.585655, 686750, 0.0381099209189415], [1436959533.679696, 696961, 0.03844142332673073], [1436960013.633292, 707173, 0.03868117928504944], [1436960493.578778, 717383, 0.0390009842813015], [1436960973.596715, 727598, 0.0383562371134758], [1436961453.625644, 737818, 0.0382055900990963], [1436961933.740339, 748040, 0.03806299716234207], [1436962413.573845, 758252, 0.03807120397686958], [1436962893.610678, 768470, 0.03795558586716652], [1436963373.642878, 778674, 0.038018494844436646], [1436963853.558388, 788877, 0.038447774946689606], [1436964333.658419, 799099, 0.03842216357588768], [1436964813.573319, 809289, 0.03840547427535057], [1436965293.542098, 819484, 0.038492728024721146], [1436965773.545453, 829687, 0.0387515053153038], [1436966253.586517, 839901, 0.03869732841849327], [1436966733.639348, 850120, 0.03907460719347], [1436967213.697288, 860330, 0.0395859070122242], [1436967693.617172, 870539, 0.039280518889427185], [1436968173.593885, 880748, 0.0392826572060585], [1436968653.560836, 890955, 0.03899630531668663], [1436969133.676337, 901164, 0.03888440132141113], [1436969613.506638, 911358, 0.038790252059698105], [1436970093.595964, 921560, 0.03851785138249397], [1436970573.541227, 931756, 0.03913348540663719], [1436971053.624316, 941945, 0.038978900760412216], [1436971533.655543, 952138, 0.03925086557865143], [1436972013.604738, 962349, 0.039124101400375366], [1436972493.613199, 972551, 0.0390220545232296], [1436972973.501155, 982746, 0.039025235921144485], [1436973453.64842, 992945, 0.03877083212137222], [1436973933.689516, 1003147, 0.03902769833803177], [1436974413.577769, 1013350, 0.038719139993190765], [1436974893.542281, 1023545, 0.03872331231832504], [1436975373.638453, 1033759, 0.03927341103553772], [1436975853.524388, 1043955, 0.03930830955505371], [1436976333.625792, 1054148, 0.039153918623924255], [1436976813.610661, 1064342, 0.03932590410113335], [1436977293.601581, 1074539, 0.03922765702009201], [1436977773.575627, 1084733, 0.039390794932842255], [1436978253.564972, 1094914, 0.03935663774609566], [1436978733.673144, 1105109, 0.03939087316393852], [1436979213.540585, 1115293, 0.039371199905872345], [1436979693.699591, 1125483, 0.03982992097735405], [1436980173.613012, 1135670, 0.03941287472844124], [1436980653.575769, 1145862, 0.03933672979474068], [1436981133.719264, 1156045, 0.03919614478945732], [1436981613.563551, 1166236, 0.03906407952308655], [1436982093.553233, 1176436, 0.038837045431137085], [1436982573.577846, 1186636, 0.039009105414152145], [1436983053.605749, 1196837, 0.039010051637887955], [1436983533.684994, 1207025, 0.03891472890973091], [1436984013.561492, 1217233, 0.038610219955444336], [1436984493.629873, 1227437, 0.03866511583328247], [1436984973.606714, 1237643, 0.03865685313940048], [1436985453.690084, 1247835, 0.038945719599723816], [1436985933.711388, 1257951, 0.03925580158829689], [1436986413.598807, 1268125, 0.039332933723926544], [1436986893.631797, 1278290, 0.03918297216296196], [1436987373.596962, 1288473, 0.03883613646030426], [1436987853.555549, 1298650, 0.038776978850364685], [1436988333.722032, 1308841, 0.03888171166181564], [1436988813.55697, 1319018, 0.038825325667858124], [1436989293.756905, 1329221, 0.03864298388361931], [1436989773.665141, 1339417, 0.03865634649991989], [1436990253.768302, 1349610, 0.03898858651518822], [1436990733.708919, 1359759, 0.03906260430812836], [1436991213.663033, 1369914, 0.03911694139242172], [1436991693.730925, 1380074, 0.03875250369310379], [1436992173.751791, 1390224, 0.03882621228694916], [1436992653.758682, 1400383, 0.03877855837345123], [1436993133.835604, 1410542, 0.03870398923754692], [1436993613.674655, 1420684, 0.03887751325964928], [1436994093.747454, 1430832, 0.03915301710367203], [1436994573.768973, 1440986, 0.03938450664281845], [1436995053.666661, 1451174, 0.03919720649719238], [1436995533.83439, 1461345, 0.038862887769937515], [1436996013.556996, 1471495, 0.03901274502277374], [1436996493.635477, 1481663, 0.0388539656996727], [1436996973.668684, 1491822, 0.038732752203941345], [1436997453.59326, 1501979, 0.03879735246300697], [1436997933.774019, 1512139, 0.038524042814970016], [1436998413.575162, 1522290, 0.03869651257991791], [1436998893.640468, 1532431, 0.0383637398481369], [1436999373.551661, 1542579, 0.038300249725580215], [1436999853.57906, 1552734, 0.03799160569906235], [1437000333.680409, 1562888, 0.03759683296084404], [1437000813.602383, 1573037, 0.037678662687540054], [1437001293.610337, 1583190, 0.037575822323560715], [1437001773.618199, 1593341, 0.0376887246966362], [1437002253.572966, 1603497, 0.037922415882349014], [1437002733.67994, 1613657, 0.03766244649887085], [1437003213.583266, 1623809, 0.03754705190658569], [1437003693.639943, 1633966, 0.03738937899470329], [1437004173.568287, 1644113, 0.037347543984651566], [1437004653.610772, 1654268, 0.037374842911958694], [1437005133.663045, 1664424, 0.037443988025188446], [1437005613.580984, 1674567, 0.037457264959812164], [1437006093.601019, 1684715, 0.037874478846788406], [1437006573.625314, 1694857, 0.037644676864147186], [1437007053.584514, 1704999, 0.03743988648056984], [1437007533.719303, 1715150, 0.03739031031727791], [1437008013.604962, 1725282, 0.037301771342754364], [1437008493.655091, 1735432, 0.03735104575753212], [1437008973.640165, 1745584, 0.037282250821590424], [1437009453.715067, 1755742, 0.03729768097400665], [1437009933.765712, 1765896, 0.03717759624123573], [1437010413.632128, 1776052, 0.03691410645842552], [1437010893.66766, 1786195, 0.036807890981435776], [1437011373.636164, 1796346, 0.036659423261880875], [1437011853.631224, 1806481, 0.03682238608598709], [1437012333.706205, 1816617, 0.036776404827833176], [1437012813.61987, 1826754, 0.036672260612249374], [1437013293.479904, 1836883, 0.03666841238737106], [1437013773.604574, 1847029, 0.036642514169216156], [1437014253.618884, 1857175, 0.03654393553733826], [1437014733.756419, 1867312, 0.03638240322470665], [1437015213.638607, 1877459, 0.03610989451408386], [1437015693.625763, 1887608, 0.036011870950460434], [1437016173.63194, 1897759, 0.03607400134205818], [1437016653.609074, 1907909, 0.03581620752811432], [1437017133.717601, 1918074, 0.035680998116731644], [1437017613.716011, 1928220, 0.03547567501664162], [1437018093.626005, 1938377, 0.035375215113162994], [1437018573.626522, 1948523, 0.03534447029232979], [1437019053.648174, 1958678, 0.03535373508930206], [1437019533.803011, 1968831, 0.03541970252990723], [1437020013.667751, 1978978, 0.03534942492842674], [1437020493.659028, 1989133, 0.035337116569280624], [1437020973.657346, 1999287, 0.03519223630428314], [1437021453.650634, 2009437, 0.0350094810128212], [1437021933.848661, 2019588, 0.03481736779212952], [1437022413.674963, 2029736, 0.03482922539114952], [1437022893.69086, 2039894, 0.03482965752482414], [1437023373.68883, 2050054, 0.034710027277469635], [1437023853.686116, 2060205, 0.03447446599602699], [1437024333.763876, 2070362, 0.034356746822595596], [1437024813.707845, 2080507, 0.03430519998073578], [1437025293.483294, 2090645, 0.03412580490112305], [1437025773.695712, 2100793, 0.03409077599644661], [1437026253.672994, 2110943, 0.0340830534696579], [1437026733.780775, 2121094, 0.03400549292564392], [1437027213.617849, 2131235, 0.033846043050289154], [1437027693.694451, 2141382, 0.03379584103822708], [1437028173.68596, 2151537, 0.033618565648794174], [1437028653.584833, 2161685, 0.03352222591638565], [1437029133.792483, 2171839, 0.03338197246193886], [1437029613.661672, 2181977, 0.03323192894458771], [1437030093.641009, 2192118, 0.03313163295388222], [1437030573.656274, 2202268, 0.0331595316529274], [1437031053.643631, 2212416, 0.03310840204358101], [1437031533.777478, 2222583, 0.03298124670982361], [1437032013.704008, 2232736, 0.03288085386157036], [1437032493.638393, 2242882, 0.03281677886843681], [1437032973.684986, 2253041, 0.03261971473693848], [1437033453.699562, 2263183, 0.03251069411635399], [1437033933.918074, 2273320, 0.03243493288755417], [1437034413.596351, 2283443, 0.03251812607049942], [1437034893.640496, 2293579, 0.03244208171963692], [1437035373.637761, 2303701, 0.03246922418475151], [1437035853.669947, 2313823, 0.032652080059051514], [1437036333.78905, 2323961, 0.032621122896671295], [1437036813.699727, 2334089, 0.03248974680900574], [1437037293.662592, 2344235, 0.032404426485300064], [1437037773.66716, 2354364, 0.03240393102169037], [1437038253.603687, 2364507, 0.03238365799188614], [1437038733.78864, 2374644, 0.03244389593601227], [1437039213.641799, 2384782, 0.03239350765943527], [1437039693.687078, 2394923, 0.032426562160253525], [1437040173.635717, 2405058, 0.032403264194726944], [1437040653.673331, 2415194, 0.03231978043913841], [1437041133.764768, 2425322, 0.03223187103867531], [1437041613.629279, 2435449, 0.03213196247816086], [1437042093.703985, 2445575, 0.032153598964214325], [1437042573.496029, 2455712, 0.03199320286512375], [1437043053.686022, 2465844, 0.03188605234026909], [1437043533.731929, 2475974, 0.03178738057613373], [1437044013.636245, 2486095, 0.03171614184975624], [1437044493.69923, 2496238, 0.031645938754081726], [1437044973.652155, 2506373, 0.03155189007520676], [1437045453.691467, 2516497, 0.03144536912441254], [1437045933.935804, 2526637, 0.031432293355464935], [1437046413.635583, 2536770, 0.03129834309220314], [1437046893.626337, 2546896, 0.031195342540740967], [1437047373.67437, 2557029, 0.031033318489789963], [1437047853.652939, 2567169, 0.030938012525439262], [1437048333.778436, 2577306, 0.030827201902866364], [1437048813.654248, 2587433, 0.03068169392645359], [1437049293.610609, 2597552, 0.030520914122462273], [1437049773.646573, 2607690, 0.030437452718615532], [1437050253.667925, 2617808, 0.03041636385023594], [1437050733.735291, 2627933, 0.030291059985756874], [1437051213.620222, 2638053, 0.030283397063612938], [1437051693.601978, 2648171, 0.030193043872714043], [1437052173.634985, 2658299, 0.03004123829305172], [1437052653.687176, 2668425, 0.0299222432076931], [1437053133.762819, 2678556, 0.029762346297502518], [1437053613.643698, 2688671, 0.02970775216817856], [1437054093.673047, 2698804, 0.029604140669107437], [1437054573.667371, 2708956, 0.02949359640479088], [1437055053.650441, 2719087, 0.02943229116499424], [1437055533.778469, 2729219, 0.029304414987564087], [1437056013.694082, 2739343, 0.029147598892450333], [1437056493.674871, 2749458, 0.029033908620476723], [1437056973.700234, 2759575, 0.028886595740914345], [1437057453.666129, 2769697, 0.028734514489769936], [1437057933.848506, 2779821, 0.02874554693698883], [1437058413.643799, 2789941, 0.028716085478663445], [1437058893.715386, 2800076, 0.028669510036706924], [1437059373.62596, 2810207, 0.028530430048704147], [1437059853.650848, 2820334, 0.02839958481490612], [1437060333.792248, 2830465, 0.028364405035972595], [1437060813.682955, 2840600, 0.0282796248793602], [1437061293.681795, 2850745, 0.02820495329797268], [1437061773.691182, 2860880, 0.028159918263554573], [1437062253.662987, 2871013, 0.028104742988944054], [1437062733.760419, 2881153, 0.028099438175559044], [1437063213.651969, 2891278, 0.02802356891334057], [1437063693.723523, 2901406, 0.027945902198553085], [1437064173.68663, 2911533, 0.027897505089640617], [1437064653.547643, 2921667, 0.027821676805615425], [1437065133.62645, 2931813, 0.02770490199327469], [1437065613.566569, 2941947, 0.02761264331638813], [1437066093.537804, 2952102, 0.027557073161005974], [1437066573.529332, 2962243, 0.027522796764969826], [1437067053.520098, 2972400, 0.027469975873827934], [1437067533.605733, 2982561, 0.027299631386995316], [1437068013.535467, 2992698, 0.027225365862250328], [1437068493.559976, 3002839, 0.027095869183540344], [1437068973.558743, 3012983, 0.027036350220441818], [1437069453.562661, 3023116, 0.02693818509578705], [1437069933.627071, 3033256, 0.02687198854982853], [1437070413.574131, 3043386, 0.02687297947704792], [1437070893.658803, 3053528, 0.026770537719130516], [1437071373.638711, 3063659, 0.026667704805731773], [1437071853.621384, 3073794, 0.026571234688162804], [1437072333.665269, 3083926, 0.026447603479027748], [1437072813.584388, 3094040, 0.026389220729470253], [1437073293.569178, 3104172, 0.026299258694052696]] \ No newline at end of file
diff --git a/tensorflow/tensorboard/components/tf-event-dashboard/demo/data/beta/d3.json b/tensorflow/tensorboard/components/tf-event-dashboard/demo/data/beta/d3.json
new file mode 100644
index 0000000000..e489130ea7
--- /dev/null
+++ b/tensorflow/tensorboard/components/tf-event-dashboard/demo/data/beta/d3.json
@@ -0,0 +1 @@
+[[1436925978.257845, 7, 0.03425809368491173], [1436926413.945391, 1476, 0.032557398080825806], [1436926893.945037, 6006, 0.0277252234518528], [1436927373.995472, 13786, 0.021282576024532318], [1436927853.989794, 23650, 0.015578101389110088], [1436928334.132361, 33755, 0.011687012389302254], [1436928813.973288, 43941, 0.00918175745755434], [1436929293.975949, 54146, 0.00784988235682249], [1436929773.992781, 64316, 0.007188988849520683], [1436930253.997415, 74465, 0.0072308750823140144], [1436930734.203004, 84611, 0.007685060612857342], [1436931214.03644, 94700, 0.008267422206699848], [1436931694.094564, 104766, 0.008946981281042099], [1436932174.114955, 114817, 0.009664506651461124], [1436932654.161382, 124880, 0.010994983837008476], [1436933133.960214, 134977, 0.011961394920945168], [1436933614.044337, 145062, 0.012674711644649506], [1436934094.166206, 155169, 0.013640021905303001], [1436934574.106036, 165284, 0.014305224642157555], [1436935054.150647, 175402, 0.014946703799068928], [1436935533.819562, 185538, 0.015737954527139664], [1436936013.710422, 195712, 0.016330912709236145], [1436936493.609025, 205906, 0.016695979982614517], [1436936973.683892, 216099, 0.017458846792578697], [1436937454.138383, 226331, 0.018533164635300636], [1436937933.838475, 236532, 0.01949200965464115], [1436938413.89688, 246724, 0.019517479464411736], [1436938894.018652, 256925, 0.019764307886362076], [1436939373.69067, 267137, 0.02008572220802307], [1436939853.673692, 277369, 0.021091068163514137], [1436940333.651346, 287620, 0.02140945754945278], [1436940813.599579, 297848, 0.021988170221447945], [1436941293.596313, 308088, 0.0223606675863266], [1436941773.659172, 318362, 0.022547796368598938], [1436942253.648479, 328621, 0.023031413555145264], [1436942733.752284, 338892, 0.023786410689353943], [1436943213.621881, 349144, 0.024008480831980705], [1436943693.698743, 359399, 0.024148935452103615], [1436944173.578463, 369649, 0.02457556128501892], [1436944653.692217, 379912, 0.02469060942530632], [1436945133.677298, 390180, 0.024952523410320282], [1436945613.572411, 400445, 0.02554873190820217], [1436946093.56123, 410703, 0.025771528482437134], [1436946573.542364, 420958, 0.02602078951895237], [1436947053.616578, 431216, 0.02602880820631981], [1436947533.636973, 441483, 0.026351822540163994], [1436948013.541574, 451751, 0.0262188371270895], [1436948493.560223, 462015, 0.026711203157901764], [1436948973.512541, 472260, 0.027218565344810486], [1436949453.550055, 482483, 0.02734719216823578], [1436949933.828011, 492731, 0.027217986062169075], [1436950413.603177, 502957, 0.027318857610225677], [1436950893.563009, 513185, 0.027305351570248604], [1436951373.620887, 523410, 0.027760380879044533], [1436951853.61941, 533618, 0.0280567966401577], [1436952333.694447, 543828, 0.028621215373277664], [1436952813.621004, 554042, 0.028958816081285477], [1436953293.588156, 564251, 0.029186993837356567], [1436953773.599734, 574464, 0.028960207477211952], [1436954253.621309, 584672, 0.028913332149386406], [1436954733.738119, 594882, 0.02921229600906372], [1436955213.56617, 605091, 0.029444556683301926], [1436955693.585366, 615296, 0.029747728258371353], [1436956173.626395, 625501, 0.030260732397437096], [1436956653.601937, 635705, 0.030394721776247025], [1436957133.665878, 645915, 0.03041674755513668], [1436957613.584762, 656116, 0.03058660589158535], [1436958093.549783, 666331, 0.030284838750958443], [1436958573.646778, 676543, 0.030354052782058716], [1436959053.585655, 686750, 0.030551131814718246], [1436959533.679696, 696961, 0.030686482787132263], [1436960013.633292, 707173, 0.030921922996640205], [1436960493.578778, 717383, 0.031079748645424843], [1436960973.596715, 727598, 0.03077232837677002], [1436961453.625644, 737818, 0.03084420971572399], [1436961933.740339, 748040, 0.03110562451183796], [1436962413.573845, 758252, 0.031141508370637894], [1436962893.610678, 768470, 0.031010067090392113], [1436963373.642878, 778674, 0.031100917607545853], [1436963853.558388, 788877, 0.03134296461939812], [1436964333.658419, 799099, 0.031301673501729965], [1436964813.573319, 809289, 0.031290579587221146], [1436965293.542098, 819484, 0.031435515731573105], [1436965773.545453, 829687, 0.031667787581682205], [1436966253.586517, 839901, 0.03169453889131546], [1436966733.639348, 850120, 0.03191617131233215], [1436967213.697288, 860330, 0.03205711767077446], [1436967693.617172, 870539, 0.03206227719783783], [1436968173.593885, 880748, 0.03195691108703613], [1436968653.560836, 890955, 0.03166574612259865], [1436969133.676337, 901164, 0.031929291784763336], [1436969613.506638, 911358, 0.031744007021188736], [1436970093.595964, 921560, 0.0315803587436676], [1436970573.541227, 931756, 0.031766779720783234], [1436971053.624316, 941945, 0.03181062266230583], [1436971533.655543, 952138, 0.0319465771317482], [1436972013.604738, 962349, 0.032054755836725235], [1436972493.613199, 972551, 0.03192495182156563], [1436972973.501155, 982746, 0.0319976881146431], [1436973453.64842, 992945, 0.03205036744475365], [1436973933.689516, 1003147, 0.032020118087530136], [1436974413.577769, 1013350, 0.03207429125905037], [1436974893.542281, 1023545, 0.032214779406785965], [1436975373.638453, 1033759, 0.03219134360551834], [1436975853.524388, 1043955, 0.0324082113802433], [1436976333.625792, 1054148, 0.03221917897462845], [1436976813.610661, 1064342, 0.03200480341911316], [1436977293.601581, 1074539, 0.03198748826980591], [1436977773.575627, 1084733, 0.032064300030469894], [1436978253.564972, 1094914, 0.032298240810632706], [1436978733.673144, 1105109, 0.03248215466737747], [1436979213.540585, 1115293, 0.03262820467352867], [1436979693.699591, 1125483, 0.032745134085416794], [1436980173.613012, 1135670, 0.032681502401828766], [1436980653.575769, 1145862, 0.03240214288234711], [1436981133.719264, 1156045, 0.03237201273441315], [1436981613.563551, 1166236, 0.03202598914504051], [1436982093.553233, 1176436, 0.032163310796022415], [1436982573.577846, 1186636, 0.03232435882091522], [1436983053.605749, 1196837, 0.032410554587841034], [1436983533.684994, 1207025, 0.03245232254266739], [1436984013.561492, 1217233, 0.03224659338593483], [1436984493.629873, 1227437, 0.03204221650958061], [1436984973.606714, 1237643, 0.03186390548944473], [1436985453.690084, 1247835, 0.031911786645650864], [1436985933.711388, 1257951, 0.032286882400512695], [1436986413.598807, 1268125, 0.032266560941934586], [1436986893.631797, 1278290, 0.03252791985869408], [1436987373.596962, 1288473, 0.03241678699851036], [1436987853.555549, 1298650, 0.03210347890853882], [1436988333.722032, 1308841, 0.031904902309179306], [1436988813.55697, 1319018, 0.03179018944501877], [1436989293.756905, 1329221, 0.0316874124109745], [1436989773.665141, 1339417, 0.03160090371966362], [1436990253.768302, 1349610, 0.03161816671490669], [1436990733.708919, 1359759, 0.0317724235355854], [1436991213.663033, 1369914, 0.03175821527838707], [1436991693.730925, 1380074, 0.031629402190446854], [1436992173.751791, 1390224, 0.031547073274850845], [1436992653.758682, 1400383, 0.031528495252132416], [1436993133.835604, 1410542, 0.03169562667608261], [1436993613.674655, 1420684, 0.031826674938201904], [1436994093.747454, 1430832, 0.03185039013624191], [1436994573.768973, 1440986, 0.03199826925992966], [1436995053.666661, 1451174, 0.03156091645359993], [1436995533.83439, 1461345, 0.031506411731243134], [1436996013.556996, 1471495, 0.031495608389377594], [1436996493.635477, 1481663, 0.03134337440133095], [1436996973.668684, 1491822, 0.031145554035902023], [1436997453.59326, 1501979, 0.031068041920661926], [1436997933.774019, 1512139, 0.031432390213012695], [1436998413.575162, 1522290, 0.03142932057380676], [1436998893.640468, 1532431, 0.03132513165473938], [1436999373.551661, 1542579, 0.03125539794564247], [1436999853.57906, 1552734, 0.0309873279184103], [1437000333.680409, 1562888, 0.03088490664958954], [1437000813.602383, 1573037, 0.0308260228484869], [1437001293.610337, 1583190, 0.030793415382504463], [1437001773.618199, 1593341, 0.03087344579398632], [1437002253.572966, 1603497, 0.0308389812707901], [1437002733.67994, 1613657, 0.03070608340203762], [1437003213.583266, 1623809, 0.0307186096906662], [1437003693.639943, 1633966, 0.03048117645084858], [1437004173.568287, 1644113, 0.03030446544289589], [1437004653.610772, 1654268, 0.030324051156640053], [1437005133.663045, 1664424, 0.03043009154498577], [1437005613.580984, 1674567, 0.030361991375684738], [1437006093.601019, 1684715, 0.030566193163394928], [1437006573.625314, 1694857, 0.030430208891630173], [1437007053.584514, 1704999, 0.030224468559026718], [1437007533.719303, 1715150, 0.030241932719945908], [1437008013.604962, 1725282, 0.030097855255007744], [1437008493.655091, 1735432, 0.030217904597520828], [1437008973.640165, 1745584, 0.030181601643562317], [1437009453.715067, 1755742, 0.030172593891620636], [1437009933.765712, 1765896, 0.030141659080982208], [1437010413.632128, 1776052, 0.030052196234464645], [1437010893.66766, 1786195, 0.03007938154041767], [1437011373.636164, 1796346, 0.02996920794248581], [1437011853.631224, 1806481, 0.029995175078511238], [1437012333.706205, 1816617, 0.03010040894150734], [1437012813.61987, 1826754, 0.030088385567069054], [1437013293.479904, 1836883, 0.029996229335665703], [1437013773.604574, 1847029, 0.029950618743896484], [1437014253.618884, 1857175, 0.029801754280924797], [1437014733.756419, 1867312, 0.029606210067868233], [1437015213.638607, 1877459, 0.029520301148295403], [1437015693.625763, 1887608, 0.02937021106481552], [1437016173.63194, 1897759, 0.02928493171930313], [1437016653.609074, 1907909, 0.029194936156272888], [1437017133.717601, 1918074, 0.029153617098927498], [1437017613.716011, 1928220, 0.029063349589705467], [1437018093.626005, 1938377, 0.02899051643908024], [1437018573.626522, 1948523, 0.02908063493669033], [1437019053.648174, 1958678, 0.029026903212070465], [1437019533.803011, 1968831, 0.029071694239974022], [1437020013.667751, 1978978, 0.029110101982951164], [1437020493.659028, 1989133, 0.02908976934850216], [1437020973.657346, 1999287, 0.028982611373066902], [1437021453.650634, 2009437, 0.028793690726161003], [1437021933.848661, 2019588, 0.02868787571787834], [1437022413.674963, 2029736, 0.028585631400346756], [1437022893.69086, 2039894, 0.02848806604743004], [1437023373.68883, 2050054, 0.028294002637267113], [1437023853.686116, 2060205, 0.02822807803750038], [1437024333.763876, 2070362, 0.02809525839984417], [1437024813.707845, 2080507, 0.027941878885030746], [1437025293.483294, 2090645, 0.02787884697318077], [1437025773.695712, 2100793, 0.027862509712576866], [1437026253.672994, 2110943, 0.027835993096232414], [1437026733.780775, 2121094, 0.027756690979003906], [1437027213.617849, 2131235, 0.027644263580441475], [1437027693.694451, 2141382, 0.02752007730305195], [1437028173.68596, 2151537, 0.027432529255747795], [1437028653.584833, 2161685, 0.027434471994638443], [1437029133.792483, 2171839, 0.027317894622683525], [1437029613.661672, 2181977, 0.027138294652104378], [1437030093.641009, 2192118, 0.027088705450296402], [1437030573.656274, 2202268, 0.027131302282214165], [1437031053.643631, 2212416, 0.02715957537293434], [1437031533.777478, 2222583, 0.027089620009064674], [1437032013.704008, 2232736, 0.026989320293068886], [1437032493.638393, 2242882, 0.026922713965177536], [1437032973.684986, 2253041, 0.02678370475769043], [1437033453.699562, 2263183, 0.0267350971698761], [1437033933.918074, 2273320, 0.026652036234736443], [1437034413.596351, 2283443, 0.0265977680683136], [1437034893.640496, 2293579, 0.02654072269797325], [1437035373.637761, 2303701, 0.026471523568034172], [1437035853.669947, 2313823, 0.026451298967003822], [1437036333.78905, 2323961, 0.026429779827594757], [1437036813.699727, 2334089, 0.026324886828660965], [1437037293.662592, 2344235, 0.026287589222192764], [1437037773.66716, 2354364, 0.026264755055308342], [1437038253.603687, 2364507, 0.026225194334983826], [1437038733.78864, 2374644, 0.02624845691025257], [1437039213.641799, 2384782, 0.02624380588531494], [1437039693.687078, 2394923, 0.026255516335368156], [1437040173.635717, 2405058, 0.026186630129814148], [1437040653.673331, 2415194, 0.026059549301862717], [1437041133.764768, 2425322, 0.02603207901120186], [1437041613.629279, 2435449, 0.025951188057661057], [1437042093.703985, 2445575, 0.025885486975312233], [1437042573.496029, 2455712, 0.0258584376424551], [1437043053.686022, 2465844, 0.02576967515051365], [1437043533.731929, 2475974, 0.02574247308075428], [1437044013.636245, 2486095, 0.025741368532180786], [1437044493.69923, 2496238, 0.025613142177462578], [1437044973.652155, 2506373, 0.025502001866698265], [1437045453.691467, 2516497, 0.025422129780054092], [1437045933.935804, 2526637, 0.02530006691813469], [1437046413.635583, 2536770, 0.02533203549683094], [1437046893.626337, 2546896, 0.025261884555220604], [1437047373.67437, 2557029, 0.02517615258693695], [1437047853.652939, 2567169, 0.025054262951016426], [1437048333.778436, 2577306, 0.024978358298540115], [1437048813.654248, 2587433, 0.024952327832579613], [1437049293.610609, 2597552, 0.024846646934747696], [1437049773.646573, 2607690, 0.024763893336057663], [1437050253.667925, 2617808, 0.024688972160220146], [1437050733.735291, 2627933, 0.024599123746156693], [1437051213.620222, 2638053, 0.024585271254181862], [1437051693.601978, 2648171, 0.024474715813994408], [1437052173.634985, 2658299, 0.0243435837328434], [1437052653.687176, 2668425, 0.024294523522257805], [1437053133.762819, 2678556, 0.024163981899619102], [1437053613.643698, 2688671, 0.024034887552261353], [1437054093.673047, 2698804, 0.024000374600291252], [1437054573.667371, 2708956, 0.023914175108075142], [1437055053.650441, 2719087, 0.02395522966980934], [1437055533.778469, 2729219, 0.023859599605202675], [1437056013.694082, 2739343, 0.02375946193933487], [1437056493.674871, 2749458, 0.023677179589867592], [1437056973.700234, 2759575, 0.023645443841814995], [1437057453.666129, 2769697, 0.02356558106839657], [1437057933.848506, 2779821, 0.023514214903116226], [1437058413.643799, 2789941, 0.023489613085985184], [1437058893.715386, 2800076, 0.023429814726114273], [1437059373.62596, 2810207, 0.023343827575445175], [1437059853.650848, 2820334, 0.02322673238813877], [1437060333.792248, 2830465, 0.023134106770157814], [1437060813.682955, 2840600, 0.023055672645568848], [1437061293.681795, 2850745, 0.022985080257058144], [1437061773.691182, 2860880, 0.02291373908519745], [1437062253.662987, 2871013, 0.022864071652293205], [1437062733.760419, 2881153, 0.0227896086871624], [1437063213.651969, 2891278, 0.02276325598359108], [1437063693.723523, 2901406, 0.022676151245832443], [1437064173.68663, 2911533, 0.022622840479016304], [1437064653.547643, 2921667, 0.022551873698830605], [1437065133.62645, 2931813, 0.022431621327996254], [1437065613.566569, 2941947, 0.022368427366018295], [1437066093.537804, 2952102, 0.022323856130242348], [1437066573.529332, 2962243, 0.022268367931246758], [1437067053.520098, 2972400, 0.022210223600268364], [1437067533.605733, 2982561, 0.022118542343378067], [1437068013.535467, 2992698, 0.022013003006577492], [1437068493.559976, 3002839, 0.021971898153424263], [1437068973.558743, 3012983, 0.021911533549427986], [1437069453.562661, 3023116, 0.021851375699043274], [1437069933.627071, 3033256, 0.021762363612651825], [1437070413.574131, 3043386, 0.021733952686190605], [1437070893.658803, 3053528, 0.021669508889317513], [1437071373.638711, 3063659, 0.021594204008579254], [1437071853.621384, 3073794, 0.021531015634536743], [1437072333.665269, 3083926, 0.021499203518033028], [1437072813.584388, 3094040, 0.021456807851791382], [1437073293.569178, 3104172, 0.02136526256799698]] \ No newline at end of file
diff --git a/tensorflow/tensorboard/components/tf-event-dashboard/demo/data/beta/d4.json b/tensorflow/tensorboard/components/tf-event-dashboard/demo/data/beta/d4.json
new file mode 100644
index 0000000000..434b78cd0f
--- /dev/null
+++ b/tensorflow/tensorboard/components/tf-event-dashboard/demo/data/beta/d4.json
@@ -0,0 +1 @@
+[[1436925978.257845, 7, 0.5028539896011353], [1436926413.945391, 1476, 0.4976981580257416], [1436926893.945037, 6006, 0.5092837810516357], [1436927373.995472, 13786, 0.5118998885154724], [1436927853.989794, 23650, 0.5314905643463135], [1436928334.132361, 33755, 0.550969123840332], [1436928813.973288, 43941, 0.5487659573554993], [1436929293.975949, 54146, 0.5263530015945435], [1436929773.992781, 64316, 0.5077286958694458], [1436930253.997415, 74465, 0.5120566487312317], [1436930734.203004, 84611, 0.5140185952186584], [1436931214.03644, 94700, 0.5133042335510254], [1436931694.094564, 104766, 0.5233010053634644], [1436932174.114955, 114817, 0.5230671763420105], [1436932654.161382, 124880, 0.5250263810157776], [1436933133.960214, 134977, 0.5088120698928833], [1436933614.044337, 145062, 0.5097426176071167], [1436934094.166206, 155169, 0.5103482007980347], [1436934574.106036, 165284, 0.5021579265594482], [1436935054.150647, 175402, 0.49785494804382324], [1436935533.819562, 185538, 0.4970649182796478], [1436936013.710422, 195712, 0.5023221373558044], [1436936493.609025, 205906, 0.5063169002532959], [1436936973.683892, 216099, 0.50455641746521], [1436937454.138383, 226331, 0.5104150772094727], [1436937933.838475, 236532, 0.5066487193107605], [1436938413.89688, 246724, 0.5183079838752747], [1436938894.018652, 256925, 0.5163102746009827], [1436939373.69067, 267137, 0.5216323733329773], [1436939853.673692, 277369, 0.5153006315231323], [1436940333.651346, 287620, 0.5240126252174377], [1436940813.599579, 297848, 0.5263218879699707], [1436941293.596313, 308088, 0.5236956477165222], [1436941773.659172, 318362, 0.534295916557312], [1436942253.648479, 328621, 0.540306031703949], [1436942733.752284, 338892, 0.5359382033348083], [1436943213.621881, 349144, 0.540198564529419], [1436943693.698743, 359399, 0.5404431819915771], [1436944173.578463, 369649, 0.5429667234420776], [1436944653.692217, 379912, 0.5415231585502625], [1436945133.677298, 390180, 0.54068922996521], [1436945613.572411, 400445, 0.5396349430084229], [1436946093.56123, 410703, 0.5486253499984741], [1436946573.542364, 420958, 0.5451043248176575], [1436947053.616578, 431216, 0.5478819608688354], [1436947533.636973, 441483, 0.5503379106521606], [1436948013.541574, 451751, 0.5534676313400269], [1436948493.560223, 462015, 0.5574610829353333], [1436948973.512541, 472260, 0.5558810234069824], [1436949453.550055, 482483, 0.5529404878616333], [1436949933.828011, 492731, 0.5618430972099304], [1436950413.603177, 502957, 0.5641138553619385], [1436950893.563009, 513185, 0.5707159638404846], [1436951373.620887, 523410, 0.5676558613777161], [1436951853.61941, 533618, 0.5637813806533813], [1436952333.694447, 543828, 0.5682924389839172], [1436952813.621004, 554042, 0.5690237283706665], [1436953293.588156, 564251, 0.5655006766319275], [1436953773.599734, 574464, 0.553955614566803], [1436954253.621309, 584672, 0.5558924674987793], [1436954733.738119, 594882, 0.5603042840957642], [1436955213.56617, 605091, 0.5625290870666504], [1436955693.585366, 615296, 0.5668522715568542], [1436956173.626395, 625501, 0.5736584663391113], [1436956653.601937, 635705, 0.5693879723548889], [1436957133.665878, 645915, 0.576599657535553], [1436957613.584762, 656116, 0.5648065805435181], [1436958093.549783, 666331, 0.5632508397102356], [1436958573.646778, 676543, 0.5660487413406372], [1436959053.585655, 686750, 0.568809449672699], [1436959533.679696, 696961, 0.5667826533317566], [1436960013.633292, 707173, 0.5637232661247253], [1436960493.578778, 717383, 0.5675314664840698], [1436960973.596715, 727598, 0.5714674592018127], [1436961453.625644, 737818, 0.564845085144043], [1436961933.740339, 748040, 0.5700833797454834], [1436962413.573845, 758252, 0.5702976584434509], [1436962893.610678, 768470, 0.5745863914489746], [1436963373.642878, 778674, 0.5763651728630066], [1436963853.558388, 788877, 0.5721960067749023], [1436964333.658419, 799099, 0.5714120864868164], [1436964813.573319, 809289, 0.5687000155448914], [1436965293.542098, 819484, 0.5728974938392639], [1436965773.545453, 829687, 0.5738612413406372], [1436966253.586517, 839901, 0.5702064037322998], [1436966733.639348, 850120, 0.5715107321739197], [1436967213.697288, 860330, 0.5695001482963562], [1436967693.617172, 870539, 0.5783872008323669], [1436968173.593885, 880748, 0.5758792161941528], [1436968653.560836, 890955, 0.572809636592865], [1436969133.676337, 901164, 0.5752230286598206], [1436969613.506638, 911358, 0.5861247181892395], [1436970093.595964, 921560, 0.5834078788757324], [1436970573.541227, 931756, 0.5814791321754456], [1436971053.624316, 941945, 0.5803619623184204], [1436971533.655543, 952138, 0.5765199065208435], [1436972013.604738, 962349, 0.5693190693855286], [1436972493.613199, 972551, 0.5720453262329102], [1436972973.501155, 982746, 0.5741620063781738], [1436973453.64842, 992945, 0.5705713629722595], [1436973933.689516, 1003147, 0.5657351613044739], [1436974413.577769, 1013350, 0.5685256123542786], [1436974893.542281, 1023545, 0.5698860287666321], [1436975373.638453, 1033759, 0.5801734328269958], [1436975853.524388, 1043955, 0.577880322933197], [1436976333.625792, 1054148, 0.5780594348907471], [1436976813.610661, 1064342, 0.5804633498191833], [1436977293.601581, 1074539, 0.5842364430427551], [1436977773.575627, 1084733, 0.5745837092399597], [1436978253.564972, 1094914, 0.5848771333694458], [1436978733.673144, 1105109, 0.5795935392379761], [1436979213.540585, 1115293, 0.583346426486969], [1436979693.699591, 1125483, 0.5840965509414673], [1436980173.613012, 1135670, 0.5807850360870361], [1436980653.575769, 1145862, 0.5843925476074219], [1436981133.719264, 1156045, 0.5828814506530762], [1436981613.563551, 1166236, 0.5873864889144897], [1436982093.553233, 1176436, 0.5896572470664978], [1436982573.577846, 1186636, 0.5887367725372314], [1436983053.605749, 1196837, 0.5841871500015259], [1436983533.684994, 1207025, 0.5867579579353333], [1436984013.561492, 1217233, 0.5940297842025757], [1436984493.629873, 1227437, 0.5925037860870361], [1436984973.606714, 1237643, 0.5981529951095581], [1436985453.690084, 1247835, 0.5954598188400269], [1436985933.711388, 1257951, 0.5903756022453308], [1436986413.598807, 1268125, 0.5837404131889343], [1436986893.631797, 1278290, 0.583182156085968], [1436987373.596962, 1288473, 0.5860618352890015], [1436987853.555549, 1298650, 0.5829544067382812], [1436988333.722032, 1308841, 0.5798720121383667], [1436988813.55697, 1319018, 0.589148998260498], [1436989293.756905, 1329221, 0.5905702710151672], [1436989773.665141, 1339417, 0.5900465250015259], [1436990253.768302, 1349610, 0.5893078446388245], [1436990733.708919, 1359759, 0.589722752571106], [1436991213.663033, 1369914, 0.5907371640205383], [1436991693.730925, 1380074, 0.5939858555793762], [1436992173.751791, 1390224, 0.5906378626823425], [1436992653.758682, 1400383, 0.5876493453979492], [1436993133.835604, 1410542, 0.5912420153617859], [1436993613.674655, 1420684, 0.5887293219566345], [1436994093.747454, 1430832, 0.589107096195221], [1436994573.768973, 1440986, 0.5928497910499573], [1436995053.666661, 1451174, 0.5916265845298767], [1436995533.83439, 1461345, 0.5911784768104553], [1436996013.556996, 1471495, 0.5890726447105408], [1436996493.635477, 1481663, 0.5914839506149292], [1436996973.668684, 1491822, 0.5915400385856628], [1436997453.59326, 1501979, 0.591564416885376], [1436997933.774019, 1512139, 0.5926578640937805], [1436998413.575162, 1522290, 0.5942149758338928], [1436998893.640468, 1532431, 0.5931802988052368], [1436999373.551661, 1542579, 0.587592601776123], [1436999853.57906, 1552734, 0.5877953171730042], [1437000333.680409, 1562888, 0.590681791305542], [1437000813.602383, 1573037, 0.5924896001815796], [1437001293.610337, 1583190, 0.5913501381874084], [1437001773.618199, 1593341, 0.5952408909797668], [1437002253.572966, 1603497, 0.5953922271728516], [1437002733.67994, 1613657, 0.6002237200737], [1437003213.583266, 1623809, 0.6042569875717163], [1437003693.639943, 1633966, 0.6017740368843079], [1437004173.568287, 1644113, 0.6037994623184204], [1437004653.610772, 1654268, 0.6037947535514832], [1437005133.663045, 1664424, 0.6028310060501099], [1437005613.580984, 1674567, 0.603211522102356], [1437006093.601019, 1684715, 0.6052727699279785], [1437006573.625314, 1694857, 0.6032628417015076], [1437007053.584514, 1704999, 0.5978461503982544], [1437007533.719303, 1715150, 0.602828323841095], [1437008013.604962, 1725282, 0.6063790917396545], [1437008493.655091, 1735432, 0.6047347784042358], [1437008973.640165, 1745584, 0.6031648516654968], [1437009453.715067, 1755742, 0.6067507863044739], [1437009933.765712, 1765896, 0.6062817573547363], [1437010413.632128, 1776052, 0.609245240688324], [1437010893.66766, 1786195, 0.6066284775733948], [1437011373.636164, 1796346, 0.6102170944213867], [1437011853.631224, 1806481, 0.609173595905304], [1437012333.706205, 1816617, 0.6035751104354858], [1437012813.61987, 1826754, 0.604059636592865], [1437013293.479904, 1836883, 0.6039224863052368], [1437013773.604574, 1847029, 0.5974730849266052], [1437014253.618884, 1857175, 0.6040806174278259], [1437014733.756419, 1867312, 0.6017186045646667], [1437015213.638607, 1877459, 0.5987159609794617], [1437015693.625763, 1887608, 0.6047909259796143], [1437016173.63194, 1897759, 0.6033824682235718], [1437016653.609074, 1907909, 0.6038352847099304], [1437017133.717601, 1918074, 0.6083348989486694], [1437017613.716011, 1928220, 0.6044996380805969], [1437018093.626005, 1938377, 0.6009799242019653], [1437018573.626522, 1948523, 0.60047847032547], [1437019053.648174, 1958678, 0.6019382476806641], [1437019533.803011, 1968831, 0.6007305383682251], [1437020013.667751, 1978978, 0.6025127172470093], [1437020493.659028, 1989133, 0.6051828861236572], [1437020973.657346, 1999287, 0.6085876822471619], [1437021453.650634, 2009437, 0.6065122485160828], [1437021933.848661, 2019588, 0.6084572076797485], [1437022413.674963, 2029736, 0.6065473556518555], [1437022893.69086, 2039894, 0.6075063347816467], [1437023373.68883, 2050054, 0.6095973253250122], [1437023853.686116, 2060205, 0.6047213077545166], [1437024333.763876, 2070362, 0.6034210324287415], [1437024813.707845, 2080507, 0.6008927822113037], [1437025293.483294, 2090645, 0.604469895362854], [1437025773.695712, 2100793, 0.6068717837333679], [1437026253.672994, 2110943, 0.6099737882614136], [1437026733.780775, 2121094, 0.6105009317398071], [1437027213.617849, 2131235, 0.611957311630249], [1437027693.694451, 2141382, 0.6141949892044067], [1437028173.68596, 2151537, 0.6135279536247253], [1437028653.584833, 2161685, 0.6111017465591431], [1437029133.792483, 2171839, 0.6135671138763428], [1437029613.661672, 2181977, 0.6112024188041687], [1437030093.641009, 2192118, 0.6097264289855957], [1437030573.656274, 2202268, 0.6097284555435181], [1437031053.643631, 2212416, 0.6121350526809692], [1437031533.777478, 2222583, 0.6147991418838501], [1437032013.704008, 2232736, 0.6118316054344177], [1437032493.638393, 2242882, 0.6191433072090149], [1437032973.684986, 2253041, 0.6188027262687683], [1437033453.699562, 2263183, 0.6163974404335022], [1437033933.918074, 2273320, 0.6144159436225891], [1437034413.596351, 2283443, 0.6123769879341125], [1437034893.640496, 2293579, 0.6139131188392639], [1437035373.637761, 2303701, 0.6150627136230469], [1437035853.669947, 2313823, 0.6149951219558716], [1437036333.78905, 2323961, 0.6155945658683777], [1437036813.699727, 2334089, 0.613308310508728], [1437037293.662592, 2344235, 0.6153736114501953], [1437037773.66716, 2354364, 0.6160987615585327], [1437038253.603687, 2364507, 0.611574113368988], [1437038733.78864, 2374644, 0.6145234107971191], [1437039213.641799, 2384782, 0.6117951273918152], [1437039693.687078, 2394923, 0.6129845380783081], [1437040173.635717, 2405058, 0.6095831394195557], [1437040653.673331, 2415194, 0.6110679507255554], [1437041133.764768, 2425322, 0.6099690198898315], [1437041613.629279, 2435449, 0.6105908155441284], [1437042093.703985, 2445575, 0.6124749779701233], [1437042573.496029, 2455712, 0.6118302345275879], [1437043053.686022, 2465844, 0.6094756722450256], [1437043533.731929, 2475974, 0.6094986796379089], [1437044013.636245, 2486095, 0.6114639639854431], [1437044493.69923, 2496238, 0.6101082563400269], [1437044973.652155, 2506373, 0.6105718612670898], [1437045453.691467, 2516497, 0.6115666627883911], [1437045933.935804, 2526637, 0.6128115653991699], [1437046413.635583, 2536770, 0.6122986078262329], [1437046893.626337, 2546896, 0.6142017245292664], [1437047373.67437, 2557029, 0.6111341714859009], [1437047853.652939, 2567169, 0.611350417137146], [1437048333.778436, 2577306, 0.6126709580421448], [1437048813.654248, 2587433, 0.6111524105072021], [1437049293.610609, 2597552, 0.6135894060134888], [1437049773.646573, 2607690, 0.6136029362678528], [1437050253.667925, 2617808, 0.6141685843467712], [1437050733.735291, 2627933, 0.6170881390571594], [1437051213.620222, 2638053, 0.6189730167388916], [1437051693.601978, 2648171, 0.6157540678977966], [1437052173.634985, 2658299, 0.6178646683692932], [1437052653.687176, 2668425, 0.6164441108703613], [1437053133.762819, 2678556, 0.6175132393836975], [1437053613.643698, 2688671, 0.6158696413040161], [1437054093.673047, 2698804, 0.6162974238395691], [1437054573.667371, 2708956, 0.6160892844200134], [1437055053.650441, 2719087, 0.6176281571388245], [1437055533.778469, 2729219, 0.6165231466293335], [1437056013.694082, 2739343, 0.6171510219573975], [1437056493.674871, 2749458, 0.6124134659767151], [1437056973.700234, 2759575, 0.6120688319206238], [1437057453.666129, 2769697, 0.6126770377159119], [1437057933.848506, 2779821, 0.6126595139503479], [1437058413.643799, 2789941, 0.616513729095459], [1437058893.715386, 2800076, 0.6130264401435852], [1437059373.62596, 2810207, 0.6114044785499573], [1437059853.650848, 2820334, 0.6077002882957458], [1437060333.792248, 2830465, 0.6086235046386719], [1437060813.682955, 2840600, 0.6084680557250977], [1437061293.681795, 2850745, 0.6094310879707336], [1437061773.691182, 2860880, 0.6066345572471619], [1437062253.662987, 2871013, 0.6094250082969666], [1437062733.760419, 2881153, 0.609106719493866], [1437063213.651969, 2891278, 0.6080747246742249], [1437063693.723523, 2901406, 0.6081057786941528], [1437064173.68663, 2911533, 0.6066460609436035], [1437064653.547643, 2921667, 0.6057829856872559], [1437065133.62645, 2931813, 0.6092885136604309], [1437065613.566569, 2941947, 0.6089289784431458], [1437066093.537804, 2952102, 0.6070758700370789], [1437066573.529332, 2962243, 0.6096142530441284], [1437067053.520098, 2972400, 0.609714925289154], [1437067533.605733, 2982561, 0.6116167306900024], [1437068013.535467, 2992698, 0.6119107007980347], [1437068493.559976, 3002839, 0.6119140386581421], [1437068973.558743, 3012983, 0.6115538477897644], [1437069453.562661, 3023116, 0.6126777529716492], [1437069933.627071, 3033256, 0.6146017909049988], [1437070413.574131, 3043386, 0.6119789481163025], [1437070893.658803, 3053528, 0.6139205694198608], [1437071373.638711, 3063659, 0.612362802028656], [1437071853.621384, 3073794, 0.6109192371368408], [1437072333.665269, 3083926, 0.6141091585159302], [1437072813.584388, 3094040, 0.6132751703262329], [1437073293.569178, 3104172, 0.6132386922836304]] \ No newline at end of file
diff --git a/tensorflow/tensorboard/components/tf-event-dashboard/demo/data/runs.json b/tensorflow/tensorboard/components/tf-event-dashboard/demo/data/runs.json
new file mode 100644
index 0000000000..90fb0cbb09
--- /dev/null
+++ b/tensorflow/tensorboard/components/tf-event-dashboard/demo/data/runs.json
@@ -0,0 +1,22 @@
+{
+ "alpha": {
+ "scalars": [
+ "d1",
+ "d2",
+ "d3",
+ "d4"
+ ],
+ "histograms": [],
+ "images": []
+ },
+ "beta": {
+ "scalars": [
+ "d1",
+ "d2",
+ "d3",
+ "d4"
+ ],
+ "histograms": [],
+ "images": []
+ }
+}
diff --git a/tensorflow/tensorboard/components/tf-event-dashboard/demo/index.html b/tensorflow/tensorboard/components/tf-event-dashboard/demo/index.html
new file mode 100644
index 0000000000..34ad6a7263
--- /dev/null
+++ b/tensorflow/tensorboard/components/tf-event-dashboard/demo/index.html
@@ -0,0 +1,17 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <script src="../../../bower_components/webcomponentsjs/webcomponents-lite.min.js"></script>
+ <link rel="import" href="../tf-event-dashboard.html">
+ <link rel="stylesheet" type="text/css" href="../../../lib/css/global.css">
+ <title>Event Dashboard Demo Demo</title>
+ </head>
+ <body>
+ <script>
+ TF.Urls.runsUrl = function() {return "data/runs.json"};
+ TF.Urls.scalarsUrl = function(tag, run) {return "data/" + run + "/" + tag + ".json";};
+ </script>
+
+ <tf-event-dashboard id="demo"></tf-event-dashboard>
+ </body>
+</html>
diff --git a/tensorflow/tensorboard/components/tf-event-dashboard/dragZoomInteraction.ts b/tensorflow/tensorboard/components/tf-event-dashboard/dragZoomInteraction.ts
new file mode 100644
index 0000000000..bf9f7b70e2
--- /dev/null
+++ b/tensorflow/tensorboard/components/tf-event-dashboard/dragZoomInteraction.ts
@@ -0,0 +1,150 @@
+module Plottable {
+export class DragZoomLayer extends Components.SelectionBoxLayer {
+ private _dragInteraction: Interactions.Drag;
+ private _doubleClickInteraction: Interactions.DoubleClick;
+ private xDomainToRestore: any[];
+ private yDomainToRestore: any[];
+ private isZoomed = false;
+ private easeFn: (t: number) => number = d3.ease("cubic-in-out");
+ private _animationTime = 750;
+
+ /* Constructs a SelectionBoxLayer with an attached DragInteraction and ClickInteraction.
+ * On drag, it triggers an animated zoom into the box that was dragged.
+ * On double click, it zooms back out to the original view, before any zooming.
+ * The zoom animation uses an easing function (default d3.ease("cubic-in-out")) and is customizable.
+ * Usage: Construct the selection box layer and attach x and y scales, and then add the layer
+ * over the plot you are zooming on using a Component Group.
+ * TODO(danmane) - merge this into Plottable
+ */
+ constructor(xScale: QuantitativeScale<number | { valueOf(): number }>,
+ yScale: QuantitativeScale<number | { valueOf(): number }>) {
+ super();
+ this.xScale(xScale);
+ this.yScale(yScale);
+ this._dragInteraction = new Interactions.Drag();
+ this._dragInteraction.attachTo(this);
+ this._doubleClickInteraction = new Interactions.DoubleClick();
+ this._doubleClickInteraction.attachTo(this);
+ this.setupCallbacks();
+ }
+
+ private setupCallbacks() {
+ let dragging = false;
+ this._dragInteraction.onDragStart((startPoint: Point) => {
+ this.bounds({
+ topLeft: startPoint,
+ bottomRight: startPoint,
+ });
+ });
+ this._dragInteraction.onDrag((startPoint, endPoint) => {
+ this.bounds({topLeft: startPoint, bottomRight: endPoint});
+ this.boxVisible(true);
+ dragging = true;
+ });
+ this._dragInteraction.onDragEnd((startPoint, endPoint) => {
+ this.boxVisible(false);
+ this.bounds({topLeft: startPoint, bottomRight: endPoint});
+ if (dragging) {
+ this.zoom();
+ }
+ dragging = false;
+ });
+
+ this._doubleClickInteraction.onDoubleClick(this.unzoom.bind(this));
+ }
+
+ /* Set the time (in ms) over which the zoom will interpolate.
+ * 0 implies no interpolation. (ie zoom is instant)
+ */
+ public animationTime(): number;
+ public animationTime(animationTime: number): DragZoomLayer;
+ public animationTime(animationTime?: number): any {
+ if (animationTime == null) {
+ return this._animationTime;
+ }
+ if (animationTime < 0) {
+ throw new Error("animationTime cannot be negative");
+ }
+ this._animationTime = animationTime;
+ return this;
+ }
+
+ /* Set the easing function, which determines how the zoom interpolates over time. */
+ public ease(fn: (t: number) => number): DragZoomLayer {
+ if (typeof(fn) !== "function") {
+ throw new Error("ease function must be a function");
+ }
+ if (fn(0) !== 0 || fn(1) !== 1) {
+ Utils.Window.warn("Easing function does not maintain invariant f(0)==0 && f(1)==1. Bad behavior may result.");
+ }
+ this.easeFn = fn;
+ return this;
+ }
+
+ // Zoom into extent of the selection box bounds
+ private zoom() {
+ let x0: number = this.xExtent()[0].valueOf();
+ let x1: number = this.xExtent()[1].valueOf();
+ let y0: number = this.yExtent()[1].valueOf();
+ let y1: number = this.yExtent()[0].valueOf();
+
+ if (x0 === x1 || y0 === y1) {
+ return;
+ }
+
+ if (!this.isZoomed) {
+ this.isZoomed = true;
+ this.xDomainToRestore = this.xScale().domain();
+ this.yDomainToRestore = this.yScale().domain();
+ }
+ this.interpolateZoom(x0, x1, y0, y1);
+ }
+
+ // Restore the scales to their state before any zoom
+ private unzoom() {
+ if (!this.isZoomed) {
+ return;
+ }
+ this.isZoomed = false;
+ this.interpolateZoom(this.xDomainToRestore[0], this.xDomainToRestore[1],
+ this.yDomainToRestore[0], this.yDomainToRestore[1]);
+ }
+
+ // If we are zooming, disable interactions, to avoid contention
+ private isZooming(isZooming: boolean) {
+ this._dragInteraction.enabled(!isZooming);
+ this._doubleClickInteraction.enabled(!isZooming);
+ }
+
+ private interpolateZoom(x0f: number, x1f: number, y0f: number, y1f: number) {
+ let x0s: number = this.xScale().domain()[0].valueOf();
+ let x1s: number = this.xScale().domain()[1].valueOf();
+ let y0s: number = this.yScale().domain()[0].valueOf();
+ let y1s: number = this.yScale().domain()[1].valueOf();
+
+ // Copy a ref to the ease fn, so that changing ease wont affect zooms in progress
+ let ease = this.easeFn;
+ let interpolator = (a: number, b: number, p: number) => d3.interpolateNumber(a, b)(ease(p));
+
+ this.isZooming(true);
+ let start = Date.now();
+ let draw = () => {
+ let now = Date.now();
+ let passed = now - start;
+ let p = this._animationTime === 0 ? 1 : Math.min(1, passed / this._animationTime);
+ let x0 = interpolator(x0s, x0f, p);
+ let x1 = interpolator(x1s, x1f, p);
+ let y0 = interpolator(y0s, y0f, p);
+ let y1 = interpolator(y1s, y1f, p);
+ this.xScale().domain([x0, x1]);
+ this.yScale().domain([y0, y1]);
+ if (p < 1) {
+ Utils.DOM.requestAnimationFramePolyfill(draw);
+ } else {
+ this.isZooming(false);
+ }
+ };
+ draw();
+ }
+}
+}
diff --git a/tensorflow/tensorboard/components/tf-event-dashboard/tf-chart.html b/tensorflow/tensorboard/components/tf-event-dashboard/tf-chart.html
new file mode 100644
index 0000000000..39ca9704c3
--- /dev/null
+++ b/tensorflow/tensorboard/components/tf-event-dashboard/tf-chart.html
@@ -0,0 +1,101 @@
+<link rel="import" href="../../bower_components/polymer/polymer.html">
+<link rel="import" href="../imports/plottable.html">
+<link rel="import" href="../imports/lodash.html">
+
+<!--
+tf-chart (TFChart) creates an element that draws a line chart for dispalying event values.
+It has the following settable properties:
+ tag: (required, string) - the name of the tag to load for this chart
+ selectedRuns: (required, string[]) - the runs the chart should display
+ xType: (required, string) - the way to display x values - allows "step" or "wall_time"
+ dataCoordinator: (required, TF.DataCoordinator) - the data coordinator for talking to backend
+ colorScale: (required, Plottable.Scales.Color) - maps from runs to colors
+ tooltipUpdater: (required, function) - allows the chart to modify tooltips
+
+It exposes the following methods:
+ redraw() - cause the chart to re-render (useful if e.g. container size changed)
+
+The data is expected to be an array of [wall_time, step, value] arrays.
+The wall_time is serialized as seconds since epoch.
+-->
+<dom-module id="tf-chart">
+ <template>
+ <svg id="chartsvg"></svg>
+ <style>
+ :host {
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ display: flex;
+ flex-direction: column;
+ flex-grow: 1;
+ flex-shrink: 1;
+ }
+ svg {
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ flex-grow: 1;
+ flex-shrink: 1;
+ }
+ .plottable .crosshairs line.guide-line {
+ stroke: #777;
+ }
+ </style>
+ </template>
+ <script src="dragZoomInteraction.js"></script>
+ <script src="tf-chart.js"></script>
+ <script>
+ Polymer({
+ is: "tf-chart",
+ properties: {
+ type: String, // "scalar" or "compressedHistogram"
+ _chart: Object,
+ colorScale: Object,
+ tag: String,
+ selectedRuns: Array,
+ xType: String,
+ dataCoordinator: Object,
+ tooltipUpdater: Function,
+ _initialized: Boolean,
+ },
+ observers: [
+ "_makeChart(type, tag, dataCoordinator, tooltipUpdater, xType, colorScale, _initialized)",
+ "_changeRuns(_chart, selectedRuns.*)"
+ ],
+ _changeRuns: function(chart, change) {
+ this._chart.changeRuns(this.selectedRuns);
+ this.redraw();
+ },
+ redraw: function() {
+ this._chart.redraw();
+ },
+ _constructor: function(type) {
+ if (type === "scalar") {
+ return TF.LineChart;
+ } else if (type === "compressedHistogram") {
+ return TF.HistogramChart;
+ } else {
+ throw new Error("Unrecognized chart type");
+ }
+ },
+ _makeChart: function(type, tag, dataCoordinator, tooltipUpdater, xType, colorScale, _initialized) {
+ if (!_initialized) {
+ return;
+ }
+ if (this._chart) this._chart.destroy();
+ var cns = this._constructor(type);
+ var chart = new cns(tag, dataCoordinator, tooltipUpdater, xType, colorScale);
+ var svg = d3.select(this.$.chartsvg);
+ this.async(function() {
+ chart.renderTo(svg);
+ this._chart = chart;
+ }, 350);
+ },
+ attached: function() {
+ this._initialized = true;
+ },
+ detached: function() {
+ this._initialized = false;
+ }
+ });
+ </script>
+</dom-module>
diff --git a/tensorflow/tensorboard/components/tf-event-dashboard/tf-chart.ts b/tensorflow/tensorboard/components/tf-event-dashboard/tf-chart.ts
new file mode 100644
index 0000000000..0b0103d697
--- /dev/null
+++ b/tensorflow/tensorboard/components/tf-event-dashboard/tf-chart.ts
@@ -0,0 +1,327 @@
+/// <reference path="../../typings/tsd.d.ts" />
+/// <reference path="../../bower_components/plottable/plottable.d.ts" />
+
+module TF {
+ type TFDatum = [number, number, number];
+ type tooltipMap = {[run: string]: string};
+ type TooltipUpdater = (tooltipMap, xValue, closestRun) => void;
+
+ let Y_TOOLTIP_FORMATTER_PRECISION = 4;
+ let STEP_AXIS_FORMATTER_PRECISION = 4;
+ let Y_AXIS_FORMATTER_PRECISION = 3;
+
+ export class BaseChart {
+ protected dataCoordinator: TF.DataCoordinator;
+ protected tag: string;
+ protected tooltipUpdater: TooltipUpdater;
+
+ protected xAccessor: Plottable.Accessor<number | Date>;
+ protected xScale: Plottable.QuantitativeScale<number | Date>;
+ protected yScale: Plottable.QuantitativeScale<number>;
+ protected gridlines: Plottable.Components.Gridlines;
+ protected center: Plottable.Components.Group;
+ protected xAxis: Plottable.Axes.Numeric | Plottable.Axes.Time;
+ protected yAxis: Plottable.Axes.Numeric;
+ protected xLabel: Plottable.Components.AxisLabel;
+ protected yLabel: Plottable.Components.AxisLabel;
+ protected outer: Plottable.Components.Table;
+ protected colorScale: Plottable.Scales.Color;
+ protected xTooltipFormatter: (d: number) => string;
+ constructor(
+ tag: string,
+ dataCoordinator: TF.DataCoordinator,
+ tooltipUpdater: TooltipUpdater,
+ xType: string,
+ colorScale: Plottable.Scales.Color
+ ) {
+ this.dataCoordinator = dataCoordinator;
+ this.tag = tag;
+ this.colorScale = colorScale;
+ this.tooltipUpdater = tooltipUpdater;
+ this.buildChart(xType);
+ }
+
+ public changeRuns(runs: string[]) {
+ throw new Error("Abstract method not implemented");
+ }
+
+ protected addCrosshairs(plot: Plottable.XYPlot<number | Date, number>, yAccessor): Plottable.Components.Group {
+ var pi = new Plottable.Interactions.Pointer();
+ pi.attachTo(plot);
+ let xGuideLine = new Plottable.Components.GuideLineLayer<void>("vertical");
+ let yGuideLine = new Plottable.Components.GuideLineLayer<void>("horizontal");
+ xGuideLine.addClass("crosshairs");
+ yGuideLine.addClass("crosshairs");
+ var group = new Plottable.Components.Group([plot, xGuideLine, yGuideLine]);
+ let yfmt = multiscaleFormatter(Y_TOOLTIP_FORMATTER_PRECISION);
+
+ pi.onPointerMove((p: Plottable.Point) => {
+ let run2val: {[run: string]: string} = {};
+ let x: number = this.xScale.invert(p.x).valueOf();
+ let yMin: number = this.yScale.domain()[0];
+ let yMax: number = this.yScale.domain()[1];
+ let closestRun: string = null;
+ let minYDistToRun: number = Infinity;
+ let yValueForCrosshairs: number = p.y;
+ plot.datasets().forEach((dataset) => {
+ let run: string = dataset.metadata().run;
+ let data: TFDatum[] = dataset.data();
+ let xs: number[] = data.map((d, i) => this.xAccessor(d, i, dataset).valueOf());
+ let idx: number = _.sortedIndex(xs, x);
+ if (idx === 0 || idx === data.length) {
+ // Only find a point when the cursor is inside the range of the data
+ // if the cursor is to the left or right of all the data, dont attach.
+ return;
+ }
+ let previous = data[idx - 1];
+ let next = data[idx];
+ let x0: number = this.xAccessor(previous, idx - 1, dataset).valueOf();
+ let x1: number = this.xAccessor(next, idx, dataset).valueOf();
+ let y0: number = yAccessor(previous, idx - 1, dataset).valueOf();
+ let y1: number = yAccessor(next, idx, dataset).valueOf();
+ let slope: number = (y1 - y0) / (x1 - x0);
+ let y: number = y0 + slope * (x - x0);
+
+ if (y < yMin || y > yMax || y !== y) {
+ // don't find data that is off the top or bottom of the plot.
+ // also don't find data if it is NaN
+ return;
+ }
+ let dist = Math.abs(this.yScale.scale(y) - p.y);
+ if (dist < minYDistToRun) {
+ minYDistToRun = dist;
+ closestRun = run;
+ yValueForCrosshairs = this.yScale.scale(y);
+ }
+ // Note this tooltip will display linearly interpolated values
+ // e.g. will display a y=0 value halfway between [y=-1, y=1], even
+ // though there is not actually any 0 datapoint. This could be misleading
+ run2val[run] = yfmt(y);
+ });
+ xGuideLine.pixelPosition(p.x);
+ yGuideLine.pixelPosition(yValueForCrosshairs);
+ this.tooltipUpdater(run2val, this.xTooltipFormatter(x), closestRun);
+
+ });
+
+ pi.onPointerExit(() => {
+ this.tooltipUpdater(null, null, null);
+ xGuideLine.pixelPosition(-1);
+ yGuideLine.pixelPosition(-1);
+ });
+
+ return group;
+
+ }
+
+ protected buildChart(xType: string) {
+ if (this.outer) {
+ this.outer.destroy();
+ }
+ var xComponents = getXComponents(xType);
+ this.xAccessor = xComponents.accessor;
+ this.xScale = xComponents.scale;
+ this.xAxis = xComponents.axis;
+ this.xAxis.margin(0).tickLabelPadding(3);
+ this.xTooltipFormatter = xComponents.tooltipFormatter;
+ this.yScale = new Plottable.Scales.Linear();
+ this.yAxis = new Plottable.Axes.Numeric(this.yScale, "left");
+ let yFormatter = multiscaleFormatter(Y_AXIS_FORMATTER_PRECISION);
+ this.yAxis.margin(0).tickLabelPadding(5).formatter(yFormatter);
+ this.yAxis.usesTextWidthApproximation(true);
+
+ var center = this.buildPlot(this.xAccessor, this.xScale, this.yScale);
+
+ this.gridlines = new Plottable.Components.Gridlines(this.xScale, this.yScale);
+
+ var dzl = new Plottable.DragZoomLayer(this.xScale, this.yScale);
+
+ this.center = new Plottable.Components.Group([center, this.gridlines, dzl]);
+ this.outer = new Plottable.Components.Table([
+ [this.yAxis, this.center],
+ [null, this.xAxis]
+ ]);
+ }
+
+ protected buildPlot(xAccessor, xScale, yScale): Plottable.Component {
+ throw new Error("Abstract method not implemented.");
+ }
+
+ public renderTo(target: d3.Selection<any>) {
+ this.outer.renderTo(target);
+ }
+
+ public redraw() {
+ this.outer.redraw();
+ }
+
+ protected destroy() {
+ this.outer.destroy();
+ }
+ }
+
+ export class LineChart extends BaseChart {
+ private plot: Plottable.Plots.Line<number | Date>;
+ protected buildPlot(xAccessor, xScale, yScale): Plottable.Component {
+ var yAccessor = accessorize("2");
+ var plot = new Plottable.Plots.Line<number | Date>();
+ plot.x(xAccessor, xScale);
+ plot.y(yAccessor, yScale);
+ plot.attr("stroke", (d: any, i: number, m: any) => m.run, this.colorScale);
+ this.plot = plot;
+ var group = this.addCrosshairs(plot, yAccessor);
+ return group;
+ }
+
+ public changeRuns(runs: string[]) {
+ var datasets = this.dataCoordinator.getDatasets(this.tag, runs);
+ this.plot.datasets(datasets);
+ }
+
+ }
+
+ export class HistogramChart extends BaseChart {
+ private plots: Plottable.XYPlot<number | Date, number>[];
+
+ public changeRuns(runs: string[]) {
+ var datasets = this.dataCoordinator.getDatasets(this.tag, runs);
+ this.plots.forEach((p) => p.datasets(datasets));
+ }
+
+ protected buildPlot(xAccessor, xScale, yScale): Plottable.Component {
+ var percents = [0, 228, 1587, 3085, 5000, 6915, 8413, 9772, 10000];
+ var opacities = _.range(percents.length - 1).map((i) => (percents[i + 1] - percents[i]) / 2500);
+ var accessors = percents.map((p, i) => (datum) => datum[2][i][1]);
+ var median = 4;
+ var medianAccessor = accessors[median];
+
+ var plots = _.range(accessors.length - 1).map((i) => {
+ var p = new Plottable.Plots.Area<number | Date>();
+ p.x(xAccessor, xScale);
+
+ var y0 = i > median ? accessors[i] : accessors[i + 1];
+ var y = i > median ? accessors[i + 1] : accessors[i];
+ p.y(y, yScale);
+ p.y0(y0);
+ p.attr("fill", (d: any, i: number, m: any) => m.run, this.colorScale);
+ p.attr("stroke", (d: any, i: number, m: any) => m.run, this.colorScale);
+ p.attr("stroke-weight", (d: any, i: number, m: any) => "0.5px");
+ p.attr("stroke-opacity", () => opacities[i]);
+ p.attr("fill-opacity", () => opacities[i]);
+ return p;
+ });
+
+ var medianPlot = new Plottable.Plots.Line<number | Date>();
+ medianPlot.x(xAccessor, xScale);
+ medianPlot.y(medianAccessor, yScale);
+ medianPlot.attr("stroke", (d: any, i: number, m: any) => m.run, this.colorScale);
+
+ this.plots = plots;
+ var group = this.addCrosshairs(medianPlot, medianAccessor);
+ return new Plottable.Components.Group([new Plottable.Components.Group(plots), group]);
+ }
+ }
+
+ /* Create a formatter function that will switch between exponential and
+ * regular display depending on the scale of the number being formatted,
+ * and show `digits` significant digits.
+ */
+ function multiscaleFormatter(digits: number): ((v: number) => string) {
+ return (v: number) => {
+ var absv = Math.abs(v);
+ if (absv < 1E-15) {
+ // Sometimes zero-like values get an annoying representation
+ absv = 0;
+ }
+ var f: (x: number) => string;
+ if (absv >= 1E4) {
+ f = d3.format("." + digits + "e");
+ } else if (absv > 0 && absv < 0.01) {
+ f = d3.format("." + digits + "e");
+ } else {
+ f = d3.format("." + digits + "g");
+ }
+ return f(v);
+ };
+ }
+
+ function accessorize(key: string): Plottable.Accessor<number> {
+ return (d: any, index: number, dataset: Plottable.Dataset) => d[key];
+ }
+
+ interface XComponents {
+ /* tslint:disable */
+ scale: Plottable.Scales.Linear | Plottable.Scales.Time,
+ axis: Plottable.Axes.Numeric | Plottable.Axes.Time,
+ accessor: Plottable.Accessor<number | Date>,
+ tooltipFormatter: (d: number) => string;
+ /* tslint:enable */
+ }
+
+ function stepX(): XComponents {
+ var scale = new Plottable.Scales.Linear();
+ var axis = new Plottable.Axes.Numeric(scale, "bottom");
+ var formatter = Plottable.Formatters.siSuffix(STEP_AXIS_FORMATTER_PRECISION);
+ axis.formatter(formatter);
+ return {
+ scale: scale,
+ axis: axis,
+ accessor: accessorize("1"),
+ tooltipFormatter: formatter,
+ };
+ }
+
+ function wallX(): XComponents {
+ var scale = new Plottable.Scales.Time();
+ var formatter = Plottable.Formatters.time("%a %b %e, %H:%M:%S");
+ return {
+ scale: scale,
+ axis: new Plottable.Axes.Time(scale, "bottom"),
+ accessor: (d: any, index: number, dataset: Plottable.Dataset) => {
+ return d[0] * 1000; // convert seconds to ms
+ },
+ tooltipFormatter: (d: number) => formatter(new Date(d)),
+ };
+ }
+
+ function relativeX(): XComponents {
+ var scale = new Plottable.Scales.Linear();
+ var formatter = (n: number) => {
+ var days = Math.floor(n / 24);
+ n -= (days * 24);
+ var hours = Math.floor(n);
+ n -= hours;
+ n *= 60;
+ var minutes = Math.floor(n);
+ n -= minutes;
+ n *= 60;
+ var seconds = Math.floor(n);
+ return days + "d " + hours + "h " + minutes + "m " + seconds + "s";
+ };
+ return {
+ scale: scale,
+ axis: new Plottable.Axes.Numeric(scale, "bottom"),
+ accessor: (d: any, index: number, dataset: Plottable.Dataset) => {
+ var data = dataset && dataset.data();
+ // I can't imagine how this function would be called when the data is empty
+ // (after all, it iterates over the data), but lets guard just to be safe.
+ var first = data.length > 0 ? data[0][0] : 0;
+ return (d[0] - first) / (60 * 60); // convert seconds to hours
+ },
+ tooltipFormatter: formatter,
+ };
+ }
+
+ function getXComponents(xType: string): XComponents {
+ switch (xType) {
+ case "step":
+ return stepX();
+ case "wall_time":
+ return wallX();
+ case "relative":
+ return relativeX();
+ default:
+ throw new Error("invalid xType: " + xType);
+ }
+ }
+}
diff --git a/tensorflow/tensorboard/components/tf-event-dashboard/tf-color-scale.html b/tensorflow/tensorboard/components/tf-event-dashboard/tf-color-scale.html
new file mode 100644
index 0000000000..b559cab9cd
--- /dev/null
+++ b/tensorflow/tensorboard/components/tf-event-dashboard/tf-color-scale.html
@@ -0,0 +1,69 @@
+<link rel="import" href="../../bower_components/polymer/polymer.html">
+<link rel="import" href="../imports/lodash.html">
+<link rel="import" href="../imports/plottable.html">
+
+<!--
+tf-color-scale is a plumbing component that takes in an array of runs, and produces
+an upward-bindable outColorScale, which is a color scale mapping from those runs to
+a set of colors.
+
+Right now, the colors are hard-coded and must be manually synchronized with the colors expected in
+tf-run-selector. TODO(danmane): we should enshrine the mapping elsewhere.
+-->
+<dom-module id="tf-color-scale">
+ <script>
+ (function() {
+ // TODO(danmane) - get Plottable team to make an API point for this
+ Plottable.Scales.Color._LOOP_LIGHTEN_FACTOR = 0;
+ var classColorPairs = [
+ ["light-blue", "#03A9F4"],
+ ["red" , "#f44366"],
+ ["green" , "#4CAF50"],
+ ["purple" , "#9c27b0"],
+ ["teal" , "#009688"],
+ ["pink" , "#e91e63"],
+ ["orange" , "#ff9800"],
+ ["brown" , "#795548"],
+ ["indigo" , "#3f51b5"],
+ ];
+ var classes = _.pluck(classColorPairs, 0);
+ var colors = _.pluck(classColorPairs, 1);
+ Polymer({
+ is: "tf-color-scale",
+ properties: {
+ runs: Array,
+ outClassScale: {
+ type: Object,
+ notify: true,
+ readOnly: true,
+ value: function() {
+ return new d3.scale.ordinal().range(classes);
+ },
+ // TODO(danmane): the class scale will not update if the domain changes.
+ // this behavior is inconsistent with the ColorScale.
+ // in practice we don't change runs after initial load so it's not currently an issue
+ },
+ outColorScale: {
+ type: Object,
+ notify: true,
+ readOnly: true,
+ value: function() {
+ var scale = new Plottable.Scales.Color().range(colors);
+ scale.onUpdate(this._notifyColorScaleDomainChange.bind(this));
+ return scale;
+ },
+ },
+ },
+ observers: ["_changeRuns(runs.*)"],
+ _changeRuns: function(runs) {
+ this.outClassScale.domain(this.runs);
+ this.outColorScale.domain(this.runs);
+ },
+ _notifyColorScaleDomainChange: function() {
+ this.notifyPath("outColorScale.domain_path", this.outColorScale.domain());
+ this.outColorScale.domain_path = null;
+ },
+ });
+ })();
+ </script>
+</dom-module>
diff --git a/tensorflow/tensorboard/components/tf-event-dashboard/tf-data-coordinator.html b/tensorflow/tensorboard/components/tf-event-dashboard/tf-data-coordinator.html
new file mode 100644
index 0000000000..454dff4a9e
--- /dev/null
+++ b/tensorflow/tensorboard/components/tf-event-dashboard/tf-data-coordinator.html
@@ -0,0 +1,29 @@
+<link rel="import" href="../../bower_components/polymer/polymer.html">
+<link rel="import" href="../imports/plottable.html">
+<link rel="import" href="../imports/lodash.html">
+
+<!--
+tf-data-coordinator is a simple plumbing component that takes in a value url generator
+(a function that takes a tag and a run and returns a url), and produces an upward-bindable
+TF.DataCoordinator for consumption elsewhere.
+-->
+<dom-module id="tf-data-coordinator">
+ <script src="dataCoordinator.js"></script>
+ <script src="dataset.js"></script>
+ <script>
+ Polymer({
+ is: "tf-data-coordinator",
+ properties: {
+ urlGenerator: Object,
+ outDataCoordinator: {
+ type: Object,
+ computed: "getCoordinator(urlGenerator, runToTag)",
+ notify: true,
+ },
+ },
+ getCoordinator: function(generator, runToTag) {
+ return new TF.DataCoordinator(generator, runToTag);
+ }
+ });
+ </script>
+</dom-module>
diff --git a/tensorflow/tensorboard/components/tf-event-dashboard/tf-event-dashboard.html b/tensorflow/tensorboard/components/tf-event-dashboard/tf-event-dashboard.html
new file mode 100644
index 0000000000..534f62072f
--- /dev/null
+++ b/tensorflow/tensorboard/components/tf-event-dashboard/tf-event-dashboard.html
@@ -0,0 +1,208 @@
+<link rel="import" href="../../bower_components/polymer/polymer.html">
+<link rel="import" href="tf-data-coordinator.html">
+<link rel="import" href="tf-tooltip-coordinator.html">
+<link rel="import" href="tf-run-selector.html">
+<link rel="import" href="tf-x-type-selector.html">
+<link rel="import" href="../tf-dashboard-common/tf-run-generator.html">
+<link rel="import" href="tf-color-scale.html">
+<link rel="import" href="../tf-dashboard-common/tf-url-generator.html">
+<link rel="import" href="../tf-dashboard-common/tf-dashboard-layout.html">
+<link rel="import" href="../tf-dashboard-common/tensorboard-color.html">
+<link rel="import" href="../tf-dashboard-common/dashboard-style.html">
+<link rel="import" href="../tf-dashboard-common/tf-downloader.html">
+<link rel="import" href="../tf-categorizer/tf-categorizer.html">
+<link rel="import" href="tf-chart.html">
+<link rel="import" href="../tf-collapsable-pane/tf-collapsable-pane.html">
+<link rel="import" href="../../bower_components/iron-collapse/iron-collapse.html">
+<link rel="import" href="../../bower_components/paper-icon-button/paper-icon-button.html">
+<link rel="import" href="../imports/lodash.html">
+<link rel="import" href="../tf-dashboard-common/warning-style.html">
+
+<!--
+tf-event-dashboard is a complete frontend that loads runs from a backend,
+and creates chart panes that display data for those runs.
+
+It provides a categorizer, run selector, and x type selector, by which the user
+can customize how data is organized and displayed.
+
+Each chart has a button that can toggle whether it is "selected"; selectedRuns
+charts are larger.
+
+Organizationally, the #plumbing div contains components that have no concrete
+manifestation and just effect data bindings or data loading. The #sidebar contains
+shared controls like the tf-categorizer, tf-run-selector, and tf-x-type-selector.
+The #center div contains tf-charts embedded inside tf-collapsable-panes.
+-->
+<dom-module id="tf-event-dashboard">
+ <template>
+ <div id="plumbing">
+ <tf-url-generator
+ out-runs-url="{{runsUrl}}"
+ out-scalars-url-generator="{{scalarsUrlGen}}"
+ id="urlGenerator"
+ ></tf-url-generator>
+
+ <tf-data-coordinator
+ id="dataCoordinator"
+ url-generator="[[scalarsUrlGen]]"
+ run-to-tag="[[runToScalars]]"
+ color-scale="[[colorScale]]"
+ out-data-coordinator="{{dataCoordinator}}"
+ /></tf-data-coordinator>
+
+ <tf-run-generator
+ id="runGenerator"
+ url="[[runsUrl]]"
+ out-run-to-scalars="{{runToScalars}}"
+ /></tf-run-generator>
+
+ <tf-color-scale
+ id="colorScale"
+ runs="[[_runs]]"
+ out-color-scale="{{colorScale}}"
+ out-class-scale="{{classScale}}"
+ ></tf-color-scale>
+
+ <tf-tooltip-coordinator
+ id="tooltipCoordinator"
+ out-tooltip-updater="{{tooltipUpdater}}"
+ out-tooltip-map="{{tooltipMap}}"
+ out-x-value="{{tooltipXValue}}"
+ out-closest-run="{{closestRun}}"
+ ></tf-tooltip-coordinator>
+
+ </div>
+
+ <tf-dashboard-layout>
+ <div class="sidebar">
+ <tf-categorizer
+ id="categorizer"
+ tags="[[_visibleTags]]"
+ categories="{{categories}}"
+ ></tf-categorizer>
+ <span id="download-option">
+ Show Data Download Links:
+ <paper-toggle-button checked="{{_show_download_links}}"></paper-toggle-button>
+ </span>
+
+ <tf-x-type-selector
+ id="xTypeSelector"
+ out-x-type="{{xType}}"
+ ></tf-x-type-selector>
+
+ <tf-run-selector
+ id="runSelector"
+ runs="[[_runs]]"
+ class-scale="[[classScale]]"
+ out-selected="{{selectedRuns}}"
+ tooltips="[[tooltipMap]]"
+ closest-run="[[closestRun]]"
+ x-value="[[tooltipXValue]]"
+ x-type="[[xType]]"
+ ></tf-run-selector>
+
+ </div>
+ <div class="center">
+ <template is="dom-if" if="[[!categories.length]]">
+ <div class="warning">
+ <p>
+ No scalar summary tags were found.
+ </p>
+ <p>
+ Maybe data hasn't loaded yet, or maybe you need
+ to add some <code>tf.scalar_summary</code> ops to your graph, and
+ serialize them using the <code>tf.training.summary_io.SummaryWriter</code>.
+ </p>
+ </div>
+ </template>
+ <template is="dom-repeat" items="[[categories]]">
+ <tf-collapsable-pane name="[[item.name]]" count="[[item.tags.length]]">
+ <div class="layout horizontal wrap">
+ <template is="dom-repeat" items="[[item.tags]]" as="tag">
+ <div class="card">
+ <span class="card-title">[[tag]]</span>
+ <div class="card-content">
+ <tf-chart
+ tag="[[tag]]"
+ type="scalar"
+ id="chart"
+ selected-runs="[[selectedRuns]]"
+ x-type="[[xType]]"
+ data-coordinator="[[dataCoordinator]]"
+ color-scale="[[colorScale]]"
+ on-keyup="toggleSelected"
+ tabindex="2"
+ tooltip-updater="[[tooltipUpdater]]"
+ ></tf-chart>
+ <paper-icon-button
+ class="expand-button"
+ shift$="[[_show_download_links]]"
+ icon="fullscreen"
+ on-tap="toggleSelected"
+ ></paper-icon-button>
+ </div>
+ <template is="dom-if" if="[[_show_download_links]]">
+ <div class="card-bottom-row">
+ <tf-downloader
+ selected-runs="[[selectedRuns]]"
+ tag="[[tag]]"
+ url-fn="[[scalarsUrlGen]]"
+ run-to-tag="[[runToScalars]]"
+ >
+ </tf-downloader>
+ </div>
+ </template>
+ </div>
+ </template>
+ </div>
+ </tf-collapsable-pane>
+ </template>
+ </div>
+ </tf-dashboard-layout>
+
+ <style include="dashboard-style"></style>
+ <style include="warning-style"></style>
+
+ </template>
+
+ <script>
+ Polymer({
+ is: "tf-event-dashboard",
+ properties: {
+ _runs: {
+ type: Array,
+ computed: "_getRuns(runToScalars)",
+ },
+ _visibleTags: {
+ type: Array,
+ computed: "_getVisibleTags(selectedRuns.*, runToScalars.*)"
+ },
+ _show_download_links: Boolean,
+ },
+ observers: ['redraw(_show_download_links)'],
+ redraw: function(_show_download_links) {
+ var els = this.getElementsByTagName("tf-chart");
+ for (var i=0; i<els.length; i++) {
+ els[i].redraw();
+ }
+ },
+ _getRuns: function(runToScalars) {
+ return _.keys(runToScalars);
+ },
+ _getVisibleTags: function(selectedRunsChange, runsToScalarsChange) {
+ var keys = selectedRunsChange.base;
+ var dict = runsToScalarsChange.base;
+ return _.union.apply(null, keys.map(function(k) {return dict[k]}));
+ },
+ toggleSelected: function(e) {
+ var currentTarget = Polymer.dom(e.currentTarget);
+ var parentDiv = currentTarget.parentNode.parentNode;
+ parentDiv.classList.toggle("selected");
+ var chart = currentTarget.previousElementSibling;
+ if (chart) {
+ chart.redraw();
+ }
+ },
+ });
+ </script>
+</dom-module>
diff --git a/tensorflow/tensorboard/components/tf-event-dashboard/tf-run-selector.html b/tensorflow/tensorboard/components/tf-event-dashboard/tf-run-selector.html
new file mode 100644
index 0000000000..92cecb2e5a
--- /dev/null
+++ b/tensorflow/tensorboard/components/tf-event-dashboard/tf-run-selector.html
@@ -0,0 +1,104 @@
+<link rel="import" href="../../bower_components/polymer/polymer.html">
+<link rel="import" href="../../bower_components/paper-checkbox/paper-checkbox.html">
+<link rel="import" href="../imports/lodash.html">
+<link rel="import" href="../tf-dashboard-common/scrollbar-style.html">
+<link rel="import" href="../tf-multi-checkbox/tf-multi-checkbox.html">
+
+<!--
+tf-run-selector creates a set of checkboxes to display which runs are selected.
+It also displays tooltips.
+
+Properties in:
+- runs: Array of strings representing the runs that may be selected
+- tooltips: An object that maps from a run to the associated tooltip string.
+When tooltips are available, runs that have no associated tooltip will be
+hidden. When tooltips are available, the runs will be sorted by their tooltip.
+- closestRun: The name of the run that is closest to the cursor (present when
+tooltips are active). It will be highlighted
+- classScale: An object (generated by tf-dashboard-common/tf-color-scale) that
+maps from a run name to a class name, which will be used to color the run.
+- xValue: The string that represents the x-value associated with the tooltips.
+- xType: The string that describes what kind of data is displayed on the x axis.
+
+Properties out:
+- outSelected: The array of run names that are currently checked by the user.
+
+-->
+<dom-module id="tf-run-selector">
+ <template>
+ <div id="top-text">
+ <template is="dom-if" if="[[xValue]]">
+ <div class="x-tooltip tooltip-container">
+ <div class="x-tooltip-label">[[xType]]</div>
+ <div class="x-tooltip-value">[[xValue]]</div>
+ </div>
+ </template>
+ <template is="dom-if" if="[[!xValue]]">
+ <div id="tooltip-help" class="tooltip-container">
+ Selected Runs:
+ </div>
+ </template>
+ </div>
+ <tf-multi-checkbox
+ names="[[runs]]"
+ tooltips="[[tooltips]]"
+ highlights="[[_arrayify(closestRun)]]"
+ out-selected="{{outSelected}}"
+ class-scale="[[classScale]]"
+ hide-missing-tooltips
+ ></tf-multi-checkbox>
+ <style>
+ :host {
+ display: flex;
+ flex-direction: column;
+ padding-bottom: 10px;
+ box-sizing: border-box;
+ }
+ #top-text {
+ width: 100%;
+ flex-grow: 0;
+ flex-shrink: 0;
+ padding-left: 35px;
+ padding-right: 16px;
+ padding-bottom: 6px;
+ box-sizing: border-box;
+ color: var(--paper-grey-800);
+ }
+ tf-multi-checkbox {
+ display: flex;
+ flex-grow: 1;
+ flex-shrink: 1;
+ height: 0px; /* hackhack So the flex-grow takes over and gives it space */
+ }
+ .x-tooltip {
+ display: flex;
+ flex-direction: row;
+ }
+ .x-tooltip-label {
+ flex-grow: 1;
+ align-self: flex-start;
+ }
+ .x-tooltip-value {
+ align-self: flex-end;
+ }
+ </style>
+ </template>
+ <script>
+ Polymer({
+ is: "tf-run-selector",
+ properties: {
+ outSelected: {type: Array, notify: true},
+ // runs: an array of strings, representing the run names that may be chosen
+ runs: Array,
+ tooltips: {type: Object, value: null}, // {[run: string]: string}
+ xValue: {type: String, value: null}, // the string representing run's x val
+ xType: String, // string: relative, stpe, wall_time
+ classScale: Object, // map from run name to color class (css)
+ closestRun: {type: String, value: null}, // which run has a value closest to mouse coordinate
+ },
+ _arrayify: function(item) {
+ return [item];
+ },
+ });
+ </script>
+</dom-module>
diff --git a/tensorflow/tensorboard/components/tf-event-dashboard/tf-tooltip-coordinator.html b/tensorflow/tensorboard/components/tf-event-dashboard/tf-tooltip-coordinator.html
new file mode 100644
index 0000000000..23b0cba87a
--- /dev/null
+++ b/tensorflow/tensorboard/components/tf-event-dashboard/tf-tooltip-coordinator.html
@@ -0,0 +1,48 @@
+<link rel="import" href="../../bower_components/polymer/polymer.html">
+
+<!-- tf-tooltip-coordinator is a plumbing component that provides a TooltipUpdater,
+which is a function that allows modification of the values within the tooltip-coordinator
+from javascript logic elsewhere. It then propagates the values to other Polymer components.
+
+Thus, the tooltip-coordinator allows many JS pieces of the application to modify a single
+piece of shared state.
+ -->
+<dom-module id="tf-tooltip-coordinator">
+ <script>
+ Polymer({
+ is: "tf-tooltip-coordinator",
+ properties: {
+ outTooltipUpdater: {
+ type: Function,
+ value: function() {
+ return (function(tooltipMap, xValue, closestRun) {
+ this._setOutTooltipMap(tooltipMap);
+ this._setOutXValue(xValue);
+ this._setOutClosestRun(closestRun);
+ }).bind(this);
+ },
+ notify: true,
+ readOnly: true,
+ },
+ outTooltipMap: {
+ // a {runName: tooltipValue} map, where runName and tooltipValue are strings.
+ type: Object,
+ notify: true,
+ readOnly: true,
+ },
+ outXValue: {
+ // a string representation of the closest x value for the tooltips
+ type: Number,
+ notify: true,
+ readOnly: true,
+ },
+ outClosestRun: {
+ // the name of the run that is closest to the user cursor (if any)
+ type: String,
+ notify: true,
+ readOnly: true,
+ },
+ },
+ });
+ </script>
+</dom-module>
diff --git a/tensorflow/tensorboard/components/tf-event-dashboard/tf-x-type-selector.html b/tensorflow/tensorboard/components/tf-event-dashboard/tf-x-type-selector.html
new file mode 100644
index 0000000000..078e456a0d
--- /dev/null
+++ b/tensorflow/tensorboard/components/tf-event-dashboard/tf-x-type-selector.html
@@ -0,0 +1,75 @@
+<link rel="import" href="../../bower_components/polymer/polymer.html">
+<link rel="import" href="../../bower_components/paper-button/paper-button.html">
+<link rel="import" href="../tf-dashboard-common/tensorboard-color.html">
+
+<!--
+tf-x-type-selector is a simple component that creates buttons labeled "step" and "wall",
+ and provides (as upward bindable) an outXType property that is either "step" or "wall_time".
+-->
+<dom-module id="tf-x-type-selector">
+ <template>
+ <div id="buttons">
+ <p>X Type: </p>
+ <paper-button
+ class="x-button selected"
+ id="step"
+ on-tap="_select"
+ raised
+ >
+ step
+ </paper-button>
+ <paper-button
+ class="x-button"
+ id="relative"
+ on-tap="_select"
+ >
+ relative
+ </paper-button>
+ <paper-button
+ class="x-button"
+ id="wall_time"
+ on-tap="_select"
+ >
+ wall
+ </paper-button>
+ </div>
+ <style>
+ .x-button {
+ width: 29%;
+ font-size: 14px;
+ background-color: var(--paper-grey-500);
+ margin-top: 5px;
+ color: white;
+ }
+
+ .x-button.selected {
+ font-weight: bold;
+ background-color: var(--tb-orange-strong) !important;
+ }
+
+ #buttons p {
+ text-align: center;
+ font-size: 12px;
+ margin: 0;
+ }
+ </style>
+ </template>
+ <script>
+ Polymer({
+ is: "tf-x-type-selector",
+ properties: {
+ outXType: {type: String, notify: true, readOnly: true, value: "step"},
+ },
+ _select: function(e) {
+ var _this = this;
+ ["step", "wall_time", "relative"].forEach(function(id) {
+ _this.$[id].raised = false;
+ _this.$[id].classList.remove("selected");
+ });
+ e.currentTarget.raised = true;
+ this._setOutXType(e.currentTarget.id);
+ e.currentTarget.classList.add("selected");
+ },
+ });
+ </script>
+</dom-module>
diff --git a/tensorflow/tensorboard/components/tf-graph-board/tf-graph-board.html b/tensorflow/tensorboard/components/tf-graph-board/tf-graph-board.html
new file mode 100644
index 0000000000..c053d6f7a7
--- /dev/null
+++ b/tensorflow/tensorboard/components/tf-graph-board/tf-graph-board.html
@@ -0,0 +1,152 @@
+<link rel="import" href="../../bower_components/polymer/polymer.html">
+<link rel="import" href="../tf-graph/tf-graph.html">
+<link rel="import" href="../tf-graph-info/tf-graph-info.html">
+<link rel="import" href="../../bower_components/paper-progress/paper-progress.html">
+<!-- Element for putting tf-graph and tf-graph-info side by side.
+
+Example
+
+<tf-graph-board graph=[[graph]]></tf-graph-board>
+
+-->
+
+<dom-module id="tf-graph-board">
+<template>
+<style>
+::host {
+ display: block;
+}
+
+/deep/ .close {
+ position: absolute;
+ cursor: pointer;
+ left: 15px;
+ bottom: 15px;
+}
+
+.container {
+ width: 100%;
+ height: 100%;
+ opacity: 1;
+}
+
+.container.loading {
+ cursor: progress;
+ opacity: 0.1;
+}
+
+.container.loading.error {
+ cursor: auto;
+}
+
+#info {
+ position: absolute;
+ right: 5px;
+ top: 5px;
+ padding: 0px;
+ max-width: 380px;
+ min-width: 320px;
+ background-color: rgba(255,255,255,0.9);
+ @apply(--shadow-elevation-2dp);
+}
+
+#main {
+ width: 100%;
+ height: 100%;
+}
+
+#progress-bar {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: center;
+ width: 100%;
+ position: absolute;
+ top: 40px;
+ left: 0;
+ font-size: 13px;
+}
+
+#progress-msg {
+ width: 400px;
+ margin-bottom: 5px;
+}
+
+paper-progress {
+ width: 400px;
+ --paper-progress-height: 6px;
+ --paper-progress-active-color: #f3913e;
+}
+</style>
+<template is="dom-if" if="[[_isNotComplete(progress)]]">
+ <div id="progress-bar">
+ <div id="progress-msg">[[progress.msg]]</div>
+ <paper-progress value="[[progress.value]]"></paper-progress>
+ </div>
+</template>
+<div class$="[[_getContainerClass(progress)]]">
+ <div id="main">
+ <tf-graph id="graph"
+ graph-hierarchy="[[graphHierarchy]]"
+ selected-node="{{_selectedNode}}"
+ highlighted-node="{{_highlightedNode}}"
+ color-by="[[colorBy]]"
+ color-by-params="{{colorByParams}}"
+ graph-name="[[graphName]]"
+ progress="[[progress]]"
+ ></tf-graph>
+ </div>
+ <div id="info">
+ <tf-graph-info id="graph-info"
+ title="selected"
+ graph-hierarchy="[[graphHierarchy]]"
+ graph="[[graph]]"
+ selected-node="{{_selectedNode}}"
+ highlighted-node="{{_highlightedNode}}"
+ ></tf-graph-info>
+ </div>
+</div>
+</template>
+</dom-module>
+
+<script>
+Polymer({
+ is: 'tf-graph-board',
+ properties: {
+ // Public API.
+ graphHierarchy: Object,
+ graph: Object,
+ graphName: String,
+ // True if the graph data has also run-time stats.
+ hasStats: Boolean,
+ /**
+ * @type {value: number, msg: string}
+ *
+ * A number between 0 and 100 denoting the % of progress
+ * for the progress bar and the displayed message.
+ */
+ progress: Object,
+ colorByParams: {
+ type: Object,
+ notify: true,
+ },
+ // Private API: Data routing between child components.
+ _selectedNode: String,
+ _highlightedNode: String,
+ },
+ /** True if the progress is not complete yet (< 100 %). */
+ _isNotComplete: function(progress) {
+ return progress.value < 100;
+ },
+ _getContainerClass: function(progress) {
+ var result = 'container';
+ if (progress.error) {
+ result += ' error';
+ }
+ if (this._isNotComplete(progress)) {
+ result += ' loading';
+ }
+ return result;
+ }
+});
+</script>
diff --git a/tensorflow/tensorboard/components/tf-graph-common/lib/colors.ts b/tensorflow/tensorboard/components/tf-graph-common/lib/colors.ts
new file mode 100644
index 0000000000..8912483c09
--- /dev/null
+++ b/tensorflow/tensorboard/components/tf-graph-common/lib/colors.ts
@@ -0,0 +1,133 @@
+module tf {
+
+/**
+ * Mapping from color palette name to color pallette, which contains
+ * exact colors for multiple states of a single color pallette.
+ */
+export let COLORS = [
+ {
+ "name": "Google Blue",
+ "color": "#4184f3",
+ "active": "#3a53c5",
+ "disabled": "#cad8fc"
+ },
+ {
+ "name": "Google Red",
+ "color": "#db4437",
+ "active": "#8f2a0c",
+ "disabled": "#e8c6c1"
+ },
+ {
+ "name": "Google Yellow",
+ "color": "#f4b400",
+ "active": "#db9200",
+ "disabled": "#f7e8b0"
+ },
+ {
+ "name": "Google Green",
+ "color": "#0f9d58",
+ "active": "#488046",
+ "disabled": "#c2e1cc"
+ },
+ {
+ "name": "Purple",
+ "color": "#aa46bb",
+ "active": "#5c1398",
+ "disabled": "#d7bce6"
+ },
+ {
+ "name": "Teal",
+ "color": "#00abc0",
+ "active": "#47828e",
+ "disabled": "#c2eaf2"
+ },
+ {
+ "name": "Deep Orange",
+ "color": "#ff6f42",
+ "active": "#ca4a06",
+ "disabled": "#f2cbba"
+ },
+ {
+ "name": "Lime",
+ "color": "#9d9c23",
+ "active": "#7f771d",
+ "disabled": "#f1f4c2"
+ },
+ {
+ "name": "Indigo",
+ "color": "#5b6abf",
+ "active": "#3e47a9",
+ "disabled": "#c5c8e8"
+ },
+ {
+ "name": "Pink",
+ "color": "#ef6191",
+ "active": "#ca1c60",
+ "disabled": "#e9b9ce"
+ },
+ {
+ "name": "Deep Teal",
+ "color": "#00786a",
+ "active": "#2b4f43",
+ "disabled": "#bededa"
+ },
+ {
+ "name": "Deep Pink",
+ "color": "#c1175a",
+ "active": "#75084f",
+ "disabled": "#de8cae"
+ },
+ {
+ "name": "Gray",
+ "color": "#9E9E9E", // 500
+ "active": "#424242", // 800
+ "disabled": "F5F5F5" // 100
+ }
+].reduce((m, c) => {
+ m[c.name] = c;
+ return m;
+}, {});
+
+/**
+ * Mapping from op category to color palette name
+ * e.g., OP_GROUP_COLORS["state_ops"] = "Google Blue";
+ */
+export let OP_GROUP_COLORS = [
+ {
+ color: "Google Red",
+ groups: ["gen_legacy_ops", "legacy_ops", "legacy_flogs_input",
+ "legacy_image_input", "legacy_input_example_input",
+ "legacy_sequence_input", "legacy_seti_input_input"]
+ }, {
+ color: "Deep Orange",
+ groups: ["constant_ops"]
+ }, {
+ color: "Indigo",
+ groups: ["state_ops"]
+ }, {
+ color: "Purple",
+ groups: ["nn_ops", "nn"]
+ }, {
+ color: "Google Green",
+ groups: ["math_ops"]
+ }, {
+ color: "Lime",
+ groups: ["array_ops"]
+ }, {
+ color: "Teal",
+ groups: ["control_flow_ops", "data_flow_ops"]
+ }, {
+ color: "Pink",
+ groups: ["summary_ops"]
+ }, {
+ color: "Deep Pink",
+ groups: ["io_ops"]
+ }
+].reduce((m, c) => {
+ c.groups.forEach(function(group) {
+ m[group] = c.color;
+ });
+ return m;
+}, {});
+
+}
diff --git a/tensorflow/tensorboard/components/tf-graph-common/lib/common.ts b/tensorflow/tensorboard/components/tf-graph-common/lib/common.ts
new file mode 100644
index 0000000000..ed148bf719
--- /dev/null
+++ b/tensorflow/tensorboard/components/tf-graph-common/lib/common.ts
@@ -0,0 +1,236 @@
+/// <reference path="../../../typings/tsd.d.ts" />
+
+declare module graphlib {
+
+ interface GraphOptions {
+ name: string;
+ /**
+ * Direction for rank nodes. Can be TB, BT, LR, or RL, where T = top,
+ * B = bottom, L = left, and R = right.
+ */
+ rankdir: string;
+ type: string|number;
+ /** Number of pixels between each rank in the layout. */
+ ranksep?: number;
+ /** Number of pixels that separate nodes horizontally in the layout. */
+ nodesep?: number;
+ }
+
+ export interface EdgeObject {
+ v: string;
+ w: string;
+ name?: string;
+ }
+
+ export class Graph<N, E> {
+ constructor(opt?: Object);
+ setNode(name: string, value?: N): void;
+ hasNode(name: string): boolean;
+ setEdge(fromName: string, toName: string, value?: E): void;
+ hasEdge(fromName: string, toName: string): boolean;
+ edge(fromName: string, toName: string): E;
+ edge(edgeObject: EdgeObject): E;
+ removeEdge(v: string, w: string): void;
+ nodes(): string[];
+ node(name: string): N;
+ removeNode(name: string): void;
+ setGraph(graphOptions: GraphOptions): void;
+ graph(): GraphOptions;
+ nodeCount(): number;
+ neighbors(name: string): string[];
+ successors(name: string): string[];
+ predecessors(name: string): string[];
+ edges(): EdgeObject[];
+ outEdges(name: string): E[];
+ inEdges(name: string): E[];
+ /** Returns those nodes in the graph that have no in-edges. Takes O(|V|) time. */
+ sources(): string[];
+ /**
+ * Remove the node with the id v in the graph or do nothing if
+ * the node is not in the graph. If the node was removed this
+ * function also removes any incident edges. Returns the graph,
+ * allowing this to be chained with other functions. Takes O(|E|) time.
+ */
+ removeNode(name: string): Graph<N, E>;
+ setParent(name: string, parentName: string): void;
+ }
+}
+
+module tf {
+/**
+ * Recommended delay (ms) when running an expensive task asynchronously
+ * that gives enough time for the progress bar to update its UI.
+ */
+const ASYNC_TASK_DELAY = 20;
+
+export function time<T>(msg: string, task: () => T) {
+ let start = Date.now();
+ let result = task();
+ /* tslint:disable */
+ console.log(msg, ":", Date.now() - start, "ms");
+ /* tslint:enable */
+ return result;
+}
+
+/**
+ * Tracks task progress. Each task being passed a progress tracker needs
+ * to call the below-defined methods to notify the caller about the gradual
+ * progress of the task.
+ */
+export interface ProgressTracker {
+ updateProgress(incrementValue: number): void;
+ setMessage(msg: string): void;
+ reportError(msg: string): void;
+}
+
+/**
+ * Creates a tracker for a subtask given the parent tracker, the total progress
+ * of the subtask and the subtask message. The parent task should pass a
+ * subtracker to its subtasks. The subtask reports its own progress which
+ * becames relative to the main task.
+ */
+export function getSubtaskTracker(parentTracker: ProgressTracker,
+ impactOnTotalProgress: number, subtaskMsg: string): ProgressTracker {
+ return {
+ setMessage: function(progressMsg) {
+ // The parent should show a concatenation of its message along with
+ // its subtask tracker message.
+ parentTracker.setMessage(subtaskMsg + " : " + progressMsg);
+ },
+ updateProgress: function(incrementValue) {
+ // Update the parent progress relative to the child progress.
+ // For example, if the sub-task progresses by 30%, and the impact on the
+ // total progress is 50%, then the task progresses by 30% * 50% = 15%.
+ parentTracker
+ .updateProgress(incrementValue * impactOnTotalProgress / 100);
+ },
+ reportError: function(errorMsg) {
+ // The parent should show a concatenation of its message along with
+ // its subtask error message.
+ parentTracker.reportError(subtaskMsg + " : " + errorMsg);
+ }
+ };
+}
+
+/**
+ * Runs an expensive task asynchronously and returns a promise of the result.
+ */
+export function runAsyncTask<T>(msg: string, incProgressValue: number,
+ task: () => T, tracker: ProgressTracker): Promise<T> {
+ return new Promise((resolve, reject) => {
+ // Update the progress message to say the current running task.
+ tracker.setMessage(msg);
+ // Run the expensive task with a delay that gives enough time for the
+ // UI to update.
+ setTimeout(function() {
+ try {
+ var result = tf.time(msg, task);
+ // Update the progress value.
+ tracker.updateProgress(incProgressValue);
+ // Return the result to be used by other tasks.
+ resolve(result);
+ } catch (e) {
+ reject(result);
+ }
+ }, ASYNC_TASK_DELAY);
+ });
+}
+
+/**
+ * Returns a query selector with escaped special characters that are not
+ * allowed in a query selector.
+ */
+export function escapeQuerySelector(querySelector: string): string {
+ return querySelector.replace( /([:.\[\],/\\\(\)])/g, "\\$1" );
+}
+
+/**
+ * TensorFlow node definition as definied in the graph proto file.
+ */
+export interface TFNode {
+ /** Name of the node */
+ name: string;
+ /** List of nodes that are inputs for this node. */
+ input: string[];
+ /** The name of the device where the computation will run. */
+ device: string;
+ /** The name of the operation associated with this node. */
+ op: string;
+ /** List of attributes that describe/modify the operation. */
+ attr: {key: string, value: Object}[];
+}
+
+/**
+ * TensorFlow stats file definition as defined in the stats proto file.
+ */
+export interface TFStats {
+ devStats: {device: string, nodeStats: TFNodeStats[]}[];
+}
+
+/**
+ * TensorFlow stats for a node as defined in the stats proto file.
+ */
+export interface TFNodeStats {
+ nodeName: string;
+ // The next 4 properties are currently stored as string in json
+ // and must be parsed.
+ allStartMicros: number;
+ opStartRelMicros: number;
+ opEndRelMicros: number;
+ allEndRelMicros: number;
+ memory: {
+ allocatorName: string;
+ totalBytes: number; // Stored as string in json and should be parsed.
+ peakBytes: number; // Stored as string in json and should be parsed.
+ }[];
+ /** Output sizes recorded for a single execution of a graph node */
+ output: TFNodeOutput[];
+ timelineLabel: string;
+ scheduledMicros: string;
+ threadId: string;
+}
+
+/**
+ * Description for the output tensor(s) of an operation in the graph.
+ */
+export interface TFNodeOutput {
+ slot: number; // Stored as string in json and should be parsed.
+ /** Was the tensor allocated by this Op or a previous computation */
+ allocationType: string;
+ tensorDescription: {
+ /** Data type of tensor elements */
+ dtype: string;
+ /** Shape of the tensor */
+ shape: {
+ /**
+ * Dimensions of the tensor, such as [{name: "input", size: 30},
+ * {name: "output", size: 40}] for a 30 x 40 2D tensor. The names
+ * are optional. The order of entries in "dim" matters: It indicates
+ * the layout of the values in the tensor in-memory representation.
+ */
+ dim: {
+ /** Size of the tensor in that dimension */
+ size: number, // Stored as string in json and should be parsed.
+ /** Optional name of the tensor dimension */
+ name?: string
+ }[];
+ };
+ /** Information about the size and allocator used for the data */
+ allocationDescription: {
+ // The next 2 properties are stored as string in json and
+ // should be parsed.
+ /** Total number of bytes requested */
+ requestedBytes: number;
+ /** Total number of bytes allocated, if known */
+ allocatedBytes?: number;
+ /** Name of the allocator used */
+ allocatorName: string;
+ };
+ };
+}
+} // close module tf
+
+/**
+ * Declaring dagre var used for dagre layout.
+ */
+declare var dagre: { layout(graph: graphlib.Graph<any, any>): void; };
diff --git a/tensorflow/tensorboard/components/tf-graph-common/lib/graph.ts b/tensorflow/tensorboard/components/tf-graph-common/lib/graph.ts
new file mode 100644
index 0000000000..64e537154b
--- /dev/null
+++ b/tensorflow/tensorboard/components/tf-graph-common/lib/graph.ts
@@ -0,0 +1,889 @@
+/// <reference path="../../../typings/tsd.d.ts" />
+/// <reference path="common.ts" />
+module tf.graph {
+
+/** Delimiter used in node names to denote namespaces. */
+export const NAMESPACE_DELIM = "/";
+const FULL_GRAPH_NAME = "fullGraph";
+export const ROOT_NAME = "__root__";
+
+// Separator between the source and the destination name of the edge.
+export const EDGE_KEY_DELIM = "--";
+
+export enum GraphType {FULL, EMBEDDED, META, SERIES, CORE, SHADOW, BRIDGE,
+ EDGE};
+export enum NodeType {META, OP, SERIES, BRIDGE, ELLIPSIS};
+
+/**
+ * A BaseEdge is the label object (in the graphlib sense) for an edge in the
+ * original, full graph produced after parsing. Subsequent graphs, like those
+ * which belong to Metanodes, should not use BaseEdge objects, but instead
+ * contain Metaedges (which in turn may contain any number of BaseEdges).
+ */
+export interface BaseEdge extends graphlib.EdgeObject {
+ isControlDependency: boolean;
+ isReferenceEdge: boolean;
+}
+
+/**
+ * A SlimGraph is inspired by graphlib.Graph, but having only the functionality
+ * that we need.
+ */
+export class SlimGraph {
+ nodes: { [nodeName: string]: OpNode };
+ edges: BaseEdge[];
+
+ constructor() {
+ this.nodes = {};
+ this.edges = [];
+ }
+}
+
+interface NormalizedInput {
+ name: string;
+ hasNumberPart: boolean;
+ isControlDependency: boolean;
+}
+
+interface BuildParams {
+ enableEmbedding: boolean;
+ inEmbeddingTypes: string[];
+ outEmbeddingTypes: string[];
+ refEdges: { [inputEdge: string]: boolean };
+}
+
+/**
+ * The most basic information about a node in the hierarchical graph.
+ */
+export interface Node {
+ /** The name of the node, used frequently to look up nodes by name. */
+ name: string;
+ /** Which type of node this is. */
+ type: NodeType;
+ /**
+ * Whether this node is a type that may contain other nodes. Those types
+ * should extend from GroupNode.
+ *
+ * For an OpNode, isGroupNode will be false, even though it may have
+ * embeddings. These embedding Nodes will have their parentNode set to the
+ * OpNode. However, embeddings are later rendered as annotations, not as
+ * children to be made visible on expansion (like a Metanode or SeriesNode).
+ */
+ isGroupNode: boolean;
+ /**
+ * The number of nodes this node represents. For OpNodes, this will be 1, and
+ * for GroupNodes it will be a count of the total number of descendents it
+ * contains.
+ */
+ cardinality: number;
+ /**
+ * The Node which is this Node's parent. This is of type Node and not
+ * GroupNode because of embeddings, which will have a parent OpNode.
+ */
+ parentNode: Node;
+ /** Runtime execution stats for this node, if available */
+ stats: NodeStats;
+}
+
+export interface OpNode extends Node {
+ op: string;
+ device: string;
+ attr: {key: string, value: Object}[];
+ inputs: NormalizedInput[];
+ inEmbeddings: OpNode[];
+ outEmbeddings: OpNode[];
+}
+
+export interface BridgeNode extends Node {
+ /**
+ * Whether this bridge node represents edges coming into its parent node.
+ */
+ inbound: boolean;
+}
+
+/**
+ * A node that is used when there are more than the maximum number of allowed
+ * annotations hanging off of a node. This node represents an ellipsis
+ * annotation, indicating a number of additional annotations.
+ */
+export interface EllipsisNode extends Node {
+ /**
+ * The number of nodes this ellipsis represents.
+ */
+ numMoreNodes: number;
+
+ /**
+ * Sets the number of nodes this ellipsis represents and changes the node
+ * name accordingly.
+ */
+ setNumMoreNodes(numNodes: number);
+}
+
+export interface GroupNode extends Node {
+ /**
+ * The metagraph contains nodes and metaedges between the immediate children
+ * of this group. The node label objects may be other GroupNodes (like
+ * SeriesNodes and Metanodes) or individual OpNodes. All edge label objects
+ * are Metaedges, each of which contains references to the original
+ * BaseEdge(s) from which it was created.
+ */
+ metagraph: graphlib.Graph<GroupNode|OpNode, Metaedge>;
+
+ /**
+ * The bridgegraph contains only edges which link immediate children of this
+ * group with nodes outside of the metagraph. As in the metagraph, all edge
+ * label objects are Metaedges which contain references to the original
+ * BaseEdge(s) that contribute to it.
+ *
+ * For a Metaedge in the bridgegraph, its external endpoint will be the same
+ * as the metagraph edge from which it came. This is most easily explained
+ * by example.
+ *
+ * Consider an original graph that contains a BaseEdge A/B/C->Z/Y/X.
+ *
+ * +-------+ (BaseEdge) +-------+
+ * | A/B/C |>----------------->| Z/Y/X |
+ * +-------+ +-------+
+ *
+ * When we construct the Root's metagraph, it will contain nodes for A and Z,
+ * and a Metaedge A->Z. The A->Z Metaedge will contain the original BaseEdge
+ * A/B/C->Z/Y/X in its baseEdgeGraph. The Root's bridgegraph will always be
+ * empty.
+ *
+ * +---+ (Root.metagraph edge) +---+
+ * | A |>--------------------------->| Z |
+ * +---+ +---+
+ *
+ * Now consider the Metanode A. Its metagraph will contain a Metanode for A/B
+ * and no edges. A's bridgegraph will have one Metaedge from A/B->Z, which
+ * was derived from the Root's Metaedge A->Z. That Metaedge will contain the
+ * original BaseEdge in its baseEdgeGraph.
+ *
+ * +---------+
+ * | A |
+ * | +---+ | (A.bridgegraph edge) +---+
+ * | | B |>---------------------------->| Z |
+ * | +---+ | +---+
+ * +---------+
+ *
+ * Finally, consider the Metanode A/B. Its metagraph will contain a Metanode
+ * for A/B/C and again no edges. A/B's bridgegraph will have one Metaedge
+ * from A/B/C->Z, which was derived from A's bridgegraph Metaedge A/B->Z.
+ * As before, the A/B/C->Z Metaedge will contain the original BaseEdge in its
+ * baseEdgeGraph.
+ *
+ * +---------------+
+ * | A |
+ * | +---------+ |
+ * | | B | |
+ * | | +---+ | | (A/B.bridgegraph edge) +---+
+ * | | | C |>----------------------------------->| Z |
+ * | | +---+ | | +---+
+ * | +---------+ |
+ * +---------------+
+ *
+ * Likewise, under the Metanode Z and Z/Y, to compute the bridgegraph, we'll
+ * end up with Metaedges A->Z/Y and A->Z/Y/X respectively. So the original
+ * BaseEdge A/B/C->Z/Y/X becomes four different Metaedges in four different
+ * bridgegraphs:
+ *
+ * + A/B->Z in GroupNode A's bridgegraph,
+ * + A/B/C->Z in GroupNode A/B's bridgegraph,
+ * + A->Z/Y in GroupNode Z's bridgegraph, and
+ * + A->Z/Y/X in GroupNode Z/Y's bridgegraph.
+ *
+ * Considering any BaseEdge then, if N is the number of path segments in the
+ * source and M is the number of path semgents in the destination, then the
+ * total number of bridgegraph edges you could create would be (N-1)(M-1).
+ *
+ * For this reason, it is computationally expensive to generate all the
+ * bridgegraphs for all the Metanodes, and instead they should be computed
+ * on demand as needed.
+ */
+ bridgegraph: graphlib.Graph<GroupNode|OpNode, Metaedge>;
+
+ /**
+ * Stores how many times each device name appears in its children
+ * op nodes. Used to color group nodes by devices.
+ */
+ deviceHistogram: {[device: string]: number};
+
+ /**
+ * Flag indicating whether this GroupNode's metagraph contains any edges that
+ * are not control edges. Used to quickly determine how to draw a collapsed
+ * series (vertically or horizontally).
+ */
+ hasNonControlEdges: boolean;
+}
+
+export interface Metanode extends GroupNode {
+ depth: number;
+ templateId: string;
+ opHistogram: {[op: string]: number};
+ getFirstChild(): GroupNode|OpNode;
+ getRootOp(): OpNode;
+ /** Return name of all leaves inside a metanode. */
+ leaves(): string[];
+}
+
+export interface SeriesNode extends GroupNode {
+ hasLoop: boolean;
+ prefix: string;
+ suffix: string;
+ clusterId: number;
+ ids: number[];
+ parent: string;
+}
+
+export class EllipsisNodeImpl implements EllipsisNode {
+ name: string;
+ numMoreNodes: number;
+ stats: NodeStats;
+ type: NodeType;
+ isGroupNode: boolean;
+ cardinality: number;
+ parentNode: Node;
+
+ /**
+ * Constructs a new ellipsis annotation node.
+ *
+ * @param numNodes The number of additional annotations this node represents.
+ */
+ constructor(numNodes: number) {
+ this.type = NodeType.ELLIPSIS;
+ this.isGroupNode = false;
+ this.cardinality = 1;
+ this.parentNode = null;
+ this.stats = null;
+ this.setNumMoreNodes(numNodes);
+ }
+
+ setNumMoreNodes(numNodes: number) {
+ this.numMoreNodes = numNodes;
+ this.name = "... " + numNodes + " more";
+ }
+};
+
+/**
+ * A label object for nodes in the full graph and leaf nodes in the render
+ * graph.
+ */
+class OpNodeImpl implements OpNode {
+ name: string;
+ op: string;
+ device: string;
+ stats: NodeStats;
+ attr: {key: string, value: Object}[];
+ inputs: NormalizedInput[];
+ type: NodeType;
+ isGroupNode: boolean;
+ cardinality: number;
+ inEmbeddings: OpNode[];
+ outEmbeddings: OpNode[];
+ parentNode: Node;
+
+ /**
+ * Constructs a new Op node.
+ *
+ * @param rawNode The raw node.
+ * @param normalizedInputs An array of normalized
+ * inputs that denote the incoming edges to the current node. Each input
+ * contains the normalized name of the source node, whether it has a number
+ * part and whether it is a control dependency.
+ */
+ constructor(rawNode: tf.TFNode, normalizedInputs: NormalizedInput[]) {
+ this.op = rawNode.op;
+ this.name = rawNode.name;
+ this.device = rawNode.device;
+ this.attr = rawNode.attr;
+ this.inputs = normalizedInputs;
+ // additional properties
+ this.type = NodeType.OP;
+ this.isGroupNode = false;
+ this.cardinality = 1;
+ this.inEmbeddings = [];
+ this.outEmbeddings = [];
+ this.parentNode = null;
+ }
+};
+
+export function createMetanode(name: string, opt = {}): Metanode {
+ return new MetanodeImpl(name, opt);
+}
+
+/**
+ * Joins the information from the stats file (memory, compute time) with the graph
+ * information.
+ */
+export function joinStatsInfoWithGraph(graph: SlimGraph,
+ statsJson: TFStats): void {
+ _.each(statsJson.devStats, stats => {
+ _.each(stats.nodeStats, nodeStats => {
+ // Lookup the node in the graph by its original name, e.g. A. If not
+ // found, lookup by the rewritten name A/(A) in case the name is both
+ // a namespace and a node name.
+ let nodeName = nodeStats.nodeName in graph.nodes ?
+ nodeStats.nodeName :
+ nodeStats.nodeName + NAMESPACE_DELIM + "(" + nodeStats.nodeName + ")";
+ if (nodeName in graph.nodes) {
+ // Compute the total bytes used.
+ let totalBytes = 0;
+ if (nodeStats.memory) {
+ _.each(nodeStats.memory, alloc => {
+ if (alloc.totalBytes) {
+ totalBytes += Number(alloc.totalBytes);
+ }
+ });
+ }
+ let outputSize: number[][] = null;
+ if (nodeStats.output) {
+ outputSize = _.map(nodeStats.output, output => {
+ return _.map(output.tensorDescription.shape.dim,
+ dim => Number(dim.size));
+ });
+ }
+ graph.nodes[nodeName].stats = new NodeStats(totalBytes,
+ Number(nodeStats.allEndRelMicros), outputSize);
+ }
+ });
+ });
+}
+
+/**
+ * Execution stats for the node.
+ */
+class NodeStats {
+ constructor(totalBytes: number, totalMicros: number, outputSize: number[][]) {
+ this.totalBytes = totalBytes;
+ this.totalMicros = totalMicros;
+ this.outputSize = outputSize;
+ }
+
+ /**
+ * Total number of bytes used for the node. Sum of all childen
+ * if it is a Group node.
+ */
+ totalBytes: number;
+ /**
+ * Total number of compute time in microseconds used for the node.
+ * Sum of all children if it is a Group node.
+ */
+ totalMicros: number;
+ /**
+ * The shape of each output tensors, if there are any.
+ * Empty if it is a Group node.
+ */
+ outputSize: number[][];
+
+ /**
+ * Combines the specified stats with the current stats.
+ * Modifies the current object. This methos is used to
+ * compute aggregate stats for group nodes.
+ */
+ combine(stats: NodeStats): void {
+ if (stats.totalBytes != null) {
+ this.totalBytes += stats.totalBytes;
+ }
+ if (stats.totalMicros != null) {
+ this.totalMicros += stats.totalMicros;
+ }
+ }
+}
+
+class MetanodeImpl implements Metanode {
+ name: string;
+ stats: NodeStats;
+ type: NodeType;
+ depth: number;
+ isGroupNode: boolean;
+ cardinality: number;
+ metagraph: graphlib.Graph<GroupNode|OpNode, Metaedge>;
+ bridgegraph: graphlib.Graph<GroupNode|OpNode, Metaedge>;
+ templateId: string;
+ opHistogram: {[op: string]: number};
+ deviceHistogram: {[op: string]: number};
+ parentNode: Node;
+ hasNonControlEdges: boolean;
+
+ /** A label object for meta-nodes in the graph hierarchy */
+ constructor(name: string, opt = {}) {
+ this.name = name;
+ this.type = NodeType.META;
+ /** number of levels under this group */
+ this.depth = 1;
+ this.isGroupNode = true;
+ /** # of leaf nodes (including embedded ones) */
+ this.cardinality = 0;
+ /** graph contains metanodes, nodes, edges
+ * and metaedges for main items within this metanode
+ */
+ this.metagraph =
+ createGraph<GroupNode|OpNode, Metaedge>(name, GraphType.META, opt);
+ /** bridgegraph must be constructed lazily-see hierarchy.getBridgegraph() */
+ this.bridgegraph = null;
+ /**
+ * A dictionary that count ops type of nodes in this metanode
+ * (op type => count).
+ */
+ this.opHistogram = {};
+ this.deviceHistogram = {};
+ /** unique id for a metanode of similar subgraph */
+ this.templateId = null;
+ /** Metanode which contains this node, if any */
+ this.parentNode = null;
+ this.stats = new NodeStats(0, 0, null);
+ this.hasNonControlEdges = false;
+ }
+
+ getFirstChild(): GroupNode|OpNode {
+ return this.metagraph.node(this.metagraph.nodes()[0]);
+ }
+
+ /**
+ * Returns the op node associated with the metanode.
+ * For example, if the metanode is "sgd", the associated
+ * op node is sgd/(sgd).
+ */
+ getRootOp(): OpNode {
+ let nameSplit = this.name.split("/");
+ let rootOpName = this.name + "/(" + nameSplit[nameSplit.length - 1] + ")";
+ return <OpNode>this.metagraph.node(rootOpName);
+ }
+
+ /**
+ * Return an array of the names of all the leaves (non-GroupNodes) inside
+ * this metanode. This performs a breadth-first search of the tree, so
+ * immediate child leaves will appear earlier in the output array than
+ * descendant leaves.
+ */
+ leaves(): string[] {
+ let leaves = [];
+ let queue = [<Node> this];
+ let metagraph; // Defined here due to a limitation of ES6->5 compilation.
+ while (queue.length) {
+ let node = queue.shift();
+ if (node.isGroupNode) {
+ metagraph = (<GroupNode> node).metagraph;
+ _.each(metagraph.nodes(), name => queue.push(metagraph.node(name)));
+ } else {
+ leaves.push(node.name);
+ }
+ }
+ return leaves;
+ }
+};
+
+export interface Metaedge extends graphlib.EdgeObject {
+
+ /**
+ * Stores the original BaseEdges represented by this Metaedge.
+ */
+ baseEdgeList: BaseEdge[];
+
+ /**
+ * Whether this edge represents a relationship that is inbound (or outbound)
+ * to the object which contains this information. For example, in a Metanode's
+ * bridgegraph, each edge connects an immediate child to something outside
+ * the Metanode. If the destination of the edge is inside the Metanode, then
+ * its inbound property should be true. If the destination is outside the
+ * Metanode, then its inbound property should be false.
+ *
+ * The property is optional because not all edges can be described as
+ * inbound/outbound. For example, in a Metanode's metagraph, all of the edges
+ * connect immediate children of the Metanode. None should have an inbound
+ * property, or they should be null/undefined.
+ */
+ inbound?: boolean;
+
+ /**
+ * Number of regular edges (not control dependency edges).
+ */
+ numRegularEdges: number;
+
+ /**
+ * Number of control dependency edges.
+ */
+ numControlEdges: number;
+
+ /**
+ * Number of reference edges, which is an edge to an operation
+ * that takes a reference to its input and changes its value.
+ */
+ numRefEdges: number;
+
+ addBaseEdge(edge: BaseEdge): void;
+}
+
+export function createMetaedge(v: string, w: string): Metaedge {
+ return new MetaedgeImpl(v, w);
+}
+
+/**
+ * A label object for edges between metanodes of subgraphs in the render graph.
+ */
+class MetaedgeImpl implements Metaedge {
+ v: string;
+ w: string;
+ baseEdgeList: BaseEdge[];
+ inbound: boolean;
+ numRegularEdges: number;
+ numControlEdges: number;
+ numRefEdges: number;
+
+ constructor(v: string, w: string) {
+ this.v = v;
+ this.w = w;
+ this.baseEdgeList = [];
+ this.inbound = null;
+ this.numRegularEdges = 0;
+ this.numControlEdges = 0;
+ this.numRefEdges = 0;
+ }
+
+ addBaseEdge(edge: BaseEdge): void {
+ this.baseEdgeList.push(edge);
+ if (edge.isControlDependency) {
+ this.numControlEdges += 1;
+ } else {
+ this.numRegularEdges += 1;
+ }
+ if (edge.isReferenceEdge) {
+ this.numRefEdges += 1;
+ }
+ }
+}
+
+export function createSeriesNode(prefix: string, suffix: string,
+ parent: string, clusterId: number, name: string): SeriesNode {
+ return new SeriesNodeImpl(prefix, suffix, parent, clusterId, name);
+}
+
+export function getSeriesNodeName(prefix: string, suffix: string,
+ parent: string, startId?: number, endId?: number): string {
+ let numRepresentation =
+ (typeof startId !== "undefined" && typeof endId !== "undefined") ?
+ "[" + startId + "-" + endId + "]" : "#";
+ let pattern = prefix + numRepresentation + suffix;
+ return (parent ? parent + "/" : "") + pattern;
+}
+
+class SeriesNodeImpl implements SeriesNode {
+ name: string;
+ type: NodeType;
+ stats: NodeStats;
+ hasLoop: boolean;
+ prefix: string;
+ suffix: string;
+ clusterId: number;
+ ids: number[];
+ parent: string;
+ isGroupNode: boolean;
+ cardinality: number;
+ metagraph: graphlib.Graph<GroupNode|OpNode, Metaedge>;
+ bridgegraph: graphlib.Graph<GroupNode|OpNode, Metaedge>;
+ parentNode: Node;
+ deviceHistogram: {[op: string]: number};
+ hasNonControlEdges: boolean;
+
+ constructor(prefix: string, suffix: string, parent: string,
+ clusterId: number, name: string) {
+ this.name = name || getSeriesNodeName(prefix, suffix, parent);
+ this.type = NodeType.SERIES;
+ this.hasLoop = false;
+ this.prefix = prefix;
+ this.suffix = suffix;
+ this.clusterId = clusterId;
+ this.ids = [];
+ this.parent = parent;
+ this.isGroupNode = true;
+ this.cardinality = 0;
+ this.metagraph = createGraph<Metanode, Metaedge>(name, GraphType.SERIES);
+ // bridgegraph must be constructed lazily-see hierarchy.getBridgegraph()
+ this.bridgegraph = null;
+ this.parentNode = null;
+ this.deviceHistogram = {};
+ this.hasNonControlEdges = false;
+ this.stats = new NodeStats(0, 0, null);
+ }
+}
+
+/**
+ * Normalizes the inputs and extracts associated metadata:
+ * 1) Inputs can contain a colon followed by a number at the end
+ * (e.g. inputName:1) and we remove this from the input name, and take note
+ * that the input was numbered.
+ * 2) Control dependency inputs contain caret at the beginning and we
+ * remove this and annotate the edge as a control dependency.
+ * @param inputs Array of unnormalized names of input nodes.
+ */
+function normalizeInputs(inputs: string[]): NormalizedInput[] {
+ return _.reduce(inputs, function(normalizedInputs, inputName) {
+ let start = inputName[0] === "^";
+ let colon = inputName.lastIndexOf(":");
+ let end = colon !== -1 &&
+ inputName.length - colon > 1 &&
+ !(/\D/).test(inputName.substring(colon + 1)) ?
+ colon : inputName.length;
+ let name = inputName.substring(start ? 1 : 0, end);
+ if (normalizedInputs.length === 0 ||
+ name !== normalizedInputs[normalizedInputs.length - 1].name) {
+ normalizedInputs.push({
+ name: name,
+ hasNumberPart: end !== inputName.length,
+ isControlDependency: start
+ });
+ }
+ return normalizedInputs;
+ }, []);
+}
+
+export function build(rawNodes: tf.TFNode[], params: BuildParams,
+ tracker: ProgressTracker): Promise<SlimGraph|void> {
+ /**
+ * A dictionary that maps each in-embedding node name to its host node label
+ * object.
+ */
+ let inEmbedding: {[nodeName: string]: OpNode} = {};
+ /**
+ * A dictionary that maps each node name to an array of the node's
+ * out-embedding node label objects.
+ */
+ let outEmbeddings: {[inputName: string]: OpNode[]} = {};
+ let isInEmbeddedPred = getEmbedPredicate(params.inEmbeddingTypes);
+ let isOutEmbeddedPred = getEmbedPredicate(params.outEmbeddingTypes);
+ let embeddingNodeNames: string[] = [];
+ /**
+ * A list of all the non-embedding node names which appear in the processed
+ * list of raw nodes. Here we pre-allocate enough room for all the rawNodes,
+ * even though there will some number of embeddings. The excess array length
+ * is spliced off later.
+ *
+ * Experimentation shows that around 30% of the array will go unused, and
+ * even for very large networks that amounts to less than 10k spaces.
+ */
+ let nodeNames = new Array<string>(rawNodes.length);
+
+ return runAsyncTask("Normalizing names", 30, () => {
+ let opNodes = new Array<OpNode>(rawNodes.length);
+ let index = 0;
+ _.each(rawNodes, rawNode => {
+ let normalizedInputs = normalizeInputs(rawNode.input);
+ let opNode = new OpNodeImpl(rawNode, normalizedInputs);
+ if (isInEmbeddedPred(opNode)) {
+ embeddingNodeNames.push(opNode.name);
+ inEmbedding[opNode.name] = opNode;
+ return;
+ }
+
+ if (isOutEmbeddedPred(opNode)) {
+ embeddingNodeNames.push(opNode.name);
+ _.each(opNode.inputs, input => {
+ let inputName = input.name;
+ outEmbeddings[inputName] = outEmbeddings[inputName] || [];
+ outEmbeddings[inputName].push(opNode);
+ });
+ return;
+ }
+ // The node is not an embedding, so add it to the names and nodes lists.
+ opNodes[index] = opNode;
+ nodeNames[index] = opNode.name;
+ index++;
+ });
+ opNodes.splice(index);
+ nodeNames.splice(index);
+ return opNodes;
+ }, tracker)
+ .then((opNodes) => {
+ // Create the graph data structure from the graphlib library.
+ return runAsyncTask("Building the data structure", 70, () => {
+ let normalizedNameDict = mapStrictHierarchy(nodeNames,
+ embeddingNodeNames);
+ let graph = new SlimGraph;
+
+ // Add the nodes to the graph.
+ _.each(opNodes, opNode => {
+ let normalizedName = normalizedNameDict[opNode.name] || opNode.name;
+ graph.nodes[normalizedName] = opNode;
+ // Check if the node has out-embeddings. If yes, add them to to the
+ // node.
+ if (opNode.name in outEmbeddings) {
+ opNode.outEmbeddings = outEmbeddings[opNode.name];
+ // Normalize the names of the out-embeddings.
+ _.each(opNode.outEmbeddings, node => {
+ node.name = normalizedNameDict[node.name] || node.name;
+ });
+ }
+ // Update the name of the node.
+ opNode.name = normalizedName;
+ });
+
+ // Visit each node's inputs to add the edges to the graph. If the input
+ // is an in-embedding, then add it to the node's in-embeddings instead.
+ _.each(opNodes, opNode => {
+ _.each(opNode.inputs, (input, i) => {
+ let inputName = input.name;
+ if (inputName in inEmbedding) {
+ opNode.inEmbeddings.push(inEmbedding[inputName]);
+ } else {
+ graph.edges.push({
+ v: normalizedNameDict[inputName] || inputName,
+ w: opNode.name,
+ isControlDependency: input.isControlDependency,
+ // Check if this op type and input number corresponds to a
+ // reference edge using the refEdges dictionary in the params.
+ isReferenceEdge: (params.refEdges[opNode.op + " " + i] === true)
+ });
+ }
+ });
+ });
+
+ // Normalize the names of in-embeddings.
+ _.each(inEmbedding, (node, name) => {
+ node.name = normalizedNameDict[node.name] || node.name;
+ });
+
+ return graph;
+ }, tracker);
+ })
+ .catch(function(reason) {
+ throw new Error("Failure creating graph");
+ });
+};
+
+/**
+ * Create a new graphlib.Graph() instance with default parameters
+ */
+export function createGraph<N, E>(name: string, type, opt = {}):
+ graphlib.Graph<N, E> {
+ let graph = new graphlib.Graph<N, E>(opt);
+ graph.setGraph({
+ name: name,
+ rankdir: "BT", // BT,TB,LR,RL
+ type: type
+ });
+ return graph;
+};
+
+/**
+ * Create a predicate for checking whether a node should be embedded based on
+ * the specified types.
+ */
+function getEmbedPredicate(types: string[]) {
+ return function(node) {
+ // check types
+ for (let i = 0; i < types.length; i++) {
+ let regExp = new RegExp(types[i]);
+ if (node.op.match(regExp)) { return true; }
+ }
+ return false;
+ };
+};
+
+/**
+ * Returns a strict node name (name => name/(name)) to avoid conflicts
+ * where the node name is also a namespace.
+ */
+function getStrictName(name: string): string {
+ let parts = name.split(NAMESPACE_DELIM);
+ return name + NAMESPACE_DELIM + "(" + parts[parts.length - 1] + ")";
+}
+
+/**
+ * For each op node (embedding or non-embedding), rename it if there is a
+ * non-embedding node under its namespace. For example, assume node name "A".
+ * If there is a non-embedding node under its namespace (e.g. "A/B"), "A" will
+ * be renamed to "A/(A)". Then the namespace "A" will contain 2 nodes: "(A)"
+ * and "B". If all the nodes under "A" are embedding nodes (e.g. constant and
+ * summary), keep "A" as an Op node and don't create a namespace.
+ *
+ * @param nodeNames An array of regular (non-embedding) node names.
+ * @param embeddingNodeNames An array of embedding node names.
+ * @return Dictionary object mapping names that need to be renamed to
+ * new names.
+ */
+function mapStrictHierarchy(nodeNames: string[],
+ embeddingNodeNames: string[]): {[oldName: string]: string} {
+ /** Dictionary that maps the old new to the new name */
+ let newNameDictionary: {[oldName: string]: string} = {};
+ /** Set used to store all namespaces. */
+ let namespaceSet: {[namespace: string]: boolean} = {};
+ // sort the nodes to make prefix check faster
+ nodeNames.sort();
+ // look for nodes with a prefix a,a/b -> a/(a),a/b
+ for (let i = 0; i < nodeNames.length - 1; ++i) {
+ let a = nodeNames[i];
+ // Get all the parent namespaces of the current node
+ // and add them in the namespace set.
+ _.each(getHierarchicalPath(a).slice(0, -1), ns => {
+ namespaceSet[ns] = true;
+ });
+ let b = nodeNames[i + 1];
+ if (_.startsWith(b, a + NAMESPACE_DELIM)) {
+ newNameDictionary[a] = getStrictName(a);
+ }
+ }
+ // Go through all the embedding node names and rename them in case they
+ // collide with namespaces.
+ _.each(embeddingNodeNames, embeddingName => {
+ if (embeddingName in namespaceSet) {
+ // Rename to follow strict hierarchy.
+ newNameDictionary[embeddingName] = getStrictName(embeddingName);
+ }
+ });
+ return newNameDictionary;
+};
+
+/**
+ * Returns a list of the degrees of each node in the graph.
+ */
+function degreeSequence(graph: graphlib.Graph<any, any>): number[] {
+ let degrees = graph.nodes().map(function(name) {
+ return graph.neighbors(name).length;
+ });
+ degrees.sort();
+ return degrees;
+};
+
+/**
+ * Returns if the degree sequence of the two graphs is the same.
+ */
+export function hasSimilarDegreeSequence(graph1: graphlib.Graph<any, any>,
+ graph2: graphlib.Graph<any, any>): boolean {
+ let dg1 = degreeSequence(graph1);
+ let dg2 = degreeSequence(graph2);
+
+ for (let i = 0; i < dg1.length; i++) {
+ if (dg1[i] !== dg2[i]) {
+ return false;
+ }
+ }
+ return true;
+};
+
+/**
+ * Returns the hierarchical path of the current node, based on the node's name.
+ * For example, if the name is 'a/b/c', the returned path is ['a', 'a/b', 'a/b/c'].
+ */
+export function getHierarchicalPath(name: string,
+ seriesNames?: { [name: string]: string }): string[] {
+ let path: string[] = [];
+ let i = name.indexOf(NAMESPACE_DELIM);
+ // Push all parent portions of the path.
+ while (i >= 0) {
+ path.push(name.substring(0, i));
+ i = name.indexOf(NAMESPACE_DELIM, i + 1);
+ }
+ // If the node's path is under a series, then add the series node name to the
+ // hierarchical path as the parent of the leaf.
+ if (seriesNames) {
+ let seriesName = seriesNames[name];
+ if (seriesName) {
+ path.push(seriesName);
+ }
+ }
+ // Push the leaf of the path.
+ path.push(name);
+ return path;
+};
+
+} // close module tf.graph
diff --git a/tensorflow/tensorboard/components/tf-graph-common/lib/hierarchy.ts b/tensorflow/tensorboard/components/tf-graph-common/lib/hierarchy.ts
new file mode 100644
index 0000000000..6c9333de4c
--- /dev/null
+++ b/tensorflow/tensorboard/components/tf-graph-common/lib/hierarchy.ts
@@ -0,0 +1,715 @@
+/// <reference path="graph.ts" />
+/// <reference path="template.ts" />
+
+/**
+ * Package for the Graph Hierarchy for TensorFlow graph.
+ */
+module tf.graph.hierarchy {
+
+const LOG_PREFIX_MSG = "Graph hierarchy: ";
+
+/**
+ * Class used as output for getPredecessors and getSuccessors methods
+ */
+interface Edges {
+ control: string[];
+ regular: string[];
+}
+
+export interface Hierarchy {
+ root: Metanode;
+ templates: {[templateId: string]: string[]};
+ /** List of all device names */
+ devices: string[];
+ getNodeMap(): {[nodeName: string]: GroupNode|OpNode};
+ node(name: string): GroupNode|OpNode;
+ setNode(name: string, node: GroupNode|OpNode): void;
+ getBridgegraph(nodeName: string): graphlib.Graph<GroupNode|OpNode, Metaedge>;
+ getPredecessors(nodeName: string): Edges;
+ getSuccessors(nodeName: string): Edges;
+ getTopologicalOrdering(nodeName: string): { [childName: string]: number };
+}
+
+/**
+ * Class for the Graph Hierarchy for TensorFlow graph.
+ */
+class HierarchyImpl implements Hierarchy {
+ root: Metanode;
+ templates: {[templateId: string]: string[]};
+ private index: {[nodeName: string]: GroupNode|OpNode};
+ devices: string[];
+ orderings: { [nodeName: string]: { [childName: string]: number } };
+
+ constructor() {
+ this.root = createMetanode(ROOT_NAME, {compound: true});
+ this.templates = null;
+ this.devices = null;
+ /**
+ * @type {Object} Dictionary object that maps node name to the node
+ * (could be op-node, metanode, or series-node)
+ */
+ this.index = {};
+ this.index[ROOT_NAME] = this.root;
+ this.orderings = {};
+ }
+
+ getNodeMap(): {[nodeName: string]: GroupNode|OpNode} {
+ return this.index;
+ }
+
+ node(name: string): GroupNode|OpNode {
+ return this.index[name];
+ }
+
+ setNode(name: string, node: GroupNode|OpNode): void {
+ this.index[name] = node;
+ }
+
+ /**
+ * Given the name of a node in this hierarchy, get its bridgegraph, creating
+ * it on the fly if necessary. If the node is not a GroupNode, then this
+ * method returns null. If the provided name does not map to a node in the
+ * hierarchy, an error will be thrown.
+ */
+ getBridgegraph(nodeName: string): graphlib.Graph<GroupNode|OpNode, Metaedge> {
+ let node = this.index[nodeName];
+ if (!node) {
+ throw Error("Could not find node in hierarchy: " + nodeName);
+ }
+ if (!("metagraph" in node)) {
+ return null;
+ }
+ let groupNode = <GroupNode> node;
+ if (groupNode.bridgegraph) {
+ return groupNode.bridgegraph;
+ }
+ let bridgegraph = groupNode.bridgegraph =
+ createGraph<GroupNode|OpNode, Metaedge>(
+ "BRIDGEGRAPH", GraphType.BRIDGE);
+ if (!node.parentNode || !("metagraph" in node.parentNode)) {
+ return bridgegraph;
+ }
+
+ let parentNode = <GroupNode>node.parentNode;
+ let parentMetagraph = parentNode.metagraph;
+ let parentBridgegraph = this.getBridgegraph(parentNode.name);
+
+ // For each of the parent node's two Metaedge containing graphs, process
+ // each Metaedge involving this node.
+ _.each([parentMetagraph, parentBridgegraph], parentGraph => {
+ _(parentGraph.edges())
+ .filter(e => e.v === nodeName || e.w === nodeName)
+ .each(parentEdgeObj => {
+
+ let inbound = parentEdgeObj.w === nodeName;
+ let parentMetaedge = parentGraph.edge(parentEdgeObj);
+
+ // The parent's Metaedge represents some number of underlying
+ // BaseEdges from the original full graph. For each of those, we need
+ // to determine which immediate child is involved and make sure
+ // there's a Metaedge in the bridgegraph that covers it.
+ _.each(parentMetaedge.baseEdgeList, baseEdge => {
+
+ // Based on the direction, figure out which is the descendant node
+ // and which is the "other" node (sibling of parent or ancestor).
+ let [descendantName, otherName] =
+ inbound ?
+ [baseEdge.w, parentEdgeObj.v] :
+ [baseEdge.v, parentEdgeObj.w];
+
+ // Determine the immediate child containing this descendant node.
+ let childName = this.getChildName(nodeName, descendantName);
+
+ // Look for an existing Metaedge in the bridgegraph (or create a
+ // new one) that covers the relationship between child and other.
+ let bridgeEdgeObj = <graphlib.EdgeObject> {
+ v: inbound ? otherName : childName,
+ w: inbound ? childName : otherName,
+ };
+ let bridgeMetaedge = bridgegraph.edge(bridgeEdgeObj);
+ if (!bridgeMetaedge) {
+ bridgeMetaedge = createMetaedge(bridgeEdgeObj.v, bridgeEdgeObj.w);
+ bridgeMetaedge.inbound = inbound;
+ bridgegraph.setEdge(bridgeEdgeObj.v, bridgeEdgeObj.w,
+ bridgeMetaedge);
+ }
+
+ // Copy the BaseEdge from the parent's Metaedge into this
+ // bridgegraph Metaedge.
+ bridgeMetaedge.addBaseEdge(baseEdge);
+ });
+ })
+ .value(); // force lodash chain execution.
+ });
+
+ return bridgegraph;
+ }
+
+ /**
+ * Utility function for determining the name of the immediate child under a
+ * node for a given descendant path. If the descendant corresponds to no
+ * immediate child, an error is thrown.
+ */
+ getChildName(nodeName: string, descendantName: string): string {
+ // Walk up the hierarchy from the descendant to find the child.
+ let currentNode: Node = this.index[descendantName];
+ while (currentNode) {
+ if (currentNode.parentNode && currentNode.parentNode.name === nodeName) {
+ return currentNode.name;
+ }
+ currentNode = currentNode.parentNode;
+ }
+ throw Error("Could not find immediate child for descendant: " +
+ descendantName);
+ };
+
+ /**
+ * Given the name of a node, return the names of its predecssors.
+ * For an OpNode, this will contain the targets from the underlying BaseEdges.
+ * For a GroupNode, this will contain the targets truncated to siblings of
+ * the shared ancestor.
+ *
+ * For example, consider an original non-control BaseEdge A/B/C->Z/Y/X. Their
+ * shared ancestor is the ROOT node. A and Z are the highest siblings. Here
+ * are the results of calling getPredecessors():
+ *
+ * - getPredecessors("Z/Y/X") === {regular: ["A/B/C"], control: []};
+ * - getPredecessors("Z/Y") === {regular: ["A"], control: []};
+ * - getPredecessors("Z") === {regular: ["A"], control: []};
+ *
+ * The reason getPredecessors("Z/Y") returns ["A"] (and not ["A/B"] as you
+ * might intuitively expect) is because it's not clear how far down the
+ * other end of the hierarchy to traverse in the general case.
+ *
+ * Continuing this example, say there was another BaseEdge A/K->Z/Y/W. When
+ * we look at Z/Y's predecessors, the best we can say is ["A"] without getting
+ * into the details of which of of Z/Y's descendant nodes have predecessors to
+ * which of A's descendants.
+ *
+ * On the other hand, for an OpNode it's clear what the final predecssors
+ * ought to be. There is no ambiguity.
+ */
+ getPredecessors(nodeName: string): Edges {
+ let node = this.index[nodeName];
+ if (!node) {
+ throw Error("Could not find node with name: " + nodeName);
+ }
+
+ let predecessors = this.getOneWayEdges(node, true);
+
+ // Add embedded predecessors, such as constants.
+ if (!node.isGroupNode) {
+ _.each((<OpNode>node).inEmbeddings, embeddedNode => {
+ predecessors.regular.push(embeddedNode.name);
+ });
+ }
+ return predecessors;
+ }
+
+ /**
+ * Given the name of a node, return an array of the names of its successors.
+ * For an OpNode, this will contain the targets from the underlying BaseEdges.
+ * For a GroupNode, this will contain the targets truncated to sibling of
+ * the shared ancestor.
+ *
+ * This is the inverse of getPredecessors(). See that method's documentation
+ * for an in-depth example.
+ */
+ getSuccessors(nodeName: string): Edges {
+ let node = this.index[nodeName];
+ if (!node) {
+ throw Error("Could not find node with name: " + nodeName);
+ }
+
+ let successors = this.getOneWayEdges(node, false);
+
+ // Add embedded successors, such as summaries.
+ if (!node.isGroupNode) {
+ _.each((<OpNode>node).outEmbeddings, embeddedNode => {
+ successors.regular.push(embeddedNode.name);
+ });
+ }
+ return successors;
+ }
+
+ /** Helper method for getPredeccessors and getSuccessors */
+ getOneWayEdges(node: GroupNode|OpNode, inEdges: boolean) {
+ let edges = { control: [], regular: [] };
+ // A node with no parent cannot have any edges.
+ if (!node.parentNode) {
+ return edges;
+ }
+ if (node.parentNode.isGroupNode) {
+ let parentNode = <GroupNode>node.parentNode;
+ let metagraph = parentNode.metagraph;
+ let bridgegraph = this.getBridgegraph(parentNode.name);
+ findEdgeTargetsInGraph(metagraph, node, inEdges, edges);
+ findEdgeTargetsInGraph(bridgegraph, node, inEdges, edges);
+ }
+ return edges;
+ }
+
+ /**
+ * For a given GroupNode, get or calculate an object which describes a
+ * topological ordering of child nodes within that GroupNode's metagraph.
+ *
+ * This ordering is used when rendering bridge control edges which are
+ * sometimes backwards relative to the dataflow.
+ *
+ * For example, say we have a graph with two edges A->B and A->C, and we're
+ * interested in the ordering under ROOT. In this case, any of the following
+ * would be legitimate return values:
+ *
+ * - { "A": 0, "B": 1, "C": 2 } -- most likely
+ * - { "A": 0, "B": 2, "C": 1 } -- less likely
+ * - { "A": 12, "B": 100, "C": 99 } -- unlikely, but still OK
+ *
+ * The algorithm does not guarantee that all numbers from 0-N (where N is
+ * the number of nodes) appear exactly once. Rather it guarantees that if
+ * there is a path between two nodes, the earlier one will have a lower
+ * number in the ordering hash.
+ *
+ * When generating the ordering, we ignore control Metaedges (those which
+ * represent only BaseEdges that have isControlDependency set to true).
+ *
+ * If there is no node with the specified name, an error is thrown. If the
+ * node with the specified name is not a group node, null is returned.
+ */
+ getTopologicalOrdering(nodeName: string): { [childName: string]: number } {
+ let node = this.index[nodeName];
+ if (!node) {
+ throw Error("Could not find node with name: " + nodeName);
+ }
+ if (!node.isGroupNode) {
+ return null;
+ }
+ if (nodeName in this.orderings) {
+ return this.orderings[nodeName];
+ }
+
+ // Mapping of a child node names to lists of their successors.
+ let successors: { [childName: string]: string[] } = {};
+
+ // Set of node names which have appeared as a destination.
+ let destinations: { [childName: string]: boolean } = {};
+
+ let metagraph = (<GroupNode> node).metagraph;
+ _.each(metagraph.edges(), (e: graphlib.EdgeObject) => {
+ if (!metagraph.edge(e).numRegularEdges) {
+ return; // Skip control edges.
+ }
+
+ // Keep track of successors and destinations.
+ if (!(e.v in successors)) {
+ successors[e.v] = [];
+ }
+ successors[e.v].push(e.w);
+ destinations[e.w] = true;
+ });
+
+ // Seed the queue with true sources (those that are not destinations).
+ let queue: string[] =
+ _.difference(_.keys(successors), _.keys(destinations));
+
+ // Produce an ordering by traversing the graph breadth first.
+ let ordering = this.orderings[nodeName] = {};
+ let index = 0;
+ while (queue.length) {
+ let childName = queue.shift();
+ ordering[childName] = index++;
+ _.each(successors[childName], succName => queue.push(succName));
+ delete successors[childName]; // Prevent cycles from infinite looping.
+ }
+ return ordering;
+ }
+
+}
+
+/**
+ * Internal utility function - given a graph (should be either a metagraph or a
+ * bridgegraph) and a node which is known to be in that graph, determine
+ * the other ends of edges that involve that node in the direction specified
+ * by whether it's inbound.
+ *
+ * For example if you wanted to find the predecessors of a node, you'd call
+ * this method for the parent's metagraph and bridgegraph, specifying inbound
+ * as true (look at the source of inbound edges to the specified node).
+ *
+ * Discovered target names are appended to the targets array.
+ */
+function findEdgeTargetsInGraph(
+ graph: graphlib.Graph<GroupNode|OpNode, Metaedge>,
+ node: Node, inbound: boolean, targets: Edges): void {
+ _.each(<Metaedge[]> graph.edges(), e => {
+ let [selfName, otherName] = inbound ? [e.w, e.v] : [e.v, e.w];
+ if (selfName === node.name) {
+ if (node.isGroupNode) {
+ let targetList = graph.edge(e).numRegularEdges
+ ? targets.regular : targets.control;
+ targetList.push(otherName);
+ } else {
+ _.each(graph.edge(e).baseEdgeList, baseEdge => {
+ let targetList = baseEdge.isControlDependency
+ ? targets.control : targets.regular;
+ targetList.push(inbound ? baseEdge.v : baseEdge.w);
+ });
+ }
+ }
+ });
+}
+
+interface HierarchyParams {
+ verifyTemplate: boolean;
+ groupSeries: boolean;
+}
+
+/**
+ * @param graph The raw graph.
+ * @param params Parameters used when building a hierarchy.
+ */
+export function build(graph: tf.graph.SlimGraph, params: HierarchyParams,
+ tracker: ProgressTracker): Promise<Hierarchy|void> {
+ let h = new HierarchyImpl();
+ let seriesNames: { [name: string]: string } = {};
+ return runAsyncTask("Adding nodes", 20, () => {
+ // Get all the possible device names.
+ let deviceNames = {};
+ _.each(graph.nodes, (node, nodeName) => {
+ if (node.device != null) {
+ deviceNames[node.device] = true;
+ }
+ });
+ h.devices = _.keys(deviceNames);
+ addNodes(h, graph);
+ }, tracker)
+ .then(() => {
+ return runAsyncTask("Detect series", 20, () => {
+ if (params.groupSeries) {
+ groupSeries(h.root, h, seriesNames);
+ }
+ }, tracker);
+ })
+ .then(() => {
+ return runAsyncTask("Adding edges", 30, () => {
+ addEdges(h, graph, seriesNames);
+ }, tracker);
+ })
+ .then(() => {
+ return runAsyncTask("Finding similar subgraphs", 30, () => {
+ h.templates = template.detect(h, params.verifyTemplate);
+ }, tracker);
+ })
+ .then(() => {
+ return h;
+ }).catch(function(reason) {
+ throw new Error("Failure creating graph hierarchy");
+ });
+};
+
+/**
+ * Creates the metanodes in the hierarchical graph and assigns parent-child
+ * relationship between them.
+ */
+function addNodes(h: Hierarchy, graph: SlimGraph) {
+ _.each(graph.nodes, (node, nodeName) => {
+ let path = getHierarchicalPath(node.name);
+ let parent: Metanode = h.root;
+
+ parent.depth = Math.max(path.length, parent.depth);
+
+ // Create parent metanodes for each depth. For example if the node name
+ // is 'a/b/c', then create metanodes 'a' and 'a/b', where 'a/b' is a child
+ // of a.
+ for (let i = 0; i < path.length; i++) {
+ parent.depth = Math.max(parent.depth, path.length - i);
+ parent.cardinality += node.cardinality;
+ parent.opHistogram[node.op] = (parent.opHistogram[node.op] || 0) + 1;
+ if (node.stats) {
+ parent.stats.combine(node.stats);
+ }
+ if (node.device != null) {
+ parent.deviceHistogram[node.device] =
+ (parent.deviceHistogram[node.device] || 0) + 1;
+ }
+ if (i === path.length - 1) { break; }
+ let name = path[i];
+ let child = <Metanode>h.node(name);
+ if (!child) {
+ child = createMetanode(name);
+ child.parentNode = parent;
+ h.setNode(name, child);
+ parent.metagraph.setNode(name, child);
+ }
+ parent = child;
+ }
+ // Assuming node name is 'a/b/c', assign the OpNode as a child of the metanode 'a/b'.
+ h.setNode(node.name, node);
+ node.parentNode = parent;
+ parent.metagraph.setNode(node.name, node);
+
+ // Add each of the in-embeddings and out-embeddings in the hierarchy.
+ _.each(node.inEmbeddings, function(embedding) {
+ h.setNode(embedding.name, embedding);
+ embedding.parentNode = node;
+ });
+ _.each(node.outEmbeddings, function(embedding) {
+ h.setNode(embedding.name, embedding);
+ embedding.parentNode = node;
+ });
+ });
+};
+
+/**
+ * For each metanode in the hierarchical graph, this method adds:
+ * the edges in the metagraph. These are edges between nodes
+ * that share the same parent.
+ */
+function addEdges(h: Hierarchy, graph: SlimGraph,
+ seriesNames: { [name: string]: string }) {
+
+ let nodeIndex = h.getNodeMap();
+
+ // Ancestor paths for the source and destination nodes of an edge. These are
+ // reused for each edge rather than allocating new ones. It's about 10% faster
+ // than allocating new ones on each pass through the loop.
+ let sourcePath: string[] = [];
+ let destPath: string[] = [];
+
+ // Insert the ancestor path for a node into the provided array, including the
+ // node itself. Return the index of the last node inserted (always ROOT).
+ let getPath = (node: Node, path: string[]): number => {
+ let i = 0;
+ while (node) {
+ path[i++] = node.name;
+ node = node.parentNode;
+ }
+ return i - 1;
+ };
+
+ _.each(graph.edges, baseEdge => {
+
+ // Get the hierarchical paths for the source and destination of the edge.
+ let sourceAncestorIndex = getPath(graph.nodes[baseEdge.v], sourcePath);
+ let destAncestorIndex = getPath(graph.nodes[baseEdge.w], destPath);
+
+ // Find the lowest shared ancestor between source and dest by looking for
+ // the highest nodes that differ between their ancestor paths.
+ while (sourcePath[sourceAncestorIndex] === destPath[destAncestorIndex]) {
+ sourceAncestorIndex--;
+ destAncestorIndex--;
+ if (sourceAncestorIndex < 0 || destAncestorIndex < 0) {
+ // This would only occur if the two nodes were the same (a cycle in the
+ // graph), or if one endpoint was a strict ancestor of the other. The
+ // latter shouldn't happen because we rename nodes which are both
+ // metanodes and op nodes. E.g. "A/B" becomes "A/B/(B)".
+ throw Error("No difference found between ancestor paths.");
+ }
+ }
+
+ let sharedAncestorNode =
+ <GroupNode>nodeIndex[sourcePath[sourceAncestorIndex + 1]];
+ let sourceAncestorName = sourcePath[sourceAncestorIndex];
+ let destAncestorName = destPath[destAncestorIndex];
+
+ // Find or create the Metaedge which should contain this BaseEdge inside
+ // the shared ancestor.
+ let metaedge =
+ sharedAncestorNode.metagraph.edge(sourceAncestorName, destAncestorName);
+ if (!metaedge) {
+ metaedge = createMetaedge(sourceAncestorName, destAncestorName);
+ sharedAncestorNode.metagraph
+ .setEdge(sourceAncestorName, destAncestorName, metaedge);
+ }
+ if (!sharedAncestorNode.hasNonControlEdges &&
+ !baseEdge.isControlDependency) {
+ sharedAncestorNode.hasNonControlEdges = true;
+ }
+ metaedge.addBaseEdge(baseEdge);
+
+ });
+
+};
+
+/**
+ * Using the hierarchy template information, detect series in the provided
+ * metanode. For each detected series, create a new SeriesNode
+ * and remove series members from the metanode's metagraph and move them to
+ * the new series node's metagraph.
+ *
+ * @param metanode
+ * @param hierarchy
+ * @return A dictionary from node name to series node name that contains the node
+ */
+function groupSeries(metanode: Metanode, hierarchy: Hierarchy,
+ seriesNames: { [name: string]: string }) {
+ let metagraph = metanode.metagraph;
+ _.each(metagraph.nodes(), n => {
+ let child = metagraph.node(n);
+ if (child.type === tf.graph.NodeType.META) {
+ groupSeries(<Metanode>child, hierarchy, seriesNames);
+ }
+ });
+
+ let clusters = clusterNodes(metagraph);
+ let seriesDict = detectSeries(clusters, metagraph);
+
+ // Add each series node to the graph and add its grouped children to its own
+ // metagraph.
+ _.each(seriesDict, function(seriesNode: SeriesNode, seriesName: string) {
+ let nodeMemberNames = seriesNode.metagraph.nodes();
+ let firstMember = seriesNode.metagraph.node(nodeMemberNames[0]);
+ let seriesType = firstMember.type;
+
+ hierarchy.setNode(seriesName, seriesNode); // add to the index
+ metagraph.setNode(seriesName, seriesNode);
+ _.each(nodeMemberNames, n => {
+ let child = <OpNode> metagraph.node(n);
+ seriesNode.metagraph.setNode(n, child);
+ seriesNode.parentNode = child.parentNode;
+ seriesNode.cardinality++;
+ if (child.device != null) {
+ seriesNode.deviceHistogram[child.device] =
+ (seriesNode.deviceHistogram[child.device] || 0) + 1;
+ }
+ child.parentNode = seriesNode;
+ seriesNames[n] = seriesName;
+
+ if (child.stats) {
+ seriesNode.stats.combine(child.stats);
+ }
+
+ // Remove now-grouped node from its original parent's metagraph.
+ metagraph.removeNode(n);
+ });
+ });
+};
+
+/** cluster op-nodes with similar op */
+function clusterNodes(metagraph: graphlib.Graph<GroupNode|OpNode, Metaedge>):
+ {[clusterId: string]: string[]} {
+ let result: {[clusterId: string]: string[]} = {};
+ return _.reduce(metagraph.nodes(), function(clusters: {[clusterId: string]: string[]}, n: string) {
+ let child = metagraph.node(n);
+ if (child.type === NodeType.META) {
+ // skip metanodes
+ return clusters;
+ }
+ let template = (<OpNode>child).op;
+ if (template) {
+ clusters[template] = clusters[template] || [];
+ clusters[template].push(child.name);
+ }
+ return clusters;
+ }, result);
+}
+
+/**
+ * For each cluster of op-nodes based op type, try to detect groupings.
+ * Infer series name using by trying to find pattern "<number>" in the node
+ * name.
+ *
+ * @param clusters Dictionary output from clusterNodes().
+ * @param metagraph
+ * @return A dictionary from series name => seriesNode
+ */
+function detectSeries(clusters: {[clusterId: string]: string[]},
+ metagraph: graphlib.Graph<GroupNode|OpNode, Metaedge>):
+ {[seriesName: string]: SeriesNode} {
+ let seriesDict: {[seriesName: string]: SeriesNode} = {};
+ _.each(clusters, function(members, clusterId: string) {
+ if (members.length <= 1) { return; } // isolated clusters can't make series
+
+ /** @type {Object} A dictionary mapping seriesName to seriesInfoArray,
+ * which is an array that contains objects with name, id, prefix, suffix,
+ * and parent properties.
+ */
+ let candidatesDict = {};
+
+ // Group all nodes that have the same name, with the exception of a
+ // number at the end of the name after an underscore, which is allowed to
+ // vary.
+ _.each(members, function(name: string) {
+ let isGroup = name.charAt(name.length - 1) === "*";
+ let namepath = name.split("/");
+ let leaf = namepath[namepath.length - 1];
+ let parent = namepath.slice(0, namepath.length - 1).join("/");
+ let matches = leaf.match(/^(\D*)_(\d+)$/);
+
+ let prefix;
+ let id;
+ let suffix = "";
+ if (matches) { // if found "<number>" in the name, assign id.
+ prefix = matches[1]; // the front non-numeric characters
+ id = matches[2]; // the digits
+ } else { // for node without "_<number>", make them zero-th items.
+ prefix = isGroup ? leaf.substr(0, leaf.length - 1) : leaf;
+ if (prefix.charAt(prefix.length - 1) !== "_") {
+ prefix += "_";
+ }
+ id = 0;
+ suffix = isGroup ? "*" : "";
+ }
+ let seriesName = getSeriesNodeName(prefix, suffix, parent);
+ candidatesDict[seriesName] = candidatesDict[seriesName] || [];
+ let seriesNode = createSeriesNode(prefix, suffix, parent, +id, name);
+ candidatesDict[seriesName].push(seriesNode);
+ });
+
+ // In each group of nodes, group nodes in bunches that have monotonically
+ // increasing numbers in their names. Each of these bunches is a series.
+ _.each(candidatesDict, function(seriesInfoArray: SeriesNode[], seriesName) {
+ if (seriesInfoArray.length < 2) {
+ return;
+ }
+ seriesInfoArray.sort(function(a, b) {
+ return (+a.clusterId) - (+b.clusterId);
+ });
+
+ // Loop through the nodes sorted by its detected series number, grouping
+ // all nodes with monotonically-increasing series numbers.
+ let seriesNodes = [seriesInfoArray[0]];
+ for (let index = 1; index < seriesInfoArray.length; index++) {
+ let nextNode = seriesInfoArray[index];
+ if (nextNode.clusterId === seriesNodes[seriesNodes.length - 1].clusterId + 1) {
+ seriesNodes.push(nextNode);
+ continue;
+ }
+ addSeriesToDict(seriesNodes, seriesDict, +clusterId, metagraph);
+ seriesNodes = [nextNode];
+ }
+ addSeriesToDict(seriesNodes, seriesDict, +clusterId, metagraph);
+ });
+ });
+ return seriesDict;
+}
+
+/**
+ * Add a series to the provided dictionary mapping series names to series.
+ *
+ * @param seriesNodes the nodes in the series. Contains
+ * name, id, prefix, suffix and parent properties of the node.
+ * @param seriesDict the dictionary of series
+ * @param clusterId ID of the template of the nodes of the series
+ * @param metagraph
+ */
+function addSeriesToDict(seriesNodes: SeriesNode[],
+ seriesDict: {[seriesName: string] : SeriesNode},
+ clusterId: number,
+ metagraph: graphlib.Graph<GroupNode|OpNode, Metaedge>) {
+ if (seriesNodes.length > 1) {
+ let curSeriesName = getSeriesNodeName(
+ seriesNodes[0].prefix, seriesNodes[0].suffix,
+ seriesNodes[0].parent, seriesNodes[0].clusterId,
+ seriesNodes[seriesNodes.length - 1].clusterId);
+ let curSeriesNode = createSeriesNode(seriesNodes[0].prefix,
+ seriesNodes[0].suffix, seriesNodes[0].parent, clusterId,
+ curSeriesName);
+ _.each(seriesNodes, function(node) {
+ curSeriesNode.ids.push(node.clusterId);
+ curSeriesNode.metagraph.setNode(node.name, metagraph.node(node.name));
+ });
+ seriesDict[curSeriesName] = curSeriesNode;
+ }
+}
+
+} // close module tf.graph.hierarchy
diff --git a/tensorflow/tensorboard/components/tf-graph-common/lib/layout.ts b/tensorflow/tensorboard/components/tf-graph-common/lib/layout.ts
new file mode 100644
index 0000000000..4eb3cab011
--- /dev/null
+++ b/tensorflow/tensorboard/components/tf-graph-common/lib/layout.ts
@@ -0,0 +1,628 @@
+/// <reference path="graph.ts" />
+/// <reference path="render.ts" />
+
+module tf.graph.layout {
+
+/** Set of parameters that define the look and feel of the graph. */
+export const PARAMS = {
+ animation: {
+ /** Default duration for graph animations in ms. */
+ duration: 250
+ },
+ graph: {
+ /** Graph parameter for metanode. */
+ meta: {
+ /**
+ * Dagre's nodesep param - number of pixels that
+ * separate nodes horizontally in the layout.
+ *
+ * See https://github.com/cpettitt/dagre/wiki#configuring-the-layout
+ */
+ nodeSep: 110,
+ /**
+ * Dagre's ranksep param - number of pixels
+ * between each rank in the layout.
+ *
+ * See https://github.com/cpettitt/dagre/wiki#configuring-the-layout
+ */
+ rankSep: 25
+ },
+ /** Graph parameter for metanode. */
+ series: {
+ /**
+ * Dagre's nodesep param - number of pixels that
+ * separate nodes horizontally in the layout.
+ *
+ * See https://github.com/cpettitt/dagre/wiki#configuring-the-layout
+ */
+ nodeSep: 90,
+ /**
+ * Dagre's ranksep param - number of pixels
+ * between each rank in the layout.
+ *
+ * See https://github.com/cpettitt/dagre/wiki#configuring-the-layout
+ */
+ rankSep: 25,
+ },
+ /**
+ * Padding is used to correctly position the graph SVG inside of its parent
+ * element. The padding amounts are applied using an SVG transform of X and
+ * Y coordinates.
+ */
+ padding: {
+ paddingTop: 40,
+ paddingLeft: 20
+ }
+ },
+ subscene: {
+ meta: {
+ paddingTop: 10,
+ paddingBottom: 10,
+ paddingLeft: 10,
+ paddingRight: 10,
+ /**
+ * Used to leave room for the label on top of the highest node in
+ * the core graph.
+ */
+ labelHeight: 20,
+ /** X-space between each extracted node and the core graph. */
+ extractXOffset: 50,
+ /** Y-space between each extracted node. */
+ extractYOffset: 20
+ },
+ series: {
+ paddingTop: 10,
+ paddingBottom: 10,
+ paddingLeft: 10,
+ paddingRight: 10,
+ labelHeight: 10
+ }
+ },
+ nodeSize: {
+ /** Size of meta nodes. */
+ meta: {
+ radius: 5,
+ width: 60,
+ /** A scale for the node's height based on number of nodes inside */
+ height: d3.scale.linear().domain([1, 200]).range([15, 60]).clamp(true),
+ /** The radius of the circle denoting the expand button. */
+ expandButtonRadius: 3
+ },
+ /** Size of op nodes. */
+ op: {
+ width: 15,
+ height: 6,
+ radius: 3, // for making annotation touching ellipse
+ labelOffset: -8
+ },
+ /** Size of series nodes. */
+ series: {
+ expanded: {
+ // For expanded series nodes, width and height will be
+ // computed to account for the subscene.
+ radius: 10,
+ labelOffset: 0,
+ },
+ vertical: {
+ // When unexpanded, series whose underlying metagraphs contain
+ // one or more non-control edges will show as a vertical stack
+ // of ellipses.
+ width: 16,
+ height: 13,
+ labelOffset: -13,
+ },
+ horizontal: {
+ // When unexpanded, series whose underlying metagraphs contain
+ // no non-control edges will show as a horizontal stack of
+ // ellipses.
+ width: 24,
+ height: 8,
+ radius: 10, // Forces annotations to center line.
+ labelOffset: -10,
+ },
+ },
+ /** Size of bridge nodes. */
+ bridge: {
+ // NOTE: bridge nodes will normally be invisible, but they must
+ // take up some space so that the layout step leaves room for
+ // their edges.
+ width: 20,
+ height: 20,
+ radius: 2,
+ labelOffset: 0
+ }
+ },
+ shortcutSize: {
+ /** Size of shortcuts for op nodes */
+ op: {
+ width: 10,
+ height: 4
+ },
+ /** Size of shortcuts for meta nodes */
+ meta: {
+ width: 12,
+ height: 4,
+ radius: 1
+ },
+ /** Size of shortcuts for series nodes */
+ series: {
+ width: 14,
+ height: 4,
+ }
+ },
+ annotations: {
+ /** X-space between the shape and each annotation-node. */
+ xOffset: 10,
+ /** Y-space between each annotation-node. */
+ yOffset: 3,
+ /** X-space between each annotation-node and its label. */
+ labelOffset: 2,
+ /** Estimate max width for annotation label */
+ labelWidth: 35
+ },
+ constant: {
+ size: {
+ width: 4,
+ height: 4
+ }
+ },
+ series: {
+ /** Maximum number of repeated item for unexpanded series node. */
+ maxStackCount: 3,
+ /**
+ * Positioning offset ratio for collapsed stack
+ * of parallel series (series without edges between its members).
+ */
+ parallelStackOffsetRatio: 0.2,
+ /**
+ * Positioning offset ratio for collapsed stack
+ * of tower series (series with edges between its members).
+ */
+ towerStackOffsetRatio: 0.5
+ },
+ minimap : {
+ /** The maximum width/height the minimap can have. */
+ size: 150
+ }
+};
+
+/** Calculate layout for a scene of a group node. */
+export function scene(renderNodeInfo: render.RenderGroupNodeInformation)
+ : void {
+ // Update layout, size, and annotations of its children nodes and edges.
+ if (renderNodeInfo.node.isGroupNode) {
+ layoutChildren(renderNodeInfo);
+ }
+
+ // Update position of its children nodes and edges
+ if (renderNodeInfo.node.type === NodeType.META) {
+ layoutMetanode(renderNodeInfo);
+ } else if (renderNodeInfo.node.type === NodeType.SERIES) {
+ layoutSeriesNode(renderNodeInfo);
+ }
+};
+
+/**
+ * Update layout, size, and annotations of its children nodes and edges.
+ */
+function layoutChildren(renderNodeInfo: render.RenderGroupNodeInformation)
+ : void {
+ let children = renderNodeInfo.coreGraph.nodes().map(n => {
+ return renderNodeInfo.coreGraph.node(n);
+ }).concat(renderNodeInfo.isolatedInExtract,
+ renderNodeInfo.isolatedOutExtract);
+
+ _.each(children, childNodeInfo => {
+ // Set size of each child
+ switch (childNodeInfo.node.type) {
+ case NodeType.OP:
+ _.extend(childNodeInfo, PARAMS.nodeSize.op);
+ break;
+ case NodeType.BRIDGE:
+ _.extend(childNodeInfo, PARAMS.nodeSize.bridge);
+ break;
+ case NodeType.META:
+ if (!childNodeInfo.expanded) {
+ // set fixed width and scalable height based on cardinality
+ _.extend(childNodeInfo, PARAMS.nodeSize.meta);
+ childNodeInfo.height =
+ PARAMS.nodeSize.meta.height(childNodeInfo.node.cardinality);
+ } else {
+ let childGroupNodeInfo =
+ <render.RenderGroupNodeInformation>childNodeInfo;
+ scene(childGroupNodeInfo); // Recursively layout its subscene.
+ }
+ break;
+ case NodeType.SERIES:
+ if (childNodeInfo.expanded) {
+ _.extend(childNodeInfo, PARAMS.nodeSize.series.expanded);
+ let childGroupNodeInfo =
+ <render.RenderGroupNodeInformation>childNodeInfo;
+ scene(childGroupNodeInfo); // Recursively layout its subscene.
+ } else {
+ let childGroupNodeInfo =
+ <render.RenderGroupNodeInformation>childNodeInfo;
+ let seriesParams =
+ childGroupNodeInfo.node.hasNonControlEdges ?
+ PARAMS.nodeSize.series.vertical :
+ PARAMS.nodeSize.series.horizontal;
+ _.extend(childNodeInfo, seriesParams);
+ }
+ break;
+ default:
+ throw Error("Unrecognized node type: " + childNodeInfo.node.type);
+ }
+
+ // Layout each child's annotations
+ layoutAnnotation(childNodeInfo);
+ });
+}
+
+/**
+ * Calculate layout for a graph using dagre
+ * @param graph the graph to be laid out
+ * @param params layout parameters
+ * @return width and height of the core graph
+ */
+function dagreLayout(graph: graphlib.Graph<any, any>, params)
+ : {height: number, width: number} {
+ _.extend(graph.graph(), {
+ nodeSep: params.nodeSep,
+ rankSep: params.rankSep
+ });
+
+ let bridgeNodeNames = [];
+ let nonBridgeNodeNames = [];
+
+ // Split out nodes into bridge and non-bridge nodes, and calculate the total
+ // width we should use for bridge nodes.
+ _.each(graph.nodes(), nodeName => {
+ let nodeInfo = graph.node(nodeName);
+ if (nodeInfo.node.type === NodeType.BRIDGE) {
+ bridgeNodeNames.push(nodeName);
+ } else {
+ nonBridgeNodeNames.push(nodeName);
+ }
+ });
+
+ // If there are no non-bridge nodes, then the graph has zero size.
+ if (!nonBridgeNodeNames.length) {
+ return {
+ width: 0,
+ height: 0,
+ };
+ }
+
+ dagre.layout(graph);
+
+ let graphLabel = graph.graph();
+
+ // Calculate the true bounding box of the graph by iterating over nodes and
+ // edges rather than accepting dagre's word for it. In particular, we should
+ // ignore the extra-wide bridge nodes and bridge edges, and allow for
+ // annotation boxes and labels.
+ let minX = Infinity;
+ let minY = Infinity;
+ let maxX = -Infinity;
+ let maxY = -Infinity;
+ _.each(nonBridgeNodeNames, nodeName => {
+ let nodeInfo = graph.node(nodeName);
+ let w = 0.5 * nodeInfo.width;
+ let x1 = nodeInfo.x - w - nodeInfo.inboxWidth;
+ let x2 = nodeInfo.x + w + nodeInfo.outboxWidth;
+ minX = x1 < minX ? x1 : minX;
+ maxX = x2 > maxX ? x2 : maxX;
+ let labelLength =
+ nodeName.length - nodeName.lastIndexOf(NAMESPACE_DELIM);
+ // TODO(jimbo): Account for font width rather than using a magic number.
+ let charWidth = 3; // 3 pixels per character.
+ let lw = 0.5 * labelLength * charWidth;
+ let lx1 = nodeInfo.x - lw;
+ let lx2 = nodeInfo.x + lw;
+ minX = lx1 < minX ? lx1 : minX;
+ maxX = lx2 > maxX ? lx2 : maxX;
+ // TODO(jimbo): Account for the height of labels above op nodes here.
+ let h = 0.5 * nodeInfo.outerHeight;
+ let y1 = nodeInfo.y - h;
+ let y2 = nodeInfo.y + h;
+ minY = y1 < minY ? y1 : minY;
+ maxY = y2 > maxY ? y2 : maxY;
+ });
+ _.each(graph.edges(), edgeObj => {
+ let renderMetaedgeInfo = graph.edge(edgeObj);
+ if (renderMetaedgeInfo.structural) {
+ return; // Skip structural edges from min/max calculations.
+ }
+ _.each(renderMetaedgeInfo.points,
+ (point: { x: number, y: number }) => {
+ minX = point.x < minX ? point.x : minX;
+ maxX = point.x > maxX ? point.x : maxX;
+ minY = point.y < minY ? point.y : minY;
+ maxY = point.y > maxY ? point.y : maxY;
+ });
+ });
+
+ // Shift all nodes and edge points to account for the left-padding amount,
+ // and the invisble bridge nodes.
+ _.each(graph.nodes(), nodeName => {
+ let nodeInfo = graph.node(nodeName);
+ nodeInfo.x -= minX;
+ nodeInfo.y -= minY;
+ });
+ _.each(graph.edges(), edgeObj => {
+ _.each(graph.edge(edgeObj).points,
+ (point: { x: number, y: number }) => {
+ point.x -= minX;
+ point.y -= minY;
+ });
+ });
+
+ return {
+ width: maxX - minX,
+ height: maxY - minY,
+ };
+}
+
+/** Layout a metanode. */
+function layoutMetanode(renderNodeInfo): void {
+ // First, copy params specific to meta nodes onto this render info object.
+ let params = PARAMS.subscene.meta;
+ renderNodeInfo = _.extend(renderNodeInfo, params);
+
+ // Invoke dagre.layout() on the core graph and record the bounding box
+ // dimensions.
+ _.extend(renderNodeInfo.coreBox,
+ dagreLayout(renderNodeInfo.coreGraph, PARAMS.graph.meta));
+
+ // Calculate the position of nodes in isolatedInExtract relative to the
+ // top-left corner of inExtractBox (the bounding box for all inExtract nodes)
+ // and calculate the size of the inExtractBox.
+ let hasInExtract = renderNodeInfo.isolatedInExtract.length > 0;
+
+ renderNodeInfo.inExtractBox.width = hasInExtract ?
+ _(renderNodeInfo.isolatedInExtract).pluck("outerWidth").max() : 0;
+
+ renderNodeInfo.inExtractBox.height =
+ _.reduce(renderNodeInfo.isolatedInExtract, (height, child: any, i) => {
+ let yOffset = i > 0 ? params.extractYOffset : 0;
+ // use outerWidth/Height here to avoid overlaps between extracts
+ child.x = renderNodeInfo.inExtractBox.width / 2;
+ child.y = height + yOffset + child.outerHeight / 2;
+ return height + yOffset + child.outerHeight;
+ }, 0);
+
+ // Calculate the position of nodes in isolatedOutExtract relative to the
+ // top-left corner of outExtractBox (the bounding box for all outExtract
+ // nodes) and calculate the size of the outExtractBox.
+ let hasOutExtract = renderNodeInfo.isolatedOutExtract.length > 0;
+ renderNodeInfo.outExtractBox.width = hasOutExtract ?
+ _(renderNodeInfo.isolatedOutExtract).pluck("outerWidth").max() : 0;
+
+ renderNodeInfo.outExtractBox.height =
+ _.reduce(renderNodeInfo.isolatedOutExtract, (height, child: any, i) => {
+ let yOffset = i > 0 ? params.extractYOffset : 0;
+ // use outerWidth/Height here to avoid overlaps between extracts
+ child.x = renderNodeInfo.outExtractBox.width / 2;
+ child.y = height + yOffset + child.outerHeight / 2;
+ return height + yOffset + child.outerHeight;
+ }, 0);
+
+ // Determine the whole metanode's width (from left to right).
+ renderNodeInfo.width =
+ params.paddingLeft + renderNodeInfo.coreBox.width + params.paddingRight +
+ (hasInExtract ?
+ renderNodeInfo.inExtractBox.width + params.extractXOffset : 0) +
+ (hasOutExtract ?
+ params.extractXOffset + renderNodeInfo.outExtractBox.width : 0);
+
+ // TODO(jimbo): Remove labelHeight and instead incorporate into box sizes.
+ // Determine the whole metanode's height (from top to bottom).
+ renderNodeInfo.height =
+ renderNodeInfo.labelHeight +
+ params.paddingTop +
+ Math.max(
+ renderNodeInfo.inExtractBox.height,
+ renderNodeInfo.coreBox.height,
+ renderNodeInfo.outExtractBox.height
+ ) +
+ params.paddingBottom;
+}
+
+/**
+ * Calculate layout for series node's core graph. Only called for an expanded
+ * series.
+ */
+function layoutSeriesNode(node: render.RenderGroupNodeInformation): void {
+ let graph = node.coreGraph;
+
+ let params = PARAMS.subscene.series;
+ _.extend(node, params);
+
+ // Layout the core.
+ _.extend(node.coreBox,
+ dagreLayout(node.coreGraph, PARAMS.graph.series));
+
+ _.each(graph.nodes(), nodeName => {
+ graph.node(nodeName).excluded = false;
+ });
+
+ // Series do not have in/outExtractBox so no need to include them here.
+ node.width = node.coreBox.width + params.paddingLeft + params.paddingRight;
+ node.height = node.coreBox.height + params.paddingTop + params.paddingBottom;
+}
+
+/**
+ * Calculate layout for annotations of a given node.
+ * This will modify positions of the the given node and its annotations.
+ *
+ * @see tf.graph.render.Node and tf.graph.render.Annotation
+ * for description of each property of each render node.
+ *
+ */
+ function layoutAnnotation(renderNodeInfo: render.RenderNodeInformation): void {
+ // If the render node is an expanded metanode, then its annotations will not
+ // be visible and we should skip the annotation calculations.
+ if (renderNodeInfo.expanded) {
+ _.extend(renderNodeInfo, {
+ inboxWidth: 0,
+ inboxHeight: 0,
+ outboxWidth: 0,
+ outboxHeight: 0,
+ outerWidth: renderNodeInfo.width,
+ outerHeight: renderNodeInfo.height
+ });
+ return;
+ }
+
+ let inAnnotations = renderNodeInfo.inAnnotations.list;
+ let outAnnotations = renderNodeInfo.outAnnotations.list;
+
+ // Calculate size for in-annotations
+ _.each(inAnnotations, a => sizeAnnotation(a));
+
+ // Calculate size for out-annotations
+ _.each(outAnnotations, a => sizeAnnotation(a));
+
+ let params = PARAMS.annotations;
+ renderNodeInfo.inboxWidth =
+ inAnnotations.length > 0 ?
+ (<any>_(inAnnotations).pluck("width").max()) +
+ params.xOffset + params.labelWidth + params.labelOffset :
+ 0;
+
+ renderNodeInfo.outboxWidth =
+ outAnnotations.length > 0 ?
+ (<any>_(outAnnotations).pluck("width").max()) +
+ params.xOffset + params.labelWidth + params.labelOffset :
+ 0;
+
+ // Calculate annotation node position (a.dx, a.dy)
+ // and total height for in-annotations
+ // After this chunk of code:
+ // inboxHeight = sum of annotation heights+ (annotation.length - 1 * yOffset)
+ let inboxHeight = _.reduce(inAnnotations,
+ (height, a: any, i) => {
+ let yOffset = i > 0 ? params.yOffset : 0;
+ a.dx = -(renderNodeInfo.width + a.width) / 2 - params.xOffset;
+ a.dy = height + yOffset + a.height / 2;
+ return height + yOffset + a.height;
+ }, 0);
+
+ _.each(inAnnotations, (a: any) => {
+ a.dy -= inboxHeight / 2;
+
+ a.labelOffset = params.labelOffset;
+ });
+
+ // Calculate annotation node position position (a.dx, a.dy)
+ // and total height for out-annotations
+ // After this chunk of code:
+ // outboxHeight = sum of annotation heights +
+ // (annotation.length - 1 * yOffset)
+ let outboxHeight = _.reduce(outAnnotations,
+ (height, a: any, i) => {
+ let yOffset = i > 0 ? params.yOffset : 0;
+ a.dx = (renderNodeInfo.width + a.width) / 2 + params.xOffset;
+ a.dy = height + yOffset + a.height / 2;
+ return height + yOffset + a.height;
+ }, 0);
+
+ _.each(outAnnotations, (a: any) => {
+ // adjust by (half of ) the total height
+ // so dy is relative to the host node's center.
+ a.dy -= outboxHeight / 2;
+
+ a.labelOffset = params.labelOffset;
+ });
+
+ // Creating scales for touch point between the in-annotation edges
+ // and their hosts.
+
+ let inTouchHeight =
+ Math.min(renderNodeInfo.height / 2 - renderNodeInfo.radius,
+ inboxHeight / 2);
+ inTouchHeight = inTouchHeight < 0 ? 0 : inTouchHeight;
+
+ let inY = d3.scale.linear()
+ .domain([0, inAnnotations.length - 1])
+ .range([-inTouchHeight, inTouchHeight]);
+
+ // Calculate annotation edge position
+ _.each(inAnnotations, (a: any, i) => {
+ a.points = [
+ // The annotation node end
+ {
+ dx: a.dx + a.width / 2,
+ dy: a.dy
+ },
+
+ // The host node end
+ {
+ dx: - renderNodeInfo.width / 2,
+ // only use scale if there are more than one,
+ // otherwise center it vertically
+ dy: inAnnotations.length > 1 ? inY(i) : 0
+ }
+ ];
+ });
+
+ // Creating scales for touch point between the out-annotation edges
+ // and their hosts.
+ let outTouchHeight =
+ Math.min(renderNodeInfo.height / 2 - renderNodeInfo.radius,
+ outboxHeight / 2);
+ outTouchHeight = outTouchHeight < 0 ? 0 : outTouchHeight;
+ let outY = d3.scale.linear()
+ .domain([0, outAnnotations.length - 1])
+ .range([-outTouchHeight, outTouchHeight]);
+
+ _.each(outAnnotations, (a: any, i) => {
+ // Add point from the border of the annotation node
+ a.points = [
+ // The host node end
+ {
+ dx: renderNodeInfo.width / 2,
+ // only use scale if there are more than one,
+ // otherwise center it vertically
+ dy: outAnnotations.length > 1 ? outY(i) : 0
+ },
+ // The annotation node end
+ {
+ dx: a.dx - a.width / 2,
+ dy: a.dy
+ }
+ ];
+ });
+
+ renderNodeInfo.outerWidth = renderNodeInfo.width + renderNodeInfo.inboxWidth +
+ renderNodeInfo.outboxWidth;
+ renderNodeInfo.outerHeight =
+ Math.max(renderNodeInfo.height, inboxHeight, outboxHeight);
+}
+
+/**
+ * Set size of an annotation node.
+ */
+function sizeAnnotation(a: render.Annotation): void {
+ switch (a.annotationType) {
+ case render.AnnotationType.CONSTANT:
+ _.extend(a, PARAMS.constant.size);
+ break;
+ case render.AnnotationType.SHORTCUT:
+ if (a.node.type === NodeType.OP) {
+ _.extend(a, PARAMS.shortcutSize.op);
+ } else if (a.node.type === NodeType.META) {
+ _.extend(a, PARAMS.shortcutSize.meta);
+ } else if (a.node.type === NodeType.SERIES) {
+ _.extend(a, PARAMS.shortcutSize.series);
+ } else {
+ throw Error("Invalid node type: " + a.node.type);
+ }
+ break;
+ case render.AnnotationType.SUMMARY:
+ _.extend(a, PARAMS.constant.size);
+ break;
+ }
+}
+
+} // close module
diff --git a/tensorflow/tensorboard/components/tf-graph-common/lib/parser.ts b/tensorflow/tensorboard/components/tf-graph-common/lib/parser.ts
new file mode 100644
index 0000000000..b4864738a9
--- /dev/null
+++ b/tensorflow/tensorboard/components/tf-graph-common/lib/parser.ts
@@ -0,0 +1,189 @@
+/// <reference path="../../../typings/tsd.d.ts" />
+/// <reference path="common.ts" />
+module tf.graph.parser {
+
+/**
+ * Parses a native js value, which can be either a string, boolean or number.
+ *
+ * @param value The value to be parsed.
+ */
+function parseValue(value: string): string|number|boolean {
+ if (value === "true") {
+ return true;
+ }
+ if (value === "false") {
+ return false;
+ }
+ let firstChar = value[0];
+ if (firstChar === "\"") {
+ return value.substring(1, value.length - 1);
+ }
+ let num = parseFloat(value);
+ return isNaN(num) ? value : num;
+}
+
+/**
+ * Fetches a text file and returns a promise of the result.
+ */
+export function readPbTxt(filepath: string): Promise<string> {
+ return new Promise<string>(function(resolve, reject) {
+ d3.text(filepath, function(error, text) {
+ if (error) {
+ reject(error);
+ return;
+ }
+ resolve(text);
+ });
+ });
+}
+
+/**
+ * Fetches and parses a json file and returns a promise of the result.
+ */
+export function readJson(filepath: string): Promise<Object> {
+ return new Promise<Object>(function(resolve, reject) {
+ d3.json(filepath, function(error, text) {
+ if (error) {
+ reject(error);
+ return;
+ }
+ resolve(text);
+ });
+ });
+}
+
+/**
+ * Reads the graph and stats file (if available), parses them and returns a
+ * promise of the result.
+ */
+export function readAndParseData(dataset: {path: string, statsPath: string},
+ pbTxtContent: string, tracker: ProgressTracker):
+ Promise<{ nodes: TFNode[], statsJson: Object }|void> {
+ let graphPbTxt;
+ let statsJson;
+ return runAsyncTask("Reading graph.pbtxt", 20, () => {
+ return pbTxtContent || readPbTxt(dataset.path);
+ }, tracker)
+ .then(function(text) {
+ graphPbTxt = text;
+ return runAsyncTask("Reading stats.pbtxt", 20, () => {
+ return (dataset != null && dataset.statsPath != null) ?
+ readJson(dataset.statsPath) : null;
+ }, tracker);
+ })
+ .then(function(json) {
+ statsJson = json;
+ return runAsyncTask("Parsing graph.pbtxt", 60, () => {
+ return parsePbtxt(graphPbTxt);
+ }, tracker);
+ })
+ .then(function(nodes) {
+ return {
+ nodes: nodes,
+ statsJson: statsJson
+ };
+ })
+ .catch(function(reason) {
+ throw new Error("Failure parsing graph definition");
+ });
+}
+
+/**
+ * Parses a proto txt file into a javascript object.
+ *
+ * @param input The string contents of the proto txt file.
+ * @return The parsed object.
+ */
+export function parsePbtxt(input: string): TFNode[] {
+ let output: { [name: string]: any; } = { node: [] };
+ let stack = [];
+ let path: string[] = [];
+ let current: { [name: string]: any; } = output;
+
+ function splitNameAndValueInAttribute(line: string) {
+ let colonIndex = line.indexOf(":");
+ let name = line.substring(0, colonIndex).trim();
+ let value = parseValue(line.substring(colonIndex + 2).trim());
+ return {
+ name: name,
+ value: value
+ };
+ }
+
+ /**
+ * Since proto-txt doesn't explicitly say whether an attribute is repeated
+ * (an array) or not, we keep a hard-coded list of attributes that are known
+ * to be repeated. This list is used in parsing time to convert repeated
+ * attributes into arrays even when the attribute only shows up once in the
+ * object.
+ */
+ let ARRAY_ATTRIBUTES: {[attrPath: string] : boolean} = {
+ "node": true,
+ "node.input": true,
+ "node.attr": true,
+ "node.attr.value.list.type": true,
+ "node.attr.value.shape.dim": true,
+ "node.attr.value.tensor.string_val": true,
+ "node.attr.value.tensor.tensor_shape.dim": true
+ };
+
+ /**
+ * Adds a value, given the attribute name and the host object. If the
+ * attribute already exists, but is not an array, it will convert it to an
+ * array of values.
+ *
+ * @param obj The host object that holds the attribute.
+ * @param name The attribute name (key).
+ * @param value The attribute value.
+ * @param path A path that identifies the attribute. Used to check if
+ * an attribute is an array or not.
+ */
+ function addAttribute(obj: Object, name: string,
+ value: Object|string|number|boolean, path: string[]): void {
+ // We treat "node" specially since it is done so often.
+ let existingValue = obj[name];
+ if (existingValue == null) {
+ obj[name] = path.join(".") in ARRAY_ATTRIBUTES ? [value] : value;
+ } else if (Array.isArray(existingValue)) {
+ existingValue.push(value);
+ } else {
+ obj[name] = [existingValue, value];
+ }
+ }
+
+ // Run through the file a line at a time.
+ let startPos = 0;
+ while (startPos < input.length) {
+ let endPos = input.indexOf("\n", startPos);
+ if (endPos === -1) {
+ endPos = input.length;
+ }
+ let line = input.substring(startPos, endPos);
+ startPos = endPos + 1;
+ if (!line) {
+ continue;
+ }
+ switch (line[line.length - 1]) {
+ case "{": // create new object
+ let name = line.substring(0, line.length - 2).trim();
+ let newValue: { [name: string]: any; } = {};
+ stack.push(current);
+ path.push(name);
+ addAttribute(current, name, newValue, path);
+ current = newValue;
+ break;
+ case "}":
+ current = stack.pop();
+ path.pop();
+ break;
+ default:
+ let x = splitNameAndValueInAttribute(line);
+ addAttribute(current, x.name, x.value, path.concat(x.name));
+ break;
+ }
+ }
+
+ return output["node"];
+}
+
+} // Close module tf.graph.parser.
diff --git a/tensorflow/tensorboard/components/tf-graph-common/lib/render.ts b/tensorflow/tensorboard/components/tf-graph-common/lib/render.ts
new file mode 100644
index 0000000000..363f006fd5
--- /dev/null
+++ b/tensorflow/tensorboard/components/tf-graph-common/lib/render.ts
@@ -0,0 +1,1360 @@
+/// <reference path="graph.ts" />
+/// <reference path="hierarchy.ts" />
+
+/**
+ * Package for the Render Hierarchy for TensorFlow graph.
+ */
+
+module tf.graph.render {
+
+/**
+ * Color parameters for node encoding.
+ * @type {Object}
+ */
+export let MetanodeColors = {
+ SATURATION: 0.6,
+ LIGHTNESS: 0.85,
+ /**
+ * Neutral color to use when the node is expanded (used when coloring by
+ * compute time, memory and device).
+ */
+ EXPANDED_COLOR: "#f0f0f0",
+ /**
+ * Standard hue values for node color palette.
+ */
+ HUES: [220, 100, 180, 40, 20, 340, 260, 300, 140, 60],
+ STRUCTURE_PALETTE: function(id: number, lightened? : boolean) {
+ // The code below is a flexible way to computationally create a set
+ // of colors that go well together.
+ let hues = MetanodeColors.HUES;
+ let n = hues.length;
+ let hue = hues[id % n];
+ let m = Math.sin(hue * Math.PI / 360);
+ let sat = lightened ? 30 : 90 - 60 * m;
+ let light = lightened ? 95 : 80;
+ return d3.hsl(hue, .01 * sat, .01 * light).toString();
+ },
+ DEVICE_PALETTE: function (index: number): string {
+ return MetanodeColors.STRUCTURE_PALETTE(index);
+ },
+ UNKNOWN: "#eee",
+ GRADIENT_OUTLINE: "#888"
+};
+
+/**
+ * Parameters that affect how the graph is rendered on the screen.
+ */
+interface RenderGraphParams {
+ /**
+ * Whether to extract high degree nodes from the core part of the graph.
+ */
+ enableExtraction: boolean;
+ /**
+ * Maximum in-degree that a node can have without being considered as
+ * high in-degree node.
+ */
+ maxInDegree: number;
+ /**
+ * Maximum out-degree that a node can have without being considered as
+ * high out-degree node.
+ */
+ maxOutDegree: number;
+ /**
+ * Maximum number of control edges a node can have before they aren't
+ * displayed.
+ */
+ maxControlDegree: number;
+ /**
+ * Types patterns for predefined out-extract nodes, which are
+ * sink-like nodes that will be extracted from the main graph.
+ */
+ outExtractTypes: string[];
+
+ /**
+ * Types patterns for predefined in-extract nodes, which are
+ * source-like nodes that will be extracted from the main graph.
+ */
+ inExtractTypes: string[];
+
+ /**
+ * When removing edges from a high degree node, remove all of its edges if
+ * detachAllEdgesForHighDegree is true. Otherwise remove all in-edges if
+ * the node has high in-degree, or all out-edges if the node has high
+ * out-degree.
+ */
+ detachAllEdgesForHighDegree: boolean;
+
+ /**
+ * After extracting high in/out degree nodes and predefined
+ * source-like/sink-like, extract isolated nodes to the side
+ * if this extractIsolatedNodesWithAnnotationsOnOneSide is true.
+ */
+ extractIsolatedNodesWithAnnotationsOnOneSide: boolean;
+
+ /**
+ * Whether to add bridge nodes and edges to the core when building the
+ * subhierarchy of an expanded metanode. See buildSubhierarchy().
+ */
+ enableBridgegraph: boolean;
+
+ /**
+ * 2 colors, for the minimum and maximum value respectively, whenever we
+ * have a gradient scale.
+ */
+ minMaxColors: string[];
+
+ /**
+ * Maximum number of annotations to be displayed on a node.
+ */
+ maxAnnotations: number;
+}
+
+/**
+ * Stores the rendering information, such as x and y coordinates,
+ * for each node in the graph.
+ */
+export class RenderGraphInformation {
+ private hierarchy: hierarchy.Hierarchy;
+ private index: {[nodeName: string]: RenderNodeInformation};
+ private params: RenderGraphParams;
+ private deviceColorMap: d3.scale.Ordinal<string, string>;
+ private memoryUsageScale: d3.scale.Linear<string, string>;
+ private computeTimeScale: d3.scale.Linear<string, string>;
+ // Since the rendering information for each node is constructed lazily,
+ // upon node's expansion by the user, we keep a map between the node's name and
+ // whether the rendering information was already constructed for that node.
+ private hasSubhierarchy: {[nodeName: string]: boolean};
+ root: RenderGroupNodeInformation;
+
+ constructor(hierarchy: hierarchy.Hierarchy, params: RenderGraphParams) {
+ this.hierarchy = hierarchy;
+ this.index = {};
+ this.deviceColorMap = d3.scale.ordinal<string>()
+ .domain(hierarchy.devices)
+ .range(_.map(d3.range(hierarchy.devices.length),
+ MetanodeColors.DEVICE_PALETTE));
+
+ let topLevelGraph = hierarchy.root.metagraph;
+ // Find the maximum and minimum memory usage.
+ let memoryExtent = d3.extent(topLevelGraph.nodes(),
+ (nodeName, index) => {
+ let node = topLevelGraph.node(nodeName);
+ // Some ops don't have stats at all.
+ if (node.stats != null) {
+ return node.stats.totalBytes;
+ }
+ });
+ this.memoryUsageScale = d3.scale.linear<string, string>()
+ .domain(memoryExtent)
+ .range(params.minMaxColors);
+
+ // Find also the minimum and maximum compute time.
+ let computeTimeExtent = d3.extent(topLevelGraph.nodes(), (nodeName, index) => {
+ let node = topLevelGraph.node(nodeName);
+ // Some ops don't have stats at all.
+ if (node.stats != null) {
+ return node.stats.totalMicros;
+ }
+ });
+ this.computeTimeScale = d3.scale.linear<string, string>()
+ .domain(computeTimeExtent)
+ .range(params.minMaxColors);
+
+ // Maps node name to whether the rendering hierarchy was already constructed.
+ this.hasSubhierarchy = {};
+ this.params = params;
+ this.root = new RenderGroupNodeInformation(hierarchy.root);
+ this.index[hierarchy.root.name] = this.root;
+ this.buildSubhierarchy(hierarchy.root.name);
+ this.root.expanded = true;
+ }
+
+ getRenderNodeByName(nodeName: string): RenderNodeInformation {
+ return this.index[nodeName];
+ }
+
+ /**
+ * Return the nearest ancestor node, including itself, that is visible
+ * in the visualization. This method is used so that we can select
+ * (highlight) a node that isn't drawn yet, by selecting (highlighting)
+ * its nearest ancestor that has been drawn.
+ */
+ getNearestVisibleAncestor(name: string): string {
+ let path = getHierarchicalPath(name);
+ for (let i = 0; i < path.length; i++) {
+ let nodeName = path[i];
+ // Op nodes have expanded set to false by default.
+ if (!this.getRenderNodeByName(nodeName).expanded) {
+ return nodeName;
+ }
+ }
+ // Fallthrough. If everything was expanded return the node.
+ return name;
+ }
+
+ // TODO(jimbo): Delete this an any code it touches (all deprecated).
+ setDepth(depth: number): void {
+ setGroupNodeDepth(this.root, +depth);
+ }
+
+ buildSubhierarchy(nodeName: string): void {
+ // Terminate if the rendering hierarchy was already constructed
+ // for this node.
+ if (nodeName in this.hasSubhierarchy) {
+ return;
+ }
+
+ let renderNodeInfo = this.index[nodeName];
+
+ // If it is not a meta node or a series node, don't do anything.
+ if (renderNodeInfo.node.type !== NodeType.META &&
+ renderNodeInfo.node.type !== NodeType.SERIES) {
+ return;
+ }
+
+ // At this point we know the rendering information is about a group node.
+ let renderGroupNodeInfo = <RenderGroupNodeInformation> renderNodeInfo;
+ let metagraph = renderGroupNodeInfo.node.metagraph;
+ let coreGraph = renderGroupNodeInfo.coreGraph;
+
+ // Create render nodes to represent each child from the metagraph. Although
+ // these will initially be added to the coreGraph, they may later be
+ // extracted. Also, due to extraction, the coreGraph may contain disjoint
+ // groups between which there is no visible path (other than annotations).
+ _.each(metagraph.nodes(), childName => {
+
+ let childNode = metagraph.node(childName);
+ let childRenderInfo = childNode.isGroupNode ?
+ new RenderGroupNodeInformation(<GroupNode>childNode) :
+ new RenderNodeInformation(childNode);
+ this.index[childName] = childRenderInfo;
+ coreGraph.setNode(childName, childRenderInfo);
+
+ if (childRenderInfo.node.stats != null) {
+ childRenderInfo.memoryColor =
+ this.memoryUsageScale(childRenderInfo.node.stats.totalBytes);
+ childRenderInfo.computeTimeColor =
+ this.computeTimeScale(childRenderInfo.node.stats.totalMicros);
+ }
+
+ if (!childNode.isGroupNode) {
+ _.each((<OpNode>childNode).inEmbeddings, embedding => {
+ let renderMetaedgeInfo = new RenderMetaedgeInformation(null);
+ addInAnnotation(childRenderInfo, embedding, null, renderMetaedgeInfo,
+ AnnotationType.CONSTANT, this.params);
+ this.index[embedding.name] = new RenderNodeInformation(embedding);
+ });
+ _.each((<OpNode>childNode).outEmbeddings, embedding => {
+ let renderMetaedgeInfo = new RenderMetaedgeInformation(null);
+ addOutAnnotation(childRenderInfo, embedding, null, renderMetaedgeInfo,
+ AnnotationType.SUMMARY, this.params);
+ this.index[embedding.name] = new RenderNodeInformation(embedding);
+ });
+ let device = (<OpNode>childRenderInfo.node).device;
+ if (device != null) {
+ childRenderInfo.deviceColors = [{
+ color: this.deviceColorMap(device),
+ proportion: 1.0
+ }];
+ }
+ } else {
+ // Make a list of tuples (device, proportion), where proportion
+ // is the fraction of op nodes that have that device.
+ let pairs = _.pairs((<GroupNode> childNode).deviceHistogram);
+ if (pairs.length > 0) {
+ // Compute the total # of devices.
+ let numDevices = _.sum(pairs, _.last);
+ childRenderInfo.deviceColors = _.map(pairs, pair => {
+ return {
+ color: this.deviceColorMap(pair[0]),
+ // Normalize to a proportion of total # of devices.
+ proportion: pair[1] / numDevices
+ };
+ });
+ }
+ }
+ });
+
+ // Add render metaedge info for edges in the metagraph.
+ _.each(metagraph.edges(), edgeObj => {
+ let metaedge = metagraph.edge(edgeObj);
+ let renderMetaedgeInfo = new RenderMetaedgeInformation(metaedge);
+ coreGraph.setEdge(edgeObj.v, edgeObj.w, renderMetaedgeInfo);
+ });
+
+ if (this.params.enableExtraction &&
+ renderGroupNodeInfo.node.type === NodeType.META) {
+ extractHighDegrees(renderGroupNodeInfo, this.params);
+ }
+
+ // Record that we constructed the rendering hierarchy for this node, so we
+ // don't construct it another time.
+ this.hasSubhierarchy[nodeName] = true;
+
+ // Look up the parent node's render information and short circuit if none.
+ let parentNode = renderGroupNodeInfo.node.parentNode;
+ if (!parentNode) {
+ return;
+ }
+ let parentNodeInfo =
+ <RenderGroupNodeInformation> this.index[parentNode.name];
+
+ // Utility function for computing the name of a bridge node.
+ let getBridgeNodeName = (inbound, ...rest) =>
+ rest.concat([inbound ? "IN" : "OUT"]).join("~~");
+
+ // Build out the bridgegraph.
+ let bridgegraph = this.hierarchy.getBridgegraph(nodeName);
+
+ // Look for popular nodes so we can make annotations instead of paths.
+ let otherCounts = {
+ // Counts of edges coming INTO other nodes by name (outgoing from self).
+ in: <{[nodeName: string]: number}> {},
+ // Counts of edges going OUT from other nodes by name (coming into self).
+ out: <{[nodeName: string]: number}> {},
+ // Counts of all control edges involving other nodes by name.
+ control: <{[nodeName: string]: number}> {},
+ };
+ _.each(bridgegraph.edges(), e => {
+ // An edge is inbound if its destination node is in the metagraph.
+ let inbound = !!metagraph.node(e.w);
+ let otherName = inbound ? e.v : e.w;
+ let metaedge = bridgegraph.edge(e);
+ if (!metaedge.numRegularEdges) {
+ otherCounts.control[otherName] =
+ (otherCounts.control[otherName] || 0) + 1;
+ } else if (inbound) {
+ otherCounts.out[otherName] = (otherCounts.out[otherName] || 0) + 1;
+ } else {
+ otherCounts.in[otherName] = (otherCounts.in[otherName] || 0) + 1;
+ }
+ });
+
+ // Add annotations and edges for bridgegraph relationships.
+ let hierarchyNodeMap = this.hierarchy.getNodeMap();
+ _.each(bridgegraph.edges(), bridgeEdgeObj => {
+ let bridgeMetaedge = bridgegraph.edge(bridgeEdgeObj);
+
+ // Determine whether this bridge edge is incoming by checking the
+ // metagraph for a node that matches the destination end.
+ let inbound = !!metagraph.node(bridgeEdgeObj.w);
+
+ // Based on the direction of the edge, one endpoint will be an immediate
+ // child of this renderNodeInfo, and the other endpoint will be a sibling
+ // of the parent (or an ancestor further up).
+ let [childName, otherName] =
+ inbound ?
+ [bridgeEdgeObj.w, bridgeEdgeObj.v] :
+ [bridgeEdgeObj.v, bridgeEdgeObj.w];
+
+ let childRenderInfo = this.index[childName];
+ let otherRenderInfo = this.index[otherName];
+ let otherNode =
+ otherRenderInfo ?
+ otherRenderInfo.node :
+ hierarchyNodeMap[otherName];
+
+ // Determine whether this edge is a control edge between nodes where
+ // either node is high-degree with respect to control edges. This will
+ // be a signal to show it as an annotation instead of a bridge edge.
+ let isHighDegreeControlEdge = !bridgeMetaedge.numRegularEdges &&
+ otherCounts.control[otherName] > this.params.maxControlDegree;
+
+ let [annotations, childAnnotations] =
+ inbound ?
+ [renderNodeInfo.inAnnotations, childRenderInfo.inAnnotations] :
+ [renderNodeInfo.outAnnotations, childRenderInfo.outAnnotations];
+
+ let isOtherHighDegree =
+ inbound ?
+ otherCounts.out[otherName] > this.params.maxOutDegree :
+ otherCounts.in[otherName] > this.params.maxInDegree;
+
+ // The adjoining render metaedge info from the parent's coreGraph, if any.
+ // It will either be a Metaedge involving this node directly, if it
+ // previously came from a metagraph, or it'll be a Metaedge involving
+ // a previously created bridge node standing in for the other node.
+ let adjoiningMetaedge = null;
+
+ // We can only hope to render a bridge path if:
+ // - bridgegraph paths are enabled,
+ // - the other node is not too high-degree,
+ // - the child is in the core (not extracted for being high-degree), and
+ // - there's a path (in the traversal sense) between child and other.
+ let canDrawBridgePath = false;
+ if (this.params.enableBridgegraph &&
+ !isOtherHighDegree &&
+ !isHighDegreeControlEdge &&
+ childRenderInfo.isInCore()) {
+
+ // Utility function for finding an adjoining metaedge.
+ let findAdjoiningMetaedge = targetName => {
+ let adjoiningEdgeObj: graphlib.EdgeObject =
+ inbound ?
+ { v: targetName, w: nodeName } :
+ { v: nodeName, w: targetName };
+ return <RenderMetaedgeInformation>
+ parentNodeInfo.coreGraph.edge(adjoiningEdgeObj);
+ };
+
+ adjoiningMetaedge = findAdjoiningMetaedge(otherName);
+ if (!adjoiningMetaedge) {
+ adjoiningMetaedge = findAdjoiningMetaedge(
+ getBridgeNodeName(inbound, otherName, parentNode.name));
+ }
+
+ canDrawBridgePath = !!adjoiningMetaedge;
+ }
+
+ // Although dataflow edges are acyclic, control dependency edges may
+ // actually point "backwards" in the graph. If this bridgeMetaedge is
+ // a control dependency, we need to determine whether it's backwards
+ // pointing so that we render it appropriately.
+ //
+ // For instance, say we're rendering a graph with nodes named A/B and Z/Y,
+ // and we're currently rendering the bridgegraph for A. Further, let's say
+ // that there was an original BaseEdge from A/B->Z/Y and a CONTROL EDGE
+ // from Z/Y=>A/B.
+ //
+ // +----------------+
+ // | A |
+ // | +-----+ | +------+
+ // | | B |>----->|>------->| Z |
+ // | | | | | |
+ // | | | * | | |
+ // | | |<=====<|<=======<| |
+ // | +-----+ | +------+
+ // +----------------+
+ //
+ // When we render the subhierarchy for Metanode A, we'll come across a
+ // control-only Metaedge in the bridgegraph from Z=>A/B (*). The question
+ // is whether this edge is backwards.
+ //
+ // To answer that question, we follow the chain of adjoining metaedges
+ // until we reach the topmost one. In this case, that's the control-only
+ // Metaedge Z=>A in the ROOT's metagraph. We determine that this edge
+ // is backwards by looking at the topological ordering of ROOT's metagraph
+ // (which ignores control edges) and seeing that Z comes AFTER A.
+ //
+ // The property of being backwards is independent of whether the edge
+ // is inbound or outbound. In the preceeding example, if we were building
+ // the subhierarchy for Z, we'd find bridge edge Z/Y=>A, walk to its
+ // topmost adjoining metaedge Z=>A and discover that it's backwards.
+ let backwards = false;
+ if (adjoiningMetaedge && !bridgeMetaedge.numRegularEdges) {
+ // Find the top-most adjoining render metaedge information, and the
+ // GroupNode whose metagraph must contain the associated metaedge.
+ let topAdjoiningMetaedge = adjoiningMetaedge;
+ let topGroupNode = parentNodeInfo.node;
+ while (topAdjoiningMetaedge.adjoiningMetaedge) {
+ topAdjoiningMetaedge = topAdjoiningMetaedge.adjoiningMetaedge;
+ topGroupNode = <GroupNode>topGroupNode.parentNode;
+ }
+
+ // Check against the topological ordering for the top node. The current
+ // bridge metaedge we're evaluating is backwards if its source comes
+ // after its destination.
+ let ordering = this.hierarchy.getTopologicalOrdering(topGroupNode.name);
+ let e = topAdjoiningMetaedge.metaedge;
+ backwards = ordering[e.v] > ordering[e.w];
+ }
+
+ // Render backwards control edges as annotations.
+ canDrawBridgePath = canDrawBridgePath && !backwards;
+
+ // If we can't make a bridge path for any reason, then we add an
+ // annotation instead.
+ if (!canDrawBridgePath) {
+ childAnnotations.push(new Annotation(
+ otherNode,
+ otherRenderInfo,
+ new RenderMetaedgeInformation(bridgeMetaedge),
+ AnnotationType.SHORTCUT,
+ inbound), this.params);
+ return;
+ }
+
+ // At this point, all conditions have been met for drawing a bridge path.
+
+ // Find or create the IN/OUT node representing otherNode.
+ let bridgeContainerName = getBridgeNodeName(inbound, nodeName);
+ let bridgeNodeName = getBridgeNodeName(inbound, otherName, nodeName);
+ let bridgeNodeRenderInfo = coreGraph.node(bridgeNodeName);
+ if (!bridgeNodeRenderInfo) {
+
+ // Find or create the directional container for the bridge node.
+ let bridgeContainerInfo = coreGraph.node(bridgeContainerName);
+ if (!bridgeContainerInfo) {
+ let bridgeContainerNode: BridgeNode = {
+ // Important node properties.
+ name: bridgeContainerName,
+ type: NodeType.BRIDGE,
+ // Unused node properties.
+ isGroupNode: false,
+ cardinality: 0,
+ parentNode: null,
+ stats: null,
+ // BridgeNode properties.
+ inbound: inbound,
+ };
+ bridgeContainerInfo =
+ new RenderNodeInformation(bridgeContainerNode);
+ this.index[bridgeContainerName] = bridgeContainerInfo;
+ coreGraph.setNode(bridgeContainerName, bridgeContainerInfo);
+ }
+
+ let bridgeNode: BridgeNode = {
+ // Important node properties.
+ name: bridgeNodeName,
+ type: NodeType.BRIDGE,
+ // Unimportant node properties.
+ isGroupNode: false,
+ cardinality: 1,
+ parentNode: null,
+ stats: null,
+ // BridgeNode properties.
+ inbound: inbound,
+ };
+ bridgeNodeRenderInfo = new RenderNodeInformation(bridgeNode);
+ this.index[bridgeNodeName] = bridgeNodeRenderInfo;
+ coreGraph.setNode(bridgeNodeName, bridgeNodeRenderInfo);
+
+ // Set bridgeNode to be a graphlib child of the container node.
+ coreGraph.setParent(bridgeNodeName, bridgeContainerName);
+ bridgeContainerInfo.node.cardinality++;
+ }
+
+ // Create and add a bridge render metaedge.
+ let bridgeRenderMetaedge =
+ new RenderMetaedgeInformation(bridgeMetaedge);
+ bridgeRenderMetaedge.adjoiningMetaedge = adjoiningMetaedge;
+ inbound ?
+ coreGraph.setEdge(bridgeNodeName, childName, bridgeRenderMetaedge) :
+ coreGraph.setEdge(childName, bridgeNodeName, bridgeRenderMetaedge);
+
+ }); // End _.each(bridgegraph.edges).
+
+ // For each bridge container (IN and/or OUT), add structural edges between
+ // terminal nodes and that container. A terminal node is one which has no
+ // non-bridge edges in the direction of the container.
+ //
+ // For example, consider a Metanode A which contains two child nodes A/B
+ // and A/C. Let's say it has one edge in the metagraph from A/B->A/C, and
+ // one edge in the bridgegraph from Z->A/C.
+ //
+ // At this point, we've added a container bridge node IN to house all
+ // incoming bridge nodes. We'v alse added a bridge node Z' (with parent IN)
+ // to A, and a bridge edge from Z'->C.
+ //
+ // +----------------------+
+ // | A +---+ |
+ // | +------>| C | |
+ // | | +---+ |
+ // | | ^ |
+ // | | | |
+ // | | +----|----+ |
+ // | | | IN | | |
+ // | +---+ | +---+ | |
+ // | | B | | | Z'| | |
+ // | +---+ | +---+ | |
+ // | +---------+ |
+ // +----------------------+
+ //
+ // With no other help, dagre would lay out B and Z' on the same level,
+ // because both of them have no incoming edges. In other words, B is a
+ // terminal node in the INCOMING direction.
+ //
+ // But we want to force dagre to lay out Z' (and everything in IN) lower
+ // than all non-bridge nodes, so that there's enough room for the bridge
+ // edges after they've been adjusted to meet up with paths coming in from
+ // outside.
+ //
+ // To force Z' (and all other bridge nodes) to be lowest in the graph, we
+ // identify terminal nodes like B and give them structural edges to
+ // a new structural bridge node S which we add to IN.
+ //
+ // +----------------------+
+ // | A +---+ |
+ // | +--->| C | |
+ // | | +---+ |
+ // | +---+ ^ |
+ // | | B | | |
+ // | +---+ | |
+ // | ^ | |
+ // | | | |
+ // | +----|------|----+ |
+ // | |IN | | | |
+ // | | +---+ +---+ | |
+ // | | | S | | Z'| | |
+ // | | +---+ +---+ | |
+ // | +----------------+ |
+ // +----------------------+
+ //
+ // This ensures that dagre will lay out the bridge containers strictly at
+ // the ends of the graph. The structural edges will never be seen in the
+ // visualization except as a debugging aid.
+ _.each([true, false], inbound => {
+ let bridgeContainerName = getBridgeNodeName(inbound, nodeName);
+ let bridgeContainerInfo = coreGraph.node(bridgeContainerName);
+ if (!bridgeContainerInfo) {
+ return;
+ }
+ _.each(coreGraph.nodes(), childName => {
+ // Short-circuit if this child is a bridge node or it's not a terminal
+ // node in the direction we're interested in.
+ let childNodeInfo = coreGraph.node(childName);
+ if (childNodeInfo.node.type === NodeType.BRIDGE) {
+ return;
+ }
+ let isTerminal = inbound ?
+ !coreGraph.predecessors(childName).length :
+ !coreGraph.successors(childName).length;
+ if (!isTerminal) {
+ return;
+ }
+
+ // Find or create a bridge node in the container for all structural
+ // metaedges. It would have been nice to skip this step and simply
+ // set a metaedge between the terminal node and the container node, but
+ // in that case, something about the graph upsets dagre.layout()'s
+ // longestPath algorithm (was getting errors due to an undefined).
+ let structuralNodeName =
+ getBridgeNodeName(inbound, nodeName, "STRUCTURAL_TARGET");
+ let structuralRenderInfo = coreGraph.node(structuralNodeName);
+ if (!structuralRenderInfo) {
+ let bridgeNode: BridgeNode = {
+ // Important Node properties.
+ name: structuralNodeName,
+ type: NodeType.BRIDGE,
+ // Unimportant Node properties.
+ isGroupNode: false,
+ cardinality: 1,
+ parentNode: null,
+ stats: null,
+ // BridgeNode properties.
+ inbound: inbound,
+ };
+ structuralRenderInfo = new RenderNodeInformation(bridgeNode);
+ structuralRenderInfo.structural = true;
+ this.index[structuralNodeName] = structuralRenderInfo;
+ coreGraph.setNode(structuralNodeName, structuralRenderInfo);
+ bridgeContainerInfo.node.cardinality++;
+ coreGraph.setParent(structuralNodeName, bridgeContainerName);
+ }
+
+ // Create the structural Metaedge and insert it.
+ let structuralMetaedgeInfo = new RenderMetaedgeInformation(null);
+ structuralMetaedgeInfo.structural = true;
+ structuralMetaedgeInfo.weight--; // Reduce weight for dagre layout.
+ inbound ?
+ coreGraph.setEdge(
+ structuralNodeName, childName, structuralMetaedgeInfo) :
+ coreGraph.setEdge(
+ childName, structuralNodeName, structuralMetaedgeInfo);
+ });
+ });
+ }
+}
+
+/**
+ * A class for rendering annotation object which contains label
+ * about the node embedded as annotation, type of annotation and the location
+ * of both the annotation's node and edge.
+ *
+ * Annotation objects include embedded constants, embedded summary, and
+ * edge shortcuts.
+ */
+export class Annotation {
+ node: Node;
+ renderNodeInfo: RenderNodeInformation;
+ renderMetaedgeInfo: RenderMetaedgeInformation;
+ annotationType: AnnotationType;
+ /**
+ * Center position of annotation relative to the host
+ * node's center x.
+ */
+ dx: number;
+ /**
+ * Center position of annotation relative to the host
+ * node's center y.
+ */
+ dy: number;
+ width: number;
+ height: number;
+ /**
+ * A flag whether it is an in-annotation (if true) or
+ * out-annotation (if false).
+ */
+ isIn: boolean;
+ /** Label horizontal offset from the end of the node shape */
+ labelOffset: number;
+ /**
+ * Array of points for edges from the annotation to its host
+ * node. Each point contains the point location, relative to
+ * the host node's center.
+ */
+ points: {dx: number, dy: number}[];
+
+ /**
+ * Creates a new Annotation.
+ *
+ * @param node The underlying node this annotation points to.
+ * @param renderNodeInfo The render information for the underlying node
+ * this annotation points to. This can be null if the annotation
+ * denotes an embedding (constant, summary), in which case we
+ * use the node property.
+ * @param renderMetaedgeInfo The render information for the edge associated
+ * with the annotation.
+ * @param type The type of the annotation.
+ * @param isIn True if it is an in-annotation. False if it is an
+ * out-annotation.
+ */
+ constructor(node: Node, renderNodeInfo: RenderNodeInformation,
+ renderMetaedgeInfo: RenderMetaedgeInformation, type: AnnotationType,
+ isIn: boolean) {
+ this.node = node;
+ this.renderNodeInfo = renderNodeInfo;
+ this.renderMetaedgeInfo = renderMetaedgeInfo;
+ this.annotationType = type;
+ // Properties specified by layout
+ this.dx = 0;
+ this.dy = 0;
+ this.width = 0;
+ this.height = 0;
+
+ this.isIn = isIn;
+ this.points = [];
+ }
+};
+
+export enum AnnotationType {SHORTCUT, CONSTANT, SUMMARY, ELLIPSIS};
+
+/**
+ * Manages a list of annotations. Two will be used for each
+ * RenderNodeInformation, one for in annotations and one for out annotations.
+ */
+export class AnnotationList {
+ /**
+ * List of visually drawable annotations, may include an ellipses annotation
+ * if the number added exceeds the number specified by maxAnnotations.
+ */
+ list: Annotation[];
+
+ /**
+ * Set of nodes which have been added as annotations to this list, so we can
+ * prevent duplicates.
+ */
+ nodeNames: { [nodeName: string]: boolean };
+
+ constructor() {
+ this.list = [];
+ this.nodeNames = {};
+ }
+
+ /**
+ * Append an annotation to the list, or a stand-in ellipsis annotation instead
+ * if this would make it too many.
+ */
+ push(annotation: Annotation, params: RenderGraphParams): void {
+ if (annotation.node.name in this.nodeNames) {
+ return; // Skip duplicate annotation.
+ }
+ this.nodeNames[annotation.node.name] = true;
+
+ if (this.list.length < params.maxAnnotations) {
+ this.list.push(annotation);
+ return;
+ }
+
+ let lastAnnotation = this.list[this.list.length - 1];
+ if (lastAnnotation.annotationType === AnnotationType.ELLIPSIS) {
+ let ellipsisNode = <EllipsisNode>lastAnnotation.node;
+ ellipsisNode.setNumMoreNodes(++ellipsisNode.numMoreNodes);
+ return;
+ }
+
+ let ellipsisNode = new tf.graph.EllipsisNodeImpl(1);
+ this.list.push(new Annotation(ellipsisNode,
+ new RenderNodeInformation(ellipsisNode), null,
+ AnnotationType.ELLIPSIS, annotation.isIn));
+ }
+}
+
+/**
+ * Contains rendering information about a node in the hierarchical graph.
+ */
+export class RenderNodeInformation {
+ /** Reference to the original underlying Node from the hierarchical graph. */
+ node: Node;
+ /** Whether the node is expanded or not. */
+ expanded: boolean;
+ /**
+ * List of rendering information about in-annotations like constants and
+ * shortcuts to high-degree nodes.
+ */
+ inAnnotations: AnnotationList;
+ /** List of rendering information about out-annotations (e.g. summary nodes) */
+ outAnnotations: AnnotationList;
+
+ // --- Params specified by layout --- //
+
+ /** Center x position */
+ x: number;
+ /** Center y position */
+ y: number;
+ /** Width of the node's shape */
+ width: number;
+ /** Height of the node's shape. */
+ height: number;
+ /** Width of the bounding box for all in-annotations. */
+ inboxWidth: number;
+ /** Width of the bounding box for all out-annotations. */
+ outboxWidth: number;
+ /**
+ * Whether the node should be excluded from the scene.
+ * This is only used when there are too many items in a series so we only
+ * want to include top N ones.
+ */
+ // TODO(jimbo): Now that series rendering is non-recursive, remove this and
+ // all its uses from the code base.
+ excluded: boolean;
+
+ // --- Params used in drawing the bridge paths --- //
+
+ /**
+ * All bridge nodes are meant to be invisible, but whereas most represent a
+ * relationship from the underlying graph hierarchy, some exist solely for
+ * layout reasons. Specifically, those bridge nodes which have only structural
+ * rendering metaedges.
+ */
+ structural: boolean;
+
+ // --- Params for the size of the node box --- //
+
+ /** Label vertical offset from the center of node shape */
+ labelOffset: number;
+ /** X-space between each extracted node and the core graph. */
+ extractXOffset: number;
+ /** Rectangle radius (for making rounded rectangle) */
+ radius: number;
+
+ // --- Params for expanded node --- //
+
+ /** Label height for expanded node. */
+ labelHeight: number;
+ // Paddings between inner subscene and the border of the expanded node.
+ paddingTop: number;
+ paddingLeft: number;
+ paddingRight: number;
+ paddingBottom: number;
+
+ /** Width of the whole node including its shape and its annotations */
+ outerWidth: number;
+ /** Height of the whole node including its shape and its annotations */
+ outerHeight: number;
+ /**
+ * Whether a node is extracted as source-like (having high out-degree or matching
+ * predefined in-extract pattern.)
+ */
+ isInExtract: boolean;
+ /**
+ * Whether a node is extracted as sink-like (having high in-degree or matching
+ * predefined out-extract pattern.)
+ */
+ isOutExtract: boolean;
+
+ /**
+ * List of (color, proportion) tuples based on the proportion of devices of
+ * its children. If this node is an op node, this list will have only one
+ * color with proportion 1.0.
+ */
+ deviceColors: {color: string, proportion: number}[];
+
+ /**
+ * Color according to the memory usage of this node.
+ */
+ memoryColor: string;
+
+ /**
+ * Color according to the compute time of this node.
+ */
+ computeTimeColor: string;
+
+ constructor(node: Node) {
+ this.node = node;
+ this.expanded = false;
+ this.inAnnotations = new AnnotationList();
+ this.outAnnotations = new AnnotationList();
+ // Params specified by layout
+ this.x = 0;
+ this.y = 0;
+ this.width = 0;
+ this.height = 0;
+ this.inboxWidth = 0;
+ this.outboxWidth = 0;
+
+ this.excluded = false;
+
+ // Params for bridge paths.
+ this.structural = false;
+
+ // Params for node box.
+ this.labelOffset = 0;
+ this.extractXOffset = 0;
+ this.radius = 0;
+
+ // Params for expanded node
+ this.labelHeight = 0;
+ this.paddingTop = 0;
+ this.paddingLeft = 0;
+ this.paddingRight = 0;
+ this.paddingBottom = 0;
+
+ this.outerWidth = 0;
+ this.outerHeight = 0;
+ this.isInExtract = false;
+ this.isOutExtract = false;
+ }
+
+ isInCore(): boolean {
+ return !this.isInExtract && !this.isOutExtract;
+ }
+}
+
+/**
+ * Contains rendering information about a Metaedge from the underlying
+ * hierarchical graph. It may be from either a metagraph or a bridgegraph.
+ */
+export class RenderMetaedgeInformation {
+ /**
+ * Reference to the original underlying Metaedge from the hierarchical graph,
+ * if any. This will be null for the edges which connect OpNodes to their
+ * embeddings, for example.
+ */
+ metaedge: Metaedge;
+
+ /**
+ * Reference to the adjoining RenderMeteaedgeInformation from the parent's
+ * coreGraph. This is used during layout to determine the point at which this
+ * edge should touch the node's bounding box. This property will be null for
+ * edges which terminate at a node on both ends (all non-bridge edges).
+ */
+ adjoiningMetaedge: RenderMetaedgeInformation;
+
+ /**
+ * Most of the time, a RenderMetaedgeInformation object represents a real
+ * edge between nodes in the underlying graph structure. But sometimes, an
+ * edge only exsts for layout purposes. These structural edges are added
+ * during buildSubhierarchy() to force dagre.layout() to put bridge nodes
+ * at the ends of the flow.
+ * @see buildSubhierarchy()
+ */
+ structural: boolean;
+
+ /**
+ * Weight of the edge, used by dagre when deciding how important an edge is.
+ * Edges with higher weight are made shorter and straighter. The default
+ * dagre uses is 1.
+ */
+ weight: number;
+
+ /**
+ * X and Y coordinate pairs of the points in the path of the edge.
+ * @see tf.graph.node.subsceneAdjustPaths
+ */
+ points: any[];
+
+ /**
+ * D3 selection of the group containing the path that displays this edge.
+ */
+ edgeGroup: d3.Selection<RenderMetaedgeInformation>;
+
+ constructor(metaedge: Metaedge) {
+ this.metaedge = metaedge;
+ this.adjoiningMetaedge = null;
+ this.structural = false;
+ this.weight = 1;
+ }
+}
+
+function addInAnnotation(node: RenderNodeInformation, predecessor: Node,
+ predecessorRenderInfo: RenderNodeInformation, edge: any,
+ type: AnnotationType, params: RenderGraphParams): void {
+ let annotation = new Annotation(predecessor, predecessorRenderInfo, edge,
+ type, true);
+ node.inAnnotations.push(annotation, params);
+}
+
+function addOutAnnotation(node: RenderNodeInformation, successor: Node,
+ successorRenderInfo: RenderNodeInformation, edge: any,
+ type: AnnotationType, params: RenderGraphParams): void {
+ let annotation = new Annotation(successor, successorRenderInfo, edge,
+ type, false);
+ node.outAnnotations.push(annotation, params);
+}
+
+function setGraphDepth(graph: graphlib.Graph<RenderNodeInformation, any>,
+ depth: number) {
+ _.each(graph.nodes(), nodeName => {
+ let child = graph.node(nodeName);
+ child.expanded = depth > 1; // set all child of depth 1 to collapsed
+ if (depth > 0) {
+ switch (child.node.type) {
+ case NodeType.META:
+ case NodeType.SERIES:
+ setGroupNodeDepth(<RenderGroupNodeInformation>child, depth - 1);
+ break;
+ // Do nothing for leaf
+ }
+ }
+ });
+};
+
+export class RenderGroupNodeInformation extends RenderNodeInformation {
+ node: GroupNode;
+ /**
+ * The core graph is derived from the underlying node's metagraph, minus
+ * the extracted source-like and sink-like nodes.
+ */
+ coreGraph: graphlib.Graph<RenderNodeInformation, RenderMetaedgeInformation>;
+ /** Size of the bounding box for a metanode's core graph. */
+ coreBox: {
+ width: number,
+ height: number,
+ };
+ /** Size of the bounding box for a metanode's isolated in-extract children. */
+ inExtractBox: {width: number, height: number};
+ /** Size of the bounding box for a metanode's isolated out-extract children. */
+ outExtractBox: {width: number, height: number};
+ /** Array of isolated in-extract nodes. */
+ isolatedInExtract: RenderNodeInformation[];
+ /** Array of isolated out-extract nodes. */
+ isolatedOutExtract: RenderNodeInformation[];
+
+ constructor(groupNode: GroupNode) {
+ super(groupNode);
+ let metagraph = groupNode.metagraph;
+ let gl = metagraph.graph();
+ this.coreGraph =
+ createGraph<RenderNodeInformation, RenderMetaedgeInformation>(
+ gl.name, GraphType.CORE, { compound: true });
+ this.coreBox = {width: 0, height: 0};
+ this.inExtractBox = {width: 0, height: 0};
+ this.outExtractBox = {width: 0, height: 0};
+ this.isolatedInExtract = [];
+ this.isolatedOutExtract = [];
+ }
+}
+
+function setGroupNodeDepth(renderInfo: RenderGroupNodeInformation,
+ depth: number): void {
+ if (renderInfo.coreGraph) {
+ setGraphDepth(renderInfo.coreGraph, depth);
+ }
+}
+
+/**
+ * Remove an edge from the graph and add annotations to both ends of the edge.
+ *
+ * @param The core graph.
+ * @param v Source name.
+ * @param w Sink name.
+ */
+function createShortcut(graph: graphlib.Graph<RenderNodeInformation, {}>,
+ v: string, w: string, params: RenderGraphParams) {
+ let src = graph.node(v);
+ let sink = graph.node(w);
+ let edge = graph.edge(v, w);
+
+ // Add each annotation.
+ addOutAnnotation(src, sink.node, sink, edge, AnnotationType.SHORTCUT, params);
+ addInAnnotation(sink, src.node, src, edge, AnnotationType.SHORTCUT, params);
+
+ // Remove the edge from the core graph.
+ graph.removeEdge(v, w);
+}
+
+/**
+ * Remove edges from a node, and set its isOutExtract property to true,
+ * and remove the node and move it to isolatedOutExtract.
+ *
+ * If detachAllEdgesForHighDegree is true, extract all of its edges.
+ * Otherwise, only extract all in-edges.
+ */
+function makeOutExtract(renderNode: RenderGroupNodeInformation, n: string,
+ params: RenderGraphParams) {
+ let graph = renderNode.coreGraph;
+
+ graph.node(n).isOutExtract = true;
+
+ _.each(graph.predecessors(n), (p, index) => {
+ createShortcut(graph, p, n, params);
+ });
+
+ if (params.detachAllEdgesForHighDegree) {
+ _.each(graph.successors(n), (s, index) => {
+ createShortcut(graph, n, s, params);
+ });
+ }
+
+ if (params.detachAllEdgesForHighDegree || graph.neighbors(n).length === 0) {
+ renderNode.isolatedOutExtract.push(graph.node(n));
+ graph.removeNode(n);
+ }
+}
+
+/**
+ * Remove edges from a node, set its isInExtract property to true,
+ * and remove the node and move it to isolatedInExtract.
+ * If detachAllEdgesForHighDegree is true, extract all of its edges.
+ * Otherwise, only remove all out-edges.
+ */
+function makeInExtract(renderNode: RenderGroupNodeInformation, n: string,
+ params: RenderGraphParams) {
+ let graph = renderNode.coreGraph;
+ graph.node(n).isInExtract = true;
+
+ _.each(graph.successors(n), (s, index) => {
+ createShortcut(graph, n, s, params);
+ });
+
+ if (params.detachAllEdgesForHighDegree) {
+ _.each(graph.predecessors(n), (p, index) => {
+ createShortcut(graph, p, n, params);
+ });
+ }
+
+ // Remove the node from the core graph if conditions are met.
+ if (params.detachAllEdgesForHighDegree || graph.neighbors(n).length === 0) {
+ renderNode.isolatedInExtract.push(graph.node(n));
+ graph.removeNode(n);
+ }
+}
+
+/**
+ * Check whether the node's type is a member of the given list of types.
+ *
+ * @param node Node.
+ * @param types List of type to match.
+ */
+function hasTypeIn(node: Node, types: string[]): boolean {
+ if (node.type === NodeType.OP) {
+ for (let i = 0; i < types.length; i++) {
+ if ((<OpNode>node).op === types[i]) { return true; }
+ }
+ } else if (node.type === NodeType.META) {
+ let rootOpNode = (<Metanode>node).getRootOp();
+ if (rootOpNode) {
+ for (let i = 0; i < types.length; i++) {
+ if (rootOpNode.op === types[i]) { return true; }
+ }
+ }
+ }
+ return false;
+}
+
+/** Remove edges from pre-defined out-extract patterns */
+function extractPredefinedSink(renderNode: RenderGroupNodeInformation,
+ params: RenderGraphParams) {
+ let graph = renderNode.coreGraph;
+ _.each(graph.nodes(), n => {
+ let renderInfo = graph.node(n);
+ if (hasTypeIn(renderInfo.node, params.outExtractTypes)) {
+ makeOutExtract(renderNode, n, params);
+ }
+ });
+}
+
+/** Remove edges from pre-defined in-extract patterns */
+function extractPredefinedSource(renderNode: RenderGroupNodeInformation,
+ params: RenderGraphParams) {
+ let graph = renderNode.coreGraph;
+
+ _.each(graph.nodes(), n => {
+ let renderInfo = graph.node(n);
+ if (hasTypeIn(renderInfo.node, params.inExtractTypes)) {
+ makeInExtract(renderNode, n, params);
+ }
+ });
+}
+
+/** Extract from nodes with in-degree > maxInDegree */
+function extractHighInDegree(renderNode: RenderGroupNodeInformation,
+ params: RenderGraphParams) {
+ let graph = renderNode.coreGraph;
+ let maxInDegree = params.maxInDegree;
+
+ // detect first so degrees don't get affected by other removal
+ let highInDegreeNames = _.filter(graph.nodes(), n => {
+ // Count the in-degree based on only regular edges, unless there are
+ // no regular edges, in which case use the number of control edges.
+ // This is done so that control edges don't effect if nodes are extracted
+ // from the core graph, unless the node is only used for control.
+ let numEdgesToCount = _.reduce(graph.predecessors(n), (numEdgesToCount, pred) => {
+ let metaedge = graph.edge(pred, n).metaedge;
+ return numEdgesToCount + (metaedge.numRegularEdges ? 1 : 0);
+ }, 0);
+ if (numEdgesToCount === 0 && graph.predecessors(n).length > 0) {
+ numEdgesToCount = graph.predecessors(n).length;
+ }
+ return numEdgesToCount > maxInDegree;
+ });
+
+ _.each(highInDegreeNames, n => {
+ makeOutExtract(renderNode, n, params);
+ });
+}
+
+/** Extract nodes with out-degree > maxOutDegree */
+function extractHighOutDegree(renderNode: RenderGroupNodeInformation,
+ params: RenderGraphParams) {
+ let graph = renderNode.coreGraph;
+ let maxOutDegree = params.maxOutDegree;
+
+ // detect first so degrees don't get affected by other removal
+ let highOutDegreeNames = _.filter(graph.nodes(), n => {
+ // Count the out-degree based on only regular edges, unless there are
+ // no regular edges, in which case use the number of control edges.
+ // This is done so that control edges don't effect if nodes are extracted
+ // from the core graph, unless the node is only used for control.
+ let numEdgesToCount = _.reduce(graph.successors(n), (numEdgesToCount, succ) => {
+ let metaedge = graph.edge(n, succ).metaedge;
+ return numEdgesToCount + (metaedge.numRegularEdges ? 1 : 0);
+ }, 0);
+ if (numEdgesToCount === 0 && graph.successors(n).length > 0) {
+ numEdgesToCount = graph.successors(n).length;
+ }
+ return numEdgesToCount > maxOutDegree;
+ });
+
+ _.each(highOutDegreeNames, n => {
+ makeInExtract(renderNode, n, params);
+ });
+}
+
+/** Remove control edges from nodes that have too many control edges */
+function removeControlEdges(renderNode: RenderGroupNodeInformation,
+ params: RenderGraphParams) {
+ let graph = renderNode.coreGraph;
+
+ // Collect control edges into a map by node name.
+ let map = <{[nodeName: string]: graphlib.EdgeObject[]}>{};
+ _.each(graph.edges(), e => {
+ if (!graph.edge(e).metaedge.numRegularEdges) {
+ (map[e.v] = map[e.v] || []).push(e);
+ (map[e.w] = map[e.w] || []).push(e);
+ }
+ });
+
+ // For each node with too many control edges, turn them into annotations.
+ _.each(map, (edges, nodeName) => {
+ if (edges.length > params.maxControlDegree) {
+ _.each(edges, e => createShortcut(graph, e.v, e.w, params));
+ }
+ });
+}
+
+/**
+ * Given an integer, picks a hue that is far apart from other colors.
+ * The formula for picking color that avoid collision is:
+ * hue = (color range * golden ratio * index) % color range
+ */
+export function mapIndexToHue(id: number): number {
+ let GOLDEN_RATIO = 1.61803398875;
+ // Hue of 0 is reserved for the gray nodes.
+ let MIN_HUE = 1;
+ let MAX_HUE = 359;
+ let COLOR_RANGE = MAX_HUE - MIN_HUE;
+ return MIN_HUE + ((COLOR_RANGE * GOLDEN_RATIO * id) % COLOR_RANGE);
+};
+
+/**
+ * Remove edges and add to annotation instead.
+ *
+ * For root node, consider predefined types for source and sink.
+ * We do not extract predefined type from non-root so that Variables and the
+ * sgd node (op type = "NoOp") do not get extract from inside own group.
+ *
+ * The order of extraction is important here as swapping the order can totally
+ * screw up the graph layout.
+ *
+ * @param {Render.Node} renderNode Node to manipulate.
+ * @param {Object} params render Graph construction parameters. See
+ * <tf-graph-params>'s output
+ */
+function extractHighDegrees(renderNode: RenderGroupNodeInformation,
+ params: RenderGraphParams) {
+ if (params.outExtractTypes) {
+ extractPredefinedSink(renderNode, params);
+ }
+
+ // This has to come before extract high in-degree to protect the core part
+ // that takes many variables.
+ if (params.inExtractTypes) {
+ extractPredefinedSource(renderNode, params);
+ }
+
+ // This has to come before extract high out-degree to protect the core part
+ // that output to many places as there are more high-degree sinks than
+ // sources.
+
+ if (params.maxInDegree) {
+ extractHighInDegree(renderNode, params);
+ }
+
+ if (params.maxOutDegree) {
+ extractHighOutDegree(renderNode, params);
+ }
+
+ if (params.maxControlDegree) {
+ removeControlEdges(renderNode, params);
+ }
+
+ // Extract isolated nodes, which can be
+ // (1) source-like and sink-like nodes that are not originally isolated but
+ // become isolated after further removal.
+ // (2) isolated nodes with annotations on one-side. These might be either
+ // - nodes that originally have high out-degree but because we remove
+ // high in-degree nodes first, they no longer have high in-degree when
+ // we check. (Detecting all high-degree before removing also leads to
+ // another problem.)
+ // - nodes that do not have high degree, but their neighbors are all
+ // extracted, so it might make sense to extract them too.
+
+ let graph = renderNode.coreGraph;
+ _.each(graph.nodes(), n => {
+ let child = graph.node(n);
+ let degree = graph.neighbors(n).length;
+
+ if (degree === 0) {
+ let hasOutAnnotations = child.outAnnotations.list.length > 0;
+ let hasInAnnotations = child.inAnnotations.list.length > 0;
+
+ if (child.isInExtract) { // Is source-like.
+ // This case only happens if detachAllEdgesForHighDegree is false.
+ // (Otherwise all source-like nodes are all isolated already.)
+ renderNode.isolatedInExtract.push(child);
+ graph.removeNode(n);
+ } else if (child.isOutExtract) { // Is sink-like.
+ // This case only happens if detachAllEdgesForHighDegree is false.
+ // // (Otherwise all sink-like nodes are all isolated already.)
+ renderNode.isolatedOutExtract.push(child);
+ graph.removeNode(n);
+ } else if (params.extractIsolatedNodesWithAnnotationsOnOneSide) {
+ if (hasOutAnnotations && !hasInAnnotations) {
+ child.isInExtract = true; // for ones with high out-annotations
+ renderNode.isolatedInExtract.push(child);
+ graph.removeNode(n);
+ } else if (hasInAnnotations && !hasOutAnnotations) {
+ child.isOutExtract = true; // for ones with high in-annotations
+ renderNode.isolatedOutExtract.push(child);
+ graph.removeNode(n);
+ } else {
+ // if a low degree node has both in- & out- annotations, do nothing
+ // because it is unclear which side it should go to.
+ }
+ }
+ }
+ });
+}
+} // close module tf.graph.render
diff --git a/tensorflow/tensorboard/components/tf-graph-common/lib/scene/annotation.ts b/tensorflow/tensorboard/components/tf-graph-common/lib/scene/annotation.ts
new file mode 100644
index 0000000000..82609e8652
--- /dev/null
+++ b/tensorflow/tensorboard/components/tf-graph-common/lib/scene/annotation.ts
@@ -0,0 +1,223 @@
+/// <reference path="../graph.ts" />
+/// <reference path="../render.ts" />
+/// <reference path="scene.ts" />
+/// <reference path="edge.ts" />
+
+module tf.graph.scene.annotation {
+
+/**
+ * Populate a given annotation container group
+ *
+ * <g class="{in|out}-annotations"></g>
+ *
+ * with annotation group of the following structure:
+ *
+ * <g class="annotation">
+ * <g class="annotation-node">
+ * <!--
+ * Content here determined by Scene.node.buildGroup.
+ * -->
+ * </g>
+ * </g>
+ *
+ * @param container selection of the container.
+ * @param annotationData node.{in|out}Annotations
+ * @param d node to build group for.
+ * @param sceneBehavior polymer scene element.
+ * @return selection of appended objects
+ */
+export function buildGroup(container, annotationData: render.AnnotationList,
+ d: render.RenderNodeInformation, sceneBehavior) {
+ // Select all children and join with data.
+ let annotationGroups = container.selectAll(function() {
+ // using d3's selector function
+ // See https://github.com/mbostock/d3/releases/tag/v2.0.0
+ // (It's not listed in the d3 wiki.)
+ return this.childNodes;
+ })
+ .data(annotationData.list, d => { return d.node.name; });
+
+ annotationGroups.enter()
+ .append("g")
+ .attr("data-name", a => { return a.node.name; })
+ .each(function(a) {
+ let aGroup = d3.select(this);
+
+ // Add annotation to the index in the scene
+ sceneBehavior.addAnnotationGroup(a, d, aGroup);
+ // Append annotation edge
+ let edgeType = Class.Annotation.EDGE;
+ let metaedge = a.renderMetaedgeInfo && a.renderMetaedgeInfo.metaedge;
+ if (metaedge && !metaedge.numRegularEdges) {
+ edgeType += " " + Class.Annotation.CONTROL_EDGE;
+ }
+ // If any edges are reference edges, add the reference edge class.
+ if (metaedge && metaedge.numRefEdges) {
+ edgeType += " " + Class.Edge.REF_LINE;
+ }
+ edge.appendEdge(aGroup, a, sceneBehavior, edgeType);
+
+ if (a.annotationType !== tf.graph.render.AnnotationType.ELLIPSIS) {
+ addAnnotationLabelFromNode(aGroup, a);
+ buildShape(aGroup, a, sceneBehavior);
+ } else {
+ addAnnotationLabel(aGroup, a.node.name, a, Class.Annotation.ELLIPSIS);
+ }
+ });
+
+ annotationGroups
+ .attr("class", a => {
+ return Class.Annotation.GROUP + " " +
+ annotationToClassName(a.annotationType) +
+ " " + node.nodeClass(a);
+ })
+ .each(function(a) {
+ let aGroup = d3.select(this);
+ update(aGroup, d, a, sceneBehavior);
+ if (a.annotationType !== tf.graph.render.AnnotationType.ELLIPSIS) {
+ addInteraction(aGroup, d, sceneBehavior);
+ }
+ });
+
+ annotationGroups.exit()
+ .each(function(a) {
+ let aGroup = d3.select(this);
+
+ // Remove annotation from the index in the scene
+ sceneBehavior.removeAnnotationGroup(a, d, aGroup);
+ })
+ .remove();
+ return annotationGroups;
+};
+
+/**
+ * Maps an annotation enum to a class name used in css rules.
+ */
+function annotationToClassName(annotationType: render.AnnotationType) {
+ return (tf.graph.render.AnnotationType[annotationType] || "")
+ .toLowerCase() || null;
+}
+
+function buildShape(aGroup, a: render.Annotation, sceneBehavior) {
+ if (a.annotationType === tf.graph.render.AnnotationType.SUMMARY) {
+ let image = scene.selectOrCreateChild(aGroup, "image");
+ image.attr({
+ "xlink:href": sceneBehavior.resolveUrl("../../lib/svg/summary-icon.svg"),
+ "height": "12px",
+ "width": "12px",
+ "cursor": "pointer"
+ });
+ } else {
+ let shape = node.buildShape(aGroup, a, Class.Annotation.NODE);
+ // add title tag to get native tooltips
+ scene.selectOrCreateChild(shape, "title").text(a.node.name);
+ }
+}
+
+function addAnnotationLabelFromNode(aGroup, a: render.Annotation) {
+ let namePath = a.node.name.split("/");
+ let text = namePath[namePath.length - 1];
+ let shortenedText = text.length > 8 ? text.substring(0, 8) + "..." : text;
+ return addAnnotationLabel(aGroup, shortenedText, a, null, text);
+}
+
+function addAnnotationLabel(aGroup, label, a, additionalClassNames,
+ fullLabel?) {
+ let classNames = Class.Annotation.LABEL;
+ if (additionalClassNames) {
+ classNames += " " + additionalClassNames;
+ }
+ let titleText = fullLabel ? fullLabel : label;
+ return aGroup.append("text")
+ .attr("class", classNames)
+ .attr("dy", ".35em")
+ .attr("text-anchor", a.isIn ? "end" : "start")
+ .text(label)
+ .append("title").text(titleText);
+}
+
+function addInteraction(selection, d: render.RenderNodeInformation,
+ sceneBehavior) {
+ selection
+ .on("mouseover", a => {
+ sceneBehavior.fire("annotation-highlight", {
+ name: a.node.name,
+ hostName: d.node.name
+ });
+ })
+ .on("mouseout", a => {
+ sceneBehavior.fire("annotation-unhighlight", {
+ name: a.node.name,
+ hostName: d.node.name
+ });
+ })
+ .on("click", a => {
+ // Stop this event"s propagation so that it isn't also considered a
+ // graph-select.
+ (<Event>d3.event).stopPropagation();
+ sceneBehavior.fire("annotation-select", {
+ name: a.node.name,
+ hostName: d.node.name
+ });
+ });
+};
+
+/**
+ * Adjust annotation's position.
+ *
+ * @param aGroup selection of a "g.annotation" element.
+ * @param d Host node data.
+ * @param a annotation node data.
+ * @param scene Polymer scene element.
+ */
+function update(aGroup, d: render.RenderNodeInformation, a: render.Annotation,
+ sceneBehavior) {
+ // Annotations that point to embedded nodes (constants,summary)
+ // don't have a render information attached so we don't stylize these.
+ // Also we don't stylize ellipsis annotations (the string "... and X more").
+ if (a.renderNodeInfo &&
+ a.annotationType !== tf.graph.render.AnnotationType.ELLIPSIS) {
+ node.stylize(aGroup, a.renderNodeInfo, sceneBehavior,
+ Class.Annotation.NODE);
+ }
+
+ if (a.annotationType === tf.graph.render.AnnotationType.SUMMARY) {
+ // Update the width of the annotation to give space for the image.
+ a.width += 10;
+ }
+
+ // label position
+ aGroup.select("text." + Class.Annotation.LABEL).transition().attr({
+ x: d.x + a.dx + (a.isIn ? -1 : 1) * (a.width / 2 + a.labelOffset),
+ y: d.y + a.dy
+ });
+
+ // Some annotations (such as summary) are represented using a 12x12 image tag.
+ // Purposely ommited units (e.g. pixels) since the images are vector graphics.
+ // If there is an image, we adjust the location of the image to be vertically
+ // centered with the node and horizontally centered between the arrow and the
+ // text label.
+ aGroup.select("image").transition().attr({
+ x: d.x + a.dx - 3,
+ y: d.y + a.dy - 6
+ });
+
+ // Node position (only one of the shape selection will be non-empty.)
+ scene.positionEllipse(aGroup.select("." + Class.Annotation.NODE + " ellipse"),
+ d.x + a.dx, d.y + a.dy, a.width, a.height);
+ scene.positionRect(aGroup.select("." + Class.Annotation.NODE + " rect"),
+ d.x + a.dx, d.y + a.dy, a.width, a.height);
+ scene.positionRect(aGroup.select("." + Class.Annotation.NODE + " use"),
+ d.x + a.dx, d.y + a.dy, a.width, a.height);
+
+ // Edge position
+ aGroup.select("path." + Class.Annotation.EDGE).transition().attr("d", a => {
+ // map relative position to absolute position
+ let points = a.points.map(p => {
+ return {x: p.dx + d.x, y: p.dy + d.y};
+ });
+ return edge.interpolate(points);
+ });
+};
+
+} // close module
diff --git a/tensorflow/tensorboard/components/tf-graph-common/lib/scene/edge.ts b/tensorflow/tensorboard/components/tf-graph-common/lib/scene/edge.ts
new file mode 100644
index 0000000000..e11ec97f80
--- /dev/null
+++ b/tensorflow/tensorboard/components/tf-graph-common/lib/scene/edge.ts
@@ -0,0 +1,177 @@
+/// <reference path="../graph.ts" />
+/// <reference path="../render.ts" />
+/// <reference path="scene.ts" />
+
+module tf.graph.scene.edge {
+
+let Scene = tf.graph.scene; // Aliased
+
+export function getEdgeKey(edgeObj) {
+ return edgeObj.v + tf.graph.EDGE_KEY_DELIM + edgeObj.w;
+}
+
+/**
+ * Select or Create a "g.edges" group to a given sceneGroup
+ * and builds a number of "g.edge" groups inside the group.
+ *
+ * Structure Pattern:
+ *
+ * <g class="edges">
+ * <g class="edge">
+ * <path class="edgeline"/>
+ * </g>
+ * ...
+ * </g>
+ *
+ *
+ * @param sceneGroup container
+ * @param graph
+ * @param sceneBehavior Parent scene module.
+ * @return selection of the created nodeGroups
+ */
+export function buildGroup(sceneGroup,
+ graph: graphlib.Graph<tf.graph.render.RenderNodeInformation,
+ tf.graph.render.RenderMetaedgeInformation>, sceneBehavior) {
+ let edgeData = _.reduce(graph.edges(), (edges, edgeObj) => {
+ let edgeLabel = graph.edge(edgeObj);
+ edges.push({
+ v: edgeObj.v,
+ w: edgeObj.w,
+ label: edgeLabel
+ });
+ return edges;
+ }, []);
+
+ let container = scene.selectOrCreateChild(sceneGroup, "g",
+ Class.Edge.CONTAINER);
+ let containerNode = container.node();
+
+ // Select all children and join with data.
+ // (Note that all children of g.edges are g.edge)
+ let edgeGroups = container.selectAll(function() {
+ // using d3's selector function
+ // See https://github.com/mbostock/d3/releases/tag/v2.0.0
+ // (It's not listed in the d3 wiki.)
+ return this.childNodes;
+ })
+ .data(edgeData, getEdgeKey);
+
+ // Make edges a group to support rendering multiple lines for metaedge
+ edgeGroups.enter()
+ .append("g")
+ .attr("class", Class.Edge.GROUP)
+ .attr("data-edge", getEdgeKey)
+ .each(function(d) {
+ let edgeGroup = d3.select(this);
+ d.label.edgeGroup = edgeGroup;
+ // index node group for quick highlighting
+ sceneBehavior._edgeGroupIndex[getEdgeKey(d)] = edgeGroup;
+
+ // If any edges are reference edges, add the reference edge class.
+ let extraEdgeClass = d.label.metaedge && d.label.metaedge.numRefEdges
+ ? Class.Edge.REF_LINE + " " + Class.Edge.LINE
+ : undefined;
+ // Add line during enter because we're assuming that type of line
+ // normally does not change.
+ appendEdge(edgeGroup, d, scene, extraEdgeClass);
+ });
+
+ edgeGroups.each(position);
+ edgeGroups.each(function(d) {
+ stylize(d3.select(this), d, sceneBehavior);
+ });
+
+ edgeGroups.exit()
+ .each(d => {
+ delete sceneBehavior._edgeGroupIndex[getEdgeKey(d)];
+ })
+ .remove();
+ return edgeGroups;
+};
+
+/**
+ * For a given d3 selection and data object, create a path to represent the
+ * edge described in d.label.
+ *
+ * If d.label is defined, it will be a RenderMetaedgeInformation instance. It
+ * will sometimes be undefined, for example for some Annotation edges for which
+ * there is no underlying Metaedge in the hierarchical graph.
+ */
+export function appendEdge(edgeGroup, d, sceneBehavior, edgeClass?) {
+ edgeClass = edgeClass || Class.Edge.LINE; // set default type
+
+ if (d.label && d.label.structural) {
+ edgeClass += " " + Class.Edge.STRUCTURAL;
+ }
+
+ edgeGroup.append("path")
+ .attr("class", edgeClass);
+};
+
+/**
+ * Returns a tween interpolator for the endpoint of an edge path.
+ */
+function getEdgePathInterpolator(d, i, a) {
+ let renderMetaedgeInfo = d.label;
+ let adjoiningMetaedge = renderMetaedgeInfo.adjoiningMetaedge;
+ if (!adjoiningMetaedge) {
+ return d3.interpolate(a, interpolate(renderMetaedgeInfo.points));
+ }
+
+ let renderPath = this;
+
+ // Get the adjoining path that matches the adjoining metaedge.
+ let adjoiningPath =
+ <SVGPathElement>((<HTMLElement>adjoiningMetaedge.edgeGroup.node())
+ .firstChild);
+
+ // Find the desired SVGPoint along the adjoining path, then convert those
+ // coordinates into the space of the renderPath using its Current
+ // Transformation Matrix (CTM).
+ let inbound = renderMetaedgeInfo.metaedge.inbound;
+
+ return function(t) {
+ let adjoiningPoint = adjoiningPath
+ .getPointAtLength(inbound ? adjoiningPath.getTotalLength() : 0)
+ .matrixTransform(adjoiningPath.getCTM())
+ .matrixTransform(renderPath.getCTM().inverse());
+
+ // Update the relevant point in the renderMetaedgeInfo's points list, then
+ // re-interpolate the path.
+ let points = renderMetaedgeInfo.points;
+ let index = inbound ? 0 : points.length - 1;
+ points[index].x = adjoiningPoint.x;
+ points[index].y = adjoiningPoint.y;
+ let dPath = interpolate(points);
+ return dPath;
+ };
+}
+
+export let interpolate = d3.svg.line()
+ .interpolate("basis")
+ .x((d: any) => { return d.x; })
+ .y((d: any) => { return d.y; });
+
+function position(d) {
+ d3.select(this).select("path." + Class.Edge.LINE)
+ .each(function(d) {
+ let path = d3.select(this);
+ path.transition().attrTween("d", getEdgePathInterpolator);
+ });
+};
+
+/**
+ * For a given d3 selection and data object, mark the edge as a control
+ * dependency if it contains only control edges.
+ *
+ * d's label property will be a RenderMetaedgeInformation object.
+ */
+function stylize(edgeGroup, d, stylize) {
+ let a;
+ let metaedge = d.label.metaedge;
+ edgeGroup
+ .select("path." + Class.Edge.LINE)
+ .classed("control-dep", metaedge && !metaedge.numRegularEdges);
+};
+
+} // close module
diff --git a/tensorflow/tensorboard/components/tf-graph-common/lib/scene/minimap.ts b/tensorflow/tensorboard/components/tf-graph-common/lib/scene/minimap.ts
new file mode 100644
index 0000000000..1a34132765
--- /dev/null
+++ b/tensorflow/tensorboard/components/tf-graph-common/lib/scene/minimap.ts
@@ -0,0 +1,269 @@
+/// <reference path="../../../../typings/tsd.d.ts" />
+/// <reference path="../common.ts" />
+
+module tf.scene {
+
+/** Show minimap when the viewpoint area is less than X% of the whole area. */
+const FRAC_VIEWPOINT_AREA: number = 0.8;
+
+export class Minimap {
+ /** The minimap container. */
+ private minimap: HTMLElement;
+ /** The canvas used for drawing the mini version of the svg. */
+ private canvas: HTMLCanvasElement;
+ /** A buffer canvas used for temporary drawing to avoid flickering. */
+ private canvasBuffer: HTMLCanvasElement;
+
+ /** The minimap svg used for holding the viewpoint rectangle. */
+ private minimapSvg: SVGSVGElement;
+ /** The rectangle showing the current viewpoint. */
+ private viewpoint: SVGRectElement;
+ /**
+ * The scale factor for the minimap. The factor is determined automatically
+ * so that the minimap doesn't violate the maximum width/height specified
+ * in the constructor. The minimap maintains the same aspect ratio as the
+ * original svg.
+ */
+ private scaleMinimap: number;
+ /** The main svg element. */
+ private svg: SVGSVGElement;
+ /** The svg group used for panning and zooming the main svg. */
+ private zoomG: SVGGElement;
+ /** The zoom behavior of the main svg. */
+ private mainZoom: d3.behavior.Zoom<any>;
+ /** The maximum width and height for the minimap. */
+ private maxWandH: number;
+ /** The last translation vector used in the main svg. */
+ private translate: [number, number];
+ /** The last scaling factor used in the main svg. */
+ private scaleMain: number;
+ /** The coordinates of the viewpoint rectangle. */
+ private viewpointCoord: {x: number, y: number};
+ /** The current size of the minimap */
+ private minimapSize: {width: number, height: number};
+ /** Padding (px) due to the main labels of the graph. */
+ private labelPadding: number;
+ /**
+ * Constructs a new minimap.
+ *
+ * @param svg The main svg element.
+ * @param zoomG The svg group used for panning and zooming the main svg.
+ * @param mainZoom The main zoom behavior.
+ * @param minimap The minimap container.
+ * @param maxWandH The maximum width/height for the minimap.
+ * @param labelPadding Padding in pixels due to the main graph labels.
+ */
+ constructor(svg: SVGSVGElement, zoomG: SVGGElement,
+ mainZoom: d3.behavior.Zoom<any>, minimap: HTMLElement,
+ maxWandH: number, labelPadding: number) {
+ this.svg = svg;
+ this.labelPadding = labelPadding;
+ this.zoomG = zoomG;
+ this.mainZoom = mainZoom;
+ this.maxWandH = maxWandH;
+ let $minimap = d3.select(minimap);
+ // The minimap will have 2 main components: the canvas showing the content
+ // and an svg showing a rectangle of the currently zoomed/panned viewpoint.
+ let $minimapSvg = $minimap.select("svg");
+
+ // Make the viewpoint rectangle draggable.
+ let $viewpoint = $minimapSvg.select("rect");
+ let dragmove = (d) => {
+ this.viewpointCoord.x = (<DragEvent>d3.event).x;
+ this.viewpointCoord.y = (<DragEvent>d3.event).y;
+ this.updateViewpoint();
+ };
+ this.viewpointCoord = {x: 0, y: 0};
+ let drag = d3.behavior.drag().origin(Object).on("drag", dragmove);
+ $viewpoint.datum(this.viewpointCoord).call(drag);
+
+ // Make the minimap clickable.
+ $minimapSvg.on("click", () => {
+ if ((<Event>d3.event).defaultPrevented) {
+ // This click was part of a drag event, so suppress it.
+ return;
+ }
+ // Update the coordinates of the viewpoint.
+ let width = Number($viewpoint.attr("width"));
+ let height = Number($viewpoint.attr("height"));
+ let clickCoords = d3.mouse($minimapSvg.node());
+ this.viewpointCoord.x = clickCoords[0] - width / 2;
+ this.viewpointCoord.y = clickCoords[1] - height / 2;
+ this.updateViewpoint();
+ });
+ this.viewpoint = <SVGRectElement> $viewpoint.node();
+ this.minimapSvg = <SVGSVGElement> $minimapSvg.node();
+ this.minimap = minimap;
+ this.canvas = <HTMLCanvasElement> $minimap.select("canvas.first").node();
+ this.canvasBuffer =
+ <HTMLCanvasElement> $minimap.select("canvas.second").node();
+ }
+
+ /**
+ * Updates the position and the size of the viewpoint rectangle.
+ * It also notifies the main svg about the new panned position.
+ */
+ private updateViewpoint(): void {
+ // Update the coordinates of the viewpoint rectangle.
+ d3.select(this.viewpoint)
+ .attr("x", this.viewpointCoord.x)
+ .attr("y", this.viewpointCoord.y);
+ // Update the translation vector of the main svg to reflect the
+ // new viewpoint.
+ let mainX = - this.viewpointCoord.x * this.scaleMain / this.scaleMinimap;
+ let mainY = - this.viewpointCoord.y * this.scaleMain / this.scaleMinimap;
+ let zoomEvent = this.mainZoom.translate([mainX, mainY]).event;
+ d3.select(this.zoomG).call(zoomEvent);
+ }
+
+ /**
+ * Redraws the minimap. Should be called whenever the main svg
+ * was updated (e.g. when a node was expanded).
+ */
+ update(): void {
+ let $svg = d3.select(this.svg);
+ // Read all the style rules in the document and embed them into the svg.
+ // The svg needs to be self contained, i.e. all the style rules need to be
+ // embedded so the canvas output matches the origin.
+ let stylesText = "";
+ for (let k = 0; k < document.styleSheets.length; k++) {
+ try {
+ let cssRules = (<any>document.styleSheets[k]).cssRules ||
+ (<any>document.styleSheets[k]).rules;
+ if (cssRules == null) {
+ continue;
+ }
+ for (let i = 0; i < cssRules.length; i++) {
+ stylesText += cssRules[i].cssText + "\n";
+ }
+ } catch (e) {
+ if (e.name !== "SecurityError") {
+ throw e;
+ }
+ }
+ }
+
+ // Temporarily add the css rules to the main svg.
+ let svgStyle = $svg.append("style");
+ svgStyle.text(stylesText);
+
+ // Temporarily remove the zoom/pan transform from the main svg since we
+ // want the minimap to show a zoomed-out and centered view.
+ let $zoomG = d3.select(this.zoomG);
+ let zoomTransform = $zoomG.attr("transform");
+ $zoomG.attr("transform", null);
+
+ // Get the size of the entire scene.
+ let sceneSize = this.zoomG.getBBox();
+ // Since we add padding, account for that here.
+ sceneSize.height += this.labelPadding;
+
+ // Temporarily assign an explicit width/height to the main svg, since
+ // it doesn't have one (uses flex-box), but we need it for the canvas
+ // to work.
+ $svg.attr({
+ width: sceneSize.width,
+ height: sceneSize.height,
+ });
+
+ // Since the content inside the svg changed (e.g. a node was expanded),
+ // the aspect ratio have also changed. Thus, we need to update the scale
+ // factor of the minimap. The scale factor is determined such that both
+ // the width and height of the minimap are <= maximum specified w/h.
+ this.scaleMinimap =
+ this.maxWandH / Math.max(sceneSize.width, sceneSize.height);
+
+ this.minimapSize = {
+ width: sceneSize.width * this.scaleMinimap,
+ height: sceneSize.height * this.scaleMinimap
+ };
+
+ // Update the size of the minimap's svg, the buffer canvas and the
+ // viewpoint rect.
+ d3.select(this.minimapSvg).attr(<any>this.minimapSize);
+ d3.select(this.canvasBuffer).attr(<any>this.minimapSize);
+ if (this.translate != null && this.zoom != null) {
+ // Update the viewpoint rectangle shape since the aspect ratio of the
+ // map has changed.
+ requestAnimationFrame(() => this.zoom());
+ }
+
+ // Serialize the main svg to a string which will be used as the rendering
+ // content for the canvas.
+ let svgXml = (new XMLSerializer()).serializeToString(this.svg);
+
+ // Now that the svg is serialized for rendering, remove the temporarily
+ // assigned styles, explicit width and height and bring back the pan/zoom
+ // transform.
+ svgStyle.remove();
+ $svg.attr({
+ width: null,
+ height: null
+ });
+ $zoomG.attr("transform", zoomTransform);
+ let image = new Image();
+ image.onload = () => {
+ // Draw the svg content onto the buffer canvas.
+ let context = this.canvasBuffer.getContext("2d");
+ context.clearRect(0, 0, this.canvasBuffer.width,
+ this.canvasBuffer.height);
+ context.drawImage(image, 0, 0,
+ this.minimapSize.width, this.minimapSize.height);
+ requestAnimationFrame(() => {
+ // Hide the old canvas and show the new buffer canvas.
+ d3.select(this.canvasBuffer).style("display", null);
+ d3.select(this.canvas).style("display", "none");
+ // Swap the two canvases.
+ [this.canvas, this.canvasBuffer] = [this.canvasBuffer, this.canvas];
+ });
+ };
+ image.src = "data:image/svg+xml;base64," + btoa(svgXml);
+ }
+
+ /**
+ * Handles changes in zooming/panning. Should be called from the main svg
+ * to notify that a zoom/pan was performed and this minimap will update it's
+ * viewpoint rectangle.
+ *
+ * @param translate The translate vector, or none to use the last used one.
+ * @param scale The scaling factor, or none to use the last used one.
+ */
+ zoom(translate?: [number, number], scale?: number): void {
+ // Update the new translate and scale params, only if specified.
+ this.translate = translate || this.translate;
+ this.scaleMain = scale || this.scaleMain;
+ // Update the location of the viewpoint rectangle.
+ let svgRect = this.svg.getBoundingClientRect();
+ let $viewpoint = d3.select(this.viewpoint);
+ this.viewpointCoord.x = -this.translate[0] * this.scaleMinimap /
+ this.scaleMain;
+ this.viewpointCoord.y = -this.translate[1] * this.scaleMinimap /
+ this.scaleMain;
+ let viewpointWidth = svgRect.width * this.scaleMinimap / this.scaleMain;
+ let viewpointHeight = svgRect.height * this.scaleMinimap / this.scaleMain;
+ $viewpoint.attr({
+ x: this.viewpointCoord.x,
+ y: this.viewpointCoord.y,
+ width: viewpointWidth,
+ height: viewpointHeight
+ });
+ // Show/hide the minimap depending on the viewpoint area as fraction of the
+ // whole minimap.
+ let mapWidth = this.minimapSize.width;
+ let mapHeight = this.minimapSize.height;
+ let x = this.viewpointCoord.x;
+ let y = this.viewpointCoord.y;
+ let w = Math.min(Math.max(0, x + viewpointWidth), mapWidth) -
+ Math.min(Math.max(0, x), mapWidth);
+ let h = Math.min(Math.max(0, y + viewpointHeight), mapHeight) -
+ Math.min(Math.max(0, y), mapHeight);
+ let fracIntersect = (w * h) / (mapWidth * mapHeight);
+ if (fracIntersect < FRAC_VIEWPOINT_AREA) {
+ this.minimap.classList.remove("hidden");
+ } else {
+ this.minimap.classList.add("hidden");
+ }
+ }
+}
+
+} // close module tf.scene
diff --git a/tensorflow/tensorboard/components/tf-graph-common/lib/scene/node.ts b/tensorflow/tensorboard/components/tf-graph-common/lib/scene/node.ts
new file mode 100644
index 0000000000..8c74b37e07
--- /dev/null
+++ b/tensorflow/tensorboard/components/tf-graph-common/lib/scene/node.ts
@@ -0,0 +1,525 @@
+/// <reference path="../graph.ts" />
+/// <reference path="scene.ts" />
+/// <reference path="annotation.ts" />
+
+module tf.graph.scene.node {
+
+/**
+ * Select or Create a "g.nodes" group to a given sceneGroup
+ * and builds a number of "g.node" groups inside the group.
+ *
+ * Structure Pattern:
+ *
+ * <g class="nodes">
+ * <g class="node">
+ * <g class="in-annotations">
+ * ...
+ * </g>
+ * <g class="out-annotations">
+ * ...
+ * </g>
+ * <g class="nodeshape">
+ * <!--
+ * Content of the node shape should be for the node itself. For example a
+ * Metanode would have a <rect> with rounded edges, an op would have an
+ * <ellipse>. More complex nodes like series may contain multiple elements
+ * which are conditionally visible based on whether the node is expanded.
+ * -->
+ * </g>
+ * <text class="label">node name</text>
+ * <g class="subscene">
+ * <!--
+ * Content of the subscene (only for metanode and series node).
+ *
+ * Subscene is a svg group that contains content of the
+ * metanode's metagraph that is recursively generated by Scene.build().
+ *
+ * When the graph is expanded multiple times, a subscene can contain
+ * nested subscenes inside.
+ * -->
+ * </g>
+ * </g>
+ * ...
+ * </g>
+ *
+ *
+ * @param sceneGroup selection of the container
+ * @param nodeData array of render node information to map
+ * @param sceneBehavior parent scene module
+ * @return selection of the created nodeGroups
+ */
+export function buildGroup(sceneGroup,
+ nodeData: render.RenderNodeInformation[], sceneBehavior) {
+ let container = scene.selectOrCreateChild(sceneGroup, "g",
+ Class.Node.CONTAINER);
+ // Select all children and join with data.
+ // (Note that all children of g.nodes are g.node)
+ let nodeGroups = container.selectAll(function() {
+ // using d3's selector function
+ // See https://github.com/mbostock/d3/releases/tag/v2.0.0
+ // (It's not listed in the d3 wiki.)
+ return this.childNodes; // this here refers to container.node()
+ })
+ .data(nodeData, (d: any) => {
+ // make sure that we don't have to swap shape type
+ return d.node.name + ":" + d.node.type;
+ });
+
+ // ENTER
+ nodeGroups.enter()
+ .append("g")
+ .attr("data-name", d => { return d.node.name; })
+ .each(function(d) {
+ let nodeGroup = d3.select(this);
+ // index node group for quick stylizing
+ sceneBehavior.addNodeGroup(d.node.name, nodeGroup);
+ });
+
+ // UPDATE
+ nodeGroups
+ .attr("class", d => {
+ return Class.Node.GROUP + " " + nodeClass(d);
+ })
+ .each(function(d) {
+ let nodeGroup = d3.select(this);
+ // add g.in-annotations (always add -- to keep layer order consistent.)
+ let inAnnotationBox = scene.selectOrCreateChild(nodeGroup, "g",
+ Class.Annotation.INBOX);
+ annotation.buildGroup(inAnnotationBox, d.inAnnotations, d,
+ sceneBehavior);
+
+ // add g.out-annotations (always add -- to keep layer order consistent.)
+ let outAnnotationBox = scene.selectOrCreateChild(nodeGroup, "g",
+ Class.Annotation.OUTBOX);
+ annotation.buildGroup(outAnnotationBox, d.outAnnotations, d,
+ sceneBehavior);
+
+ // label
+ let label = labelBuild(nodeGroup, d, sceneBehavior);
+ // Do not add interaction to metanode labels as they live inside the
+ // metanode shape which already has the same interactions.
+ addInteraction(label, d, sceneBehavior, d.node.type === NodeType.META);
+
+ // build .shape below label
+ let shape = buildShape(nodeGroup, d, Class.Node.SHAPE, label.node());
+ if (d.node.isGroupNode) {
+ addButton(shape, d, sceneBehavior);
+ }
+ addInteraction(shape, d, sceneBehavior);
+
+ // build subscene on the top
+ subsceneBuild(nodeGroup, d, sceneBehavior);
+
+ stylize(nodeGroup, d, sceneBehavior);
+ position(nodeGroup, d, sceneBehavior);
+ });
+
+ // EXIT
+ nodeGroups.exit()
+ .each(function(d) {
+ // remove all indices on remove
+ sceneBehavior.removeNodeGroup(d.node.name);
+
+ let nodeGroup = d3.select(this);
+ if (d.inAnnotations.list.length > 0) {
+ nodeGroup.select("." + Class.Annotation.INBOX)
+ .selectAll("." + Class.Annotation.GROUP)
+ .each(a => {
+ sceneBehavior.removeAnnotationGroup(a, d);
+ });
+ }
+ if (d.outAnnotations.list.length > 0) {
+ nodeGroup.select("." + Class.Annotation.OUTBOX)
+ .selectAll("." + Class.Annotation.GROUP)
+ .each(a => {
+ sceneBehavior.removeAnnotationGroup(a, d);
+ });
+ }
+ })
+ .remove();
+ return nodeGroups;
+};
+
+/**
+ * Update or remove the subscene of a render group node depending on whether it
+ * is a expanded. If the node is not a group node, this method has no effect.
+ *
+ * @param nodeGroup selection of the container
+ * @param renderNodeInfo the render information for the node.
+ * @param sceneBehavior parent scene module
+ * @return Selection of the subscene group, or null if node group does not have
+ * a subscene. Op nodes, bridge nodes and unexpanded group nodes will
+ * not have a subscene.
+ */
+function subsceneBuild(nodeGroup,
+ renderNodeInfo: render.RenderGroupNodeInformation, sceneBehavior) {
+ if (renderNodeInfo.node.isGroupNode) {
+ if (renderNodeInfo.expanded) {
+ // Recursively build the subscene.
+ return scene.buildGroup(nodeGroup, renderNodeInfo, sceneBehavior,
+ Class.Subscene.GROUP);
+ }
+ // Clean out existing subscene if the node is not expanded.
+ scene.selectChild(nodeGroup, "g", Class.Subscene.GROUP).remove();
+ }
+ return null;
+};
+
+/**
+ * Translate the subscene of the given node group
+ */
+function subscenePosition(nodeGroup, d: render.RenderNodeInformation) {
+ let x0 = d.x - d.width / 2.0 + d.paddingLeft;
+ let y0 = d.y - d.height / 2.0 + d.paddingTop;
+
+ let subscene = scene.selectChild(nodeGroup, "g", Class.Subscene.GROUP);
+ scene.translate(subscene, x0, y0);
+};
+
+/**
+ * Add an expand/collapse button to a group node
+ *
+ * @param selection The group node selection.
+ * @param d Info about the node being rendered.
+ * @param sceneBehavior parent scene module.
+ */
+function addButton(selection, d: render.RenderNodeInformation, sceneBehavior) {
+ let group = scene.selectOrCreateChild(
+ selection, "g", Class.Node.BUTTON_CONTAINER);
+ scene.selectOrCreateChild(group, "circle", Class.Node.BUTTON_CIRCLE);
+ scene.selectOrCreateChild(group, "path", Class.Node.EXPAND_BUTTON).attr(
+ "d", "M0,-2.2 V2.2 M-2.2,0 H2.2");
+ scene.selectOrCreateChild(group, "path", Class.Node.COLLAPSE_BUTTON).attr(
+ "d", "M-2.2,0 H2.2");
+ group.on("click", d => {
+ // Stop this event's propagation so that it isn't also considered a
+ // node-select.
+ (<Event>d3.event).stopPropagation();
+ sceneBehavior.fire("node-toggle-expand", { name: d.node.name });
+ });
+ scene.positionButton(group, d);
+};
+
+/**
+ * Fire node-* events when the selection is interacted.
+ *
+ * @param disableInteraction When true, have the provided selection
+ * ignore all pointer events. Used for text labels inside of metanodes, which
+ * don't need interaction as their surrounding shape has interaction, and if
+ * given interaction would cause conflicts with the expand/collapse button.
+ */
+function addInteraction(selection, d: render.RenderNodeInformation,
+ sceneBehavior, disableInteraction?: boolean) {
+ if (disableInteraction) {
+ selection.attr("pointer-events", "none");
+ return;
+ }
+ selection.on("dblclick", d => {
+ sceneBehavior.fire("node-toggle-expand", { name: d.node.name });
+ })
+ .on("mouseover", d => {
+ // don't send mouseover over expanded group,
+ // otherwise it is causing too much glitches
+ if (sceneBehavior.isNodeExpanded(d)) { return; }
+
+ sceneBehavior.fire("node-highlight", { name: d.node.name });
+ })
+ .on("mouseout", d => {
+ // don't send mouseover over expanded group,
+ // otherwise it is causing too much glitches
+ if (sceneBehavior.isNodeExpanded(d)) { return; }
+
+ sceneBehavior.fire("node-unhighlight", { name: d.node.name });
+ })
+ .on("click", d => {
+ // Stop this event's propagation so that it isn't also considered
+ // a graph-select.
+ (<Event>d3.event).stopPropagation();
+ sceneBehavior.fire("node-select", { name: d.node.name });
+ });
+};
+
+/**
+ * Append svg text for label and assign data.
+ * @param nodeGroup
+ * @param renderNodeInfo The render node information for the label.
+ * @param sceneBehavior parent scene module.
+ */
+function labelBuild(nodeGroup, renderNodeInfo: render.RenderNodeInformation,
+ sceneBehavior) {
+ let namePath = renderNodeInfo.node.name.split("/");
+ let text = namePath[namePath.length - 1];
+
+ // Truncate long labels for unexpanded Metanodes.
+ let useFontScale = renderNodeInfo.node.type === NodeType.META &&
+ !renderNodeInfo.expanded;
+
+ let label = scene.selectOrCreateChild(nodeGroup, "text", Class.Node.LABEL);
+ label.attr("dy", ".35em")
+ .attr("text-anchor", "middle");
+ if (useFontScale) {
+ if (text.length > sceneBehavior.maxMetanodeLabelLength) {
+ text = text.substr(0, sceneBehavior.maxMetanodeLabelLength - 2) + "...";
+ }
+ let scale = getLabelFontScale(sceneBehavior);
+ label.attr("font-size", scale(text.length) + "px");
+ }
+ label.text(text);
+ return label;
+};
+
+/**
+ * d3 scale used for sizing font of labels, used by labelBuild,
+ * initialized once by getLabelFontScale.
+ */
+let fontScale = null;
+function getLabelFontScale(sceneBehavior) {
+ if (!fontScale) {
+ fontScale = d3.scale.linear()
+ .domain([sceneBehavior.maxMetanodeLabelLengthLargeFont,
+ sceneBehavior.maxMetanodeLabelLength])
+ .range([sceneBehavior.maxMetanodeLabelLengthFontSize,
+ sceneBehavior.minMetanodeLabelLengthFontSize]).clamp(true);
+ }
+ return fontScale;
+}
+/**
+ * Set label position of a given node group
+ */
+function labelPosition(nodeGroup, d: render.RenderNodeInformation,
+ yOffset: number) {
+ scene.selectChild(nodeGroup, "text", Class.Node.LABEL).transition()
+ .attr("x", d.x)
+ .attr("y", d.y + yOffset);
+};
+
+/**
+ * Select or append/insert shape for a node and assign renderNode
+ * as the shape's data.
+ *
+ * @param nodeGroup
+ * @param d RenderNodeInformation
+ * @param nodeClass class for the element.
+ * @param before Reference DOM node for insertion.
+ * @return Selection of the shape.
+ */
+export function buildShape(nodeGroup, d, nodeClass: string, before?) {
+ // Create a group to house the underlying visual elements.
+ let shapeGroup = scene.selectOrCreateChild(nodeGroup, "g", nodeClass,
+ before);
+ // TODO(jimbo): DOM structure should be templated in HTML somewhere, not JS.
+ switch (d.node.type) {
+ case NodeType.OP:
+ scene.selectOrCreateChild(shapeGroup, "ellipse",
+ Class.Node.COLOR_TARGET);
+ break;
+ case NodeType.SERIES:
+ // Choose the correct stamp to use to represent this series.
+ let stampType = "annotation";
+ let groupNodeInfo = <render.RenderGroupNodeInformation>d;
+ if (groupNodeInfo.coreGraph) {
+ stampType = groupNodeInfo.node.hasNonControlEdges
+ ? "vertical" : "horizontal";
+ }
+ scene.selectOrCreateChild(shapeGroup, "use", Class.Node.COLOR_TARGET)
+ .attr("xlink:href", "#op-series-" + stampType + "-stamp");
+ scene.selectOrCreateChild(shapeGroup, "rect", Class.Node.COLOR_TARGET)
+ .attr({ rx: d.radius, ry: d.radius });
+ break;
+ case NodeType.BRIDGE:
+ scene.selectOrCreateChild(shapeGroup, "rect", Class.Node.COLOR_TARGET)
+ .attr({ rx: d.radius, ry: d.radius });
+ break;
+ case NodeType.META:
+ scene.selectOrCreateChild(shapeGroup, "rect", Class.Node.COLOR_TARGET)
+ .attr({ rx: d.radius, ry: d.radius });
+ break;
+ default:
+ throw Error("Unrecognized node type: " + d.node.type);
+ }
+ return shapeGroup;
+};
+
+export function nodeClass(d: render.RenderNodeInformation) {
+ switch (d.node.type) {
+ case NodeType.OP:
+ return Class.OPNODE;
+ case NodeType.META:
+ return Class.METANODE;
+ case NodeType.SERIES:
+ return Class.SERIESNODE;
+ case NodeType.BRIDGE:
+ return Class.BRIDGENODE;
+ case NodeType.ELLIPSIS:
+ return Class.ELLIPSISNODE;
+ };
+ throw Error("Unrecognized node type: " + d.node.type);
+};
+
+/** Modify node and its subscene and its label's positional attributes */
+function position(nodeGroup, d: render.RenderNodeInformation, sceneBehavior) {
+ let shapeGroup = scene.selectChild(nodeGroup, "g", Class.Node.SHAPE);
+ switch (d.node.type) {
+ case NodeType.OP: {
+ // position shape
+ let shape = scene.selectChild(shapeGroup, "ellipse");
+ scene.positionEllipse(shape, d.x, d.y, d.width, d.height);
+ labelPosition(nodeGroup, d, d.labelOffset);
+ break;
+ }
+ case NodeType.META: {
+ // position shape
+ let shape = scene.selectChild(shapeGroup, "rect");
+ scene.positionRect(shape, d.x, d.y, d.width, d.height);
+
+ if (d.expanded) {
+ subscenePosition(nodeGroup, d);
+
+ // put label on top
+ labelPosition(nodeGroup, d,
+ - d.height / 2 + d.labelHeight / 2);
+ } else {
+ labelPosition(nodeGroup, d, 0);
+ }
+ break;
+ }
+ case NodeType.SERIES: {
+ let shape = scene.selectChild(shapeGroup, "use");
+ scene.positionRect(shape, d.x, d.y, d.width, d.height);
+ if (d.expanded) {
+ subscenePosition(nodeGroup, d);
+
+ // put label on top
+ labelPosition(nodeGroup, d,
+ - d.height / 2 + d.labelHeight / 2);
+ } else {
+ labelPosition(nodeGroup, d, d.labelOffset);
+ }
+ }
+ case NodeType.BRIDGE: {
+ // position shape
+ // NOTE: In reality, these will not be visible, but it helps to put them
+ // in the correct position for debugging purposes.
+ let shape = scene.selectChild(shapeGroup, "rect");
+ scene.positionRect(shape, d.x, d.y, d.width, d.height);
+ break;
+ }
+ default: {
+ throw Error("Unrecognized node type: " + d.node.type);
+ }
+ }
+};
+
+/** Enum specifying the options to color nodes by */
+let ColorBy = {
+ STRUCTURE: 0,
+ DEVICE: 1,
+ COMPUTE_TIME: 2,
+ MEMORY: 3
+};
+
+/**
+ * Returns the fill color for the node given its state and the "color by"
+ * option.
+ */
+function getFillForNode(sceneBehavior, colorBy,
+ renderInfo: render.RenderNodeInformation, isExpanded: boolean): string {
+ let colorParams = tf.graph.render.MetanodeColors;
+ switch (colorBy) {
+ case ColorBy.STRUCTURE:
+ if (renderInfo.node.type === tf.graph.NodeType.META) {
+ let tid = (<Metanode>renderInfo.node).templateId;
+ return tid === null ? colorParams.UNKNOWN : colorParams.STRUCTURE_PALETTE(
+ sceneBehavior.templateIndex(tid), renderInfo.expanded);
+ } else if (renderInfo.node.type === tf.graph.NodeType.SERIES) {
+ // If expanded, we're showing the background rect, which we want to
+ // appear gray. Otherwise we're showing a stack of ellipses which we
+ // want to show white.
+ return renderInfo.expanded ? colorParams.EXPANDED_COLOR : "white";
+ } else if (renderInfo.node.type === NodeType.BRIDGE) {
+ return renderInfo.structural ? "#f0e" :
+ (<BridgeNode>renderInfo.node).inbound ? "#0ef" : "#fe0";
+ } else {
+ // Op nodes are white.
+ return "white";
+ }
+ case ColorBy.DEVICE:
+ if (renderInfo.deviceColors == null) {
+ // Return the hue for unknown device.
+ return colorParams.UNKNOWN;
+ }
+ let id = renderInfo.node.name;
+ let escapedId = tf.escapeQuerySelector(id);
+ let gradientDefs = d3.select("svg#svg defs #linearGradients");
+ let linearGradient =
+ gradientDefs.select("linearGradient#" + escapedId);
+ // If the linear gradient is not there yet, create it.
+ if (linearGradient.size() === 0) {
+ linearGradient = gradientDefs.append("linearGradient").attr("id", id);
+ // Re-create the stops of the linear gradient.
+ linearGradient.selectAll("*").remove();
+ let cumulativeProportion = 0;
+ // For each device, create a stop using the proportion of that device.
+ _.each(renderInfo.deviceColors, (d: any) => {
+ let color = d.color;
+ linearGradient.append("stop")
+ .attr("offset", cumulativeProportion)
+ .attr("stop-color", color);
+ linearGradient.append("stop")
+ .attr("offset", cumulativeProportion + d.proportion)
+ .attr("stop-color", color);
+ cumulativeProportion += d.proportion;
+ });
+ }
+ return isExpanded ? colorParams.EXPANDED_COLOR : `url(#${escapedId})`;
+ case ColorBy.COMPUTE_TIME:
+ return isExpanded ?
+ colorParams.EXPANDED_COLOR : renderInfo.computeTimeColor ||
+ colorParams.UNKNOWN;
+ case ColorBy.MEMORY:
+ return isExpanded ?
+ colorParams.EXPANDED_COLOR : renderInfo.memoryColor ||
+ colorParams.UNKNOWN;
+ default:
+ throw new Error("Unknown case to color nodes by");
+ }
+}
+
+/**
+ * Modify node style by toggling class and assign attributes (only for things
+ * that can't be done in css).
+ */
+export function stylize(nodeGroup, renderInfo: render.RenderNodeInformation,
+ sceneBehavior, nodeClass?) {
+ nodeClass = nodeClass || Class.Node.SHAPE;
+ let isHighlighted = sceneBehavior.isNodeHighlighted(renderInfo.node.name);
+ let isSelected = sceneBehavior.isNodeSelected(renderInfo.node.name);
+ let isExtract = renderInfo.isInExtract || renderInfo.isOutExtract;
+ let isExpanded = renderInfo.expanded;
+ nodeGroup.classed("highlighted", isHighlighted);
+ nodeGroup.classed("selected", isSelected);
+ nodeGroup.classed("extract", isExtract);
+ nodeGroup.classed("expanded", isExpanded);
+
+ // Main node always exists here and it will be reached before subscene,
+ // so d3 selection is fine here.
+ let node = nodeGroup.select("." + nodeClass + " ." + Class.Node.COLOR_TARGET);
+ let fillColor = getFillForNode(sceneBehavior,
+ ColorBy[sceneBehavior.colorBy.toUpperCase()],
+ renderInfo, isExpanded);
+ node.style("fill", fillColor);
+
+ // Choose outline to be darker version of node color if the node is a single
+ // color and is not selected.
+ if (isSelected) {
+ node.style("stroke", null);
+ } else {
+ // If node is colored by a gradient, then use a dark gray outline.
+ let outlineColor = fillColor.substring(0, 3) === "url" ?
+ tf.graph.render.MetanodeColors.GRADIENT_OUTLINE :
+ d3.rgb(fillColor).darker().toString();
+ node.style("stroke", outlineColor);
+ }
+};
+
+} // close module
diff --git a/tensorflow/tensorboard/components/tf-graph-common/lib/scene/scene.ts b/tensorflow/tensorboard/components/tf-graph-common/lib/scene/scene.ts
new file mode 100644
index 0000000000..2e2467f039
--- /dev/null
+++ b/tensorflow/tensorboard/components/tf-graph-common/lib/scene/scene.ts
@@ -0,0 +1,409 @@
+/// <reference path="../graph.ts" />
+/// <reference path="edge.ts" />
+/// <reference path="node.ts" />
+/// <reference path="../layout.ts" />
+
+module tf.graph.scene {
+
+/** Enums element class of objects in the scene */
+export let Class = {
+ Node: {
+ // <g> element that contains nodes.
+ CONTAINER: "nodes",
+ // <g> element that contains detail about a node.
+ GROUP: "node",
+ // <g> element that contains visual elements (like rect, ellipse).
+ SHAPE: "nodeshape",
+ // <*> element(s) under SHAPE that should receive color updates.
+ COLOR_TARGET: "nodecolortarget",
+ // <text> element showing the node's label.
+ LABEL: "nodelabel",
+ // <g> element that contains all visuals for the expand/collapse
+ // button for expandable group nodes.
+ BUTTON_CONTAINER: "buttoncontainer",
+ // <circle> element that surrounds expand/collapse buttons.
+ BUTTON_CIRCLE: "buttoncircle",
+ // <path> element of the expand button.
+ EXPAND_BUTTON: "expandbutton",
+ // <path> element of the collapse button.
+ COLLAPSE_BUTTON: "collapsebutton"
+ },
+ Edge: {
+ CONTAINER: "edges",
+ GROUP: "edge",
+ LINE: "edgeline",
+ REF_LINE: "refline",
+ STRUCTURAL: "structural"
+ },
+ Annotation: {
+ OUTBOX: "out-annotations",
+ INBOX: "in-annotations",
+ GROUP: "annotation",
+ NODE: "annotation-node",
+ EDGE: "annotation-edge",
+ CONTROL_EDGE: "annotation-control-edge",
+ LABEL: "annotation-label",
+ ELLIPSIS: "annotation-ellipsis"
+ },
+ Scene: {
+ GROUP: "scene",
+ CORE: "core",
+ INEXTRACT: "in-extract",
+ OUTEXTRACT: "out-extract"
+ },
+ Subscene: {
+ GROUP: "subscene"
+ },
+ OPNODE: "op",
+ METANODE: "meta",
+ SERIESNODE: "series",
+ BRIDGENODE: "bridge",
+ ELLIPSISNODE: "ellipsis"
+};
+
+/**
+ * Helper method for fitting the graph in the svg view.
+ *
+ * @param svg The main svg.
+ * @param zoomG The svg group used for panning and zooming.
+ * @param d3zoom The zoom behavior.
+ * @param callback Called when the fitting is done.
+ */
+export function fit(svg, zoomG, d3zoom, callback) {
+ let svgRect = svg.getBoundingClientRect();
+ let sceneSize = zoomG.getBBox();
+ let scale = 0.9 * Math.min(
+ svgRect.width / sceneSize.width,
+ svgRect.height / sceneSize.height,
+ 2
+ );
+ let params = layout.PARAMS.graph;
+ let zoomEvent = d3zoom.scale(scale)
+ .on("zoomend.fitted", () => {
+ // Remove the listener for the zoomend event,
+ // so we don't get called at the end of regular zoom events,
+ // just those that fit the graph to screen.
+ d3zoom.on("zoomend.fitted", null);
+ callback();
+ })
+ .translate([params.padding.paddingLeft, params.padding.paddingTop])
+ .event;
+ d3.select(zoomG).transition().duration(500).call(zoomEvent);
+};
+
+/**
+ * Helper method for panning the graph to center on the provided node,
+ * if the node is currently off-screen.
+ *
+ * @param nodeName The node to center the graph on
+ * @param svg The root SVG element for the graph
+ * @param zoomG The svg group used for panning and zooming.
+ * @param d3zoom The zoom behavior.
+ * @return True if the graph had to be panned to display the
+ * provided node.
+ */
+export function panToNode(nodeName: String, svg, zoomG, d3zoom): boolean {
+ let node: any = d3.selectAll("[data-name='" + nodeName + "']."
+ + Class.Node.GROUP)[0][0];
+ if (!node) {
+ return false;
+ }
+ let translate = d3zoom.translate();
+ // Check if the selected node is off-screen in either
+ // X or Y dimension in either direction.
+ let nodeBox = node.getBBox();
+ let nodeCtm = node.getScreenCTM();
+ let pointTL = svg.createSVGPoint();
+ let pointBR = svg.createSVGPoint();
+ pointTL.x = nodeBox.x;
+ pointTL.y = nodeBox.y;
+ pointBR.x = nodeBox.x + nodeBox.width;
+ pointBR.y = nodeBox.y + nodeBox.height;
+ pointTL = pointTL.matrixTransform(nodeCtm);
+ pointBR = pointBR.matrixTransform(nodeCtm);
+ let isOutsideOfBounds = (start, end, bound) => {
+ return end < 0 || start > bound;
+ };
+ let svgRect = svg.getBoundingClientRect();
+ if (isOutsideOfBounds(pointTL.x, pointBR.x, svgRect.width) ||
+ isOutsideOfBounds(pointTL.y, pointBR.y, svgRect.height)) {
+ // Determine the amount to transform the graph in both X and Y
+ // dimensions in order to center the selected node. This takes into
+ // acount the position of the node, the size of the svg scene, the
+ // amount the scene has been scaled by through zooming, and any previous
+ // transform already performed by this logic.
+ let centerX = (pointTL.x + pointBR.x) / 2;
+ let centerY = (pointTL.y + pointBR.y) / 2;
+ let dx = ((svgRect.width / 2) - centerX);
+ let dy = ((svgRect.height / 2) - centerY);
+ let zoomEvent = d3zoom.translate([translate[0] + dx, translate[1] + dy])
+ .event;
+ d3.select(zoomG).transition().duration(500).call(zoomEvent);
+ return true;
+ }
+ return false;
+};
+
+/**
+ * Given a container d3 selection, select a child svg element of a given tag
+ * and class if exists or append / insert one otherwise. If multiple children
+ * matches the tag and class name, returns only the first one.
+ *
+ * @param container
+ * @param tagName tag name.
+ * @param className (optional) Class name.
+ * @param before (optional) reference DOM node for insertion.
+ * @return selection of the element
+ */
+export function selectOrCreateChild(container, tagName: string,
+ className?: string, before?) {
+ let child = selectChild(container, tagName, className);
+ if (!child.empty()) {
+ return child;
+ }
+ let newElement = document.createElementNS("http://www.w3.org/2000/svg",
+ tagName);
+ if (className) {
+ newElement.classList.add(className);
+ }
+
+ if (before) { // if before exists, insert
+ container.node().insertBefore(newElement, before);
+ } else { // otherwise, append
+ container.node().appendChild(newElement);
+ }
+ return d3.select(newElement)
+ // need to bind data to emulate d3_selection.append
+ .datum(container.datum());
+};
+
+/**
+ * Given a container d3 selection, select a child element of a given tag and
+ * class. If multiple children matches the tag and class name, returns only
+ * the first one.
+ *
+ * @param container
+ * @param tagName tag name.
+ * @param className (optional) Class name.
+ * @return selection of the element, or an empty selection
+ */
+export function selectChild(container, tagName: string, className?: string) {
+ let children = container.node().childNodes;
+ for (let i = 0; i < children.length; i++) {
+ let child = children[i];
+ if (child.tagName === tagName &&
+ (!className || child.classList.contains(className))
+ ) {
+ return d3.select(child);
+ }
+ }
+ return d3.select(null);
+};
+
+/**
+ * Select or create a sceneGroup and build/update its nodes and edges.
+ *
+ * Structure Pattern:
+ *
+ * <g class="scene">
+ * <g class="core">
+ * <g class="edges">
+ * ... stuff from tf.graph.scene.edges.build ...
+ * </g>
+ * <g class="nodes">
+ * ... stuff from tf.graph.scene.nodes.build ...
+ * </g>
+ * </g>
+ * <g class="in-extract">
+ * <g class="nodes">
+ * ... stuff from tf.graph.scene.nodes.build ...
+ * </g>
+ * </g>
+ * <g class="out-extract">
+ * <g class="nodes">
+ * ... stuff from tf.graph.scene.nodes.build ...
+ * </g>
+ * </g>
+ * </g>
+ *
+ * @param container D3 selection of the parent.
+ * @param renderNode render node of a metanode or series node.
+ * @param sceneBehavior Parent scene module.
+ * @param sceneClass class attribute of the scene (default="scene").
+ */
+export function buildGroup(container,
+ renderNode: render.RenderGroupNodeInformation,
+ sceneBehavior,
+ sceneClass: string) {
+ sceneClass = sceneClass || Class.Scene.GROUP;
+ let isNewSceneGroup = selectChild(container, "g", sceneClass).empty();
+ let sceneGroup = selectOrCreateChild(container, "g", sceneClass);
+
+ // core
+ let coreGroup = selectOrCreateChild(sceneGroup, "g", Class.Scene.CORE);
+ let coreNodes = _.reduce(renderNode.coreGraph.nodes(), (nodes, name) => {
+ let node = renderNode.coreGraph.node(name);
+ if (!node.excluded) {
+ nodes.push(node);
+ }
+ return nodes;
+ }, []);
+
+ if (renderNode.node.type === NodeType.SERIES) {
+ // For series, we want the first item on top, so reverse the array so
+ // the first item in the series becomes last item in the top, and thus
+ // is rendered on the top.
+ coreNodes.reverse();
+ }
+
+ // Create the layer of edges for this scene (paths).
+ edge.buildGroup(coreGroup, renderNode.coreGraph, sceneBehavior);
+
+ // Create the layer of nodes for this scene (ellipses, rects etc).
+ node.buildGroup(coreGroup, coreNodes, sceneBehavior);
+
+ // In-extract
+ if (renderNode.isolatedInExtract.length > 0) {
+ let inExtractGroup = selectOrCreateChild(sceneGroup, "g",
+ Class.Scene.INEXTRACT);
+ node.buildGroup(inExtractGroup, renderNode.isolatedInExtract,
+ sceneBehavior);
+ } else {
+ selectChild(sceneGroup, "g", Class.Scene.INEXTRACT).remove();
+ }
+
+ // Out-extract
+ if (renderNode.isolatedOutExtract.length > 0) {
+ let outExtractGroup = selectOrCreateChild(sceneGroup, "g",
+ Class.Scene.OUTEXTRACT);
+ node.buildGroup(outExtractGroup, renderNode.isolatedOutExtract,
+ sceneBehavior);
+ } else {
+ selectChild(sceneGroup, "g", Class.Scene.OUTEXTRACT).remove();
+ }
+
+ position(sceneGroup, renderNode);
+
+ // Fade in the scene group if it didn't already exist.
+ if (isNewSceneGroup) {
+ sceneGroup.attr("opacity", 0)
+ .transition().attr("opacity", 1);
+ }
+
+ return sceneGroup;
+};
+
+/**
+ * Given a scene's svg group, set g.in-extract, g.coreGraph, g.out-extract svg
+ * groups' position relative to the scene.
+ *
+ * @param sceneGroup
+ * @param renderNode render node of a metanode or series node.
+ */
+function position(sceneGroup, renderNode: render.RenderGroupNodeInformation) {
+ // Translate scenes down by the label height so that when showing graphs in
+ // expanded metanodes, the graphs are below the labels. Do not shift them
+ // down for series nodes as series nodes don't have labels inside of their
+ // bounding boxes.
+ let yTranslate = renderNode.node.type === NodeType.SERIES ?
+ 0 : layout.PARAMS.subscene.meta.labelHeight;
+
+ // core
+ translate(selectChild(sceneGroup, "g", Class.Scene.CORE),
+ 0, yTranslate);
+
+ // in-extract
+ let inExtractX = renderNode.coreBox.width === 0 ?
+ 0 : renderNode.coreBox.width;
+ let hasInExtract = renderNode.isolatedInExtract.length > 0;
+ if (hasInExtract) {
+ translate(selectChild(sceneGroup, "g", Class.Scene.INEXTRACT),
+ inExtractX, yTranslate);
+ }
+
+ // out-extract
+ let hasOutExtract = renderNode.isolatedOutExtract.length > 0;
+ if (hasOutExtract) {
+ let outExtractX = inExtractX + renderNode.inExtractBox.width
+ + renderNode.extractXOffset;
+ translate(selectChild(sceneGroup, "g", Class.Scene.OUTEXTRACT),
+ outExtractX, yTranslate);
+ }
+};
+
+/** Adds a click listener to a group that fires a graph-select event */
+export function addGraphClickListener(graphGroup, sceneBehavior) {
+ d3.select(graphGroup).on("click", () => {
+ sceneBehavior.fire("graph-select");
+ });
+};
+
+/** Helper for adding transform: translate(x0, y0) */
+export function translate(selection, x0: number, y0: number) {
+ selection.attr("transform", "translate(" + x0 + "," + y0 + ")");
+};
+
+/**
+ * Helper for setting position of a svg rect
+ * @param rect rect to set position of.
+ * @param cx Center x.
+ * @param cy Center x.
+ * @param width Width to set.
+ * @param height Height to set.
+ */
+export function positionRect(rect, cx: number, cy: number, width: number,
+ height: number) {
+ rect.transition().attr({
+ x: cx - width / 2,
+ y: cy - height / 2,
+ width: width,
+ height: height
+ });
+};
+
+/**
+ * Helper for setting position of a svg expand/collapse button
+ * @param button container group
+ * @param renderNode the render node of the group node to position
+ * the button on.
+ */
+export function positionButton(button,
+ renderNode: render.RenderNodeInformation) {
+ // Position the button in the top-right corner of the group node,
+ // with space given the draw the button inside of the corner.
+ let x = renderNode.x + renderNode.width / 2 - 6;
+ let y = renderNode.y - renderNode.height / 2 + 6;
+ // For unexpanded series nodes, the button has special placement due
+ // to the unique visuals of this group node.
+ if (renderNode.node.type === NodeType.SERIES && !renderNode.expanded) {
+ x += 10;
+ y -= 2;
+ }
+ let translateStr = "translate(" + x + "," + y + ")";
+ button.selectAll("path").transition().attr("transform", translateStr);
+ button.select("circle").transition().attr({
+ cx: x,
+ cy: y,
+ r: layout.PARAMS.nodeSize.meta.expandButtonRadius
+ });
+};
+
+/**
+ * Helper for setting position of a svg ellipse
+ * @param ellipse ellipse to set position of.
+ * @param cx Center x.
+ * @param cy Center x.
+ * @param width Width to set.
+ * @param height Height to set.
+ */
+export function positionEllipse(ellipse, cx: number, cy: number,
+ width: number, height: number) {
+ ellipse.transition().attr({
+ cx: cx,
+ cy: cy,
+ rx: width / 2,
+ ry: height / 2
+ });
+};
+
+} // close module
diff --git a/tensorflow/tensorboard/components/tf-graph-common/lib/template.ts b/tensorflow/tensorboard/components/tf-graph-common/lib/template.ts
new file mode 100644
index 0000000000..b5aafc55e5
--- /dev/null
+++ b/tensorflow/tensorboard/components/tf-graph-common/lib/template.ts
@@ -0,0 +1,282 @@
+/// <reference path="graph.ts" />
+/// <reference path="hierarchy.ts" />
+
+module tf.graph.template {
+
+/**
+ * Detect repeating patterns of subgraphs.
+ * Assign templateId to each subgraph if it belongs to a template.
+ * Returns clusters of similar subgraphs .
+ *
+ * @param graph
+ * @param verifyTemplate whether to run the template verification algorithm
+ * @return a dict (template id => Array of node names)
+ */
+export function detect(h, verifyTemplate): {[templateId: string]: string[]} {
+ // In any particular subgraph, there are either
+ // - leaf nodes (which do not have subgraph)
+ // - metanode nodes - some of them have only one member (singular metanode)
+ // and some have multiple members (non-singular metanode)
+
+ // First, generate a nearest neighbor hash of metanode nodes.
+ let nnGroups = clusterSimilarSubgraphs(h);
+
+ // For each metanode, compare its subgraph (starting from shallower groups)
+ // and assign template id.
+ let templates = groupTemplateAndAssignId(nnGroups, verifyTemplate);
+
+ // Sort the templates by minimum level in the graph at which they appear,
+ // as this leads to optimal setting of the colors of each template for
+ // maximum differentiation.
+ return _(templates).pairs()
+ .sortBy(function(pair) {
+ return pair[1].level;
+ })
+ .map(function(pair) {
+ return [pair[0], pair[1].nodes];
+ })
+ .object().value();
+};
+
+/**
+ * @return Unique string for a metanode based on depth, |V|, |E| and
+ * op type histogram.
+ */
+ function getSignature(metanode) {
+ // depth=<number> |V|=<number> |E|=<number>
+ let props = _.map({
+ "depth": metanode.depth,
+ "|V|": metanode.metagraph.nodes().length,
+ "|E|": metanode.metagraph.edges().length
+ }, function(v, k) { return k + "=" + v; }).join(" ");
+
+ // optype1=count1,optype2=count2
+ let ops = _.map(metanode.opHistogram, function(count, op) {
+ return op + "=" + count;
+ }).join(",");
+
+ return props + " [ops] " + ops;
+}
+
+/**
+ * Generate a nearest neighbor hash of metanodes
+ * based on depth, |V|, |E|, and opHistogram of their subgraph
+ * (excluding leaf nodes and singular metanodes).
+ * @param graph The graph
+ * @return Array of pairs of [signature,
+ * Object with min level of the template and an Array of tf.graph.Group]
+ * sort by ascending order of minimum depth at which metanode appears.
+ */
+function clusterSimilarSubgraphs(h: hierarchy.Hierarchy) {
+ /** a dict from metanode.signature() => Array of tf.graph.Groups */
+ let hashDict = _(h.getNodeMap()).reduce(function(hash, node: OpNode|Metanode, name) {
+ if (node.type !== NodeType.META) {
+ return hash;
+ }
+ let levelOfMetaNode = name.split("/").length - 1;
+ let signature = getSignature(node);
+ let templateInfo = hash[signature] ||
+ {nodes: [], level: levelOfMetaNode};
+ hash[signature] = templateInfo;
+ templateInfo.nodes.push(node);
+ if (templateInfo.level > levelOfMetaNode) {
+ templateInfo.level = levelOfMetaNode;
+ }
+ return hash;
+ }, {});
+
+ return _(hashDict).pairs()
+ // filter nn metanode with only one member
+ .filter(function(pair) {
+ return pair[1].nodes.length > 1;
+ })
+ .sortBy(function(pair) {
+ // sort by depth
+ // (all members in the same nnGroup has equal depth)
+ return pair[1].nodes[0].depth;
+ })
+ .value();
+}
+
+function groupTemplateAndAssignId(nnGroups, verifyTemplate) {
+ // For each metanode, compare its subgraph (starting from shallower groups)
+ // and assign template id.
+ return _.reduce(nnGroups, function(templates, nnGroupPair) {
+ let signature = nnGroupPair[0],
+ nnGroup = nnGroupPair[1].nodes,
+ clusters = [];
+
+ nnGroup.forEach(function(metanode) {
+ // check with each existing cluster
+ for (let i = 0; i < clusters.length; i++) {
+ let similar = !verifyTemplate ||
+ isSimilarSubgraph(
+ clusters[i].metanode.metagraph,
+ metanode.metagraph
+ );
+ // if similar, just add this metanode to the cluster
+ if (similar) {
+ // get template from the first one
+ metanode.templateId = clusters[i].metanode.templateId;
+ clusters[i].members.push(metanode.name);
+ return;
+ }
+ }
+ // otherwise create a new cluster with id "signature [count] "
+ metanode.templateId = signature + "[" + clusters.length + "]";
+ clusters.push({
+ metanode: metanode,
+ members: [metanode.name]
+ });
+ });
+
+ clusters.forEach(function(c) {
+ templates[c.metanode.templateId] = {
+ level: nnGroupPair[1].level,
+ nodes: c.members
+ };
+ });
+ return templates;
+ }, {});
+}
+
+function sortNodes(names: string[], graph: graphlib.Graph<Metanode|OpNode, Metaedge>,
+ prefix: string) {
+ return _.sortByAll(names,
+ function(name) {
+ let node = graph.node(name);
+ return (<OpNode>node).op;
+ },
+ function(name) {
+ let node = graph.node(name);
+ return (<Metanode>node).templateId;
+ },
+ function(name) {
+ return graph.neighbors(name).length;
+ },
+ function(name) {
+ return graph.predecessors(name).length;
+ },
+ function(name) {
+ return graph.successors(name).length;
+ },
+ function(name) {
+ return name.substr(prefix.length);
+ });
+}
+
+function isSimilarSubgraph(g1: graphlib.Graph<any, any>, g2: graphlib.Graph<any, any>) {
+ if (!tf.graph.hasSimilarDegreeSequence(g1, g2)) {
+ return false;
+ }
+
+ // if we want to skip, just return true here.
+ // return true;
+
+ // Verify sequence by running DFS
+ let g1prefix = g1.graph().name;
+ let g2prefix = g2.graph().name;
+
+ let visited1 = {};
+ let visited2 = {};
+ let stack = [];
+
+ /**
+ * push sources or successors into the stack
+ * if the visiting pattern has been similar.
+ */
+ function stackPushIfNotDifferent(n1, n2) {
+ let sub1 = n1.substr(g1prefix.length),
+ sub2 = n2.substr(g2prefix.length);
+
+ /* tslint:disable */
+ if (visited1[sub1] ^ visited2[sub1]) {
+ console.warn("different visit pattern", "[" + g1prefix + "]", sub1,
+ "[" + g2prefix + "]", sub2);
+ return true;
+ }
+ /* tslint:enable */
+ if (!visited1[sub1]) { // implied && !visited2[sub2]
+ visited1[sub1] = visited2[sub2] = true;
+ stack.push({n1: n1, n2: n2});
+ }
+
+ return false;
+ }
+
+ // check if have same # of sources then sort and push
+ let sources1 = g1.sources();
+ let sources2 = g2.sources();
+ if (sources1.length !== sources2.length) {
+ /* tslint:disable */
+ console.log("different source length");
+ /* tslint:enable */
+ return false;
+ }
+ sources1 = sortNodes(sources1, g1, g1prefix);
+ sources2 = sortNodes(sources2, g2, g2prefix);
+
+ for (let i = 0; i < sources1.length; i++) {
+ let different = stackPushIfNotDifferent(sources1[i], sources2[i]);
+ if (different) {
+ return false;
+ }
+ }
+
+ while (stack.length > 0) {
+ let cur = stack.pop();
+
+ // check node
+ let similar = isSimilarNode(g1.node(cur.n1), g2.node(cur.n2));
+ if (!similar) {
+ return false;
+ }
+
+ // check if have same # of successors then sort and push
+ let succ1 = g1.successors(cur.n1), succ2 = g2.successors(cur.n2);
+ if (succ1.length !== succ2.length) {
+ /* tslint:disable */
+ console.log("# of successors mismatch", succ1, succ2);
+ /* tslint:enable */
+ return false;
+ }
+ succ1 = sortNodes(succ1, g1, g1prefix);
+ succ2 = sortNodes(succ2, g2, g2prefix);
+
+ for (let j = 0; j < succ1.length; j++) {
+ let different = stackPushIfNotDifferent(succ1[j], succ2[j]);
+ if (different) {
+ return false;
+ }
+ }
+ }
+
+ return true;
+}
+
+/**
+ * Returns if two nodes have identical structure.
+ */
+ function isSimilarNode(n1: OpNode|Metanode|SeriesNode, n2: OpNode|Metanode|SeriesNode): boolean {
+ if (n1.type === NodeType.META) {
+ // compare metanode
+ let metanode1 = <Metanode> n1;
+ let metanode2 = <Metanode> n2;
+ return metanode1.templateId && metanode2.templateId && metanode1.templateId === metanode2.templateId;
+ } else if (n1.type === NodeType.OP && n2.type === NodeType.OP) {
+ // compare leaf node
+ return (<OpNode>n1).op === (<OpNode>n2).op;
+ } else if (n1.type === NodeType.SERIES && n2.type === NodeType.SERIES) {
+ // compare series node sizes and operations
+ // (only need to check one op as all op nodes are identical in series)
+ let seriesnode1 = <SeriesNode> n1;
+ let seriesnode2 = <SeriesNode> n2;
+ let seriesnode1Count = seriesnode1.metagraph.nodeCount();
+ return (seriesnode1Count === seriesnode2.metagraph.nodeCount() &&
+ (seriesnode1Count === 0 ||
+ ((<OpNode>seriesnode1.metagraph.node(seriesnode1.metagraph.nodes()[0])).op ===
+ (<OpNode>seriesnode2.metagraph.node(seriesnode2.metagraph.nodes()[0])).op)));
+ }
+ return false;
+}
+}
diff --git a/tensorflow/tensorboard/components/tf-graph-common/tf-graph-common.html b/tensorflow/tensorboard/components/tf-graph-common/tf-graph-common.html
new file mode 100644
index 0000000000..e4cd153113
--- /dev/null
+++ b/tensorflow/tensorboard/components/tf-graph-common/tf-graph-common.html
@@ -0,0 +1,16 @@
+<script src="../../bower_components/d3/d3.js"></script>
+<script src="../../bower_components/lodash/lodash.js"></script>
+<script src="../../bower_components/graphlib/dist/graphlib.core.js"></script>
+
+<script src="lib/common.js"></script>
+<script src="lib/graph.js"></script>
+<script src="lib/parser.js"></script>
+<script src="lib/hierarchy.js"></script>
+<script src="lib/render.js"></script>
+<script src="lib/template.js"></script>
+<script src="lib/scene/scene.js"></script>
+<script src="lib/scene/annotation.js"></script>
+<script src="lib/scene/edge.js"></script>
+<script src="lib/scene/node.js"></script>
+<script src="lib/layout.js"></script>
+<script src="lib/colors.js"></script>
diff --git a/tensorflow/tensorboard/components/tf-graph-dashboard/tf-graph-dashboard.html b/tensorflow/tensorboard/components/tf-graph-dashboard/tf-graph-dashboard.html
new file mode 100644
index 0000000000..779d2d3fe9
--- /dev/null
+++ b/tensorflow/tensorboard/components/tf-graph-dashboard/tf-graph-dashboard.html
@@ -0,0 +1,118 @@
+<link rel="import" href="../../bower_components/polymer/polymer.html">
+<link rel="import" href="../tf-graph-loader/tf-graph-loader.html">
+<link rel="import" href="../tf-graph-board/tf-graph-board.html">
+<link rel="import" href="../tf-graph/tf-graph-controls.html">
+<link rel="import" href="../tf-dashboard-common/warning-style.html">
+
+<!--
+tf-graph-dashboard displays a graph from a TensorFlow run.
+
+It has simple behavior: Creates a url-generator and run-generator
+to talk to the backend, and then passes the runsWithGraph (list of runs with
+associated graphs) along with the url generator into tf-graph-board for display.
+
+If there are multiple runs with graphs, the first run's graph is shown
+by default. The user can select a different run from a dropdown menu.
+-->
+
+<dom-module id="tf-graph-dashboard">
+<template>
+<div id="plumbing">
+ <tf-url-generator
+ out-runs-url="{{_runsUrl}}"
+ out-graph-url-generator="{{_graphUrlGen}}"
+ id="urlGenerator"
+ ></tf-url-generator>
+ <tf-run-generator
+ id="runGenerator"
+ url="[[_runsUrl]]"
+ out-runs-with-graph="{{_runsWithGraph}}"
+ /></tf-run-generator>
+</div>
+<template is="dom-if" if="[[_datasetsEmpty(_datasets)]]">
+<div class="warning">
+ <p>
+ No graph definition files were found.
+ </p>
+ <p>
+ To store a graph, create a
+ <code>tf.python.training.summary_io.SummaryWriter</code>
+ and pass the graph either via the constructor, or by calling its
+ <code>add_graph()</code> method.
+ </p>
+</div>
+</template>
+<template is="dom-if" if="[[!_datasetsEmpty(_datasets)]]">
+<tf-dashboard-layout>
+<div class="sidebar">
+ <tf-graph-controls id="controls"
+ color-by-params="[[_colorByParams]]"
+ has-stats="[[_hasStats]]"
+ color-by="{{_colorBy}}",
+ datasets="[[_datasets]]",
+ selected-dataset="{{_selectedDataset}}"
+ selected-file="{{_selectedFile}}"
+ ></tf-graph-controls>
+ <tf-graph-loader id="loader"
+ datasets="[[_datasets]]",
+ selected-dataset="[[_selectedDataset]]"
+ selected-file="[[_selectedFile]]"
+ out-graph-hierarchy="{{_graphHierarchy}}"
+ out-graph="{{_graph}}"
+ out-graph-name="{{_graphName}}"
+ has-stats="{{_hasStats}}"
+ progress="{{_progress}}"
+ ></tf-graph-loader>
+</div>
+<div class="center">
+ <tf-graph-board id="graphboard"
+ graph-hierarchy="[[_graphHierarchy]]"
+ graph="[[_graph]]"
+ has-stats="[[_hasStats]]"
+ graph-name="[[_graphName]]"
+ progress="[[_progress]]"
+ color-by="[[_colorBy]]"
+ color-by-params="{{_colorByParams}}">
+ </tf-graph-board>
+</div>
+</template>
+<style>
+
+:host /deep/ {
+ font-family: 'Roboto', sans-serif;
+}
+
+.center {
+ height: 100%;
+}
+
+</style>
+<style include="warning-style"></style>
+</template>
+</dom-module>
+
+<script>
+(function() {
+Polymer({
+ is: 'tf-graph-dashboard',
+ properties: {
+ _runsWithGraph: Array,
+ _datasets: {
+ type: Object,
+ computed: '_getDatasets(_runsWithGraph, _graphUrlGen)'
+ }
+ },
+ _getDatasets: function(runsWithGraph, graphUrlGen) {
+ return _.map(runsWithGraph, function(runName) {
+ return {
+ name: runName,
+ path: graphUrlGen(runName)
+ };
+ });
+ },
+ _datasetsEmpty: function(datasets) {
+ return !datasets || !datasets.length;
+ }
+});
+})();
+</script>
diff --git a/tensorflow/tensorboard/components/tf-graph-info/tf-graph-info.html b/tensorflow/tensorboard/components/tf-graph-info/tf-graph-info.html
new file mode 100644
index 0000000000..b7900f86de
--- /dev/null
+++ b/tensorflow/tensorboard/components/tf-graph-info/tf-graph-info.html
@@ -0,0 +1,65 @@
+<link rel="import" href="../../bower_components/polymer/polymer.html">
+<link rel="import" href="tf-node-info.html">
+<dom-module id="tf-graph-info">
+<template>
+<style>
+:host {
+ font-size: 12px;
+ margin: 0;
+ padding: 0;
+ display: block;
+}
+
+h2 {
+ padding: 0;
+ text-align: center;
+ margin: 0;
+}
+</style>
+<template is="dom-if" if="{{selectedNode}}">
+ <paper-material elevation="1" class="card">
+ <tf-node-info graph-hierarchy='[[graphHierarchy]]'
+ flat-graph="[[graph]]"
+ node-name='[[selectedNode]]'
+ highlighted-node='{{highlightedNode}}'>
+ </tf-node-info>
+ </paper-material>
+</template>
+</template>
+<script>
+(function() {
+ Polymer({
+ is: 'tf-graph-info',
+
+ properties: {
+ title: String,
+ graphHierarchy: Object,
+ graph: Object,
+ // Two-ways
+ selectedNode: {
+ type: String,
+ notify: true
+ },
+ highlightedNode: {
+ type: String,
+ notify: true
+ }
+ },
+ listeners: {
+ 'node-list-item-click': '_nodeListItemClicked',
+ 'node-list-item-mouseover': '_nodeListItemMouseover',
+ 'node-list-item-mouseout': '_nodeListItemMouseout'
+ },
+ _nodeListItemClicked: function(event) {
+ this.selectedNode = event.detail.nodeName;
+ },
+ _nodeListItemMouseover: function(event) {
+ this.highlightedNode = event.detail.nodeName;
+ },
+ _nodeListItemMouseout: function() {
+ this.highlightedNode = null;
+ }
+ });
+})();
+</script>
+</dom-module>
diff --git a/tensorflow/tensorboard/components/tf-graph-info/tf-node-info.html b/tensorflow/tensorboard/components/tf-graph-info/tf-node-info.html
new file mode 100644
index 0000000000..5044bf2bb1
--- /dev/null
+++ b/tensorflow/tensorboard/components/tf-graph-info/tf-node-info.html
@@ -0,0 +1,345 @@
+<link rel="import" href="../../bower_components/iron-collapse/iron-collapse.html">
+<link rel="import" href="../../bower_components/iron-list/iron-list.html">
+<link rel="import" href="../../bower_components/polymer/polymer.html">
+<link rel="import" href="../../bower_components/paper-icon-button/paper-icon-button.html">
+<link rel="import" href="../../bower_components/paper-item/all-imports.html">
+<link rel="import" href="../tf-graph-common/tf-graph-common.html">
+<link rel="import" href="../tf-graph/tf-graph-icon.html">
+<link rel="import" href="tf-node-list-item.html">
+
+<dom-module id="tf-node-info">
+ <style>
+ .sub-list-group {
+ padding: 8px 12px 0px;
+ font-weight: 500;
+ font-size: 12pt;
+ }
+
+ .sub-list {
+ max-height: 300px;
+ overflow-y: scroll;
+ }
+
+ .attr-left {
+ float: left;
+ width: 30%;
+ word-wrap: break-word;
+ color: #565656;
+ font-size: 11pt;
+ font-weight: 400;
+ }
+
+ .attr-right {
+ margin-left: 30%;
+ word-wrap: break-word;
+ color: #565656;
+ font-weight: 400;
+ }
+
+ paper-item {
+ padding: 0;
+ background: #e9e9e9;
+ }
+
+ paper-item-body[two-line] {
+ min-height: 0;
+ padding: 8px 12px 4px;
+ }
+
+ .expandedInfo {
+ padding: 0 0 8px;
+ }
+
+ .controlDeps {
+ padding: 0 0 0 8px;
+ }
+
+ .node-name {
+ white-space: normal;
+ word-wrap: break-word;
+ font-size: 14pt;
+ font-weight: 500;
+ }
+
+ .node-icon {
+ float: right;
+ }
+
+ .subtitle {
+ font-size: 12pt;
+ color: #5e5e5e;
+ }
+
+ .controlLine {
+ font-size: 11pt;
+ font-weight: 400;
+ }
+
+ .toggle-button {
+ float: right;
+ max-height: 20px;
+ max-width: 20px;
+ padding: 0;
+ }
+
+ .control-toggle-button {
+ float: left;
+ max-height: 20px;
+ max-width: 20px;
+ padding: 0;
+ }
+ </style>
+ <template>
+ <paper-item>
+ <paper-item-body two-line>
+ <div>
+ <paper-icon-button
+ icon="{{_getToggleIcon(_expanded)}}"
+ on-click="_toggleExpanded"
+ class="toggle-button">
+ </paper-icon-button>
+ <div class="node-name">[[_getNodeName(nodeName)]]</div>
+ </div>
+ <div secondary>
+ <tf-graph-icon class="node-icon" node="[[_node]]"></tf-graph-icon>
+ <template is="dom-if" if="{{_node.op}}">
+ <div class="subtitle">
+ Operation:
+ <span>[[_node.op]]</span>
+ </div>
+ </template>
+ <template is="dom-if" if="{{_node.metagraph}}">
+ <div class="subtitle">
+ Subgraph:
+ <span>[[_node.cardinality]]</span> nodes
+ </div>
+ </template>
+ </div>
+ </paper-item-body>
+ </paper-item>
+ <iron-collapse opened="{{_expanded}}">
+ <template is="dom-if" if="{{_expanded}}" restamp="true">
+ <div class="expandedInfo">
+ <div class="sub-list-group attributes">
+ Attributes
+ (<span>[[_attributes.length]]</span>)
+ <iron-list class="sub-list" id ="attributesList"
+ items="[[_attributes]]">
+ <template>
+ <div>
+ <div class="attr-left">[[item.key]]</div>
+ <div class="attr-right">[[item.value]]</div>
+ </div>
+ </template>
+ </iron-list>
+ </div>
+
+ <template is="dom-if" if="{{_device}}">
+ <div class="sub-list-group device">
+ <div class="attr-left">Device</div>
+ <div class="attr-right">[[_device]]</div>
+ </div>
+ </template>
+
+ <div class="sub-list-group predecessors">
+ Inputs
+ (<span>[[_totalPredecessors]]</span>)
+ <iron-list class="sub-list" id ="inputsList"
+ items="[[_predecessors.regular]]">
+ <template>
+ <tf-node-list-item card-node="[[_node]]"
+ item-node="[[_getNode(item, graphHierarchy)]]"
+ name="[[item]]"
+ item-type="predecessors">
+ </tf-node-list-item>
+ </template>
+ </iron-list>
+ <template is="dom-if" if="[[_predecessors.control.length]]">
+ <div class="controlDeps">
+ <div class="controlLine">
+ <paper-icon-button
+ icon="{{_getToggleIcon(_openedControlPred)}}"
+ on-click="_toggleControlPred"
+ class="control-toggle-button">
+ </paper-icon-button>
+ Control dependencies
+ </div>
+ <iron-collapse opened="{{_openedControlPred}}">
+ <template is="dom-if" if="{{_openedControlPred}}" restamp="true">
+ <iron-list class="sub-list" items="[[_predecessors.control]]">
+ <template>
+ <tf-node-list-item card-node="[[_node]]"
+ item-node="[[_getNode(item, graphHierarchy)]]"
+ name="[[item]]"
+ item-type="predecessors">
+ </tf-node-list-item>
+ </template>
+ </iron-list>
+ </template>
+ </iron-collapse>
+ </div>
+ </template>
+ </div>
+
+ <div class="sub-list-group successors">
+ Outputs
+ (<span>[[_totalSuccessors]]</span>)
+ <iron-list class="sub-list" id ="outputsList"
+ items="[[_successors.regular]]">
+ <template>
+ <tf-node-list-item card-node="[[_node]]"
+ item-node="[[_getNode(item, graphHierarchy)]]"
+ name="[[item]]"
+ item-type="successor">
+ </tf-node-list-item>
+ </template>
+ </iron-list>
+ <template is="dom-if" if="[[_successors.control.length]]">
+ <div class="controlDeps">
+ <div class="controlLine">
+ <paper-icon-button
+ icon="{{_getToggleIcon(_openedControlSucc)}}"
+ on-click="_toggleControlSucc"
+ class="control-toggle-button">
+ </paper-icon-button>
+ Control dependencies
+ </div>
+ <iron-collapse opened="{{_openedControlSucc}}">
+ <template is="dom-if" if="{{_openedControlSucc}}" restamp="true">
+ <iron-list class="sub-list" items="[[_successors.control]]">
+ <template>
+ <tf-node-list-item card-node="[[_node]]"
+ item-node="[[_getNode(item, graphHierarchy)]]"
+ name="[[item]]"
+ item-type="successors">
+ </tf-node-list-item>
+ </template>
+ </iron-list>
+ </template>
+ </iron-collapse>
+ </div>
+ </template>
+ </div>
+ </div>
+ </template>
+ </iron-collapse>
+ </template>
+
+ <script>
+ (function() {
+ Polymer({
+ is: 'tf-node-info',
+
+ properties: {
+ nodeName: String,
+ graphHierarchy: Object,
+ _node: {
+ type: Object,
+ computed: '_getNode(nodeName, graphHierarchy)',
+ observer: '_resetState'
+ },
+ _attributes: {
+ type: Array,
+ computed: '_getAttributes(_node)'
+ },
+ _device: {
+ type: String,
+ computed: '_getDevice(_node)'
+ },
+ _successors: {
+ type: Object,
+ computed: '_getSuccessors(_node, graphHierarchy)'
+ },
+ _predecessors: {
+ type: Object,
+ computed: '_getPredecessors(_node, graphHierarchy)'
+ },
+ _subnodes: {
+ type: Array,
+ computed: '_getSubnodes(_node)'
+ },
+ _expanded: {
+ type: Boolean,
+ value: true
+ },
+ _totalPredecessors: {
+ type: Number,
+ computed: '_getTotalPred(_predecessors)'
+ },
+ _totalSuccessors: {
+ type: Number,
+ computed: '_getTotalSucc(_successors)'
+ },
+ _openedControlPred: {
+ type: Boolean,
+ value: false
+ },
+ _openedControlSucc: {
+ type: Boolean,
+ value: false
+ },
+ },
+ expandNode: function() {
+ this.fire('_node.expand', this.node);
+ },
+ _getNode: function(n, graphHierarchy) {
+ return graphHierarchy.node(n);
+ },
+ _getNodeName: function(nodeName) {
+ // Insert a zero-width whitespace character before each slash so that
+ // long node names wrap cleanly at path boundaries.
+ return (nodeName || '').replace(/\//g, '\u200B/');
+ },
+ _getAttributes: function(node) {
+ this.async(this._resizeList.bind(this, "#attributesList"));
+ return node && node.attr ? node.attr.map(function(entry) {
+ return {key: entry.key, value: JSON.stringify(entry.value)};
+ }) : [];
+
+ },
+ _getDevice: function(node) {
+ return node ? node.device : null;
+ },
+ _getSuccessors: function(node, hierarchy) {
+ this.async(this._resizeList.bind(this, "#inputsList"));
+ return node ? hierarchy.getSuccessors(node.name) : [[], []];
+ },
+ _getPredecessors: function(node, hierarchy) {
+ this.async(this._resizeList.bind(this, "#outputsList"));
+ return node ? hierarchy.getPredecessors(node.name) : [[], []];
+ },
+ _getSubnodes: function(node) {
+ return node && node.metagraph ? node.metagraph.nodes() : null;
+ },
+ _getTotalPred: function(predecessors) {
+ return predecessors.regular.length + predecessors.control.length;
+ },
+ _getTotalSucc: function(successors) {
+ return successors.regular.length + successors.control.length;
+ },
+ _toggleControlPred: function() {
+ this._openedControlPred = !this._openedControlPred;
+ },
+ _toggleControlSucc: function() {
+ this._openedControlSucc = !this._openedControlSucc;
+ },
+ _toggleExpanded: function() {
+ this._expanded = !this._expanded;
+ },
+ _getToggleIcon: function(expanded) {
+ return expanded ? "expand-less" : "expand-more";
+ },
+ _resetState: function() {
+ this._openedControlPred = false;
+ this._openedControlSucc = false;
+ },
+ _resizeList: function(selector) {
+ var list = document.querySelector(selector);
+ if (list) {
+ list.fire('iron-resize');
+ }
+ }
+ });
+ })();
+ </script>
+</dom-module>
diff --git a/tensorflow/tensorboard/components/tf-graph-info/tf-node-list-item.html b/tensorflow/tensorboard/components/tf-graph-info/tf-node-list-item.html
new file mode 100644
index 0000000000..f16e9e4511
--- /dev/null
+++ b/tensorflow/tensorboard/components/tf-graph-info/tf-node-list-item.html
@@ -0,0 +1,91 @@
+<link rel="import" href="../../bower_components/polymer/polymer.html">
+<link rel="import" href="../tf-graph/tf-graph-icon.html">
+
+<dom-module id="tf-node-list-item">
+ <style>
+ #list-item {
+ width: 100%;
+ color: #565656;
+ font-size: 11pt;
+ font-weight: 400;
+ position: relative;
+ }
+
+ #list-item:hover {
+ background-color: var(--google-yellow-100);
+ }
+
+ .clickable {
+ cursor: pointer;
+ }
+
+ #list-item span {
+ display: block;
+ margin-left: 40px;
+ }
+
+ #list-item.excluded span {
+ color: #999;
+ }
+
+ .node-icon {
+ position: absolute;
+ top: 1px;
+ left: 2px;
+ }
+ </style>
+ <template>
+ <div id="list-item"
+ on-mouseover="_nodeListener"
+ on-mouseout="_nodeListener"
+ on-click="_nodeListener">
+ <tf-graph-icon class="node-icon"
+ node="[[itemNode]]" height="12"></tf-graph-icon>
+ <span title$="[[name]]">[[name]]</span>
+ </div>
+ </template>
+
+ <script>
+ (function() {
+ Polymer({
+ is: 'tf-node-list-item',
+
+ properties: {
+ /**
+ * The Node for the card itself, on which this item is being drawn.
+ * @type {tf.graph.Node}
+ */
+ cardNode: Object,
+ /**
+ * The Node for the item within the card, somehow related to cardNode.
+ * @type {tf.graph.Node}
+ */
+ itemNode: Object,
+ name: String,
+ itemType: {
+ type: String,
+ observer: '_itemTypeChanged'
+ }
+ },
+
+ _itemTypeChanged: function() {
+ if (this.itemType !== 'subnode') {
+ this.$['list-item'].classList.add('clickable');
+ } else {
+ this.$['list-item'].classList.remove('clickable');
+ }
+ },
+
+ _nodeListener: function(event) {
+ // fire node.click/mouseover/mouseout
+ this.fire('node-list-item-' + event.type, {
+ cardNode: this.cardNode.name,
+ nodeName: this.name,
+ type: this.itemType
+ });
+ }
+
+ });
+ })();
+ </script>
+</dom-module>
diff --git a/tensorflow/tensorboard/components/tf-graph-loader/tf-graph-loader.html b/tensorflow/tensorboard/components/tf-graph-loader/tf-graph-loader.html
new file mode 100644
index 0000000000..3f290f2152
--- /dev/null
+++ b/tensorflow/tensorboard/components/tf-graph-loader/tf-graph-loader.html
@@ -0,0 +1,172 @@
+<link rel="import" href="../../bower_components/polymer/polymer.html">
+
+<!--
+An element which provides a filter parsing for pbtxt to graph output.
+-->
+<dom-module id="tf-graph-loader">
+</dom-module>
+
+<script>
+Polymer({
+
+ is: 'tf-graph-loader',
+
+ properties: {
+ /**
+ * @type {value: number, msg: string}
+ *
+ * A number between 0 and 100 denoting the % of progress
+ * for the progress bar and the displayed message.
+ */
+ progress: {
+ type: Object,
+ notify: true,
+ readOnly: true // Produces, does not consume.
+ },
+ datasets: Array,
+ hasStats: {
+ type: Boolean,
+ readOnly: true, // This property produces data.
+ notify: true
+ },
+ selectedDataset: Number,
+ selectedFile: {
+ type: Object,
+ observer: '_selectedFileChanged'
+ },
+ outGraphHierarchy: {
+ type: Object,
+ readOnly: true, //readonly so outsider can't change this via binding
+ notify: true
+ },
+ outGraph: {
+ type: Object,
+ readOnly: true, //readonly so outsider can't change this via binding
+ notify: true
+ },
+ outGraphName: {
+ type: String,
+ readOnly: true,
+ notify: true
+ }
+ },
+ observers: [
+ '_selectedDatasetChanged(selectedDataset, datasets)'
+ ],
+ _parseAndConstructHierarchicalGraph: function(dataset, pbTxtContent) {
+ var self = this;
+ // Reset the progress bar to 0.
+ self._setProgress({
+ value: 0,
+ msg: ''
+ });
+ var tracker = {
+ setMessage: function(msg) {
+ self._setProgress({
+ value: self.progress.value,
+ msg: msg
+ });
+ },
+ updateProgress: function(value) {
+ self._setProgress({
+ value: self.progress.value + value,
+ msg: self.progress.msg
+ });
+ },
+ reportError: function(msg) {
+ self._setProgress({
+ value: self.progress.value,
+ msg: msg,
+ error: true
+ });
+ },
+ };
+ var statsJson;
+ var dataTracker = tf.getSubtaskTracker(tracker, 30, 'Data');
+ tf.graph.parser.readAndParseData(dataset, pbTxtContent, dataTracker)
+ .then(function(result) {
+ // Build the flat graph (consists only of Op nodes).
+ var nodes = result.nodes;
+ statsJson = result.statsJson;
+
+ // This is the whitelist of inputs on op types that are considered
+ // reference edges. "Assign 0" indicates that the first input to
+ // an OpNode with operation type "Assign" is a reference edge.
+ var refEdges = {};
+ refEdges["Assign 0"] = true;
+ refEdges["AssignAdd 0"] = true;
+ refEdges["AssignSub 0"] = true;
+ refEdges["assign 0"] = true;
+ refEdges["assign_add 0"] = true;
+ refEdges["assign_sub 0"] = true;
+ refEdges["count_up_to 0"] = true;
+ refEdges["ScatterAdd 0"] = true;
+ refEdges["ScatterSub 0"] = true;
+ refEdges["ScatterUpdate 0"] = true;
+ refEdges["scatter_add 0"] = true;
+ refEdges["scatter_sub 0"] = true;
+ refEdges["scatter_update 0"] = true;
+ var buildParams = {
+ enableEmbedding: true,
+ inEmbeddingTypes: ['Const'],
+ outEmbeddingTypes: ['^[a-zA-Z]+Summary$'],
+ refEdges: refEdges
+ };
+ var graphTracker = tf.getSubtaskTracker(tracker, 20,
+ 'Graph');
+ return tf.graph.build(nodes, buildParams, graphTracker);
+ })
+ .then(function(graph) {
+ this._setOutGraph(graph);
+ if (statsJson) {
+ // If there are associated stats, join them with the graph.
+ tf.time('Joining stats info with graph...', function() {
+ tf.graph.joinStatsInfoWithGraph(graph, statsJson);
+ });
+ }
+ var hierarchyParams = {
+ verifyTemplate: true,
+ groupSeries: true,
+ };
+ var hierarchyTracker = tf.getSubtaskTracker(tracker, 50,
+ 'Namespace hierarchy');
+ return tf.graph.hierarchy.build(graph, hierarchyParams, hierarchyTracker);
+ }.bind(this))
+ .then(function(graphHierarchy) {
+ // Update the properties which notify the parent with the
+ // graph hierarchy and whether the data has live stats or not.
+ this._setHasStats(statsJson != null);
+ this._setOutGraphHierarchy(graphHierarchy);
+ }.bind(this))
+ .catch(function(reason) {
+ tracker.reportError("Graph visualization failed: " + reason);
+ });
+ },
+ _selectedDatasetChanged: function(datasetIndex, datasets) {
+ var dataset = datasets[datasetIndex];
+ this._parseAndConstructHierarchicalGraph(dataset);
+ this._setOutGraphName(dataset.name);
+ },
+ _selectedFileChanged: function(e) {
+ if (!e) {
+ return;
+ }
+ var file = e.target.files[0];
+ if (!file) {
+ return;
+ }
+
+ // Clear out the value of the file chooser. This ensures that if the user
+ // selects the same file, we'll re-read it.
+ e.target.value = '';
+
+ var reader = new FileReader();
+
+ reader.onload = function(e) {
+ this._parseAndConstructHierarchicalGraph(null, e.target.result);
+ }.bind(this);
+
+ reader.readAsText(file);
+ }
+});
+</script>
diff --git a/tensorflow/tensorboard/components/tf-graph/demo/tf-graph-demo.html b/tensorflow/tensorboard/components/tf-graph/demo/tf-graph-demo.html
new file mode 100644
index 0000000000..d6e736d185
--- /dev/null
+++ b/tensorflow/tensorboard/components/tf-graph/demo/tf-graph-demo.html
@@ -0,0 +1,185 @@
+<link rel="import" href="../../../bower_components/polymer/polymer.html">
+<link rel="import" href="../../tf-graph-board/tf-graph-board.html">
+<link rel="import" href="../../tf-graph-loader/tf-graph-loader.html">
+<link rel="import" href="../../tf-graph/tf-graph-controls.html">
+<!-- Element for tf-graph demo page
+
+Example
+
+<tf-graph-demo></tf-graph-demo>
+
+-->
+
+<dom-module id="tf-graph-demo">
+<template>
+<style>
+
+:host /deep/ {
+ font-family: 'Roboto', sans-serif;
+}
+
+.main {
+ position: absolute;
+ right: 0;
+ left: 250px;
+ height: 100%;
+}
+
+.side {
+ position: absolute;
+ left: 0;
+ width: 250px;
+ height: 100%;
+ border: 1px solid black;
+ box-sizing: border-box;
+}
+
+.all {
+ position: relative;
+ width: 100%;
+ height: 100%
+}
+
+</style>
+<div class="all">
+ <div class="side">
+ <tf-graph-controls
+ color-by-params="[[colorByParams]]"
+ has-stats="[[hasStats]]"
+ color-by="{{colorBy}}"
+ datasets="[[datasets]]",
+ selected-dataset="{{selectedDataset}}"
+ selected-file="{{selectedFile}}"
+ ></tf-graph-controls>
+ <tf-graph-loader id="loader"
+ datasets="[[datasets]]",
+ selected-dataset="[[selectedDataset]]"
+ selected-file="[[selectedFile]]"
+ out-graph-hierarchy="{{graphHierarchy}}"
+ out-graph="{{graph}}"
+ out-graph-name="{{graphName}}"
+ has-stats="{{hasStats}}"
+ progress="{{_progress}}"
+ ></tf-graph-loader>
+ </div>
+ <div class="main">
+ <tf-graph-board id="graphboard"
+ graph-hierarchy="[[graphHierarchy]]"
+ graph="[[graph]]"
+ has-stats="[[hasStats]]"
+ graph-name="[[graphName]]"
+ progress="[[_progress]]"
+ color-by="[[colorBy]]"
+ color-by-params="{{colorByParams}}"
+ ></tf-graph-board>
+ </div>
+</div>
+</template>
+</dom-module>
+
+<script>
+(function(){
+
+var datasets = [
+ {
+ name: "Mnist Eval",
+ path: "mnist_eval.pbtxt",
+ },
+ {
+ name: "Mnist Train (with stats)",
+ path: "mnist_train.pbtxt",
+ statsPath: "mnist_train_stats.json"
+ },
+ {
+ name: "Inception Train (huge)",
+ path: "inception_train.pbtxt",
+ },
+ {
+ name: "Inception Train Eval",
+ path: "inception_train_eval.pbtxt",
+ },
+ {
+ name: "Inception Test",
+ path: "inception_test_eval.pbtxt",
+ },
+ {
+ name: "PTB Word LSTM Train",
+ path: "ptb_word_lstm_train.pbtxt",
+ },
+ {
+ name: "PTB Word LSTM Train Eval",
+ path: "ptb_word_lstm_train_eval.pbtxt",
+ },
+ {
+ name: "PTB Word LSTM Test",
+ path: "ptb_word_lstm_test_eval.pbtxt",
+ },
+ {
+ name: "Cifar10 Train",
+ path: "cifar10_train.pbtxt",
+ },
+ {
+ name: "Cifar10 Multi-GPU Train",
+ path: "cifar10_multi_gpu_train.pbtxt",
+ },
+ {
+ name: "Cifar10 Eval",
+ path: "cifar10_eval.pbtxt",
+ },
+ {
+ name: "Fatcat LSTM",
+ path: "fatcat_lstm.pbtxt",
+ },
+ {
+ name: "Legacy Inception Renamed",
+ path: "legacy_inception_renamed.pbtxt",
+ },
+ {
+ name: "Wolfe (Broken)",
+ path: "wolfe1.pbtxt",
+ },
+ {
+ name: "Wolfe (Fixed)",
+ path: "wolfe2.pbtxt",
+ },
+ {
+ name: "AlexNet",
+ path: "alexnet.pbtxt",
+ },
+ {
+ name: "TestError404",
+ path: "nofile"
+ }
+];
+
+Polymer({
+ is: 'tf-graph-demo',
+ properties: {
+ hasStats: Boolean,
+ datasets: {
+ type: Object,
+ value: function() {
+ return this._getDatasets();
+ }
+ },
+ selectedDataset: {
+ type: Number,
+ value: 1
+ },
+ _progress: Object
+ },
+ _getDatasets: function() {
+ return _.map(datasets, function(dataset) {
+ var result = {
+ name: dataset.name,
+ path: this.resolveUrl('tf_model_zoo/' + dataset.path)
+ };
+ if (dataset.statsPath != null) {
+ result.statsPath = this.resolveUrl('tf_model_zoo/' + dataset.statsPath);
+ }
+ return result;
+ }, this);
+ }
+});
+})();
+</script>
diff --git a/tensorflow/tensorboard/components/tf-graph/tf-graph-controls.html b/tensorflow/tensorboard/components/tf-graph/tf-graph-controls.html
new file mode 100644
index 0000000000..4a6901e911
--- /dev/null
+++ b/tensorflow/tensorboard/components/tf-graph/tf-graph-controls.html
@@ -0,0 +1,487 @@
+<link rel="import" href="../../bower_components/polymer/polymer.html">
+<link rel="import" href="../../bower_components/paper-menu/paper-menu.html">
+<link rel="import" href="../../bower_components/paper-dropdown-menu/paper-dropdown-menu.html">
+
+<dom-module id="tf-graph-controls">
+<template>
+<style>
+:host {
+ font-size: 12px;
+ color: gray;
+ --paper-font-subhead: {
+ font-size: 14px;
+ color: gray;
+ };
+ --paper-dropdown-menu-icon: {
+ width: 15px;
+ height: 15px;
+ };
+ --paper-dropdown-menu-button: {
+ padding: 0;
+ };
+ --paper-dropdown-menu-input: {
+ padding: 0;
+ };
+ --paper-item-min-height: 30px;
+}
+
+paper-button[raised].keyboard-focus {
+ font-weight: normal;
+}
+
+.run-dropdown {
+ --paper-input-container: {
+ padding: 9px 0 0 25px;
+ };
+}
+
+.color-dropdown {
+ --paper-input-container: {
+ padding: 9px 0 0 13px;
+ };
+}
+
+table {
+ border-collapse: collapse;
+ border-spacing: 0;
+}
+
+table td {
+ padding: 0;
+ margin: 0;
+}
+
+.allcontrols {
+ padding: 10px;
+}
+
+.legend-holder {
+ position: absolute;
+ bottom: 0;
+ padding-bottom: 10px;
+}
+
+#fit {
+ color: var(--paper-orange-500);
+}
+
+paper-radio-button {
+ padding: 5px;
+}
+svg.icon {
+ width: 60px;
+ height: 18px;
+}
+.icon ellipse {
+ rx: 10px;
+ ry: 5px;
+ stroke: #CCC;
+ stroke-width: 1px;
+ fill: #FFFFFF;
+ cy: 10px;
+}
+.icon rect {
+ height: 14px;
+ width: 35px;
+ rx: 5px;
+ ry: 5px;
+ stroke: #CCC;
+ stroke-width: 2px;
+ fill: #D9D9D9;
+}
+.domainValues {
+ width: 165px;
+}
+.domainStart {
+ float: left;
+}
+.domainEnd {
+ float: right;
+}
+.colorBox {
+ width: 20px;
+}
+
+.image-icon {
+ width: 24px;
+ height: 24px;
+}
+
+.gray {
+ color: #666;
+}
+
+.title {
+ font-size: 16px;
+ margin: 8px 5px 8px 0;
+ color: black;
+}
+.title small {
+ font-weight: normal;
+}
+.deviceList {
+ max-height: 100px;
+ overflow-y: auto;
+}
+
+#file {
+ padding: 8px 0;
+}
+
+.color-text {
+ padding: 0 0 0 55px;
+}
+
+.fit-button-text {
+ text-transform: none;
+ padding: 8px 18px 0 18px;
+ font-size: 14px
+}
+
+.upload-button {
+ width: 165px;
+ height: 25px;
+ text-transform: none;
+ margin-top: 4px;
+}
+
+.fit-button {
+ padding: 2px;
+ width: 30px;
+ height: 30px;
+}
+
+.hidden-input {
+ height: 0px;
+ width: 0px;
+ overflow:hidden;
+}
+
+.allcontrols .control-holder {
+ display: flex;
+ clear: both;
+}
+</style>
+<div class="allcontrols">
+ <div class="control-holder">
+ <paper-icon-button id="fit" icon="aspect-ratio" class="fit-button" on-click="fit" alt="Fit to screen">
+ </paper-icon-button>
+ <paper-button class="fit-button-text" on-click="fit">Fit to screen
+ </paper-button>
+ </div>
+ <div class="control-holder">
+ <div class="title">Run</div>
+ <paper-dropdown-menu no-label-float no-animations noink class="run-dropdown">
+ <paper-menu id="select" class="dropdown-content" selected="{{selectedDataset}}">
+ <template is="dom-repeat" items="[[datasets]]">
+ <paper-item>[[item.name]]</paper-item>
+ </template>
+ </paper-menu>
+ </paper-dropdown-menu>
+ </div>
+ <div class="control-holder">
+ <div class="title">Upload</div>
+ <paper-button raised class="text-button upload-button"
+ on-click="_getFile">Choose File</paper-button>
+ <div class="hidden-input">
+ <input type="file" id="file" name="file" on-change="_updateFileInput" />
+ </div>
+ </div>
+ <div class="control-holder">
+ <div class="title">Color</div>
+ <paper-dropdown-menu no-label-float no-animations noink class="color-dropdown">
+ <paper-menu class="dropdown-content" selected="{{_colorByIndex}}">
+ <paper-item>Structure</paper-item>
+ <paper-item>Device</paper-item>
+ <template is="dom-if" if="[[hasStats]]">
+ <paper-item>Compute time</paper-item>
+ <paper-item>Memory</paper-item>
+ </template>
+ </paper-menu>
+ </paper-dropdown-menu>
+ </div>
+ <div>
+ <template is="dom-if" if="[[_isGradientColoring(colorBy)]]">
+ <svg width="160" height="20" style="margin: 0 5px" class="color-text">
+ <defs>
+ <linearGradient id="linearGradient" x1="0%" y1="0%" x2="100%" y2="0%">
+ <stop class="start" offset="0%"
+ stop-color$="[[_currentGradientParams.startColor]]"/>
+ <stop class="end" offset="100%"
+ stop-color$="[[_currentGradientParams.endColor]]"/>
+ </linearGradient>
+ </defs>
+ <rect x="0" y="0" width="160" height="20" fill="url(#linearGradient)"
+ stroke="black" />
+ </svg>
+ <div class="domainValues color-text">
+ <div class="domainStart">[[_currentGradientParams.minValue]]</div>
+ <div class="domainEnd">[[_currentGradientParams.maxValue]]</div>
+ </div>
+ </template>
+ <template is="dom-if" if="[[_equals(colorBy, 'structure')]]">
+ <div class="color-text">
+ color: same substructure<br/>
+ gray: unique substructure
+ </div>
+ </template>
+ <template is="dom-if" if="[[_equals(colorBy, 'device')]]">
+ <div class="color-text">
+ <div class="deviceList">
+ <table>
+ <template is="dom-repeat" items="[[colorByParams.device]]">
+ <tr>
+ <td style$="[[_getBackgroundColor(item.color)]]">
+ <div class="colorBox"></div>
+ </td>
+ <td>
+ <div>[[item.device]]</div>
+ </td>
+ </tr>
+ </template>
+ </table>
+ </div>
+ <br/>
+ gray: unknown device
+ </div>
+ </template>
+ </div>
+ <div class="legend-holder">
+ <table>
+ <tr>
+ <td><div class="title">Graph</div></td>
+ <td>(* = expandable)</td>
+ </tr>
+ <tr>
+ <td>
+ <svg class="icon">
+ <rect transform="translate(3, 1)" height="14" width="35"
+ rx="5" ry="5"/>
+ </svg>
+ </td>
+ <td>Namespace<span class="gray">*</span></td>
+ </tr>
+ <tr>
+ <td>
+ <svg class="icon" preserveAspectRatio="xMinYMid meet"
+ viewBox="0 0 10 10">
+ <use xlink:href="#op-node-stamp" fill="white" stroke="#ccc" x="9.5"
+ y="6" />
+ </svg>
+ </td>
+ <td>OpNode</td>
+ </tr>
+ <tr>
+ <td>
+ <svg class="icon" height="15px" preserveAspectRatio="xMinYMid meet"
+ viewBox="0 0 12 12">
+ <use xlink:href="#op-series-horizontal-stamp" fill="white"
+ stroke="#ccc" x="2" y="2"/>
+ </svg>
+ </td>
+ <td>Unconnected series<span class="gray">*</span></td>
+ </tr>
+ <tr>
+ <td>
+ <svg class="icon" height="15px"
+ preserveAspectRatio="xMinYMid meet" viewBox="0 0 15 15">
+ <use xlink:href="#op-series-vertical-stamp"
+ fill="white" stroke="#ccc" x="2" y="2"/>
+ </svg>
+ </td>
+ <td>Connected series<span class="gray">*</span></td>
+ </tr>
+ <tr>
+ <td>
+ <svg class="icon">
+ <circle fill="white" stroke="#848484" cx="10" cy="10" r="5"/>
+ </svg>
+ </td>
+ <td>Constant</td>
+ </tr>
+ <tr>
+ <td>
+ <svg class="image-icon">
+ <image id="summary-icon" width="24" height="24" x="0" y="0"
+ class="image-icon"/>
+ </svg>
+ </td>
+ <td>Summary</td>
+ </tr>
+ <tr>
+ <td>
+ <svg class="icon" height="15px"
+ preserveAspectRatio="xMinYMid meet" viewBox="0 0 15 15">
+ <defs>
+ <marker id="arrowhead-legend" fill="#bbb" markerWidth="10"
+ markerHeight="10" refX="9" refY="5" orient="auto">
+ <path d="M 0,0 L 10,5 L 0,10 C 3,7 3,3 0,0"/>
+ </marker>
+ <marker id="ref-arrowhead-legend" fill="#bbb" markerWidth="10"
+ markerHeight="10" refX="1" refY="5" orient="auto">
+ <path d="M 10,0 L 0,5 L 10,10 C 7,7 7,3 10,0"/>
+ </marker>
+ </defs>
+ <path marker-end="url(#arrowhead-legend)" stroke="#bbb"
+ d="M2 9 l 23 0" stroke-linecap="round" />
+ </svg>
+ </td>
+ <td>Dataflow edge</td>
+ </tr>
+ <tr>
+ <td>
+ <svg class="icon" height="15px"
+ preserveAspectRatio="xMinYMid meet" viewBox="0 0 15 15">
+ <path marker-end="url(#arrowhead-legend)" stroke="#bbb"
+ d="M2 9 l 23 0" stroke-linecap="round" stroke-dasharray="2, 2" />
+ </svg>
+ </td>
+ <td>Control dependency edge</td>
+ </tr>
+ <tr>
+ <td>
+ <svg class="icon" height="15px"
+ preserveAspectRatio="xMinYMid meet" viewBox="0 0 15 15">
+ <path marker-start="url(#ref-arrowhead-legend)"
+ marker-end="url(#arrowhead-legend)" stroke="#bbb" d="M2 9 l 23 0"
+ stroke-linecap="round" />
+ </svg>
+ </td>
+ <td>Reference edge</td>
+ </tr>
+ </table>
+ </div>
+ </div>
+</template>
+<script>
+(function() { // Private scope.
+Polymer({
+ is: 'tf-graph-controls',
+ ready: function() {
+ // Set the url to download the summary icon.
+ d3.select(this.$['summary-icon'])
+ .attr('xlink:href', this.resolveUrl('../../lib/svg/summary-icon.svg'));
+ },
+ properties: {
+ // Public API.
+ hasStats: {
+ type: Boolean
+ },
+ colorBy: {
+ type: String,
+ notify: true,
+ computed: '_getColorBy(_colorByIndex)'
+ },
+ colorByParams: Object,
+ datasets: {
+ type: Array,
+ observer: '_datasetsChanged'
+ },
+ selectedDataset: {
+ type: Number,
+ notify: true,
+ value: 0,
+ },
+ selectedFile: {
+ type: Object,
+ notify: true
+ },
+ // Private API.
+ _colorByIndex: {
+ type: Number,
+ value: 0 // Defaults to 'structure'.
+ },
+ _currentGradientParams: {
+ type: Object,
+ computed: '_getCurrentGradientParams(colorByParams, colorBy)'
+ }
+ },
+ _getColorBy: function(colorByIndex) {
+ return ["structure", "device", "compute_time", "memory"][colorByIndex];
+ },
+ _getBackgroundColor: function(color) {
+ return 'background-color:' + color;
+ },
+ fit: function() {
+ document.querySelector('#scene').fit();
+ },
+ _isGradientColoring: function(colorBy) {
+ return ["compute_time", "memory"].indexOf(colorBy) !== -1;
+ },
+ _equals: function(a, b) {
+ return a === b;
+ },
+ _getCurrentGradientParams: function(colorByParams, colorBy) {
+ if (!this._isGradientColoring(colorBy)) {
+ return;
+ }
+ var params = colorByParams[colorBy];
+ var minValue = params.minValue;
+ var maxValue = params.maxValue;
+ if (colorBy === 'memory') {
+ minValue = convertToHumanReadable(minValue, MEMORY_UNITS);
+ maxValue = convertToHumanReadable(maxValue, MEMORY_UNITS);
+ } else if (colorBy === 'compute_time') {
+ minValue = convertToHumanReadable(minValue, TIME_UNITS);
+ maxValue = convertToHumanReadable(maxValue, TIME_UNITS);
+ }
+ return {
+ minValue: minValue,
+ maxValue: maxValue,
+ startColor: params.startColor,
+ endColor: params.endColor
+ };
+ },
+ _updateFileInput: function(e) {
+ this.set('selectedFile', e);
+ },
+ _datasetsChanged: function(newDatasets, oldDatasets) {
+ if (oldDatasets != null || this.selected == null) {
+ // Select the first dataset by default.
+ this.set('selectedDataset', 0);
+ }
+ },
+ _getFile: function() {
+ this.$.file.click();
+ }
+});
+
+// Private methods.
+var MEMORY_UNITS = [
+ // Atomic unit.
+ {symbol: 'B'},
+ // numUnits specifies how many previous units this unit contains.
+ {symbol: 'KB', numUnits: 1024},
+ {symbol: 'MB', numUnits: 1024},
+ {symbol: 'GB', numUnits: 1024},
+ {symbol: 'TB', numUnits: 1024},
+ {symbol: 'PB', numUnits: 1024}
+];
+var TIME_UNITS = [
+ // Atomic unit. Finest granularity in TensorFlow stat collection.
+ {symbol: 'µs'},
+ // numUnits specifies how many previous units this unit contains.
+ {symbol: 'ms', numUnits: 1000},
+ {symbol: 's', numUnits: 1000},
+ {symbol: 'min', numUnits: 60},
+ {symbol: 'hr', numUnits: 60},
+ {symbol: 'days', numUnits: 24}
+];
+
+/**
+ * Returns the human readable version of the unit.
+ * (e.g. 1.35 GB, 23 MB, 34 ms, 6.53 min etc).
+ */
+function convertToHumanReadable(value, units, unitIndex) {
+ unitIndex = unitIndex == null ? 0 : unitIndex;
+ if (unitIndex + 1 < units.length && value >= units[unitIndex + 1].numUnits) {
+ return convertToHumanReadable(value / units[unitIndex + 1].numUnits,
+ units, unitIndex + 1);
+ }
+ // toPrecision() has the tendency to return a number in scientific
+ // notation and (number - 0) brings it back to normal notation.
+ return (value.toPrecision(3) - 0) + ' ' + units[unitIndex].symbol;
+}
+})(); // Closing private scope.
+</script>
+</dom-module>
diff --git a/tensorflow/tensorboard/components/tf-graph/tf-graph-icon.html b/tensorflow/tensorboard/components/tf-graph/tf-graph-icon.html
new file mode 100644
index 0000000000..fafaa3b954
--- /dev/null
+++ b/tensorflow/tensorboard/components/tf-graph/tf-graph-icon.html
@@ -0,0 +1,164 @@
+<link rel="import" href="../../bower_components/polymer/polymer.html">
+
+<dom-module id="tf-graph-icon">
+ <template>
+ <template is="dom-if" if="[[_isType(node, type, 'OP')]]">
+ <template is="dom-if" if="[[_isConst(node, const)]]">
+ <svg height$="[[height]]"
+ preserveAspectRatio="xMinYMid meet" viewBox="0 0 10 10">
+ <circle fill="white" stroke="#848484" cx="5" cy="5" r="3" />
+ </svg>
+ </template>
+ <template is="dom-if" if="[[_isSummary(node, summary)]]">
+ <img height$="[[height]]"
+ src="[[resolveUrl('../../lib/svg/summary-icon.svg')]]" />
+ </template>
+ <template is="dom-if" if="[[_isRegularOp(node, const, summary)]]">
+ <svg height$="[[height]]"
+ preserveAspectRatio="xMinYMid meet" viewBox="0 0 16 8">
+ <use xmlns:xlink="http://www.w3.org/1999/xlink"
+ xlink:href="#op-node-stamp"
+ fill="white"
+ stroke="#ccc"
+ x="8" y="4" />
+ </svg>
+ </template>
+ </template>
+ <template is="dom-if" if="[[_isType(node, type, 'META')]]">
+ <svg height$="[[height]]"
+ preserveAspectRatio="xMinYMid meet" viewBox="0 0 37 16">
+ <rect x="1" y="1"
+ fill="#d9d9d9" stroke="#ccc" stroke-width="2px"
+ height="14" width="35"
+ rx="5" ry="5" />
+ </svg>
+ </template>
+ <template is="dom-if" if="[[_isType(node, type, 'SERIES')]]">
+ <template is="dom-if" if="[[_isVertical(node, vertical)]]">
+ <svg height$="[[height]]"
+ preserveAspectRatio="xMinYMid meet" viewBox="0 0 16 15">
+ <use xmlns:xlink="http://www.w3.org/1999/xlink"
+ xlink:href="#op-series-vertical-stamp"
+ fill="white"
+ stroke="#ccc"
+ x="0" y="2" />
+ </svg>
+ </template>
+ <template is="dom-if" if="[[!_isVertical(node, vertical)]]">
+ <svg height$="[[height]]"
+ preserveAspectRatio="xMinYMid meet" viewBox="0 0 24 10">
+ <use xmlns:xlink="http://www.w3.org/1999/xlink"
+ xlink:href="#op-series-horizontal-stamp"
+ fill="white"
+ stroke="#ccc"
+ x="0" y="1" />
+ </svg>
+ </template>
+ </template>
+ </template>
+
+ <script>
+ (function() {
+ Polymer({
+ is: 'tf-graph-icon',
+
+ properties: {
+ /**
+ * Node to represent with an icon. Optional, but if specified, its
+ * properties override those defined in the type, vertical, const and
+ * summary properties.
+ * @type {tf.graph.Node}
+ */
+ node: {
+ type: Object,
+ value: null
+ },
+
+ /** Type of node to draw. */
+ type: {
+ type: String,
+ value: null
+ },
+
+ /** Direction for series (ignored for other types). */
+ vertical: {
+ type: Boolean,
+ value: false
+ },
+
+ /** Whether the op is Const (ignored for non-ops). */
+ const: {
+ type: Boolean,
+ value: false
+ },
+
+ /** Whether the op is a Summary (ignored for non-ops). */
+ summary: {
+ type: Boolean,
+ value: false
+ },
+
+ /** Height of the SVG element in pixels, used for scaling. */
+ height: {
+ type: Number,
+ value: 20
+ }
+ },
+
+ /**
+ * Test whether the specified node's type, or the literal type string,
+ * match a particular other type.
+ */
+ _isType: function(inputNode, inputType, targetType) {
+ if (inputNode) {
+ return tf.graph.NodeType[inputNode.type] === targetType;
+ }
+ return inputType === targetType;
+ },
+
+ /**
+ * Test whether the specified node should be represented as a vertical
+ * series. Defaults to the value of the vertical property if node is
+ * not specified.
+ */
+ _isVertical: function(inputNode, inputVertical) {
+ if (inputNode) {
+ return inputNode.hasNonControlEdges;
+ }
+ return !!inputVertical;
+ },
+
+ /**
+ * Test whether the specified node is a constant. Defaults to the value
+ * of the const property if node is not specified.
+ */
+ _isConst: function(inputNode, inputConst) {
+ if (inputNode) {
+ return inputNode.op === 'Const';
+ }
+ return !!inputConst;
+ },
+
+ /**
+ * Test whether the specified node is a summary. Defaults to the value
+ * of the summary property if node is not specified.
+ */
+ _isSummary: function(inputNode, inputSummary) {
+ if (inputNode) {
+ return this._isType(inputNode, null, 'OP') &&
+ inputNode.op.substr(-7) === 'Summary';
+ }
+ return !!inputSummary;
+ },
+
+ /**
+ * Test whether the op node is a regular non-summary non-const node.
+ */
+ _isRegularOp: function(inputNode, inputConst, inputSummary) {
+ return !this._isConst(inputNode, inputConst) &&
+ !this._isSummary(inputNode, inputSummary);
+ }
+ });
+ })();
+ </script>
+</dom-module>
diff --git a/tensorflow/tensorboard/components/tf-graph/tf-graph-minimap.html b/tensorflow/tensorboard/components/tf-graph/tf-graph-minimap.html
new file mode 100644
index 0000000000..2b6beeaded
--- /dev/null
+++ b/tensorflow/tensorboard/components/tf-graph/tf-graph-minimap.html
@@ -0,0 +1,69 @@
+<link rel="import" href="../../bower_components/polymer/polymer.html">
+<script src="../tf-graph-common/lib/scene/minimap.js"></script>
+<dom-module id="tf-graph-minimap">
+<template>
+<style>
+:host {
+ background-color:white;
+ transition: opacity .3s linear;
+ pointer-events: auto;
+}
+
+:host.hidden {
+ opacity: 0;
+ pointer-events: none;
+}
+
+canvas {
+ border: 1px solid #999;
+}
+
+rect {
+ fill: white;
+ stroke: #111111;
+ stroke-width: 1px;
+ fill-opacity: 0;
+ filter: url(#minimapDropShadow);
+ cursor: move;
+}
+
+svg {
+ position: absolute;
+}
+</style>
+<svg>
+ <defs>
+ <filter id="minimapDropShadow" x="-20%" y="-20%" width="150%" height="150%">
+ <feOffset result="offOut" in="SourceGraphic" dx="1" dy="1"></feOffset>
+ <feColorMatrix result="matrixOut" in="offOut" type="matrix" values="0.1 0 0 0 0 0 0.1 0 0 0 0 0 0.1 0 0 0 0 0 0.5 0"></feColorMatrix>
+ <feGaussianBlur result="blurOut" in="matrixOut" stdDeviation="2"></feGaussianBlur>
+ <feBlend in="SourceGraphic" in2="blurOut" mode="normal"></feBlend>
+ </filter>
+ </defs>
+ <rect></rect>
+</svg>
+<canvas class="first"></canvas>
+<!-- Additional canvas to use as buffer to avoid flickering between updates -->
+<canvas class="second"></canvas>
+</template>
+<script>
+Polymer({
+ is: 'tf-graph-minimap',
+
+ /**
+ * Initializes the minimap and returns a minimap object to notify when
+ * things update.
+ *
+ * @param svg The main svg element.
+ * @param zoomG The svg group used for panning and zooming the main svg.
+ * @param mainZoom The main zoom behavior.
+ * @param maxWandH The maximum width/height for the minimap.
+ * @param labelPadding Padding in pixels due to the main graph labels.
+ */
+ init: function(svg, zoomG, mainZoom, maxWAndH, labelPadding) {
+ return new tf.scene.Minimap(svg, zoomG, mainZoom, this, maxWAndH,
+ labelPadding);
+ }
+});
+</script>
+</dom-module>
diff --git a/tensorflow/tensorboard/components/tf-graph/tf-graph-params.html b/tensorflow/tensorboard/components/tf-graph/tf-graph-params.html
new file mode 100644
index 0000000000..576816ddd0
--- /dev/null
+++ b/tensorflow/tensorboard/components/tf-graph/tf-graph-params.html
@@ -0,0 +1,113 @@
+<link rel="import" href="../../bower_components/polymer/polymer.html">
+<!--
+Module for adjusting render graph building parameter.
+-->
+<dom-module id="tf-graph-params">
+</dom-module>
+<script>
+ Polymer({
+
+ is: 'tf-graph-params',
+
+ properties: {
+ // PARAMETERS
+
+ enableExtraction: {
+ type: Boolean,
+ value: true
+ },
+
+ /** Maximum in-degree that a node can have without being considered as
+ * high in-degree node. */
+ maxInDegree: {
+ type: Number,
+ value: 4
+ },
+ /** Maximum out-degree that a node can have without being considered as
+ * high out-degree node. */
+ maxOutDegree: {
+ type: Number,
+ value: 4
+ },
+ /** Maximum number of control edges a node can have before they aren't
+ * displayed. */
+ maxControlDegree: {
+ type: Number,
+ value: 4
+ },
+
+ /**
+ * Types patterns for predefined out-extract nodes, which are
+ * sink-like nodes that will be extracted from the main graph.
+ */
+ outExtractTypes: {
+ type: Array,
+ value: function() {
+ return [
+ 'NoOp' // for "sgd", "momentum" group
+ ];
+ }
+ },
+
+ /**
+ * Types patterns for predefined in-extract nodes, which are
+ * source-like nodes that will be extracted from the main graph.
+ */
+ inExtractTypes: {
+ type: Array,
+ value: function() {
+ return ['Variable'];
+ }
+ },
+
+ /**
+ * When removing edges from a high degree node, remove all of its edges if
+ * detachAllEdgesForHighDegree is true. Otherwise remove all in-edges if
+ * the node has high in-degree, or all out-edges if the node has high
+ * out-degree.
+ */
+ detachAllEdgesForHighDegree: {
+ type: Boolean,
+ value: false
+ },
+
+ /**
+ * After extracting high in/out degree nodes and predefined
+ * source-like/sink-like, extract isolated nodes to the side
+ * if this extractIsolatedNodesWithAnnotationsOnOneSide is true.
+ */
+ extractIsolatedNodesWithAnnotationsOnOneSide: {
+ type: Boolean,
+ value: true
+ },
+
+ /**
+ * Whether to draw bridge paths inside of expanded group nodes.
+ */
+ enableBridgegraph: {
+ type: Boolean,
+ value: true
+ },
+
+ /**
+ * Colors for the minimum and maximum values whenever we have a gradient
+ * scale.
+ */
+ minMaxColors: {
+ type: Array,
+ value: function() {
+ return ["#fff5f0", "#fb6a4a"];
+ }
+ },
+
+ /**
+ * Maximum number of annotations to be displayed on a node before an
+ * ellipsis is used.
+ */
+ maxAnnotations: {
+ type: Number,
+ value: 5
+ }
+ }
+ });
+</script>
diff --git a/tensorflow/tensorboard/components/tf-graph/tf-graph-scene.html b/tensorflow/tensorboard/components/tf-graph/tf-graph-scene.html
new file mode 100644
index 0000000000..34c2d3dc3d
--- /dev/null
+++ b/tensorflow/tensorboard/components/tf-graph/tf-graph-scene.html
@@ -0,0 +1,475 @@
+<link rel="import" href="../../bower_components/polymer/polymer.html">
+<link rel="import" href="tf-graph-style.html">
+<link rel="import" href="tf-graph-minimap.html">
+<script src="../tf-graph-common/lib/layout.js"></script>
+<script src="../../bower_components/dagre/dist/dagre.core.js"></script>
+<!--
+ A module that takes graph-hierarchy as input and produce
+ a svg dom using dagre and d3.
+-->
+<dom-module id="tf-graph-scene">
+<template>
+<style include="tf-graph-style">
+ :host {
+ font-size: 20px;
+ }
+ .titleContainer {
+ position: relative;
+ }
+ .title {
+ position: absolute;
+ }
+ .auxTitle {
+ position: absolute;
+ }
+ #minimap {
+ position: absolute;
+ right: 20px;
+ bottom: 20px;
+ }
+</style>
+<div class="titleContainer">
+ <div id="title" class="title">Main Graph</div>
+ <div id="auxTitle" class="auxTitle">Auxiliary nodes</div>
+</div>
+<svg id="svg">
+ <defs>
+ <!-- Arrow head for edge paths. -->
+ <marker id="arrowhead" markerWidth="10" markerHeight="10"
+ refX="9" refY="5" orient="auto">
+ <path d="M 0,0 L 10,5 L 0,10 C 3,7 3,3 0,0"/>
+ </marker>
+ <marker id="ref-arrowhead" markerWidth="10" markerHeight="10"
+ refX="1" refY="5" orient="auto">
+ <path d="M 10,0 L 0,5 L 10,10 C 7,7 7,3 10,0"/>
+ </marker>
+ <!-- Arrow head for annotation edge paths. -->
+ <marker id="annotation-arrowhead" markerWidth="5" markerHeight="5"
+ refX="5" refY="2.5" orient="auto">
+ <path d="M 0,0 L 5,2.5 L 0,5 L 0,0"/>
+ </marker>
+ <marker id="ref-annotation-arrowhead" markerWidth="5" markerHeight="5"
+ refX="0" refY="2.5" orient="auto">
+ <path d="M 5,0 L 0,2.5 L 5,5 L 5,0"/>
+ </marker>
+ <!-- Template for an Op node ellipse. -->
+ <ellipse id="op-node-stamp"
+ rx="7.5" ry="3" stroke="inherit" fill="inherit" />
+ <!-- Template for an Op node annotation ellipse (smaller). -->
+ <ellipse id="op-node-annotation-stamp"
+ rx="5" ry="2" stroke="inherit" fill="inherit" />
+ <!-- Vertically stacked series of Op nodes when unexpanded. -->
+ <g id="op-series-vertical-stamp">
+ <use xlink:href="#op-node-stamp" x="8" y="9" />
+ <use xlink:href="#op-node-stamp" x="8" y="6" />
+ <use xlink:href="#op-node-stamp" x="8" y="3" />
+ </g>
+ <!-- Horizontally stacked series of Op nodes when unexpanded. -->
+ <g id="op-series-horizontal-stamp">
+ <use xlink:href="#op-node-stamp" x="16" y="4" />
+ <use xlink:href="#op-node-stamp" x="12" y="4" />
+ <use xlink:href="#op-node-stamp" x="8" y="4" />
+ </g>
+ <!-- Horizontally stacked series of Op nodes for annotation. -->
+ <g id="op-series-annotation-stamp">
+ <use xlink:href="#op-node-annotation-stamp" x="9" y="2" />
+ <use xlink:href="#op-node-annotation-stamp" x="7" y="2" />
+ <use xlink:href="#op-node-annotation-stamp" x="5" y="2" />
+ </g>
+ <!--
+ Where the linearGradient for each node is stored. Used when coloring
+ by proportions of devices.
+ -->
+ <g id="linearGradients"></g>
+ </defs>
+ <!-- Make a large rectangle that fills the svg space so that
+ zoom events get captured on safari -->
+ <rect fill="white" width="10000" height="10000"></rect>
+ <g id="root"></g>
+</svg>
+<tf-graph-minimap id="minimap"></tf-graph-minimap>
+</template>
+</dom-module>
+<script>
+Polymer({
+ is: 'tf-graph-scene',
+ properties: {
+ graphHierarchy: Object,
+ name: String,
+ colorBy: {
+ type: String,
+ observer: '_colorByChanged'
+ },
+ /** @type {d3_zoom} d3 zoom object */
+ _zoom: Object,
+ highlightedNode: {
+ type: String,
+ observer: '_highlightedNodeChanged'
+ },
+ selectedNode: {
+ type: String,
+ observer: '_selectedNodeChanged'
+ },
+ /** Keeps track of if the graph has been zoomed/panned since loading */
+ _zoomed: {
+ type: Boolean,
+ observer: '_onZoomChanged',
+ value: false
+ },
+ /** Keeps track of the starting coordinates of a graph zoom/pan */
+ _zoomStartCoords: {
+ type: Array,
+ value: null
+ },
+ /** Keeps track of the current coordinates of a graph zoom/pan */
+ _zoomCoords: {
+ type: Array,
+ value: null
+ },
+ /** Maximum distance of a zoom event for it to be interpreted as a click */
+ _maxZoomDistanceForClick: {
+ type: Number,
+ value: 20
+ },
+ /**
+ * @type {d3.scale.ordinal}
+ * Scale mapping from template name to a number between 0 and N-1
+ * where N is the number of different template names.
+ */
+ templateIndex: Object,
+ /**
+ * @type {tf.scene.Minimap}
+ * A minimap object to notify for zoom events.
+ */
+ minimap: Object,
+ /*
+ * Dictionary for easily stylizing nodes when state changes.
+ * _nodeGroupIndex[nodeName] = d3_selection of the nodeGroup
+ */
+ _nodeGroupIndex: {
+ type: Object,
+ value: function() { return {}; }
+ },
+ /*
+ * Dictionary for easily stylizing annotation nodes when state changes.
+ * _annotationGroupIndex[nodeName][hostNodeName] =
+ * d3_selection of the annotationGroup
+ */
+ _annotationGroupIndex: {
+ type: Object,
+ value: function() { return {}; }
+ },
+ /*
+ * Dictionary for easily stylizing edges when state changes.
+ * _edgeGroupIndex[edgeName] = d3_selection of the edgeGroup
+ */
+ _edgeGroupIndex: {
+ type: Object,
+ value: function() { return {}; }
+ },
+ /**
+ * Max font size for metanode label strings.
+ */
+ maxMetanodeLabelLengthFontSize: {
+ type: Number,
+ value: 9
+ },
+ /**
+ * Min font size for metanode label strings.
+ */
+ minMetanodeLabelLengthFontSize: {
+ type: Number,
+ value: 6
+ },
+ /**
+ * Metanode label strings longer than this are given smaller fonts.
+ */
+ maxMetanodeLabelLengthLargeFont: {
+ type: Number,
+ value: 11
+ },
+ /**
+ * Metanode label strings longer than this are truncated with ellipses.
+ */
+ maxMetanodeLabelLength: {
+ type: Number,
+ value: 18
+ },
+ progress: Object
+ },
+ observers: [
+ '_buildAndFit(graphHierarchy)'
+ ],
+ getNode: function(nodeName) {
+ return this.graphHierarchy.getRenderNodeByName(nodeName);
+ },
+ isNodeExpanded: function(node) {
+ return node.expanded;
+ },
+ setNodeExpanded: function(renderNode) {
+ this._build(this.graphHierarchy);
+ },
+ /**
+ * Resets the state of the component. Called whenever the whole graph
+ * (dataset) changes.
+ */
+ _resetState: function() {
+ // Reset the state of the component.
+ this._nodeGroupIndex = {};
+ this._annotationGroupIndex = {};
+ this._edgeGroupIndex = {};
+ this._updateLabels(false);
+ // Remove all svg elements under the 'root' svg group.
+ d3.select(this.$.svg).select('#root').selectAll('*').remove();
+ // And the defs.
+ d3.select(this.$.svg).select('defs #linearGradients')
+ .selectAll('*').remove();
+ },
+ /** Main method for building the scene */
+ _build: function(graphHierarchy) {
+ if (!graphHierarchy) { return; } //handle untruthy input
+ var templateNames = d3.keys(graphHierarchy.hierarchy.templates);
+
+ this.templateIndex = d3.scale.ordinal()
+ .domain(templateNames)
+ .range(d3.range(0, templateNames.length));
+ tf.time('tf-graph-scene (layout):', function() {
+ // layout the scene for this meta / series node
+ tf.graph.layout.scene(graphHierarchy.root, this);
+ }.bind(this));
+
+ tf.time('tf-graph-scene (build scene):', function() {
+ tf.graph.scene.buildGroup(d3.select(this.$.root), graphHierarchy.root, this);
+ tf.graph.scene.addGraphClickListener(this.$.svg, this);
+ }.bind(this));
+ // Update the minimap again when the graph is done animating.
+ setTimeout(function() {
+ this.minimap.update();
+ }.bind(this), tf.graph.layout.PARAMS.animation.duration);
+ },
+ ready: function() {
+ this._zoom = d3.behavior.zoom()
+ .on('zoomend', function() {
+ if (this._zoomStartCoords) {
+ // Calculate the total distance dragged during the zoom event.
+ // If it is sufficiently small, then fire an event indicating
+ // that zooming has ended. Otherwise wait to fire the zoom end
+ // event, so that a mouse click registered as part of this zooming
+ // is ignored (as this mouse click was part of a zooming, and should
+ // not be used to indicate an actual click on the graph).
+ var dragDistance = Math.sqrt(
+ Math.pow(this._zoomStartCoords[0] - this._zoomCoords[0], 2) +
+ Math.pow(this._zoomStartCoords[1] - this._zoomCoords[1], 2));
+ if (dragDistance < this._maxZoomDistanceForClick) {
+ this._fireEnableClick();
+ } else {
+ setTimeout(this._fireEnableClick.bind(this), 50);
+ }
+ }
+ this._zoomStartCoords = null;
+ }.bind(this))
+ .on('zoom', function() {
+ // Store the coordinates of the zoom event
+ this._zoomCoords = d3.event.translate;
+
+ // If this is the first zoom event after a zoom-end, then
+ // store the coordinates as the start coordinates as well,
+ // and fire an event to indicate that zooming has started.
+ // This doesn't use the zoomstart event, as d3 sends this
+ // event on mouse-down, even if there has been no dragging
+ // done to translate the graph around.
+ if (!this._zoomStartCoords) {
+ this._zoomStartCoords = this._zoomCoords.slice();
+ this.fire('disable-click');
+ }
+ this._zoomed = true;
+ d3.select(this.$.root).attr('transform',
+ 'translate(' + d3.event.translate + ')' +
+ 'scale(' + d3.event.scale + ')');
+ // Notify the minimap.
+ this.minimap.zoom(d3.event.translate, d3.event.scale);
+ }.bind(this));
+ d3.select(this.$.svg).call(this._zoom)
+ .on('dblclick.zoom', null);
+ d3.select(window).on('resize', function() {
+ // Notify the minimap that the user's window was resized.
+ // The minimap will figure out the new dimensions of the main svg
+ // and will use the existing translate and scale params.
+ this.minimap.zoom();
+ }.bind(this));
+ // Initialize the minimap.
+ this.minimap = this.$.minimap.init(this.$.svg, this.$.root, this._zoom,
+ tf.graph.layout.PARAMS.minimap.size,
+ tf.graph.layout.PARAMS.subscene.meta.labelHeight);
+ },
+ _buildAndFit: function(graphHierarchy) {
+ this._resetState();
+ this._build(graphHierarchy);
+ // Fit to screen after the graph is done animating.
+ setTimeout(this.fit.bind(this), tf.graph.layout.PARAMS.animation.duration);
+ },
+ _updateLabels: function(showLabels) {
+ var titleStyle = this.getElementsByClassName('title')[0].style;
+ var auxTitleStyle = this.getElementsByClassName('auxTitle')[0].style;
+ var core = this.getElementsByClassName(tf.graph.scene.Class.Scene.CORE)[0];
+ // Only show labels if the graph is fully loaded.
+ if (showLabels && core && this.progress && this.progress.value === 100) {
+ var aux =
+ this.getElementsByClassName(tf.graph.scene.Class.Scene.INEXTRACT)[0] ||
+ this.getElementsByClassName(tf.graph.scene.Class.Scene.OUTEXTRACT)[0];
+ var coreX = core.getCTM().e;
+ var auxX = aux ? aux.getCTM().e : null;
+ titleStyle.display = 'inline';
+ titleStyle.left = coreX + 'px';
+ if (auxX !== null && auxX !== coreX) {
+ auxTitleStyle.display = 'inline';
+ auxTitleStyle.left = auxX + 'px';
+ } else {
+ auxTitleStyle.display = 'none';
+ }
+ } else {
+ titleStyle.display='none';
+ auxTitleStyle.display = 'none';
+ }
+ },
+
+
+
+
+ /**
+ * Called whenever the user changed the 'color by' option in the
+ * UI controls.
+ */
+ _colorByChanged: function() {
+ // We iterate through each svg node and update its state.
+ _.each(this._nodeGroupIndex, function(nodeGroup, nodeName) {
+ this._updateNodeState(nodeName);
+ }, this);
+ // Notify also the minimap.
+ this.minimap.update();
+ },
+ fit: function() {
+ tf.graph.scene.fit(this.$.svg, this.$.root, this._zoom, function() {
+ this._zoomed = false;
+ }.bind(this));
+ },
+ isNodeSelected: function(n) {
+ return n === this.selectedNode;
+ },
+ isNodeHighlighted: function(n) {
+ return n === this.highlightedNode;
+ },
+ addAnnotationGroup: function(a, d, selection) {
+ var an = a.node.name;
+ this._annotationGroupIndex[an] = this._annotationGroupIndex[an] || {};
+ this._annotationGroupIndex[an][d.node.name] = selection;
+ },
+ getAnnotationGroupsIndex: function(a) {
+ return this._annotationGroupIndex[a];
+ },
+ removeAnnotationGroup: function(a, d) {
+ delete this._annotationGroupIndex[a.node.name][d.node.name];
+ },
+ addNodeGroup: function(n, selection) {
+ this._nodeGroupIndex[n] = selection;
+ },
+ getNodeGroup: function(n) {
+ return this._nodeGroupIndex[n];
+ },
+ removeNodeGroup: function(n) {
+ delete this._nodeGroupIndex[n];
+ },
+ addEdgeGroup: function(n, selection) {
+ this._edgeGroupIndex[e] = selection;
+ },
+ getEdgeGroup: function(e) {
+ return this._edgeGroupIndex[e];
+ },
+ /**
+ * Update node and annotation node of the given name.
+ * @param {String} n node name
+ */
+ _updateNodeState: function(n) {
+ var node = this.getNode(n);
+ var nodeGroup = this.getNodeGroup(n);
+
+ if (nodeGroup) {
+ tf.graph.scene.node.stylize(nodeGroup, node, this);
+ }
+
+ var annotationGroupIndex = this.getAnnotationGroupsIndex(n);
+ _.each(annotationGroupIndex, function(aGroup, hostName) {
+ tf.graph.scene.node.stylize(aGroup, node, this,
+ tf.graph.scene.Class.Annotation.NODE);
+ }, this);
+ },
+
+ _selectedNodeChanged: function(selectedNode, oldSelectedNode) {
+ if (selectedNode === oldSelectedNode) {
+ return;
+ }
+
+ if (selectedNode) {
+ this._updateNodeState(selectedNode);
+ }
+ if (oldSelectedNode) {
+ this._updateNodeState(oldSelectedNode);
+ }
+
+ if (!selectedNode) {
+ return;
+ }
+ // Update the minimap to reflect the highlighted (selected) node.
+ this.minimap.update();
+ var node = this.graphHierarchy.hierarchy.node(selectedNode);
+ var nodeParents = [];
+ // Create list of all metanode parents of the selected node.
+ while (node.parentNode != null
+ && node.parentNode.name != tf.graph.ROOT_NAME) {
+ node = node.parentNode;
+ nodeParents.push(node.name);
+ }
+ // Ensure each parent metanode is built and expanded.
+ var topParentNodeToBeExpanded;
+ _.forEachRight(nodeParents, function(parentName) {
+ this.graphHierarchy.buildSubhierarchy(parentName);
+ var renderNode = this.graphHierarchy.getRenderNodeByName(parentName);
+ if (renderNode.node.isGroupNode && !renderNode.expanded) {
+ renderNode.expanded = true;
+ if (!topParentNodeToBeExpanded) {
+ topParentNodeToBeExpanded = renderNode;
+ }
+ }
+ }, this);
+ // If any expansion was needed to display this selected node, then
+ // inform the scene of the top-most expansion.
+ if (topParentNodeToBeExpanded) {
+ this.setNodeExpanded(topParentNodeToBeExpanded);
+ this._zoomed = true;
+ }
+
+ if (tf.graph.scene.panToNode(selectedNode, this.$.svg, this.$.root,
+ this._zoom)) {
+ this._zoomed = true;
+ }
+ },
+ _highlightedNodeChanged: function(highlightedNode, oldHighlightedNode) {
+ if (highlightedNode === oldHighlightedNode) {
+ return;
+ }
+
+ if (highlightedNode) {
+ this._updateNodeState(highlightedNode);
+ }
+ if (oldHighlightedNode) {
+ this._updateNodeState(oldHighlightedNode);
+ }
+ },
+ _onZoomChanged: function() {
+ this._updateLabels(!this._zoomed);
+ },
+ _fireEnableClick: function() {
+ this.fire('enable-click');
+ },
+});
+</script>
diff --git a/tensorflow/tensorboard/components/tf-graph/tf-graph-style.html b/tensorflow/tensorboard/components/tf-graph/tf-graph-style.html
new file mode 100644
index 0000000000..3e6f7f2112
--- /dev/null
+++ b/tensorflow/tensorboard/components/tf-graph/tf-graph-style.html
@@ -0,0 +1,339 @@
+<dom-module id="tf-graph-style">
+<template>
+<style>
+:host {
+ display: flex;
+ width: 100%;
+}
+
+::content #svg {
+ overflow: hidden;
+ flex: 1;
+}
+
+::content #hidden {
+ position: fixed;
+ top: 0px;
+ visibility: hidden;
+}
+
+
+/* --- Node and annotation-node for Metanode --- */
+
+::content .meta > .nodeshape > rect,
+::content .meta > .annotation-node > rect {
+ cursor: pointer;
+ fill: hsl(0, 0%, 70%);
+}
+
+
+::content .node.meta.highlighted > .nodeshape > rect,
+::content .node.meta.highlighted > .annotation-node > rect {
+ stroke-width: 2;
+}
+
+::content .annotation.meta.highlighted > .nodeshape > rect,
+::content .annotation.meta.highlighted > .annotation-node > rect {
+ stroke-width: 1;
+}
+
+::content .meta.selected > .nodeshape > rect,
+::content .meta.selected > .annotation-node > rect {
+ stroke: red;
+ stroke-width: 2;
+}
+
+::content .node.meta.selected.expanded > .nodeshape > rect,
+::content .node.meta.selected.expanded > .annotation-node > rect {
+ stroke: red;
+ stroke-width: 3;
+}
+
+:content .annotation.meta.selected > .nodeshape > rect,
+:content .annotation.meta.selected > .annotation-node > rect {
+ stroke: red;
+ stroke-width: 2;
+}
+
+::content .node.meta.selected.expanded.highlighted > .nodeshape > rect,
+::content .node.meta.selected.expanded.highlighted > .annotation-node > rect {
+ stroke: red;
+ stroke-width: 4;
+}
+
+
+/* --- Op Node --- */
+
+::content .op > .nodeshape > ellipse,
+::content .op > .annotation-node > ellipse {
+ cursor: pointer;
+ fill: #fff;
+ stroke: #ccc;
+}
+
+::content .op.selected > .nodeshape > ellipse,
+::content .op.selected > .annotation-node > ellipse {
+ stroke: red;
+ stroke-width: 2;
+}
+
+::content .op.highlighted > .nodeshape > ellipse,
+::content .op.highlighted > .annotation-node > ellipse {
+ stroke-width: 2;
+}
+
+/* --- Series Node --- */
+
+/* By default, don't show the series background <rect>. */
+::content .series > .nodeshape > rect {
+ fill: hsl(0, 0%, 70%);
+ fill-opacity: 0;
+ stroke-dasharray: 5, 5;
+ stroke-opacity: 0;
+ cursor: pointer;
+}
+
+/* Once expanded, show the series background <rect> and hide the <use>. */
+::content .series.expanded > .nodeshape > rect {
+ fill-opacity: 0.15;
+ stroke: hsl(0, 0%, 70%);
+ stroke-opacity: 1;
+}
+::content .series.expanded > .nodeshape > use {
+ visibility: hidden;
+}
+
+/**
+ * TODO(jimbo): Simplify this by applying a stable class name to all <g>
+ * elements that currently have either the nodeshape or annotation-node classes.
+ */
+::content .series > .nodeshape > use ,
+::content .series > .annotation-node > use {
+ stroke: #ccc;
+}
+::content .series.highlighted > .nodeshape > use ,
+::content .series.highlighted > .annotation-node > use {
+ stroke-width: 2;
+}
+::content .series.selected > .nodeshape > use ,
+::content .series.selected > .annotation-node > use {
+ stroke: red;
+ stroke-width: 2;
+}
+
+::content .series.selected > .nodeshape > rect {
+ stroke: red;
+ stroke-width: 2;
+}
+
+:content .annotation.series.selected > .annotation-node > use {
+ stroke: red;
+ stroke-width: 2;
+}
+
+/* --- Bridge Node --- */
+::content .bridge > .nodeshape > rect {
+ stroke: #f0f;
+ opacity: 0.2;
+ display: none;
+}
+
+/* --- Structural Elements --- */
+::content .edge > path.edgeline.structural {
+ stroke: #f0f;
+ opacity: 0.2;
+ display: none;
+}
+
+/* --- Series Nodes --- */
+
+/* Hide the rect for a series' annotation. */
+::content .series > .annotation-node > rect {
+ display: none;
+}
+
+/* --- Node label --- */
+
+
+::content .node > text.nodelabel {
+ cursor: pointer;
+ fill: #444;
+}
+
+::content .meta.expanded > text.nodelabel {
+ font-size: 9px;
+}
+
+::content .series > text.nodelabel {
+ font-size: 8px;
+}
+
+::content .op > text.nodelabel {
+ font-size: 6px;
+}
+
+::content .bridge > text.nodelabel {
+ display: none;
+}
+
+::content .node.meta.expanded > text.nodelabel{
+ cursor: normal;
+}
+
+::content .annotation.meta.highlighted > text.annotation-label {
+ fill: #50A3F7;
+}
+
+::content .annotation.meta.selected > text.annotation-label {
+ fill: #4285F4;
+}
+
+/* --- Annotation --- */
+
+/* only applied for annotations that are not summary or constant.
+(.summary, .constant gets overriden below) */
+::content .annotation > .annotation-node > * {
+ stroke-width: 0.5;
+ stroke-dasharray: 1, 1;
+}
+
+::content .annotation.summary > .annotation-node > *,
+::content .annotation.constant > .annotation-node > * {
+ stroke-width: 1;
+ stroke-dasharray: none;
+}
+
+::content .annotation > .annotation-edge {
+ fill: none;
+ stroke: #aaa;
+ stroke-width: 0.5;
+ marker-end: url(#annotation-arrowhead);
+}
+
+::content .annotation > .annotation-edge.refline {
+ marker-start: url(#ref-annotation-arrowhead);
+}
+
+::content .annotation > .annotation-control-edge {
+ stroke-dasharray: 1, 1;
+}
+
+::content #annotation-arrowhead {
+ fill: #aaa;
+}
+
+::content #ref-annotation-arrowhead {
+ fill: #aaa;
+}
+
+::content .annotation > .annotation-label {
+ font-size: 5px;
+ cursor: pointer;
+}
+::content .annotation > .annotation-label.annotation-ellipsis {
+ cursor: default;
+}
+
+/* Hide annotations on expanded meta nodes since they're redundant. */
+::content .expanded > .in-annotations,
+::content .expanded > .out-annotations {
+ display: none;
+}
+
+/* --- Annotation: Constant --- */
+
+::content .constant > .annotation-node > ellipse {
+ cursor: pointer;
+ fill: white;
+ stroke: #848484;
+}
+
+::content .constant.selected > .annotation-node > ellipse {
+ fill: white;
+ stroke: red;
+}
+
+::content .constant.highlighted > .annotation-node > ellipse {
+ stroke-width: 1.5;
+}
+
+/* --- Annotation: Summary --- */
+
+::content .summary > .annotation-node > ellipse {
+ cursor: pointer;
+ fill: #DB4437;
+ stroke: #DB4437;
+}
+
+::content .summary.selected > .annotation-node > ellipse {
+ fill: #A52714;
+ stroke: #A52714;
+}
+
+::content .summary.highlighted > .annotation-node > ellipse {
+ stroke-width: 1.5;
+}
+
+/* --- Edge --- */
+
+::content .edge > path.edgeline {
+ fill: none;
+ marker-end: url(#arrowhead);
+ stroke: #bbb;
+ stroke-linecap: round;
+ stroke-width: 0.75;
+}
+
+::content .edge > path.edgeline.refline {
+ marker-start: url(#ref-arrowhead);
+}
+
+::content #arrowhead {
+ fill: #bbb;
+}
+
+::content #ref-arrowhead {
+ fill: #bbb;
+}
+
+::content .edge .control-dep {
+ stroke-dasharray: 2, 2;
+}
+
+/* --- Group node expand/collapse button --- */
+
+/* Hides expand/collapse buttons when a node isn't expanded or highlighted. Using
+ incredibly small opacity so that the bounding box of the <g> parent still takes
+ this container into account even when it isn't visible */
+::content .node:not(.highlighted):not(.expanded) > .nodeshape > .buttoncontainer {
+ opacity: 0.01;
+}
+::content .node.highlighted > .nodeshape > .buttoncontainer {
+ cursor: pointer;
+}
+::content .buttoncircle {
+ fill: #E7811D;
+}
+::content .buttoncircle:hover {
+ fill: #B96717;
+}
+::content .expandbutton,
+::content .collapsebutton {
+ stroke: white;
+}
+/* Do not let the path elements in the button take pointer focus */
+::content .node > .nodeshape > .buttoncontainer > .expandbutton,
+::content .node > .nodeshape > .buttoncontainer > .collapsebutton {
+ pointer-events: none;
+}
+/* Only show the expand button when a node is collapsed and only show the
+ collapse button when a node is expanded. */
+::content .node.expanded > .nodeshape > .buttoncontainer > .expandbutton {
+ display: none;
+}
+::content .node:not(.expanded) > .nodeshape > .buttoncontainer > .collapsebutton {
+ display: none;
+}
+</style>
+</template>
+</dom-module>
diff --git a/tensorflow/tensorboard/components/tf-graph/tf-graph.html b/tensorflow/tensorboard/components/tf-graph/tf-graph.html
new file mode 100644
index 0000000000..905d96e237
--- /dev/null
+++ b/tensorflow/tensorboard/components/tf-graph/tf-graph.html
@@ -0,0 +1,221 @@
+<link rel="import" href="../../bower_components/polymer/polymer.html">
+<link rel="import" href="../../bower_components/iron-flex-layout/iron-flex-layout.html">
+<link rel="import" href="../../bower_components/iron-icons/iron-icons.html">
+<link rel="import" href="../../bower_components/paper-button/paper-button.html">
+<link rel="import" href="../../bower_components/paper-input/paper-input.html">
+<link rel="import" href="../../bower_components/paper-toggle-button/paper-toggle-button.html">
+<link rel="import" href="../tf-graph-common/tf-graph-common.html">
+<link rel="import" href="tf-graph-scene.html">
+<link rel="import" href="tf-graph-params.html">
+<dom-module id="tf-graph">
+<template>
+<style>
+.container {
+ width: 100%;
+ height: 100%;
+}
+
+.vertical {
+ width:100%;
+ height:100%;
+ @apply(--layout-vertical);
+}
+
+.auto {
+ @apply(--layout-flex-auto);
+ @apply(--layout-vertical);
+}
+
+h2 {
+ text-align: center;
+}
+
+paper-button {
+ text-transform: none;
+}
+</style>
+<div class="container">
+ <tf-graph-params id="graphParams"></tf-graph-params>
+ <div class="vertical">
+ <h2>[[title]]</h2>
+ <tf-graph-scene id="scene" class="auto"
+ graph-hierarchy="[[_renderHierarchy]]"
+ highlighted-node="[[_getVisible(highlightedNode)]]"
+ selected-node="[[selectedNode]]"
+ color-by="[[colorBy]]"
+ name="[[graphName]]"
+ progress="[[progress]]"
+ ></tf-graph-scene>
+ </div>
+</div>
+</template>
+</dom-module>
+
+<script>
+Polymer({
+
+ is: 'tf-graph',
+
+ properties: {
+ graphHierarchy: {
+ type: Object,
+ notify: true,
+ observer: '_graphChanged'
+ },
+ title: String,
+ selectedNode: {
+ type: String,
+ notify: true,
+ },
+ highlightedNode: {
+ type: String,
+ notify: true
+ },
+ /** What to color the nodes by (compute time, memory, device etc.) */
+ colorBy: String,
+ colorByParams: {
+ type: Object,
+ notify: true,
+ readOnly: true, // Produces and doesn't consume.
+ },
+ // internal properties
+ _graphParams: {
+ type: Object,
+ value: function() {
+ return this.$.graphParams;
+ }
+ },
+ _renderDepth: {
+ type: Number,
+ value: 1
+ },
+ _renderHierarchy: {
+ type: Object,
+ readOnly: true,
+ notify: true,
+ computed: '_buildRenderHierarchy(graphHierarchy, _graphParams)'
+ },
+ _allowGraphSelect: {
+ type: Boolean,
+ value: true
+ }
+ },
+ _buildRenderHierarchy: function(graphHierarchy, params) {
+ return tf.time('new tf.graph.render.Hierarchy', function() {
+ if (graphHierarchy.root.type !== tf.graph.NodeType.META) {
+ // root must be metanode but sometimes Polymer's dom-if has not
+ // remove tf-graph element yet in <tf-node-info>
+ // and thus mistakenly pass non-metanode to this module.
+ return;
+ }
+ var renderGraph = new tf.graph.render.RenderGraphInformation(
+ graphHierarchy, params);
+ // Producing the 'color by' parameters to be consumed
+ // by the tf-graph-controls panel. It contains information about the
+ // min and max values and their respective colors, as well as list
+ // of devices with their respective colors.
+
+ function getColorParamsFromScale(scale) {
+ return {
+ minValue: scale.domain()[0],
+ maxValue: scale.domain()[1],
+ startColor: scale.range()[0],
+ endColor: scale.range()[1]
+ };
+ }
+
+ this._setColorByParams({
+ compute_time: getColorParamsFromScale(renderGraph.computeTimeScale),
+ memory: getColorParamsFromScale(renderGraph.memoryUsageScale),
+ device: _.map(renderGraph.deviceColorMap.domain(),
+ function(deviceName) {
+ return {
+ device: deviceName,
+ color: renderGraph.deviceColorMap(deviceName)
+ };
+ })
+ });
+ return renderGraph;
+ }.bind(this));
+ },
+ _getVisible: function(name) {
+ if (!name) {
+ return name;
+ }
+ return this._renderHierarchy.getNearestVisibleAncestor(name);
+ },
+ listeners: {
+ 'graph-select': '_graphSelected',
+ 'disable-click': '_disableClick',
+ 'enable-click': '_enableClick',
+ // Nodes
+ 'node-toggle-expand': '_nodeToggleExpand',
+ 'node-select': '_nodeSelected',
+ 'node-highlight': '_nodeHighlighted',
+ 'node-unhighlight': '_nodeUnhighlighted',
+
+ // Annotations
+
+ /* Note: currently highlighting/selecting annotation node has the same
+ * behavior as highlighting/selecting actual node so we point to the same
+ * set of event listeners. However, we might redesign this to be a bit
+ * different.
+ */
+ 'annotation-select': '_nodeSelected',
+ 'annotation-highlight': '_nodeHighlighted',
+ 'annotation-unhighlight': '_nodeUnhighlighted',
+ },
+ _graphChanged: function() {
+ // When a new graph is loaded, fire this event so that there is no
+ // info-card being displayed for the previously-loaded graph.
+ this.fire('graph-select');
+ },
+ _graphSelected: function(event) {
+ // Graph selection is not allowed during an active zoom event, as the
+ // click seen during a zoom/pan is part of the zooming and does not
+ // indicate a user desire to click on a specific section of the graph.
+ if (this._allowGraphSelect) {
+ this.set('selectedNode', null);
+ }
+ // Reset this variable as a bug in d3 zoom behavior can cause zoomend
+ // callback not to be called if a right-click happens during a zoom event.
+ this._allowGraphSelect = true;
+ },
+ _disableClick: function(event) {
+ this._allowGraphSelect = false;
+ },
+ _enableClick: function(event) {
+ this._allowGraphSelect = true;
+ },
+ _nodeSelected: function(event) {
+ if (this._allowGraphSelect) {
+ this.set('selectedNode', event.detail.name);
+ }
+ // Reset this variable as a bug in d3 zoom behavior can cause zoomend
+ // callback not to be called if a right-click happens during a zoom event.
+ this._allowGraphSelect = true;
+ },
+ _nodeHighlighted: function(event) {
+ this.set('highlightedNode', event.detail.name);
+ },
+ _nodeUnhighlighted: function(event) {
+ this.set('highlightedNode', null);
+ },
+ _nodeToggleExpand: function(event) {
+ var nodeName = event.detail.name;
+ var renderNode = this._renderHierarchy.getRenderNodeByName(nodeName);
+ // Op nodes are not expandable.
+ if (renderNode.node.type === tf.graph.NodeType.OP) {
+ return;
+ }
+ this._renderHierarchy.buildSubhierarchy(nodeName);
+ renderNode.expanded = !renderNode.expanded;
+ this.querySelector('#scene').setNodeExpanded(renderNode);
+ // Also select the expanded node.
+ this._nodeSelected(event);
+ },
+ not: function(x) {
+ return !x;
+ }
+});
+</script>
diff --git a/tensorflow/tensorboard/components/tf-histogram-dashboard/tf-histogram-dashboard.html b/tensorflow/tensorboard/components/tf-histogram-dashboard/tf-histogram-dashboard.html
new file mode 100644
index 0000000000..8f8f159964
--- /dev/null
+++ b/tensorflow/tensorboard/components/tf-histogram-dashboard/tf-histogram-dashboard.html
@@ -0,0 +1,210 @@
+<link rel="import" href="../../bower_components/polymer/polymer.html">
+<link rel="import" href="../tf-event-dashboard/tf-data-coordinator.html">
+<link rel="import" href="../tf-event-dashboard/tf-tooltip-coordinator.html">
+<link rel="import" href="../tf-event-dashboard/tf-run-selector.html">
+<link rel="import" href="../tf-event-dashboard/tf-x-type-selector.html">
+<link rel="import" href="../tf-dashboard-common/tf-run-generator.html">
+<link rel="import" href="../tf-event-dashboard/tf-color-scale.html">
+<link rel="import" href="../tf-dashboard-common/tf-url-generator.html">
+<link rel="import" href="../tf-dashboard-common/tf-dashboard-layout.html">
+<link rel="import" href="../tf-dashboard-common/dashboard-style.html">
+<link rel="import" href="../tf-dashboard-common/warning-style.html">
+<link rel="import" href="../tf-categorizer/tf-categorizer.html">
+<link rel="import" href="../tf-event-dashboard/tf-chart.html">
+<link rel="import" href="../tf-collapsable-pane/tf-collapsable-pane.html">
+<link rel="import" href="../../bower_components/iron-collapse/iron-collapse.html">
+<link rel="import" href="../../bower_components/paper-icon-button/paper-icon-button.html">
+<link rel="import" href="../imports/lodash.html">
+
+<!--
+tf-histogram-dashboard is a complete frontend that loads runs from a backend,
+and creates chart panes that display data for those runs.
+
+It provides a categorizer, run selector, and x type selector, by which the user
+can customize how data is organized and displayed.
+
+Each chart has a button that can toggle whether it is "selected"; selectedRuns
+charts are larger.
+
+Organizationally, the #plumbing div contains components that have no concrete
+manifestation and just effect data bindings or data loading. The #sidebar contains
+shared controls like the tf-categorizer, tf-run-selector, and tf-x-type-selector.
+The #center div contains tf-charts embedded inside tf-collapsable-panes.
+-->
+<dom-module id="tf-histogram-dashboard">
+ <template>
+ <div id="plumbing">
+ <tf-url-generator
+ out-runs-url="{{runsUrl}}"
+ out-compressed-histograms-url-generator="{{compressedHistogramsUrlGen}}"
+ id="urlGenerator"
+ ></tf-url-generator>
+
+ <tf-data-coordinator
+ id="dataCoordinator"
+ url-generator="[[compressedHistogramsUrlGen]]"
+ run-to-tag="[[runToCompressedHistograms]]"
+ color-scale="[[colorScale]]"
+ out-data-coordinator="{{dataCoordinator}}"
+ /></tf-data-coordinator>
+
+ <tf-run-generator
+ id="runGenerator"
+ url="[[runsUrl]]"
+ out-run-to-compressed-histograms="{{runToCompressedHistograms}}"
+ /></tf-run-generator>
+
+ <tf-color-scale
+ id="colorScale"
+ runs="[[_runs]]"
+ out-color-scale="{{colorScale}}"
+ out-class-scale="{{classScale}}"
+ ></tf-color-scale>
+
+ <tf-tooltip-coordinator
+ id="tooltipCoordinator"
+ out-tooltip-updater="{{tooltipUpdater}}"
+ out-tooltip-map="{{tooltipMap}}"
+ out-x-value="{{tooltipXValue}}"
+ out-closest-run="{{closestRun}}"
+ ></tf-tooltip-coordinator>
+ </div>
+
+ <tf-dashboard-layout>
+ <div class="sidebar">
+
+ <tf-categorizer
+ id="categorizer"
+ tags="[[_visibleTags]]"
+ categories="{{categories}}"
+ ></tf-categorizer>
+
+ <tf-x-type-selector
+ id="xTypeSelector"
+ out-x-type="{{xType}}"
+ ></tf-x-type-selector>
+
+ <tf-run-selector
+ id="runSelector"
+ runs="[[_runs]]"
+ class-scale="[[classScale]]"
+ out-selected="{{selectedRuns}}"
+ tooltips="[[tooltipMap]]"
+ closest-run="[[closestRun]]"
+ x-value="[[tooltipXValue]]"
+ x-type="[[xType]]"
+ ></tf-run-selector>
+
+ </div>
+
+ <div class="center">
+ <template is="dom-if" if="[[!categories.length]]">
+ <div class="warning">
+ <p>
+ No histogram tags were found.
+ </p>
+ <p>
+ Maybe data hasn't loaded yet, or maybe you need
+ to add some <code>tf.histogram_summary</code> ops to your graph, and
+ serialize them using the <code>tf.training.summary_io.SummaryWriter</code>.
+ </p>
+ </div>
+ </template>
+ <template is="dom-repeat" items="[[categories]]">
+ <tf-collapsable-pane name="[[item.name]]" count="[[_count(item.tags, selectedRuns.*, runToCompressedHistograms.*)]]">
+ <div class="layout horizontal wrap">
+ <template is="dom-repeat" items="[[item.tags]]" as="tag">
+ <template is="dom-repeat" items="[[selectedRuns]]" as="run">
+ <template is="dom-if" if="[[_exists(run, tag, runToCompressedHistograms.*)]]">
+ <div class="card">
+ <span class="card-title">[[tag]]</span>
+ <div class="card-content">
+ <tf-chart
+ tag="[[tag]]"
+ type="compressedHistogram"
+ id="chart"
+ selected-runs="[[_array(run)]]"
+ x-type="[[xType]]"
+ data-coordinator="[[dataCoordinator]]"
+ color-scale="[[colorScale]]"
+ on-keyup="toggleSelected"
+ tabindex="2"
+ tooltip-updater="[[tooltipUpdater]]"
+ ></tf-chart>
+ <paper-icon-button
+ class="expand-button"
+ icon="fullscreen"
+ on-tap="toggleSelected"
+ ></paper-icon-button>
+ </div>
+ </div>
+ </template>
+ </template>
+ </template>
+ </div>
+ </tf-collapsable-pane>
+ </template>
+ </div>
+ </tf-dashboard-layout>
+
+ <style include="dashboard-style"></style>
+ <style include="warning-style"></style>
+ </template>
+
+ <script>
+ Polymer({
+ is: "tf-histogram-dashboard",
+ properties: {
+ _runs: {
+ type: Array,
+ computed: "_getRuns(runToCompressedHistograms)",
+ },
+ _visibleTags: {
+ type: Array,
+ computed: "_getVisibleTags(selectedRuns.*, runToCompressedHistograms.*)"
+ }
+ },
+ _exists: function(run, tag, runToCompressedHistogramsChange) {
+ var runToCompressedHistograms = runToCompressedHistogramsChange.base;
+ return runToCompressedHistograms[run].indexOf(tag) !== -1;
+ },
+ _array: function(x) {
+ return [x];
+ },
+ _count: function(tags, selectedRunsChange, runToCompressedHistogramsChange) {
+ var selectedRuns = selectedRunsChange.base;
+ var runToCompressedHistograms = runToCompressedHistogramsChange.base;
+ var targetTags = {};
+ tags.forEach(function(t) {
+ targetTags[t] = true;
+ });
+ var count = 0;
+ selectedRuns.forEach(function(r) {
+ runToCompressedHistograms[r].forEach(function(t) {
+ if (targetTags[t]) {
+ count++;
+ }
+ });
+ });
+ return count;
+ },
+ _getRuns: function(runToCompressedHistograms) {
+ return _.keys(runToCompressedHistograms);
+ },
+ _getVisibleTags: function(selectedRunsChange, runToCompressedHistogramsChange) {
+ var keys = selectedRunsChange.base;
+ var dict = runToCompressedHistogramsChange.base;
+ return _.union.apply(null, keys.map(function(k) {return dict[k]}));
+ },
+ toggleSelected: function(e) {
+ var currentTarget = Polymer.dom(e.currentTarget);
+ var parentDiv = currentTarget.parentNode.parentNode;
+ parentDiv.classList.toggle("selected");
+ var chart = currentTarget.previousElementSibling;
+ if (chart) {
+ chart.redraw();
+ }
+ },
+ });
+ </script>
+</dom-module>
diff --git a/tensorflow/tensorboard/components/tf-image-dashboard/demo/image-loader-demo.html b/tensorflow/tensorboard/components/tf-image-dashboard/demo/image-loader-demo.html
new file mode 100644
index 0000000000..7aafd247f3
--- /dev/null
+++ b/tensorflow/tensorboard/components/tf-image-dashboard/demo/image-loader-demo.html
@@ -0,0 +1,73 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <script src="../../../bower_components/webcomponentsjs/webcomponents-lite.min.js"></script>
+ <script src="../../../bower_components/d3/d3.js"></script>
+ <script src="../../../bower_components/plottable/plottable.js"></script>
+ <link rel="stylesheet" type="text/css" href="../../../bower_components/plottable/plottable.css">
+ <link rel="import" href="../tf-image-dashboard.html">
+ <title>Event Dashboard Demo Demo</title>
+ </head>
+ <body>
+ <script>
+ TF.Urls.runsUrl = function() {
+ return "data/runs.json"
+ };
+ TF.Urls.scalarsUrl = function(tag, run) {
+ return "data/" + run + "/" + tag + ".json";
+ };
+ </script>
+
+ <dom-module id="x-demo">
+ <style>
+ #loader {
+ width: 300px;
+ height: 300px;
+ }
+ </style>
+ <template>
+ <tf-image-loader
+ id="loader"
+ run="[[run]]"
+ tag="[[tag]]"
+ images-generator="[[imagesGenerator]]"
+ individual-image-generator="[[individualImageGenerator]]"
+ ></tf-image-loader>
+ </template>
+ <script>
+ var imagesUrl = function(tag, run) {
+ return "data/images/" + run + "/" + tag + ".json";
+ };
+ var individualImageUrl = function(query) {
+ return "data/individualImage/" + query + ".png";
+ };
+ Polymer({
+ is: "x-demo",
+ properties: {
+ run: {
+ type: String,
+ value: "train",
+ },
+ tag: {
+ type: String,
+ value: "reconstruction_07%2Fimage%2F2"
+ },
+ imagesGenerator: {
+ type: Function,
+ value: function() {
+ return imagesUrl;
+ },
+ },
+ individualImageGenerator: {
+ type: Function,
+ value: function() {
+ return individualImageUrl;
+ },
+ },
+ },
+ });
+ </script>
+ </dom-module>
+ <x-demo id="demo"></x-demo>
+ </body>
+</html>
diff --git a/tensorflow/tensorboard/components/tf-image-dashboard/demo/index.html b/tensorflow/tensorboard/components/tf-image-dashboard/demo/index.html
new file mode 100644
index 0000000000..4645b4b783
--- /dev/null
+++ b/tensorflow/tensorboard/components/tf-image-dashboard/demo/index.html
@@ -0,0 +1,39 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <script src="../../../bower_components/webcomponentsjs/webcomponents-lite.min.js"></script>
+ <link rel="stylesheet" type="text/css" href="../../../lib/css/global.css">
+ <link rel="import" href="../tf-image-dashboard.html">
+ <title>Image Dashboard Demo</title>
+ <style>
+ #container{
+ width: 500px;
+ height: 800px;
+ border: 2px solid grey;
+ }
+ html,body {
+ height: 100%;
+ }
+ </style>
+ </head>
+ <body>
+ <script>
+ TF.Urls.runsUrl = function() {
+ return "data/runs.json"
+ };
+ TF.Urls.imagesUrl = function(tag, run) {
+ return "data/images/" + run + "/" + tag + ".json";
+ };
+ TF.Urls.individualImageUrl = function(query) {
+ return "data/individualImage/" + query + ".png";
+ }
+ </script>
+
+ <p>The image dashboard is deliberately inside a small container
+ so that it's easy to test that the scroll bars display properly.</p>
+ <p>Looks goofy though.</p>
+ <div id="container">
+ <tf-image-dashboard id="demo"></tf-image-dashboard>
+ </div>
+ </body>
+</html>
diff --git a/tensorflow/tensorboard/components/tf-image-dashboard/tf-image-dashboard.html b/tensorflow/tensorboard/components/tf-image-dashboard/tf-image-dashboard.html
new file mode 100644
index 0000000000..726a420e9f
--- /dev/null
+++ b/tensorflow/tensorboard/components/tf-image-dashboard/tf-image-dashboard.html
@@ -0,0 +1,90 @@
+<link rel="import" href="../../bower_components/polymer/polymer.html">
+<link rel="import" href="../tf-dashboard-common/tf-run-generator.html">
+<link rel="import" href="../tf-dashboard-common/tf-url-generator.html">
+<link rel="import" href="../../bower_components/paper-icon-button/paper-icon-button.html">
+<link rel="import" href="tf-image-grid.html">
+<link rel="import" href="../tf-dashboard-common/warning-style.html">
+
+<!--
+tf-image-dashboard displays a dashboard that loads images from a TensorFlow run.
+
+Right now it has very simple behavior: Creates a url-generator and run-generator
+to talk to the backend, and then passes the runToImages map and urlGenerators into
+a tf-image-grid for display.
+
+Likely we will add more in the future, e.g. a sidebar like in the event
+dashboard that allows filtering and organizing the tags and runs, and a
+mechanism for loading older images rather than always getting the most recent one.
+-->
+<dom-module id="tf-image-dashboard">
+ <template>
+ <div id="plumbing">
+ <tf-url-generator
+ out-runs-url="{{runsUrl}}"
+ out-images-url-generator="{{imagesUrlGen}}"
+ out-individual-image-url-generator="{{individualImageUrlGen}}"
+ id="urlGenerator"
+ ></tf-url-generator>
+
+ <tf-run-generator
+ id="runGenerator"
+ url="[[runsUrl]]"
+ out-run-to-images="{{runToImages}}"
+ /></tf-run-generator>
+ </div>
+
+ <div class="center">
+ <template is="dom-if" if="[[!_hasImages(runToImages.*)]]">
+ <div class="warning">
+ <p>
+ No image tags were found.
+ </p>
+ <p>
+ Maybe data hasn't loaded yet, or maybe you need
+ to add some <code>tf.image_summary</code> ops to your graph, and
+ serialize them using the <code>tf.training.summary_io.SummaryWriter</code>.
+ </p>
+ </div>
+ </template>
+ <tf-image-grid
+ id="imageGrid"
+ run-to-images="[[runToImages]]"
+ images-generator="[[imagesUrlGen]]"
+ individual-image-generator="[[individualImageUrlGen]]"
+ ></tf-image-grid>
+ </div>
+
+ <style>
+ .center {
+ padding-left: 10px;
+ padding-right: 10px;
+ height: 100%;
+ width: 100%;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ }
+ :host {
+ height: 100%;
+ display: block;
+ }
+
+ </style>
+ <style include="warning-style"></style>
+ </template>
+ <script>
+ Polymer({
+ is: "tf-image-dashboard",
+ properties: {
+ runToImages: Object,
+ imagesUrlGen: Function,
+ individualImageUrlGen: Function,
+ },
+ _hasImages: function(runToImagesChange) {
+ return _.values(runToImagesChange.base).some(function(arr) {
+ return arr.length > 0;
+ });
+ },
+ });
+ </script>
+</dom-module>
diff --git a/tensorflow/tensorboard/components/tf-image-dashboard/tf-image-grid.html b/tensorflow/tensorboard/components/tf-image-dashboard/tf-image-grid.html
new file mode 100644
index 0000000000..b7787b98c4
--- /dev/null
+++ b/tensorflow/tensorboard/components/tf-image-dashboard/tf-image-grid.html
@@ -0,0 +1,166 @@
+<link rel="import" href="../../bower_components/polymer/polymer.html">
+<link rel="import" href="../../bower_components/paper-styles/paper-styles.html">
+<link rel="import" href="tf-image-loader.html">
+<link rel="import" href="../imports/lodash.html">
+<link rel="import" href="../tf-dashboard-common/scrollbar-style.html">
+
+<!--
+tf-image-grid creates a grid for examining image data. The columsn correspond
+to runs and the rows correspond to tags. Each cell is an image.
+
+Structurally, it makes extensive use of flexbox for layout: it has a top-level
+columnar flexbox that contains the topRow (run names) and then a
+bottomContainer. The bottomContainer is another columnar flexbox which contains
+repeated image-rows. Each image-row is a row flexbox which contains a tag name
+cell, and then image cells.
+
+In the future, we should improve on the layout by making the tag names and run names have fixed positions
+within the image-grid, so that when you scroll you always have context (e.g. row and column names in a spreadsheet).
+For now, it just scrolls.
+
+The image grid provides internal scroll bars (with styling) so that it can be dropped into
+a dashboard in a predictable fashion, even though the internal image grid may be enormous.
+
+Room for future improvement:
+
+- Make it obvious when an image didn't load due to the image not existing.
+- Find some way to collapse sparse image grids into denser ones (when sparsity
+is high)
+- Fix column/row names
+- Include hook for loading past images (by step/timestamp? or index?)
+
+-->
+<dom-module id="tf-image-grid">
+ <template>
+ <style include="scrollbar-style"></style>
+ <div id="fullContainer" class="container scrollbar">
+ <div id="topRow" class="container">
+ <div class="noshrink" id="paddingCell"></div>
+ <template
+ is="dom-repeat"
+ items="[[_runs]]"
+ as="run"
+ >
+ <div class="run-name-cell noshrink">
+ <span>[[run]]</span>
+ </div>
+ </template>
+ </div>
+ <div id="bottomContainer" class="container">
+ <template
+ is="dom-repeat"
+ items="[[_tags]]"
+ sort
+ as="tag"
+ >
+ <div class="image-row container noshrink">
+ <div class="tag-name-cell noshrink">
+ <span class="tag-name">[[tag]]</span>
+ </div>
+ <template
+ is="dom-repeat"
+ items="[[_runs]]"
+ as="run"
+ >
+ <div class="image-cell noshrink">
+ <template is="dom-if" if="[[_exists(run, tag, runToImages.*)]]">
+ <tf-image-loader
+ id="loader"
+ run="[[run]]"
+ tag="[[tag]]"
+ images-generator="[[imagesGenerator]]"
+ individual-image-generator="[[individualImageGenerator]]"
+ >
+ </tf-image-loader>
+ </template>
+ </div>
+ </template>
+ </div>
+ </template>
+ </div>
+ </div>
+ <style>
+ :host {
+ display: block;
+ height: 100%;
+ }
+ .container {
+ display: flex;
+ flex-wrap: nowrap;
+ }
+ #fullContainer {
+ width: 100%;
+ height: 100%;
+ flex-direction: column;
+ padding-top: 20px;
+ overflow: scroll;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ }
+ #topRow {
+ flex-direction: row;
+ }
+ #bottomContainer {
+ flex-direction: column;
+ height: 100%;
+ width: 100%;
+ }
+ .image-row {
+ flex-direction: row;
+ }
+ .image-cell {
+ width: 300px;
+ height: 300px;
+ border: 1px solid black;
+ }
+ .tag-name-cell {
+ height: 300px;
+ width: 300px;
+ display:flex;
+ flex-direction: column;
+ justify-content: center;
+ }
+ .tag-name {
+ word-wrap: break-word;
+ text-align: center;
+ white-space: nowrap;
+ }
+ .run-name-cell {
+ width: 300px;
+ height: 30px;
+ text-align: center;
+ }
+ .noshrink {
+ flex-shrink: 0;
+ }
+ #paddingCell {
+ width: 300px;
+ height: 30px;
+ }
+ </style>
+ </template>
+ <script>
+ Polymer({
+ is: "tf-image-grid",
+ properties: {
+ runToImages: Object,
+ _tags: {type: Array, computed: "_getTags(runToImages.*)"},
+ _runs: {type: Array, computed: "_getRuns(runToImages.*)"},
+ imagesGenerator: Function,
+ individualImageGenerator: Function,
+ },
+ _getTags: function(runToImages) {
+ return _.chain(runToImages.base).values().flatten().union().value();
+ },
+ _getRuns(runToImages) {
+ var r2i = runToImages.base;
+ return _.keys(r2i).filter(function(x) {return r2i[x].length > 0;});
+ },
+ _exists: function (run, tag, runToImages) {
+ runToImages = runToImages.base;
+ return runToImages[run].indexOf(tag) !== -1;
+ },
+ });
+ </script>
+</dom-module>
diff --git a/tensorflow/tensorboard/components/tf-image-dashboard/tf-image-loader.html b/tensorflow/tensorboard/components/tf-image-dashboard/tf-image-loader.html
new file mode 100644
index 0000000000..e70f189c73
--- /dev/null
+++ b/tensorflow/tensorboard/components/tf-image-dashboard/tf-image-loader.html
@@ -0,0 +1,64 @@
+<link rel="import" href="../../bower_components/polymer/polymer.html">
+<link rel="import" href="../imports/lodash.html">
+
+<!--
+tf-image-loader loads an individual image from the TensorBoard backend.
+
+Right now it always loads the most recent image. We should add support in the
+future for loading older images.
+-->
+<dom-module id="tf-image-loader">
+ <style>
+ :host {
+ display: block;
+ }
+ img {
+ width: 100%;
+ height: 100%;
+ }
+ </style>
+ <template>
+ <iron-ajax
+ id="ajax"
+ auto
+ url="[[metadataUrl]]"
+ handle-as="json"
+ debounce="50"
+ last-response="{{imageMetadata}}"
+ verbose="true"
+ ></iron-ajax>
+ <template is="dom-if" if="[[imageUrl]]">
+ <img src="[[imageUrl]]"></img>
+ </template is="dom-if">
+ </template>
+ <script>
+ Polymer({
+ is: "tf-image-loader",
+ properties: {
+ run: String,
+ tag: String,
+ imagesGenerator: Function,
+ individualImageGenerator: Function,
+ imageMetadata: Array,
+ metadataUrl: {
+ type: String,
+ computed: "apply(imagesGenerator, tag, run)",
+ },
+ imageUrl: {
+ type: String,
+ computed: "getLastImage(imageMetadata, individualImageGenerator)",
+ },
+ },
+ apply: function(imagesGenerator, run, tag) {
+ return imagesGenerator(run, tag);
+ },
+ getLastImage: function(imageMetadata, individualImageGenerator) {
+ if (imageMetadata == null) {
+ return null;
+ }
+ var query = _.last(imageMetadata).query;
+ return individualImageGenerator(query);
+ },
+ });
+ </script>
+</dom-module>
diff --git a/tensorflow/tensorboard/components/tf-multi-checkbox/demo/index.html b/tensorflow/tensorboard/components/tf-multi-checkbox/demo/index.html
new file mode 100644
index 0000000000..e5661b98bc
--- /dev/null
+++ b/tensorflow/tensorboard/components/tf-multi-checkbox/demo/index.html
@@ -0,0 +1,162 @@
+<!DOCTYPE html>
+<html>
+<head>
+<script src="../../../bower_components/webcomponentsjs/webcomponents-lite.min.js"></script>
+<script src="../../../bower_components/d3/d3.js"></script>
+<link rel="import" href="../tf-multi-checkbox.html">
+<link rel="import" href="../../tf-event-dashboard/tf-color-scale.html">
+<link rel="stylesheet" type="text/css" href="../../../lib/css/global.css">
+
+</head>
+<body>
+<script>
+var seed = 1;
+function random() {
+ var x = Math.sin(seed++) * 10000;
+ return x - Math.floor(x);
+}
+</script>
+<style>
+</style>
+
+<dom-module id="mc-demo">
+ <template>
+ <tf-multi-checkbox
+ id="multiCheckbox"
+ names="[[names]]"
+ tooltips="[[_tooltips]]"
+ class-scale="[[classScale]]"
+ highlights="[[highlights]]"
+ ></tf-multi-checkbox>
+ <tf-color-scale
+ id="colorScale"
+ runs="[[names]]"
+ out-class-scale="{{classScale}}"
+ ></tf-color-scale>
+ <style>
+ </style>
+ </template>
+ <script>
+
+ function randomTooltip() {
+ var s = "";
+ while (random() < 0.8) {
+ s += String(10*random())[0];
+ }
+ return s;
+ }
+ Polymer({
+ is: "mc-demo",
+ properties: {
+ names: Array,
+ tooltips: Object,
+ autoGenerateTooltips: {value: true},
+ _tooltips: Object,
+ classScale: Function,
+ highlights: Array,
+ },
+ observers: [
+ 'autogenerate(names, autoGenerateTooltips)',
+ 'randomHighlights(names)'
+ ],
+ autogenerate: function(names, autoGenerateTooltips) {
+ if (autoGenerateTooltips) {
+ var tooltips = {};
+ names.forEach(function(n) {
+ if (random() > 0.5) {
+ tooltips[n] = randomTooltip();
+ }
+ });
+ this._tooltips = tooltips;
+ }
+ },
+ randomHighlights: function(names) {
+ var h = [];
+ names.forEach(function(n) {
+ if (random() > 0.6) {
+ h.push(n);
+ }
+ });
+ this.highlights = h;
+ }
+ });
+ </script>
+</dom-module>
+
+<dom-module id="x-demo">
+<style>
+.small {
+ width: 200px;
+ height: 500px;
+}
+.large {
+ width: 500px;
+ height: 900px;
+}
+html,body {
+ height: 100%;
+}
+mc-demo {
+ padding: 5px;
+ border: 1px solid var(--paper-red-500);
+ display: inline-block;
+}
+</style>
+<template>
+ <div class="demo-block">
+ <mc-demo id="demo1" class="small" names="[[long_names]]"></mc-demo>
+ <mc-demo class="small" names="[[many_names]]"></mc-demo>
+ <mc-demo class="small" names="[[many_long_names]]"></mc-demo>
+ </div>
+
+ <div class="demo-block">
+ <mc-demo class="large" names="[[long_names]]"></mc-demo>
+ <mc-demo class="large" names="[[many_names]]"></mc-demo>
+ <mc-demo class="large" names="[[many_long_names]]"></mc-demo>
+ </div>
+
+</template>
+<script>
+
+function long_names() {
+ return [
+ "foo_bar very long name with spaces",
+ "the quick brown fox jumped over the lazy dog",
+ "supercalifragilisticexpialodcious/bar/foo/zod/longer/longer",
+ ];
+}
+
+function many_names() {
+ var out = [];
+ for (var i=0; i<20; i++) {
+ out.push("foo_bar-" + i);
+ out.push("bar_zod_bing-" + i);
+ out.push("lol-" + i);
+ }
+ return out;
+}
+
+function many_long_names() {
+ var out = [];
+ for (var i=0; i<20; i++) {
+ out.push("foo_bar very very very long some spaces though-" + i);
+ out.push("bar_zod_bing_bas_womp_wub_wub_dub_wub_wub-" + i);
+ out.push("rightly_to_be_great_is_not_to_stir_without_great_argument_but_greatly_to_find_quarrel_in_a_straw_when_honors_at_the_stake-" + i);
+ }
+ return out;
+}
+
+Polymer({
+ is: "x-demo",
+ properties: {
+ long_names: {type: Array, value: long_names},
+ many_names: {type: Array, value: many_names},
+ many_long_names: {type: Array, value: many_long_names},
+},
+});
+</script>
+</dom-module>
+
+<x-demo id="demo"></x-demo>
+</body>
+</html>
diff --git a/tensorflow/tensorboard/components/tf-multi-checkbox/tf-multi-checkbox.html b/tensorflow/tensorboard/components/tf-multi-checkbox/tf-multi-checkbox.html
new file mode 100644
index 0000000000..a5447e8f5e
--- /dev/null
+++ b/tensorflow/tensorboard/components/tf-multi-checkbox/tf-multi-checkbox.html
@@ -0,0 +1,228 @@
+<link rel="import" href="../../bower_components/polymer/polymer.html">
+<link rel="import" href="../../bower_components/paper-checkbox/paper-checkbox.html">
+<link rel="import" href="../imports/lodash.html">
+<link rel="import" href="../tf-dashboard-common/scrollbar-style.html">
+<link rel="import" href="../tf-dashboard-common/run-color-style.html">
+<!--
+tf-multi-checkbox creates a list of checkboxes that can be used to toggle on or off
+a large number of values. Each checkbox displays a name, and may also have an
+assosciated tooltip value. Checkboxes can be highlighted, hidden, and re-ordered.
+
+tf-multi-checkbox assumes that the names may be very long compared to the width
+of the checkbox, and the number of names may also be very large, and works to
+handle these situations gracefully.
+
+API:
+
+Properties in:
+names: The string names to associate with checkboxes.
+tooltips: An object mapping from name to tooltip value.
+tooltipOrderer: A function that is used to compute how to order the names based
+on tooltip values (when available). If tooltip values and a tooltip orderer are
+present, the tooltipOrderer computes a numeric value for each tooltip, tooltips
+with higher values are ordered first, tooltips with equal values are ordered
+lexicogrpahically, and tooltips without a value are placed last. If the
+tooltipOrderer is set to a falsey value (eg null), then the names are not
+re-ordered based on tooltip value.
+classScale: A function that maps from name to class name, which is applied as
+the special property color-class. This is intended to be used to color the names.
+hideMissingTooltips: If set, then when tooltips are present, any names that do
+not have an associate non-empty tooltip value will be hidden.
+
+Properties out:
+outSelected: An array of names that the user has checked.
+If the user does not interact, everything will be checked.
+
+-->
+
+<dom-module id="tf-multi-checkbox">
+ <style include="scrollbar-style"></style>
+ <style include="run-color-style"></style>
+
+ <template>
+ <div id="outer-container" class="scrollbar">
+ <template
+ is="dom-repeat"
+ items="[[names]]"
+ sort="[[_tooltipComparator(tooltips, tooltipOrderer)]]"
+ >
+ <div
+ class="run-row"
+ color-class$="[[_applyColorClass(item, classScale)]]"
+ null-tooltip$="[[_isNullTooltip(item, tooltips)]]"
+ highlight$="[[_isHighlighted(item, highlights.*)]]"
+ >
+ <div class="checkbox-container vertical-align-container">
+ <paper-checkbox
+ class="checkbox vertical-align-center"
+ name="[[item]]"
+ checked$="[[_isChecked(item,outSelected.*)]]"
+ on-change="_checkboxChange"
+ ></paper-checkbox>
+ </div>
+ <div class="item-label-container">
+ <span>[[item]]</span>
+ </div>
+ <div class="tooltip-value-container vertical-align-container">
+ <span class="vertical-align-top">[[_lookupTooltip(item,tooltips)]]</span>
+ </div>
+ </div>
+ </template>
+ </div>
+ <style>
+ :host {
+ display: flex;
+ flex-direction: column;
+ height: 100%;
+ }
+ #outer-container {
+ overflow-y: scroll;
+ overflow-x: hidden;
+ width: 100%;
+ flex-grow: 1;
+ flex-shrink: 1;
+ word-wrap: break-word;
+ }
+ .run-row {
+ padding-top: 5px;
+ padding-bottom: 5px;
+ display: flex;
+ flex-direction: row;
+ font-size: 13px;
+ }
+ .checkbox-container {
+ flex-grow: 0;
+ flex-shrink: 0;
+ }
+ .checkbox {
+ padding-left: 2px;
+ width: 32px;
+ }
+ .item-label-container {
+ flex-grow: 1;
+ flex-shrink: 1;
+ width: 0px; /* hack to get the flex-grow to work properly */
+ }
+ .tooltip-value-container {
+ display: flex;
+ justify-content: center;
+ flex-grow: 0;
+ flex-shrink: 0;
+ text-align:right;
+ padding-left: 2px;
+ }
+ .vertical-align-container {
+ display: flex;
+ justify-content: center;
+ }
+ .vertical-align-container .vertical-align-center {
+ align-self: center;
+ }
+ .vertical-align-container .vertical-align-top {
+ align-self: start;
+ }
+ [null-tooltip] {
+ display: none;
+ }
+ [highlight] {
+ font-weight: bold;
+ }
+ </style>
+ </template>
+
+ <script>
+ Polymer({
+ is: "tf-multi-checkbox",
+ properties: {
+ names: Array,
+ tooltipOrderer: {
+ /* Used to compute how to order the tooltips based on the tooltip value.
+ * By default, it parses the tooltip strings as numbers.
+ * If set to a falsey value, tooltips are always ordered lexicographically.
+ */
+ type: Function,
+ value: function() {
+ return function(x) {return +x;}
+ },
+ },
+ tooltips: Object,
+ highlights: Array,
+ outSelected: {
+ type: Array,
+ notify: true,
+ value: function() {
+ return [];
+ },
+ },
+ hideMissingTooltips: {
+ // If we have tooltips, but some names are missing, do we hide them?
+ type: Boolean,
+ value: true,
+ },
+ classScale: Function, // map from run name to css class
+ },
+ observers: [
+ "_initializeOutSelected(names.*)",
+ ],
+ _lookupTooltip: function(item, tooltips) {
+ return tooltips != null ? tooltips[item] : null;
+ },
+ _isNullTooltip: function(item, tooltips) {
+ if (!this.hideMissingTooltips) {
+ return true;
+ }
+ if (tooltips == null) {
+ return false;
+ }
+ return tooltips[item] == null;
+ },
+ _initializeOutSelected: function(change) {
+ this.outSelected = change.base.slice();
+ },
+ _tooltipComparator: function(tooltips, tooltipOrderer) {
+ return function(a, b) {
+ if (!tooltips || !tooltipOrderer) {
+ // if we're missing tooltips or orderer, do lexicogrpahic sort
+ return a.localeCompare(b);
+ }
+ function getValue(x) {
+ var value = tooltipOrderer(tooltips[x]);
+ return value == null || _.isNaN(value) ? -Infinity : value;
+ }
+ var aValue = getValue(a);
+ var bValue = getValue(b);
+ return aValue === bValue ? a.localeCompare(b) : bValue - aValue;
+ }
+ },
+ _checkboxChange: function(e) {
+ var name = e.srcElement.name;
+ var idx = this.outSelected.indexOf(name);
+ var checked = e.srcElement.checked;
+ if (checked && idx === -1) {
+ this.push("outSelected", name);
+ } else if (!checked && idx !== -1) {
+ this.splice("outSelected", idx, 1);
+ }
+ },
+ _isChecked: function(item, outSelectedChange) {
+ var outSelected = outSelectedChange.base;
+ return outSelected.indexOf(item) !== -1;
+ },
+ _initializeRuns: function(change) {
+ this.outSelected = change.base.slice();
+ },
+ _applyColorClass: function(item, classScale) {
+ // TODO: Update style just on the element that changes
+ // and apply at microtask timing
+ this.debounce("restyle", function (){
+ this.updateStyles();
+ }, 16);
+ return classScale(item);
+ },
+ _isHighlighted: function(item, highlights) {
+ return highlights.base.indexOf(item) !== -1;
+ },
+ });
+ </script>
+
+</dom-module>
diff --git a/tensorflow/tensorboard/components/tf-regex-group/demo/index.html b/tensorflow/tensorboard/components/tf-regex-group/demo/index.html
new file mode 100644
index 0000000000..efef84e0fc
--- /dev/null
+++ b/tensorflow/tensorboard/components/tf-regex-group/demo/index.html
@@ -0,0 +1,32 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <script src="../../../bower_components/webcomponentsjs/webcomponents-lite.min.js"></script>
+ <link rel="import" href="../tf-regex-group.html">
+ </head>
+ <body>
+ <style>
+ .container {
+ width: 255px;
+ padding: 10px;
+ border: 1px solid #3f51b5;
+ border-radius: 5px;
+ }
+ :host {
+ margin: 0px;
+ }
+ </style>
+ <template id="page-template" is="dom-bind">
+ <div class="container">
+ <tf-regex-group regexes="{{regexes}}" id="demo"></tf-regex-group>
+ </div>
+ <p> Regexes:</p>
+ <template is="dom-repeat" items="[[regexes]]">
+ <p>"<span>[[item]]</span>"</p>
+ </template>
+ </template>
+ </body>
+ <script>
+
+ </script>
+</html>
diff --git a/tensorflow/tensorboard/components/tf-regex-group/index.html b/tensorflow/tensorboard/components/tf-regex-group/index.html
new file mode 100644
index 0000000000..0238a8d326
--- /dev/null
+++ b/tensorflow/tensorboard/components/tf-regex-group/index.html
@@ -0,0 +1,18 @@
+<!doctype html>
+<html>
+<head>
+
+ <title>tf-regex-group</title>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+
+ <script src="../../bower_components/webcomponentsjs/webcomponents-lite.min.js"></script>
+ <link rel="import" href="../../bower_components/iron-component-page/iron-component-page.html">
+
+</head>
+<body>
+
+ <iron-component-page></iron-component-page>
+
+</body>
+</html>
diff --git a/tensorflow/tensorboard/components/tf-regex-group/tf-regex-group.html b/tensorflow/tensorboard/components/tf-regex-group/tf-regex-group.html
new file mode 100644
index 0000000000..e9673e85d9
--- /dev/null
+++ b/tensorflow/tensorboard/components/tf-regex-group/tf-regex-group.html
@@ -0,0 +1,151 @@
+<link rel="import" href="../../bower_components/polymer/polymer.html">
+<link rel="import" href="../../bower_components/paper-icon-button/paper-icon-button.html">
+<link rel="import" href="../../bower_components/iron-icons/iron-icons.html">
+<link rel="import" href="../../bower_components/paper-toggle-button/paper-toggle-button.html">
+<link rel="import" href="../../bower_components/paper-input/paper-input.html">
+
+<!--
+`tf-regex-group` provides an input component for a group of regular expressions.
+
+Example:
+ <tf-regex-group regexes="{{regexes}}"></tf-regex-group>
+
+It contains a series of regular expression input fields. From this, it computes
+`regexes', an array in which every element is either a string representing an
+active, valid, nonempty regular expression, or the value `null`
+
+Public Properties:
+`regexes` a readonly, notifying array of strings, where each string is an
+ active, valid, nonempty regex
+
+It maintains an invariant that the final regex should always be an empty string,
+so the user can easily add more regular expressions. It does this by adding
+a new empty regex when the final one is nonempty.
+
+Pressing "enter" moves focus to the next regex (or just blurs if there are no
+more regexes).
+-->
+<dom-module id="tf-regex-group">
+ <template>
+ <div class="regex-list">
+ <template is="dom-repeat" items="{{rawRegexes}}">
+ <div class="regex-line">
+ <paper-input
+ id="text-input"
+ class="regex-input"
+ label="input new regex"
+ no-label-float
+ bind-value="{{item.regex}}"
+ invalid="[[!item.valid]]"
+ on-keyup="moveFocus"
+ ></paper-input>
+ <paper-toggle-button
+ class="active-button"
+ checked="{{item.active}}"
+ disabled="[[!item.valid]]"
+ ></paper-toggle-button>
+
+ <paper-icon-button
+ icon="delete"
+ class="delete-button"
+ aria-label="Delete Regex"
+ tabindex="0"
+ on-tap="deleteRegex"
+ ></paper-icon-button>
+ </div>
+ <style>
+ .regex-input {
+ width: 210px;
+ display: inline-block;
+ padding-left: 8px;
+ padding-right: 5px;
+ }
+
+ .active-button {
+ --paper-toggle-button-checked-button-color: var(--tb-orange-strong);
+ --paper-toggle-button-checked-bar-color: var(--tb-orange-weak);
+ border: none;
+ }
+
+ .delete-button {
+ color: var(--paper-pink-900);
+ width: 24px;
+ height: 24px;
+ }
+ .regex-list {
+ margin-bottom: 10px;
+ }
+ paper-input {
+ --paper-input-container-focus-color: var(--tb-orange-strong);
+ }
+ </style>
+ </template>
+ </div>
+ </template>
+ <script>
+ Polymer({
+ is: "tf-regex-group",
+ properties: {
+ rawRegexes: {
+ type: Array,
+ value: function() {
+ return [{regex: "", active: true, valid: true}];
+ }
+ },
+ regexes: {type: Array, computed: "usableRegexes(rawRegexes.*)", notify: true},
+ },
+ observers: [
+ "addNewRegexIfNeeded(rawRegexes.*)",
+ "checkValidity(rawRegexes.*)",
+ ],
+ checkValidity: function(x) {
+ var match = x.path.match(/rawRegexes\.(\d+)\.regex/);
+ if (match) {
+ var idx = match[1];
+ this.set("rawRegexes." + idx + ".valid", this.isValid(x.value));
+ }
+ },
+ isValid: function(s) {
+ try {
+ new RegExp(s);
+ return true;
+ } catch (e) {
+ return false;
+ }
+ },
+ usableRegexes: function(regexes) {
+ var isValid = this.isValid;
+ return regexes.base.filter(function (r) {
+ // Checking validity here (rather than using the data property)
+ // is necessary because otherwise we might send invalid regexes due
+ // to the fact that this function can call before the observer does
+ return r.regex !== "" && r.active && isValid(r.regex);
+ }).map(function(r) {
+ return r.regex;
+ });
+ },
+ addNewRegexIfNeeded: function() {
+ var last = this.rawRegexes[this.rawRegexes.length - 1];
+ if (last.regex !== "") {
+ this.push("rawRegexes", {regex: "", active: true, valid: true});
+ }
+ },
+ deleteRegex: function(e) {
+ if (this.rawRegexes.length > 1) {
+ this.splice("rawRegexes", e.model.index, 1);
+ }
+ },
+ moveFocus: function(e) {
+ if (e.keyCode === 13) {
+ var idx = e.model.index;
+ var inputs = Polymer.dom(this.root).querySelectorAll(".regex-input");
+ if (idx < this.rawRegexes.length - 1) {
+ inputs[idx+1].$.input.focus();
+ } else {
+ document.activeElement.blur();
+ }
+ }
+ }
+ });
+ </script>
+</dom-module>
diff --git a/tensorflow/tensorboard/dist/index.html b/tensorflow/tensorboard/dist/index.html
new file mode 100644
index 0000000000..e75a87a4f3
--- /dev/null
+++ b/tensorflow/tensorboard/dist/index.html
@@ -0,0 +1,43 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <title>TensorBoard</title>
+ <link rel="stylesheet" type="text/css" href="/lib/css/global.css">
+
+ <script src="external/lodash/lodash.min.js"></script>
+ <script src="external/d3/d3.min.js"></script>
+ <script src="/external/plottable/plottable.min.js"></script>
+ <link rel="stylesheet" type="text/css" href="/external/plottable/plottable.css">
+
+ <script src="external/graphlib/dist/graphlib.core.min.js"></script>
+ <script src="external/dagre/dist/dagre.core.min.js"></script>
+
+ <link rel="import" href="external/polymer/polymer.html">
+ <script src="external/webcomponentsjs/webcomponents-lite.min.js"></script>
+
+ <link rel="import" href="external/iron-ajax/iron-ajax.html">
+ <link rel="import" href="external/iron-collapse/iron-collapse.html">
+ <link rel="import" href="external/iron-list/iron-list.html">
+ <link rel="import" href="external/paper-button/paper-button.html">
+ <link rel="import" href="external/paper-checkbox/paper-checkbox.html">
+ <link rel="import" href="external/paper-dropdown-menu/paper-dropdown-menu.html">
+ <link rel="import" href="external/paper-header-panel/paper-header-panel.html">
+ <link rel="import" href="external/paper-icon-button/paper-icon-button.html">
+ <link rel="import" href="external/paper-input/paper-input.html">
+ <link rel="import" href="external/paper-item/paper-item.html">
+ <link rel="import" href="external/paper-menu/paper-menu.html">
+ <link rel="import" href="external/paper-progress/paper-progress.html">
+ <link rel="import" href="external/paper-radio-button/paper-radio-button.html">
+ <link rel="import" href="external/paper-radio-group/paper-radio-group.html">
+ <link rel="import" href="external/paper-slider/paper-slider.html">
+ <link rel="import" href="external/paper-styles/paper-styles.html">
+ <link rel="import" href="external/paper-toggle-button/paper-toggle-button.html">
+ <link rel="import" href="external/paper-toolbar/paper-toolbar.html">
+
+ <link rel="import" href="dist/tf-tensorboard.html">
+
+ </head>
+ <body>
+ <tf-tensorboard></tf-tensorboard>
+ </body>
+</html>
diff --git a/tensorflow/tensorboard/dist/tf-tensorboard.html b/tensorflow/tensorboard/dist/tf-tensorboard.html
new file mode 100644
index 0000000000..2aa1e46ca3
--- /dev/null
+++ b/tensorflow/tensorboard/dist/tf-tensorboard.html
@@ -0,0 +1,10484 @@
+<html><head><meta charset="UTF-8">
+
+
+
+
+
+<style is="custom-style">
+
+ :root {
+ --tb-orange-weak: #fcb938;
+ --tb-orange-strong: #f3913e;
+ --tb-grey-darker: #e2e2e2;
+ --tb-grey-lighter: #f3f3f3;
+ }
+
+</style>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<script>/// <reference path="../../../typings/tsd.d.ts" />
+var tf;
+(function (tf) {
+ /**
+ * Recommended delay (ms) when running an expensive task asynchronously
+ * that gives enough time for the progress bar to update its UI.
+ */
+ var ASYNC_TASK_DELAY = 20;
+ function time(msg, task) {
+ var start = Date.now();
+ var result = task();
+ /* tslint:disable */
+ console.log(msg, ":", Date.now() - start, "ms");
+ /* tslint:enable */
+ return result;
+ }
+ tf.time = time;
+ /**
+ * Creates a tracker for a subtask given the parent tracker, the total progress
+ * of the subtask and the subtask message. The parent task should pass a
+ * subtracker to its subtasks. The subtask reports its own progress which
+ * becames relative to the main task.
+ */
+ function getSubtaskTracker(parentTracker, impactOnTotalProgress, subtaskMsg) {
+ return {
+ setMessage: function (progressMsg) {
+ // The parent should show a concatenation of its message along with
+ // its subtask tracker message.
+ parentTracker.setMessage(subtaskMsg + " : " + progressMsg);
+ },
+ updateProgress: function (incrementValue) {
+ // Update the parent progress relative to the child progress.
+ // For example, if the sub-task progresses by 30%, and the impact on the
+ // total progress is 50%, then the task progresses by 30% * 50% = 15%.
+ parentTracker
+ .updateProgress(incrementValue * impactOnTotalProgress / 100);
+ },
+ reportError: function (errorMsg) {
+ // The parent should show a concatenation of its message along with
+ // its subtask error message.
+ parentTracker.reportError(subtaskMsg + " : " + errorMsg);
+ }
+ };
+ }
+ tf.getSubtaskTracker = getSubtaskTracker;
+ /**
+ * Runs an expensive task asynchronously and returns a promise of the result.
+ */
+ function runAsyncTask(msg, incProgressValue, task, tracker) {
+ return new Promise(function (resolve, reject) {
+ // Update the progress message to say the current running task.
+ tracker.setMessage(msg);
+ // Run the expensive task with a delay that gives enough time for the
+ // UI to update.
+ setTimeout(function () {
+ try {
+ var result = tf.time(msg, task);
+ // Update the progress value.
+ tracker.updateProgress(incProgressValue);
+ // Return the result to be used by other tasks.
+ resolve(result);
+ }
+ catch (e) {
+ reject(result);
+ }
+ }, ASYNC_TASK_DELAY);
+ });
+ }
+ tf.runAsyncTask = runAsyncTask;
+ /**
+ * Returns a query selector with escaped special characters that are not
+ * allowed in a query selector.
+ */
+ function escapeQuerySelector(querySelector) {
+ return querySelector.replace(/([:.\[\],/\\\(\)])/g, "\\$1");
+ }
+ tf.escapeQuerySelector = escapeQuerySelector;
+})(tf || (tf = {})); // close module tf
+</script>
+<script>/// <reference path="../../../typings/tsd.d.ts" />
+/// <reference path="common.ts" />
+var tf;
+(function (tf) {
+ var graph;
+ (function (graph_1) {
+ /** Delimiter used in node names to denote namespaces. */
+ graph_1.NAMESPACE_DELIM = "/";
+ var FULL_GRAPH_NAME = "fullGraph";
+ graph_1.ROOT_NAME = "__root__";
+ // Separator between the source and the destination name of the edge.
+ graph_1.EDGE_KEY_DELIM = "--";
+ (function (GraphType) {
+ GraphType[GraphType["FULL"] = 0] = "FULL";
+ GraphType[GraphType["EMBEDDED"] = 1] = "EMBEDDED";
+ GraphType[GraphType["META"] = 2] = "META";
+ GraphType[GraphType["SERIES"] = 3] = "SERIES";
+ GraphType[GraphType["CORE"] = 4] = "CORE";
+ GraphType[GraphType["SHADOW"] = 5] = "SHADOW";
+ GraphType[GraphType["BRIDGE"] = 6] = "BRIDGE";
+ GraphType[GraphType["EDGE"] = 7] = "EDGE";
+ })(graph_1.GraphType || (graph_1.GraphType = {}));
+ var GraphType = graph_1.GraphType;
+ ;
+ (function (NodeType) {
+ NodeType[NodeType["META"] = 0] = "META";
+ NodeType[NodeType["OP"] = 1] = "OP";
+ NodeType[NodeType["SERIES"] = 2] = "SERIES";
+ NodeType[NodeType["BRIDGE"] = 3] = "BRIDGE";
+ NodeType[NodeType["ELLIPSIS"] = 4] = "ELLIPSIS";
+ })(graph_1.NodeType || (graph_1.NodeType = {}));
+ var NodeType = graph_1.NodeType;
+ ;
+ /**
+ * A SlimGraph is inspired by graphlib.Graph, but having only the functionality
+ * that we need.
+ */
+ var SlimGraph = (function () {
+ function SlimGraph() {
+ this.nodes = {};
+ this.edges = [];
+ }
+ return SlimGraph;
+ })();
+ graph_1.SlimGraph = SlimGraph;
+ var EllipsisNodeImpl = (function () {
+ /**
+ * Constructs a new ellipsis annotation node.
+ *
+ * @param numNodes The number of additional annotations this node represents.
+ */
+ function EllipsisNodeImpl(numNodes) {
+ this.type = NodeType.ELLIPSIS;
+ this.isGroupNode = false;
+ this.cardinality = 1;
+ this.parentNode = null;
+ this.stats = null;
+ this.setNumMoreNodes(numNodes);
+ }
+ EllipsisNodeImpl.prototype.setNumMoreNodes = function (numNodes) {
+ this.numMoreNodes = numNodes;
+ this.name = "... " + numNodes + " more";
+ };
+ return EllipsisNodeImpl;
+ })();
+ graph_1.EllipsisNodeImpl = EllipsisNodeImpl;
+ ;
+ /**
+ * A label object for nodes in the full graph and leaf nodes in the render
+ * graph.
+ */
+ var OpNodeImpl = (function () {
+ /**
+ * Constructs a new Op node.
+ *
+ * @param rawNode The raw node.
+ * @param normalizedInputs An array of normalized
+ * inputs that denote the incoming edges to the current node. Each input
+ * contains the normalized name of the source node, whether it has a number
+ * part and whether it is a control dependency.
+ */
+ function OpNodeImpl(rawNode, normalizedInputs) {
+ this.op = rawNode.op;
+ this.name = rawNode.name;
+ this.device = rawNode.device;
+ this.attr = rawNode.attr;
+ this.inputs = normalizedInputs;
+ // additional properties
+ this.type = NodeType.OP;
+ this.isGroupNode = false;
+ this.cardinality = 1;
+ this.inEmbeddings = [];
+ this.outEmbeddings = [];
+ this.parentNode = null;
+ }
+ return OpNodeImpl;
+ })();
+ ;
+ function createMetanode(name, opt) {
+ if (opt === void 0) { opt = {}; }
+ return new MetanodeImpl(name, opt);
+ }
+ graph_1.createMetanode = createMetanode;
+ /**
+ * Joins the information from the stats file (memory, compute time) with the graph
+ * information.
+ */
+ function joinStatsInfoWithGraph(graph, statsJson) {
+ _.each(statsJson.devStats, function (stats) {
+ _.each(stats.nodeStats, function (nodeStats) {
+ // Lookup the node in the graph by its original name, e.g. A. If not
+ // found, lookup by the rewritten name A/(A) in case the name is both
+ // a namespace and a node name.
+ var nodeName = nodeStats.nodeName in graph.nodes ?
+ nodeStats.nodeName :
+ nodeStats.nodeName + graph_1.NAMESPACE_DELIM + "(" + nodeStats.nodeName + ")";
+ if (nodeName in graph.nodes) {
+ // Compute the total bytes used.
+ var totalBytes = 0;
+ if (nodeStats.memory) {
+ _.each(nodeStats.memory, function (alloc) {
+ if (alloc.totalBytes) {
+ totalBytes += Number(alloc.totalBytes);
+ }
+ });
+ }
+ var outputSize = null;
+ if (nodeStats.output) {
+ outputSize = _.map(nodeStats.output, function (output) {
+ return _.map(output.tensorDescription.shape.dim, function (dim) { return Number(dim.size); });
+ });
+ }
+ graph.nodes[nodeName].stats = new NodeStats(totalBytes, Number(nodeStats.allEndRelMicros), outputSize);
+ }
+ });
+ });
+ }
+ graph_1.joinStatsInfoWithGraph = joinStatsInfoWithGraph;
+ /**
+ * Execution stats for the node.
+ */
+ var NodeStats = (function () {
+ function NodeStats(totalBytes, totalMicros, outputSize) {
+ this.totalBytes = totalBytes;
+ this.totalMicros = totalMicros;
+ this.outputSize = outputSize;
+ }
+ /**
+ * Combines the specified stats with the current stats.
+ * Modifies the current object. This methos is used to
+ * compute aggregate stats for group nodes.
+ */
+ NodeStats.prototype.combine = function (stats) {
+ if (stats.totalBytes != null) {
+ this.totalBytes += stats.totalBytes;
+ }
+ if (stats.totalMicros != null) {
+ this.totalMicros += stats.totalMicros;
+ }
+ };
+ return NodeStats;
+ })();
+ var MetanodeImpl = (function () {
+ /** A label object for meta-nodes in the graph hierarchy */
+ function MetanodeImpl(name, opt) {
+ if (opt === void 0) { opt = {}; }
+ this.name = name;
+ this.type = NodeType.META;
+ /** number of levels under this group */
+ this.depth = 1;
+ this.isGroupNode = true;
+ /** # of leaf nodes (including embedded ones) */
+ this.cardinality = 0;
+ /** graph contains metanodes, nodes, edges
+ * and metaedges for main items within this metanode
+ */
+ this.metagraph =
+ createGraph(name, GraphType.META, opt);
+ /** bridgegraph must be constructed lazily-see hierarchy.getBridgegraph() */
+ this.bridgegraph = null;
+ /**
+ * A dictionary that count ops type of nodes in this metanode
+ * (op type => count).
+ */
+ this.opHistogram = {};
+ this.deviceHistogram = {};
+ /** unique id for a metanode of similar subgraph */
+ this.templateId = null;
+ /** Metanode which contains this node, if any */
+ this.parentNode = null;
+ this.stats = new NodeStats(0, 0, null);
+ this.hasNonControlEdges = false;
+ }
+ MetanodeImpl.prototype.getFirstChild = function () {
+ return this.metagraph.node(this.metagraph.nodes()[0]);
+ };
+ /**
+ * Returns the op node associated with the metanode.
+ * For example, if the metanode is "sgd", the associated
+ * op node is sgd/(sgd).
+ */
+ MetanodeImpl.prototype.getRootOp = function () {
+ var nameSplit = this.name.split("/");
+ var rootOpName = this.name + "/(" + nameSplit[nameSplit.length - 1] + ")";
+ return this.metagraph.node(rootOpName);
+ };
+ /**
+ * Return an array of the names of all the leaves (non-GroupNodes) inside
+ * this metanode. This performs a breadth-first search of the tree, so
+ * immediate child leaves will appear earlier in the output array than
+ * descendant leaves.
+ */
+ MetanodeImpl.prototype.leaves = function () {
+ var leaves = [];
+ var queue = [this];
+ var metagraph; // Defined here due to a limitation of ES6->5 compilation.
+ while (queue.length) {
+ var node = queue.shift();
+ if (node.isGroupNode) {
+ metagraph = node.metagraph;
+ _.each(metagraph.nodes(), function (name) { return queue.push(metagraph.node(name)); });
+ }
+ else {
+ leaves.push(node.name);
+ }
+ }
+ return leaves;
+ };
+ return MetanodeImpl;
+ })();
+ ;
+ function createMetaedge(v, w) {
+ return new MetaedgeImpl(v, w);
+ }
+ graph_1.createMetaedge = createMetaedge;
+ /**
+ * A label object for edges between metanodes of subgraphs in the render graph.
+ */
+ var MetaedgeImpl = (function () {
+ function MetaedgeImpl(v, w) {
+ this.v = v;
+ this.w = w;
+ this.baseEdgeList = [];
+ this.inbound = null;
+ this.numRegularEdges = 0;
+ this.numControlEdges = 0;
+ this.numRefEdges = 0;
+ }
+ MetaedgeImpl.prototype.addBaseEdge = function (edge) {
+ this.baseEdgeList.push(edge);
+ if (edge.isControlDependency) {
+ this.numControlEdges += 1;
+ }
+ else {
+ this.numRegularEdges += 1;
+ }
+ if (edge.isReferenceEdge) {
+ this.numRefEdges += 1;
+ }
+ };
+ return MetaedgeImpl;
+ })();
+ function createSeriesNode(prefix, suffix, parent, clusterId, name) {
+ return new SeriesNodeImpl(prefix, suffix, parent, clusterId, name);
+ }
+ graph_1.createSeriesNode = createSeriesNode;
+ function getSeriesNodeName(prefix, suffix, parent, startId, endId) {
+ var numRepresentation = (typeof startId !== "undefined" && typeof endId !== "undefined") ?
+ "[" + startId + "-" + endId + "]" : "#";
+ var pattern = prefix + numRepresentation + suffix;
+ return (parent ? parent + "/" : "") + pattern;
+ }
+ graph_1.getSeriesNodeName = getSeriesNodeName;
+ var SeriesNodeImpl = (function () {
+ function SeriesNodeImpl(prefix, suffix, parent, clusterId, name) {
+ this.name = name || getSeriesNodeName(prefix, suffix, parent);
+ this.type = NodeType.SERIES;
+ this.hasLoop = false;
+ this.prefix = prefix;
+ this.suffix = suffix;
+ this.clusterId = clusterId;
+ this.ids = [];
+ this.parent = parent;
+ this.isGroupNode = true;
+ this.cardinality = 0;
+ this.metagraph = createGraph(name, GraphType.SERIES);
+ // bridgegraph must be constructed lazily-see hierarchy.getBridgegraph()
+ this.bridgegraph = null;
+ this.parentNode = null;
+ this.deviceHistogram = {};
+ this.hasNonControlEdges = false;
+ this.stats = new NodeStats(0, 0, null);
+ }
+ return SeriesNodeImpl;
+ })();
+ /**
+ * Normalizes the inputs and extracts associated metadata:
+ * 1) Inputs can contain a colon followed by a number at the end
+ * (e.g. inputName:1) and we remove this from the input name, and take note
+ * that the input was numbered.
+ * 2) Control dependency inputs contain caret at the beginning and we
+ * remove this and annotate the edge as a control dependency.
+ * @param inputs Array of unnormalized names of input nodes.
+ */
+ function normalizeInputs(inputs) {
+ return _.reduce(inputs, function (normalizedInputs, inputName) {
+ var start = inputName[0] === "^";
+ var colon = inputName.lastIndexOf(":");
+ var end = colon !== -1 &&
+ inputName.length - colon > 1 &&
+ !(/\D/).test(inputName.substring(colon + 1)) ?
+ colon : inputName.length;
+ var name = inputName.substring(start ? 1 : 0, end);
+ if (normalizedInputs.length === 0 ||
+ name !== normalizedInputs[normalizedInputs.length - 1].name) {
+ normalizedInputs.push({
+ name: name,
+ hasNumberPart: end !== inputName.length,
+ isControlDependency: start
+ });
+ }
+ return normalizedInputs;
+ }, []);
+ }
+ function build(rawNodes, params, tracker) {
+ /**
+ * A dictionary that maps each in-embedding node name to its host node label
+ * object.
+ */
+ var inEmbedding = {};
+ /**
+ * A dictionary that maps each node name to an array of the node's
+ * out-embedding node label objects.
+ */
+ var outEmbeddings = {};
+ var isInEmbeddedPred = getEmbedPredicate(params.inEmbeddingTypes);
+ var isOutEmbeddedPred = getEmbedPredicate(params.outEmbeddingTypes);
+ var embeddingNodeNames = [];
+ /**
+ * A list of all the non-embedding node names which appear in the processed
+ * list of raw nodes. Here we pre-allocate enough room for all the rawNodes,
+ * even though there will some number of embeddings. The excess array length
+ * is spliced off later.
+ *
+ * Experimentation shows that around 30% of the array will go unused, and
+ * even for very large networks that amounts to less than 10k spaces.
+ */
+ var nodeNames = new Array(rawNodes.length);
+ return tf.runAsyncTask("Normalizing names", 30, function () {
+ var opNodes = new Array(rawNodes.length);
+ var index = 0;
+ _.each(rawNodes, function (rawNode) {
+ var normalizedInputs = normalizeInputs(rawNode.input);
+ var opNode = new OpNodeImpl(rawNode, normalizedInputs);
+ if (isInEmbeddedPred(opNode)) {
+ embeddingNodeNames.push(opNode.name);
+ inEmbedding[opNode.name] = opNode;
+ return;
+ }
+ if (isOutEmbeddedPred(opNode)) {
+ embeddingNodeNames.push(opNode.name);
+ _.each(opNode.inputs, function (input) {
+ var inputName = input.name;
+ outEmbeddings[inputName] = outEmbeddings[inputName] || [];
+ outEmbeddings[inputName].push(opNode);
+ });
+ return;
+ }
+ // The node is not an embedding, so add it to the names and nodes lists.
+ opNodes[index] = opNode;
+ nodeNames[index] = opNode.name;
+ index++;
+ });
+ opNodes.splice(index);
+ nodeNames.splice(index);
+ return opNodes;
+ }, tracker)
+ .then(function (opNodes) {
+ // Create the graph data structure from the graphlib library.
+ return tf.runAsyncTask("Building the data structure", 70, function () {
+ var normalizedNameDict = mapStrictHierarchy(nodeNames, embeddingNodeNames);
+ var graph = new SlimGraph;
+ // Add the nodes to the graph.
+ _.each(opNodes, function (opNode) {
+ var normalizedName = normalizedNameDict[opNode.name] || opNode.name;
+ graph.nodes[normalizedName] = opNode;
+ // Check if the node has out-embeddings. If yes, add them to to the
+ // node.
+ if (opNode.name in outEmbeddings) {
+ opNode.outEmbeddings = outEmbeddings[opNode.name];
+ // Normalize the names of the out-embeddings.
+ _.each(opNode.outEmbeddings, function (node) {
+ node.name = normalizedNameDict[node.name] || node.name;
+ });
+ }
+ // Update the name of the node.
+ opNode.name = normalizedName;
+ });
+ // Visit each node's inputs to add the edges to the graph. If the input
+ // is an in-embedding, then add it to the node's in-embeddings instead.
+ _.each(opNodes, function (opNode) {
+ _.each(opNode.inputs, function (input, i) {
+ var inputName = input.name;
+ if (inputName in inEmbedding) {
+ opNode.inEmbeddings.push(inEmbedding[inputName]);
+ }
+ else {
+ graph.edges.push({
+ v: normalizedNameDict[inputName] || inputName,
+ w: opNode.name,
+ isControlDependency: input.isControlDependency,
+ // Check if this op type and input number corresponds to a
+ // reference edge using the refEdges dictionary in the params.
+ isReferenceEdge: (params.refEdges[opNode.op + " " + i] === true)
+ });
+ }
+ });
+ });
+ // Normalize the names of in-embeddings.
+ _.each(inEmbedding, function (node, name) {
+ node.name = normalizedNameDict[node.name] || node.name;
+ });
+ return graph;
+ }, tracker);
+ })
+ .catch(function (reason) {
+ throw new Error("Failure creating graph");
+ });
+ }
+ graph_1.build = build;
+ ;
+ /**
+ * Create a new graphlib.Graph() instance with default parameters
+ */
+ function createGraph(name, type, opt) {
+ if (opt === void 0) { opt = {}; }
+ var graph = new graphlib.Graph(opt);
+ graph.setGraph({
+ name: name,
+ rankdir: "BT",
+ type: type
+ });
+ return graph;
+ }
+ graph_1.createGraph = createGraph;
+ ;
+ /**
+ * Create a predicate for checking whether a node should be embedded based on
+ * the specified types.
+ */
+ function getEmbedPredicate(types) {
+ return function (node) {
+ // check types
+ for (var i = 0; i < types.length; i++) {
+ var regExp = new RegExp(types[i]);
+ if (node.op.match(regExp)) {
+ return true;
+ }
+ }
+ return false;
+ };
+ }
+ ;
+ /**
+ * Returns a strict node name (name => name/(name)) to avoid conflicts
+ * where the node name is also a namespace.
+ */
+ function getStrictName(name) {
+ var parts = name.split(graph_1.NAMESPACE_DELIM);
+ return name + graph_1.NAMESPACE_DELIM + "(" + parts[parts.length - 1] + ")";
+ }
+ /**
+ * For each op node (embedding or non-embedding), rename it if there is a
+ * non-embedding node under its namespace. For example, assume node name "A".
+ * If there is a non-embedding node under its namespace (e.g. "A/B"), "A" will
+ * be renamed to "A/(A)". Then the namespace "A" will contain 2 nodes: "(A)"
+ * and "B". If all the nodes under "A" are embedding nodes (e.g. constant and
+ * summary), keep "A" as an Op node and don't create a namespace.
+ *
+ * @param nodeNames An array of regular (non-embedding) node names.
+ * @param embeddingNodeNames An array of embedding node names.
+ * @return Dictionary object mapping names that need to be renamed to
+ * new names.
+ */
+ function mapStrictHierarchy(nodeNames, embeddingNodeNames) {
+ /** Dictionary that maps the old new to the new name */
+ var newNameDictionary = {};
+ /** Set used to store all namespaces. */
+ var namespaceSet = {};
+ // sort the nodes to make prefix check faster
+ nodeNames.sort();
+ // look for nodes with a prefix a,a/b -> a/(a),a/b
+ for (var i = 0; i < nodeNames.length - 1; ++i) {
+ var a = nodeNames[i];
+ // Get all the parent namespaces of the current node
+ // and add them in the namespace set.
+ _.each(getHierarchicalPath(a).slice(0, -1), function (ns) {
+ namespaceSet[ns] = true;
+ });
+ var b = nodeNames[i + 1];
+ if (_.startsWith(b, a + graph_1.NAMESPACE_DELIM)) {
+ newNameDictionary[a] = getStrictName(a);
+ }
+ }
+ // Go through all the embedding node names and rename them in case they
+ // collide with namespaces.
+ _.each(embeddingNodeNames, function (embeddingName) {
+ if (embeddingName in namespaceSet) {
+ // Rename to follow strict hierarchy.
+ newNameDictionary[embeddingName] = getStrictName(embeddingName);
+ }
+ });
+ return newNameDictionary;
+ }
+ ;
+ /**
+ * Returns a list of the degrees of each node in the graph.
+ */
+ function degreeSequence(graph) {
+ var degrees = graph.nodes().map(function (name) {
+ return graph.neighbors(name).length;
+ });
+ degrees.sort();
+ return degrees;
+ }
+ ;
+ /**
+ * Returns if the degree sequence of the two graphs is the same.
+ */
+ function hasSimilarDegreeSequence(graph1, graph2) {
+ var dg1 = degreeSequence(graph1);
+ var dg2 = degreeSequence(graph2);
+ for (var i = 0; i < dg1.length; i++) {
+ if (dg1[i] !== dg2[i]) {
+ return false;
+ }
+ }
+ return true;
+ }
+ graph_1.hasSimilarDegreeSequence = hasSimilarDegreeSequence;
+ ;
+ /**
+ * Returns the hierarchical path of the current node, based on the node's name.
+ * For example, if the name is 'a/b/c', the returned path is ['a', 'a/b', 'a/b/c'].
+ */
+ function getHierarchicalPath(name, seriesNames) {
+ var path = [];
+ var i = name.indexOf(graph_1.NAMESPACE_DELIM);
+ // Push all parent portions of the path.
+ while (i >= 0) {
+ path.push(name.substring(0, i));
+ i = name.indexOf(graph_1.NAMESPACE_DELIM, i + 1);
+ }
+ // If the node's path is under a series, then add the series node name to the
+ // hierarchical path as the parent of the leaf.
+ if (seriesNames) {
+ var seriesName = seriesNames[name];
+ if (seriesName) {
+ path.push(seriesName);
+ }
+ }
+ // Push the leaf of the path.
+ path.push(name);
+ return path;
+ }
+ graph_1.getHierarchicalPath = getHierarchicalPath;
+ ;
+ })(graph = tf.graph || (tf.graph = {}));
+})(tf || (tf = {})); // close module tf.graph
+</script>
+<script>/// <reference path="../../../typings/tsd.d.ts" />
+/// <reference path="common.ts" />
+var tf;
+(function (tf) {
+ var graph;
+ (function (graph) {
+ var parser;
+ (function (parser) {
+ /**
+ * Parses a native js value, which can be either a string, boolean or number.
+ *
+ * @param value The value to be parsed.
+ */
+ function parseValue(value) {
+ if (value === "true") {
+ return true;
+ }
+ if (value === "false") {
+ return false;
+ }
+ var firstChar = value[0];
+ if (firstChar === "\"") {
+ return value.substring(1, value.length - 1);
+ }
+ var num = parseFloat(value);
+ return isNaN(num) ? value : num;
+ }
+ /**
+ * Fetches a text file and returns a promise of the result.
+ */
+ function readPbTxt(filepath) {
+ return new Promise(function (resolve, reject) {
+ d3.text(filepath, function (error, text) {
+ if (error) {
+ reject(error);
+ return;
+ }
+ resolve(text);
+ });
+ });
+ }
+ parser.readPbTxt = readPbTxt;
+ /**
+ * Fetches and parses a json file and returns a promise of the result.
+ */
+ function readJson(filepath) {
+ return new Promise(function (resolve, reject) {
+ d3.json(filepath, function (error, text) {
+ if (error) {
+ reject(error);
+ return;
+ }
+ resolve(text);
+ });
+ });
+ }
+ parser.readJson = readJson;
+ /**
+ * Reads the graph and stats file (if available), parses them and returns a
+ * promise of the result.
+ */
+ function readAndParseData(dataset, pbTxtContent, tracker) {
+ var graphPbTxt;
+ var statsJson;
+ return tf.runAsyncTask("Reading graph.pbtxt", 20, function () {
+ return pbTxtContent || readPbTxt(dataset.path);
+ }, tracker)
+ .then(function (text) {
+ graphPbTxt = text;
+ return tf.runAsyncTask("Reading stats.pbtxt", 20, function () {
+ return (dataset != null && dataset.statsPath != null) ?
+ readJson(dataset.statsPath) : null;
+ }, tracker);
+ })
+ .then(function (json) {
+ statsJson = json;
+ return tf.runAsyncTask("Parsing graph.pbtxt", 60, function () {
+ return parsePbtxt(graphPbTxt);
+ }, tracker);
+ })
+ .then(function (nodes) {
+ return {
+ nodes: nodes,
+ statsJson: statsJson
+ };
+ })
+ .catch(function (reason) {
+ throw new Error("Failure parsing graph definition");
+ });
+ }
+ parser.readAndParseData = readAndParseData;
+ /**
+ * Parses a proto txt file into a javascript object.
+ *
+ * @param input The string contents of the proto txt file.
+ * @return The parsed object.
+ */
+ function parsePbtxt(input) {
+ var output = { node: [] };
+ var stack = [];
+ var path = [];
+ var current = output;
+ function splitNameAndValueInAttribute(line) {
+ var colonIndex = line.indexOf(":");
+ var name = line.substring(0, colonIndex).trim();
+ var value = parseValue(line.substring(colonIndex + 2).trim());
+ return {
+ name: name,
+ value: value
+ };
+ }
+ /**
+ * Since proto-txt doesn't explicitly say whether an attribute is repeated
+ * (an array) or not, we keep a hard-coded list of attributes that are known
+ * to be repeated. This list is used in parsing time to convert repeated
+ * attributes into arrays even when the attribute only shows up once in the
+ * object.
+ */
+ var ARRAY_ATTRIBUTES = {
+ "node": true,
+ "node.input": true,
+ "node.attr": true,
+ "node.attr.value.list.type": true,
+ "node.attr.value.shape.dim": true,
+ "node.attr.value.tensor.string_val": true,
+ "node.attr.value.tensor.tensor_shape.dim": true
+ };
+ /**
+ * Adds a value, given the attribute name and the host object. If the
+ * attribute already exists, but is not an array, it will convert it to an
+ * array of values.
+ *
+ * @param obj The host object that holds the attribute.
+ * @param name The attribute name (key).
+ * @param value The attribute value.
+ * @param path A path that identifies the attribute. Used to check if
+ * an attribute is an array or not.
+ */
+ function addAttribute(obj, name, value, path) {
+ // We treat "node" specially since it is done so often.
+ var existingValue = obj[name];
+ if (existingValue == null) {
+ obj[name] = path.join(".") in ARRAY_ATTRIBUTES ? [value] : value;
+ }
+ else if (Array.isArray(existingValue)) {
+ existingValue.push(value);
+ }
+ else {
+ obj[name] = [existingValue, value];
+ }
+ }
+ // Run through the file a line at a time.
+ var startPos = 0;
+ while (startPos < input.length) {
+ var endPos = input.indexOf("\n", startPos);
+ if (endPos === -1) {
+ endPos = input.length;
+ }
+ var line = input.substring(startPos, endPos);
+ startPos = endPos + 1;
+ if (!line) {
+ continue;
+ }
+ switch (line[line.length - 1]) {
+ case "{":
+ var name_1 = line.substring(0, line.length - 2).trim();
+ var newValue = {};
+ stack.push(current);
+ path.push(name_1);
+ addAttribute(current, name_1, newValue, path);
+ current = newValue;
+ break;
+ case "}":
+ current = stack.pop();
+ path.pop();
+ break;
+ default:
+ var x = splitNameAndValueInAttribute(line);
+ addAttribute(current, x.name, x.value, path.concat(x.name));
+ break;
+ }
+ }
+ return output["node"];
+ }
+ parser.parsePbtxt = parsePbtxt;
+ })(parser = graph.parser || (graph.parser = {}));
+ })(graph = tf.graph || (tf.graph = {}));
+})(tf || (tf = {})); // Close module tf.graph.parser.
+</script>
+<script>/// <reference path="graph.ts" />
+/// <reference path="template.ts" />
+/**
+ * Package for the Graph Hierarchy for TensorFlow graph.
+ */
+var tf;
+(function (tf) {
+ var graph;
+ (function (graph_1) {
+ var hierarchy;
+ (function (hierarchy_1) {
+ var LOG_PREFIX_MSG = "Graph hierarchy: ";
+ /**
+ * Class for the Graph Hierarchy for TensorFlow graph.
+ */
+ var HierarchyImpl = (function () {
+ function HierarchyImpl() {
+ this.root = graph_1.createMetanode(graph_1.ROOT_NAME, { compound: true });
+ this.templates = null;
+ this.devices = null;
+ /**
+ * @type {Object} Dictionary object that maps node name to the node
+ * (could be op-node, metanode, or series-node)
+ */
+ this.index = {};
+ this.index[graph_1.ROOT_NAME] = this.root;
+ this.orderings = {};
+ }
+ HierarchyImpl.prototype.getNodeMap = function () {
+ return this.index;
+ };
+ HierarchyImpl.prototype.node = function (name) {
+ return this.index[name];
+ };
+ HierarchyImpl.prototype.setNode = function (name, node) {
+ this.index[name] = node;
+ };
+ /**
+ * Given the name of a node in this hierarchy, get its bridgegraph, creating
+ * it on the fly if necessary. If the node is not a GroupNode, then this
+ * method returns null. If the provided name does not map to a node in the
+ * hierarchy, an error will be thrown.
+ */
+ HierarchyImpl.prototype.getBridgegraph = function (nodeName) {
+ var _this = this;
+ var node = this.index[nodeName];
+ if (!node) {
+ throw Error("Could not find node in hierarchy: " + nodeName);
+ }
+ if (!("metagraph" in node)) {
+ return null;
+ }
+ var groupNode = node;
+ if (groupNode.bridgegraph) {
+ return groupNode.bridgegraph;
+ }
+ var bridgegraph = groupNode.bridgegraph =
+ graph_1.createGraph("BRIDGEGRAPH", graph_1.GraphType.BRIDGE);
+ if (!node.parentNode || !("metagraph" in node.parentNode)) {
+ return bridgegraph;
+ }
+ var parentNode = node.parentNode;
+ var parentMetagraph = parentNode.metagraph;
+ var parentBridgegraph = this.getBridgegraph(parentNode.name);
+ // For each of the parent node's two Metaedge containing graphs, process
+ // each Metaedge involving this node.
+ _.each([parentMetagraph, parentBridgegraph], function (parentGraph) {
+ _(parentGraph.edges())
+ .filter(function (e) { return e.v === nodeName || e.w === nodeName; })
+ .each(function (parentEdgeObj) {
+ var inbound = parentEdgeObj.w === nodeName;
+ var parentMetaedge = parentGraph.edge(parentEdgeObj);
+ // The parent's Metaedge represents some number of underlying
+ // BaseEdges from the original full graph. For each of those, we need
+ // to determine which immediate child is involved and make sure
+ // there's a Metaedge in the bridgegraph that covers it.
+ _.each(parentMetaedge.baseEdgeList, function (baseEdge) {
+ // Based on the direction, figure out which is the descendant node
+ // and which is the "other" node (sibling of parent or ancestor).
+ var _a = inbound ?
+ [baseEdge.w, parentEdgeObj.v] :
+ [baseEdge.v, parentEdgeObj.w], descendantName = _a[0], otherName = _a[1];
+ // Determine the immediate child containing this descendant node.
+ var childName = _this.getChildName(nodeName, descendantName);
+ // Look for an existing Metaedge in the bridgegraph (or create a
+ // new one) that covers the relationship between child and other.
+ var bridgeEdgeObj = {
+ v: inbound ? otherName : childName,
+ w: inbound ? childName : otherName,
+ };
+ var bridgeMetaedge = bridgegraph.edge(bridgeEdgeObj);
+ if (!bridgeMetaedge) {
+ bridgeMetaedge = graph_1.createMetaedge(bridgeEdgeObj.v, bridgeEdgeObj.w);
+ bridgeMetaedge.inbound = inbound;
+ bridgegraph.setEdge(bridgeEdgeObj.v, bridgeEdgeObj.w, bridgeMetaedge);
+ }
+ // Copy the BaseEdge from the parent's Metaedge into this
+ // bridgegraph Metaedge.
+ bridgeMetaedge.addBaseEdge(baseEdge);
+ });
+ })
+ .value(); // force lodash chain execution.
+ });
+ return bridgegraph;
+ };
+ /**
+ * Utility function for determining the name of the immediate child under a
+ * node for a given descendant path. If the descendant corresponds to no
+ * immediate child, an error is thrown.
+ */
+ HierarchyImpl.prototype.getChildName = function (nodeName, descendantName) {
+ // Walk up the hierarchy from the descendant to find the child.
+ var currentNode = this.index[descendantName];
+ while (currentNode) {
+ if (currentNode.parentNode && currentNode.parentNode.name === nodeName) {
+ return currentNode.name;
+ }
+ currentNode = currentNode.parentNode;
+ }
+ throw Error("Could not find immediate child for descendant: " +
+ descendantName);
+ };
+ ;
+ /**
+ * Given the name of a node, return the names of its predecssors.
+ * For an OpNode, this will contain the targets from the underlying BaseEdges.
+ * For a GroupNode, this will contain the targets truncated to siblings of
+ * the shared ancestor.
+ *
+ * For example, consider an original non-control BaseEdge A/B/C->Z/Y/X. Their
+ * shared ancestor is the ROOT node. A and Z are the highest siblings. Here
+ * are the results of calling getPredecessors():
+ *
+ * - getPredecessors("Z/Y/X") === {regular: ["A/B/C"], control: []};
+ * - getPredecessors("Z/Y") === {regular: ["A"], control: []};
+ * - getPredecessors("Z") === {regular: ["A"], control: []};
+ *
+ * The reason getPredecessors("Z/Y") returns ["A"] (and not ["A/B"] as you
+ * might intuitively expect) is because it's not clear how far down the
+ * other end of the hierarchy to traverse in the general case.
+ *
+ * Continuing this example, say there was another BaseEdge A/K->Z/Y/W. When
+ * we look at Z/Y's predecessors, the best we can say is ["A"] without getting
+ * into the details of which of of Z/Y's descendant nodes have predecessors to
+ * which of A's descendants.
+ *
+ * On the other hand, for an OpNode it's clear what the final predecssors
+ * ought to be. There is no ambiguity.
+ */
+ HierarchyImpl.prototype.getPredecessors = function (nodeName) {
+ var node = this.index[nodeName];
+ if (!node) {
+ throw Error("Could not find node with name: " + nodeName);
+ }
+ var predecessors = this.getOneWayEdges(node, true);
+ // Add embedded predecessors, such as constants.
+ if (!node.isGroupNode) {
+ _.each(node.inEmbeddings, function (embeddedNode) {
+ predecessors.regular.push(embeddedNode.name);
+ });
+ }
+ return predecessors;
+ };
+ /**
+ * Given the name of a node, return an array of the names of its successors.
+ * For an OpNode, this will contain the targets from the underlying BaseEdges.
+ * For a GroupNode, this will contain the targets truncated to sibling of
+ * the shared ancestor.
+ *
+ * This is the inverse of getPredecessors(). See that method's documentation
+ * for an in-depth example.
+ */
+ HierarchyImpl.prototype.getSuccessors = function (nodeName) {
+ var node = this.index[nodeName];
+ if (!node) {
+ throw Error("Could not find node with name: " + nodeName);
+ }
+ var successors = this.getOneWayEdges(node, false);
+ // Add embedded successors, such as summaries.
+ if (!node.isGroupNode) {
+ _.each(node.outEmbeddings, function (embeddedNode) {
+ successors.regular.push(embeddedNode.name);
+ });
+ }
+ return successors;
+ };
+ /** Helper method for getPredeccessors and getSuccessors */
+ HierarchyImpl.prototype.getOneWayEdges = function (node, inEdges) {
+ var edges = { control: [], regular: [] };
+ // A node with no parent cannot have any edges.
+ if (!node.parentNode) {
+ return edges;
+ }
+ if (node.parentNode.isGroupNode) {
+ var parentNode = node.parentNode;
+ var metagraph = parentNode.metagraph;
+ var bridgegraph = this.getBridgegraph(parentNode.name);
+ findEdgeTargetsInGraph(metagraph, node, inEdges, edges);
+ findEdgeTargetsInGraph(bridgegraph, node, inEdges, edges);
+ }
+ return edges;
+ };
+ /**
+ * For a given GroupNode, get or calculate an object which describes a
+ * topological ordering of child nodes within that GroupNode's metagraph.
+ *
+ * This ordering is used when rendering bridge control edges which are
+ * sometimes backwards relative to the dataflow.
+ *
+ * For example, say we have a graph with two edges A->B and A->C, and we're
+ * interested in the ordering under ROOT. In this case, any of the following
+ * would be legitimate return values:
+ *
+ * - { "A": 0, "B": 1, "C": 2 } -- most likely
+ * - { "A": 0, "B": 2, "C": 1 } -- less likely
+ * - { "A": 12, "B": 100, "C": 99 } -- unlikely, but still OK
+ *
+ * The algorithm does not guarantee that all numbers from 0-N (where N is
+ * the number of nodes) appear exactly once. Rather it guarantees that if
+ * there is a path between two nodes, the earlier one will have a lower
+ * number in the ordering hash.
+ *
+ * When generating the ordering, we ignore control Metaedges (those which
+ * represent only BaseEdges that have isControlDependency set to true).
+ *
+ * If there is no node with the specified name, an error is thrown. If the
+ * node with the specified name is not a group node, null is returned.
+ */
+ HierarchyImpl.prototype.getTopologicalOrdering = function (nodeName) {
+ var node = this.index[nodeName];
+ if (!node) {
+ throw Error("Could not find node with name: " + nodeName);
+ }
+ if (!node.isGroupNode) {
+ return null;
+ }
+ if (nodeName in this.orderings) {
+ return this.orderings[nodeName];
+ }
+ // Mapping of a child node names to lists of their successors.
+ var successors = {};
+ // Set of node names which have appeared as a destination.
+ var destinations = {};
+ var metagraph = node.metagraph;
+ _.each(metagraph.edges(), function (e) {
+ if (!metagraph.edge(e).numRegularEdges) {
+ return; // Skip control edges.
+ }
+ // Keep track of successors and destinations.
+ if (!(e.v in successors)) {
+ successors[e.v] = [];
+ }
+ successors[e.v].push(e.w);
+ destinations[e.w] = true;
+ });
+ // Seed the queue with true sources (those that are not destinations).
+ var queue = _.difference(_.keys(successors), _.keys(destinations));
+ // Produce an ordering by traversing the graph breadth first.
+ var ordering = this.orderings[nodeName] = {};
+ var index = 0;
+ while (queue.length) {
+ var childName = queue.shift();
+ ordering[childName] = index++;
+ _.each(successors[childName], function (succName) { return queue.push(succName); });
+ delete successors[childName]; // Prevent cycles from infinite looping.
+ }
+ return ordering;
+ };
+ return HierarchyImpl;
+ })();
+ /**
+ * Internal utility function - given a graph (should be either a metagraph or a
+ * bridgegraph) and a node which is known to be in that graph, determine
+ * the other ends of edges that involve that node in the direction specified
+ * by whether it's inbound.
+ *
+ * For example if you wanted to find the predecessors of a node, you'd call
+ * this method for the parent's metagraph and bridgegraph, specifying inbound
+ * as true (look at the source of inbound edges to the specified node).
+ *
+ * Discovered target names are appended to the targets array.
+ */
+ function findEdgeTargetsInGraph(graph, node, inbound, targets) {
+ _.each(graph.edges(), function (e) {
+ var _a = inbound ? [e.w, e.v] : [e.v, e.w], selfName = _a[0], otherName = _a[1];
+ if (selfName === node.name) {
+ if (node.isGroupNode) {
+ var targetList = graph.edge(e).numRegularEdges
+ ? targets.regular : targets.control;
+ targetList.push(otherName);
+ }
+ else {
+ _.each(graph.edge(e).baseEdgeList, function (baseEdge) {
+ var targetList = baseEdge.isControlDependency
+ ? targets.control : targets.regular;
+ targetList.push(inbound ? baseEdge.v : baseEdge.w);
+ });
+ }
+ }
+ });
+ }
+ /**
+ * @param graph The raw graph.
+ * @param params Parameters used when building a hierarchy.
+ */
+ function build(graph, params, tracker) {
+ var h = new HierarchyImpl();
+ var seriesNames = {};
+ return tf.runAsyncTask("Adding nodes", 20, function () {
+ // Get all the possible device names.
+ var deviceNames = {};
+ _.each(graph.nodes, function (node, nodeName) {
+ if (node.device != null) {
+ deviceNames[node.device] = true;
+ }
+ });
+ h.devices = _.keys(deviceNames);
+ addNodes(h, graph);
+ }, tracker)
+ .then(function () {
+ return tf.runAsyncTask("Detect series", 20, function () {
+ if (params.groupSeries) {
+ groupSeries(h.root, h, seriesNames);
+ }
+ }, tracker);
+ })
+ .then(function () {
+ return tf.runAsyncTask("Adding edges", 30, function () {
+ addEdges(h, graph, seriesNames);
+ }, tracker);
+ })
+ .then(function () {
+ return tf.runAsyncTask("Finding similar subgraphs", 30, function () {
+ h.templates = graph_1.template.detect(h, params.verifyTemplate);
+ }, tracker);
+ })
+ .then(function () {
+ return h;
+ }).catch(function (reason) {
+ throw new Error("Failure creating graph hierarchy");
+ });
+ }
+ hierarchy_1.build = build;
+ ;
+ /**
+ * Creates the metanodes in the hierarchical graph and assigns parent-child
+ * relationship between them.
+ */
+ function addNodes(h, graph) {
+ _.each(graph.nodes, function (node, nodeName) {
+ var path = graph_1.getHierarchicalPath(node.name);
+ var parent = h.root;
+ parent.depth = Math.max(path.length, parent.depth);
+ // Create parent metanodes for each depth. For example if the node name
+ // is 'a/b/c', then create metanodes 'a' and 'a/b', where 'a/b' is a child
+ // of a.
+ for (var i = 0; i < path.length; i++) {
+ parent.depth = Math.max(parent.depth, path.length - i);
+ parent.cardinality += node.cardinality;
+ parent.opHistogram[node.op] = (parent.opHistogram[node.op] || 0) + 1;
+ if (node.stats) {
+ parent.stats.combine(node.stats);
+ }
+ if (node.device != null) {
+ parent.deviceHistogram[node.device] =
+ (parent.deviceHistogram[node.device] || 0) + 1;
+ }
+ if (i === path.length - 1) {
+ break;
+ }
+ var name_1 = path[i];
+ var child = h.node(name_1);
+ if (!child) {
+ child = graph_1.createMetanode(name_1);
+ child.parentNode = parent;
+ h.setNode(name_1, child);
+ parent.metagraph.setNode(name_1, child);
+ }
+ parent = child;
+ }
+ // Assuming node name is 'a/b/c', assign the OpNode as a child of the metanode 'a/b'.
+ h.setNode(node.name, node);
+ node.parentNode = parent;
+ parent.metagraph.setNode(node.name, node);
+ // Add each of the in-embeddings and out-embeddings in the hierarchy.
+ _.each(node.inEmbeddings, function (embedding) {
+ h.setNode(embedding.name, embedding);
+ embedding.parentNode = node;
+ });
+ _.each(node.outEmbeddings, function (embedding) {
+ h.setNode(embedding.name, embedding);
+ embedding.parentNode = node;
+ });
+ });
+ }
+ ;
+ /**
+ * For each metanode in the hierarchical graph, this method adds:
+ * the edges in the metagraph. These are edges between nodes
+ * that share the same parent.
+ */
+ function addEdges(h, graph, seriesNames) {
+ var nodeIndex = h.getNodeMap();
+ // Ancestor paths for the source and destination nodes of an edge. These are
+ // reused for each edge rather than allocating new ones. It's about 10% faster
+ // than allocating new ones on each pass through the loop.
+ var sourcePath = [];
+ var destPath = [];
+ // Insert the ancestor path for a node into the provided array, including the
+ // node itself. Return the index of the last node inserted (always ROOT).
+ var getPath = function (node, path) {
+ var i = 0;
+ while (node) {
+ path[i++] = node.name;
+ node = node.parentNode;
+ }
+ return i - 1;
+ };
+ _.each(graph.edges, function (baseEdge) {
+ // Get the hierarchical paths for the source and destination of the edge.
+ var sourceAncestorIndex = getPath(graph.nodes[baseEdge.v], sourcePath);
+ var destAncestorIndex = getPath(graph.nodes[baseEdge.w], destPath);
+ // Find the lowest shared ancestor between source and dest by looking for
+ // the highest nodes that differ between their ancestor paths.
+ while (sourcePath[sourceAncestorIndex] === destPath[destAncestorIndex]) {
+ sourceAncestorIndex--;
+ destAncestorIndex--;
+ if (sourceAncestorIndex < 0 || destAncestorIndex < 0) {
+ // This would only occur if the two nodes were the same (a cycle in the
+ // graph), or if one endpoint was a strict ancestor of the other. The
+ // latter shouldn't happen because we rename nodes which are both
+ // metanodes and op nodes. E.g. "A/B" becomes "A/B/(B)".
+ throw Error("No difference found between ancestor paths.");
+ }
+ }
+ var sharedAncestorNode = nodeIndex[sourcePath[sourceAncestorIndex + 1]];
+ var sourceAncestorName = sourcePath[sourceAncestorIndex];
+ var destAncestorName = destPath[destAncestorIndex];
+ // Find or create the Metaedge which should contain this BaseEdge inside
+ // the shared ancestor.
+ var metaedge = sharedAncestorNode.metagraph.edge(sourceAncestorName, destAncestorName);
+ if (!metaedge) {
+ metaedge = graph_1.createMetaedge(sourceAncestorName, destAncestorName);
+ sharedAncestorNode.metagraph
+ .setEdge(sourceAncestorName, destAncestorName, metaedge);
+ }
+ if (!sharedAncestorNode.hasNonControlEdges &&
+ !baseEdge.isControlDependency) {
+ sharedAncestorNode.hasNonControlEdges = true;
+ }
+ metaedge.addBaseEdge(baseEdge);
+ });
+ }
+ ;
+ /**
+ * Using the hierarchy template information, detect series in the provided
+ * metanode. For each detected series, create a new SeriesNode
+ * and remove series members from the metanode's metagraph and move them to
+ * the new series node's metagraph.
+ *
+ * @param metanode
+ * @param hierarchy
+ * @return A dictionary from node name to series node name that contains the node
+ */
+ function groupSeries(metanode, hierarchy, seriesNames) {
+ var metagraph = metanode.metagraph;
+ _.each(metagraph.nodes(), function (n) {
+ var child = metagraph.node(n);
+ if (child.type === tf.graph.NodeType.META) {
+ groupSeries(child, hierarchy, seriesNames);
+ }
+ });
+ var clusters = clusterNodes(metagraph);
+ var seriesDict = detectSeries(clusters, metagraph);
+ // Add each series node to the graph and add its grouped children to its own
+ // metagraph.
+ _.each(seriesDict, function (seriesNode, seriesName) {
+ var nodeMemberNames = seriesNode.metagraph.nodes();
+ var firstMember = seriesNode.metagraph.node(nodeMemberNames[0]);
+ var seriesType = firstMember.type;
+ hierarchy.setNode(seriesName, seriesNode); // add to the index
+ metagraph.setNode(seriesName, seriesNode);
+ _.each(nodeMemberNames, function (n) {
+ var child = metagraph.node(n);
+ seriesNode.metagraph.setNode(n, child);
+ seriesNode.parentNode = child.parentNode;
+ seriesNode.cardinality++;
+ if (child.device != null) {
+ seriesNode.deviceHistogram[child.device] =
+ (seriesNode.deviceHistogram[child.device] || 0) + 1;
+ }
+ child.parentNode = seriesNode;
+ seriesNames[n] = seriesName;
+ if (child.stats) {
+ seriesNode.stats.combine(child.stats);
+ }
+ // Remove now-grouped node from its original parent's metagraph.
+ metagraph.removeNode(n);
+ });
+ });
+ }
+ ;
+ /** cluster op-nodes with similar op */
+ function clusterNodes(metagraph) {
+ var result = {};
+ return _.reduce(metagraph.nodes(), function (clusters, n) {
+ var child = metagraph.node(n);
+ if (child.type === graph_1.NodeType.META) {
+ // skip metanodes
+ return clusters;
+ }
+ var template = child.op;
+ if (template) {
+ clusters[template] = clusters[template] || [];
+ clusters[template].push(child.name);
+ }
+ return clusters;
+ }, result);
+ }
+ /**
+ * For each cluster of op-nodes based op type, try to detect groupings.
+ * Infer series name using by trying to find pattern "<number>" in the node
+ * name.
+ *
+ * @param clusters Dictionary output from clusterNodes().
+ * @param metagraph
+ * @return A dictionary from series name => seriesNode
+ */
+ function detectSeries(clusters, metagraph) {
+ var seriesDict = {};
+ _.each(clusters, function (members, clusterId) {
+ if (members.length <= 1) {
+ return;
+ } // isolated clusters can't make series
+ /** @type {Object} A dictionary mapping seriesName to seriesInfoArray,
+ * which is an array that contains objects with name, id, prefix, suffix,
+ * and parent properties.
+ */
+ var candidatesDict = {};
+ // Group all nodes that have the same name, with the exception of a
+ // number at the end of the name after an underscore, which is allowed to
+ // vary.
+ _.each(members, function (name) {
+ var isGroup = name.charAt(name.length - 1) === "*";
+ var namepath = name.split("/");
+ var leaf = namepath[namepath.length - 1];
+ var parent = namepath.slice(0, namepath.length - 1).join("/");
+ var matches = leaf.match(/^(\D*)_(\d+)$/);
+ var prefix;
+ var id;
+ var suffix = "";
+ if (matches) {
+ prefix = matches[1]; // the front non-numeric characters
+ id = matches[2]; // the digits
+ }
+ else {
+ prefix = isGroup ? leaf.substr(0, leaf.length - 1) : leaf;
+ if (prefix.charAt(prefix.length - 1) !== "_") {
+ prefix += "_";
+ }
+ id = 0;
+ suffix = isGroup ? "*" : "";
+ }
+ var seriesName = graph_1.getSeriesNodeName(prefix, suffix, parent);
+ candidatesDict[seriesName] = candidatesDict[seriesName] || [];
+ var seriesNode = graph_1.createSeriesNode(prefix, suffix, parent, +id, name);
+ candidatesDict[seriesName].push(seriesNode);
+ });
+ // In each group of nodes, group nodes in bunches that have monotonically
+ // increasing numbers in their names. Each of these bunches is a series.
+ _.each(candidatesDict, function (seriesInfoArray, seriesName) {
+ if (seriesInfoArray.length < 2) {
+ return;
+ }
+ seriesInfoArray.sort(function (a, b) {
+ return (+a.clusterId) - (+b.clusterId);
+ });
+ // Loop through the nodes sorted by its detected series number, grouping
+ // all nodes with monotonically-increasing series numbers.
+ var seriesNodes = [seriesInfoArray[0]];
+ for (var index = 1; index < seriesInfoArray.length; index++) {
+ var nextNode = seriesInfoArray[index];
+ if (nextNode.clusterId === seriesNodes[seriesNodes.length - 1].clusterId + 1) {
+ seriesNodes.push(nextNode);
+ continue;
+ }
+ addSeriesToDict(seriesNodes, seriesDict, +clusterId, metagraph);
+ seriesNodes = [nextNode];
+ }
+ addSeriesToDict(seriesNodes, seriesDict, +clusterId, metagraph);
+ });
+ });
+ return seriesDict;
+ }
+ /**
+ * Add a series to the provided dictionary mapping series names to series.
+ *
+ * @param seriesNodes the nodes in the series. Contains
+ * name, id, prefix, suffix and parent properties of the node.
+ * @param seriesDict the dictionary of series
+ * @param clusterId ID of the template of the nodes of the series
+ * @param metagraph
+ */
+ function addSeriesToDict(seriesNodes, seriesDict, clusterId, metagraph) {
+ if (seriesNodes.length > 1) {
+ var curSeriesName = graph_1.getSeriesNodeName(seriesNodes[0].prefix, seriesNodes[0].suffix, seriesNodes[0].parent, seriesNodes[0].clusterId, seriesNodes[seriesNodes.length - 1].clusterId);
+ var curSeriesNode = graph_1.createSeriesNode(seriesNodes[0].prefix, seriesNodes[0].suffix, seriesNodes[0].parent, clusterId, curSeriesName);
+ _.each(seriesNodes, function (node) {
+ curSeriesNode.ids.push(node.clusterId);
+ curSeriesNode.metagraph.setNode(node.name, metagraph.node(node.name));
+ });
+ seriesDict[curSeriesName] = curSeriesNode;
+ }
+ }
+ })(hierarchy = graph_1.hierarchy || (graph_1.hierarchy = {}));
+ })(graph = tf.graph || (tf.graph = {}));
+})(tf || (tf = {})); // close module tf.graph.hierarchy
+</script>
+<script>/// <reference path="graph.ts" />
+/// <reference path="hierarchy.ts" />
+var __extends = (this && this.__extends) || function (d, b) {
+ for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
+ function __() { this.constructor = d; }
+ __.prototype = b.prototype;
+ d.prototype = new __();
+};
+/**
+ * Package for the Render Hierarchy for TensorFlow graph.
+ */
+var tf;
+(function (tf) {
+ var graph;
+ (function (graph_1) {
+ var render;
+ (function (render) {
+ /**
+ * Color parameters for node encoding.
+ * @type {Object}
+ */
+ render.MetanodeColors = {
+ SATURATION: 0.6,
+ LIGHTNESS: 0.85,
+ /**
+ * Neutral color to use when the node is expanded (used when coloring by
+ * compute time, memory and device).
+ */
+ EXPANDED_COLOR: "#f0f0f0",
+ /**
+ * Standard hue values for node color palette.
+ */
+ HUES: [220, 100, 180, 40, 20, 340, 260, 300, 140, 60],
+ STRUCTURE_PALETTE: function (id, lightened) {
+ // The code below is a flexible way to computationally create a set
+ // of colors that go well together.
+ var hues = render.MetanodeColors.HUES;
+ var n = hues.length;
+ var hue = hues[id % n];
+ var m = Math.sin(hue * Math.PI / 360);
+ var sat = lightened ? 30 : 90 - 60 * m;
+ var light = lightened ? 95 : 80;
+ return d3.hsl(hue, .01 * sat, .01 * light).toString();
+ },
+ DEVICE_PALETTE: function (index) {
+ return render.MetanodeColors.STRUCTURE_PALETTE(index);
+ },
+ UNKNOWN: "#eee",
+ GRADIENT_OUTLINE: "#888"
+ };
+ /**
+ * Stores the rendering information, such as x and y coordinates,
+ * for each node in the graph.
+ */
+ var RenderGraphInformation = (function () {
+ function RenderGraphInformation(hierarchy, params) {
+ this.hierarchy = hierarchy;
+ this.index = {};
+ this.deviceColorMap = d3.scale.ordinal()
+ .domain(hierarchy.devices)
+ .range(_.map(d3.range(hierarchy.devices.length), render.MetanodeColors.DEVICE_PALETTE));
+ var topLevelGraph = hierarchy.root.metagraph;
+ // Find the maximum and minimum memory usage.
+ var memoryExtent = d3.extent(topLevelGraph.nodes(), function (nodeName, index) {
+ var node = topLevelGraph.node(nodeName);
+ // Some ops don't have stats at all.
+ if (node.stats != null) {
+ return node.stats.totalBytes;
+ }
+ });
+ this.memoryUsageScale = d3.scale.linear()
+ .domain(memoryExtent)
+ .range(params.minMaxColors);
+ // Find also the minimum and maximum compute time.
+ var computeTimeExtent = d3.extent(topLevelGraph.nodes(), function (nodeName, index) {
+ var node = topLevelGraph.node(nodeName);
+ // Some ops don't have stats at all.
+ if (node.stats != null) {
+ return node.stats.totalMicros;
+ }
+ });
+ this.computeTimeScale = d3.scale.linear()
+ .domain(computeTimeExtent)
+ .range(params.minMaxColors);
+ // Maps node name to whether the rendering hierarchy was already constructed.
+ this.hasSubhierarchy = {};
+ this.params = params;
+ this.root = new RenderGroupNodeInformation(hierarchy.root);
+ this.index[hierarchy.root.name] = this.root;
+ this.buildSubhierarchy(hierarchy.root.name);
+ this.root.expanded = true;
+ }
+ RenderGraphInformation.prototype.getRenderNodeByName = function (nodeName) {
+ return this.index[nodeName];
+ };
+ /**
+ * Return the nearest ancestor node, including itself, that is visible
+ * in the visualization. This method is used so that we can select
+ * (highlight) a node that isn't drawn yet, by selecting (highlighting)
+ * its nearest ancestor that has been drawn.
+ */
+ RenderGraphInformation.prototype.getNearestVisibleAncestor = function (name) {
+ var path = graph_1.getHierarchicalPath(name);
+ for (var i = 0; i < path.length; i++) {
+ var nodeName = path[i];
+ // Op nodes have expanded set to false by default.
+ if (!this.getRenderNodeByName(nodeName).expanded) {
+ return nodeName;
+ }
+ }
+ // Fallthrough. If everything was expanded return the node.
+ return name;
+ };
+ // TODO(jimbo): Delete this an any code it touches (all deprecated).
+ RenderGraphInformation.prototype.setDepth = function (depth) {
+ setGroupNodeDepth(this.root, +depth);
+ };
+ RenderGraphInformation.prototype.buildSubhierarchy = function (nodeName) {
+ var _this = this;
+ // Terminate if the rendering hierarchy was already constructed
+ // for this node.
+ if (nodeName in this.hasSubhierarchy) {
+ return;
+ }
+ var renderNodeInfo = this.index[nodeName];
+ // If it is not a meta node or a series node, don't do anything.
+ if (renderNodeInfo.node.type !== graph_1.NodeType.META &&
+ renderNodeInfo.node.type !== graph_1.NodeType.SERIES) {
+ return;
+ }
+ // At this point we know the rendering information is about a group node.
+ var renderGroupNodeInfo = renderNodeInfo;
+ var metagraph = renderGroupNodeInfo.node.metagraph;
+ var coreGraph = renderGroupNodeInfo.coreGraph;
+ // Create render nodes to represent each child from the metagraph. Although
+ // these will initially be added to the coreGraph, they may later be
+ // extracted. Also, due to extraction, the coreGraph may contain disjoint
+ // groups between which there is no visible path (other than annotations).
+ _.each(metagraph.nodes(), function (childName) {
+ var childNode = metagraph.node(childName);
+ var childRenderInfo = childNode.isGroupNode ?
+ new RenderGroupNodeInformation(childNode) :
+ new RenderNodeInformation(childNode);
+ _this.index[childName] = childRenderInfo;
+ coreGraph.setNode(childName, childRenderInfo);
+ if (childRenderInfo.node.stats != null) {
+ childRenderInfo.memoryColor =
+ _this.memoryUsageScale(childRenderInfo.node.stats.totalBytes);
+ childRenderInfo.computeTimeColor =
+ _this.computeTimeScale(childRenderInfo.node.stats.totalMicros);
+ }
+ if (!childNode.isGroupNode) {
+ _.each(childNode.inEmbeddings, function (embedding) {
+ var renderMetaedgeInfo = new RenderMetaedgeInformation(null);
+ addInAnnotation(childRenderInfo, embedding, null, renderMetaedgeInfo, AnnotationType.CONSTANT, _this.params);
+ _this.index[embedding.name] = new RenderNodeInformation(embedding);
+ });
+ _.each(childNode.outEmbeddings, function (embedding) {
+ var renderMetaedgeInfo = new RenderMetaedgeInformation(null);
+ addOutAnnotation(childRenderInfo, embedding, null, renderMetaedgeInfo, AnnotationType.SUMMARY, _this.params);
+ _this.index[embedding.name] = new RenderNodeInformation(embedding);
+ });
+ var device = childRenderInfo.node.device;
+ if (device != null) {
+ childRenderInfo.deviceColors = [{
+ color: _this.deviceColorMap(device),
+ proportion: 1.0
+ }];
+ }
+ }
+ else {
+ // Make a list of tuples (device, proportion), where proportion
+ // is the fraction of op nodes that have that device.
+ var pairs = _.pairs(childNode.deviceHistogram);
+ if (pairs.length > 0) {
+ // Compute the total # of devices.
+ var numDevices = _.sum(pairs, _.last);
+ childRenderInfo.deviceColors = _.map(pairs, function (pair) {
+ return {
+ color: _this.deviceColorMap(pair[0]),
+ // Normalize to a proportion of total # of devices.
+ proportion: pair[1] / numDevices
+ };
+ });
+ }
+ }
+ });
+ // Add render metaedge info for edges in the metagraph.
+ _.each(metagraph.edges(), function (edgeObj) {
+ var metaedge = metagraph.edge(edgeObj);
+ var renderMetaedgeInfo = new RenderMetaedgeInformation(metaedge);
+ coreGraph.setEdge(edgeObj.v, edgeObj.w, renderMetaedgeInfo);
+ });
+ if (this.params.enableExtraction &&
+ renderGroupNodeInfo.node.type === graph_1.NodeType.META) {
+ extractHighDegrees(renderGroupNodeInfo, this.params);
+ }
+ // Record that we constructed the rendering hierarchy for this node, so we
+ // don't construct it another time.
+ this.hasSubhierarchy[nodeName] = true;
+ // Look up the parent node's render information and short circuit if none.
+ var parentNode = renderGroupNodeInfo.node.parentNode;
+ if (!parentNode) {
+ return;
+ }
+ var parentNodeInfo = this.index[parentNode.name];
+ // Utility function for computing the name of a bridge node.
+ var getBridgeNodeName = function (inbound) {
+ var rest = [];
+ for (var _i = 1; _i < arguments.length; _i++) {
+ rest[_i - 1] = arguments[_i];
+ }
+ return rest.concat([inbound ? "IN" : "OUT"]).join("~~");
+ };
+ // Build out the bridgegraph.
+ var bridgegraph = this.hierarchy.getBridgegraph(nodeName);
+ // Look for popular nodes so we can make annotations instead of paths.
+ var otherCounts = {
+ // Counts of edges coming INTO other nodes by name (outgoing from self).
+ in: {},
+ // Counts of edges going OUT from other nodes by name (coming into self).
+ out: {},
+ // Counts of all control edges involving other nodes by name.
+ control: {},
+ };
+ _.each(bridgegraph.edges(), function (e) {
+ // An edge is inbound if its destination node is in the metagraph.
+ var inbound = !!metagraph.node(e.w);
+ var otherName = inbound ? e.v : e.w;
+ var metaedge = bridgegraph.edge(e);
+ if (!metaedge.numRegularEdges) {
+ otherCounts.control[otherName] =
+ (otherCounts.control[otherName] || 0) + 1;
+ }
+ else if (inbound) {
+ otherCounts.out[otherName] = (otherCounts.out[otherName] || 0) + 1;
+ }
+ else {
+ otherCounts.in[otherName] = (otherCounts.in[otherName] || 0) + 1;
+ }
+ });
+ // Add annotations and edges for bridgegraph relationships.
+ var hierarchyNodeMap = this.hierarchy.getNodeMap();
+ _.each(bridgegraph.edges(), function (bridgeEdgeObj) {
+ var bridgeMetaedge = bridgegraph.edge(bridgeEdgeObj);
+ // Determine whether this bridge edge is incoming by checking the
+ // metagraph for a node that matches the destination end.
+ var inbound = !!metagraph.node(bridgeEdgeObj.w);
+ // Based on the direction of the edge, one endpoint will be an immediate
+ // child of this renderNodeInfo, and the other endpoint will be a sibling
+ // of the parent (or an ancestor further up).
+ var _a = inbound ?
+ [bridgeEdgeObj.w, bridgeEdgeObj.v] :
+ [bridgeEdgeObj.v, bridgeEdgeObj.w], childName = _a[0], otherName = _a[1];
+ var childRenderInfo = _this.index[childName];
+ var otherRenderInfo = _this.index[otherName];
+ var otherNode = otherRenderInfo ?
+ otherRenderInfo.node :
+ hierarchyNodeMap[otherName];
+ // Determine whether this edge is a control edge between nodes where
+ // either node is high-degree with respect to control edges. This will
+ // be a signal to show it as an annotation instead of a bridge edge.
+ var isHighDegreeControlEdge = !bridgeMetaedge.numRegularEdges &&
+ otherCounts.control[otherName] > _this.params.maxControlDegree;
+ var _b = inbound ?
+ [renderNodeInfo.inAnnotations, childRenderInfo.inAnnotations] :
+ [renderNodeInfo.outAnnotations, childRenderInfo.outAnnotations], annotations = _b[0], childAnnotations = _b[1];
+ var isOtherHighDegree = inbound ?
+ otherCounts.out[otherName] > _this.params.maxOutDegree :
+ otherCounts.in[otherName] > _this.params.maxInDegree;
+ // The adjoining render metaedge info from the parent's coreGraph, if any.
+ // It will either be a Metaedge involving this node directly, if it
+ // previously came from a metagraph, or it'll be a Metaedge involving
+ // a previously created bridge node standing in for the other node.
+ var adjoiningMetaedge = null;
+ // We can only hope to render a bridge path if:
+ // - bridgegraph paths are enabled,
+ // - the other node is not too high-degree,
+ // - the child is in the core (not extracted for being high-degree), and
+ // - there's a path (in the traversal sense) between child and other.
+ var canDrawBridgePath = false;
+ if (_this.params.enableBridgegraph &&
+ !isOtherHighDegree &&
+ !isHighDegreeControlEdge &&
+ childRenderInfo.isInCore()) {
+ // Utility function for finding an adjoining metaedge.
+ var findAdjoiningMetaedge = function (targetName) {
+ var adjoiningEdgeObj = inbound ?
+ { v: targetName, w: nodeName } :
+ { v: nodeName, w: targetName };
+ return parentNodeInfo.coreGraph.edge(adjoiningEdgeObj);
+ };
+ adjoiningMetaedge = findAdjoiningMetaedge(otherName);
+ if (!adjoiningMetaedge) {
+ adjoiningMetaedge = findAdjoiningMetaedge(getBridgeNodeName(inbound, otherName, parentNode.name));
+ }
+ canDrawBridgePath = !!adjoiningMetaedge;
+ }
+ // Although dataflow edges are acyclic, control dependency edges may
+ // actually point "backwards" in the graph. If this bridgeMetaedge is
+ // a control dependency, we need to determine whether it's backwards
+ // pointing so that we render it appropriately.
+ //
+ // For instance, say we're rendering a graph with nodes named A/B and Z/Y,
+ // and we're currently rendering the bridgegraph for A. Further, let's say
+ // that there was an original BaseEdge from A/B->Z/Y and a CONTROL EDGE
+ // from Z/Y=>A/B.
+ //
+ // +----------------+
+ // | A |
+ // | +-----+ | +------+
+ // | | B |>----->|>------->| Z |
+ // | | | | | |
+ // | | | * | | |
+ // | | |<=====<|<=======<| |
+ // | +-----+ | +------+
+ // +----------------+
+ //
+ // When we render the subhierarchy for Metanode A, we'll come across a
+ // control-only Metaedge in the bridgegraph from Z=>A/B (*). The question
+ // is whether this edge is backwards.
+ //
+ // To answer that question, we follow the chain of adjoining metaedges
+ // until we reach the topmost one. In this case, that's the control-only
+ // Metaedge Z=>A in the ROOT's metagraph. We determine that this edge
+ // is backwards by looking at the topological ordering of ROOT's metagraph
+ // (which ignores control edges) and seeing that Z comes AFTER A.
+ //
+ // The property of being backwards is independent of whether the edge
+ // is inbound or outbound. In the preceeding example, if we were building
+ // the subhierarchy for Z, we'd find bridge edge Z/Y=>A, walk to its
+ // topmost adjoining metaedge Z=>A and discover that it's backwards.
+ var backwards = false;
+ if (adjoiningMetaedge && !bridgeMetaedge.numRegularEdges) {
+ // Find the top-most adjoining render metaedge information, and the
+ // GroupNode whose metagraph must contain the associated metaedge.
+ var topAdjoiningMetaedge = adjoiningMetaedge;
+ var topGroupNode = parentNodeInfo.node;
+ while (topAdjoiningMetaedge.adjoiningMetaedge) {
+ topAdjoiningMetaedge = topAdjoiningMetaedge.adjoiningMetaedge;
+ topGroupNode = topGroupNode.parentNode;
+ }
+ // Check against the topological ordering for the top node. The current
+ // bridge metaedge we're evaluating is backwards if its source comes
+ // after its destination.
+ var ordering = _this.hierarchy.getTopologicalOrdering(topGroupNode.name);
+ var e = topAdjoiningMetaedge.metaedge;
+ backwards = ordering[e.v] > ordering[e.w];
+ }
+ // Render backwards control edges as annotations.
+ canDrawBridgePath = canDrawBridgePath && !backwards;
+ // If we can't make a bridge path for any reason, then we add an
+ // annotation instead.
+ if (!canDrawBridgePath) {
+ childAnnotations.push(new Annotation(otherNode, otherRenderInfo, new RenderMetaedgeInformation(bridgeMetaedge), AnnotationType.SHORTCUT, inbound), _this.params);
+ return;
+ }
+ // At this point, all conditions have been met for drawing a bridge path.
+ // Find or create the IN/OUT node representing otherNode.
+ var bridgeContainerName = getBridgeNodeName(inbound, nodeName);
+ var bridgeNodeName = getBridgeNodeName(inbound, otherName, nodeName);
+ var bridgeNodeRenderInfo = coreGraph.node(bridgeNodeName);
+ if (!bridgeNodeRenderInfo) {
+ // Find or create the directional container for the bridge node.
+ var bridgeContainerInfo = coreGraph.node(bridgeContainerName);
+ if (!bridgeContainerInfo) {
+ var bridgeContainerNode = {
+ // Important node properties.
+ name: bridgeContainerName,
+ type: graph_1.NodeType.BRIDGE,
+ // Unused node properties.
+ isGroupNode: false,
+ cardinality: 0,
+ parentNode: null,
+ stats: null,
+ // BridgeNode properties.
+ inbound: inbound,
+ };
+ bridgeContainerInfo =
+ new RenderNodeInformation(bridgeContainerNode);
+ _this.index[bridgeContainerName] = bridgeContainerInfo;
+ coreGraph.setNode(bridgeContainerName, bridgeContainerInfo);
+ }
+ var bridgeNode = {
+ // Important node properties.
+ name: bridgeNodeName,
+ type: graph_1.NodeType.BRIDGE,
+ // Unimportant node properties.
+ isGroupNode: false,
+ cardinality: 1,
+ parentNode: null,
+ stats: null,
+ // BridgeNode properties.
+ inbound: inbound,
+ };
+ bridgeNodeRenderInfo = new RenderNodeInformation(bridgeNode);
+ _this.index[bridgeNodeName] = bridgeNodeRenderInfo;
+ coreGraph.setNode(bridgeNodeName, bridgeNodeRenderInfo);
+ // Set bridgeNode to be a graphlib child of the container node.
+ coreGraph.setParent(bridgeNodeName, bridgeContainerName);
+ bridgeContainerInfo.node.cardinality++;
+ }
+ // Create and add a bridge render metaedge.
+ var bridgeRenderMetaedge = new RenderMetaedgeInformation(bridgeMetaedge);
+ bridgeRenderMetaedge.adjoiningMetaedge = adjoiningMetaedge;
+ inbound ?
+ coreGraph.setEdge(bridgeNodeName, childName, bridgeRenderMetaedge) :
+ coreGraph.setEdge(childName, bridgeNodeName, bridgeRenderMetaedge);
+ }); // End _.each(bridgegraph.edges).
+ // For each bridge container (IN and/or OUT), add structural edges between
+ // terminal nodes and that container. A terminal node is one which has no
+ // non-bridge edges in the direction of the container.
+ //
+ // For example, consider a Metanode A which contains two child nodes A/B
+ // and A/C. Let's say it has one edge in the metagraph from A/B->A/C, and
+ // one edge in the bridgegraph from Z->A/C.
+ //
+ // At this point, we've added a container bridge node IN to house all
+ // incoming bridge nodes. We'v alse added a bridge node Z' (with parent IN)
+ // to A, and a bridge edge from Z'->C.
+ //
+ // +----------------------+
+ // | A +---+ |
+ // | +------>| C | |
+ // | | +---+ |
+ // | | ^ |
+ // | | | |
+ // | | +----|----+ |
+ // | | | IN | | |
+ // | +---+ | +---+ | |
+ // | | B | | | Z'| | |
+ // | +---+ | +---+ | |
+ // | +---------+ |
+ // +----------------------+
+ //
+ // With no other help, dagre would lay out B and Z' on the same level,
+ // because both of them have no incoming edges. In other words, B is a
+ // terminal node in the INCOMING direction.
+ //
+ // But we want to force dagre to lay out Z' (and everything in IN) lower
+ // than all non-bridge nodes, so that there's enough room for the bridge
+ // edges after they've been adjusted to meet up with paths coming in from
+ // outside.
+ //
+ // To force Z' (and all other bridge nodes) to be lowest in the graph, we
+ // identify terminal nodes like B and give them structural edges to
+ // a new structural bridge node S which we add to IN.
+ //
+ // +----------------------+
+ // | A +---+ |
+ // | +--->| C | |
+ // | | +---+ |
+ // | +---+ ^ |
+ // | | B | | |
+ // | +---+ | |
+ // | ^ | |
+ // | | | |
+ // | +----|------|----+ |
+ // | |IN | | | |
+ // | | +---+ +---+ | |
+ // | | | S | | Z'| | |
+ // | | +---+ +---+ | |
+ // | +----------------+ |
+ // +----------------------+
+ //
+ // This ensures that dagre will lay out the bridge containers strictly at
+ // the ends of the graph. The structural edges will never be seen in the
+ // visualization except as a debugging aid.
+ _.each([true, false], function (inbound) {
+ var bridgeContainerName = getBridgeNodeName(inbound, nodeName);
+ var bridgeContainerInfo = coreGraph.node(bridgeContainerName);
+ if (!bridgeContainerInfo) {
+ return;
+ }
+ _.each(coreGraph.nodes(), function (childName) {
+ // Short-circuit if this child is a bridge node or it's not a terminal
+ // node in the direction we're interested in.
+ var childNodeInfo = coreGraph.node(childName);
+ if (childNodeInfo.node.type === graph_1.NodeType.BRIDGE) {
+ return;
+ }
+ var isTerminal = inbound ?
+ !coreGraph.predecessors(childName).length :
+ !coreGraph.successors(childName).length;
+ if (!isTerminal) {
+ return;
+ }
+ // Find or create a bridge node in the container for all structural
+ // metaedges. It would have been nice to skip this step and simply
+ // set a metaedge between the terminal node and the container node, but
+ // in that case, something about the graph upsets dagre.layout()'s
+ // longestPath algorithm (was getting errors due to an undefined).
+ var structuralNodeName = getBridgeNodeName(inbound, nodeName, "STRUCTURAL_TARGET");
+ var structuralRenderInfo = coreGraph.node(structuralNodeName);
+ if (!structuralRenderInfo) {
+ var bridgeNode = {
+ // Important Node properties.
+ name: structuralNodeName,
+ type: graph_1.NodeType.BRIDGE,
+ // Unimportant Node properties.
+ isGroupNode: false,
+ cardinality: 1,
+ parentNode: null,
+ stats: null,
+ // BridgeNode properties.
+ inbound: inbound,
+ };
+ structuralRenderInfo = new RenderNodeInformation(bridgeNode);
+ structuralRenderInfo.structural = true;
+ _this.index[structuralNodeName] = structuralRenderInfo;
+ coreGraph.setNode(structuralNodeName, structuralRenderInfo);
+ bridgeContainerInfo.node.cardinality++;
+ coreGraph.setParent(structuralNodeName, bridgeContainerName);
+ }
+ // Create the structural Metaedge and insert it.
+ var structuralMetaedgeInfo = new RenderMetaedgeInformation(null);
+ structuralMetaedgeInfo.structural = true;
+ structuralMetaedgeInfo.weight--; // Reduce weight for dagre layout.
+ inbound ?
+ coreGraph.setEdge(structuralNodeName, childName, structuralMetaedgeInfo) :
+ coreGraph.setEdge(childName, structuralNodeName, structuralMetaedgeInfo);
+ });
+ });
+ };
+ return RenderGraphInformation;
+ })();
+ render.RenderGraphInformation = RenderGraphInformation;
+ /**
+ * A class for rendering annotation object which contains label
+ * about the node embedded as annotation, type of annotation and the location
+ * of both the annotation's node and edge.
+ *
+ * Annotation objects include embedded constants, embedded summary, and
+ * edge shortcuts.
+ */
+ var Annotation = (function () {
+ /**
+ * Creates a new Annotation.
+ *
+ * @param node The underlying node this annotation points to.
+ * @param renderNodeInfo The render information for the underlying node
+ * this annotation points to. This can be null if the annotation
+ * denotes an embedding (constant, summary), in which case we
+ * use the node property.
+ * @param renderMetaedgeInfo The render information for the edge associated
+ * with the annotation.
+ * @param type The type of the annotation.
+ * @param isIn True if it is an in-annotation. False if it is an
+ * out-annotation.
+ */
+ function Annotation(node, renderNodeInfo, renderMetaedgeInfo, type, isIn) {
+ this.node = node;
+ this.renderNodeInfo = renderNodeInfo;
+ this.renderMetaedgeInfo = renderMetaedgeInfo;
+ this.annotationType = type;
+ // Properties specified by layout
+ this.dx = 0;
+ this.dy = 0;
+ this.width = 0;
+ this.height = 0;
+ this.isIn = isIn;
+ this.points = [];
+ }
+ return Annotation;
+ })();
+ render.Annotation = Annotation;
+ ;
+ (function (AnnotationType) {
+ AnnotationType[AnnotationType["SHORTCUT"] = 0] = "SHORTCUT";
+ AnnotationType[AnnotationType["CONSTANT"] = 1] = "CONSTANT";
+ AnnotationType[AnnotationType["SUMMARY"] = 2] = "SUMMARY";
+ AnnotationType[AnnotationType["ELLIPSIS"] = 3] = "ELLIPSIS";
+ })(render.AnnotationType || (render.AnnotationType = {}));
+ var AnnotationType = render.AnnotationType;
+ ;
+ /**
+ * Manages a list of annotations. Two will be used for each
+ * RenderNodeInformation, one for in annotations and one for out annotations.
+ */
+ var AnnotationList = (function () {
+ function AnnotationList() {
+ this.list = [];
+ this.nodeNames = {};
+ }
+ /**
+ * Append an annotation to the list, or a stand-in ellipsis annotation instead
+ * if this would make it too many.
+ */
+ AnnotationList.prototype.push = function (annotation, params) {
+ if (annotation.node.name in this.nodeNames) {
+ return; // Skip duplicate annotation.
+ }
+ this.nodeNames[annotation.node.name] = true;
+ if (this.list.length < params.maxAnnotations) {
+ this.list.push(annotation);
+ return;
+ }
+ var lastAnnotation = this.list[this.list.length - 1];
+ if (lastAnnotation.annotationType === AnnotationType.ELLIPSIS) {
+ var ellipsisNode_1 = lastAnnotation.node;
+ ellipsisNode_1.setNumMoreNodes(++ellipsisNode_1.numMoreNodes);
+ return;
+ }
+ var ellipsisNode = new tf.graph.EllipsisNodeImpl(1);
+ this.list.push(new Annotation(ellipsisNode, new RenderNodeInformation(ellipsisNode), null, AnnotationType.ELLIPSIS, annotation.isIn));
+ };
+ return AnnotationList;
+ })();
+ render.AnnotationList = AnnotationList;
+ /**
+ * Contains rendering information about a node in the hierarchical graph.
+ */
+ var RenderNodeInformation = (function () {
+ function RenderNodeInformation(node) {
+ this.node = node;
+ this.expanded = false;
+ this.inAnnotations = new AnnotationList();
+ this.outAnnotations = new AnnotationList();
+ // Params specified by layout
+ this.x = 0;
+ this.y = 0;
+ this.width = 0;
+ this.height = 0;
+ this.inboxWidth = 0;
+ this.outboxWidth = 0;
+ this.excluded = false;
+ // Params for bridge paths.
+ this.structural = false;
+ // Params for node box.
+ this.labelOffset = 0;
+ this.extractXOffset = 0;
+ this.radius = 0;
+ // Params for expanded node
+ this.labelHeight = 0;
+ this.paddingTop = 0;
+ this.paddingLeft = 0;
+ this.paddingRight = 0;
+ this.paddingBottom = 0;
+ this.outerWidth = 0;
+ this.outerHeight = 0;
+ this.isInExtract = false;
+ this.isOutExtract = false;
+ }
+ RenderNodeInformation.prototype.isInCore = function () {
+ return !this.isInExtract && !this.isOutExtract;
+ };
+ return RenderNodeInformation;
+ })();
+ render.RenderNodeInformation = RenderNodeInformation;
+ /**
+ * Contains rendering information about a Metaedge from the underlying
+ * hierarchical graph. It may be from either a metagraph or a bridgegraph.
+ */
+ var RenderMetaedgeInformation = (function () {
+ function RenderMetaedgeInformation(metaedge) {
+ this.metaedge = metaedge;
+ this.adjoiningMetaedge = null;
+ this.structural = false;
+ this.weight = 1;
+ }
+ return RenderMetaedgeInformation;
+ })();
+ render.RenderMetaedgeInformation = RenderMetaedgeInformation;
+ function addInAnnotation(node, predecessor, predecessorRenderInfo, edge, type, params) {
+ var annotation = new Annotation(predecessor, predecessorRenderInfo, edge, type, true);
+ node.inAnnotations.push(annotation, params);
+ }
+ function addOutAnnotation(node, successor, successorRenderInfo, edge, type, params) {
+ var annotation = new Annotation(successor, successorRenderInfo, edge, type, false);
+ node.outAnnotations.push(annotation, params);
+ }
+ function setGraphDepth(graph, depth) {
+ _.each(graph.nodes(), function (nodeName) {
+ var child = graph.node(nodeName);
+ child.expanded = depth > 1; // set all child of depth 1 to collapsed
+ if (depth > 0) {
+ switch (child.node.type) {
+ case graph_1.NodeType.META:
+ case graph_1.NodeType.SERIES:
+ setGroupNodeDepth(child, depth - 1);
+ break;
+ }
+ }
+ });
+ }
+ ;
+ var RenderGroupNodeInformation = (function (_super) {
+ __extends(RenderGroupNodeInformation, _super);
+ function RenderGroupNodeInformation(groupNode) {
+ _super.call(this, groupNode);
+ var metagraph = groupNode.metagraph;
+ var gl = metagraph.graph();
+ this.coreGraph =
+ graph_1.createGraph(gl.name, graph_1.GraphType.CORE, { compound: true });
+ this.coreBox = { width: 0, height: 0 };
+ this.inExtractBox = { width: 0, height: 0 };
+ this.outExtractBox = { width: 0, height: 0 };
+ this.isolatedInExtract = [];
+ this.isolatedOutExtract = [];
+ }
+ return RenderGroupNodeInformation;
+ })(RenderNodeInformation);
+ render.RenderGroupNodeInformation = RenderGroupNodeInformation;
+ function setGroupNodeDepth(renderInfo, depth) {
+ if (renderInfo.coreGraph) {
+ setGraphDepth(renderInfo.coreGraph, depth);
+ }
+ }
+ /**
+ * Remove an edge from the graph and add annotations to both ends of the edge.
+ *
+ * @param The core graph.
+ * @param v Source name.
+ * @param w Sink name.
+ */
+ function createShortcut(graph, v, w, params) {
+ var src = graph.node(v);
+ var sink = graph.node(w);
+ var edge = graph.edge(v, w);
+ // Add each annotation.
+ addOutAnnotation(src, sink.node, sink, edge, AnnotationType.SHORTCUT, params);
+ addInAnnotation(sink, src.node, src, edge, AnnotationType.SHORTCUT, params);
+ // Remove the edge from the core graph.
+ graph.removeEdge(v, w);
+ }
+ /**
+ * Remove edges from a node, and set its isOutExtract property to true,
+ * and remove the node and move it to isolatedOutExtract.
+ *
+ * If detachAllEdgesForHighDegree is true, extract all of its edges.
+ * Otherwise, only extract all in-edges.
+ */
+ function makeOutExtract(renderNode, n, params) {
+ var graph = renderNode.coreGraph;
+ graph.node(n).isOutExtract = true;
+ _.each(graph.predecessors(n), function (p, index) {
+ createShortcut(graph, p, n, params);
+ });
+ if (params.detachAllEdgesForHighDegree) {
+ _.each(graph.successors(n), function (s, index) {
+ createShortcut(graph, n, s, params);
+ });
+ }
+ if (params.detachAllEdgesForHighDegree || graph.neighbors(n).length === 0) {
+ renderNode.isolatedOutExtract.push(graph.node(n));
+ graph.removeNode(n);
+ }
+ }
+ /**
+ * Remove edges from a node, set its isInExtract property to true,
+ * and remove the node and move it to isolatedInExtract.
+ * If detachAllEdgesForHighDegree is true, extract all of its edges.
+ * Otherwise, only remove all out-edges.
+ */
+ function makeInExtract(renderNode, n, params) {
+ var graph = renderNode.coreGraph;
+ graph.node(n).isInExtract = true;
+ _.each(graph.successors(n), function (s, index) {
+ createShortcut(graph, n, s, params);
+ });
+ if (params.detachAllEdgesForHighDegree) {
+ _.each(graph.predecessors(n), function (p, index) {
+ createShortcut(graph, p, n, params);
+ });
+ }
+ // Remove the node from the core graph if conditions are met.
+ if (params.detachAllEdgesForHighDegree || graph.neighbors(n).length === 0) {
+ renderNode.isolatedInExtract.push(graph.node(n));
+ graph.removeNode(n);
+ }
+ }
+ /**
+ * Check whether the node's type is a member of the given list of types.
+ *
+ * @param node Node.
+ * @param types List of type to match.
+ */
+ function hasTypeIn(node, types) {
+ if (node.type === graph_1.NodeType.OP) {
+ for (var i = 0; i < types.length; i++) {
+ if (node.op === types[i]) {
+ return true;
+ }
+ }
+ }
+ else if (node.type === graph_1.NodeType.META) {
+ var rootOpNode = node.getRootOp();
+ if (rootOpNode) {
+ for (var i = 0; i < types.length; i++) {
+ if (rootOpNode.op === types[i]) {
+ return true;
+ }
+ }
+ }
+ }
+ return false;
+ }
+ /** Remove edges from pre-defined out-extract patterns */
+ function extractPredefinedSink(renderNode, params) {
+ var graph = renderNode.coreGraph;
+ _.each(graph.nodes(), function (n) {
+ var renderInfo = graph.node(n);
+ if (hasTypeIn(renderInfo.node, params.outExtractTypes)) {
+ makeOutExtract(renderNode, n, params);
+ }
+ });
+ }
+ /** Remove edges from pre-defined in-extract patterns */
+ function extractPredefinedSource(renderNode, params) {
+ var graph = renderNode.coreGraph;
+ _.each(graph.nodes(), function (n) {
+ var renderInfo = graph.node(n);
+ if (hasTypeIn(renderInfo.node, params.inExtractTypes)) {
+ makeInExtract(renderNode, n, params);
+ }
+ });
+ }
+ /** Extract from nodes with in-degree > maxInDegree */
+ function extractHighInDegree(renderNode, params) {
+ var graph = renderNode.coreGraph;
+ var maxInDegree = params.maxInDegree;
+ // detect first so degrees don't get affected by other removal
+ var highInDegreeNames = _.filter(graph.nodes(), function (n) {
+ // Count the in-degree based on only regular edges, unless there are
+ // no regular edges, in which case use the number of control edges.
+ // This is done so that control edges don't effect if nodes are extracted
+ // from the core graph, unless the node is only used for control.
+ var numEdgesToCount = _.reduce(graph.predecessors(n), function (numEdgesToCount, pred) {
+ var metaedge = graph.edge(pred, n).metaedge;
+ return numEdgesToCount + (metaedge.numRegularEdges ? 1 : 0);
+ }, 0);
+ if (numEdgesToCount === 0 && graph.predecessors(n).length > 0) {
+ numEdgesToCount = graph.predecessors(n).length;
+ }
+ return numEdgesToCount > maxInDegree;
+ });
+ _.each(highInDegreeNames, function (n) {
+ makeOutExtract(renderNode, n, params);
+ });
+ }
+ /** Extract nodes with out-degree > maxOutDegree */
+ function extractHighOutDegree(renderNode, params) {
+ var graph = renderNode.coreGraph;
+ var maxOutDegree = params.maxOutDegree;
+ // detect first so degrees don't get affected by other removal
+ var highOutDegreeNames = _.filter(graph.nodes(), function (n) {
+ // Count the out-degree based on only regular edges, unless there are
+ // no regular edges, in which case use the number of control edges.
+ // This is done so that control edges don't effect if nodes are extracted
+ // from the core graph, unless the node is only used for control.
+ var numEdgesToCount = _.reduce(graph.successors(n), function (numEdgesToCount, succ) {
+ var metaedge = graph.edge(n, succ).metaedge;
+ return numEdgesToCount + (metaedge.numRegularEdges ? 1 : 0);
+ }, 0);
+ if (numEdgesToCount === 0 && graph.successors(n).length > 0) {
+ numEdgesToCount = graph.successors(n).length;
+ }
+ return numEdgesToCount > maxOutDegree;
+ });
+ _.each(highOutDegreeNames, function (n) {
+ makeInExtract(renderNode, n, params);
+ });
+ }
+ /** Remove control edges from nodes that have too many control edges */
+ function removeControlEdges(renderNode, params) {
+ var graph = renderNode.coreGraph;
+ // Collect control edges into a map by node name.
+ var map = {};
+ _.each(graph.edges(), function (e) {
+ if (!graph.edge(e).metaedge.numRegularEdges) {
+ (map[e.v] = map[e.v] || []).push(e);
+ (map[e.w] = map[e.w] || []).push(e);
+ }
+ });
+ // For each node with too many control edges, turn them into annotations.
+ _.each(map, function (edges, nodeName) {
+ if (edges.length > params.maxControlDegree) {
+ _.each(edges, function (e) { return createShortcut(graph, e.v, e.w, params); });
+ }
+ });
+ }
+ /**
+ * Given an integer, picks a hue that is far apart from other colors.
+ * The formula for picking color that avoid collision is:
+ * hue = (color range * golden ratio * index) % color range
+ */
+ function mapIndexToHue(id) {
+ var GOLDEN_RATIO = 1.61803398875;
+ // Hue of 0 is reserved for the gray nodes.
+ var MIN_HUE = 1;
+ var MAX_HUE = 359;
+ var COLOR_RANGE = MAX_HUE - MIN_HUE;
+ return MIN_HUE + ((COLOR_RANGE * GOLDEN_RATIO * id) % COLOR_RANGE);
+ }
+ render.mapIndexToHue = mapIndexToHue;
+ ;
+ /**
+ * Remove edges and add to annotation instead.
+ *
+ * For root node, consider predefined types for source and sink.
+ * We do not extract predefined type from non-root so that Variables and the
+ * sgd node (op type = "NoOp") do not get extract from inside own group.
+ *
+ * The order of extraction is important here as swapping the order can totally
+ * screw up the graph layout.
+ *
+ * @param {Render.Node} renderNode Node to manipulate.
+ * @param {Object} params render Graph construction parameters. See
+ * <tf-graph-params>'s output
+ */
+ function extractHighDegrees(renderNode, params) {
+ if (params.outExtractTypes) {
+ extractPredefinedSink(renderNode, params);
+ }
+ // This has to come before extract high in-degree to protect the core part
+ // that takes many variables.
+ if (params.inExtractTypes) {
+ extractPredefinedSource(renderNode, params);
+ }
+ // This has to come before extract high out-degree to protect the core part
+ // that output to many places as there are more high-degree sinks than
+ // sources.
+ if (params.maxInDegree) {
+ extractHighInDegree(renderNode, params);
+ }
+ if (params.maxOutDegree) {
+ extractHighOutDegree(renderNode, params);
+ }
+ if (params.maxControlDegree) {
+ removeControlEdges(renderNode, params);
+ }
+ // Extract isolated nodes, which can be
+ // (1) source-like and sink-like nodes that are not originally isolated but
+ // become isolated after further removal.
+ // (2) isolated nodes with annotations on one-side. These might be either
+ // - nodes that originally have high out-degree but because we remove
+ // high in-degree nodes first, they no longer have high in-degree when
+ // we check. (Detecting all high-degree before removing also leads to
+ // another problem.)
+ // - nodes that do not have high degree, but their neighbors are all
+ // extracted, so it might make sense to extract them too.
+ var graph = renderNode.coreGraph;
+ _.each(graph.nodes(), function (n) {
+ var child = graph.node(n);
+ var degree = graph.neighbors(n).length;
+ if (degree === 0) {
+ var hasOutAnnotations = child.outAnnotations.list.length > 0;
+ var hasInAnnotations = child.inAnnotations.list.length > 0;
+ if (child.isInExtract) {
+ // This case only happens if detachAllEdgesForHighDegree is false.
+ // (Otherwise all source-like nodes are all isolated already.)
+ renderNode.isolatedInExtract.push(child);
+ graph.removeNode(n);
+ }
+ else if (child.isOutExtract) {
+ // This case only happens if detachAllEdgesForHighDegree is false.
+ // // (Otherwise all sink-like nodes are all isolated already.)
+ renderNode.isolatedOutExtract.push(child);
+ graph.removeNode(n);
+ }
+ else if (params.extractIsolatedNodesWithAnnotationsOnOneSide) {
+ if (hasOutAnnotations && !hasInAnnotations) {
+ child.isInExtract = true; // for ones with high out-annotations
+ renderNode.isolatedInExtract.push(child);
+ graph.removeNode(n);
+ }
+ else if (hasInAnnotations && !hasOutAnnotations) {
+ child.isOutExtract = true; // for ones with high in-annotations
+ renderNode.isolatedOutExtract.push(child);
+ graph.removeNode(n);
+ }
+ else {
+ }
+ }
+ }
+ });
+ }
+ })(render = graph_1.render || (graph_1.render = {}));
+ })(graph = tf.graph || (tf.graph = {}));
+})(tf || (tf = {})); // close module tf.graph.render
+</script>
+<script>/// <reference path="graph.ts" />
+/// <reference path="hierarchy.ts" />
+var tf;
+(function (tf) {
+ var graph;
+ (function (graph_1) {
+ var template;
+ (function (template) {
+ /**
+ * Detect repeating patterns of subgraphs.
+ * Assign templateId to each subgraph if it belongs to a template.
+ * Returns clusters of similar subgraphs .
+ *
+ * @param graph
+ * @param verifyTemplate whether to run the template verification algorithm
+ * @return a dict (template id => Array of node names)
+ */
+ function detect(h, verifyTemplate) {
+ // In any particular subgraph, there are either
+ // - leaf nodes (which do not have subgraph)
+ // - metanode nodes - some of them have only one member (singular metanode)
+ // and some have multiple members (non-singular metanode)
+ // First, generate a nearest neighbor hash of metanode nodes.
+ var nnGroups = clusterSimilarSubgraphs(h);
+ // For each metanode, compare its subgraph (starting from shallower groups)
+ // and assign template id.
+ var templates = groupTemplateAndAssignId(nnGroups, verifyTemplate);
+ // Sort the templates by minimum level in the graph at which they appear,
+ // as this leads to optimal setting of the colors of each template for
+ // maximum differentiation.
+ return _(templates).pairs()
+ .sortBy(function (pair) {
+ return pair[1].level;
+ })
+ .map(function (pair) {
+ return [pair[0], pair[1].nodes];
+ })
+ .object().value();
+ }
+ template.detect = detect;
+ ;
+ /**
+ * @return Unique string for a metanode based on depth, |V|, |E| and
+ * op type histogram.
+ */
+ function getSignature(metanode) {
+ // depth=<number> |V|=<number> |E|=<number>
+ var props = _.map({
+ "depth": metanode.depth,
+ "|V|": metanode.metagraph.nodes().length,
+ "|E|": metanode.metagraph.edges().length
+ }, function (v, k) { return k + "=" + v; }).join(" ");
+ // optype1=count1,optype2=count2
+ var ops = _.map(metanode.opHistogram, function (count, op) {
+ return op + "=" + count;
+ }).join(",");
+ return props + " [ops] " + ops;
+ }
+ /**
+ * Generate a nearest neighbor hash of metanodes
+ * based on depth, |V|, |E|, and opHistogram of their subgraph
+ * (excluding leaf nodes and singular metanodes).
+ * @param graph The graph
+ * @return Array of pairs of [signature,
+ * Object with min level of the template and an Array of tf.graph.Group]
+ * sort by ascending order of minimum depth at which metanode appears.
+ */
+ function clusterSimilarSubgraphs(h) {
+ /** a dict from metanode.signature() => Array of tf.graph.Groups */
+ var hashDict = _(h.getNodeMap()).reduce(function (hash, node, name) {
+ if (node.type !== graph_1.NodeType.META) {
+ return hash;
+ }
+ var levelOfMetaNode = name.split("/").length - 1;
+ var signature = getSignature(node);
+ var templateInfo = hash[signature] ||
+ { nodes: [], level: levelOfMetaNode };
+ hash[signature] = templateInfo;
+ templateInfo.nodes.push(node);
+ if (templateInfo.level > levelOfMetaNode) {
+ templateInfo.level = levelOfMetaNode;
+ }
+ return hash;
+ }, {});
+ return _(hashDict).pairs()
+ .filter(function (pair) {
+ return pair[1].nodes.length > 1;
+ })
+ .sortBy(function (pair) {
+ // sort by depth
+ // (all members in the same nnGroup has equal depth)
+ return pair[1].nodes[0].depth;
+ })
+ .value();
+ }
+ function groupTemplateAndAssignId(nnGroups, verifyTemplate) {
+ // For each metanode, compare its subgraph (starting from shallower groups)
+ // and assign template id.
+ return _.reduce(nnGroups, function (templates, nnGroupPair) {
+ var signature = nnGroupPair[0], nnGroup = nnGroupPair[1].nodes, clusters = [];
+ nnGroup.forEach(function (metanode) {
+ // check with each existing cluster
+ for (var i = 0; i < clusters.length; i++) {
+ var similar = !verifyTemplate ||
+ isSimilarSubgraph(clusters[i].metanode.metagraph, metanode.metagraph);
+ // if similar, just add this metanode to the cluster
+ if (similar) {
+ // get template from the first one
+ metanode.templateId = clusters[i].metanode.templateId;
+ clusters[i].members.push(metanode.name);
+ return;
+ }
+ }
+ // otherwise create a new cluster with id "signature [count] "
+ metanode.templateId = signature + "[" + clusters.length + "]";
+ clusters.push({
+ metanode: metanode,
+ members: [metanode.name]
+ });
+ });
+ clusters.forEach(function (c) {
+ templates[c.metanode.templateId] = {
+ level: nnGroupPair[1].level,
+ nodes: c.members
+ };
+ });
+ return templates;
+ }, {});
+ }
+ function sortNodes(names, graph, prefix) {
+ return _.sortByAll(names, function (name) {
+ var node = graph.node(name);
+ return node.op;
+ }, function (name) {
+ var node = graph.node(name);
+ return node.templateId;
+ }, function (name) {
+ return graph.neighbors(name).length;
+ }, function (name) {
+ return graph.predecessors(name).length;
+ }, function (name) {
+ return graph.successors(name).length;
+ }, function (name) {
+ return name.substr(prefix.length);
+ });
+ }
+ function isSimilarSubgraph(g1, g2) {
+ if (!tf.graph.hasSimilarDegreeSequence(g1, g2)) {
+ return false;
+ }
+ // if we want to skip, just return true here.
+ // return true;
+ // Verify sequence by running DFS
+ var g1prefix = g1.graph().name;
+ var g2prefix = g2.graph().name;
+ var visited1 = {};
+ var visited2 = {};
+ var stack = [];
+ /**
+ * push sources or successors into the stack
+ * if the visiting pattern has been similar.
+ */
+ function stackPushIfNotDifferent(n1, n2) {
+ var sub1 = n1.substr(g1prefix.length), sub2 = n2.substr(g2prefix.length);
+ /* tslint:disable */
+ if (visited1[sub1] ^ visited2[sub1]) {
+ console.warn("different visit pattern", "[" + g1prefix + "]", sub1, "[" + g2prefix + "]", sub2);
+ return true;
+ }
+ /* tslint:enable */
+ if (!visited1[sub1]) {
+ visited1[sub1] = visited2[sub2] = true;
+ stack.push({ n1: n1, n2: n2 });
+ }
+ return false;
+ }
+ // check if have same # of sources then sort and push
+ var sources1 = g1.sources();
+ var sources2 = g2.sources();
+ if (sources1.length !== sources2.length) {
+ /* tslint:disable */
+ console.log("different source length");
+ /* tslint:enable */
+ return false;
+ }
+ sources1 = sortNodes(sources1, g1, g1prefix);
+ sources2 = sortNodes(sources2, g2, g2prefix);
+ for (var i = 0; i < sources1.length; i++) {
+ var different = stackPushIfNotDifferent(sources1[i], sources2[i]);
+ if (different) {
+ return false;
+ }
+ }
+ while (stack.length > 0) {
+ var cur = stack.pop();
+ // check node
+ var similar = isSimilarNode(g1.node(cur.n1), g2.node(cur.n2));
+ if (!similar) {
+ return false;
+ }
+ // check if have same # of successors then sort and push
+ var succ1 = g1.successors(cur.n1), succ2 = g2.successors(cur.n2);
+ if (succ1.length !== succ2.length) {
+ /* tslint:disable */
+ console.log("# of successors mismatch", succ1, succ2);
+ /* tslint:enable */
+ return false;
+ }
+ succ1 = sortNodes(succ1, g1, g1prefix);
+ succ2 = sortNodes(succ2, g2, g2prefix);
+ for (var j = 0; j < succ1.length; j++) {
+ var different = stackPushIfNotDifferent(succ1[j], succ2[j]);
+ if (different) {
+ return false;
+ }
+ }
+ }
+ return true;
+ }
+ /**
+ * Returns if two nodes have identical structure.
+ */
+ function isSimilarNode(n1, n2) {
+ if (n1.type === graph_1.NodeType.META) {
+ // compare metanode
+ var metanode1 = n1;
+ var metanode2 = n2;
+ return metanode1.templateId && metanode2.templateId && metanode1.templateId === metanode2.templateId;
+ }
+ else if (n1.type === graph_1.NodeType.OP && n2.type === graph_1.NodeType.OP) {
+ // compare leaf node
+ return n1.op === n2.op;
+ }
+ else if (n1.type === graph_1.NodeType.SERIES && n2.type === graph_1.NodeType.SERIES) {
+ // compare series node sizes and operations
+ // (only need to check one op as all op nodes are identical in series)
+ var seriesnode1 = n1;
+ var seriesnode2 = n2;
+ var seriesnode1Count = seriesnode1.metagraph.nodeCount();
+ return (seriesnode1Count === seriesnode2.metagraph.nodeCount() &&
+ (seriesnode1Count === 0 ||
+ (seriesnode1.metagraph.node(seriesnode1.metagraph.nodes()[0]).op ===
+ seriesnode2.metagraph.node(seriesnode2.metagraph.nodes()[0]).op)));
+ }
+ return false;
+ }
+ })(template = graph_1.template || (graph_1.template = {}));
+ })(graph = tf.graph || (tf.graph = {}));
+})(tf || (tf = {}));
+</script>
+<script>/// <reference path="../graph.ts" />
+/// <reference path="edge.ts" />
+/// <reference path="node.ts" />
+/// <reference path="../layout.ts" />
+var tf;
+(function (tf) {
+ var graph;
+ (function (graph) {
+ var scene;
+ (function (scene) {
+ /** Enums element class of objects in the scene */
+ scene.Class = {
+ Node: {
+ // <g> element that contains nodes.
+ CONTAINER: "nodes",
+ // <g> element that contains detail about a node.
+ GROUP: "node",
+ // <g> element that contains visual elements (like rect, ellipse).
+ SHAPE: "nodeshape",
+ // <*> element(s) under SHAPE that should receive color updates.
+ COLOR_TARGET: "nodecolortarget",
+ // <text> element showing the node's label.
+ LABEL: "nodelabel",
+ // <g> element that contains all visuals for the expand/collapse
+ // button for expandable group nodes.
+ BUTTON_CONTAINER: "buttoncontainer",
+ // <circle> element that surrounds expand/collapse buttons.
+ BUTTON_CIRCLE: "buttoncircle",
+ // <path> element of the expand button.
+ EXPAND_BUTTON: "expandbutton",
+ // <path> element of the collapse button.
+ COLLAPSE_BUTTON: "collapsebutton"
+ },
+ Edge: {
+ CONTAINER: "edges",
+ GROUP: "edge",
+ LINE: "edgeline",
+ REF_LINE: "refline",
+ STRUCTURAL: "structural"
+ },
+ Annotation: {
+ OUTBOX: "out-annotations",
+ INBOX: "in-annotations",
+ GROUP: "annotation",
+ NODE: "annotation-node",
+ EDGE: "annotation-edge",
+ CONTROL_EDGE: "annotation-control-edge",
+ LABEL: "annotation-label",
+ ELLIPSIS: "annotation-ellipsis"
+ },
+ Scene: {
+ GROUP: "scene",
+ CORE: "core",
+ INEXTRACT: "in-extract",
+ OUTEXTRACT: "out-extract"
+ },
+ Subscene: {
+ GROUP: "subscene"
+ },
+ OPNODE: "op",
+ METANODE: "meta",
+ SERIESNODE: "series",
+ BRIDGENODE: "bridge",
+ ELLIPSISNODE: "ellipsis"
+ };
+ /**
+ * Helper method for fitting the graph in the svg view.
+ *
+ * @param svg The main svg.
+ * @param zoomG The svg group used for panning and zooming.
+ * @param d3zoom The zoom behavior.
+ * @param callback Called when the fitting is done.
+ */
+ function fit(svg, zoomG, d3zoom, callback) {
+ var svgRect = svg.getBoundingClientRect();
+ var sceneSize = zoomG.getBBox();
+ var scale = 0.9 * Math.min(svgRect.width / sceneSize.width, svgRect.height / sceneSize.height, 2);
+ var params = graph.layout.PARAMS.graph;
+ var zoomEvent = d3zoom.scale(scale)
+ .on("zoomend.fitted", function () {
+ // Remove the listener for the zoomend event,
+ // so we don't get called at the end of regular zoom events,
+ // just those that fit the graph to screen.
+ d3zoom.on("zoomend.fitted", null);
+ callback();
+ })
+ .translate([params.padding.paddingLeft, params.padding.paddingTop])
+ .event;
+ d3.select(zoomG).transition().duration(500).call(zoomEvent);
+ }
+ scene.fit = fit;
+ ;
+ /**
+ * Helper method for panning the graph to center on the provided node,
+ * if the node is currently off-screen.
+ *
+ * @param nodeName The node to center the graph on
+ * @param svg The root SVG element for the graph
+ * @param zoomG The svg group used for panning and zooming.
+ * @param d3zoom The zoom behavior.
+ * @return True if the graph had to be panned to display the
+ * provided node.
+ */
+ function panToNode(nodeName, svg, zoomG, d3zoom) {
+ var node = d3.selectAll("[data-name='" + nodeName + "']."
+ + scene.Class.Node.GROUP)[0][0];
+ if (!node) {
+ return false;
+ }
+ var translate = d3zoom.translate();
+ // Check if the selected node is off-screen in either
+ // X or Y dimension in either direction.
+ var nodeBox = node.getBBox();
+ var nodeCtm = node.getScreenCTM();
+ var pointTL = svg.createSVGPoint();
+ var pointBR = svg.createSVGPoint();
+ pointTL.x = nodeBox.x;
+ pointTL.y = nodeBox.y;
+ pointBR.x = nodeBox.x + nodeBox.width;
+ pointBR.y = nodeBox.y + nodeBox.height;
+ pointTL = pointTL.matrixTransform(nodeCtm);
+ pointBR = pointBR.matrixTransform(nodeCtm);
+ var isOutsideOfBounds = function (start, end, bound) {
+ return end < 0 || start > bound;
+ };
+ var svgRect = svg.getBoundingClientRect();
+ if (isOutsideOfBounds(pointTL.x, pointBR.x, svgRect.width) ||
+ isOutsideOfBounds(pointTL.y, pointBR.y, svgRect.height)) {
+ // Determine the amount to transform the graph in both X and Y
+ // dimensions in order to center the selected node. This takes into
+ // acount the position of the node, the size of the svg scene, the
+ // amount the scene has been scaled by through zooming, and any previous
+ // transform already performed by this logic.
+ var centerX = (pointTL.x + pointBR.x) / 2;
+ var centerY = (pointTL.y + pointBR.y) / 2;
+ var dx = ((svgRect.width / 2) - centerX);
+ var dy = ((svgRect.height / 2) - centerY);
+ var zoomEvent = d3zoom.translate([translate[0] + dx, translate[1] + dy])
+ .event;
+ d3.select(zoomG).transition().duration(500).call(zoomEvent);
+ return true;
+ }
+ return false;
+ }
+ scene.panToNode = panToNode;
+ ;
+ /**
+ * Given a container d3 selection, select a child svg element of a given tag
+ * and class if exists or append / insert one otherwise. If multiple children
+ * matches the tag and class name, returns only the first one.
+ *
+ * @param container
+ * @param tagName tag name.
+ * @param className (optional) Class name.
+ * @param before (optional) reference DOM node for insertion.
+ * @return selection of the element
+ */
+ function selectOrCreateChild(container, tagName, className, before) {
+ var child = selectChild(container, tagName, className);
+ if (!child.empty()) {
+ return child;
+ }
+ var newElement = document.createElementNS("http://www.w3.org/2000/svg", tagName);
+ if (className) {
+ newElement.classList.add(className);
+ }
+ if (before) {
+ container.node().insertBefore(newElement, before);
+ }
+ else {
+ container.node().appendChild(newElement);
+ }
+ return d3.select(newElement)
+ .datum(container.datum());
+ }
+ scene.selectOrCreateChild = selectOrCreateChild;
+ ;
+ /**
+ * Given a container d3 selection, select a child element of a given tag and
+ * class. If multiple children matches the tag and class name, returns only
+ * the first one.
+ *
+ * @param container
+ * @param tagName tag name.
+ * @param className (optional) Class name.
+ * @return selection of the element, or an empty selection
+ */
+ function selectChild(container, tagName, className) {
+ var children = container.node().childNodes;
+ for (var i = 0; i < children.length; i++) {
+ var child = children[i];
+ if (child.tagName === tagName &&
+ (!className || child.classList.contains(className))) {
+ return d3.select(child);
+ }
+ }
+ return d3.select(null);
+ }
+ scene.selectChild = selectChild;
+ ;
+ /**
+ * Select or create a sceneGroup and build/update its nodes and edges.
+ *
+ * Structure Pattern:
+ *
+ * <g class="scene">
+ * <g class="core">
+ * <g class="edges">
+ * ... stuff from tf.graph.scene.edges.build ...
+ * </g>
+ * <g class="nodes">
+ * ... stuff from tf.graph.scene.nodes.build ...
+ * </g>
+ * </g>
+ * <g class="in-extract">
+ * <g class="nodes">
+ * ... stuff from tf.graph.scene.nodes.build ...
+ * </g>
+ * </g>
+ * <g class="out-extract">
+ * <g class="nodes">
+ * ... stuff from tf.graph.scene.nodes.build ...
+ * </g>
+ * </g>
+ * </g>
+ *
+ * @param container D3 selection of the parent.
+ * @param renderNode render node of a metanode or series node.
+ * @param sceneBehavior Parent scene module.
+ * @param sceneClass class attribute of the scene (default="scene").
+ */
+ function buildGroup(container, renderNode, sceneBehavior, sceneClass) {
+ sceneClass = sceneClass || scene.Class.Scene.GROUP;
+ var isNewSceneGroup = selectChild(container, "g", sceneClass).empty();
+ var sceneGroup = selectOrCreateChild(container, "g", sceneClass);
+ // core
+ var coreGroup = selectOrCreateChild(sceneGroup, "g", scene.Class.Scene.CORE);
+ var coreNodes = _.reduce(renderNode.coreGraph.nodes(), function (nodes, name) {
+ var node = renderNode.coreGraph.node(name);
+ if (!node.excluded) {
+ nodes.push(node);
+ }
+ return nodes;
+ }, []);
+ if (renderNode.node.type === graph.NodeType.SERIES) {
+ // For series, we want the first item on top, so reverse the array so
+ // the first item in the series becomes last item in the top, and thus
+ // is rendered on the top.
+ coreNodes.reverse();
+ }
+ // Create the layer of edges for this scene (paths).
+ scene.edge.buildGroup(coreGroup, renderNode.coreGraph, sceneBehavior);
+ // Create the layer of nodes for this scene (ellipses, rects etc).
+ scene.node.buildGroup(coreGroup, coreNodes, sceneBehavior);
+ // In-extract
+ if (renderNode.isolatedInExtract.length > 0) {
+ var inExtractGroup = selectOrCreateChild(sceneGroup, "g", scene.Class.Scene.INEXTRACT);
+ scene.node.buildGroup(inExtractGroup, renderNode.isolatedInExtract, sceneBehavior);
+ }
+ else {
+ selectChild(sceneGroup, "g", scene.Class.Scene.INEXTRACT).remove();
+ }
+ // Out-extract
+ if (renderNode.isolatedOutExtract.length > 0) {
+ var outExtractGroup = selectOrCreateChild(sceneGroup, "g", scene.Class.Scene.OUTEXTRACT);
+ scene.node.buildGroup(outExtractGroup, renderNode.isolatedOutExtract, sceneBehavior);
+ }
+ else {
+ selectChild(sceneGroup, "g", scene.Class.Scene.OUTEXTRACT).remove();
+ }
+ position(sceneGroup, renderNode);
+ // Fade in the scene group if it didn't already exist.
+ if (isNewSceneGroup) {
+ sceneGroup.attr("opacity", 0)
+ .transition().attr("opacity", 1);
+ }
+ return sceneGroup;
+ }
+ scene.buildGroup = buildGroup;
+ ;
+ /**
+ * Given a scene's svg group, set g.in-extract, g.coreGraph, g.out-extract svg
+ * groups' position relative to the scene.
+ *
+ * @param sceneGroup
+ * @param renderNode render node of a metanode or series node.
+ */
+ function position(sceneGroup, renderNode) {
+ // Translate scenes down by the label height so that when showing graphs in
+ // expanded metanodes, the graphs are below the labels. Do not shift them
+ // down for series nodes as series nodes don't have labels inside of their
+ // bounding boxes.
+ var yTranslate = renderNode.node.type === graph.NodeType.SERIES ?
+ 0 : graph.layout.PARAMS.subscene.meta.labelHeight;
+ // core
+ translate(selectChild(sceneGroup, "g", scene.Class.Scene.CORE), 0, yTranslate);
+ // in-extract
+ var inExtractX = renderNode.coreBox.width === 0 ?
+ 0 : renderNode.coreBox.width;
+ var hasInExtract = renderNode.isolatedInExtract.length > 0;
+ if (hasInExtract) {
+ translate(selectChild(sceneGroup, "g", scene.Class.Scene.INEXTRACT), inExtractX, yTranslate);
+ }
+ // out-extract
+ var hasOutExtract = renderNode.isolatedOutExtract.length > 0;
+ if (hasOutExtract) {
+ var outExtractX = inExtractX + renderNode.inExtractBox.width
+ + renderNode.extractXOffset;
+ translate(selectChild(sceneGroup, "g", scene.Class.Scene.OUTEXTRACT), outExtractX, yTranslate);
+ }
+ }
+ ;
+ /** Adds a click listener to a group that fires a graph-select event */
+ function addGraphClickListener(graphGroup, sceneBehavior) {
+ d3.select(graphGroup).on("click", function () {
+ sceneBehavior.fire("graph-select");
+ });
+ }
+ scene.addGraphClickListener = addGraphClickListener;
+ ;
+ /** Helper for adding transform: translate(x0, y0) */
+ function translate(selection, x0, y0) {
+ selection.attr("transform", "translate(" + x0 + "," + y0 + ")");
+ }
+ scene.translate = translate;
+ ;
+ /**
+ * Helper for setting position of a svg rect
+ * @param rect rect to set position of.
+ * @param cx Center x.
+ * @param cy Center x.
+ * @param width Width to set.
+ * @param height Height to set.
+ */
+ function positionRect(rect, cx, cy, width, height) {
+ rect.transition().attr({
+ x: cx - width / 2,
+ y: cy - height / 2,
+ width: width,
+ height: height
+ });
+ }
+ scene.positionRect = positionRect;
+ ;
+ /**
+ * Helper for setting position of a svg expand/collapse button
+ * @param button container group
+ * @param renderNode the render node of the group node to position
+ * the button on.
+ */
+ function positionButton(button, renderNode) {
+ // Position the button in the top-right corner of the group node,
+ // with space given the draw the button inside of the corner.
+ var x = renderNode.x + renderNode.width / 2 - 6;
+ var y = renderNode.y - renderNode.height / 2 + 6;
+ // For unexpanded series nodes, the button has special placement due
+ // to the unique visuals of this group node.
+ if (renderNode.node.type === graph.NodeType.SERIES && !renderNode.expanded) {
+ x += 10;
+ y -= 2;
+ }
+ var translateStr = "translate(" + x + "," + y + ")";
+ button.selectAll("path").transition().attr("transform", translateStr);
+ button.select("circle").transition().attr({
+ cx: x,
+ cy: y,
+ r: graph.layout.PARAMS.nodeSize.meta.expandButtonRadius
+ });
+ }
+ scene.positionButton = positionButton;
+ ;
+ /**
+ * Helper for setting position of a svg ellipse
+ * @param ellipse ellipse to set position of.
+ * @param cx Center x.
+ * @param cy Center x.
+ * @param width Width to set.
+ * @param height Height to set.
+ */
+ function positionEllipse(ellipse, cx, cy, width, height) {
+ ellipse.transition().attr({
+ cx: cx,
+ cy: cy,
+ rx: width / 2,
+ ry: height / 2
+ });
+ }
+ scene.positionEllipse = positionEllipse;
+ ;
+ })(scene = graph.scene || (graph.scene = {}));
+ })(graph = tf.graph || (tf.graph = {}));
+})(tf || (tf = {})); // close module
+</script>
+<script>/// <reference path="../graph.ts" />
+/// <reference path="../render.ts" />
+/// <reference path="scene.ts" />
+/// <reference path="edge.ts" />
+var tf;
+(function (tf) {
+ var graph;
+ (function (graph) {
+ var scene;
+ (function (scene) {
+ var annotation;
+ (function (annotation) {
+ /**
+ * Populate a given annotation container group
+ *
+ * <g class="{in|out}-annotations"></g>
+ *
+ * with annotation group of the following structure:
+ *
+ * <g class="annotation">
+ * <g class="annotation-node">
+ * <!--
+ * Content here determined by Scene.node.buildGroup.
+ * -->
+ * </g>
+ * </g>
+ *
+ * @param container selection of the container.
+ * @param annotationData node.{in|out}Annotations
+ * @param d node to build group for.
+ * @param sceneBehavior polymer scene element.
+ * @return selection of appended objects
+ */
+ function buildGroup(container, annotationData, d, sceneBehavior) {
+ // Select all children and join with data.
+ var annotationGroups = container.selectAll(function () {
+ // using d3's selector function
+ // See https://github.com/mbostock/d3/releases/tag/v2.0.0
+ // (It's not listed in the d3 wiki.)
+ return this.childNodes;
+ })
+ .data(annotationData.list, function (d) { return d.node.name; });
+ annotationGroups.enter()
+ .append("g")
+ .attr("data-name", function (a) { return a.node.name; })
+ .each(function (a) {
+ var aGroup = d3.select(this);
+ // Add annotation to the index in the scene
+ sceneBehavior.addAnnotationGroup(a, d, aGroup);
+ // Append annotation edge
+ var edgeType = scene.Class.Annotation.EDGE;
+ var metaedge = a.renderMetaedgeInfo && a.renderMetaedgeInfo.metaedge;
+ if (metaedge && !metaedge.numRegularEdges) {
+ edgeType += " " + scene.Class.Annotation.CONTROL_EDGE;
+ }
+ // If any edges are reference edges, add the reference edge class.
+ if (metaedge && metaedge.numRefEdges) {
+ edgeType += " " + scene.Class.Edge.REF_LINE;
+ }
+ scene.edge.appendEdge(aGroup, a, sceneBehavior, edgeType);
+ if (a.annotationType !== tf.graph.render.AnnotationType.ELLIPSIS) {
+ addAnnotationLabelFromNode(aGroup, a);
+ buildShape(aGroup, a, sceneBehavior);
+ }
+ else {
+ addAnnotationLabel(aGroup, a.node.name, a, scene.Class.Annotation.ELLIPSIS);
+ }
+ });
+ annotationGroups
+ .attr("class", function (a) {
+ return scene.Class.Annotation.GROUP + " " +
+ annotationToClassName(a.annotationType) +
+ " " + scene.node.nodeClass(a);
+ })
+ .each(function (a) {
+ var aGroup = d3.select(this);
+ update(aGroup, d, a, sceneBehavior);
+ if (a.annotationType !== tf.graph.render.AnnotationType.ELLIPSIS) {
+ addInteraction(aGroup, d, sceneBehavior);
+ }
+ });
+ annotationGroups.exit()
+ .each(function (a) {
+ var aGroup = d3.select(this);
+ // Remove annotation from the index in the scene
+ sceneBehavior.removeAnnotationGroup(a, d, aGroup);
+ })
+ .remove();
+ return annotationGroups;
+ }
+ annotation.buildGroup = buildGroup;
+ ;
+ /**
+ * Maps an annotation enum to a class name used in css rules.
+ */
+ function annotationToClassName(annotationType) {
+ return (tf.graph.render.AnnotationType[annotationType] || "")
+ .toLowerCase() || null;
+ }
+ function buildShape(aGroup, a, sceneBehavior) {
+ if (a.annotationType === tf.graph.render.AnnotationType.SUMMARY) {
+ var image = scene.selectOrCreateChild(aGroup, "image");
+ image.attr({
+ "xlink:href": sceneBehavior.resolveUrl("../../lib/svg/summary-icon.svg"),
+ "height": "12px",
+ "width": "12px",
+ "cursor": "pointer"
+ });
+ }
+ else {
+ var shape = scene.node.buildShape(aGroup, a, scene.Class.Annotation.NODE);
+ // add title tag to get native tooltips
+ scene.selectOrCreateChild(shape, "title").text(a.node.name);
+ }
+ }
+ function addAnnotationLabelFromNode(aGroup, a) {
+ var namePath = a.node.name.split("/");
+ var text = namePath[namePath.length - 1];
+ var shortenedText = text.length > 8 ? text.substring(0, 8) + "..." : text;
+ return addAnnotationLabel(aGroup, shortenedText, a, null, text);
+ }
+ function addAnnotationLabel(aGroup, label, a, additionalClassNames, fullLabel) {
+ var classNames = scene.Class.Annotation.LABEL;
+ if (additionalClassNames) {
+ classNames += " " + additionalClassNames;
+ }
+ var titleText = fullLabel ? fullLabel : label;
+ return aGroup.append("text")
+ .attr("class", classNames)
+ .attr("dy", ".35em")
+ .attr("text-anchor", a.isIn ? "end" : "start")
+ .text(label)
+ .append("title").text(titleText);
+ }
+ function addInteraction(selection, d, sceneBehavior) {
+ selection
+ .on("mouseover", function (a) {
+ sceneBehavior.fire("annotation-highlight", {
+ name: a.node.name,
+ hostName: d.node.name
+ });
+ })
+ .on("mouseout", function (a) {
+ sceneBehavior.fire("annotation-unhighlight", {
+ name: a.node.name,
+ hostName: d.node.name
+ });
+ })
+ .on("click", function (a) {
+ // Stop this event"s propagation so that it isn't also considered a
+ // graph-select.
+ d3.event.stopPropagation();
+ sceneBehavior.fire("annotation-select", {
+ name: a.node.name,
+ hostName: d.node.name
+ });
+ });
+ }
+ ;
+ /**
+ * Adjust annotation's position.
+ *
+ * @param aGroup selection of a "g.annotation" element.
+ * @param d Host node data.
+ * @param a annotation node data.
+ * @param scene Polymer scene element.
+ */
+ function update(aGroup, d, a, sceneBehavior) {
+ // Annotations that point to embedded nodes (constants,summary)
+ // don't have a render information attached so we don't stylize these.
+ // Also we don't stylize ellipsis annotations (the string "... and X more").
+ if (a.renderNodeInfo &&
+ a.annotationType !== tf.graph.render.AnnotationType.ELLIPSIS) {
+ scene.node.stylize(aGroup, a.renderNodeInfo, sceneBehavior, scene.Class.Annotation.NODE);
+ }
+ if (a.annotationType === tf.graph.render.AnnotationType.SUMMARY) {
+ // Update the width of the annotation to give space for the image.
+ a.width += 10;
+ }
+ // label position
+ aGroup.select("text." + scene.Class.Annotation.LABEL).transition().attr({
+ x: d.x + a.dx + (a.isIn ? -1 : 1) * (a.width / 2 + a.labelOffset),
+ y: d.y + a.dy
+ });
+ // Some annotations (such as summary) are represented using a 12x12 image tag.
+ // Purposely ommited units (e.g. pixels) since the images are vector graphics.
+ // If there is an image, we adjust the location of the image to be vertically
+ // centered with the node and horizontally centered between the arrow and the
+ // text label.
+ aGroup.select("image").transition().attr({
+ x: d.x + a.dx - 3,
+ y: d.y + a.dy - 6
+ });
+ // Node position (only one of the shape selection will be non-empty.)
+ scene.positionEllipse(aGroup.select("." + scene.Class.Annotation.NODE + " ellipse"), d.x + a.dx, d.y + a.dy, a.width, a.height);
+ scene.positionRect(aGroup.select("." + scene.Class.Annotation.NODE + " rect"), d.x + a.dx, d.y + a.dy, a.width, a.height);
+ scene.positionRect(aGroup.select("." + scene.Class.Annotation.NODE + " use"), d.x + a.dx, d.y + a.dy, a.width, a.height);
+ // Edge position
+ aGroup.select("path." + scene.Class.Annotation.EDGE).transition().attr("d", function (a) {
+ // map relative position to absolute position
+ var points = a.points.map(function (p) {
+ return { x: p.dx + d.x, y: p.dy + d.y };
+ });
+ return scene.edge.interpolate(points);
+ });
+ }
+ ;
+ })(annotation = scene.annotation || (scene.annotation = {}));
+ })(scene = graph.scene || (graph.scene = {}));
+ })(graph = tf.graph || (tf.graph = {}));
+})(tf || (tf = {})); // close module
+</script>
+<script>/// <reference path="../graph.ts" />
+/// <reference path="../render.ts" />
+/// <reference path="scene.ts" />
+var tf;
+(function (tf) {
+ var graph;
+ (function (graph_1) {
+ var scene;
+ (function (scene) {
+ var edge;
+ (function (edge) {
+ var Scene = tf.graph.scene; // Aliased
+ function getEdgeKey(edgeObj) {
+ return edgeObj.v + tf.graph.EDGE_KEY_DELIM + edgeObj.w;
+ }
+ edge.getEdgeKey = getEdgeKey;
+ /**
+ * Select or Create a "g.edges" group to a given sceneGroup
+ * and builds a number of "g.edge" groups inside the group.
+ *
+ * Structure Pattern:
+ *
+ * <g class="edges">
+ * <g class="edge">
+ * <path class="edgeline"/>
+ * </g>
+ * ...
+ * </g>
+ *
+ *
+ * @param sceneGroup container
+ * @param graph
+ * @param sceneBehavior Parent scene module.
+ * @return selection of the created nodeGroups
+ */
+ function buildGroup(sceneGroup, graph, sceneBehavior) {
+ var edgeData = _.reduce(graph.edges(), function (edges, edgeObj) {
+ var edgeLabel = graph.edge(edgeObj);
+ edges.push({
+ v: edgeObj.v,
+ w: edgeObj.w,
+ label: edgeLabel
+ });
+ return edges;
+ }, []);
+ var container = scene.selectOrCreateChild(sceneGroup, "g", scene.Class.Edge.CONTAINER);
+ var containerNode = container.node();
+ // Select all children and join with data.
+ // (Note that all children of g.edges are g.edge)
+ var edgeGroups = container.selectAll(function () {
+ // using d3's selector function
+ // See https://github.com/mbostock/d3/releases/tag/v2.0.0
+ // (It's not listed in the d3 wiki.)
+ return this.childNodes;
+ })
+ .data(edgeData, getEdgeKey);
+ // Make edges a group to support rendering multiple lines for metaedge
+ edgeGroups.enter()
+ .append("g")
+ .attr("class", scene.Class.Edge.GROUP)
+ .attr("data-edge", getEdgeKey)
+ .each(function (d) {
+ var edgeGroup = d3.select(this);
+ d.label.edgeGroup = edgeGroup;
+ // index node group for quick highlighting
+ sceneBehavior._edgeGroupIndex[getEdgeKey(d)] = edgeGroup;
+ // If any edges are reference edges, add the reference edge class.
+ var extraEdgeClass = d.label.metaedge && d.label.metaedge.numRefEdges
+ ? scene.Class.Edge.REF_LINE + " " + scene.Class.Edge.LINE
+ : undefined;
+ // Add line during enter because we're assuming that type of line
+ // normally does not change.
+ appendEdge(edgeGroup, d, scene, extraEdgeClass);
+ });
+ edgeGroups.each(position);
+ edgeGroups.each(function (d) {
+ stylize(d3.select(this), d, sceneBehavior);
+ });
+ edgeGroups.exit()
+ .each(function (d) {
+ delete sceneBehavior._edgeGroupIndex[getEdgeKey(d)];
+ })
+ .remove();
+ return edgeGroups;
+ }
+ edge.buildGroup = buildGroup;
+ ;
+ /**
+ * For a given d3 selection and data object, create a path to represent the
+ * edge described in d.label.
+ *
+ * If d.label is defined, it will be a RenderMetaedgeInformation instance. It
+ * will sometimes be undefined, for example for some Annotation edges for which
+ * there is no underlying Metaedge in the hierarchical graph.
+ */
+ function appendEdge(edgeGroup, d, sceneBehavior, edgeClass) {
+ edgeClass = edgeClass || scene.Class.Edge.LINE; // set default type
+ if (d.label && d.label.structural) {
+ edgeClass += " " + scene.Class.Edge.STRUCTURAL;
+ }
+ edgeGroup.append("path")
+ .attr("class", edgeClass);
+ }
+ edge.appendEdge = appendEdge;
+ ;
+ /**
+ * Returns a tween interpolator for the endpoint of an edge path.
+ */
+ function getEdgePathInterpolator(d, i, a) {
+ var renderMetaedgeInfo = d.label;
+ var adjoiningMetaedge = renderMetaedgeInfo.adjoiningMetaedge;
+ if (!adjoiningMetaedge) {
+ return d3.interpolate(a, edge.interpolate(renderMetaedgeInfo.points));
+ }
+ var renderPath = this;
+ // Get the adjoining path that matches the adjoining metaedge.
+ var adjoiningPath = (adjoiningMetaedge.edgeGroup.node()
+ .firstChild);
+ // Find the desired SVGPoint along the adjoining path, then convert those
+ // coordinates into the space of the renderPath using its Current
+ // Transformation Matrix (CTM).
+ var inbound = renderMetaedgeInfo.metaedge.inbound;
+ return function (t) {
+ var adjoiningPoint = adjoiningPath
+ .getPointAtLength(inbound ? adjoiningPath.getTotalLength() : 0)
+ .matrixTransform(adjoiningPath.getCTM())
+ .matrixTransform(renderPath.getCTM().inverse());
+ // Update the relevant point in the renderMetaedgeInfo's points list, then
+ // re-interpolate the path.
+ var points = renderMetaedgeInfo.points;
+ var index = inbound ? 0 : points.length - 1;
+ points[index].x = adjoiningPoint.x;
+ points[index].y = adjoiningPoint.y;
+ var dPath = edge.interpolate(points);
+ return dPath;
+ };
+ }
+ edge.interpolate = d3.svg.line()
+ .interpolate("basis")
+ .x(function (d) { return d.x; })
+ .y(function (d) { return d.y; });
+ function position(d) {
+ d3.select(this).select("path." + scene.Class.Edge.LINE)
+ .each(function (d) {
+ var path = d3.select(this);
+ path.transition().attrTween("d", getEdgePathInterpolator);
+ });
+ }
+ ;
+ /**
+ * For a given d3 selection and data object, mark the edge as a control
+ * dependency if it contains only control edges.
+ *
+ * d's label property will be a RenderMetaedgeInformation object.
+ */
+ function stylize(edgeGroup, d, stylize) {
+ var a;
+ var metaedge = d.label.metaedge;
+ edgeGroup
+ .select("path." + scene.Class.Edge.LINE)
+ .classed("control-dep", metaedge && !metaedge.numRegularEdges);
+ }
+ ;
+ })(edge = scene.edge || (scene.edge = {}));
+ })(scene = graph_1.scene || (graph_1.scene = {}));
+ })(graph = tf.graph || (tf.graph = {}));
+})(tf || (tf = {})); // close module
+</script>
+<script>/// <reference path="../graph.ts" />
+/// <reference path="scene.ts" />
+/// <reference path="annotation.ts" />
+var tf;
+(function (tf) {
+ var graph;
+ (function (graph) {
+ var scene;
+ (function (scene) {
+ var node;
+ (function (node_1) {
+ /**
+ * Select or Create a "g.nodes" group to a given sceneGroup
+ * and builds a number of "g.node" groups inside the group.
+ *
+ * Structure Pattern:
+ *
+ * <g class="nodes">
+ * <g class="node">
+ * <g class="in-annotations">
+ * ...
+ * </g>
+ * <g class="out-annotations">
+ * ...
+ * </g>
+ * <g class="nodeshape">
+ * <!--
+ * Content of the node shape should be for the node itself. For example a
+ * Metanode would have a <rect> with rounded edges, an op would have an
+ * <ellipse>. More complex nodes like series may contain multiple elements
+ * which are conditionally visible based on whether the node is expanded.
+ * -->
+ * </g>
+ * <text class="label">node name</text>
+ * <g class="subscene">
+ * <!--
+ * Content of the subscene (only for metanode and series node).
+ *
+ * Subscene is a svg group that contains content of the
+ * metanode's metagraph that is recursively generated by Scene.build().
+ *
+ * When the graph is expanded multiple times, a subscene can contain
+ * nested subscenes inside.
+ * -->
+ * </g>
+ * </g>
+ * ...
+ * </g>
+ *
+ *
+ * @param sceneGroup selection of the container
+ * @param nodeData array of render node information to map
+ * @param sceneBehavior parent scene module
+ * @return selection of the created nodeGroups
+ */
+ function buildGroup(sceneGroup, nodeData, sceneBehavior) {
+ var container = scene.selectOrCreateChild(sceneGroup, "g", scene.Class.Node.CONTAINER);
+ // Select all children and join with data.
+ // (Note that all children of g.nodes are g.node)
+ var nodeGroups = container.selectAll(function () {
+ // using d3's selector function
+ // See https://github.com/mbostock/d3/releases/tag/v2.0.0
+ // (It's not listed in the d3 wiki.)
+ return this.childNodes; // this here refers to container.node()
+ })
+ .data(nodeData, function (d) {
+ // make sure that we don't have to swap shape type
+ return d.node.name + ":" + d.node.type;
+ });
+ // ENTER
+ nodeGroups.enter()
+ .append("g")
+ .attr("data-name", function (d) { return d.node.name; })
+ .each(function (d) {
+ var nodeGroup = d3.select(this);
+ // index node group for quick stylizing
+ sceneBehavior.addNodeGroup(d.node.name, nodeGroup);
+ });
+ // UPDATE
+ nodeGroups
+ .attr("class", function (d) {
+ return scene.Class.Node.GROUP + " " + nodeClass(d);
+ })
+ .each(function (d) {
+ var nodeGroup = d3.select(this);
+ // add g.in-annotations (always add -- to keep layer order consistent.)
+ var inAnnotationBox = scene.selectOrCreateChild(nodeGroup, "g", scene.Class.Annotation.INBOX);
+ scene.annotation.buildGroup(inAnnotationBox, d.inAnnotations, d, sceneBehavior);
+ // add g.out-annotations (always add -- to keep layer order consistent.)
+ var outAnnotationBox = scene.selectOrCreateChild(nodeGroup, "g", scene.Class.Annotation.OUTBOX);
+ scene.annotation.buildGroup(outAnnotationBox, d.outAnnotations, d, sceneBehavior);
+ // label
+ var label = labelBuild(nodeGroup, d, sceneBehavior);
+ // Do not add interaction to metanode labels as they live inside the
+ // metanode shape which already has the same interactions.
+ addInteraction(label, d, sceneBehavior, d.node.type === graph.NodeType.META);
+ // build .shape below label
+ var shape = buildShape(nodeGroup, d, scene.Class.Node.SHAPE, label.node());
+ if (d.node.isGroupNode) {
+ addButton(shape, d, sceneBehavior);
+ }
+ addInteraction(shape, d, sceneBehavior);
+ // build subscene on the top
+ subsceneBuild(nodeGroup, d, sceneBehavior);
+ stylize(nodeGroup, d, sceneBehavior);
+ position(nodeGroup, d, sceneBehavior);
+ });
+ // EXIT
+ nodeGroups.exit()
+ .each(function (d) {
+ // remove all indices on remove
+ sceneBehavior.removeNodeGroup(d.node.name);
+ var nodeGroup = d3.select(this);
+ if (d.inAnnotations.list.length > 0) {
+ nodeGroup.select("." + scene.Class.Annotation.INBOX)
+ .selectAll("." + scene.Class.Annotation.GROUP)
+ .each(function (a) {
+ sceneBehavior.removeAnnotationGroup(a, d);
+ });
+ }
+ if (d.outAnnotations.list.length > 0) {
+ nodeGroup.select("." + scene.Class.Annotation.OUTBOX)
+ .selectAll("." + scene.Class.Annotation.GROUP)
+ .each(function (a) {
+ sceneBehavior.removeAnnotationGroup(a, d);
+ });
+ }
+ })
+ .remove();
+ return nodeGroups;
+ }
+ node_1.buildGroup = buildGroup;
+ ;
+ /**
+ * Update or remove the subscene of a render group node depending on whether it
+ * is a expanded. If the node is not a group node, this method has no effect.
+ *
+ * @param nodeGroup selection of the container
+ * @param renderNodeInfo the render information for the node.
+ * @param sceneBehavior parent scene module
+ * @return Selection of the subscene group, or null if node group does not have
+ * a subscene. Op nodes, bridge nodes and unexpanded group nodes will
+ * not have a subscene.
+ */
+ function subsceneBuild(nodeGroup, renderNodeInfo, sceneBehavior) {
+ if (renderNodeInfo.node.isGroupNode) {
+ if (renderNodeInfo.expanded) {
+ // Recursively build the subscene.
+ return scene.buildGroup(nodeGroup, renderNodeInfo, sceneBehavior, scene.Class.Subscene.GROUP);
+ }
+ // Clean out existing subscene if the node is not expanded.
+ scene.selectChild(nodeGroup, "g", scene.Class.Subscene.GROUP).remove();
+ }
+ return null;
+ }
+ ;
+ /**
+ * Translate the subscene of the given node group
+ */
+ function subscenePosition(nodeGroup, d) {
+ var x0 = d.x - d.width / 2.0 + d.paddingLeft;
+ var y0 = d.y - d.height / 2.0 + d.paddingTop;
+ var subscene = scene.selectChild(nodeGroup, "g", scene.Class.Subscene.GROUP);
+ scene.translate(subscene, x0, y0);
+ }
+ ;
+ /**
+ * Add an expand/collapse button to a group node
+ *
+ * @param selection The group node selection.
+ * @param d Info about the node being rendered.
+ * @param sceneBehavior parent scene module.
+ */
+ function addButton(selection, d, sceneBehavior) {
+ var group = scene.selectOrCreateChild(selection, "g", scene.Class.Node.BUTTON_CONTAINER);
+ scene.selectOrCreateChild(group, "circle", scene.Class.Node.BUTTON_CIRCLE);
+ scene.selectOrCreateChild(group, "path", scene.Class.Node.EXPAND_BUTTON).attr("d", "M0,-2.2 V2.2 M-2.2,0 H2.2");
+ scene.selectOrCreateChild(group, "path", scene.Class.Node.COLLAPSE_BUTTON).attr("d", "M-2.2,0 H2.2");
+ group.on("click", function (d) {
+ // Stop this event's propagation so that it isn't also considered a
+ // node-select.
+ d3.event.stopPropagation();
+ sceneBehavior.fire("node-toggle-expand", { name: d.node.name });
+ });
+ scene.positionButton(group, d);
+ }
+ ;
+ /**
+ * Fire node-* events when the selection is interacted.
+ *
+ * @param disableInteraction When true, have the provided selection
+ * ignore all pointer events. Used for text labels inside of metanodes, which
+ * don't need interaction as their surrounding shape has interaction, and if
+ * given interaction would cause conflicts with the expand/collapse button.
+ */
+ function addInteraction(selection, d, sceneBehavior, disableInteraction) {
+ if (disableInteraction) {
+ selection.attr("pointer-events", "none");
+ return;
+ }
+ selection.on("dblclick", function (d) {
+ sceneBehavior.fire("node-toggle-expand", { name: d.node.name });
+ })
+ .on("mouseover", function (d) {
+ // don't send mouseover over expanded group,
+ // otherwise it is causing too much glitches
+ if (sceneBehavior.isNodeExpanded(d)) {
+ return;
+ }
+ sceneBehavior.fire("node-highlight", { name: d.node.name });
+ })
+ .on("mouseout", function (d) {
+ // don't send mouseover over expanded group,
+ // otherwise it is causing too much glitches
+ if (sceneBehavior.isNodeExpanded(d)) {
+ return;
+ }
+ sceneBehavior.fire("node-unhighlight", { name: d.node.name });
+ })
+ .on("click", function (d) {
+ // Stop this event's propagation so that it isn't also considered
+ // a graph-select.
+ d3.event.stopPropagation();
+ sceneBehavior.fire("node-select", { name: d.node.name });
+ });
+ }
+ ;
+ /**
+ * Append svg text for label and assign data.
+ * @param nodeGroup
+ * @param renderNodeInfo The render node information for the label.
+ * @param sceneBehavior parent scene module.
+ */
+ function labelBuild(nodeGroup, renderNodeInfo, sceneBehavior) {
+ var namePath = renderNodeInfo.node.name.split("/");
+ var text = namePath[namePath.length - 1];
+ // Truncate long labels for unexpanded Metanodes.
+ var useFontScale = renderNodeInfo.node.type === graph.NodeType.META &&
+ !renderNodeInfo.expanded;
+ var label = scene.selectOrCreateChild(nodeGroup, "text", scene.Class.Node.LABEL);
+ label.attr("dy", ".35em")
+ .attr("text-anchor", "middle");
+ if (useFontScale) {
+ if (text.length > sceneBehavior.maxMetanodeLabelLength) {
+ text = text.substr(0, sceneBehavior.maxMetanodeLabelLength - 2) + "...";
+ }
+ var scale = getLabelFontScale(sceneBehavior);
+ label.attr("font-size", scale(text.length) + "px");
+ }
+ label.text(text);
+ return label;
+ }
+ ;
+ /**
+ * d3 scale used for sizing font of labels, used by labelBuild,
+ * initialized once by getLabelFontScale.
+ */
+ var fontScale = null;
+ function getLabelFontScale(sceneBehavior) {
+ if (!fontScale) {
+ fontScale = d3.scale.linear()
+ .domain([sceneBehavior.maxMetanodeLabelLengthLargeFont,
+ sceneBehavior.maxMetanodeLabelLength])
+ .range([sceneBehavior.maxMetanodeLabelLengthFontSize,
+ sceneBehavior.minMetanodeLabelLengthFontSize]).clamp(true);
+ }
+ return fontScale;
+ }
+ /**
+ * Set label position of a given node group
+ */
+ function labelPosition(nodeGroup, d, yOffset) {
+ scene.selectChild(nodeGroup, "text", scene.Class.Node.LABEL).transition()
+ .attr("x", d.x)
+ .attr("y", d.y + yOffset);
+ }
+ ;
+ /**
+ * Select or append/insert shape for a node and assign renderNode
+ * as the shape's data.
+ *
+ * @param nodeGroup
+ * @param d RenderNodeInformation
+ * @param nodeClass class for the element.
+ * @param before Reference DOM node for insertion.
+ * @return Selection of the shape.
+ */
+ function buildShape(nodeGroup, d, nodeClass, before) {
+ // Create a group to house the underlying visual elements.
+ var shapeGroup = scene.selectOrCreateChild(nodeGroup, "g", nodeClass, before);
+ // TODO(jimbo): DOM structure should be templated in HTML somewhere, not JS.
+ switch (d.node.type) {
+ case graph.NodeType.OP:
+ scene.selectOrCreateChild(shapeGroup, "ellipse", scene.Class.Node.COLOR_TARGET);
+ break;
+ case graph.NodeType.SERIES:
+ // Choose the correct stamp to use to represent this series.
+ var stampType = "annotation";
+ var groupNodeInfo = d;
+ if (groupNodeInfo.coreGraph) {
+ stampType = groupNodeInfo.node.hasNonControlEdges
+ ? "vertical" : "horizontal";
+ }
+ scene.selectOrCreateChild(shapeGroup, "use", scene.Class.Node.COLOR_TARGET)
+ .attr("xlink:href", "#op-series-" + stampType + "-stamp");
+ scene.selectOrCreateChild(shapeGroup, "rect", scene.Class.Node.COLOR_TARGET)
+ .attr({ rx: d.radius, ry: d.radius });
+ break;
+ case graph.NodeType.BRIDGE:
+ scene.selectOrCreateChild(shapeGroup, "rect", scene.Class.Node.COLOR_TARGET)
+ .attr({ rx: d.radius, ry: d.radius });
+ break;
+ case graph.NodeType.META:
+ scene.selectOrCreateChild(shapeGroup, "rect", scene.Class.Node.COLOR_TARGET)
+ .attr({ rx: d.radius, ry: d.radius });
+ break;
+ default:
+ throw Error("Unrecognized node type: " + d.node.type);
+ }
+ return shapeGroup;
+ }
+ node_1.buildShape = buildShape;
+ ;
+ function nodeClass(d) {
+ switch (d.node.type) {
+ case graph.NodeType.OP:
+ return scene.Class.OPNODE;
+ case graph.NodeType.META:
+ return scene.Class.METANODE;
+ case graph.NodeType.SERIES:
+ return scene.Class.SERIESNODE;
+ case graph.NodeType.BRIDGE:
+ return scene.Class.BRIDGENODE;
+ case graph.NodeType.ELLIPSIS:
+ return scene.Class.ELLIPSISNODE;
+ }
+ ;
+ throw Error("Unrecognized node type: " + d.node.type);
+ }
+ node_1.nodeClass = nodeClass;
+ ;
+ /** Modify node and its subscene and its label's positional attributes */
+ function position(nodeGroup, d, sceneBehavior) {
+ var shapeGroup = scene.selectChild(nodeGroup, "g", scene.Class.Node.SHAPE);
+ switch (d.node.type) {
+ case graph.NodeType.OP: {
+ // position shape
+ var shape = scene.selectChild(shapeGroup, "ellipse");
+ scene.positionEllipse(shape, d.x, d.y, d.width, d.height);
+ labelPosition(nodeGroup, d, d.labelOffset);
+ break;
+ }
+ case graph.NodeType.META: {
+ // position shape
+ var shape = scene.selectChild(shapeGroup, "rect");
+ scene.positionRect(shape, d.x, d.y, d.width, d.height);
+ if (d.expanded) {
+ subscenePosition(nodeGroup, d);
+ // put label on top
+ labelPosition(nodeGroup, d, -d.height / 2 + d.labelHeight / 2);
+ }
+ else {
+ labelPosition(nodeGroup, d, 0);
+ }
+ break;
+ }
+ case graph.NodeType.SERIES: {
+ var shape = scene.selectChild(shapeGroup, "use");
+ scene.positionRect(shape, d.x, d.y, d.width, d.height);
+ if (d.expanded) {
+ subscenePosition(nodeGroup, d);
+ // put label on top
+ labelPosition(nodeGroup, d, -d.height / 2 + d.labelHeight / 2);
+ }
+ else {
+ labelPosition(nodeGroup, d, d.labelOffset);
+ }
+ }
+ case graph.NodeType.BRIDGE: {
+ // position shape
+ // NOTE: In reality, these will not be visible, but it helps to put them
+ // in the correct position for debugging purposes.
+ var shape = scene.selectChild(shapeGroup, "rect");
+ scene.positionRect(shape, d.x, d.y, d.width, d.height);
+ break;
+ }
+ default: {
+ throw Error("Unrecognized node type: " + d.node.type);
+ }
+ }
+ }
+ ;
+ /** Enum specifying the options to color nodes by */
+ var ColorBy = {
+ STRUCTURE: 0,
+ DEVICE: 1,
+ COMPUTE_TIME: 2,
+ MEMORY: 3
+ };
+ /**
+ * Returns the fill color for the node given its state and the "color by"
+ * option.
+ */
+ function getFillForNode(sceneBehavior, colorBy, renderInfo, isExpanded) {
+ var colorParams = tf.graph.render.MetanodeColors;
+ switch (colorBy) {
+ case ColorBy.STRUCTURE:
+ if (renderInfo.node.type === tf.graph.NodeType.META) {
+ var tid = renderInfo.node.templateId;
+ return tid === null ? colorParams.UNKNOWN : colorParams.STRUCTURE_PALETTE(sceneBehavior.templateIndex(tid), renderInfo.expanded);
+ }
+ else if (renderInfo.node.type === tf.graph.NodeType.SERIES) {
+ // If expanded, we're showing the background rect, which we want to
+ // appear gray. Otherwise we're showing a stack of ellipses which we
+ // want to show white.
+ return renderInfo.expanded ? colorParams.EXPANDED_COLOR : "white";
+ }
+ else if (renderInfo.node.type === graph.NodeType.BRIDGE) {
+ return renderInfo.structural ? "#f0e" :
+ renderInfo.node.inbound ? "#0ef" : "#fe0";
+ }
+ else {
+ // Op nodes are white.
+ return "white";
+ }
+ case ColorBy.DEVICE:
+ if (renderInfo.deviceColors == null) {
+ // Return the hue for unknown device.
+ return colorParams.UNKNOWN;
+ }
+ var id = renderInfo.node.name;
+ var escapedId = tf.escapeQuerySelector(id);
+ var gradientDefs = d3.select("svg#svg defs #linearGradients");
+ var linearGradient = gradientDefs.select("linearGradient#" + escapedId);
+ // If the linear gradient is not there yet, create it.
+ if (linearGradient.size() === 0) {
+ linearGradient = gradientDefs.append("linearGradient").attr("id", id);
+ // Re-create the stops of the linear gradient.
+ linearGradient.selectAll("*").remove();
+ var cumulativeProportion = 0;
+ // For each device, create a stop using the proportion of that device.
+ _.each(renderInfo.deviceColors, function (d) {
+ var color = d.color;
+ linearGradient.append("stop")
+ .attr("offset", cumulativeProportion)
+ .attr("stop-color", color);
+ linearGradient.append("stop")
+ .attr("offset", cumulativeProportion + d.proportion)
+ .attr("stop-color", color);
+ cumulativeProportion += d.proportion;
+ });
+ }
+ return isExpanded ? colorParams.EXPANDED_COLOR : "url(#" + escapedId + ")";
+ case ColorBy.COMPUTE_TIME:
+ return isExpanded ?
+ colorParams.EXPANDED_COLOR : renderInfo.computeTimeColor ||
+ colorParams.UNKNOWN;
+ case ColorBy.MEMORY:
+ return isExpanded ?
+ colorParams.EXPANDED_COLOR : renderInfo.memoryColor ||
+ colorParams.UNKNOWN;
+ default:
+ throw new Error("Unknown case to color nodes by");
+ }
+ }
+ /**
+ * Modify node style by toggling class and assign attributes (only for things
+ * that can't be done in css).
+ */
+ function stylize(nodeGroup, renderInfo, sceneBehavior, nodeClass) {
+ nodeClass = nodeClass || scene.Class.Node.SHAPE;
+ var isHighlighted = sceneBehavior.isNodeHighlighted(renderInfo.node.name);
+ var isSelected = sceneBehavior.isNodeSelected(renderInfo.node.name);
+ var isExtract = renderInfo.isInExtract || renderInfo.isOutExtract;
+ var isExpanded = renderInfo.expanded;
+ nodeGroup.classed("highlighted", isHighlighted);
+ nodeGroup.classed("selected", isSelected);
+ nodeGroup.classed("extract", isExtract);
+ nodeGroup.classed("expanded", isExpanded);
+ // Main node always exists here and it will be reached before subscene,
+ // so d3 selection is fine here.
+ var node = nodeGroup.select("." + nodeClass + " ." + scene.Class.Node.COLOR_TARGET);
+ var fillColor = getFillForNode(sceneBehavior, ColorBy[sceneBehavior.colorBy.toUpperCase()], renderInfo, isExpanded);
+ node.style("fill", fillColor);
+ // Choose outline to be darker version of node color if the node is a single
+ // color and is not selected.
+ if (isSelected) {
+ node.style("stroke", null);
+ }
+ else {
+ // If node is colored by a gradient, then use a dark gray outline.
+ var outlineColor = fillColor.substring(0, 3) === "url" ?
+ tf.graph.render.MetanodeColors.GRADIENT_OUTLINE :
+ d3.rgb(fillColor).darker().toString();
+ node.style("stroke", outlineColor);
+ }
+ }
+ node_1.stylize = stylize;
+ ;
+ })(node = scene.node || (scene.node = {}));
+ })(scene = graph.scene || (graph.scene = {}));
+ })(graph = tf.graph || (tf.graph = {}));
+})(tf || (tf = {})); // close module
+</script>
+<script>/// <reference path="graph.ts" />
+/// <reference path="render.ts" />
+var tf;
+(function (tf) {
+ var graph;
+ (function (graph_1) {
+ var layout;
+ (function (layout) {
+ /** Set of parameters that define the look and feel of the graph. */
+ layout.PARAMS = {
+ animation: {
+ /** Default duration for graph animations in ms. */
+ duration: 250
+ },
+ graph: {
+ /** Graph parameter for metanode. */
+ meta: {
+ /**
+ * Dagre's nodesep param - number of pixels that
+ * separate nodes horizontally in the layout.
+ *
+ * See https://github.com/cpettitt/dagre/wiki#configuring-the-layout
+ */
+ nodeSep: 110,
+ /**
+ * Dagre's ranksep param - number of pixels
+ * between each rank in the layout.
+ *
+ * See https://github.com/cpettitt/dagre/wiki#configuring-the-layout
+ */
+ rankSep: 25
+ },
+ /** Graph parameter for metanode. */
+ series: {
+ /**
+ * Dagre's nodesep param - number of pixels that
+ * separate nodes horizontally in the layout.
+ *
+ * See https://github.com/cpettitt/dagre/wiki#configuring-the-layout
+ */
+ nodeSep: 90,
+ /**
+ * Dagre's ranksep param - number of pixels
+ * between each rank in the layout.
+ *
+ * See https://github.com/cpettitt/dagre/wiki#configuring-the-layout
+ */
+ rankSep: 25,
+ },
+ /**
+ * Padding is used to correctly position the graph SVG inside of its parent
+ * element. The padding amounts are applied using an SVG transform of X and
+ * Y coordinates.
+ */
+ padding: {
+ paddingTop: 40,
+ paddingLeft: 20
+ }
+ },
+ subscene: {
+ meta: {
+ paddingTop: 10,
+ paddingBottom: 10,
+ paddingLeft: 10,
+ paddingRight: 10,
+ /**
+ * Used to leave room for the label on top of the highest node in
+ * the core graph.
+ */
+ labelHeight: 20,
+ /** X-space between each extracted node and the core graph. */
+ extractXOffset: 50,
+ /** Y-space between each extracted node. */
+ extractYOffset: 20
+ },
+ series: {
+ paddingTop: 10,
+ paddingBottom: 10,
+ paddingLeft: 10,
+ paddingRight: 10,
+ labelHeight: 10
+ }
+ },
+ nodeSize: {
+ /** Size of meta nodes. */
+ meta: {
+ radius: 5,
+ width: 60,
+ /** A scale for the node's height based on number of nodes inside */
+ height: d3.scale.linear().domain([1, 200]).range([15, 60]).clamp(true),
+ /** The radius of the circle denoting the expand button. */
+ expandButtonRadius: 3
+ },
+ /** Size of op nodes. */
+ op: {
+ width: 15,
+ height: 6,
+ radius: 3,
+ labelOffset: -8
+ },
+ /** Size of series nodes. */
+ series: {
+ expanded: {
+ // For expanded series nodes, width and height will be
+ // computed to account for the subscene.
+ radius: 10,
+ labelOffset: 0,
+ },
+ vertical: {
+ // When unexpanded, series whose underlying metagraphs contain
+ // one or more non-control edges will show as a vertical stack
+ // of ellipses.
+ width: 16,
+ height: 13,
+ labelOffset: -13,
+ },
+ horizontal: {
+ // When unexpanded, series whose underlying metagraphs contain
+ // no non-control edges will show as a horizontal stack of
+ // ellipses.
+ width: 24,
+ height: 8,
+ radius: 10,
+ labelOffset: -10,
+ },
+ },
+ /** Size of bridge nodes. */
+ bridge: {
+ // NOTE: bridge nodes will normally be invisible, but they must
+ // take up some space so that the layout step leaves room for
+ // their edges.
+ width: 20,
+ height: 20,
+ radius: 2,
+ labelOffset: 0
+ }
+ },
+ shortcutSize: {
+ /** Size of shortcuts for op nodes */
+ op: {
+ width: 10,
+ height: 4
+ },
+ /** Size of shortcuts for meta nodes */
+ meta: {
+ width: 12,
+ height: 4,
+ radius: 1
+ },
+ /** Size of shortcuts for series nodes */
+ series: {
+ width: 14,
+ height: 4,
+ }
+ },
+ annotations: {
+ /** X-space between the shape and each annotation-node. */
+ xOffset: 10,
+ /** Y-space between each annotation-node. */
+ yOffset: 3,
+ /** X-space between each annotation-node and its label. */
+ labelOffset: 2,
+ /** Estimate max width for annotation label */
+ labelWidth: 35
+ },
+ constant: {
+ size: {
+ width: 4,
+ height: 4
+ }
+ },
+ series: {
+ /** Maximum number of repeated item for unexpanded series node. */
+ maxStackCount: 3,
+ /**
+ * Positioning offset ratio for collapsed stack
+ * of parallel series (series without edges between its members).
+ */
+ parallelStackOffsetRatio: 0.2,
+ /**
+ * Positioning offset ratio for collapsed stack
+ * of tower series (series with edges between its members).
+ */
+ towerStackOffsetRatio: 0.5
+ },
+ minimap: {
+ /** The maximum width/height the minimap can have. */
+ size: 150
+ }
+ };
+ /** Calculate layout for a scene of a group node. */
+ function scene(renderNodeInfo) {
+ // Update layout, size, and annotations of its children nodes and edges.
+ if (renderNodeInfo.node.isGroupNode) {
+ layoutChildren(renderNodeInfo);
+ }
+ // Update position of its children nodes and edges
+ if (renderNodeInfo.node.type === graph_1.NodeType.META) {
+ layoutMetanode(renderNodeInfo);
+ }
+ else if (renderNodeInfo.node.type === graph_1.NodeType.SERIES) {
+ layoutSeriesNode(renderNodeInfo);
+ }
+ }
+ layout.scene = scene;
+ ;
+ /**
+ * Update layout, size, and annotations of its children nodes and edges.
+ */
+ function layoutChildren(renderNodeInfo) {
+ var children = renderNodeInfo.coreGraph.nodes().map(function (n) {
+ return renderNodeInfo.coreGraph.node(n);
+ }).concat(renderNodeInfo.isolatedInExtract, renderNodeInfo.isolatedOutExtract);
+ _.each(children, function (childNodeInfo) {
+ // Set size of each child
+ switch (childNodeInfo.node.type) {
+ case graph_1.NodeType.OP:
+ _.extend(childNodeInfo, layout.PARAMS.nodeSize.op);
+ break;
+ case graph_1.NodeType.BRIDGE:
+ _.extend(childNodeInfo, layout.PARAMS.nodeSize.bridge);
+ break;
+ case graph_1.NodeType.META:
+ if (!childNodeInfo.expanded) {
+ // set fixed width and scalable height based on cardinality
+ _.extend(childNodeInfo, layout.PARAMS.nodeSize.meta);
+ childNodeInfo.height =
+ layout.PARAMS.nodeSize.meta.height(childNodeInfo.node.cardinality);
+ }
+ else {
+ var childGroupNodeInfo = childNodeInfo;
+ scene(childGroupNodeInfo); // Recursively layout its subscene.
+ }
+ break;
+ case graph_1.NodeType.SERIES:
+ if (childNodeInfo.expanded) {
+ _.extend(childNodeInfo, layout.PARAMS.nodeSize.series.expanded);
+ var childGroupNodeInfo = childNodeInfo;
+ scene(childGroupNodeInfo); // Recursively layout its subscene.
+ }
+ else {
+ var childGroupNodeInfo = childNodeInfo;
+ var seriesParams = childGroupNodeInfo.node.hasNonControlEdges ?
+ layout.PARAMS.nodeSize.series.vertical :
+ layout.PARAMS.nodeSize.series.horizontal;
+ _.extend(childNodeInfo, seriesParams);
+ }
+ break;
+ default:
+ throw Error("Unrecognized node type: " + childNodeInfo.node.type);
+ }
+ // Layout each child's annotations
+ layoutAnnotation(childNodeInfo);
+ });
+ }
+ /**
+ * Calculate layout for a graph using dagre
+ * @param graph the graph to be laid out
+ * @param params layout parameters
+ * @return width and height of the core graph
+ */
+ function dagreLayout(graph, params) {
+ _.extend(graph.graph(), {
+ nodeSep: params.nodeSep,
+ rankSep: params.rankSep
+ });
+ var bridgeNodeNames = [];
+ var nonBridgeNodeNames = [];
+ // Split out nodes into bridge and non-bridge nodes, and calculate the total
+ // width we should use for bridge nodes.
+ _.each(graph.nodes(), function (nodeName) {
+ var nodeInfo = graph.node(nodeName);
+ if (nodeInfo.node.type === graph_1.NodeType.BRIDGE) {
+ bridgeNodeNames.push(nodeName);
+ }
+ else {
+ nonBridgeNodeNames.push(nodeName);
+ }
+ });
+ // If there are no non-bridge nodes, then the graph has zero size.
+ if (!nonBridgeNodeNames.length) {
+ return {
+ width: 0,
+ height: 0,
+ };
+ }
+ dagre.layout(graph);
+ var graphLabel = graph.graph();
+ // Calculate the true bounding box of the graph by iterating over nodes and
+ // edges rather than accepting dagre's word for it. In particular, we should
+ // ignore the extra-wide bridge nodes and bridge edges, and allow for
+ // annotation boxes and labels.
+ var minX = Infinity;
+ var minY = Infinity;
+ var maxX = -Infinity;
+ var maxY = -Infinity;
+ _.each(nonBridgeNodeNames, function (nodeName) {
+ var nodeInfo = graph.node(nodeName);
+ var w = 0.5 * nodeInfo.width;
+ var x1 = nodeInfo.x - w - nodeInfo.inboxWidth;
+ var x2 = nodeInfo.x + w + nodeInfo.outboxWidth;
+ minX = x1 < minX ? x1 : minX;
+ maxX = x2 > maxX ? x2 : maxX;
+ var labelLength = nodeName.length - nodeName.lastIndexOf(graph_1.NAMESPACE_DELIM);
+ // TODO(jimbo): Account for font width rather than using a magic number.
+ var charWidth = 3; // 3 pixels per character.
+ var lw = 0.5 * labelLength * charWidth;
+ var lx1 = nodeInfo.x - lw;
+ var lx2 = nodeInfo.x + lw;
+ minX = lx1 < minX ? lx1 : minX;
+ maxX = lx2 > maxX ? lx2 : maxX;
+ // TODO(jimbo): Account for the height of labels above op nodes here.
+ var h = 0.5 * nodeInfo.outerHeight;
+ var y1 = nodeInfo.y - h;
+ var y2 = nodeInfo.y + h;
+ minY = y1 < minY ? y1 : minY;
+ maxY = y2 > maxY ? y2 : maxY;
+ });
+ _.each(graph.edges(), function (edgeObj) {
+ var renderMetaedgeInfo = graph.edge(edgeObj);
+ if (renderMetaedgeInfo.structural) {
+ return; // Skip structural edges from min/max calculations.
+ }
+ _.each(renderMetaedgeInfo.points, function (point) {
+ minX = point.x < minX ? point.x : minX;
+ maxX = point.x > maxX ? point.x : maxX;
+ minY = point.y < minY ? point.y : minY;
+ maxY = point.y > maxY ? point.y : maxY;
+ });
+ });
+ // Shift all nodes and edge points to account for the left-padding amount,
+ // and the invisble bridge nodes.
+ _.each(graph.nodes(), function (nodeName) {
+ var nodeInfo = graph.node(nodeName);
+ nodeInfo.x -= minX;
+ nodeInfo.y -= minY;
+ });
+ _.each(graph.edges(), function (edgeObj) {
+ _.each(graph.edge(edgeObj).points, function (point) {
+ point.x -= minX;
+ point.y -= minY;
+ });
+ });
+ return {
+ width: maxX - minX,
+ height: maxY - minY,
+ };
+ }
+ /** Layout a metanode. */
+ function layoutMetanode(renderNodeInfo) {
+ // First, copy params specific to meta nodes onto this render info object.
+ var params = layout.PARAMS.subscene.meta;
+ renderNodeInfo = _.extend(renderNodeInfo, params);
+ // Invoke dagre.layout() on the core graph and record the bounding box
+ // dimensions.
+ _.extend(renderNodeInfo.coreBox, dagreLayout(renderNodeInfo.coreGraph, layout.PARAMS.graph.meta));
+ // Calculate the position of nodes in isolatedInExtract relative to the
+ // top-left corner of inExtractBox (the bounding box for all inExtract nodes)
+ // and calculate the size of the inExtractBox.
+ var hasInExtract = renderNodeInfo.isolatedInExtract.length > 0;
+ renderNodeInfo.inExtractBox.width = hasInExtract ?
+ _(renderNodeInfo.isolatedInExtract).pluck("outerWidth").max() : 0;
+ renderNodeInfo.inExtractBox.height =
+ _.reduce(renderNodeInfo.isolatedInExtract, function (height, child, i) {
+ var yOffset = i > 0 ? params.extractYOffset : 0;
+ // use outerWidth/Height here to avoid overlaps between extracts
+ child.x = renderNodeInfo.inExtractBox.width / 2;
+ child.y = height + yOffset + child.outerHeight / 2;
+ return height + yOffset + child.outerHeight;
+ }, 0);
+ // Calculate the position of nodes in isolatedOutExtract relative to the
+ // top-left corner of outExtractBox (the bounding box for all outExtract
+ // nodes) and calculate the size of the outExtractBox.
+ var hasOutExtract = renderNodeInfo.isolatedOutExtract.length > 0;
+ renderNodeInfo.outExtractBox.width = hasOutExtract ?
+ _(renderNodeInfo.isolatedOutExtract).pluck("outerWidth").max() : 0;
+ renderNodeInfo.outExtractBox.height =
+ _.reduce(renderNodeInfo.isolatedOutExtract, function (height, child, i) {
+ var yOffset = i > 0 ? params.extractYOffset : 0;
+ // use outerWidth/Height here to avoid overlaps between extracts
+ child.x = renderNodeInfo.outExtractBox.width / 2;
+ child.y = height + yOffset + child.outerHeight / 2;
+ return height + yOffset + child.outerHeight;
+ }, 0);
+ // Determine the whole metanode's width (from left to right).
+ renderNodeInfo.width =
+ params.paddingLeft + renderNodeInfo.coreBox.width + params.paddingRight +
+ (hasInExtract ?
+ renderNodeInfo.inExtractBox.width + params.extractXOffset : 0) +
+ (hasOutExtract ?
+ params.extractXOffset + renderNodeInfo.outExtractBox.width : 0);
+ // TODO(jimbo): Remove labelHeight and instead incorporate into box sizes.
+ // Determine the whole metanode's height (from top to bottom).
+ renderNodeInfo.height =
+ renderNodeInfo.labelHeight +
+ params.paddingTop +
+ Math.max(renderNodeInfo.inExtractBox.height, renderNodeInfo.coreBox.height, renderNodeInfo.outExtractBox.height) +
+ params.paddingBottom;
+ }
+ /**
+ * Calculate layout for series node's core graph. Only called for an expanded
+ * series.
+ */
+ function layoutSeriesNode(node) {
+ var graph = node.coreGraph;
+ var params = layout.PARAMS.subscene.series;
+ _.extend(node, params);
+ // Layout the core.
+ _.extend(node.coreBox, dagreLayout(node.coreGraph, layout.PARAMS.graph.series));
+ _.each(graph.nodes(), function (nodeName) {
+ graph.node(nodeName).excluded = false;
+ });
+ // Series do not have in/outExtractBox so no need to include them here.
+ node.width = node.coreBox.width + params.paddingLeft + params.paddingRight;
+ node.height = node.coreBox.height + params.paddingTop + params.paddingBottom;
+ }
+ /**
+ * Calculate layout for annotations of a given node.
+ * This will modify positions of the the given node and its annotations.
+ *
+ * @see tf.graph.render.Node and tf.graph.render.Annotation
+ * for description of each property of each render node.
+ *
+ */
+ function layoutAnnotation(renderNodeInfo) {
+ // If the render node is an expanded metanode, then its annotations will not
+ // be visible and we should skip the annotation calculations.
+ if (renderNodeInfo.expanded) {
+ _.extend(renderNodeInfo, {
+ inboxWidth: 0,
+ inboxHeight: 0,
+ outboxWidth: 0,
+ outboxHeight: 0,
+ outerWidth: renderNodeInfo.width,
+ outerHeight: renderNodeInfo.height
+ });
+ return;
+ }
+ var inAnnotations = renderNodeInfo.inAnnotations.list;
+ var outAnnotations = renderNodeInfo.outAnnotations.list;
+ // Calculate size for in-annotations
+ _.each(inAnnotations, function (a) { return sizeAnnotation(a); });
+ // Calculate size for out-annotations
+ _.each(outAnnotations, function (a) { return sizeAnnotation(a); });
+ var params = layout.PARAMS.annotations;
+ renderNodeInfo.inboxWidth =
+ inAnnotations.length > 0 ?
+ _(inAnnotations).pluck("width").max() +
+ params.xOffset + params.labelWidth + params.labelOffset :
+ 0;
+ renderNodeInfo.outboxWidth =
+ outAnnotations.length > 0 ?
+ _(outAnnotations).pluck("width").max() +
+ params.xOffset + params.labelWidth + params.labelOffset :
+ 0;
+ // Calculate annotation node position (a.dx, a.dy)
+ // and total height for in-annotations
+ // After this chunk of code:
+ // inboxHeight = sum of annotation heights+ (annotation.length - 1 * yOffset)
+ var inboxHeight = _.reduce(inAnnotations, function (height, a, i) {
+ var yOffset = i > 0 ? params.yOffset : 0;
+ a.dx = -(renderNodeInfo.width + a.width) / 2 - params.xOffset;
+ a.dy = height + yOffset + a.height / 2;
+ return height + yOffset + a.height;
+ }, 0);
+ _.each(inAnnotations, function (a) {
+ a.dy -= inboxHeight / 2;
+ a.labelOffset = params.labelOffset;
+ });
+ // Calculate annotation node position position (a.dx, a.dy)
+ // and total height for out-annotations
+ // After this chunk of code:
+ // outboxHeight = sum of annotation heights +
+ // (annotation.length - 1 * yOffset)
+ var outboxHeight = _.reduce(outAnnotations, function (height, a, i) {
+ var yOffset = i > 0 ? params.yOffset : 0;
+ a.dx = (renderNodeInfo.width + a.width) / 2 + params.xOffset;
+ a.dy = height + yOffset + a.height / 2;
+ return height + yOffset + a.height;
+ }, 0);
+ _.each(outAnnotations, function (a) {
+ // adjust by (half of ) the total height
+ // so dy is relative to the host node's center.
+ a.dy -= outboxHeight / 2;
+ a.labelOffset = params.labelOffset;
+ });
+ // Creating scales for touch point between the in-annotation edges
+ // and their hosts.
+ var inTouchHeight = Math.min(renderNodeInfo.height / 2 - renderNodeInfo.radius, inboxHeight / 2);
+ inTouchHeight = inTouchHeight < 0 ? 0 : inTouchHeight;
+ var inY = d3.scale.linear()
+ .domain([0, inAnnotations.length - 1])
+ .range([-inTouchHeight, inTouchHeight]);
+ // Calculate annotation edge position
+ _.each(inAnnotations, function (a, i) {
+ a.points = [
+ // The annotation node end
+ {
+ dx: a.dx + a.width / 2,
+ dy: a.dy
+ },
+ // The host node end
+ {
+ dx: -renderNodeInfo.width / 2,
+ // only use scale if there are more than one,
+ // otherwise center it vertically
+ dy: inAnnotations.length > 1 ? inY(i) : 0
+ }
+ ];
+ });
+ // Creating scales for touch point between the out-annotation edges
+ // and their hosts.
+ var outTouchHeight = Math.min(renderNodeInfo.height / 2 - renderNodeInfo.radius, outboxHeight / 2);
+ outTouchHeight = outTouchHeight < 0 ? 0 : outTouchHeight;
+ var outY = d3.scale.linear()
+ .domain([0, outAnnotations.length - 1])
+ .range([-outTouchHeight, outTouchHeight]);
+ _.each(outAnnotations, function (a, i) {
+ // Add point from the border of the annotation node
+ a.points = [
+ // The host node end
+ {
+ dx: renderNodeInfo.width / 2,
+ // only use scale if there are more than one,
+ // otherwise center it vertically
+ dy: outAnnotations.length > 1 ? outY(i) : 0
+ },
+ // The annotation node end
+ {
+ dx: a.dx - a.width / 2,
+ dy: a.dy
+ }
+ ];
+ });
+ renderNodeInfo.outerWidth = renderNodeInfo.width + renderNodeInfo.inboxWidth +
+ renderNodeInfo.outboxWidth;
+ renderNodeInfo.outerHeight =
+ Math.max(renderNodeInfo.height, inboxHeight, outboxHeight);
+ }
+ /**
+ * Set size of an annotation node.
+ */
+ function sizeAnnotation(a) {
+ switch (a.annotationType) {
+ case graph_1.render.AnnotationType.CONSTANT:
+ _.extend(a, layout.PARAMS.constant.size);
+ break;
+ case graph_1.render.AnnotationType.SHORTCUT:
+ if (a.node.type === graph_1.NodeType.OP) {
+ _.extend(a, layout.PARAMS.shortcutSize.op);
+ }
+ else if (a.node.type === graph_1.NodeType.META) {
+ _.extend(a, layout.PARAMS.shortcutSize.meta);
+ }
+ else if (a.node.type === graph_1.NodeType.SERIES) {
+ _.extend(a, layout.PARAMS.shortcutSize.series);
+ }
+ else {
+ throw Error("Invalid node type: " + a.node.type);
+ }
+ break;
+ case graph_1.render.AnnotationType.SUMMARY:
+ _.extend(a, layout.PARAMS.constant.size);
+ break;
+ }
+ }
+ })(layout = graph_1.layout || (graph_1.layout = {}));
+ })(graph = tf.graph || (tf.graph = {}));
+})(tf || (tf = {})); // close module
+</script>
+<script>var tf;
+(function (tf) {
+ /**
+ * Mapping from color palette name to color pallette, which contains
+ * exact colors for multiple states of a single color pallette.
+ */
+ tf.COLORS = [
+ {
+ "name": "Google Blue",
+ "color": "#4184f3",
+ "active": "#3a53c5",
+ "disabled": "#cad8fc"
+ },
+ {
+ "name": "Google Red",
+ "color": "#db4437",
+ "active": "#8f2a0c",
+ "disabled": "#e8c6c1"
+ },
+ {
+ "name": "Google Yellow",
+ "color": "#f4b400",
+ "active": "#db9200",
+ "disabled": "#f7e8b0"
+ },
+ {
+ "name": "Google Green",
+ "color": "#0f9d58",
+ "active": "#488046",
+ "disabled": "#c2e1cc"
+ },
+ {
+ "name": "Purple",
+ "color": "#aa46bb",
+ "active": "#5c1398",
+ "disabled": "#d7bce6"
+ },
+ {
+ "name": "Teal",
+ "color": "#00abc0",
+ "active": "#47828e",
+ "disabled": "#c2eaf2"
+ },
+ {
+ "name": "Deep Orange",
+ "color": "#ff6f42",
+ "active": "#ca4a06",
+ "disabled": "#f2cbba"
+ },
+ {
+ "name": "Lime",
+ "color": "#9d9c23",
+ "active": "#7f771d",
+ "disabled": "#f1f4c2"
+ },
+ {
+ "name": "Indigo",
+ "color": "#5b6abf",
+ "active": "#3e47a9",
+ "disabled": "#c5c8e8"
+ },
+ {
+ "name": "Pink",
+ "color": "#ef6191",
+ "active": "#ca1c60",
+ "disabled": "#e9b9ce"
+ },
+ {
+ "name": "Deep Teal",
+ "color": "#00786a",
+ "active": "#2b4f43",
+ "disabled": "#bededa"
+ },
+ {
+ "name": "Deep Pink",
+ "color": "#c1175a",
+ "active": "#75084f",
+ "disabled": "#de8cae"
+ },
+ {
+ "name": "Gray",
+ "color": "#9E9E9E",
+ "active": "#424242",
+ "disabled": "F5F5F5" // 100
+ }
+ ].reduce(function (m, c) {
+ m[c.name] = c;
+ return m;
+ }, {});
+ /**
+ * Mapping from op category to color palette name
+ * e.g., OP_GROUP_COLORS["state_ops"] = "Google Blue";
+ */
+ tf.OP_GROUP_COLORS = [
+ {
+ color: "Google Red",
+ groups: ["gen_legacy_ops", "legacy_ops", "legacy_flogs_input",
+ "legacy_image_input", "legacy_input_example_input",
+ "legacy_sequence_input", "legacy_seti_input_input"]
+ }, {
+ color: "Deep Orange",
+ groups: ["constant_ops"]
+ }, {
+ color: "Indigo",
+ groups: ["state_ops"]
+ }, {
+ color: "Purple",
+ groups: ["nn_ops", "nn"]
+ }, {
+ color: "Google Green",
+ groups: ["math_ops"]
+ }, {
+ color: "Lime",
+ groups: ["array_ops"]
+ }, {
+ color: "Teal",
+ groups: ["control_flow_ops", "data_flow_ops"]
+ }, {
+ color: "Pink",
+ groups: ["summary_ops"]
+ }, {
+ color: "Deep Pink",
+ groups: ["io_ops"]
+ }
+ ].reduce(function (m, c) {
+ c.groups.forEach(function (group) {
+ m[group] = c.color;
+ });
+ return m;
+ }, {});
+})(tf || (tf = {}));
+</script>
+<script>/// <reference path="../../../../typings/tsd.d.ts" />
+/// <reference path="../common.ts" />
+var tf;
+(function (tf) {
+ var scene;
+ (function (scene) {
+ /** Show minimap when the viewpoint area is less than X% of the whole area. */
+ var FRAC_VIEWPOINT_AREA = 0.8;
+ var Minimap = (function () {
+ /**
+ * Constructs a new minimap.
+ *
+ * @param svg The main svg element.
+ * @param zoomG The svg group used for panning and zooming the main svg.
+ * @param mainZoom The main zoom behavior.
+ * @param minimap The minimap container.
+ * @param maxWandH The maximum width/height for the minimap.
+ * @param labelPadding Padding in pixels due to the main graph labels.
+ */
+ function Minimap(svg, zoomG, mainZoom, minimap, maxWandH, labelPadding) {
+ var _this = this;
+ this.svg = svg;
+ this.labelPadding = labelPadding;
+ this.zoomG = zoomG;
+ this.mainZoom = mainZoom;
+ this.maxWandH = maxWandH;
+ var $minimap = d3.select(minimap);
+ // The minimap will have 2 main components: the canvas showing the content
+ // and an svg showing a rectangle of the currently zoomed/panned viewpoint.
+ var $minimapSvg = $minimap.select("svg");
+ // Make the viewpoint rectangle draggable.
+ var $viewpoint = $minimapSvg.select("rect");
+ var dragmove = function (d) {
+ _this.viewpointCoord.x = d3.event.x;
+ _this.viewpointCoord.y = d3.event.y;
+ _this.updateViewpoint();
+ };
+ this.viewpointCoord = { x: 0, y: 0 };
+ var drag = d3.behavior.drag().origin(Object).on("drag", dragmove);
+ $viewpoint.datum(this.viewpointCoord).call(drag);
+ // Make the minimap clickable.
+ $minimapSvg.on("click", function () {
+ if (d3.event.defaultPrevented) {
+ // This click was part of a drag event, so suppress it.
+ return;
+ }
+ // Update the coordinates of the viewpoint.
+ var width = Number($viewpoint.attr("width"));
+ var height = Number($viewpoint.attr("height"));
+ var clickCoords = d3.mouse($minimapSvg.node());
+ _this.viewpointCoord.x = clickCoords[0] - width / 2;
+ _this.viewpointCoord.y = clickCoords[1] - height / 2;
+ _this.updateViewpoint();
+ });
+ this.viewpoint = $viewpoint.node();
+ this.minimapSvg = $minimapSvg.node();
+ this.minimap = minimap;
+ this.canvas = $minimap.select("canvas.first").node();
+ this.canvasBuffer =
+ $minimap.select("canvas.second").node();
+ }
+ /**
+ * Updates the position and the size of the viewpoint rectangle.
+ * It also notifies the main svg about the new panned position.
+ */
+ Minimap.prototype.updateViewpoint = function () {
+ // Update the coordinates of the viewpoint rectangle.
+ d3.select(this.viewpoint)
+ .attr("x", this.viewpointCoord.x)
+ .attr("y", this.viewpointCoord.y);
+ // Update the translation vector of the main svg to reflect the
+ // new viewpoint.
+ var mainX = -this.viewpointCoord.x * this.scaleMain / this.scaleMinimap;
+ var mainY = -this.viewpointCoord.y * this.scaleMain / this.scaleMinimap;
+ var zoomEvent = this.mainZoom.translate([mainX, mainY]).event;
+ d3.select(this.zoomG).call(zoomEvent);
+ };
+ /**
+ * Redraws the minimap. Should be called whenever the main svg
+ * was updated (e.g. when a node was expanded).
+ */
+ Minimap.prototype.update = function () {
+ var _this = this;
+ var $svg = d3.select(this.svg);
+ // Read all the style rules in the document and embed them into the svg.
+ // The svg needs to be self contained, i.e. all the style rules need to be
+ // embedded so the canvas output matches the origin.
+ var stylesText = "";
+ for (var k = 0; k < document.styleSheets.length; k++) {
+ try {
+ var cssRules = document.styleSheets[k].cssRules ||
+ document.styleSheets[k].rules;
+ if (cssRules == null) {
+ continue;
+ }
+ for (var i = 0; i < cssRules.length; i++) {
+ stylesText += cssRules[i].cssText + "\n";
+ }
+ }
+ catch (e) {
+ if (e.name !== "SecurityError") {
+ throw e;
+ }
+ }
+ }
+ // Temporarily add the css rules to the main svg.
+ var svgStyle = $svg.append("style");
+ svgStyle.text(stylesText);
+ // Temporarily remove the zoom/pan transform from the main svg since we
+ // want the minimap to show a zoomed-out and centered view.
+ var $zoomG = d3.select(this.zoomG);
+ var zoomTransform = $zoomG.attr("transform");
+ $zoomG.attr("transform", null);
+ // Get the size of the entire scene.
+ var sceneSize = this.zoomG.getBBox();
+ // Since we add padding, account for that here.
+ sceneSize.height += this.labelPadding;
+ // Temporarily assign an explicit width/height to the main svg, since
+ // it doesn't have one (uses flex-box), but we need it for the canvas
+ // to work.
+ $svg.attr({
+ width: sceneSize.width,
+ height: sceneSize.height,
+ });
+ // Since the content inside the svg changed (e.g. a node was expanded),
+ // the aspect ratio have also changed. Thus, we need to update the scale
+ // factor of the minimap. The scale factor is determined such that both
+ // the width and height of the minimap are <= maximum specified w/h.
+ this.scaleMinimap =
+ this.maxWandH / Math.max(sceneSize.width, sceneSize.height);
+ this.minimapSize = {
+ width: sceneSize.width * this.scaleMinimap,
+ height: sceneSize.height * this.scaleMinimap
+ };
+ // Update the size of the minimap's svg, the buffer canvas and the
+ // viewpoint rect.
+ d3.select(this.minimapSvg).attr(this.minimapSize);
+ d3.select(this.canvasBuffer).attr(this.minimapSize);
+ if (this.translate != null && this.zoom != null) {
+ // Update the viewpoint rectangle shape since the aspect ratio of the
+ // map has changed.
+ requestAnimationFrame(function () { return _this.zoom(); });
+ }
+ // Serialize the main svg to a string which will be used as the rendering
+ // content for the canvas.
+ var svgXml = (new XMLSerializer()).serializeToString(this.svg);
+ // Now that the svg is serialized for rendering, remove the temporarily
+ // assigned styles, explicit width and height and bring back the pan/zoom
+ // transform.
+ svgStyle.remove();
+ $svg.attr({
+ width: null,
+ height: null
+ });
+ $zoomG.attr("transform", zoomTransform);
+ var image = new Image();
+ image.onload = function () {
+ // Draw the svg content onto the buffer canvas.
+ var context = _this.canvasBuffer.getContext("2d");
+ context.clearRect(0, 0, _this.canvasBuffer.width, _this.canvasBuffer.height);
+ context.drawImage(image, 0, 0, _this.minimapSize.width, _this.minimapSize.height);
+ requestAnimationFrame(function () {
+ // Hide the old canvas and show the new buffer canvas.
+ d3.select(_this.canvasBuffer).style("display", null);
+ d3.select(_this.canvas).style("display", "none");
+ // Swap the two canvases.
+ _a = [_this.canvasBuffer, _this.canvas], _this.canvas = _a[0], _this.canvasBuffer = _a[1];
+ var _a;
+ });
+ };
+ image.src = "data:image/svg+xml;base64," + btoa(svgXml);
+ };
+ /**
+ * Handles changes in zooming/panning. Should be called from the main svg
+ * to notify that a zoom/pan was performed and this minimap will update it's
+ * viewpoint rectangle.
+ *
+ * @param translate The translate vector, or none to use the last used one.
+ * @param scale The scaling factor, or none to use the last used one.
+ */
+ Minimap.prototype.zoom = function (translate, scale) {
+ // Update the new translate and scale params, only if specified.
+ this.translate = translate || this.translate;
+ this.scaleMain = scale || this.scaleMain;
+ // Update the location of the viewpoint rectangle.
+ var svgRect = this.svg.getBoundingClientRect();
+ var $viewpoint = d3.select(this.viewpoint);
+ this.viewpointCoord.x = -this.translate[0] * this.scaleMinimap /
+ this.scaleMain;
+ this.viewpointCoord.y = -this.translate[1] * this.scaleMinimap /
+ this.scaleMain;
+ var viewpointWidth = svgRect.width * this.scaleMinimap / this.scaleMain;
+ var viewpointHeight = svgRect.height * this.scaleMinimap / this.scaleMain;
+ $viewpoint.attr({
+ x: this.viewpointCoord.x,
+ y: this.viewpointCoord.y,
+ width: viewpointWidth,
+ height: viewpointHeight
+ });
+ // Show/hide the minimap depending on the viewpoint area as fraction of the
+ // whole minimap.
+ var mapWidth = this.minimapSize.width;
+ var mapHeight = this.minimapSize.height;
+ var x = this.viewpointCoord.x;
+ var y = this.viewpointCoord.y;
+ var w = Math.min(Math.max(0, x + viewpointWidth), mapWidth) -
+ Math.min(Math.max(0, x), mapWidth);
+ var h = Math.min(Math.max(0, y + viewpointHeight), mapHeight) -
+ Math.min(Math.max(0, y), mapHeight);
+ var fracIntersect = (w * h) / (mapWidth * mapHeight);
+ if (fracIntersect < FRAC_VIEWPOINT_AREA) {
+ this.minimap.classList.remove("hidden");
+ }
+ else {
+ this.minimap.classList.add("hidden");
+ }
+ };
+ return Minimap;
+ })();
+ scene.Minimap = Minimap;
+ })(scene = tf.scene || (tf.scene = {}));
+})(tf || (tf = {})); // close module tf.scene
+</script>
+<script>/// <reference path="graph.ts" />
+/// <reference path="render.ts" />
+var tf;
+(function (tf) {
+ var graph;
+ (function (graph_1) {
+ var layout;
+ (function (layout) {
+ /** Set of parameters that define the look and feel of the graph. */
+ layout.PARAMS = {
+ animation: {
+ /** Default duration for graph animations in ms. */
+ duration: 250
+ },
+ graph: {
+ /** Graph parameter for metanode. */
+ meta: {
+ /**
+ * Dagre's nodesep param - number of pixels that
+ * separate nodes horizontally in the layout.
+ *
+ * See https://github.com/cpettitt/dagre/wiki#configuring-the-layout
+ */
+ nodeSep: 110,
+ /**
+ * Dagre's ranksep param - number of pixels
+ * between each rank in the layout.
+ *
+ * See https://github.com/cpettitt/dagre/wiki#configuring-the-layout
+ */
+ rankSep: 25
+ },
+ /** Graph parameter for metanode. */
+ series: {
+ /**
+ * Dagre's nodesep param - number of pixels that
+ * separate nodes horizontally in the layout.
+ *
+ * See https://github.com/cpettitt/dagre/wiki#configuring-the-layout
+ */
+ nodeSep: 90,
+ /**
+ * Dagre's ranksep param - number of pixels
+ * between each rank in the layout.
+ *
+ * See https://github.com/cpettitt/dagre/wiki#configuring-the-layout
+ */
+ rankSep: 25,
+ },
+ /**
+ * Padding is used to correctly position the graph SVG inside of its parent
+ * element. The padding amounts are applied using an SVG transform of X and
+ * Y coordinates.
+ */
+ padding: {
+ paddingTop: 40,
+ paddingLeft: 20
+ }
+ },
+ subscene: {
+ meta: {
+ paddingTop: 10,
+ paddingBottom: 10,
+ paddingLeft: 10,
+ paddingRight: 10,
+ /**
+ * Used to leave room for the label on top of the highest node in
+ * the core graph.
+ */
+ labelHeight: 20,
+ /** X-space between each extracted node and the core graph. */
+ extractXOffset: 50,
+ /** Y-space between each extracted node. */
+ extractYOffset: 20
+ },
+ series: {
+ paddingTop: 10,
+ paddingBottom: 10,
+ paddingLeft: 10,
+ paddingRight: 10,
+ labelHeight: 10
+ }
+ },
+ nodeSize: {
+ /** Size of meta nodes. */
+ meta: {
+ radius: 5,
+ width: 60,
+ /** A scale for the node's height based on number of nodes inside */
+ height: d3.scale.linear().domain([1, 200]).range([15, 60]).clamp(true),
+ /** The radius of the circle denoting the expand button. */
+ expandButtonRadius: 3
+ },
+ /** Size of op nodes. */
+ op: {
+ width: 15,
+ height: 6,
+ radius: 3,
+ labelOffset: -8
+ },
+ /** Size of series nodes. */
+ series: {
+ expanded: {
+ // For expanded series nodes, width and height will be
+ // computed to account for the subscene.
+ radius: 10,
+ labelOffset: 0,
+ },
+ vertical: {
+ // When unexpanded, series whose underlying metagraphs contain
+ // one or more non-control edges will show as a vertical stack
+ // of ellipses.
+ width: 16,
+ height: 13,
+ labelOffset: -13,
+ },
+ horizontal: {
+ // When unexpanded, series whose underlying metagraphs contain
+ // no non-control edges will show as a horizontal stack of
+ // ellipses.
+ width: 24,
+ height: 8,
+ radius: 10,
+ labelOffset: -10,
+ },
+ },
+ /** Size of bridge nodes. */
+ bridge: {
+ // NOTE: bridge nodes will normally be invisible, but they must
+ // take up some space so that the layout step leaves room for
+ // their edges.
+ width: 20,
+ height: 20,
+ radius: 2,
+ labelOffset: 0
+ }
+ },
+ shortcutSize: {
+ /** Size of shortcuts for op nodes */
+ op: {
+ width: 10,
+ height: 4
+ },
+ /** Size of shortcuts for meta nodes */
+ meta: {
+ width: 12,
+ height: 4,
+ radius: 1
+ },
+ /** Size of shortcuts for series nodes */
+ series: {
+ width: 14,
+ height: 4,
+ }
+ },
+ annotations: {
+ /** X-space between the shape and each annotation-node. */
+ xOffset: 10,
+ /** Y-space between each annotation-node. */
+ yOffset: 3,
+ /** X-space between each annotation-node and its label. */
+ labelOffset: 2,
+ /** Estimate max width for annotation label */
+ labelWidth: 35
+ },
+ constant: {
+ size: {
+ width: 4,
+ height: 4
+ }
+ },
+ series: {
+ /** Maximum number of repeated item for unexpanded series node. */
+ maxStackCount: 3,
+ /**
+ * Positioning offset ratio for collapsed stack
+ * of parallel series (series without edges between its members).
+ */
+ parallelStackOffsetRatio: 0.2,
+ /**
+ * Positioning offset ratio for collapsed stack
+ * of tower series (series with edges between its members).
+ */
+ towerStackOffsetRatio: 0.5
+ },
+ minimap: {
+ /** The maximum width/height the minimap can have. */
+ size: 150
+ }
+ };
+ /** Calculate layout for a scene of a group node. */
+ function scene(renderNodeInfo) {
+ // Update layout, size, and annotations of its children nodes and edges.
+ if (renderNodeInfo.node.isGroupNode) {
+ layoutChildren(renderNodeInfo);
+ }
+ // Update position of its children nodes and edges
+ if (renderNodeInfo.node.type === graph_1.NodeType.META) {
+ layoutMetanode(renderNodeInfo);
+ }
+ else if (renderNodeInfo.node.type === graph_1.NodeType.SERIES) {
+ layoutSeriesNode(renderNodeInfo);
+ }
+ }
+ layout.scene = scene;
+ ;
+ /**
+ * Update layout, size, and annotations of its children nodes and edges.
+ */
+ function layoutChildren(renderNodeInfo) {
+ var children = renderNodeInfo.coreGraph.nodes().map(function (n) {
+ return renderNodeInfo.coreGraph.node(n);
+ }).concat(renderNodeInfo.isolatedInExtract, renderNodeInfo.isolatedOutExtract);
+ _.each(children, function (childNodeInfo) {
+ // Set size of each child
+ switch (childNodeInfo.node.type) {
+ case graph_1.NodeType.OP:
+ _.extend(childNodeInfo, layout.PARAMS.nodeSize.op);
+ break;
+ case graph_1.NodeType.BRIDGE:
+ _.extend(childNodeInfo, layout.PARAMS.nodeSize.bridge);
+ break;
+ case graph_1.NodeType.META:
+ if (!childNodeInfo.expanded) {
+ // set fixed width and scalable height based on cardinality
+ _.extend(childNodeInfo, layout.PARAMS.nodeSize.meta);
+ childNodeInfo.height =
+ layout.PARAMS.nodeSize.meta.height(childNodeInfo.node.cardinality);
+ }
+ else {
+ var childGroupNodeInfo = childNodeInfo;
+ scene(childGroupNodeInfo); // Recursively layout its subscene.
+ }
+ break;
+ case graph_1.NodeType.SERIES:
+ if (childNodeInfo.expanded) {
+ _.extend(childNodeInfo, layout.PARAMS.nodeSize.series.expanded);
+ var childGroupNodeInfo = childNodeInfo;
+ scene(childGroupNodeInfo); // Recursively layout its subscene.
+ }
+ else {
+ var childGroupNodeInfo = childNodeInfo;
+ var seriesParams = childGroupNodeInfo.node.hasNonControlEdges ?
+ layout.PARAMS.nodeSize.series.vertical :
+ layout.PARAMS.nodeSize.series.horizontal;
+ _.extend(childNodeInfo, seriesParams);
+ }
+ break;
+ default:
+ throw Error("Unrecognized node type: " + childNodeInfo.node.type);
+ }
+ // Layout each child's annotations
+ layoutAnnotation(childNodeInfo);
+ });
+ }
+ /**
+ * Calculate layout for a graph using dagre
+ * @param graph the graph to be laid out
+ * @param params layout parameters
+ * @return width and height of the core graph
+ */
+ function dagreLayout(graph, params) {
+ _.extend(graph.graph(), {
+ nodeSep: params.nodeSep,
+ rankSep: params.rankSep
+ });
+ var bridgeNodeNames = [];
+ var nonBridgeNodeNames = [];
+ // Split out nodes into bridge and non-bridge nodes, and calculate the total
+ // width we should use for bridge nodes.
+ _.each(graph.nodes(), function (nodeName) {
+ var nodeInfo = graph.node(nodeName);
+ if (nodeInfo.node.type === graph_1.NodeType.BRIDGE) {
+ bridgeNodeNames.push(nodeName);
+ }
+ else {
+ nonBridgeNodeNames.push(nodeName);
+ }
+ });
+ // If there are no non-bridge nodes, then the graph has zero size.
+ if (!nonBridgeNodeNames.length) {
+ return {
+ width: 0,
+ height: 0,
+ };
+ }
+ dagre.layout(graph);
+ var graphLabel = graph.graph();
+ // Calculate the true bounding box of the graph by iterating over nodes and
+ // edges rather than accepting dagre's word for it. In particular, we should
+ // ignore the extra-wide bridge nodes and bridge edges, and allow for
+ // annotation boxes and labels.
+ var minX = Infinity;
+ var minY = Infinity;
+ var maxX = -Infinity;
+ var maxY = -Infinity;
+ _.each(nonBridgeNodeNames, function (nodeName) {
+ var nodeInfo = graph.node(nodeName);
+ var w = 0.5 * nodeInfo.width;
+ var x1 = nodeInfo.x - w - nodeInfo.inboxWidth;
+ var x2 = nodeInfo.x + w + nodeInfo.outboxWidth;
+ minX = x1 < minX ? x1 : minX;
+ maxX = x2 > maxX ? x2 : maxX;
+ var labelLength = nodeName.length - nodeName.lastIndexOf(graph_1.NAMESPACE_DELIM);
+ // TODO(jimbo): Account for font width rather than using a magic number.
+ var charWidth = 3; // 3 pixels per character.
+ var lw = 0.5 * labelLength * charWidth;
+ var lx1 = nodeInfo.x - lw;
+ var lx2 = nodeInfo.x + lw;
+ minX = lx1 < minX ? lx1 : minX;
+ maxX = lx2 > maxX ? lx2 : maxX;
+ // TODO(jimbo): Account for the height of labels above op nodes here.
+ var h = 0.5 * nodeInfo.outerHeight;
+ var y1 = nodeInfo.y - h;
+ var y2 = nodeInfo.y + h;
+ minY = y1 < minY ? y1 : minY;
+ maxY = y2 > maxY ? y2 : maxY;
+ });
+ _.each(graph.edges(), function (edgeObj) {
+ var renderMetaedgeInfo = graph.edge(edgeObj);
+ if (renderMetaedgeInfo.structural) {
+ return; // Skip structural edges from min/max calculations.
+ }
+ _.each(renderMetaedgeInfo.points, function (point) {
+ minX = point.x < minX ? point.x : minX;
+ maxX = point.x > maxX ? point.x : maxX;
+ minY = point.y < minY ? point.y : minY;
+ maxY = point.y > maxY ? point.y : maxY;
+ });
+ });
+ // Shift all nodes and edge points to account for the left-padding amount,
+ // and the invisble bridge nodes.
+ _.each(graph.nodes(), function (nodeName) {
+ var nodeInfo = graph.node(nodeName);
+ nodeInfo.x -= minX;
+ nodeInfo.y -= minY;
+ });
+ _.each(graph.edges(), function (edgeObj) {
+ _.each(graph.edge(edgeObj).points, function (point) {
+ point.x -= minX;
+ point.y -= minY;
+ });
+ });
+ return {
+ width: maxX - minX,
+ height: maxY - minY,
+ };
+ }
+ /** Layout a metanode. */
+ function layoutMetanode(renderNodeInfo) {
+ // First, copy params specific to meta nodes onto this render info object.
+ var params = layout.PARAMS.subscene.meta;
+ renderNodeInfo = _.extend(renderNodeInfo, params);
+ // Invoke dagre.layout() on the core graph and record the bounding box
+ // dimensions.
+ _.extend(renderNodeInfo.coreBox, dagreLayout(renderNodeInfo.coreGraph, layout.PARAMS.graph.meta));
+ // Calculate the position of nodes in isolatedInExtract relative to the
+ // top-left corner of inExtractBox (the bounding box for all inExtract nodes)
+ // and calculate the size of the inExtractBox.
+ var hasInExtract = renderNodeInfo.isolatedInExtract.length > 0;
+ renderNodeInfo.inExtractBox.width = hasInExtract ?
+ _(renderNodeInfo.isolatedInExtract).pluck("outerWidth").max() : 0;
+ renderNodeInfo.inExtractBox.height =
+ _.reduce(renderNodeInfo.isolatedInExtract, function (height, child, i) {
+ var yOffset = i > 0 ? params.extractYOffset : 0;
+ // use outerWidth/Height here to avoid overlaps between extracts
+ child.x = renderNodeInfo.inExtractBox.width / 2;
+ child.y = height + yOffset + child.outerHeight / 2;
+ return height + yOffset + child.outerHeight;
+ }, 0);
+ // Calculate the position of nodes in isolatedOutExtract relative to the
+ // top-left corner of outExtractBox (the bounding box for all outExtract
+ // nodes) and calculate the size of the outExtractBox.
+ var hasOutExtract = renderNodeInfo.isolatedOutExtract.length > 0;
+ renderNodeInfo.outExtractBox.width = hasOutExtract ?
+ _(renderNodeInfo.isolatedOutExtract).pluck("outerWidth").max() : 0;
+ renderNodeInfo.outExtractBox.height =
+ _.reduce(renderNodeInfo.isolatedOutExtract, function (height, child, i) {
+ var yOffset = i > 0 ? params.extractYOffset : 0;
+ // use outerWidth/Height here to avoid overlaps between extracts
+ child.x = renderNodeInfo.outExtractBox.width / 2;
+ child.y = height + yOffset + child.outerHeight / 2;
+ return height + yOffset + child.outerHeight;
+ }, 0);
+ // Determine the whole metanode's width (from left to right).
+ renderNodeInfo.width =
+ params.paddingLeft + renderNodeInfo.coreBox.width + params.paddingRight +
+ (hasInExtract ?
+ renderNodeInfo.inExtractBox.width + params.extractXOffset : 0) +
+ (hasOutExtract ?
+ params.extractXOffset + renderNodeInfo.outExtractBox.width : 0);
+ // TODO(jimbo): Remove labelHeight and instead incorporate into box sizes.
+ // Determine the whole metanode's height (from top to bottom).
+ renderNodeInfo.height =
+ renderNodeInfo.labelHeight +
+ params.paddingTop +
+ Math.max(renderNodeInfo.inExtractBox.height, renderNodeInfo.coreBox.height, renderNodeInfo.outExtractBox.height) +
+ params.paddingBottom;
+ }
+ /**
+ * Calculate layout for series node's core graph. Only called for an expanded
+ * series.
+ */
+ function layoutSeriesNode(node) {
+ var graph = node.coreGraph;
+ var params = layout.PARAMS.subscene.series;
+ _.extend(node, params);
+ // Layout the core.
+ _.extend(node.coreBox, dagreLayout(node.coreGraph, layout.PARAMS.graph.series));
+ _.each(graph.nodes(), function (nodeName) {
+ graph.node(nodeName).excluded = false;
+ });
+ // Series do not have in/outExtractBox so no need to include them here.
+ node.width = node.coreBox.width + params.paddingLeft + params.paddingRight;
+ node.height = node.coreBox.height + params.paddingTop + params.paddingBottom;
+ }
+ /**
+ * Calculate layout for annotations of a given node.
+ * This will modify positions of the the given node and its annotations.
+ *
+ * @see tf.graph.render.Node and tf.graph.render.Annotation
+ * for description of each property of each render node.
+ *
+ */
+ function layoutAnnotation(renderNodeInfo) {
+ // If the render node is an expanded metanode, then its annotations will not
+ // be visible and we should skip the annotation calculations.
+ if (renderNodeInfo.expanded) {
+ _.extend(renderNodeInfo, {
+ inboxWidth: 0,
+ inboxHeight: 0,
+ outboxWidth: 0,
+ outboxHeight: 0,
+ outerWidth: renderNodeInfo.width,
+ outerHeight: renderNodeInfo.height
+ });
+ return;
+ }
+ var inAnnotations = renderNodeInfo.inAnnotations.list;
+ var outAnnotations = renderNodeInfo.outAnnotations.list;
+ // Calculate size for in-annotations
+ _.each(inAnnotations, function (a) { return sizeAnnotation(a); });
+ // Calculate size for out-annotations
+ _.each(outAnnotations, function (a) { return sizeAnnotation(a); });
+ var params = layout.PARAMS.annotations;
+ renderNodeInfo.inboxWidth =
+ inAnnotations.length > 0 ?
+ _(inAnnotations).pluck("width").max() +
+ params.xOffset + params.labelWidth + params.labelOffset :
+ 0;
+ renderNodeInfo.outboxWidth =
+ outAnnotations.length > 0 ?
+ _(outAnnotations).pluck("width").max() +
+ params.xOffset + params.labelWidth + params.labelOffset :
+ 0;
+ // Calculate annotation node position (a.dx, a.dy)
+ // and total height for in-annotations
+ // After this chunk of code:
+ // inboxHeight = sum of annotation heights+ (annotation.length - 1 * yOffset)
+ var inboxHeight = _.reduce(inAnnotations, function (height, a, i) {
+ var yOffset = i > 0 ? params.yOffset : 0;
+ a.dx = -(renderNodeInfo.width + a.width) / 2 - params.xOffset;
+ a.dy = height + yOffset + a.height / 2;
+ return height + yOffset + a.height;
+ }, 0);
+ _.each(inAnnotations, function (a) {
+ a.dy -= inboxHeight / 2;
+ a.labelOffset = params.labelOffset;
+ });
+ // Calculate annotation node position position (a.dx, a.dy)
+ // and total height for out-annotations
+ // After this chunk of code:
+ // outboxHeight = sum of annotation heights +
+ // (annotation.length - 1 * yOffset)
+ var outboxHeight = _.reduce(outAnnotations, function (height, a, i) {
+ var yOffset = i > 0 ? params.yOffset : 0;
+ a.dx = (renderNodeInfo.width + a.width) / 2 + params.xOffset;
+ a.dy = height + yOffset + a.height / 2;
+ return height + yOffset + a.height;
+ }, 0);
+ _.each(outAnnotations, function (a) {
+ // adjust by (half of ) the total height
+ // so dy is relative to the host node's center.
+ a.dy -= outboxHeight / 2;
+ a.labelOffset = params.labelOffset;
+ });
+ // Creating scales for touch point between the in-annotation edges
+ // and their hosts.
+ var inTouchHeight = Math.min(renderNodeInfo.height / 2 - renderNodeInfo.radius, inboxHeight / 2);
+ inTouchHeight = inTouchHeight < 0 ? 0 : inTouchHeight;
+ var inY = d3.scale.linear()
+ .domain([0, inAnnotations.length - 1])
+ .range([-inTouchHeight, inTouchHeight]);
+ // Calculate annotation edge position
+ _.each(inAnnotations, function (a, i) {
+ a.points = [
+ // The annotation node end
+ {
+ dx: a.dx + a.width / 2,
+ dy: a.dy
+ },
+ // The host node end
+ {
+ dx: -renderNodeInfo.width / 2,
+ // only use scale if there are more than one,
+ // otherwise center it vertically
+ dy: inAnnotations.length > 1 ? inY(i) : 0
+ }
+ ];
+ });
+ // Creating scales for touch point between the out-annotation edges
+ // and their hosts.
+ var outTouchHeight = Math.min(renderNodeInfo.height / 2 - renderNodeInfo.radius, outboxHeight / 2);
+ outTouchHeight = outTouchHeight < 0 ? 0 : outTouchHeight;
+ var outY = d3.scale.linear()
+ .domain([0, outAnnotations.length - 1])
+ .range([-outTouchHeight, outTouchHeight]);
+ _.each(outAnnotations, function (a, i) {
+ // Add point from the border of the annotation node
+ a.points = [
+ // The host node end
+ {
+ dx: renderNodeInfo.width / 2,
+ // only use scale if there are more than one,
+ // otherwise center it vertically
+ dy: outAnnotations.length > 1 ? outY(i) : 0
+ },
+ // The annotation node end
+ {
+ dx: a.dx - a.width / 2,
+ dy: a.dy
+ }
+ ];
+ });
+ renderNodeInfo.outerWidth = renderNodeInfo.width + renderNodeInfo.inboxWidth +
+ renderNodeInfo.outboxWidth;
+ renderNodeInfo.outerHeight =
+ Math.max(renderNodeInfo.height, inboxHeight, outboxHeight);
+ }
+ /**
+ * Set size of an annotation node.
+ */
+ function sizeAnnotation(a) {
+ switch (a.annotationType) {
+ case graph_1.render.AnnotationType.CONSTANT:
+ _.extend(a, layout.PARAMS.constant.size);
+ break;
+ case graph_1.render.AnnotationType.SHORTCUT:
+ if (a.node.type === graph_1.NodeType.OP) {
+ _.extend(a, layout.PARAMS.shortcutSize.op);
+ }
+ else if (a.node.type === graph_1.NodeType.META) {
+ _.extend(a, layout.PARAMS.shortcutSize.meta);
+ }
+ else if (a.node.type === graph_1.NodeType.SERIES) {
+ _.extend(a, layout.PARAMS.shortcutSize.series);
+ }
+ else {
+ throw Error("Invalid node type: " + a.node.type);
+ }
+ break;
+ case graph_1.render.AnnotationType.SUMMARY:
+ _.extend(a, layout.PARAMS.constant.size);
+ break;
+ }
+ }
+ })(layout = graph_1.layout || (graph_1.layout = {}));
+ })(graph = tf.graph || (tf.graph = {}));
+})(tf || (tf = {})); // close module
+</script>
+
+
+
+
+
+
+
+</head><body><div hidden="" by-vulcanize=""><dom-module id="tf-data-coordinator" assetpath="../components/tf-event-dashboard/">
+ <script>/// <reference path="../../typings/tsd.d.ts" />
+/// <reference path="../../bower_components/plottable/plottable.d.ts" />
+var TF;
+(function (TF) {
+ /* The DataCoordinator generates TF.Datasets for each run/tag combination,
+ * and is responsible for communicating with the backend to load data into them.
+ * A key fact about this design is that when Datasets modify their data, they
+ * automatically notify all dependent Plottable charts.
+ */
+ var DataCoordinator = (function () {
+ function DataCoordinator(urlGenerator, runToTag) {
+ this.datasets = {};
+ this.urlGenerator = urlGenerator;
+ this.runToTag = runToTag;
+ }
+ /* Create or return an array of Datasets for the given
+ * tag and runs. It filters which runs it uses by checking
+ * that data exists for each tag-run combination.
+ * Calling this triggers a load on the dataset.
+ */
+ DataCoordinator.prototype.getDatasets = function (tag, runs) {
+ var _this = this;
+ var usableRuns = runs.filter(function (r) {
+ var tags = _this.runToTag[r];
+ return tags.indexOf(tag) !== -1;
+ });
+ return usableRuns.map(function (r) { return _this.getDataset(tag, r); });
+ };
+ /* Create or return a Dataset for given tag and run.
+ * Calling this triggers a load on the dataset.
+ */
+ DataCoordinator.prototype.getDataset = function (tag, run) {
+ var dataset = this._getDataset(tag, run);
+ dataset.load();
+ return dataset;
+ };
+ DataCoordinator.prototype._getDataset = function (tag, run) {
+ var key = [tag, run].toString();
+ var dataset;
+ if (this.datasets[key] != null) {
+ dataset = this.datasets[key];
+ }
+ else {
+ dataset = new TF.Dataset(tag, run, this.urlGenerator);
+ this.datasets[key] = dataset;
+ }
+ return dataset;
+ };
+ return DataCoordinator;
+ })();
+ TF.DataCoordinator = DataCoordinator;
+})(TF || (TF = {}));
+</script>
+ <script>/// <reference path="../../typings/tsd.d.ts" />
+/// <reference path="../../bower_components/plottable/plottable.d.ts" />
+var __extends = (this && this.__extends) || function (d, b) {
+ for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
+ function __() { this.constructor = d; }
+ __.prototype = b.prototype;
+ d.prototype = new __();
+};
+var TF;
+(function (TF) {
+ /* An extension of Plottable.Dataset that knows how to load data from a backend.
+ */
+ var Dataset = (function (_super) {
+ __extends(Dataset, _super);
+ function Dataset(tag, run, urlGenerator) {
+ _super.call(this, [], { tag: tag, run: run });
+ this.load = _.debounce(this._load, 10);
+ this.tag = tag;
+ this.run = run;
+ this.urlGenerator = urlGenerator;
+ }
+ Dataset.prototype._load = function () {
+ var _this = this;
+ var url = this.urlGenerator(this.tag, this.run);
+ if (this.lastRequest != null) {
+ this.lastRequest.abort();
+ }
+ this.lastRequest = d3.json(url, function (error, json) {
+ _this.lastRequest = null;
+ if (error) {
+ /* tslint:disable */
+ console.log(error);
+ /* tslint:enable */
+ throw new Error("Failure loading JSON at url: \"" + url + "\"");
+ }
+ else {
+ _this.data(json);
+ }
+ });
+ };
+ return Dataset;
+ })(Plottable.Dataset);
+ TF.Dataset = Dataset;
+})(TF || (TF = {}));
+</script>
+ <script>
+ Polymer({
+ is: "tf-data-coordinator",
+ properties: {
+ urlGenerator: Object,
+ outDataCoordinator: {
+ type: Object,
+ computed: "getCoordinator(urlGenerator, runToTag)",
+ notify: true,
+ },
+ },
+ getCoordinator: function(generator, runToTag) {
+ return new TF.DataCoordinator(generator, runToTag);
+ }
+ });
+ </script>
+</dom-module>
+<dom-module id="tf-tooltip-coordinator" assetpath="../components/tf-event-dashboard/">
+ <script>
+ Polymer({
+ is: "tf-tooltip-coordinator",
+ properties: {
+ outTooltipUpdater: {
+ type: Function,
+ value: function() {
+ return (function(tooltipMap, xValue, closestRun) {
+ this._setOutTooltipMap(tooltipMap);
+ this._setOutXValue(xValue);
+ this._setOutClosestRun(closestRun);
+ }).bind(this);
+ },
+ notify: true,
+ readOnly: true,
+ },
+ outTooltipMap: {
+ // a {runName: tooltipValue} map, where runName and tooltipValue are strings.
+ type: Object,
+ notify: true,
+ readOnly: true,
+ },
+ outXValue: {
+ // a string representation of the closest x value for the tooltips
+ type: Number,
+ notify: true,
+ readOnly: true,
+ },
+ outClosestRun: {
+ // the name of the run that is closest to the user cursor (if any)
+ type: String,
+ notify: true,
+ readOnly: true,
+ },
+ },
+ });
+ </script>
+</dom-module>
+<dom-module id="scrollbar-style" assetpath="../components/tf-dashboard-common/">
+ <template>
+ <style>
+ .scrollbar::-webkit-scrollbar-track
+ {
+ visibility: hidden;
+ }
+
+ .scrollbar::-webkit-scrollbar
+ {
+ width: 10px;
+ }
+
+ .scrollbar::-webkit-scrollbar-thumb
+ {
+ border-radius: 10px;
+ -webkit-box-shadow: inset 0 0 2px rgba(0,0,0,.3);
+ background-color: var(--paper-grey-500);
+ color: var(--paper-grey-900);
+ }
+ .scrollbar {
+ box-sizing: border-box;
+ }
+ </style>
+ </template>
+</dom-module>
+<dom-module id="run-color-style" assetpath="../components/tf-dashboard-common/">
+ <template>
+ <style>
+ [color-class="light-blue"] paper-checkbox {
+ --paper-checkbox-checked-color: var(--paper-light-blue-500);
+ --paper-checkbox-checked-ink-color: var(--paper-light-blue-500);
+ --paper-checkbox-unchecked-color: var(--paper-light-blue-900);
+ --paper-checkbox-unchecked-ink-color: var(--paper-light-blue-900);
+ }
+ [color-class="red"] paper-checkbox {
+ --paper-checkbox-checked-color: var(--paper-red-500);
+ --paper-checkbox-checked-ink-color: var(--paper-red-500);
+ --paper-checkbox-unchecked-color: var(--paper-red-900);
+ --paper-checkbox-unchecked-ink-color: var(--paper-red-900);
+ }
+ [color-class="green"] paper-checkbox {
+ --paper-checkbox-checked-color: var(--paper-green-500);
+ --paper-checkbox-checked-ink-color: var(--paper-green-500);
+ --paper-checkbox-unchecked-color: var(--paper-green-900);
+ --paper-checkbox-unchecked-ink-color: var(--paper-green-900);
+ }
+ [color-class="purple"] paper-checkbox {
+ --paper-checkbox-checked-color: var(--paper-purple-500);
+ --paper-checkbox-checked-ink-color: var(--paper-purple-500);
+ --paper-checkbox-unchecked-color: var(--paper-purple-900);
+ --paper-checkbox-unchecked-ink-color: var(--paper-purple-900);
+ }
+ [color-class="teal"] paper-checkbox {
+ --paper-checkbox-checked-color: var(--paper-teal-500);
+ --paper-checkbox-checked-ink-color: var(--paper-teal-500);
+ --paper-checkbox-unchecked-color: var(--paper-teal-900);
+ --paper-checkbox-unchecked-ink-color: var(--paper-teal-900);
+ }
+ [color-class="pink"] paper-checkbox {
+ --paper-checkbox-checked-color: var(--paper-pink-500);
+ --paper-checkbox-checked-ink-color: var(--paper-pink-500);
+ --paper-checkbox-unchecked-color: var(--paper-pink-900);
+ --paper-checkbox-unchecked-ink-color: var(--paper-pink-900);
+ }
+ [color-class="orange"] paper-checkbox {
+ --paper-checkbox-checked-color: var(--paper-orange-500);
+ --paper-checkbox-checked-ink-color: var(--paper-orange-500);
+ --paper-checkbox-unchecked-color: var(--paper-orange-900);
+ --paper-checkbox-unchecked-ink-color: var(--paper-orange-900);
+ }
+ [color-class="brown"] paper-checkbox {
+ --paper-checkbox-checked-color: var(--paper-brown-500);
+ --paper-checkbox-checked-ink-color: var(--paper-brown-500);
+ --paper-checkbox-unchecked-color: var(--paper-brown-900);
+ --paper-checkbox-unchecked-ink-color: var(--paper-brown-900);
+ }
+ [color-class="indigo"] paper-checkbox {
+ --paper-checkbox-checked-color: var(--paper-indigo-500);
+ --paper-checkbox-checked-ink-color: var(--paper-indigo-500);
+ --paper-checkbox-unchecked-color: var(--paper-indigo-900);
+ --paper-checkbox-unchecked-ink-color: var(--paper-indigo-900);
+ }
+ </style>
+ </template>
+</dom-module>
+<dom-module id="tf-multi-checkbox" assetpath="../components/tf-multi-checkbox/">
+ <style include="scrollbar-style"></style>
+ <style include="run-color-style"></style>
+
+ <template>
+ <div id="outer-container" class="scrollbar">
+ <template is="dom-repeat" items="[[names]]" sort="[[_tooltipComparator(tooltips, tooltipOrderer)]]">
+ <div class="run-row" color-class$="[[_applyColorClass(item, classScale)]]" null-tooltip$="[[_isNullTooltip(item, tooltips)]]" highlight$="[[_isHighlighted(item, highlights.*)]]">
+ <div class="checkbox-container vertical-align-container">
+ <paper-checkbox class="checkbox vertical-align-center" name="[[item]]" checked$="[[_isChecked(item,outSelected.*)]]" on-change="_checkboxChange"></paper-checkbox>
+ </div>
+ <div class="item-label-container">
+ <span>[[item]]</span>
+ </div>
+ <div class="tooltip-value-container vertical-align-container">
+ <span class="vertical-align-top">[[_lookupTooltip(item,tooltips)]]</span>
+ </div>
+ </div>
+ </template>
+ </div>
+ <style>
+ :host {
+ display: flex;
+ flex-direction: column;
+ height: 100%;
+ }
+ #outer-container {
+ overflow-y: scroll;
+ overflow-x: hidden;
+ width: 100%;
+ flex-grow: 1;
+ flex-shrink: 1;
+ word-wrap: break-word;
+ }
+ .run-row {
+ padding-top: 5px;
+ padding-bottom: 5px;
+ display: flex;
+ flex-direction: row;
+ font-size: 13px;
+ }
+ .checkbox-container {
+ flex-grow: 0;
+ flex-shrink: 0;
+ }
+ .checkbox {
+ padding-left: 2px;
+ width: 32px;
+ }
+ .item-label-container {
+ flex-grow: 1;
+ flex-shrink: 1;
+ width: 0px; /* hack to get the flex-grow to work properly */
+ }
+ .tooltip-value-container {
+ display: flex;
+ justify-content: center;
+ flex-grow: 0;
+ flex-shrink: 0;
+ text-align:right;
+ padding-left: 2px;
+ }
+ .vertical-align-container {
+ display: flex;
+ justify-content: center;
+ }
+ .vertical-align-container .vertical-align-center {
+ align-self: center;
+ }
+ .vertical-align-container .vertical-align-top {
+ align-self: start;
+ }
+ [null-tooltip] {
+ display: none;
+ }
+ [highlight] {
+ font-weight: bold;
+ }
+ </style>
+ </template>
+
+ <script>
+ Polymer({
+ is: "tf-multi-checkbox",
+ properties: {
+ names: Array,
+ tooltipOrderer: {
+ /* Used to compute how to order the tooltips based on the tooltip value.
+ * By default, it parses the tooltip strings as numbers.
+ * If set to a falsey value, tooltips are always ordered lexicographically.
+ */
+ type: Function,
+ value: function() {
+ return function(x) {return +x;}
+ },
+ },
+ tooltips: Object,
+ highlights: Array,
+ outSelected: {
+ type: Array,
+ notify: true,
+ value: function() {
+ return [];
+ },
+ },
+ hideMissingTooltips: {
+ // If we have tooltips, but some names are missing, do we hide them?
+ type: Boolean,
+ value: true,
+ },
+ classScale: Function, // map from run name to css class
+ },
+ observers: [
+ "_initializeOutSelected(names.*)",
+ ],
+ _lookupTooltip: function(item, tooltips) {
+ return tooltips != null ? tooltips[item] : null;
+ },
+ _isNullTooltip: function(item, tooltips) {
+ if (!this.hideMissingTooltips) {
+ return true;
+ }
+ if (tooltips == null) {
+ return false;
+ }
+ return tooltips[item] == null;
+ },
+ _initializeOutSelected: function(change) {
+ this.outSelected = change.base.slice();
+ },
+ _tooltipComparator: function(tooltips, tooltipOrderer) {
+ return function(a, b) {
+ if (!tooltips || !tooltipOrderer) {
+ // if we're missing tooltips or orderer, do lexicogrpahic sort
+ return a.localeCompare(b);
+ }
+ function getValue(x) {
+ var value = tooltipOrderer(tooltips[x]);
+ return value == null || _.isNaN(value) ? -Infinity : value;
+ }
+ var aValue = getValue(a);
+ var bValue = getValue(b);
+ return aValue === bValue ? a.localeCompare(b) : bValue - aValue;
+ }
+ },
+ _checkboxChange: function(e) {
+ var name = e.srcElement.name;
+ var idx = this.outSelected.indexOf(name);
+ var checked = e.srcElement.checked;
+ if (checked && idx === -1) {
+ this.push("outSelected", name);
+ } else if (!checked && idx !== -1) {
+ this.splice("outSelected", idx, 1);
+ }
+ },
+ _isChecked: function(item, outSelectedChange) {
+ var outSelected = outSelectedChange.base;
+ return outSelected.indexOf(item) !== -1;
+ },
+ _initializeRuns: function(change) {
+ this.outSelected = change.base.slice();
+ },
+ _applyColorClass: function(item, classScale) {
+ // TODO: Update style just on the element that changes
+ // and apply at microtask timing
+ this.debounce("restyle", function (){
+ this.updateStyles();
+ }, 16);
+ return classScale(item);
+ },
+ _isHighlighted: function(item, highlights) {
+ return highlights.base.indexOf(item) !== -1;
+ },
+ });
+ </script>
+
+</dom-module>
+<dom-module id="tf-run-selector" assetpath="../components/tf-event-dashboard/">
+ <template>
+ <div id="top-text">
+ <template is="dom-if" if="[[xValue]]">
+ <div class="x-tooltip tooltip-container">
+ <div class="x-tooltip-label">[[xType]]</div>
+ <div class="x-tooltip-value">[[xValue]]</div>
+ </div>
+ </template>
+ <template is="dom-if" if="[[!xValue]]">
+ <div id="tooltip-help" class="tooltip-container">
+ Selected Runs:
+ </div>
+ </template>
+ </div>
+ <tf-multi-checkbox names="[[runs]]" tooltips="[[tooltips]]" highlights="[[_arrayify(closestRun)]]" out-selected="{{outSelected}}" class-scale="[[classScale]]" hide-missing-tooltips=""></tf-multi-checkbox>
+ <style>
+ :host {
+ display: flex;
+ flex-direction: column;
+ padding-bottom: 10px;
+ box-sizing: border-box;
+ }
+ #top-text {
+ width: 100%;
+ flex-grow: 0;
+ flex-shrink: 0;
+ padding-left: 35px;
+ padding-right: 16px;
+ padding-bottom: 6px;
+ box-sizing: border-box;
+ color: var(--paper-grey-800);
+ }
+ tf-multi-checkbox {
+ display: flex;
+ flex-grow: 1;
+ flex-shrink: 1;
+ height: 0px; /* hackhack So the flex-grow takes over and gives it space */
+ }
+ .x-tooltip {
+ display: flex;
+ flex-direction: row;
+ }
+ .x-tooltip-label {
+ flex-grow: 1;
+ align-self: flex-start;
+ }
+ .x-tooltip-value {
+ align-self: flex-end;
+ }
+ </style>
+ </template>
+ <script>
+ Polymer({
+ is: "tf-run-selector",
+ properties: {
+ outSelected: {type: Array, notify: true},
+ // runs: an array of strings, representing the run names that may be chosen
+ runs: Array,
+ tooltips: {type: Object, value: null}, // {[run: string]: string}
+ xValue: {type: String, value: null}, // the string representing run's x val
+ xType: String, // string: relative, stpe, wall_time
+ classScale: Object, // map from run name to color class (css)
+ closestRun: {type: String, value: null}, // which run has a value closest to mouse coordinate
+ },
+ _arrayify: function(item) {
+ return [item];
+ },
+ });
+ </script>
+</dom-module>
+<dom-module id="tf-x-type-selector" assetpath="../components/tf-event-dashboard/">
+ <template>
+ <div id="buttons">
+ <p>X Type: </p>
+ <paper-button class="x-button selected" id="step" on-tap="_select" raised="">
+ step
+ </paper-button>
+ <paper-button class="x-button" id="relative" on-tap="_select">
+ relative
+ </paper-button>
+ <paper-button class="x-button" id="wall_time" on-tap="_select">
+ wall
+ </paper-button>
+ </div>
+ <style>
+ .x-button {
+ width: 29%;
+ font-size: 14px;
+ background-color: var(--paper-grey-500);
+ margin-top: 5px;
+ color: white;
+ }
+
+ .x-button.selected {
+ font-weight: bold;
+ background-color: var(--tb-orange-strong) !important;
+ }
+
+ #buttons p {
+ text-align: center;
+ font-size: 12px;
+ margin: 0;
+ }
+ </style>
+ </template>
+ <script>
+ Polymer({
+ is: "tf-x-type-selector",
+ properties: {
+ outXType: {type: String, notify: true, readOnly: true, value: "step"},
+ },
+ _select: function(e) {
+ var _this = this;
+ ["step", "wall_time", "relative"].forEach(function(id) {
+ _this.$[id].raised = false;
+ _this.$[id].classList.remove("selected");
+ });
+ e.currentTarget.raised = true;
+ this._setOutXType(e.currentTarget.id);
+ e.currentTarget.classList.add("selected");
+ },
+ });
+ </script>
+</dom-module>
+<dom-module id="tf-run-generator" assetpath="../components/tf-dashboard-common/">
+ <template>
+ <iron-ajax id="ajax" auto="" url="[[url]]" handle-as="json" debounce="300" on-response="_setResponse" verbose="true">
+ </iron-ajax>
+ </template>
+ <script>
+ Polymer({
+ is: "tf-run-generator",
+ properties: {
+ url: String,
+ _runToTag: {
+ type: Object,
+ readOnly: true,
+ },
+ outRunToScalars: {
+ // {[runName: string]: string[]}
+ // the names of scalar tags.
+ type: Object,
+ computed: "_scalars(_runToTag.*)",
+ notify: true,
+ },
+ outRunToHistograms: {
+ // {[runName: string]: string[]}
+ // the names of histogram tags.
+ type: Object,
+ computed: "_histograms(_runToTag.*)",
+ notify: true,
+ },
+ outRunToCompressedHistograms: {
+ // {[runName: string]: string[]}
+ // the names of histogram tags.
+ type: Object,
+ computed: "_compressedHistograms(_runToTag.*)",
+ notify: true,
+ },
+ outRunToImages: {
+ // {[runName: string]: string[]}
+ // the names of image tags.
+ type: Object,
+ computed: "_images(_runToTag.*)",
+ notify: true,
+ },
+ outRunsWithGraph: {
+ // ["run1", "run2", ...]
+ // array of run names that have an associated graph definition.
+ type: Array,
+ computed: "_graphs(_runToTag.*)",
+ notify: true
+ }
+ },
+ _scalars: function(_runToTag) {
+ return _.mapValues(_runToTag.base, "scalars");
+ },
+ _histograms: function(_runToTag) {
+ return _.mapValues(_runToTag.base, "histograms");
+ },
+ _compressedHistograms: function(_runToTag) {
+ return _.mapValues(_runToTag.base, "compressedHistograms");
+ },
+ _images: function(_runToTag) {
+ return _.mapValues(_runToTag.base, "images");
+ },
+ _graphs: function(_runToTag) {
+ var runsWithGraph = [];
+ _.each(_runToTag.base, function(runInfo, runName) {
+ if (runInfo.graph === true) {
+ runsWithGraph.push(runName);
+ }
+ });
+ return runsWithGraph;
+ },
+ _setResponse: function(event) {
+ this._set_runToTag(event.detail.response);
+ }
+ });
+ </script>
+</dom-module>
+<dom-module id="tf-color-scale" assetpath="../components/tf-event-dashboard/">
+ <script>
+ (function() {
+ // TODO(danmane) - get Plottable team to make an API point for this
+ Plottable.Scales.Color._LOOP_LIGHTEN_FACTOR = 0;
+ var classColorPairs = [
+ ["light-blue", "#03A9F4"],
+ ["red" , "#f44366"],
+ ["green" , "#4CAF50"],
+ ["purple" , "#9c27b0"],
+ ["teal" , "#009688"],
+ ["pink" , "#e91e63"],
+ ["orange" , "#ff9800"],
+ ["brown" , "#795548"],
+ ["indigo" , "#3f51b5"],
+ ];
+ var classes = _.pluck(classColorPairs, 0);
+ var colors = _.pluck(classColorPairs, 1);
+ Polymer({
+ is: "tf-color-scale",
+ properties: {
+ runs: Array,
+ outClassScale: {
+ type: Object,
+ notify: true,
+ readOnly: true,
+ value: function() {
+ return new d3.scale.ordinal().range(classes);
+ },
+ // TODO(danmane): the class scale will not update if the domain changes.
+ // this behavior is inconsistent with the ColorScale.
+ // in practice we don't change runs after initial load so it's not currently an issue
+ },
+ outColorScale: {
+ type: Object,
+ notify: true,
+ readOnly: true,
+ value: function() {
+ var scale = new Plottable.Scales.Color().range(colors);
+ scale.onUpdate(this._notifyColorScaleDomainChange.bind(this));
+ return scale;
+ },
+ },
+ },
+ observers: ["_changeRuns(runs.*)"],
+ _changeRuns: function(runs) {
+ this.outClassScale.domain(this.runs);
+ this.outColorScale.domain(this.runs);
+ },
+ _notifyColorScaleDomainChange: function() {
+ this.notifyPath("outColorScale.domain_path", this.outColorScale.domain());
+ this.outColorScale.domain_path = null;
+ },
+ });
+ })();
+ </script>
+</dom-module>
+<dom-module id="tf-url-generator" assetpath="../components/tf-dashboard-common/">
+ <script>/// <reference path="../../typings/tsd.d.ts" />
+/// <reference path="../../bower_components/plottable/plottable.d.ts" />
+var TF;
+(function (TF) {
+ var Urls;
+ (function (Urls) {
+ Urls.routes = ["runs", "scalars", "histograms",
+ "compressedHistograms", "images",
+ "individualImage", "graph"];
+ function router(route) {
+ return function (tag, run) {
+ return "/" + route + "?tag=" + encodeURIComponent(tag)
+ + "&run=" + encodeURIComponent(run);
+ };
+ }
+ function runsUrl() {
+ return "/runs";
+ }
+ Urls.runsUrl = runsUrl;
+ Urls.scalarsUrl = router("scalars");
+ Urls.histogramsUrl = router("histograms");
+ Urls.compressedHistogramsUrl = router("compressedHistograms");
+ Urls.imagesUrl = router("images");
+ function individualImageUrl(query) {
+ return "/individualImage?" + query;
+ }
+ Urls.individualImageUrl = individualImageUrl;
+ function graphUrl(run) {
+ return "/graph?run=" + encodeURIComponent(run);
+ }
+ Urls.graphUrl = graphUrl;
+ })(Urls = TF.Urls || (TF.Urls = {}));
+})(TF || (TF = {}));
+</script>
+ <script>
+ var polymerObject = {
+ is: "tf-url-generator",
+ properties: {
+ outRunsUrl: {
+ type: String,
+ value: function() {
+ return TF.Urls.runsUrl();
+ },
+ readOnly: true,
+ notify: true,
+ },
+ },
+ };
+ TF.Urls.routes.forEach(function(route) {
+ /* for each route (other than runs, handled seperately):
+ * out`RouteName`: {
+ * type: Function,
+ * readOnly: true,
+ * notify: true,
+ * value: function() {
+ * return TF.Urls.`routeName`Url;
+ * }
+ */
+ if (route === "runs") {
+ return;
+ }
+ var urlName = route + "Url";
+ var propertyName = Polymer.CaseMap.dashToCamelCase("out-" + urlName + "Generator");
+ polymerObject.properties[propertyName] = {
+ type: Function,
+ value: function() {
+ return TF.Urls[urlName];
+ },
+ notify: true,
+ readOnly: true,
+ }
+ });
+ Polymer(polymerObject);
+ </script>
+</dom-module>
+<dom-module id="tf-dashboard-layout" assetpath="../components/tf-dashboard-common/">
+ <template>
+ <div id="sidebar">
+ <content select=".sidebar"></content>
+ </div>
+
+ <div id="center" class="scrollbar">
+ <content select=".center"></content>
+ </div>
+ <style include="scrollbar-style"></style>
+ <style>
+ #sidebar {
+ width: inherit;
+ height: 100%;
+ background-color: var(--tb-grey-darker);
+ background-image: linear-gradient(to right, var(--tb-grey-lighter), var(--tb-grey-lighter));
+ overflow: ellipsis;
+ padding-left: 10px;
+ padding-right: 10px;
+ flex-grow: 0;
+ flex-shrink: 0;
+ }
+
+ #center {
+ margin: 0 10px;
+ height: 100%;
+ overflow-y: scroll;
+ padding-right: 12px;
+ flex-grow: 1;
+ flex-shrink: 1;
+ }
+ :host {
+ display: flex;
+ flex-direction: row;
+ height: 100%;
+ }
+ </style>
+ </template>
+ <script>
+ Polymer({
+ is: "tf-dashboard-layout",
+ });
+ </script>
+</dom-module>
+<dom-module id="dashboard-style" assetpath="../components/tf-dashboard-common/">
+ <template>
+ <style>
+ .card {
+ height: 200px;
+ width: 300px;
+ display: flex;
+ flex-direction: column;
+ margin: 5px 5px;
+ padding: 5px;
+ border: 1px solid var(--paper-grey-500);
+ border-radius: 3px;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ position: relative;
+ }
+
+ .card .card-title {
+ flex-grow: 0;
+ flex-shrink: 0;
+ margin-bottom: 2px;
+ font-size: 14px;
+ font-weight: bold;
+ text-overflow: ellipsis;
+ overflow: hidden;
+ }
+
+ .card .card-content {
+ flex-grow: 1;
+ flex-shrink: 1;
+ display: flex;
+ }
+ .card .card-bottom-row {
+ flex-grow: 0;
+ flex-shrink: 0;
+ padding-left: 10px;
+ padding-right: 10px;
+ }
+
+ .card.selected {
+ height: 400px;
+ width: 100%;
+ }
+
+ [shift] {
+ bottom: 20px !important;
+ }
+
+ .expand-button {
+ position: absolute;
+ left: 0px;
+ bottom: 0px;
+ color: #2196F3;
+ display: block;
+ }
+
+ #content-container{
+ display: block;
+ }
+
+ .sidebar {
+ display: flex;
+ flex-direction: column;
+ height: 100%;
+ }
+
+ #categorizer {
+ flex-shrink: 0;
+ }
+
+ #xTypeSelector {
+ flex-shrink: 0;
+ margin: 20px 0;
+ }
+
+ #runSelector {
+ flex-shrink: 1;
+ flex-grow: 1;
+ }
+
+ #download-option {
+ padding-left: 55px;
+ color: var(--paper-grey-700);
+ font-size: 14px;
+ }
+
+ #download-option paper-toggle-button {
+ --paper-toggle-button-checked-button-color: var(--tb-orange-strong);
+ --paper-toggle-button-checked-bar-color: var(--tb-orange-weak);
+
+ }
+ </style>
+ </template>
+</dom-module>
+<dom-module id="tf-downloader" assetpath="../components/tf-dashboard-common/">
+ <template>
+ <paper-dropdown-menu no-label-float="true" label="run to download" selected-item-label="{{_run}}">
+ <paper-menu class="dropdown-content">
+ <template is="dom-repeat" items="[[_runs]]">
+ <paper-item no-label-float="true">[[item]]</paper-item>
+ </template>
+ </paper-menu>
+ </paper-dropdown-menu>
+ <a download="[[_csvName(_run)]]" href="[[_csvUrl(_run, urlFn)]]">CSV</a>
+ <a download="[[_jsonName(_run)]]" href="[[_jsonUrl(_run, urlFn)]]">JSON</a>
+ <style>
+ :host {
+ display: block;
+ }
+ paper-dropdown-menu {
+ width: 220px;
+ --paper-input-container-label: {
+ font-size: 10px;
+ }
+ --paper-input-container-input: {
+ font-size: 10px;
+ }
+ }
+ a {
+ font-size: 10px;
+ border-radius: 3px;
+ border: 1px solid #EEE;
+ }
+ paper-input {
+ font-size: 22px;
+ }
+ </style>
+ </template>
+ <script>
+ Polymer({
+ is: "tf-downloader",
+ properties: {
+ _run: String,
+ _runs: {
+ type: Array,
+ computed: "_computeRuns(runToTag.*, selectedRuns.*)",
+ },
+ selectedRuns: Array,
+ runToTag: Object,
+ tag: String,
+ urlFn: Function,
+ },
+ _computeRuns: function(runToTagChange, selectedRunsChange) {
+ var runToTag = this.runToTag;
+ var tag = this.tag;
+ return this.selectedRuns.filter(function(x) {
+ return runToTag[x].indexOf(tag) !== -1;
+ })
+ },
+ _csvUrl: function(_run, urlFn) {
+ return urlFn(this.tag, _run) + "&format=csv";
+ },
+ _jsonUrl: function(_run, urlFn) {
+ return urlFn(this.tag, _run);
+ },
+ _csvName: function(_run) {
+ return "run_" + _run + ",tag_" + this.tag + ".csv";
+ },
+ _jsonName: function(_run) {
+ return "run-" + _run + "-tag-" + this.tag + ".json";
+ },
+ });
+ </script>
+</dom-module>
+<dom-module id="tf-regex-group" assetpath="../components/tf-regex-group/">
+ <template>
+ <div class="regex-list">
+ <template is="dom-repeat" items="{{rawRegexes}}">
+ <div class="regex-line">
+ <paper-input id="text-input" class="regex-input" label="input new regex" no-label-float="" bind-value="{{item.regex}}" invalid="[[!item.valid]]" on-keyup="moveFocus"></paper-input>
+ <paper-toggle-button class="active-button" checked="{{item.active}}" disabled="[[!item.valid]]"></paper-toggle-button>
+
+ <paper-icon-button icon="delete" class="delete-button" aria-label="Delete Regex" tabindex="0" on-tap="deleteRegex"></paper-icon-button>
+ </div>
+ <style>
+ .regex-input {
+ width: 210px;
+ display: inline-block;
+ padding-left: 8px;
+ padding-right: 5px;
+ }
+
+ .active-button {
+ --paper-toggle-button-checked-button-color: var(--tb-orange-strong);
+ --paper-toggle-button-checked-bar-color: var(--tb-orange-weak);
+ border: none;
+ }
+
+ .delete-button {
+ color: var(--paper-pink-900);
+ width: 24px;
+ height: 24px;
+ }
+ .regex-list {
+ margin-bottom: 10px;
+ }
+ paper-input {
+ --paper-input-container-focus-color: var(--tb-orange-strong);
+ }
+ </style>
+ </template>
+ </div>
+ </template>
+ <script>
+ Polymer({
+ is: "tf-regex-group",
+ properties: {
+ rawRegexes: {
+ type: Array,
+ value: function() {
+ return [{regex: "", active: true, valid: true}];
+ }
+ },
+ regexes: {type: Array, computed: "usableRegexes(rawRegexes.*)", notify: true},
+ },
+ observers: [
+ "addNewRegexIfNeeded(rawRegexes.*)",
+ "checkValidity(rawRegexes.*)",
+ ],
+ checkValidity: function(x) {
+ var match = x.path.match(/rawRegexes\.(\d+)\.regex/);
+ if (match) {
+ var idx = match[1];
+ this.set("rawRegexes." + idx + ".valid", this.isValid(x.value));
+ }
+ },
+ isValid: function(s) {
+ try {
+ new RegExp(s);
+ return true;
+ } catch (e) {
+ return false;
+ }
+ },
+ usableRegexes: function(regexes) {
+ var isValid = this.isValid;
+ return regexes.base.filter(function (r) {
+ // Checking validity here (rather than using the data property)
+ // is necessary because otherwise we might send invalid regexes due
+ // to the fact that this function can call before the observer does
+ return r.regex !== "" && r.active && isValid(r.regex);
+ }).map(function(r) {
+ return r.regex;
+ });
+ },
+ addNewRegexIfNeeded: function() {
+ var last = this.rawRegexes[this.rawRegexes.length - 1];
+ if (last.regex !== "") {
+ this.push("rawRegexes", {regex: "", active: true, valid: true});
+ }
+ },
+ deleteRegex: function(e) {
+ if (this.rawRegexes.length > 1) {
+ this.splice("rawRegexes", e.model.index, 1);
+ }
+ },
+ moveFocus: function(e) {
+ if (e.keyCode === 13) {
+ var idx = e.model.index;
+ var inputs = Polymer.dom(this.root).querySelectorAll(".regex-input");
+ if (idx < this.rawRegexes.length - 1) {
+ inputs[idx+1].$.input.focus();
+ } else {
+ document.activeElement.blur();
+ }
+ }
+ }
+ });
+ </script>
+</dom-module>
+<dom-module id="tf-categorizer" assetpath="../components/tf-categorizer/">
+ <template>
+ <div class="inputs">
+ <tf-regex-group id="regex-group" regexes="{{regexes}}"></tf-regex-group>
+ </div>
+ <div id="underscore-categorization">
+ <span>Split On Underscores:</span>
+ <paper-toggle-button checked="{{splitOnUnderscore}}"></paper-toggle-button>
+ </div>
+ <style>
+ :host {
+ display: block;
+ padding-bottom: 5px;
+ padding-top: 5px;
+ }
+
+ .inputs {
+ padding-left: 5px;
+ }
+
+ paper-toggle-button {
+ --paper-toggle-button-checked-button-color: var(--tb-orange-strong);
+ --paper-toggle-button-checked-bar-color: var(--tb-orange-weak);
+ }
+ #underscore-categorization {
+ padding-left: 94px;
+ color: var(--paper-grey-700);
+ font-size: 14px;
+ }
+ </style>
+ </template>
+ <script>/// <reference path="../../typings/tsd.d.ts" />
+var Categorizer;
+(function (Categorizer) {
+ /* Canonical TensorFlow ops are namespaced using forward slashes.
+ * This fallback categorizer categorizes by the top-level namespace.
+ */
+ Categorizer.topLevelNamespaceCategorizer = splitCategorizer(/\//);
+ // Try to produce good categorizations on legacy graphs, which often
+ // are namespaced like l1_foo/bar or l2_baz/bam.
+ // If there is no leading underscore before the first forward slash,
+ // then it behaves the same as topLevelNamespaceCategorizer
+ Categorizer.legacyUnderscoreCategorizer = splitCategorizer(/[\/_]/);
+ function fallbackCategorizer(s) {
+ switch (s) {
+ case "TopLevelNamespaceCategorizer":
+ return Categorizer.topLevelNamespaceCategorizer;
+ case "LegacyUnderscoreCategorizer":
+ return Categorizer.legacyUnderscoreCategorizer;
+ default:
+ throw new Error("Unrecognized categorization strategy: " + s);
+ }
+ }
+ Categorizer.fallbackCategorizer = fallbackCategorizer;
+ /* An "extractor" is a function that takes a tag name, and "extracts" a category name.
+ * This function takes an extractor, and produces a categorizer.
+ * Currently, it is just used for the fallbackCategorizer, but we may want to
+ * refactor the general categorization logic to use the concept of extractors.
+ */
+ function extractorToCategorizer(extractor) {
+ return function (tags) {
+ if (tags.length === 0) {
+ return [];
+ }
+ var sortedTags = tags.slice().sort();
+ var categories = [];
+ var currentCategory = {
+ name: extractor(sortedTags[0]),
+ tags: [],
+ };
+ sortedTags.forEach(function (t) {
+ var topLevel = extractor(t);
+ if (currentCategory.name !== topLevel) {
+ categories.push(currentCategory);
+ currentCategory = {
+ name: topLevel,
+ tags: [],
+ };
+ }
+ currentCategory.tags.push(t);
+ });
+ categories.push(currentCategory);
+ return categories;
+ };
+ }
+ function splitCategorizer(r) {
+ var extractor = function (t) {
+ return t.split(r)[0];
+ };
+ return extractorToCategorizer(extractor);
+ }
+ function defineCategory(ruledef) {
+ var r = new RegExp(ruledef);
+ var f = function (tag) {
+ return r.test(tag);
+ };
+ return { name: ruledef, matches: f };
+ }
+ Categorizer.defineCategory = defineCategory;
+ function _categorizer(rules, fallback) {
+ return function (tags) {
+ var remaining = d3.set(tags);
+ var userSpecified = rules.map(function (def) {
+ var tags = [];
+ remaining.forEach(function (t) {
+ if (def.matches(t)) {
+ tags.push(t);
+ }
+ });
+ var cat = { name: def.name, tags: tags.sort() };
+ return cat;
+ });
+ var defaultCategories = fallback(remaining.values());
+ return userSpecified.concat(defaultCategories);
+ };
+ }
+ Categorizer._categorizer = _categorizer;
+ function categorizer(s) {
+ var rules = s.categoryDefinitions.map(defineCategory);
+ var fallback = fallbackCategorizer(s.fallbackCategorizer);
+ return _categorizer(rules, fallback);
+ }
+ Categorizer.categorizer = categorizer;
+ ;
+})(Categorizer || (Categorizer = {}));
+</script>
+ <script>
+ Polymer({
+ is: "tf-categorizer",
+ properties: {
+ regexes: {type: Array},
+ tags: {type: Array},
+ categoriesAreExclusive: {type: Boolean, value: true},
+ fallbackCategorizer: {
+ type: String,
+ computed: "chooseFallbackCategorizer(splitOnUnderscore)"
+ },
+ splitOnUnderscore: {
+ type: Boolean,
+ value: false,
+ },
+ categorizer: {
+ type: Object,
+ computed: "computeCategorization(regexes.*, categoriesAreExclusive, fallbackCategorizer)",
+ },
+ categories: {type: Array, value: function() {return [];}, notify: true, readOnly: true},
+ },
+ observers: ['recategorize(tags.*, categorizer)'],
+ computeCategorization: function(regexes, categoriesAreExclusive, fallbackCategorizer) {
+ var categorizationStrategy = {
+ categoryDefinitions: regexes.base,
+ categoriesAreExclusive: categoriesAreExclusive,
+ fallbackCategorizer: fallbackCategorizer,
+ };
+ return Categorizer.categorizer(categorizationStrategy);
+ },
+ recategorize: function() {
+ this.debounce("tf-categorizer-recategorize", function (){
+ var categories = this.categorizer(this.tags);
+ this._setCategories(categories);
+ })
+ },
+ chooseFallbackCategorizer: function(splitOnUnderscore) {
+ if (splitOnUnderscore) {
+ return "LegacyUnderscoreCategorizer";
+ } else {
+ return "TopLevelNamespaceCategorizer";
+ }
+ },
+ });
+ </script>
+</dom-module>
+<dom-module id="tf-chart" assetpath="../components/tf-event-dashboard/">
+ <template>
+ <svg id="chartsvg"></svg>
+ <style>
+ :host {
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ display: flex;
+ flex-direction: column;
+ flex-grow: 1;
+ flex-shrink: 1;
+ }
+ svg {
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ flex-grow: 1;
+ flex-shrink: 1;
+ }
+ .plottable .crosshairs line.guide-line {
+ stroke: #777;
+ }
+ </style>
+ </template>
+ <script>var __extends = (this && this.__extends) || function (d, b) {
+ for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
+ function __() { this.constructor = d; }
+ __.prototype = b.prototype;
+ d.prototype = new __();
+};
+var Plottable;
+(function (Plottable) {
+ var DragZoomLayer = (function (_super) {
+ __extends(DragZoomLayer, _super);
+ /* Constructs a SelectionBoxLayer with an attached DragInteraction and ClickInteraction.
+ * On drag, it triggers an animated zoom into the box that was dragged.
+ * On double click, it zooms back out to the original view, before any zooming.
+ * The zoom animation uses an easing function (default d3.ease("cubic-in-out")) and is customizable.
+ * Usage: Construct the selection box layer and attach x and y scales, and then add the layer
+ * over the plot you are zooming on using a Component Group.
+ * TODO(danmane) - merge this into Plottable
+ */
+ function DragZoomLayer(xScale, yScale) {
+ _super.call(this);
+ this.isZoomed = false;
+ this.easeFn = d3.ease("cubic-in-out");
+ this._animationTime = 750;
+ this.xScale(xScale);
+ this.yScale(yScale);
+ this._dragInteraction = new Plottable.Interactions.Drag();
+ this._dragInteraction.attachTo(this);
+ this._doubleClickInteraction = new Plottable.Interactions.DoubleClick();
+ this._doubleClickInteraction.attachTo(this);
+ this.setupCallbacks();
+ }
+ DragZoomLayer.prototype.setupCallbacks = function () {
+ var _this = this;
+ var dragging = false;
+ this._dragInteraction.onDragStart(function (startPoint) {
+ _this.bounds({
+ topLeft: startPoint,
+ bottomRight: startPoint,
+ });
+ });
+ this._dragInteraction.onDrag(function (startPoint, endPoint) {
+ _this.bounds({ topLeft: startPoint, bottomRight: endPoint });
+ _this.boxVisible(true);
+ dragging = true;
+ });
+ this._dragInteraction.onDragEnd(function (startPoint, endPoint) {
+ _this.boxVisible(false);
+ _this.bounds({ topLeft: startPoint, bottomRight: endPoint });
+ if (dragging) {
+ _this.zoom();
+ }
+ dragging = false;
+ });
+ this._doubleClickInteraction.onDoubleClick(this.unzoom.bind(this));
+ };
+ DragZoomLayer.prototype.animationTime = function (animationTime) {
+ if (animationTime == null) {
+ return this._animationTime;
+ }
+ if (animationTime < 0) {
+ throw new Error("animationTime cannot be negative");
+ }
+ this._animationTime = animationTime;
+ return this;
+ };
+ /* Set the easing function, which determines how the zoom interpolates over time. */
+ DragZoomLayer.prototype.ease = function (fn) {
+ if (typeof (fn) !== "function") {
+ throw new Error("ease function must be a function");
+ }
+ if (fn(0) !== 0 || fn(1) !== 1) {
+ Plottable.Utils.Window.warn("Easing function does not maintain invariant f(0)==0 && f(1)==1. Bad behavior may result.");
+ }
+ this.easeFn = fn;
+ return this;
+ };
+ // Zoom into extent of the selection box bounds
+ DragZoomLayer.prototype.zoom = function () {
+ var x0 = this.xExtent()[0].valueOf();
+ var x1 = this.xExtent()[1].valueOf();
+ var y0 = this.yExtent()[1].valueOf();
+ var y1 = this.yExtent()[0].valueOf();
+ if (x0 === x1 || y0 === y1) {
+ return;
+ }
+ if (!this.isZoomed) {
+ this.isZoomed = true;
+ this.xDomainToRestore = this.xScale().domain();
+ this.yDomainToRestore = this.yScale().domain();
+ }
+ this.interpolateZoom(x0, x1, y0, y1);
+ };
+ // Restore the scales to their state before any zoom
+ DragZoomLayer.prototype.unzoom = function () {
+ if (!this.isZoomed) {
+ return;
+ }
+ this.isZoomed = false;
+ this.interpolateZoom(this.xDomainToRestore[0], this.xDomainToRestore[1], this.yDomainToRestore[0], this.yDomainToRestore[1]);
+ };
+ // If we are zooming, disable interactions, to avoid contention
+ DragZoomLayer.prototype.isZooming = function (isZooming) {
+ this._dragInteraction.enabled(!isZooming);
+ this._doubleClickInteraction.enabled(!isZooming);
+ };
+ DragZoomLayer.prototype.interpolateZoom = function (x0f, x1f, y0f, y1f) {
+ var _this = this;
+ var x0s = this.xScale().domain()[0].valueOf();
+ var x1s = this.xScale().domain()[1].valueOf();
+ var y0s = this.yScale().domain()[0].valueOf();
+ var y1s = this.yScale().domain()[1].valueOf();
+ // Copy a ref to the ease fn, so that changing ease wont affect zooms in progress
+ var ease = this.easeFn;
+ var interpolator = function (a, b, p) { return d3.interpolateNumber(a, b)(ease(p)); };
+ this.isZooming(true);
+ var start = Date.now();
+ var draw = function () {
+ var now = Date.now();
+ var passed = now - start;
+ var p = _this._animationTime === 0 ? 1 : Math.min(1, passed / _this._animationTime);
+ var x0 = interpolator(x0s, x0f, p);
+ var x1 = interpolator(x1s, x1f, p);
+ var y0 = interpolator(y0s, y0f, p);
+ var y1 = interpolator(y1s, y1f, p);
+ _this.xScale().domain([x0, x1]);
+ _this.yScale().domain([y0, y1]);
+ if (p < 1) {
+ Plottable.Utils.DOM.requestAnimationFramePolyfill(draw);
+ }
+ else {
+ _this.isZooming(false);
+ }
+ };
+ draw();
+ };
+ return DragZoomLayer;
+ })(Plottable.Components.SelectionBoxLayer);
+ Plottable.DragZoomLayer = DragZoomLayer;
+})(Plottable || (Plottable = {}));
+</script>
+ <script>/// <reference path="../../typings/tsd.d.ts" />
+/// <reference path="../../bower_components/plottable/plottable.d.ts" />
+var __extends = (this && this.__extends) || function (d, b) {
+ for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
+ function __() { this.constructor = d; }
+ __.prototype = b.prototype;
+ d.prototype = new __();
+};
+var TF;
+(function (TF) {
+ var Y_TOOLTIP_FORMATTER_PRECISION = 4;
+ var STEP_AXIS_FORMATTER_PRECISION = 4;
+ var Y_AXIS_FORMATTER_PRECISION = 3;
+ var BaseChart = (function () {
+ function BaseChart(tag, dataCoordinator, tooltipUpdater, xType, colorScale) {
+ this.dataCoordinator = dataCoordinator;
+ this.tag = tag;
+ this.colorScale = colorScale;
+ this.tooltipUpdater = tooltipUpdater;
+ this.buildChart(xType);
+ }
+ BaseChart.prototype.changeRuns = function (runs) {
+ throw new Error("Abstract method not implemented");
+ };
+ BaseChart.prototype.addCrosshairs = function (plot, yAccessor) {
+ var _this = this;
+ var pi = new Plottable.Interactions.Pointer();
+ pi.attachTo(plot);
+ var xGuideLine = new Plottable.Components.GuideLineLayer("vertical");
+ var yGuideLine = new Plottable.Components.GuideLineLayer("horizontal");
+ xGuideLine.addClass("crosshairs");
+ yGuideLine.addClass("crosshairs");
+ var group = new Plottable.Components.Group([plot, xGuideLine, yGuideLine]);
+ var yfmt = multiscaleFormatter(Y_TOOLTIP_FORMATTER_PRECISION);
+ pi.onPointerMove(function (p) {
+ var run2val = {};
+ var x = _this.xScale.invert(p.x).valueOf();
+ var yMin = _this.yScale.domain()[0];
+ var yMax = _this.yScale.domain()[1];
+ var closestRun = null;
+ var minYDistToRun = Infinity;
+ var yValueForCrosshairs = p.y;
+ plot.datasets().forEach(function (dataset) {
+ var run = dataset.metadata().run;
+ var data = dataset.data();
+ var xs = data.map(function (d, i) { return _this.xAccessor(d, i, dataset).valueOf(); });
+ var idx = _.sortedIndex(xs, x);
+ if (idx === 0 || idx === data.length) {
+ // Only find a point when the cursor is inside the range of the data
+ // if the cursor is to the left or right of all the data, dont attach.
+ return;
+ }
+ var previous = data[idx - 1];
+ var next = data[idx];
+ var x0 = _this.xAccessor(previous, idx - 1, dataset).valueOf();
+ var x1 = _this.xAccessor(next, idx, dataset).valueOf();
+ var y0 = yAccessor(previous, idx - 1, dataset).valueOf();
+ var y1 = yAccessor(next, idx, dataset).valueOf();
+ var slope = (y1 - y0) / (x1 - x0);
+ var y = y0 + slope * (x - x0);
+ if (y < yMin || y > yMax || y !== y) {
+ // don't find data that is off the top or bottom of the plot.
+ // also don't find data if it is NaN
+ return;
+ }
+ var dist = Math.abs(_this.yScale.scale(y) - p.y);
+ if (dist < minYDistToRun) {
+ minYDistToRun = dist;
+ closestRun = run;
+ yValueForCrosshairs = _this.yScale.scale(y);
+ }
+ // Note this tooltip will display linearly interpolated values
+ // e.g. will display a y=0 value halfway between [y=-1, y=1], even
+ // though there is not actually any 0 datapoint. This could be misleading
+ run2val[run] = yfmt(y);
+ });
+ xGuideLine.pixelPosition(p.x);
+ yGuideLine.pixelPosition(yValueForCrosshairs);
+ _this.tooltipUpdater(run2val, _this.xTooltipFormatter(x), closestRun);
+ });
+ pi.onPointerExit(function () {
+ _this.tooltipUpdater(null, null, null);
+ xGuideLine.pixelPosition(-1);
+ yGuideLine.pixelPosition(-1);
+ });
+ return group;
+ };
+ BaseChart.prototype.buildChart = function (xType) {
+ if (this.outer) {
+ this.outer.destroy();
+ }
+ var xComponents = getXComponents(xType);
+ this.xAccessor = xComponents.accessor;
+ this.xScale = xComponents.scale;
+ this.xAxis = xComponents.axis;
+ this.xAxis.margin(0).tickLabelPadding(3);
+ this.xTooltipFormatter = xComponents.tooltipFormatter;
+ this.yScale = new Plottable.Scales.Linear();
+ this.yAxis = new Plottable.Axes.Numeric(this.yScale, "left");
+ var yFormatter = multiscaleFormatter(Y_AXIS_FORMATTER_PRECISION);
+ this.yAxis.margin(0).tickLabelPadding(5).formatter(yFormatter);
+ this.yAxis.usesTextWidthApproximation(true);
+ var center = this.buildPlot(this.xAccessor, this.xScale, this.yScale);
+ this.gridlines = new Plottable.Components.Gridlines(this.xScale, this.yScale);
+ var dzl = new Plottable.DragZoomLayer(this.xScale, this.yScale);
+ this.center = new Plottable.Components.Group([center, this.gridlines, dzl]);
+ this.outer = new Plottable.Components.Table([
+ [this.yAxis, this.center],
+ [null, this.xAxis]
+ ]);
+ };
+ BaseChart.prototype.buildPlot = function (xAccessor, xScale, yScale) {
+ throw new Error("Abstract method not implemented.");
+ };
+ BaseChart.prototype.renderTo = function (target) {
+ this.outer.renderTo(target);
+ };
+ BaseChart.prototype.redraw = function () {
+ this.outer.redraw();
+ };
+ BaseChart.prototype.destroy = function () {
+ this.outer.destroy();
+ };
+ return BaseChart;
+ })();
+ TF.BaseChart = BaseChart;
+ var LineChart = (function (_super) {
+ __extends(LineChart, _super);
+ function LineChart() {
+ _super.apply(this, arguments);
+ }
+ LineChart.prototype.buildPlot = function (xAccessor, xScale, yScale) {
+ var yAccessor = accessorize("2");
+ var plot = new Plottable.Plots.Line();
+ plot.x(xAccessor, xScale);
+ plot.y(yAccessor, yScale);
+ plot.attr("stroke", function (d, i, m) { return m.run; }, this.colorScale);
+ this.plot = plot;
+ var group = this.addCrosshairs(plot, yAccessor);
+ return group;
+ };
+ LineChart.prototype.changeRuns = function (runs) {
+ var datasets = this.dataCoordinator.getDatasets(this.tag, runs);
+ this.plot.datasets(datasets);
+ };
+ return LineChart;
+ })(BaseChart);
+ TF.LineChart = LineChart;
+ var HistogramChart = (function (_super) {
+ __extends(HistogramChart, _super);
+ function HistogramChart() {
+ _super.apply(this, arguments);
+ }
+ HistogramChart.prototype.changeRuns = function (runs) {
+ var datasets = this.dataCoordinator.getDatasets(this.tag, runs);
+ this.plots.forEach(function (p) { return p.datasets(datasets); });
+ };
+ HistogramChart.prototype.buildPlot = function (xAccessor, xScale, yScale) {
+ var _this = this;
+ var percents = [0, 228, 1587, 3085, 5000, 6915, 8413, 9772, 10000];
+ var opacities = _.range(percents.length - 1).map(function (i) { return (percents[i + 1] - percents[i]) / 2500; });
+ var accessors = percents.map(function (p, i) { return function (datum) { return datum[2][i][1]; }; });
+ var median = 4;
+ var medianAccessor = accessors[median];
+ var plots = _.range(accessors.length - 1).map(function (i) {
+ var p = new Plottable.Plots.Area();
+ p.x(xAccessor, xScale);
+ var y0 = i > median ? accessors[i] : accessors[i + 1];
+ var y = i > median ? accessors[i + 1] : accessors[i];
+ p.y(y, yScale);
+ p.y0(y0);
+ p.attr("fill", function (d, i, m) { return m.run; }, _this.colorScale);
+ p.attr("stroke", function (d, i, m) { return m.run; }, _this.colorScale);
+ p.attr("stroke-weight", function (d, i, m) { return "0.5px"; });
+ p.attr("stroke-opacity", function () { return opacities[i]; });
+ p.attr("fill-opacity", function () { return opacities[i]; });
+ return p;
+ });
+ var medianPlot = new Plottable.Plots.Line();
+ medianPlot.x(xAccessor, xScale);
+ medianPlot.y(medianAccessor, yScale);
+ medianPlot.attr("stroke", function (d, i, m) { return m.run; }, this.colorScale);
+ this.plots = plots;
+ var group = this.addCrosshairs(medianPlot, medianAccessor);
+ return new Plottable.Components.Group([new Plottable.Components.Group(plots), group]);
+ };
+ return HistogramChart;
+ })(BaseChart);
+ TF.HistogramChart = HistogramChart;
+ /* Create a formatter function that will switch between exponential and
+ * regular display depending on the scale of the number being formatted,
+ * and show `digits` significant digits.
+ */
+ function multiscaleFormatter(digits) {
+ return function (v) {
+ var absv = Math.abs(v);
+ if (absv < 1E-15) {
+ // Sometimes zero-like values get an annoying representation
+ absv = 0;
+ }
+ var f;
+ if (absv >= 1E4) {
+ f = d3.format("." + digits + "e");
+ }
+ else if (absv > 0 && absv < 0.01) {
+ f = d3.format("." + digits + "e");
+ }
+ else {
+ f = d3.format("." + digits + "g");
+ }
+ return f(v);
+ };
+ }
+ function accessorize(key) {
+ return function (d, index, dataset) { return d[key]; };
+ }
+ function stepX() {
+ var scale = new Plottable.Scales.Linear();
+ var axis = new Plottable.Axes.Numeric(scale, "bottom");
+ var formatter = Plottable.Formatters.siSuffix(STEP_AXIS_FORMATTER_PRECISION);
+ axis.formatter(formatter);
+ return {
+ scale: scale,
+ axis: axis,
+ accessor: accessorize("1"),
+ tooltipFormatter: formatter,
+ };
+ }
+ function wallX() {
+ var scale = new Plottable.Scales.Time();
+ var formatter = Plottable.Formatters.time("%a %b %e, %H:%M:%S");
+ return {
+ scale: scale,
+ axis: new Plottable.Axes.Time(scale, "bottom"),
+ accessor: function (d, index, dataset) {
+ return d[0] * 1000; // convert seconds to ms
+ },
+ tooltipFormatter: function (d) { return formatter(new Date(d)); },
+ };
+ }
+ function relativeX() {
+ var scale = new Plottable.Scales.Linear();
+ var formatter = function (n) {
+ var days = Math.floor(n / 24);
+ n -= (days * 24);
+ var hours = Math.floor(n);
+ n -= hours;
+ n *= 60;
+ var minutes = Math.floor(n);
+ n -= minutes;
+ n *= 60;
+ var seconds = Math.floor(n);
+ return days + "d " + hours + "h " + minutes + "m " + seconds + "s";
+ };
+ return {
+ scale: scale,
+ axis: new Plottable.Axes.Numeric(scale, "bottom"),
+ accessor: function (d, index, dataset) {
+ var data = dataset && dataset.data();
+ // I can't imagine how this function would be called when the data is empty
+ // (after all, it iterates over the data), but lets guard just to be safe.
+ var first = data.length > 0 ? data[0][0] : 0;
+ return (d[0] - first) / (60 * 60); // convert seconds to hours
+ },
+ tooltipFormatter: formatter,
+ };
+ }
+ function getXComponents(xType) {
+ switch (xType) {
+ case "step":
+ return stepX();
+ case "wall_time":
+ return wallX();
+ case "relative":
+ return relativeX();
+ default:
+ throw new Error("invalid xType: " + xType);
+ }
+ }
+})(TF || (TF = {}));
+</script>
+ <script>
+ Polymer({
+ is: "tf-chart",
+ properties: {
+ type: String, // "scalar" or "compressedHistogram"
+ _chart: Object,
+ colorScale: Object,
+ tag: String,
+ selectedRuns: Array,
+ xType: String,
+ dataCoordinator: Object,
+ tooltipUpdater: Function,
+ _initialized: Boolean,
+ },
+ observers: [
+ "_makeChart(type, tag, dataCoordinator, tooltipUpdater, xType, colorScale, _initialized)",
+ "_changeRuns(_chart, selectedRuns.*)"
+ ],
+ _changeRuns: function(chart, change) {
+ this._chart.changeRuns(this.selectedRuns);
+ this.redraw();
+ },
+ redraw: function() {
+ this._chart.redraw();
+ },
+ _constructor: function(type) {
+ if (type === "scalar") {
+ return TF.LineChart;
+ } else if (type === "compressedHistogram") {
+ return TF.HistogramChart;
+ } else {
+ throw new Error("Unrecognized chart type");
+ }
+ },
+ _makeChart: function(type, tag, dataCoordinator, tooltipUpdater, xType, colorScale, _initialized) {
+ if (!_initialized) {
+ return;
+ }
+ if (this._chart) this._chart.destroy();
+ var cns = this._constructor(type);
+ var chart = new cns(tag, dataCoordinator, tooltipUpdater, xType, colorScale);
+ var svg = d3.select(this.$.chartsvg);
+ this.async(function() {
+ chart.renderTo(svg);
+ this._chart = chart;
+ }, 350);
+ },
+ attached: function() {
+ this._initialized = true;
+ },
+ detached: function() {
+ this._initialized = false;
+ }
+ });
+ </script>
+</dom-module>
+<dom-module id="tf-collapsable-pane" assetpath="../components/tf-collapsable-pane/">
+ <template>
+ <button class="heading" on-tap="togglePane" open-button$="[[opened]]">
+ <span class="name">[[name]]</span>
+ <span class="hackpadding"></span>
+ <span class="count">
+ (<span>[[count]]</span>)
+ </span>
+ </button>
+ <iron-collapse opened="[[opened]]">
+ <div class="content">
+ <template is="dom-if" if="[[opened]]" restamp="[[restamp]]">
+ <content></content>
+ </template>
+ </div>
+ </iron-collapse>
+ <style>
+ .heading {
+ margin-top: 10px;
+ padding-left: 15px;
+ background-color: #f3f3f3;
+ border: 1px solid #dedede;
+ border-radius: 5px;
+ font-size: 18px;
+ cursor: pointer;
+ -webkit-tap-highlight-color: rgba(0,0,0,0);
+ width: 100%;
+ height: 30px;
+ box-sizing: border-box;
+ font-size: 16px;
+ display: inline-flex;
+ flex-direction: row;
+ align-items: center;
+ justify-content: space-between;
+ line-height: 1;
+ padding-top: 2px;
+ padding-bottom: 2px;
+ }
+
+ .content {
+ padding: 15px;
+ border: 1px solid #dedede;
+ border-top: none;
+ border-bottom-left-radius: 5px;
+ border-bottom-right-radius: 5px;
+ }
+ [open-button] {
+ border-bottom-left-radius: 0px !important;
+ border-bottom-right-radius: 0px !important;
+ }
+ .name {
+ flex-grow: 0;
+ }
+ .count {
+ flex-grow: 0;
+ float: right;
+ font-size: 12px;
+ }
+ .hackpadding {
+ /* An obnoxious hack, but I can't get justify-content: space-between to work */
+ flex-grow: 1;
+ }
+ </style>
+ </template>
+ <script>
+ Polymer({
+ is: "tf-collapsable-pane",
+ properties: {
+ opened: {type: Boolean, value: false},
+ restamp: {type: Boolean, value: true},
+ name: {type: String, observer: "hide"},
+ count: {type: Number},
+ },
+ hide: function() {
+ this.opened = false;
+ },
+ togglePane: function() {
+ this.opened = !this.opened;
+ }
+ });
+ </script>
+
+</dom-module>
+<dom-module id="warning-style" assetpath="../components/tf-dashboard-common/">
+ <template>
+ <style>
+ .warning {
+ max-width: 540px;
+ margin: 80px auto 0 auto;
+ }
+ </style>
+ </template>
+</dom-module>
+<dom-module id="tf-event-dashboard" assetpath="../components/tf-event-dashboard/">
+ <template>
+ <div id="plumbing">
+ <tf-url-generator out-runs-url="{{runsUrl}}" out-scalars-url-generator="{{scalarsUrlGen}}" id="urlGenerator"></tf-url-generator>
+
+ <tf-data-coordinator id="dataCoordinator" url-generator="[[scalarsUrlGen]]" run-to-tag="[[runToScalars]]" color-scale="[[colorScale]]" out-data-coordinator="{{dataCoordinator}}"></tf-data-coordinator>
+
+ <tf-run-generator id="runGenerator" url="[[runsUrl]]" out-run-to-scalars="{{runToScalars}}"></tf-run-generator>
+
+ <tf-color-scale id="colorScale" runs="[[_runs]]" out-color-scale="{{colorScale}}" out-class-scale="{{classScale}}"></tf-color-scale>
+
+ <tf-tooltip-coordinator id="tooltipCoordinator" out-tooltip-updater="{{tooltipUpdater}}" out-tooltip-map="{{tooltipMap}}" out-x-value="{{tooltipXValue}}" out-closest-run="{{closestRun}}"></tf-tooltip-coordinator>
+
+ </div>
+
+ <tf-dashboard-layout>
+ <div class="sidebar">
+ <tf-categorizer id="categorizer" tags="[[_visibleTags]]" categories="{{categories}}"></tf-categorizer>
+ <span id="download-option">
+ Show Data Download Links:
+ <paper-toggle-button checked="{{_show_download_links}}"></paper-toggle-button>
+ </span>
+
+ <tf-x-type-selector id="xTypeSelector" out-x-type="{{xType}}"></tf-x-type-selector>
+
+ <tf-run-selector id="runSelector" runs="[[_runs]]" class-scale="[[classScale]]" out-selected="{{selectedRuns}}" tooltips="[[tooltipMap]]" closest-run="[[closestRun]]" x-value="[[tooltipXValue]]" x-type="[[xType]]"></tf-run-selector>
+
+ </div>
+ <div class="center">
+ <template is="dom-if" if="[[!categories.length]]">
+ <div class="warning">
+ <p>
+ No scalar summary tags were found.
+ </p>
+ <p>
+ Maybe data hasn't loaded yet, or maybe you need
+ to add some <code>tf.scalar_summary</code> ops to your graph, and
+ serialize them using the <code>tf.training.summary_io.SummaryWriter</code>.
+ </p>
+ </div>
+ </template>
+ <template is="dom-repeat" items="[[categories]]">
+ <tf-collapsable-pane name="[[item.name]]" count="[[item.tags.length]]">
+ <div class="layout horizontal wrap">
+ <template is="dom-repeat" items="[[item.tags]]" as="tag">
+ <div class="card">
+ <span class="card-title">[[tag]]</span>
+ <div class="card-content">
+ <tf-chart tag="[[tag]]" type="scalar" id="chart" selected-runs="[[selectedRuns]]" x-type="[[xType]]" data-coordinator="[[dataCoordinator]]" color-scale="[[colorScale]]" on-keyup="toggleSelected" tabindex="2" tooltip-updater="[[tooltipUpdater]]"></tf-chart>
+ <paper-icon-button class="expand-button" shift$="[[_show_download_links]]" icon="fullscreen" on-tap="toggleSelected"></paper-icon-button>
+ </div>
+ <template is="dom-if" if="[[_show_download_links]]">
+ <div class="card-bottom-row">
+ <tf-downloader selected-runs="[[selectedRuns]]" tag="[[tag]]" url-fn="[[scalarsUrlGen]]" run-to-tag="[[runToScalars]]">
+ </tf-downloader>
+ </div>
+ </template>
+ </div>
+ </template>
+ </div>
+ </tf-collapsable-pane>
+ </template>
+ </div>
+ </tf-dashboard-layout>
+
+ <style include="dashboard-style"></style>
+ <style include="warning-style"></style>
+
+ </template>
+
+ <script>
+ Polymer({
+ is: "tf-event-dashboard",
+ properties: {
+ _runs: {
+ type: Array,
+ computed: "_getRuns(runToScalars)",
+ },
+ _visibleTags: {
+ type: Array,
+ computed: "_getVisibleTags(selectedRuns.*, runToScalars.*)"
+ },
+ _show_download_links: Boolean,
+ },
+ observers: ['redraw(_show_download_links)'],
+ redraw: function(_show_download_links) {
+ var els = this.getElementsByTagName("tf-chart");
+ for (var i=0; i<els.length; i++) {
+ els[i].redraw();
+ }
+ },
+ _getRuns: function(runToScalars) {
+ return _.keys(runToScalars);
+ },
+ _getVisibleTags: function(selectedRunsChange, runsToScalarsChange) {
+ var keys = selectedRunsChange.base;
+ var dict = runsToScalarsChange.base;
+ return _.union.apply(null, keys.map(function(k) {return dict[k]}));
+ },
+ toggleSelected: function(e) {
+ var currentTarget = Polymer.dom(e.currentTarget);
+ var parentDiv = currentTarget.parentNode.parentNode;
+ parentDiv.classList.toggle("selected");
+ var chart = currentTarget.previousElementSibling;
+ if (chart) {
+ chart.redraw();
+ }
+ },
+ });
+ </script>
+</dom-module>
+<dom-module id="tf-histogram-dashboard" assetpath="../components/tf-histogram-dashboard/">
+ <template>
+ <div id="plumbing">
+ <tf-url-generator out-runs-url="{{runsUrl}}" out-compressed-histograms-url-generator="{{compressedHistogramsUrlGen}}" id="urlGenerator"></tf-url-generator>
+
+ <tf-data-coordinator id="dataCoordinator" url-generator="[[compressedHistogramsUrlGen]]" run-to-tag="[[runToCompressedHistograms]]" color-scale="[[colorScale]]" out-data-coordinator="{{dataCoordinator}}"></tf-data-coordinator>
+
+ <tf-run-generator id="runGenerator" url="[[runsUrl]]" out-run-to-compressed-histograms="{{runToCompressedHistograms}}"></tf-run-generator>
+
+ <tf-color-scale id="colorScale" runs="[[_runs]]" out-color-scale="{{colorScale}}" out-class-scale="{{classScale}}"></tf-color-scale>
+
+ <tf-tooltip-coordinator id="tooltipCoordinator" out-tooltip-updater="{{tooltipUpdater}}" out-tooltip-map="{{tooltipMap}}" out-x-value="{{tooltipXValue}}" out-closest-run="{{closestRun}}"></tf-tooltip-coordinator>
+ </div>
+
+ <tf-dashboard-layout>
+ <div class="sidebar">
+
+ <tf-categorizer id="categorizer" tags="[[_visibleTags]]" categories="{{categories}}"></tf-categorizer>
+
+ <tf-x-type-selector id="xTypeSelector" out-x-type="{{xType}}"></tf-x-type-selector>
+
+ <tf-run-selector id="runSelector" runs="[[_runs]]" class-scale="[[classScale]]" out-selected="{{selectedRuns}}" tooltips="[[tooltipMap]]" closest-run="[[closestRun]]" x-value="[[tooltipXValue]]" x-type="[[xType]]"></tf-run-selector>
+
+ </div>
+
+ <div class="center">
+ <template is="dom-if" if="[[!categories.length]]">
+ <div class="warning">
+ <p>
+ No histogram tags were found.
+ </p>
+ <p>
+ Maybe data hasn't loaded yet, or maybe you need
+ to add some <code>tf.histogram_summary</code> ops to your graph, and
+ serialize them using the <code>tf.training.summary_io.SummaryWriter</code>.
+ </p>
+ </div>
+ </template>
+ <template is="dom-repeat" items="[[categories]]">
+ <tf-collapsable-pane name="[[item.name]]" count="[[_count(item.tags, selectedRuns.*, runToCompressedHistograms.*)]]">
+ <div class="layout horizontal wrap">
+ <template is="dom-repeat" items="[[item.tags]]" as="tag">
+ <template is="dom-repeat" items="[[selectedRuns]]" as="run">
+ <template is="dom-if" if="[[_exists(run, tag, runToCompressedHistograms.*)]]">
+ <div class="card">
+ <span class="card-title">[[tag]]</span>
+ <div class="card-content">
+ <tf-chart tag="[[tag]]" type="compressedHistogram" id="chart" selected-runs="[[_array(run)]]" x-type="[[xType]]" data-coordinator="[[dataCoordinator]]" color-scale="[[colorScale]]" on-keyup="toggleSelected" tabindex="2" tooltip-updater="[[tooltipUpdater]]"></tf-chart>
+ <paper-icon-button class="expand-button" icon="fullscreen" on-tap="toggleSelected"></paper-icon-button>
+ </div>
+ </div>
+ </template>
+ </template>
+ </template>
+ </div>
+ </tf-collapsable-pane>
+ </template>
+ </div>
+ </tf-dashboard-layout>
+
+ <style include="dashboard-style"></style>
+ <style include="warning-style"></style>
+ </template>
+
+ <script>
+ Polymer({
+ is: "tf-histogram-dashboard",
+ properties: {
+ _runs: {
+ type: Array,
+ computed: "_getRuns(runToCompressedHistograms)",
+ },
+ _visibleTags: {
+ type: Array,
+ computed: "_getVisibleTags(selectedRuns.*, runToCompressedHistograms.*)"
+ }
+ },
+ _exists: function(run, tag, runToCompressedHistogramsChange) {
+ var runToCompressedHistograms = runToCompressedHistogramsChange.base;
+ return runToCompressedHistograms[run].indexOf(tag) !== -1;
+ },
+ _array: function(x) {
+ return [x];
+ },
+ _count: function(tags, selectedRunsChange, runToCompressedHistogramsChange) {
+ var selectedRuns = selectedRunsChange.base;
+ var runToCompressedHistograms = runToCompressedHistogramsChange.base;
+ var targetTags = {};
+ tags.forEach(function(t) {
+ targetTags[t] = true;
+ });
+ var count = 0;
+ selectedRuns.forEach(function(r) {
+ runToCompressedHistograms[r].forEach(function(t) {
+ if (targetTags[t]) {
+ count++;
+ }
+ });
+ });
+ return count;
+ },
+ _getRuns: function(runToCompressedHistograms) {
+ return _.keys(runToCompressedHistograms);
+ },
+ _getVisibleTags: function(selectedRunsChange, runToCompressedHistogramsChange) {
+ var keys = selectedRunsChange.base;
+ var dict = runToCompressedHistogramsChange.base;
+ return _.union.apply(null, keys.map(function(k) {return dict[k]}));
+ },
+ toggleSelected: function(e) {
+ var currentTarget = Polymer.dom(e.currentTarget);
+ var parentDiv = currentTarget.parentNode.parentNode;
+ parentDiv.classList.toggle("selected");
+ var chart = currentTarget.previousElementSibling;
+ if (chart) {
+ chart.redraw();
+ }
+ },
+ });
+ </script>
+</dom-module>
+<dom-module id="tf-image-loader" assetpath="../components/tf-image-dashboard/">
+ <style>
+ :host {
+ display: block;
+ }
+ img {
+ width: 100%;
+ height: 100%;
+ }
+ </style>
+ <template>
+ <iron-ajax id="ajax" auto="" url="[[metadataUrl]]" handle-as="json" debounce="50" last-response="{{imageMetadata}}" verbose="true"></iron-ajax>
+ <template is="dom-if" if="[[imageUrl]]">
+ <img src="[[imageUrl]]">
+ </template>
+ </template>
+ <script>
+ Polymer({
+ is: "tf-image-loader",
+ properties: {
+ run: String,
+ tag: String,
+ imagesGenerator: Function,
+ individualImageGenerator: Function,
+ imageMetadata: Array,
+ metadataUrl: {
+ type: String,
+ computed: "apply(imagesGenerator, tag, run)",
+ },
+ imageUrl: {
+ type: String,
+ computed: "getLastImage(imageMetadata, individualImageGenerator)",
+ },
+ },
+ apply: function(imagesGenerator, run, tag) {
+ return imagesGenerator(run, tag);
+ },
+ getLastImage: function(imageMetadata, individualImageGenerator) {
+ if (imageMetadata == null) {
+ return null;
+ }
+ var query = _.last(imageMetadata).query;
+ return individualImageGenerator(query);
+ },
+ });
+ </script>
+</dom-module>
+<dom-module id="tf-image-grid" assetpath="../components/tf-image-dashboard/">
+ <template>
+ <style include="scrollbar-style"></style>
+ <div id="fullContainer" class="container scrollbar">
+ <div id="topRow" class="container">
+ <div class="noshrink" id="paddingCell"></div>
+ <template is="dom-repeat" items="[[_runs]]" as="run">
+ <div class="run-name-cell noshrink">
+ <span>[[run]]</span>
+ </div>
+ </template>
+ </div>
+ <div id="bottomContainer" class="container">
+ <template is="dom-repeat" items="[[_tags]]" sort="" as="tag">
+ <div class="image-row container noshrink">
+ <div class="tag-name-cell noshrink">
+ <span class="tag-name">[[tag]]</span>
+ </div>
+ <template is="dom-repeat" items="[[_runs]]" as="run">
+ <div class="image-cell noshrink">
+ <template is="dom-if" if="[[_exists(run, tag, runToImages.*)]]">
+ <tf-image-loader id="loader" run="[[run]]" tag="[[tag]]" images-generator="[[imagesGenerator]]" individual-image-generator="[[individualImageGenerator]]">
+ </tf-image-loader>
+ </template>
+ </div>
+ </template>
+ </div>
+ </template>
+ </div>
+ </div>
+ <style>
+ :host {
+ display: block;
+ height: 100%;
+ }
+ .container {
+ display: flex;
+ flex-wrap: nowrap;
+ }
+ #fullContainer {
+ width: 100%;
+ height: 100%;
+ flex-direction: column;
+ padding-top: 20px;
+ overflow: scroll;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ }
+ #topRow {
+ flex-direction: row;
+ }
+ #bottomContainer {
+ flex-direction: column;
+ height: 100%;
+ width: 100%;
+ }
+ .image-row {
+ flex-direction: row;
+ }
+ .image-cell {
+ width: 300px;
+ height: 300px;
+ border: 1px solid black;
+ }
+ .tag-name-cell {
+ height: 300px;
+ width: 300px;
+ display:flex;
+ flex-direction: column;
+ justify-content: center;
+ }
+ .tag-name {
+ word-wrap: break-word;
+ text-align: center;
+ white-space: nowrap;
+ }
+ .run-name-cell {
+ width: 300px;
+ height: 30px;
+ text-align: center;
+ }
+ .noshrink {
+ flex-shrink: 0;
+ }
+ #paddingCell {
+ width: 300px;
+ height: 30px;
+ }
+ </style>
+ </template>
+ <script>
+ Polymer({
+ is: "tf-image-grid",
+ properties: {
+ runToImages: Object,
+ _tags: {type: Array, computed: "_getTags(runToImages.*)"},
+ _runs: {type: Array, computed: "_getRuns(runToImages.*)"},
+ imagesGenerator: Function,
+ individualImageGenerator: Function,
+ },
+ _getTags: function(runToImages) {
+ return _.chain(runToImages.base).values().flatten().union().value();
+ },
+ _getRuns(runToImages) {
+ var r2i = runToImages.base;
+ return _.keys(r2i).filter(function(x) {return r2i[x].length > 0;});
+ },
+ _exists: function (run, tag, runToImages) {
+ runToImages = runToImages.base;
+ return runToImages[run].indexOf(tag) !== -1;
+ },
+ });
+ </script>
+</dom-module>
+<dom-module id="tf-image-dashboard" assetpath="../components/tf-image-dashboard/">
+ <template>
+ <div id="plumbing">
+ <tf-url-generator out-runs-url="{{runsUrl}}" out-images-url-generator="{{imagesUrlGen}}" out-individual-image-url-generator="{{individualImageUrlGen}}" id="urlGenerator"></tf-url-generator>
+
+ <tf-run-generator id="runGenerator" url="[[runsUrl]]" out-run-to-images="{{runToImages}}"></tf-run-generator>
+ </div>
+
+ <div class="center">
+ <template is="dom-if" if="[[!_hasImages(runToImages.*)]]">
+ <div class="warning">
+ <p>
+ No image tags were found.
+ </p>
+ <p>
+ Maybe data hasn't loaded yet, or maybe you need
+ to add some <code>tf.image_summary</code> ops to your graph, and
+ serialize them using the <code>tf.training.summary_io.SummaryWriter</code>.
+ </p>
+ </div>
+ </template>
+ <tf-image-grid id="imageGrid" run-to-images="[[runToImages]]" images-generator="[[imagesUrlGen]]" individual-image-generator="[[individualImageUrlGen]]"></tf-image-grid>
+ </div>
+
+ <style>
+ .center {
+ padding-left: 10px;
+ padding-right: 10px;
+ height: 100%;
+ width: 100%;
+ -webkit-box-sizing: border-box;
+ -moz-box-sizing: border-box;
+ box-sizing: border-box;
+ }
+ :host {
+ height: 100%;
+ display: block;
+ }
+
+ </style>
+ <style include="warning-style"></style>
+ </template>
+ <script>
+ Polymer({
+ is: "tf-image-dashboard",
+ properties: {
+ runToImages: Object,
+ imagesUrlGen: Function,
+ individualImageUrlGen: Function,
+ },
+ _hasImages: function(runToImagesChange) {
+ return _.values(runToImagesChange.base).some(function(arr) {
+ return arr.length > 0;
+ });
+ },
+ });
+ </script>
+</dom-module>
+<dom-module id="tf-graph-loader" assetpath="../components/tf-graph-loader/">
+</dom-module>
+
+<script>
+Polymer({
+
+ is: 'tf-graph-loader',
+
+ properties: {
+ /**
+ * @type {value: number, msg: string}
+ *
+ * A number between 0 and 100 denoting the % of progress
+ * for the progress bar and the displayed message.
+ */
+ progress: {
+ type: Object,
+ notify: true,
+ readOnly: true // Produces, does not consume.
+ },
+ datasets: Array,
+ hasStats: {
+ type: Boolean,
+ readOnly: true, // This property produces data.
+ notify: true
+ },
+ selectedDataset: Number,
+ selectedFile: {
+ type: Object,
+ observer: '_selectedFileChanged'
+ },
+ outGraphHierarchy: {
+ type: Object,
+ readOnly: true, //readonly so outsider can't change this via binding
+ notify: true
+ },
+ outGraph: {
+ type: Object,
+ readOnly: true, //readonly so outsider can't change this via binding
+ notify: true
+ },
+ outGraphName: {
+ type: String,
+ readOnly: true,
+ notify: true
+ }
+ },
+ observers: [
+ '_selectedDatasetChanged(selectedDataset, datasets)'
+ ],
+ _parseAndConstructHierarchicalGraph: function(dataset, pbTxtContent) {
+ var self = this;
+ // Reset the progress bar to 0.
+ self._setProgress({
+ value: 0,
+ msg: ''
+ });
+ var tracker = {
+ setMessage: function(msg) {
+ self._setProgress({
+ value: self.progress.value,
+ msg: msg
+ });
+ },
+ updateProgress: function(value) {
+ self._setProgress({
+ value: self.progress.value + value,
+ msg: self.progress.msg
+ });
+ },
+ reportError: function(msg) {
+ self._setProgress({
+ value: self.progress.value,
+ msg: msg,
+ error: true
+ });
+ },
+ };
+ var statsJson;
+ var dataTracker = tf.getSubtaskTracker(tracker, 30, 'Data');
+ tf.graph.parser.readAndParseData(dataset, pbTxtContent, dataTracker)
+ .then(function(result) {
+ // Build the flat graph (consists only of Op nodes).
+ var nodes = result.nodes;
+ statsJson = result.statsJson;
+
+ // This is the whitelist of inputs on op types that are considered
+ // reference edges. "Assign 0" indicates that the first input to
+ // an OpNode with operation type "Assign" is a reference edge.
+ var refEdges = {};
+ refEdges["Assign 0"] = true;
+ refEdges["AssignAdd 0"] = true;
+ refEdges["AssignSub 0"] = true;
+ refEdges["assign 0"] = true;
+ refEdges["assign_add 0"] = true;
+ refEdges["assign_sub 0"] = true;
+ refEdges["count_up_to 0"] = true;
+ refEdges["ScatterAdd 0"] = true;
+ refEdges["ScatterSub 0"] = true;
+ refEdges["ScatterUpdate 0"] = true;
+ refEdges["scatter_add 0"] = true;
+ refEdges["scatter_sub 0"] = true;
+ refEdges["scatter_update 0"] = true;
+ var buildParams = {
+ enableEmbedding: true,
+ inEmbeddingTypes: ['Const'],
+ outEmbeddingTypes: ['^[a-zA-Z]+Summary$'],
+ refEdges: refEdges
+ };
+ var graphTracker = tf.getSubtaskTracker(tracker, 20,
+ 'Graph');
+ return tf.graph.build(nodes, buildParams, graphTracker);
+ })
+ .then(function(graph) {
+ this._setOutGraph(graph);
+ if (statsJson) {
+ // If there are associated stats, join them with the graph.
+ tf.time('Joining stats info with graph...', function() {
+ tf.graph.joinStatsInfoWithGraph(graph, statsJson);
+ });
+ }
+ var hierarchyParams = {
+ verifyTemplate: true,
+ groupSeries: true,
+ };
+ var hierarchyTracker = tf.getSubtaskTracker(tracker, 50,
+ 'Namespace hierarchy');
+ return tf.graph.hierarchy.build(graph, hierarchyParams, hierarchyTracker);
+ }.bind(this))
+ .then(function(graphHierarchy) {
+ // Update the properties which notify the parent with the
+ // graph hierarchy and whether the data has live stats or not.
+ this._setHasStats(statsJson != null);
+ this._setOutGraphHierarchy(graphHierarchy);
+ }.bind(this))
+ .catch(function(reason) {
+ tracker.reportError("Graph visualization failed: " + reason);
+ });
+ },
+ _selectedDatasetChanged: function(datasetIndex, datasets) {
+ var dataset = datasets[datasetIndex];
+ this._parseAndConstructHierarchicalGraph(dataset);
+ this._setOutGraphName(dataset.name);
+ },
+ _selectedFileChanged: function(e) {
+ if (!e) {
+ return;
+ }
+ var file = e.target.files[0];
+ if (!file) {
+ return;
+ }
+
+ // Clear out the value of the file chooser. This ensures that if the user
+ // selects the same file, we'll re-read it.
+ e.target.value = '';
+
+ var reader = new FileReader();
+
+ reader.onload = function(e) {
+ this._parseAndConstructHierarchicalGraph(null, e.target.result);
+ }.bind(this);
+
+ reader.readAsText(file);
+ }
+});
+</script>
+<dom-module id="tf-graph-style" assetpath="../components/tf-graph/">
+<template>
+<style>
+:host {
+ display: flex;
+ width: 100%;
+}
+
+::content #svg {
+ overflow: hidden;
+ flex: 1;
+}
+
+::content #hidden {
+ position: fixed;
+ top: 0px;
+ visibility: hidden;
+}
+
+
+/* --- Node and annotation-node for Metanode --- */
+
+::content .meta > .nodeshape > rect,
+::content .meta > .annotation-node > rect {
+ cursor: pointer;
+ fill: hsl(0, 0%, 70%);
+}
+
+
+::content .node.meta.highlighted > .nodeshape > rect,
+::content .node.meta.highlighted > .annotation-node > rect {
+ stroke-width: 2;
+}
+
+::content .annotation.meta.highlighted > .nodeshape > rect,
+::content .annotation.meta.highlighted > .annotation-node > rect {
+ stroke-width: 1;
+}
+
+::content .meta.selected > .nodeshape > rect,
+::content .meta.selected > .annotation-node > rect {
+ stroke: red;
+ stroke-width: 2;
+}
+
+::content .node.meta.selected.expanded > .nodeshape > rect,
+::content .node.meta.selected.expanded > .annotation-node > rect {
+ stroke: red;
+ stroke-width: 3;
+}
+
+:content .annotation.meta.selected > .nodeshape > rect,
+:content .annotation.meta.selected > .annotation-node > rect {
+ stroke: red;
+ stroke-width: 2;
+}
+
+::content .node.meta.selected.expanded.highlighted > .nodeshape > rect,
+::content .node.meta.selected.expanded.highlighted > .annotation-node > rect {
+ stroke: red;
+ stroke-width: 4;
+}
+
+
+/* --- Op Node --- */
+
+::content .op > .nodeshape > ellipse,
+::content .op > .annotation-node > ellipse {
+ cursor: pointer;
+ fill: #fff;
+ stroke: #ccc;
+}
+
+::content .op.selected > .nodeshape > ellipse,
+::content .op.selected > .annotation-node > ellipse {
+ stroke: red;
+ stroke-width: 2;
+}
+
+::content .op.highlighted > .nodeshape > ellipse,
+::content .op.highlighted > .annotation-node > ellipse {
+ stroke-width: 2;
+}
+
+/* --- Series Node --- */
+
+/* By default, don't show the series background <rect>. */
+::content .series > .nodeshape > rect {
+ fill: hsl(0, 0%, 70%);
+ fill-opacity: 0;
+ stroke-dasharray: 5, 5;
+ stroke-opacity: 0;
+ cursor: pointer;
+}
+
+/* Once expanded, show the series background <rect> and hide the <use>. */
+::content .series.expanded > .nodeshape > rect {
+ fill-opacity: 0.15;
+ stroke: hsl(0, 0%, 70%);
+ stroke-opacity: 1;
+}
+::content .series.expanded > .nodeshape > use {
+ visibility: hidden;
+}
+
+/**
+ * TODO(jimbo): Simplify this by applying a stable class name to all <g>
+ * elements that currently have either the nodeshape or annotation-node classes.
+ */
+::content .series > .nodeshape > use ,
+::content .series > .annotation-node > use {
+ stroke: #ccc;
+}
+::content .series.highlighted > .nodeshape > use ,
+::content .series.highlighted > .annotation-node > use {
+ stroke-width: 2;
+}
+::content .series.selected > .nodeshape > use ,
+::content .series.selected > .annotation-node > use {
+ stroke: red;
+ stroke-width: 2;
+}
+
+::content .series.selected > .nodeshape > rect {
+ stroke: red;
+ stroke-width: 2;
+}
+
+:content .annotation.series.selected > .annotation-node > use {
+ stroke: red;
+ stroke-width: 2;
+}
+
+/* --- Bridge Node --- */
+::content .bridge > .nodeshape > rect {
+ stroke: #f0f;
+ opacity: 0.2;
+ display: none;
+}
+
+/* --- Structural Elements --- */
+::content .edge > path.edgeline.structural {
+ stroke: #f0f;
+ opacity: 0.2;
+ display: none;
+}
+
+/* --- Series Nodes --- */
+
+/* Hide the rect for a series' annotation. */
+::content .series > .annotation-node > rect {
+ display: none;
+}
+
+/* --- Node label --- */
+
+
+::content .node > text.nodelabel {
+ cursor: pointer;
+ fill: #444;
+}
+
+::content .meta.expanded > text.nodelabel {
+ font-size: 9px;
+}
+
+::content .series > text.nodelabel {
+ font-size: 8px;
+}
+
+::content .op > text.nodelabel {
+ font-size: 6px;
+}
+
+::content .bridge > text.nodelabel {
+ display: none;
+}
+
+::content .node.meta.expanded > text.nodelabel{
+ cursor: normal;
+}
+
+::content .annotation.meta.highlighted > text.annotation-label {
+ fill: #50A3F7;
+}
+
+::content .annotation.meta.selected > text.annotation-label {
+ fill: #4285F4;
+}
+
+/* --- Annotation --- */
+
+/* only applied for annotations that are not summary or constant.
+(.summary, .constant gets overriden below) */
+::content .annotation > .annotation-node > * {
+ stroke-width: 0.5;
+ stroke-dasharray: 1, 1;
+}
+
+::content .annotation.summary > .annotation-node > *,
+::content .annotation.constant > .annotation-node > * {
+ stroke-width: 1;
+ stroke-dasharray: none;
+}
+
+::content .annotation > .annotation-edge {
+ fill: none;
+ stroke: #aaa;
+ stroke-width: 0.5;
+ marker-end: url("#annotation-arrowhead");
+}
+
+::content .annotation > .annotation-edge.refline {
+ marker-start: url("#ref-annotation-arrowhead");
+}
+
+::content .annotation > .annotation-control-edge {
+ stroke-dasharray: 1, 1;
+}
+
+::content #annotation-arrowhead {
+ fill: #aaa;
+}
+
+::content #ref-annotation-arrowhead {
+ fill: #aaa;
+}
+
+::content .annotation > .annotation-label {
+ font-size: 5px;
+ cursor: pointer;
+}
+::content .annotation > .annotation-label.annotation-ellipsis {
+ cursor: default;
+}
+
+/* Hide annotations on expanded meta nodes since they're redundant. */
+::content .expanded > .in-annotations,
+::content .expanded > .out-annotations {
+ display: none;
+}
+
+/* --- Annotation: Constant --- */
+
+::content .constant > .annotation-node > ellipse {
+ cursor: pointer;
+ fill: white;
+ stroke: #848484;
+}
+
+::content .constant.selected > .annotation-node > ellipse {
+ fill: white;
+ stroke: red;
+}
+
+::content .constant.highlighted > .annotation-node > ellipse {
+ stroke-width: 1.5;
+}
+
+/* --- Annotation: Summary --- */
+
+::content .summary > .annotation-node > ellipse {
+ cursor: pointer;
+ fill: #DB4437;
+ stroke: #DB4437;
+}
+
+::content .summary.selected > .annotation-node > ellipse {
+ fill: #A52714;
+ stroke: #A52714;
+}
+
+::content .summary.highlighted > .annotation-node > ellipse {
+ stroke-width: 1.5;
+}
+
+/* --- Edge --- */
+
+::content .edge > path.edgeline {
+ fill: none;
+ marker-end: url("#arrowhead");
+ stroke: #bbb;
+ stroke-linecap: round;
+ stroke-width: 0.75;
+}
+
+::content .edge > path.edgeline.refline {
+ marker-start: url("#ref-arrowhead");
+}
+
+::content #arrowhead {
+ fill: #bbb;
+}
+
+::content #ref-arrowhead {
+ fill: #bbb;
+}
+
+::content .edge .control-dep {
+ stroke-dasharray: 2, 2;
+}
+
+/* --- Group node expand/collapse button --- */
+
+/* Hides expand/collapse buttons when a node isn't expanded or highlighted. Using
+ incredibly small opacity so that the bounding box of the <g> parent still takes
+ this container into account even when it isn't visible */
+::content .node:not(.highlighted):not(.expanded) > .nodeshape > .buttoncontainer {
+ opacity: 0.01;
+}
+::content .node.highlighted > .nodeshape > .buttoncontainer {
+ cursor: pointer;
+}
+::content .buttoncircle {
+ fill: #E7811D;
+}
+::content .buttoncircle:hover {
+ fill: #B96717;
+}
+::content .expandbutton,
+::content .collapsebutton {
+ stroke: white;
+}
+/* Do not let the path elements in the button take pointer focus */
+::content .node > .nodeshape > .buttoncontainer > .expandbutton,
+::content .node > .nodeshape > .buttoncontainer > .collapsebutton {
+ pointer-events: none;
+}
+/* Only show the expand button when a node is collapsed and only show the
+ collapse button when a node is expanded. */
+::content .node.expanded > .nodeshape > .buttoncontainer > .expandbutton {
+ display: none;
+}
+::content .node:not(.expanded) > .nodeshape > .buttoncontainer > .collapsebutton {
+ display: none;
+}
+</style>
+</template>
+</dom-module>
+<dom-module id="tf-graph-minimap" assetpath="../components/tf-graph/">
+<template>
+<style>
+:host {
+ background-color:white;
+ transition: opacity .3s linear;
+ pointer-events: auto;
+}
+
+:host.hidden {
+ opacity: 0;
+ pointer-events: none;
+}
+
+canvas {
+ border: 1px solid #999;
+}
+
+rect {
+ fill: white;
+ stroke: #111111;
+ stroke-width: 1px;
+ fill-opacity: 0;
+ filter: url("#minimapDropShadow");
+ cursor: move;
+}
+
+svg {
+ position: absolute;
+}
+</style>
+<svg>
+ <defs>
+ <filter id="minimapDropShadow" x="-20%" y="-20%" width="150%" height="150%">
+ <feOffset result="offOut" in="SourceGraphic" dx="1" dy="1"></feOffset>
+ <feColorMatrix result="matrixOut" in="offOut" type="matrix" values="0.1 0 0 0 0 0 0.1 0 0 0 0 0 0.1 0 0 0 0 0 0.5 0"></feColorMatrix>
+ <feGaussianBlur result="blurOut" in="matrixOut" stdDeviation="2"></feGaussianBlur>
+ <feBlend in="SourceGraphic" in2="blurOut" mode="normal"></feBlend>
+ </filter>
+ </defs>
+ <rect></rect>
+</svg>
+<canvas class="first"></canvas>
+
+<canvas class="second"></canvas>
+</template>
+<script>
+Polymer({
+ is: 'tf-graph-minimap',
+
+ /**
+ * Initializes the minimap and returns a minimap object to notify when
+ * things update.
+ *
+ * @param svg The main svg element.
+ * @param zoomG The svg group used for panning and zooming the main svg.
+ * @param mainZoom The main zoom behavior.
+ * @param maxWandH The maximum width/height for the minimap.
+ * @param labelPadding Padding in pixels due to the main graph labels.
+ */
+ init: function(svg, zoomG, mainZoom, maxWAndH, labelPadding) {
+ return new tf.scene.Minimap(svg, zoomG, mainZoom, this, maxWAndH,
+ labelPadding);
+ }
+});
+</script>
+</dom-module>
+<dom-module id="tf-graph-scene" assetpath="../components/tf-graph/">
+<template>
+<style include="tf-graph-style">
+ :host {
+ font-size: 20px;
+ }
+ .titleContainer {
+ position: relative;
+ }
+ .title {
+ position: absolute;
+ }
+ .auxTitle {
+ position: absolute;
+ }
+ #minimap {
+ position: absolute;
+ right: 20px;
+ bottom: 20px;
+ }
+</style>
+<div class="titleContainer">
+ <div id="title" class="title">Main Graph</div>
+ <div id="auxTitle" class="auxTitle">Auxiliary nodes</div>
+</div>
+<svg id="svg">
+ <defs>
+
+ <marker id="arrowhead" markerWidth="10" markerHeight="10" refX="9" refY="5" orient="auto">
+ <path d="M 0,0 L 10,5 L 0,10 C 3,7 3,3 0,0"></path>
+ </marker>
+ <marker id="ref-arrowhead" markerWidth="10" markerHeight="10" refX="1" refY="5" orient="auto">
+ <path d="M 10,0 L 0,5 L 10,10 C 7,7 7,3 10,0"></path>
+ </marker>
+
+ <marker id="annotation-arrowhead" markerWidth="5" markerHeight="5" refX="5" refY="2.5" orient="auto">
+ <path d="M 0,0 L 5,2.5 L 0,5 L 0,0"></path>
+ </marker>
+ <marker id="ref-annotation-arrowhead" markerWidth="5" markerHeight="5" refX="0" refY="2.5" orient="auto">
+ <path d="M 5,0 L 0,2.5 L 5,5 L 5,0"></path>
+ </marker>
+
+ <ellipse id="op-node-stamp" rx="7.5" ry="3" stroke="inherit" fill="inherit"></ellipse>
+
+ <ellipse id="op-node-annotation-stamp" rx="5" ry="2" stroke="inherit" fill="inherit"></ellipse>
+
+ <g id="op-series-vertical-stamp">
+ <use xlink:href="#op-node-stamp" x="8" y="9"></use>
+ <use xlink:href="#op-node-stamp" x="8" y="6"></use>
+ <use xlink:href="#op-node-stamp" x="8" y="3"></use>
+ </g>
+
+ <g id="op-series-horizontal-stamp">
+ <use xlink:href="#op-node-stamp" x="16" y="4"></use>
+ <use xlink:href="#op-node-stamp" x="12" y="4"></use>
+ <use xlink:href="#op-node-stamp" x="8" y="4"></use>
+ </g>
+
+ <g id="op-series-annotation-stamp">
+ <use xlink:href="#op-node-annotation-stamp" x="9" y="2"></use>
+ <use xlink:href="#op-node-annotation-stamp" x="7" y="2"></use>
+ <use xlink:href="#op-node-annotation-stamp" x="5" y="2"></use>
+ </g>
+
+ <g id="linearGradients"></g>
+ </defs>
+
+ <rect fill="white" width="10000" height="10000"></rect>
+ <g id="root"></g>
+</svg>
+<tf-graph-minimap id="minimap"></tf-graph-minimap>
+</template>
+</dom-module>
+<script>
+Polymer({
+ is: 'tf-graph-scene',
+ properties: {
+ graphHierarchy: Object,
+ name: String,
+ colorBy: {
+ type: String,
+ observer: '_colorByChanged'
+ },
+ /** @type {d3_zoom} d3 zoom object */
+ _zoom: Object,
+ highlightedNode: {
+ type: String,
+ observer: '_highlightedNodeChanged'
+ },
+ selectedNode: {
+ type: String,
+ observer: '_selectedNodeChanged'
+ },
+ /** Keeps track of if the graph has been zoomed/panned since loading */
+ _zoomed: {
+ type: Boolean,
+ observer: '_onZoomChanged',
+ value: false
+ },
+ /** Keeps track of the starting coordinates of a graph zoom/pan */
+ _zoomStartCoords: {
+ type: Array,
+ value: null
+ },
+ /** Keeps track of the current coordinates of a graph zoom/pan */
+ _zoomCoords: {
+ type: Array,
+ value: null
+ },
+ /** Maximum distance of a zoom event for it to be interpreted as a click */
+ _maxZoomDistanceForClick: {
+ type: Number,
+ value: 20
+ },
+ /**
+ * @type {d3.scale.ordinal}
+ * Scale mapping from template name to a number between 0 and N-1
+ * where N is the number of different template names.
+ */
+ templateIndex: Object,
+ /**
+ * @type {tf.scene.Minimap}
+ * A minimap object to notify for zoom events.
+ */
+ minimap: Object,
+ /*
+ * Dictionary for easily stylizing nodes when state changes.
+ * _nodeGroupIndex[nodeName] = d3_selection of the nodeGroup
+ */
+ _nodeGroupIndex: {
+ type: Object,
+ value: function() { return {}; }
+ },
+ /*
+ * Dictionary for easily stylizing annotation nodes when state changes.
+ * _annotationGroupIndex[nodeName][hostNodeName] =
+ * d3_selection of the annotationGroup
+ */
+ _annotationGroupIndex: {
+ type: Object,
+ value: function() { return {}; }
+ },
+ /*
+ * Dictionary for easily stylizing edges when state changes.
+ * _edgeGroupIndex[edgeName] = d3_selection of the edgeGroup
+ */
+ _edgeGroupIndex: {
+ type: Object,
+ value: function() { return {}; }
+ },
+ /**
+ * Max font size for metanode label strings.
+ */
+ maxMetanodeLabelLengthFontSize: {
+ type: Number,
+ value: 9
+ },
+ /**
+ * Min font size for metanode label strings.
+ */
+ minMetanodeLabelLengthFontSize: {
+ type: Number,
+ value: 6
+ },
+ /**
+ * Metanode label strings longer than this are given smaller fonts.
+ */
+ maxMetanodeLabelLengthLargeFont: {
+ type: Number,
+ value: 11
+ },
+ /**
+ * Metanode label strings longer than this are truncated with ellipses.
+ */
+ maxMetanodeLabelLength: {
+ type: Number,
+ value: 18
+ },
+ progress: Object
+ },
+ observers: [
+ '_buildAndFit(graphHierarchy)'
+ ],
+ getNode: function(nodeName) {
+ return this.graphHierarchy.getRenderNodeByName(nodeName);
+ },
+ isNodeExpanded: function(node) {
+ return node.expanded;
+ },
+ setNodeExpanded: function(renderNode) {
+ this._build(this.graphHierarchy);
+ },
+ /**
+ * Resets the state of the component. Called whenever the whole graph
+ * (dataset) changes.
+ */
+ _resetState: function() {
+ // Reset the state of the component.
+ this._nodeGroupIndex = {};
+ this._annotationGroupIndex = {};
+ this._edgeGroupIndex = {};
+ this._updateLabels(false);
+ // Remove all svg elements under the 'root' svg group.
+ d3.select(this.$.svg).select('#root').selectAll('*').remove();
+ // And the defs.
+ d3.select(this.$.svg).select('defs #linearGradients')
+ .selectAll('*').remove();
+ },
+ /** Main method for building the scene */
+ _build: function(graphHierarchy) {
+ if (!graphHierarchy) { return; } //handle untruthy input
+ var templateNames = d3.keys(graphHierarchy.hierarchy.templates);
+
+ this.templateIndex = d3.scale.ordinal()
+ .domain(templateNames)
+ .range(d3.range(0, templateNames.length));
+ tf.time('tf-graph-scene (layout):', function() {
+ // layout the scene for this meta / series node
+ tf.graph.layout.scene(graphHierarchy.root, this);
+ }.bind(this));
+
+ tf.time('tf-graph-scene (build scene):', function() {
+ tf.graph.scene.buildGroup(d3.select(this.$.root), graphHierarchy.root, this);
+ tf.graph.scene.addGraphClickListener(this.$.svg, this);
+ }.bind(this));
+ // Update the minimap again when the graph is done animating.
+ setTimeout(function() {
+ this.minimap.update();
+ }.bind(this), tf.graph.layout.PARAMS.animation.duration);
+ },
+ ready: function() {
+ this._zoom = d3.behavior.zoom()
+ .on('zoomend', function() {
+ if (this._zoomStartCoords) {
+ // Calculate the total distance dragged during the zoom event.
+ // If it is sufficiently small, then fire an event indicating
+ // that zooming has ended. Otherwise wait to fire the zoom end
+ // event, so that a mouse click registered as part of this zooming
+ // is ignored (as this mouse click was part of a zooming, and should
+ // not be used to indicate an actual click on the graph).
+ var dragDistance = Math.sqrt(
+ Math.pow(this._zoomStartCoords[0] - this._zoomCoords[0], 2) +
+ Math.pow(this._zoomStartCoords[1] - this._zoomCoords[1], 2));
+ if (dragDistance < this._maxZoomDistanceForClick) {
+ this._fireEnableClick();
+ } else {
+ setTimeout(this._fireEnableClick.bind(this), 50);
+ }
+ }
+ this._zoomStartCoords = null;
+ }.bind(this))
+ .on('zoom', function() {
+ // Store the coordinates of the zoom event
+ this._zoomCoords = d3.event.translate;
+
+ // If this is the first zoom event after a zoom-end, then
+ // store the coordinates as the start coordinates as well,
+ // and fire an event to indicate that zooming has started.
+ // This doesn't use the zoomstart event, as d3 sends this
+ // event on mouse-down, even if there has been no dragging
+ // done to translate the graph around.
+ if (!this._zoomStartCoords) {
+ this._zoomStartCoords = this._zoomCoords.slice();
+ this.fire('disable-click');
+ }
+ this._zoomed = true;
+ d3.select(this.$.root).attr('transform',
+ 'translate(' + d3.event.translate + ')' +
+ 'scale(' + d3.event.scale + ')');
+ // Notify the minimap.
+ this.minimap.zoom(d3.event.translate, d3.event.scale);
+ }.bind(this));
+ d3.select(this.$.svg).call(this._zoom)
+ .on('dblclick.zoom', null);
+ d3.select(window).on('resize', function() {
+ // Notify the minimap that the user's window was resized.
+ // The minimap will figure out the new dimensions of the main svg
+ // and will use the existing translate and scale params.
+ this.minimap.zoom();
+ }.bind(this));
+ // Initialize the minimap.
+ this.minimap = this.$.minimap.init(this.$.svg, this.$.root, this._zoom,
+ tf.graph.layout.PARAMS.minimap.size,
+ tf.graph.layout.PARAMS.subscene.meta.labelHeight);
+ },
+ _buildAndFit: function(graphHierarchy) {
+ this._resetState();
+ this._build(graphHierarchy);
+ // Fit to screen after the graph is done animating.
+ setTimeout(this.fit.bind(this), tf.graph.layout.PARAMS.animation.duration);
+ },
+ _updateLabels: function(showLabels) {
+ var titleStyle = this.getElementsByClassName('title')[0].style;
+ var auxTitleStyle = this.getElementsByClassName('auxTitle')[0].style;
+ var core = this.getElementsByClassName(tf.graph.scene.Class.Scene.CORE)[0];
+ // Only show labels if the graph is fully loaded.
+ if (showLabels && core && this.progress && this.progress.value === 100) {
+ var aux =
+ this.getElementsByClassName(tf.graph.scene.Class.Scene.INEXTRACT)[0] ||
+ this.getElementsByClassName(tf.graph.scene.Class.Scene.OUTEXTRACT)[0];
+ var coreX = core.getCTM().e;
+ var auxX = aux ? aux.getCTM().e : null;
+ titleStyle.display = 'inline';
+ titleStyle.left = coreX + 'px';
+ if (auxX !== null && auxX !== coreX) {
+ auxTitleStyle.display = 'inline';
+ auxTitleStyle.left = auxX + 'px';
+ } else {
+ auxTitleStyle.display = 'none';
+ }
+ } else {
+ titleStyle.display='none';
+ auxTitleStyle.display = 'none';
+ }
+ },
+
+
+
+
+ /**
+ * Called whenever the user changed the 'color by' option in the
+ * UI controls.
+ */
+ _colorByChanged: function() {
+ // We iterate through each svg node and update its state.
+ _.each(this._nodeGroupIndex, function(nodeGroup, nodeName) {
+ this._updateNodeState(nodeName);
+ }, this);
+ // Notify also the minimap.
+ this.minimap.update();
+ },
+ fit: function() {
+ tf.graph.scene.fit(this.$.svg, this.$.root, this._zoom, function() {
+ this._zoomed = false;
+ }.bind(this));
+ },
+ isNodeSelected: function(n) {
+ return n === this.selectedNode;
+ },
+ isNodeHighlighted: function(n) {
+ return n === this.highlightedNode;
+ },
+ addAnnotationGroup: function(a, d, selection) {
+ var an = a.node.name;
+ this._annotationGroupIndex[an] = this._annotationGroupIndex[an] || {};
+ this._annotationGroupIndex[an][d.node.name] = selection;
+ },
+ getAnnotationGroupsIndex: function(a) {
+ return this._annotationGroupIndex[a];
+ },
+ removeAnnotationGroup: function(a, d) {
+ delete this._annotationGroupIndex[a.node.name][d.node.name];
+ },
+ addNodeGroup: function(n, selection) {
+ this._nodeGroupIndex[n] = selection;
+ },
+ getNodeGroup: function(n) {
+ return this._nodeGroupIndex[n];
+ },
+ removeNodeGroup: function(n) {
+ delete this._nodeGroupIndex[n];
+ },
+ addEdgeGroup: function(n, selection) {
+ this._edgeGroupIndex[e] = selection;
+ },
+ getEdgeGroup: function(e) {
+ return this._edgeGroupIndex[e];
+ },
+ /**
+ * Update node and annotation node of the given name.
+ * @param {String} n node name
+ */
+ _updateNodeState: function(n) {
+ var node = this.getNode(n);
+ var nodeGroup = this.getNodeGroup(n);
+
+ if (nodeGroup) {
+ tf.graph.scene.node.stylize(nodeGroup, node, this);
+ }
+
+ var annotationGroupIndex = this.getAnnotationGroupsIndex(n);
+ _.each(annotationGroupIndex, function(aGroup, hostName) {
+ tf.graph.scene.node.stylize(aGroup, node, this,
+ tf.graph.scene.Class.Annotation.NODE);
+ }, this);
+ },
+
+ _selectedNodeChanged: function(selectedNode, oldSelectedNode) {
+ if (selectedNode === oldSelectedNode) {
+ return;
+ }
+
+ if (selectedNode) {
+ this._updateNodeState(selectedNode);
+ }
+ if (oldSelectedNode) {
+ this._updateNodeState(oldSelectedNode);
+ }
+
+ if (!selectedNode) {
+ return;
+ }
+ // Update the minimap to reflect the highlighted (selected) node.
+ this.minimap.update();
+ var node = this.graphHierarchy.hierarchy.node(selectedNode);
+ var nodeParents = [];
+ // Create list of all metanode parents of the selected node.
+ while (node.parentNode != null
+ && node.parentNode.name != tf.graph.ROOT_NAME) {
+ node = node.parentNode;
+ nodeParents.push(node.name);
+ }
+ // Ensure each parent metanode is built and expanded.
+ var topParentNodeToBeExpanded;
+ _.forEachRight(nodeParents, function(parentName) {
+ this.graphHierarchy.buildSubhierarchy(parentName);
+ var renderNode = this.graphHierarchy.getRenderNodeByName(parentName);
+ if (renderNode.node.isGroupNode && !renderNode.expanded) {
+ renderNode.expanded = true;
+ if (!topParentNodeToBeExpanded) {
+ topParentNodeToBeExpanded = renderNode;
+ }
+ }
+ }, this);
+ // If any expansion was needed to display this selected node, then
+ // inform the scene of the top-most expansion.
+ if (topParentNodeToBeExpanded) {
+ this.setNodeExpanded(topParentNodeToBeExpanded);
+ this._zoomed = true;
+ }
+
+ if (tf.graph.scene.panToNode(selectedNode, this.$.svg, this.$.root,
+ this._zoom)) {
+ this._zoomed = true;
+ }
+ },
+ _highlightedNodeChanged: function(highlightedNode, oldHighlightedNode) {
+ if (highlightedNode === oldHighlightedNode) {
+ return;
+ }
+
+ if (highlightedNode) {
+ this._updateNodeState(highlightedNode);
+ }
+ if (oldHighlightedNode) {
+ this._updateNodeState(oldHighlightedNode);
+ }
+ },
+ _onZoomChanged: function() {
+ this._updateLabels(!this._zoomed);
+ },
+ _fireEnableClick: function() {
+ this.fire('enable-click');
+ },
+});
+</script>
+<dom-module id="tf-graph-params" assetpath="../components/tf-graph/">
+</dom-module>
+<script>
+ Polymer({
+
+ is: 'tf-graph-params',
+
+ properties: {
+ // PARAMETERS
+
+ enableExtraction: {
+ type: Boolean,
+ value: true
+ },
+
+ /** Maximum in-degree that a node can have without being considered as
+ * high in-degree node. */
+ maxInDegree: {
+ type: Number,
+ value: 4
+ },
+ /** Maximum out-degree that a node can have without being considered as
+ * high out-degree node. */
+ maxOutDegree: {
+ type: Number,
+ value: 4
+ },
+ /** Maximum number of control edges a node can have before they aren't
+ * displayed. */
+ maxControlDegree: {
+ type: Number,
+ value: 4
+ },
+
+ /**
+ * Types patterns for predefined out-extract nodes, which are
+ * sink-like nodes that will be extracted from the main graph.
+ */
+ outExtractTypes: {
+ type: Array,
+ value: function() {
+ return [
+ 'NoOp' // for "sgd", "momentum" group
+ ];
+ }
+ },
+
+ /**
+ * Types patterns for predefined in-extract nodes, which are
+ * source-like nodes that will be extracted from the main graph.
+ */
+ inExtractTypes: {
+ type: Array,
+ value: function() {
+ return ['Variable'];
+ }
+ },
+
+ /**
+ * When removing edges from a high degree node, remove all of its edges if
+ * detachAllEdgesForHighDegree is true. Otherwise remove all in-edges if
+ * the node has high in-degree, or all out-edges if the node has high
+ * out-degree.
+ */
+ detachAllEdgesForHighDegree: {
+ type: Boolean,
+ value: false
+ },
+
+ /**
+ * After extracting high in/out degree nodes and predefined
+ * source-like/sink-like, extract isolated nodes to the side
+ * if this extractIsolatedNodesWithAnnotationsOnOneSide is true.
+ */
+ extractIsolatedNodesWithAnnotationsOnOneSide: {
+ type: Boolean,
+ value: true
+ },
+
+ /**
+ * Whether to draw bridge paths inside of expanded group nodes.
+ */
+ enableBridgegraph: {
+ type: Boolean,
+ value: true
+ },
+
+ /**
+ * Colors for the minimum and maximum values whenever we have a gradient
+ * scale.
+ */
+ minMaxColors: {
+ type: Array,
+ value: function() {
+ return ["#fff5f0", "#fb6a4a"];
+ }
+ },
+
+ /**
+ * Maximum number of annotations to be displayed on a node before an
+ * ellipsis is used.
+ */
+ maxAnnotations: {
+ type: Number,
+ value: 5
+ }
+ }
+ });
+</script>
+<dom-module id="tf-graph" assetpath="../components/tf-graph/">
+<template>
+<style>
+.container {
+ width: 100%;
+ height: 100%;
+}
+
+.vertical {
+ width:100%;
+ height:100%;
+ @apply(--layout-vertical);
+}
+
+.auto {
+ @apply(--layout-flex-auto);
+ @apply(--layout-vertical);
+}
+
+h2 {
+ text-align: center;
+}
+
+paper-button {
+ text-transform: none;
+}
+</style>
+<div class="container">
+ <tf-graph-params id="graphParams"></tf-graph-params>
+ <div class="vertical">
+ <h2>[[title]]</h2>
+ <tf-graph-scene id="scene" class="auto" graph-hierarchy="[[_renderHierarchy]]" highlighted-node="[[_getVisible(highlightedNode)]]" selected-node="[[selectedNode]]" color-by="[[colorBy]]" name="[[graphName]]" progress="[[progress]]"></tf-graph-scene>
+ </div>
+</div>
+</template>
+</dom-module>
+
+<script>
+Polymer({
+
+ is: 'tf-graph',
+
+ properties: {
+ graphHierarchy: {
+ type: Object,
+ notify: true,
+ observer: '_graphChanged'
+ },
+ title: String,
+ selectedNode: {
+ type: String,
+ notify: true,
+ },
+ highlightedNode: {
+ type: String,
+ notify: true
+ },
+ /** What to color the nodes by (compute time, memory, device etc.) */
+ colorBy: String,
+ colorByParams: {
+ type: Object,
+ notify: true,
+ readOnly: true, // Produces and doesn't consume.
+ },
+ // internal properties
+ _graphParams: {
+ type: Object,
+ value: function() {
+ return this.$.graphParams;
+ }
+ },
+ _renderDepth: {
+ type: Number,
+ value: 1
+ },
+ _renderHierarchy: {
+ type: Object,
+ readOnly: true,
+ notify: true,
+ computed: '_buildRenderHierarchy(graphHierarchy, _graphParams)'
+ },
+ _allowGraphSelect: {
+ type: Boolean,
+ value: true
+ }
+ },
+ _buildRenderHierarchy: function(graphHierarchy, params) {
+ return tf.time('new tf.graph.render.Hierarchy', function() {
+ if (graphHierarchy.root.type !== tf.graph.NodeType.META) {
+ // root must be metanode but sometimes Polymer's dom-if has not
+ // remove tf-graph element yet in <tf-node-info>
+ // and thus mistakenly pass non-metanode to this module.
+ return;
+ }
+ var renderGraph = new tf.graph.render.RenderGraphInformation(
+ graphHierarchy, params);
+ // Producing the 'color by' parameters to be consumed
+ // by the tf-graph-controls panel. It contains information about the
+ // min and max values and their respective colors, as well as list
+ // of devices with their respective colors.
+
+ function getColorParamsFromScale(scale) {
+ return {
+ minValue: scale.domain()[0],
+ maxValue: scale.domain()[1],
+ startColor: scale.range()[0],
+ endColor: scale.range()[1]
+ };
+ }
+
+ this._setColorByParams({
+ compute_time: getColorParamsFromScale(renderGraph.computeTimeScale),
+ memory: getColorParamsFromScale(renderGraph.memoryUsageScale),
+ device: _.map(renderGraph.deviceColorMap.domain(),
+ function(deviceName) {
+ return {
+ device: deviceName,
+ color: renderGraph.deviceColorMap(deviceName)
+ };
+ })
+ });
+ return renderGraph;
+ }.bind(this));
+ },
+ _getVisible: function(name) {
+ if (!name) {
+ return name;
+ }
+ return this._renderHierarchy.getNearestVisibleAncestor(name);
+ },
+ listeners: {
+ 'graph-select': '_graphSelected',
+ 'disable-click': '_disableClick',
+ 'enable-click': '_enableClick',
+ // Nodes
+ 'node-toggle-expand': '_nodeToggleExpand',
+ 'node-select': '_nodeSelected',
+ 'node-highlight': '_nodeHighlighted',
+ 'node-unhighlight': '_nodeUnhighlighted',
+
+ // Annotations
+
+ /* Note: currently highlighting/selecting annotation node has the same
+ * behavior as highlighting/selecting actual node so we point to the same
+ * set of event listeners. However, we might redesign this to be a bit
+ * different.
+ */
+ 'annotation-select': '_nodeSelected',
+ 'annotation-highlight': '_nodeHighlighted',
+ 'annotation-unhighlight': '_nodeUnhighlighted',
+ },
+ _graphChanged: function() {
+ // When a new graph is loaded, fire this event so that there is no
+ // info-card being displayed for the previously-loaded graph.
+ this.fire('graph-select');
+ },
+ _graphSelected: function(event) {
+ // Graph selection is not allowed during an active zoom event, as the
+ // click seen during a zoom/pan is part of the zooming and does not
+ // indicate a user desire to click on a specific section of the graph.
+ if (this._allowGraphSelect) {
+ this.set('selectedNode', null);
+ }
+ // Reset this variable as a bug in d3 zoom behavior can cause zoomend
+ // callback not to be called if a right-click happens during a zoom event.
+ this._allowGraphSelect = true;
+ },
+ _disableClick: function(event) {
+ this._allowGraphSelect = false;
+ },
+ _enableClick: function(event) {
+ this._allowGraphSelect = true;
+ },
+ _nodeSelected: function(event) {
+ if (this._allowGraphSelect) {
+ this.set('selectedNode', event.detail.name);
+ }
+ // Reset this variable as a bug in d3 zoom behavior can cause zoomend
+ // callback not to be called if a right-click happens during a zoom event.
+ this._allowGraphSelect = true;
+ },
+ _nodeHighlighted: function(event) {
+ this.set('highlightedNode', event.detail.name);
+ },
+ _nodeUnhighlighted: function(event) {
+ this.set('highlightedNode', null);
+ },
+ _nodeToggleExpand: function(event) {
+ var nodeName = event.detail.name;
+ var renderNode = this._renderHierarchy.getRenderNodeByName(nodeName);
+ // Op nodes are not expandable.
+ if (renderNode.node.type === tf.graph.NodeType.OP) {
+ return;
+ }
+ this._renderHierarchy.buildSubhierarchy(nodeName);
+ renderNode.expanded = !renderNode.expanded;
+ this.querySelector('#scene').setNodeExpanded(renderNode);
+ // Also select the expanded node.
+ this._nodeSelected(event);
+ },
+ not: function(x) {
+ return !x;
+ }
+});
+</script>
+<dom-module id="tf-graph-icon" assetpath="../components/tf-graph/">
+ <template>
+ <template is="dom-if" if="[[_isType(node, type, 'OP')]]">
+ <template is="dom-if" if="[[_isConst(node, const)]]">
+ <svg height$="[[height]]" preserveAspectRatio="xMinYMid meet" viewBox="0 0 10 10">
+ <circle fill="white" stroke="#848484" cx="5" cy="5" r="3"></circle>
+ </svg>
+ </template>
+ <template is="dom-if" if="[[_isSummary(node, summary)]]">
+ <img height$="[[height]]" src="[[resolveUrl('../../lib/svg/summary-icon.svg')]]">
+ </template>
+ <template is="dom-if" if="[[_isRegularOp(node, const, summary)]]">
+ <svg height$="[[height]]" preserveAspectRatio="xMinYMid meet" viewBox="0 0 16 8">
+ <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#op-node-stamp" fill="white" stroke="#ccc" x="8" y="4"></use>
+ </svg>
+ </template>
+ </template>
+ <template is="dom-if" if="[[_isType(node, type, 'META')]]">
+ <svg height$="[[height]]" preserveAspectRatio="xMinYMid meet" viewBox="0 0 37 16">
+ <rect x="1" y="1" fill="#d9d9d9" stroke="#ccc" stroke-width="2px" height="14" width="35" rx="5" ry="5"></rect>
+ </svg>
+ </template>
+ <template is="dom-if" if="[[_isType(node, type, 'SERIES')]]">
+ <template is="dom-if" if="[[_isVertical(node, vertical)]]">
+ <svg height$="[[height]]" preserveAspectRatio="xMinYMid meet" viewBox="0 0 16 15">
+ <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#op-series-vertical-stamp" fill="white" stroke="#ccc" x="0" y="2"></use>
+ </svg>
+ </template>
+ <template is="dom-if" if="[[!_isVertical(node, vertical)]]">
+ <svg height$="[[height]]" preserveAspectRatio="xMinYMid meet" viewBox="0 0 24 10">
+ <use xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="#op-series-horizontal-stamp" fill="white" stroke="#ccc" x="0" y="1"></use>
+ </svg>
+ </template>
+ </template>
+ </template>
+
+ <script>
+ (function() {
+ Polymer({
+ is: 'tf-graph-icon',
+
+ properties: {
+ /**
+ * Node to represent with an icon. Optional, but if specified, its
+ * properties override those defined in the type, vertical, const and
+ * summary properties.
+ * @type {tf.graph.Node}
+ */
+ node: {
+ type: Object,
+ value: null
+ },
+
+ /** Type of node to draw. */
+ type: {
+ type: String,
+ value: null
+ },
+
+ /** Direction for series (ignored for other types). */
+ vertical: {
+ type: Boolean,
+ value: false
+ },
+
+ /** Whether the op is Const (ignored for non-ops). */
+ const: {
+ type: Boolean,
+ value: false
+ },
+
+ /** Whether the op is a Summary (ignored for non-ops). */
+ summary: {
+ type: Boolean,
+ value: false
+ },
+
+ /** Height of the SVG element in pixels, used for scaling. */
+ height: {
+ type: Number,
+ value: 20
+ }
+ },
+
+ /**
+ * Test whether the specified node's type, or the literal type string,
+ * match a particular other type.
+ */
+ _isType: function(inputNode, inputType, targetType) {
+ if (inputNode) {
+ return tf.graph.NodeType[inputNode.type] === targetType;
+ }
+ return inputType === targetType;
+ },
+
+ /**
+ * Test whether the specified node should be represented as a vertical
+ * series. Defaults to the value of the vertical property if node is
+ * not specified.
+ */
+ _isVertical: function(inputNode, inputVertical) {
+ if (inputNode) {
+ return inputNode.hasNonControlEdges;
+ }
+ return !!inputVertical;
+ },
+
+ /**
+ * Test whether the specified node is a constant. Defaults to the value
+ * of the const property if node is not specified.
+ */
+ _isConst: function(inputNode, inputConst) {
+ if (inputNode) {
+ return inputNode.op === 'Const';
+ }
+ return !!inputConst;
+ },
+
+ /**
+ * Test whether the specified node is a summary. Defaults to the value
+ * of the summary property if node is not specified.
+ */
+ _isSummary: function(inputNode, inputSummary) {
+ if (inputNode) {
+ return this._isType(inputNode, null, 'OP') &&
+ inputNode.op.substr(-7) === 'Summary';
+ }
+ return !!inputSummary;
+ },
+
+ /**
+ * Test whether the op node is a regular non-summary non-const node.
+ */
+ _isRegularOp: function(inputNode, inputConst, inputSummary) {
+ return !this._isConst(inputNode, inputConst) &&
+ !this._isSummary(inputNode, inputSummary);
+ }
+ });
+ })();
+ </script>
+</dom-module>
+<dom-module id="tf-node-list-item" assetpath="../components/tf-graph-info/">
+ <style>
+ #list-item {
+ width: 100%;
+ color: #565656;
+ font-size: 11pt;
+ font-weight: 400;
+ position: relative;
+ }
+
+ #list-item:hover {
+ background-color: var(--google-yellow-100);
+ }
+
+ .clickable {
+ cursor: pointer;
+ }
+
+ #list-item span {
+ display: block;
+ margin-left: 40px;
+ }
+
+ #list-item.excluded span {
+ color: #999;
+ }
+
+ .node-icon {
+ position: absolute;
+ top: 1px;
+ left: 2px;
+ }
+ </style>
+ <template>
+ <div id="list-item" on-mouseover="_nodeListener" on-mouseout="_nodeListener" on-click="_nodeListener">
+ <tf-graph-icon class="node-icon" node="[[itemNode]]" height="12"></tf-graph-icon>
+ <span title$="[[name]]">[[name]]</span>
+ </div>
+ </template>
+
+ <script>
+ (function() {
+ Polymer({
+ is: 'tf-node-list-item',
+
+ properties: {
+ /**
+ * The Node for the card itself, on which this item is being drawn.
+ * @type {tf.graph.Node}
+ */
+ cardNode: Object,
+ /**
+ * The Node for the item within the card, somehow related to cardNode.
+ * @type {tf.graph.Node}
+ */
+ itemNode: Object,
+ name: String,
+ itemType: {
+ type: String,
+ observer: '_itemTypeChanged'
+ }
+ },
+
+ _itemTypeChanged: function() {
+ if (this.itemType !== 'subnode') {
+ this.$['list-item'].classList.add('clickable');
+ } else {
+ this.$['list-item'].classList.remove('clickable');
+ }
+ },
+
+ _nodeListener: function(event) {
+ // fire node.click/mouseover/mouseout
+ this.fire('node-list-item-' + event.type, {
+ cardNode: this.cardNode.name,
+ nodeName: this.name,
+ type: this.itemType
+ });
+ }
+
+ });
+ })();
+ </script>
+</dom-module>
+<dom-module id="tf-node-info" assetpath="../components/tf-graph-info/">
+ <style>
+ .sub-list-group {
+ padding: 8px 12px 0px;
+ font-weight: 500;
+ font-size: 12pt;
+ }
+
+ .sub-list {
+ max-height: 300px;
+ overflow-y: scroll;
+ }
+
+ .attr-left {
+ float: left;
+ width: 30%;
+ word-wrap: break-word;
+ color: #565656;
+ font-size: 11pt;
+ font-weight: 400;
+ }
+
+ .attr-right {
+ margin-left: 30%;
+ word-wrap: break-word;
+ color: #565656;
+ font-weight: 400;
+ }
+
+ paper-item {
+ padding: 0;
+ background: #e9e9e9;
+ }
+
+ paper-item-body[two-line] {
+ min-height: 0;
+ padding: 8px 12px 4px;
+ }
+
+ .expandedInfo {
+ padding: 0 0 8px;
+ }
+
+ .controlDeps {
+ padding: 0 0 0 8px;
+ }
+
+ .node-name {
+ white-space: normal;
+ word-wrap: break-word;
+ font-size: 14pt;
+ font-weight: 500;
+ }
+
+ .node-icon {
+ float: right;
+ }
+
+ .subtitle {
+ font-size: 12pt;
+ color: #5e5e5e;
+ }
+
+ .controlLine {
+ font-size: 11pt;
+ font-weight: 400;
+ }
+
+ .toggle-button {
+ float: right;
+ max-height: 20px;
+ max-width: 20px;
+ padding: 0;
+ }
+
+ .control-toggle-button {
+ float: left;
+ max-height: 20px;
+ max-width: 20px;
+ padding: 0;
+ }
+ </style>
+ <template>
+ <paper-item>
+ <paper-item-body two-line="">
+ <div>
+ <paper-icon-button icon="{{_getToggleIcon(_expanded)}}" on-click="_toggleExpanded" class="toggle-button">
+ </paper-icon-button>
+ <div class="node-name">[[_getNodeName(nodeName)]]</div>
+ </div>
+ <div secondary="">
+ <tf-graph-icon class="node-icon" node="[[_node]]"></tf-graph-icon>
+ <template is="dom-if" if="{{_node.op}}">
+ <div class="subtitle">
+ Operation:
+ <span>[[_node.op]]</span>
+ </div>
+ </template>
+ <template is="dom-if" if="{{_node.metagraph}}">
+ <div class="subtitle">
+ Subgraph:
+ <span>[[_node.cardinality]]</span> nodes
+ </div>
+ </template>
+ </div>
+ </paper-item-body>
+ </paper-item>
+ <iron-collapse opened="{{_expanded}}">
+ <template is="dom-if" if="{{_expanded}}" restamp="true">
+ <div class="expandedInfo">
+ <div class="sub-list-group attributes">
+ Attributes
+ (<span>[[_attributes.length]]</span>)
+ <iron-list class="sub-list" id="attributesList" items="[[_attributes]]">
+ <template>
+ <div>
+ <div class="attr-left">[[item.key]]</div>
+ <div class="attr-right">[[item.value]]</div>
+ </div>
+ </template>
+ </iron-list>
+ </div>
+
+ <template is="dom-if" if="{{_device}}">
+ <div class="sub-list-group device">
+ <div class="attr-left">Device</div>
+ <div class="attr-right">[[_device]]</div>
+ </div>
+ </template>
+
+ <div class="sub-list-group predecessors">
+ Inputs
+ (<span>[[_totalPredecessors]]</span>)
+ <iron-list class="sub-list" id="inputsList" items="[[_predecessors.regular]]">
+ <template>
+ <tf-node-list-item card-node="[[_node]]" item-node="[[_getNode(item, graphHierarchy)]]" name="[[item]]" item-type="predecessors">
+ </tf-node-list-item>
+ </template>
+ </iron-list>
+ <template is="dom-if" if="[[_predecessors.control.length]]">
+ <div class="controlDeps">
+ <div class="controlLine">
+ <paper-icon-button icon="{{_getToggleIcon(_openedControlPred)}}" on-click="_toggleControlPred" class="control-toggle-button">
+ </paper-icon-button>
+ Control dependencies
+ </div>
+ <iron-collapse opened="{{_openedControlPred}}">
+ <template is="dom-if" if="{{_openedControlPred}}" restamp="true">
+ <iron-list class="sub-list" items="[[_predecessors.control]]">
+ <template>
+ <tf-node-list-item card-node="[[_node]]" item-node="[[_getNode(item, graphHierarchy)]]" name="[[item]]" item-type="predecessors">
+ </tf-node-list-item>
+ </template>
+ </iron-list>
+ </template>
+ </iron-collapse>
+ </div>
+ </template>
+ </div>
+
+ <div class="sub-list-group successors">
+ Outputs
+ (<span>[[_totalSuccessors]]</span>)
+ <iron-list class="sub-list" id="outputsList" items="[[_successors.regular]]">
+ <template>
+ <tf-node-list-item card-node="[[_node]]" item-node="[[_getNode(item, graphHierarchy)]]" name="[[item]]" item-type="successor">
+ </tf-node-list-item>
+ </template>
+ </iron-list>
+ <template is="dom-if" if="[[_successors.control.length]]">
+ <div class="controlDeps">
+ <div class="controlLine">
+ <paper-icon-button icon="{{_getToggleIcon(_openedControlSucc)}}" on-click="_toggleControlSucc" class="control-toggle-button">
+ </paper-icon-button>
+ Control dependencies
+ </div>
+ <iron-collapse opened="{{_openedControlSucc}}">
+ <template is="dom-if" if="{{_openedControlSucc}}" restamp="true">
+ <iron-list class="sub-list" items="[[_successors.control]]">
+ <template>
+ <tf-node-list-item card-node="[[_node]]" item-node="[[_getNode(item, graphHierarchy)]]" name="[[item]]" item-type="successors">
+ </tf-node-list-item>
+ </template>
+ </iron-list>
+ </template>
+ </iron-collapse>
+ </div>
+ </template>
+ </div>
+ </div>
+ </template>
+ </iron-collapse>
+ </template>
+
+ <script>
+ (function() {
+ Polymer({
+ is: 'tf-node-info',
+
+ properties: {
+ nodeName: String,
+ graphHierarchy: Object,
+ _node: {
+ type: Object,
+ computed: '_getNode(nodeName, graphHierarchy)',
+ observer: '_resetState'
+ },
+ _attributes: {
+ type: Array,
+ computed: '_getAttributes(_node)'
+ },
+ _device: {
+ type: String,
+ computed: '_getDevice(_node)'
+ },
+ _successors: {
+ type: Object,
+ computed: '_getSuccessors(_node, graphHierarchy)'
+ },
+ _predecessors: {
+ type: Object,
+ computed: '_getPredecessors(_node, graphHierarchy)'
+ },
+ _subnodes: {
+ type: Array,
+ computed: '_getSubnodes(_node)'
+ },
+ _expanded: {
+ type: Boolean,
+ value: true
+ },
+ _totalPredecessors: {
+ type: Number,
+ computed: '_getTotalPred(_predecessors)'
+ },
+ _totalSuccessors: {
+ type: Number,
+ computed: '_getTotalSucc(_successors)'
+ },
+ _openedControlPred: {
+ type: Boolean,
+ value: false
+ },
+ _openedControlSucc: {
+ type: Boolean,
+ value: false
+ },
+ },
+ expandNode: function() {
+ this.fire('_node.expand', this.node);
+ },
+ _getNode: function(n, graphHierarchy) {
+ return graphHierarchy.node(n);
+ },
+ _getNodeName: function(nodeName) {
+ // Insert a zero-width whitespace character before each slash so that
+ // long node names wrap cleanly at path boundaries.
+ return (nodeName || '').replace(/\//g, '\u200B/');
+ },
+ _getAttributes: function(node) {
+ this.async(this._resizeList.bind(this, "#attributesList"));
+ return node && node.attr ? node.attr.map(function(entry) {
+ return {key: entry.key, value: JSON.stringify(entry.value)};
+ }) : [];
+
+ },
+ _getDevice: function(node) {
+ return node ? node.device : null;
+ },
+ _getSuccessors: function(node, hierarchy) {
+ this.async(this._resizeList.bind(this, "#inputsList"));
+ return node ? hierarchy.getSuccessors(node.name) : [[], []];
+ },
+ _getPredecessors: function(node, hierarchy) {
+ this.async(this._resizeList.bind(this, "#outputsList"));
+ return node ? hierarchy.getPredecessors(node.name) : [[], []];
+ },
+ _getSubnodes: function(node) {
+ return node && node.metagraph ? node.metagraph.nodes() : null;
+ },
+ _getTotalPred: function(predecessors) {
+ return predecessors.regular.length + predecessors.control.length;
+ },
+ _getTotalSucc: function(successors) {
+ return successors.regular.length + successors.control.length;
+ },
+ _toggleControlPred: function() {
+ this._openedControlPred = !this._openedControlPred;
+ },
+ _toggleControlSucc: function() {
+ this._openedControlSucc = !this._openedControlSucc;
+ },
+ _toggleExpanded: function() {
+ this._expanded = !this._expanded;
+ },
+ _getToggleIcon: function(expanded) {
+ return expanded ? "expand-less" : "expand-more";
+ },
+ _resetState: function() {
+ this._openedControlPred = false;
+ this._openedControlSucc = false;
+ },
+ _resizeList: function(selector) {
+ var list = document.querySelector(selector);
+ if (list) {
+ list.fire('iron-resize');
+ }
+ }
+ });
+ })();
+ </script>
+</dom-module>
+<dom-module id="tf-graph-info" assetpath="../components/tf-graph-info/">
+<template>
+<style>
+:host {
+ font-size: 12px;
+ margin: 0;
+ padding: 0;
+ display: block;
+}
+
+h2 {
+ padding: 0;
+ text-align: center;
+ margin: 0;
+}
+</style>
+<template is="dom-if" if="{{selectedNode}}">
+ <paper-material elevation="1" class="card">
+ <tf-node-info graph-hierarchy="[[graphHierarchy]]" flat-graph="[[graph]]" node-name="[[selectedNode]]" highlighted-node="{{highlightedNode}}">
+ </tf-node-info>
+ </paper-material>
+</template>
+</template>
+<script>
+(function() {
+ Polymer({
+ is: 'tf-graph-info',
+
+ properties: {
+ title: String,
+ graphHierarchy: Object,
+ graph: Object,
+ // Two-ways
+ selectedNode: {
+ type: String,
+ notify: true
+ },
+ highlightedNode: {
+ type: String,
+ notify: true
+ }
+ },
+ listeners: {
+ 'node-list-item-click': '_nodeListItemClicked',
+ 'node-list-item-mouseover': '_nodeListItemMouseover',
+ 'node-list-item-mouseout': '_nodeListItemMouseout'
+ },
+ _nodeListItemClicked: function(event) {
+ this.selectedNode = event.detail.nodeName;
+ },
+ _nodeListItemMouseover: function(event) {
+ this.highlightedNode = event.detail.nodeName;
+ },
+ _nodeListItemMouseout: function() {
+ this.highlightedNode = null;
+ }
+ });
+})();
+</script>
+</dom-module>
+<dom-module id="tf-graph-board" assetpath="../components/tf-graph-board/">
+<template>
+<style>
+::host {
+ display: block;
+}
+
+/deep/ .close {
+ position: absolute;
+ cursor: pointer;
+ left: 15px;
+ bottom: 15px;
+}
+
+.container {
+ width: 100%;
+ height: 100%;
+ opacity: 1;
+}
+
+.container.loading {
+ cursor: progress;
+ opacity: 0.1;
+}
+
+.container.loading.error {
+ cursor: auto;
+}
+
+#info {
+ position: absolute;
+ right: 5px;
+ top: 5px;
+ padding: 0px;
+ max-width: 380px;
+ min-width: 320px;
+ background-color: rgba(255,255,255,0.9);
+ @apply(--shadow-elevation-2dp);
+}
+
+#main {
+ width: 100%;
+ height: 100%;
+}
+
+#progress-bar {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ justify-content: center;
+ width: 100%;
+ position: absolute;
+ top: 40px;
+ left: 0;
+ font-size: 13px;
+}
+
+#progress-msg {
+ width: 400px;
+ margin-bottom: 5px;
+}
+
+paper-progress {
+ width: 400px;
+ --paper-progress-height: 6px;
+ --paper-progress-active-color: #f3913e;
+}
+</style>
+<template is="dom-if" if="[[_isNotComplete(progress)]]">
+ <div id="progress-bar">
+ <div id="progress-msg">[[progress.msg]]</div>
+ <paper-progress value="[[progress.value]]"></paper-progress>
+ </div>
+</template>
+<div class$="[[_getContainerClass(progress)]]">
+ <div id="main">
+ <tf-graph id="graph" graph-hierarchy="[[graphHierarchy]]" selected-node="{{_selectedNode}}" highlighted-node="{{_highlightedNode}}" color-by="[[colorBy]]" color-by-params="{{colorByParams}}" graph-name="[[graphName]]" progress="[[progress]]"></tf-graph>
+ </div>
+ <div id="info">
+ <tf-graph-info id="graph-info" title="selected" graph-hierarchy="[[graphHierarchy]]" graph="[[graph]]" selected-node="{{_selectedNode}}" highlighted-node="{{_highlightedNode}}"></tf-graph-info>
+ </div>
+</div>
+</template>
+</dom-module>
+
+<script>
+Polymer({
+ is: 'tf-graph-board',
+ properties: {
+ // Public API.
+ graphHierarchy: Object,
+ graph: Object,
+ graphName: String,
+ // True if the graph data has also run-time stats.
+ hasStats: Boolean,
+ /**
+ * @type {value: number, msg: string}
+ *
+ * A number between 0 and 100 denoting the % of progress
+ * for the progress bar and the displayed message.
+ */
+ progress: Object,
+ colorByParams: {
+ type: Object,
+ notify: true,
+ },
+ // Private API: Data routing between child components.
+ _selectedNode: String,
+ _highlightedNode: String,
+ },
+ /** True if the progress is not complete yet (< 100 %). */
+ _isNotComplete: function(progress) {
+ return progress.value < 100;
+ },
+ _getContainerClass: function(progress) {
+ var result = 'container';
+ if (progress.error) {
+ result += ' error';
+ }
+ if (this._isNotComplete(progress)) {
+ result += ' loading';
+ }
+ return result;
+ }
+});
+</script>
+<dom-module id="tf-graph-controls" assetpath="../components/tf-graph/">
+<template>
+<style>
+:host {
+ font-size: 12px;
+ color: gray;
+ --paper-font-subhead: {
+ font-size: 14px;
+ color: gray;
+ };
+ --paper-dropdown-menu-icon: {
+ width: 15px;
+ height: 15px;
+ };
+ --paper-dropdown-menu-button: {
+ padding: 0;
+ };
+ --paper-dropdown-menu-input: {
+ padding: 0;
+ };
+ --paper-item-min-height: 30px;
+}
+
+paper-button[raised].keyboard-focus {
+ font-weight: normal;
+}
+
+.run-dropdown {
+ --paper-input-container: {
+ padding: 9px 0 0 25px;
+ };
+}
+
+.color-dropdown {
+ --paper-input-container: {
+ padding: 9px 0 0 13px;
+ };
+}
+
+table {
+ border-collapse: collapse;
+ border-spacing: 0;
+}
+
+table td {
+ padding: 0;
+ margin: 0;
+}
+
+.allcontrols {
+ padding: 10px;
+}
+
+.legend-holder {
+ position: absolute;
+ bottom: 0;
+ padding-bottom: 10px;
+}
+
+#fit {
+ color: var(--paper-orange-500);
+}
+
+paper-radio-button {
+ padding: 5px;
+}
+svg.icon {
+ width: 60px;
+ height: 18px;
+}
+.icon ellipse {
+ rx: 10px;
+ ry: 5px;
+ stroke: #CCC;
+ stroke-width: 1px;
+ fill: #FFFFFF;
+ cy: 10px;
+}
+.icon rect {
+ height: 14px;
+ width: 35px;
+ rx: 5px;
+ ry: 5px;
+ stroke: #CCC;
+ stroke-width: 2px;
+ fill: #D9D9D9;
+}
+.domainValues {
+ width: 165px;
+}
+.domainStart {
+ float: left;
+}
+.domainEnd {
+ float: right;
+}
+.colorBox {
+ width: 20px;
+}
+
+.image-icon {
+ width: 24px;
+ height: 24px;
+}
+
+.gray {
+ color: #666;
+}
+
+.title {
+ font-size: 16px;
+ margin: 8px 5px 8px 0;
+ color: black;
+}
+.title small {
+ font-weight: normal;
+}
+.deviceList {
+ max-height: 100px;
+ overflow-y: auto;
+}
+
+#file {
+ padding: 8px 0;
+}
+
+.color-text {
+ padding: 0 0 0 55px;
+}
+
+.fit-button-text {
+ text-transform: none;
+ padding: 8px 18px 0 18px;
+ font-size: 14px
+}
+
+.upload-button {
+ width: 165px;
+ height: 25px;
+ text-transform: none;
+ margin-top: 4px;
+}
+
+.fit-button {
+ padding: 2px;
+ width: 30px;
+ height: 30px;
+}
+
+.hidden-input {
+ height: 0px;
+ width: 0px;
+ overflow:hidden;
+}
+
+.allcontrols .control-holder {
+ display: flex;
+ clear: both;
+}
+</style>
+<div class="allcontrols">
+ <div class="control-holder">
+ <paper-icon-button id="fit" icon="aspect-ratio" class="fit-button" on-click="fit" alt="Fit to screen">
+ </paper-icon-button>
+ <paper-button class="fit-button-text" on-click="fit">Fit to screen
+ </paper-button>
+ </div>
+ <div class="control-holder">
+ <div class="title">Run</div>
+ <paper-dropdown-menu no-label-float="" no-animations="" noink="" class="run-dropdown">
+ <paper-menu id="select" class="dropdown-content" selected="{{selectedDataset}}">
+ <template is="dom-repeat" items="[[datasets]]">
+ <paper-item>[[item.name]]</paper-item>
+ </template>
+ </paper-menu>
+ </paper-dropdown-menu>
+ </div>
+ <div class="control-holder">
+ <div class="title">Upload</div>
+ <paper-button raised="" class="text-button upload-button" on-click="_getFile">Choose File</paper-button>
+ <div class="hidden-input">
+ <input type="file" id="file" name="file" on-change="_updateFileInput">
+ </div>
+ </div>
+ <div class="control-holder">
+ <div class="title">Color</div>
+ <paper-dropdown-menu no-label-float="" no-animations="" noink="" class="color-dropdown">
+ <paper-menu class="dropdown-content" selected="{{_colorByIndex}}">
+ <paper-item>Structure</paper-item>
+ <paper-item>Device</paper-item>
+ <template is="dom-if" if="[[hasStats]]">
+ <paper-item>Compute time</paper-item>
+ <paper-item>Memory</paper-item>
+ </template>
+ </paper-menu>
+ </paper-dropdown-menu>
+ </div>
+ <div>
+ <template is="dom-if" if="[[_isGradientColoring(colorBy)]]">
+ <svg width="160" height="20" style="margin: 0 5px" class="color-text">
+ <defs>
+ <linearGradient id="linearGradient" x1="0%" y1="0%" x2="100%" y2="0%">
+ <stop class="start" offset="0%" stop-color$="[[_currentGradientParams.startColor]]"></stop>
+ <stop class="end" offset="100%" stop-color$="[[_currentGradientParams.endColor]]"></stop>
+ </linearGradient>
+ </defs>
+ <rect x="0" y="0" width="160" height="20" fill="url(#linearGradient)" stroke="black"></rect>
+ </svg>
+ <div class="domainValues color-text">
+ <div class="domainStart">[[_currentGradientParams.minValue]]</div>
+ <div class="domainEnd">[[_currentGradientParams.maxValue]]</div>
+ </div>
+ </template>
+ <template is="dom-if" if="[[_equals(colorBy, 'structure')]]">
+ <div class="color-text">
+ color: same substructure<br>
+ gray: unique substructure
+ </div>
+ </template>
+ <template is="dom-if" if="[[_equals(colorBy, 'device')]]">
+ <div class="color-text">
+ <div class="deviceList">
+ <table>
+ <template is="dom-repeat" items="[[colorByParams.device]]">
+ <tr>
+ <td style$="[[_getBackgroundColor(item.color)]]">
+ <div class="colorBox"></div>
+ </td>
+ <td>
+ <div>[[item.device]]</div>
+ </td>
+ </tr>
+ </template>
+ </table>
+ </div>
+ <br>
+ gray: unknown device
+ </div>
+ </template>
+ </div>
+ <div class="legend-holder">
+ <table>
+ <tbody><tr>
+ <td><div class="title">Graph</div></td>
+ <td>(* = expandable)</td>
+ </tr>
+ <tr>
+ <td>
+ <svg class="icon">
+ <rect transform="translate(3, 1)" height="14" width="35" rx="5" ry="5"></rect>
+ </svg>
+ </td>
+ <td>Namespace<span class="gray">*</span></td>
+ </tr>
+ <tr>
+ <td>
+ <svg class="icon" preserveAspectRatio="xMinYMid meet" viewBox="0 0 10 10">
+ <use xlink:href="#op-node-stamp" fill="white" stroke="#ccc" x="9.5" y="6"></use>
+ </svg>
+ </td>
+ <td>OpNode</td>
+ </tr>
+ <tr>
+ <td>
+ <svg class="icon" height="15px" preserveAspectRatio="xMinYMid meet" viewBox="0 0 12 12">
+ <use xlink:href="#op-series-horizontal-stamp" fill="white" stroke="#ccc" x="2" y="2"></use>
+ </svg>
+ </td>
+ <td>Unconnected series<span class="gray">*</span></td>
+ </tr>
+ <tr>
+ <td>
+ <svg class="icon" height="15px" preserveAspectRatio="xMinYMid meet" viewBox="0 0 15 15">
+ <use xlink:href="#op-series-vertical-stamp" fill="white" stroke="#ccc" x="2" y="2"></use>
+ </svg>
+ </td>
+ <td>Connected series<span class="gray">*</span></td>
+ </tr>
+ <tr>
+ <td>
+ <svg class="icon">
+ <circle fill="white" stroke="#848484" cx="10" cy="10" r="5"></circle>
+ </svg>
+ </td>
+ <td>Constant</td>
+ </tr>
+ <tr>
+ <td>
+ <svg class="image-icon">
+ <image id="summary-icon" width="24" height="24" x="0" y="0" class="image-icon"></image>
+ </svg>
+ </td>
+ <td>Summary</td>
+ </tr>
+ <tr>
+ <td>
+ <svg class="icon" height="15px" preserveAspectRatio="xMinYMid meet" viewBox="0 0 15 15">
+ <defs>
+ <marker id="arrowhead-legend" fill="#bbb" markerWidth="10" markerHeight="10" refX="9" refY="5" orient="auto">
+ <path d="M 0,0 L 10,5 L 0,10 C 3,7 3,3 0,0"></path>
+ </marker>
+ <marker id="ref-arrowhead-legend" fill="#bbb" markerWidth="10" markerHeight="10" refX="1" refY="5" orient="auto">
+ <path d="M 10,0 L 0,5 L 10,10 C 7,7 7,3 10,0"></path>
+ </marker>
+ </defs>
+ <path marker-end="url(#arrowhead-legend)" stroke="#bbb" d="M2 9 l 23 0" stroke-linecap="round"></path>
+ </svg>
+ </td>
+ <td>Dataflow edge</td>
+ </tr>
+ <tr>
+ <td>
+ <svg class="icon" height="15px" preserveAspectRatio="xMinYMid meet" viewBox="0 0 15 15">
+ <path marker-end="url(#arrowhead-legend)" stroke="#bbb" d="M2 9 l 23 0" stroke-linecap="round" stroke-dasharray="2, 2"></path>
+ </svg>
+ </td>
+ <td>Control dependency edge</td>
+ </tr>
+ <tr>
+ <td>
+ <svg class="icon" height="15px" preserveAspectRatio="xMinYMid meet" viewBox="0 0 15 15">
+ <path marker-start="url(#ref-arrowhead-legend)" marker-end="url(#arrowhead-legend)" stroke="#bbb" d="M2 9 l 23 0" stroke-linecap="round"></path>
+ </svg>
+ </td>
+ <td>Reference edge</td>
+ </tr>
+ </tbody></table>
+ </div>
+ </div>
+</template>
+<script>
+(function() { // Private scope.
+Polymer({
+ is: 'tf-graph-controls',
+ ready: function() {
+ // Set the url to download the summary icon.
+ d3.select(this.$['summary-icon'])
+ .attr('xlink:href', this.resolveUrl('../../lib/svg/summary-icon.svg'));
+ },
+ properties: {
+ // Public API.
+ hasStats: {
+ type: Boolean
+ },
+ colorBy: {
+ type: String,
+ notify: true,
+ computed: '_getColorBy(_colorByIndex)'
+ },
+ colorByParams: Object,
+ datasets: {
+ type: Array,
+ observer: '_datasetsChanged'
+ },
+ selectedDataset: {
+ type: Number,
+ notify: true,
+ value: 0,
+ },
+ selectedFile: {
+ type: Object,
+ notify: true
+ },
+ // Private API.
+ _colorByIndex: {
+ type: Number,
+ value: 0 // Defaults to 'structure'.
+ },
+ _currentGradientParams: {
+ type: Object,
+ computed: '_getCurrentGradientParams(colorByParams, colorBy)'
+ }
+ },
+ _getColorBy: function(colorByIndex) {
+ return ["structure", "device", "compute_time", "memory"][colorByIndex];
+ },
+ _getBackgroundColor: function(color) {
+ return 'background-color:' + color;
+ },
+ fit: function() {
+ document.querySelector('#scene').fit();
+ },
+ _isGradientColoring: function(colorBy) {
+ return ["compute_time", "memory"].indexOf(colorBy) !== -1;
+ },
+ _equals: function(a, b) {
+ return a === b;
+ },
+ _getCurrentGradientParams: function(colorByParams, colorBy) {
+ if (!this._isGradientColoring(colorBy)) {
+ return;
+ }
+ var params = colorByParams[colorBy];
+ var minValue = params.minValue;
+ var maxValue = params.maxValue;
+ if (colorBy === 'memory') {
+ minValue = convertToHumanReadable(minValue, MEMORY_UNITS);
+ maxValue = convertToHumanReadable(maxValue, MEMORY_UNITS);
+ } else if (colorBy === 'compute_time') {
+ minValue = convertToHumanReadable(minValue, TIME_UNITS);
+ maxValue = convertToHumanReadable(maxValue, TIME_UNITS);
+ }
+ return {
+ minValue: minValue,
+ maxValue: maxValue,
+ startColor: params.startColor,
+ endColor: params.endColor
+ };
+ },
+ _updateFileInput: function(e) {
+ this.set('selectedFile', e);
+ },
+ _datasetsChanged: function(newDatasets, oldDatasets) {
+ if (oldDatasets != null || this.selected == null) {
+ // Select the first dataset by default.
+ this.set('selectedDataset', 0);
+ }
+ },
+ _getFile: function() {
+ this.$.file.click();
+ }
+});
+
+// Private methods.
+var MEMORY_UNITS = [
+ // Atomic unit.
+ {symbol: 'B'},
+ // numUnits specifies how many previous units this unit contains.
+ {symbol: 'KB', numUnits: 1024},
+ {symbol: 'MB', numUnits: 1024},
+ {symbol: 'GB', numUnits: 1024},
+ {symbol: 'TB', numUnits: 1024},
+ {symbol: 'PB', numUnits: 1024}
+];
+var TIME_UNITS = [
+ // Atomic unit. Finest granularity in TensorFlow stat collection.
+ {symbol: 'µs'},
+ // numUnits specifies how many previous units this unit contains.
+ {symbol: 'ms', numUnits: 1000},
+ {symbol: 's', numUnits: 1000},
+ {symbol: 'min', numUnits: 60},
+ {symbol: 'hr', numUnits: 60},
+ {symbol: 'days', numUnits: 24}
+];
+
+/**
+ * Returns the human readable version of the unit.
+ * (e.g. 1.35 GB, 23 MB, 34 ms, 6.53 min etc).
+ */
+function convertToHumanReadable(value, units, unitIndex) {
+ unitIndex = unitIndex == null ? 0 : unitIndex;
+ if (unitIndex + 1 < units.length && value >= units[unitIndex + 1].numUnits) {
+ return convertToHumanReadable(value / units[unitIndex + 1].numUnits,
+ units, unitIndex + 1);
+ }
+ // toPrecision() has the tendency to return a number in scientific
+ // notation and (number - 0) brings it back to normal notation.
+ return (value.toPrecision(3) - 0) + ' ' + units[unitIndex].symbol;
+}
+})(); // Closing private scope.
+</script>
+</dom-module>
+<dom-module id="tf-graph-dashboard" assetpath="../components/tf-graph-dashboard/">
+<template>
+<div id="plumbing">
+ <tf-url-generator out-runs-url="{{_runsUrl}}" out-graph-url-generator="{{_graphUrlGen}}" id="urlGenerator"></tf-url-generator>
+ <tf-run-generator id="runGenerator" url="[[_runsUrl]]" out-runs-with-graph="{{_runsWithGraph}}"></tf-run-generator>
+</div>
+<template is="dom-if" if="[[_datasetsEmpty(_datasets)]]">
+<div class="warning">
+ <p>
+ No graph definition files were found.
+ </p>
+ <p>
+ To store a graph, create a
+ <code>tf.python.training.summary_io.SummaryWriter</code>
+ and pass the graph either via the constructor, or by calling its
+ <code>add_graph()</code> method.
+ </p>
+</div>
+</template>
+<template is="dom-if" if="[[!_datasetsEmpty(_datasets)]]">
+<tf-dashboard-layout>
+<div class="sidebar">
+ <tf-graph-controls id="controls" color-by-params="[[_colorByParams]]" has-stats="[[_hasStats]]" color-by="{{_colorBy}}" ,="" datasets="[[_datasets]]" selected-dataset="{{_selectedDataset}}" selected-file="{{_selectedFile}}"></tf-graph-controls>
+ <tf-graph-loader id="loader" datasets="[[_datasets]]" ,="" selected-dataset="[[_selectedDataset]]" selected-file="[[_selectedFile]]" out-graph-hierarchy="{{_graphHierarchy}}" out-graph="{{_graph}}" out-graph-name="{{_graphName}}" has-stats="{{_hasStats}}" progress="{{_progress}}"></tf-graph-loader>
+</div>
+<div class="center">
+ <tf-graph-board id="graphboard" graph-hierarchy="[[_graphHierarchy]]" graph="[[_graph]]" has-stats="[[_hasStats]]" graph-name="[[_graphName]]" progress="[[_progress]]" color-by="[[_colorBy]]" color-by-params="{{_colorByParams}}">
+ </tf-graph-board>
+</div>
+</tf-dashboard-layout></template>
+<style>
+
+:host /deep/ {
+ font-family: 'Roboto', sans-serif;
+}
+
+.center {
+ height: 100%;
+}
+
+</style>
+<style include="warning-style"></style>
+</template>
+</dom-module>
+
+<script>
+(function() {
+Polymer({
+ is: 'tf-graph-dashboard',
+ properties: {
+ _runsWithGraph: Array,
+ _datasets: {
+ type: Object,
+ computed: '_getDatasets(_runsWithGraph, _graphUrlGen)'
+ }
+ },
+ _getDatasets: function(runsWithGraph, graphUrlGen) {
+ return _.map(runsWithGraph, function(runName) {
+ return {
+ name: runName,
+ path: graphUrlGen(runName)
+ };
+ });
+ },
+ _datasetsEmpty: function(datasets) {
+ return !datasets || !datasets.length;
+ }
+});
+})();
+</script>
+</div><dom-module id="tf-tensorboard">
+ <template>
+ <paper-header-panel>
+ <paper-toolbar id="toolbar">
+ <div id="toolbar-content">
+ <div class="toolbar-title">
+ TensorBoard
+ </div>
+ <div class="right-buttons">
+ <paper-button class="link-button" on-click="chooseEvents" active$="[[eventDashboard(mode)]]" noink="">Events</paper-button>
+ <paper-button class="link-button" on-click="chooseImages" active$="[[imageDashboard(mode)]]" noink="">Images</paper-button>
+ <paper-button class="link-button" on-click="chooseGraphs" active$="[[graphDashboard(mode)]]" noink="">Graph</paper-button>
+ <paper-button class="link-button" on-click="chooseHistograms" active$="[[histogramDashboard(mode)]]" noink="">Histograms</paper-button>
+ </div>
+ </div>
+ </paper-toolbar>
+ <div id="content" class="fit">
+ <template is="dom-if" if="[[eventDashboard(mode)]]">
+ <tf-event-dashboard id="eventDash"></tf-event-dashboard>
+ </template>
+
+ <template is="dom-if" if="[[imageDashboard(mode)]]">
+ <tf-image-dashboard id="imageDash"></tf-image-dashboard>
+ </template>
+
+ <template is="dom-if" if="[[graphDashboard(mode)]]">
+ <tf-graph-dashboard id="graphDash"></tf-graph-dashboard>
+ </template>
+
+ <template is="dom-if" if="[[histogramDashboard(mode)]]">
+ <tf-histogram-dashboard id="histogramDash"></tf-histogram-dashboard>
+ </template>
+ </div>
+ </paper-header-panel>
+ <style>
+ #toolbar {
+ background-color: var(--tb-orange-strong);
+ background-image: radial-gradient(ellipse, var(--tb-orange-weak), var(--tb-orange-strong));
+ }
+ #toolbar-content {
+ width: 100%;
+ display: flex;
+ flex-direction: row;
+ justify-content: space-between;
+ align-items: center;
+ }
+ .toolbar-title {
+ font-size: 30px;
+ }
+ #content {
+ height: 100%;
+ }
+ .link-button {
+ height: 30px;
+ }
+ [active] {
+ font-weight: bold;
+ }
+ :host {
+ height: 100%;
+ display: block;
+ }
+ </style>
+ </template>
+ <script>
+ Polymer({
+ is: "tf-tensorboard",
+ properties: {
+ mode: {
+ type: String,
+ value: "events",
+ },
+ },
+ chooseEvents: function() {
+ this.mode = "events";
+ },
+ chooseImages: function() {
+ this.mode = "images";
+ },
+ chooseGraphs: function() {
+ this.mode = "graphs";
+ },
+ chooseHistograms: function() {
+ this.mode = "histograms";
+ },
+ eventDashboard: function(mode) {
+ return mode === "events";
+ },
+ imageDashboard: function(mode) {
+ return mode === "images";
+ },
+ graphDashboard: function(mode) {
+ return mode === "graphs";
+ },
+ histogramDashboard: function(mode) {
+ return mode === "histograms";
+ }
+ });
+ </script>
+</dom-module>
+</body></html> \ No newline at end of file
diff --git a/tensorflow/tensorboard/float_wrapper.py b/tensorflow/tensorboard/float_wrapper.py
new file mode 100644
index 0000000000..9fe45d9070
--- /dev/null
+++ b/tensorflow/tensorboard/float_wrapper.py
@@ -0,0 +1,30 @@
+"""A module providing a function for serializing JSON values with Infinity.
+
+Python provides no way to override how json.dumps serializes
+Infinity/-Infinity/NaN; if allow_nan is true, it encodes them as
+Infinity/-Infinity/NaN, in violation of the JSON spec and in violation of what
+JSON.parse accepts. If it's false, it throws a ValueError, Neither subclassing
+JSONEncoder nor passing a function in the |default| keyword argument overrides
+this.
+"""
+
+import math
+
+
+def WrapSpecialFloats(obj):
+ """Replaces all instances of Infinity/-Infinity/NaN with strings."""
+ if obj == float('inf'):
+ return 'Infinity'
+ elif obj == float('-inf'):
+ return '-Infinity'
+ elif isinstance(obj, float) and math.isnan(obj):
+ return 'NaN'
+ elif isinstance(obj, list) or isinstance(obj, tuple):
+ return map(WrapSpecialFloats, obj)
+ elif isinstance(obj, dict):
+ return {
+ WrapSpecialFloats(k): WrapSpecialFloats(v)
+ for k, v in obj.items()
+ }
+ else:
+ return obj
diff --git a/tensorflow/tensorboard/float_wrapper_test.py b/tensorflow/tensorboard/float_wrapper_test.py
new file mode 100644
index 0000000000..5f6594733c
--- /dev/null
+++ b/tensorflow/tensorboard/float_wrapper_test.py
@@ -0,0 +1,38 @@
+import tensorflow.python.platform
+
+from tensorflow.python.platform import googletest
+from tensorflow.tensorboard import float_wrapper
+
+_INFINITY = float('inf')
+
+
+class FloatWrapperTest(googletest.TestCase):
+
+ def _assertWrapsAs(self, to_wrap, expected):
+ """Asserts that |to_wrap| becomes |expected| when wrapped."""
+ actual = float_wrapper.WrapSpecialFloats(to_wrap)
+ for a, e in zip(actual, expected):
+ self.assertEqual(e, a)
+
+ def testWrapsPrimitives(self):
+ self._assertWrapsAs(_INFINITY, 'Infinity')
+ self._assertWrapsAs(-_INFINITY, '-Infinity')
+ self._assertWrapsAs(float('nan'), 'NaN')
+
+ def testWrapsObjectValues(self):
+ self._assertWrapsAs({'x': _INFINITY}, {'x': 'Infinity'})
+
+ def testWrapsObjectKeys(self):
+ self._assertWrapsAs({_INFINITY: 'foo'}, {'Infinity': 'foo'})
+
+ def testWrapsInListsAndTuples(self):
+ self._assertWrapsAs([_INFINITY], ['Infinity'])
+ # map() returns a list even if the argument is a tuple.
+ self._assertWrapsAs((_INFINITY,), ['Infinity',])
+
+ def testWrapsRecursively(self):
+ self._assertWrapsAs({'x': [_INFINITY]}, {'x': ['Infinity']})
+
+
+if __name__ == '__main__':
+ googletest.main()
diff --git a/tensorflow/tensorboard/gulpfile.js b/tensorflow/tensorboard/gulpfile.js
new file mode 100644
index 0000000000..34b567d62a
--- /dev/null
+++ b/tensorflow/tensorboard/gulpfile.js
@@ -0,0 +1,170 @@
+// Based on the gulpfile provided by angular team
+// (https://github.com/angular/ts2dart/blob/master/gulpfile.js)
+var gulp = require('gulp');
+var ts = require('gulp-typescript');
+var typescript = require('typescript');
+var gutil = require('gulp-util');
+var mochaPhantomJS = require('gulp-mocha-phantomjs');
+var tslint = require('gulp-tslint');
+var server = require('gulp-server-livereload');
+var concat = require('gulp-concat');
+var merge = require('merge2');
+var gulpFilter = require('gulp-filter');
+var vulcanize = require('gulp-vulcanize');
+var rename = require('gulp-rename');
+var minimist = require('minimist');
+var replace = require('gulp-replace');
+
+var options = minimist(process.argv.slice(2), {
+ default: {
+ p: 8000 // port for gulp server
+ }
+});
+
+var tsProject = ts.createProject('tsconfig.json', {
+ typescript: typescript,
+ noExternalResolve: true, // opt-in for faster compilation!
+});
+
+var hasError;
+var failOnError = true; // Is set to false when watching.
+
+var onError = function(err) {
+ hasError = true;
+ gutil.log(err.message);
+ if (failOnError) {
+ process.exit(1);
+ }
+};
+
+gulp.task('compile.all', function() {
+ hasError = false;
+ var isComponent = gulpFilter(['components/**/*.js', '!components/**/test/*']);
+ var isApp = gulpFilter(['app/**/*.js']);
+ var isTest = gulpFilter(['test/**/*', 'components/**/test/*']);
+
+ var srcs = ['components/**/*.ts', 'test/**/*.ts', 'app/**/*.ts',
+ 'typings/**/*.d.ts', 'bower_components/**/*.d.ts'];
+
+ var tsResult = gulp.src(srcs, {base: '.'})
+ .pipe(ts(tsProject))
+ .on('error', onError);
+ return merge([
+ // Send concatenated component code to build/component
+ tsResult.js
+ .pipe(isComponent)
+ .pipe(concat('components.js'))
+ .pipe(gulp.dest('build')),
+
+ // Duplicate all component code to live next to the ts file
+ // (makes polymer imports very clean)
+ tsResult.js
+ .pipe(isComponent)
+ .pipe(gulp.dest('.')),
+
+ tsResult.js
+ .pipe(isApp)
+ .pipe(gulp.dest('.')),
+
+ // Send all test code to build/test.js
+ tsResult.js
+ .pipe(isTest)
+ .pipe(concat('test.js'))
+ .pipe(gulp.dest('build')),
+
+ // Create a unified defintions file at build/all.d.ts
+ tsResult.dts
+ .pipe(concat('all.d.ts'))
+ .pipe(gulp.dest('build')),
+ ]);
+});
+
+var tslintTask = function(strict) {
+ return function(done) {
+ if (hasError) {
+ done();
+ return;
+ }
+ return gulp.src(['components/**/*.ts', 'test/**/*.ts'])
+ .pipe(tslint())
+ .pipe(tslint.report('verbose', {
+ emitError: strict,
+ }));
+ };
+};
+
+// Since constructs like console.log are disabled by tslint
+// but very useful while developing, create a "permissive"
+// version of tslint that warns without erroring, for the
+// watch task.
+gulp.task('tslint-permissive', [], tslintTask(false));
+gulp.task('tslint-strict', [], tslintTask(true));
+
+
+gulp.task('run-tests', ['compile.all'], function(done) {
+ if (hasError) {
+ done();
+ return;
+ }
+ return gulp.src('tests.html')
+ .pipe(mochaPhantomJS({reporter: 'dot'}));
+});
+
+gulp.task('test', ['run-tests', 'tslint-strict']);
+gulp.task('watch', ['run-tests', 'tslint-permissive'], function() {
+ failOnError = false;
+ // Avoid watching generated .d.ts in the build (aka output) directory.
+ return gulp.watch(['test/**/*.ts', 'components/**/*.ts'],
+ {ignoreInitial: true},
+ ['run-tests', 'tslint-permissive']);
+});
+
+gulp.task('server', function() {
+ gulp.src('.')
+ .pipe(server({
+ host: '0.0.0.0',
+ port: options.p,
+ livereload: {
+ enable: true,
+ port: 27729 + options.p
+ },
+ directoryListing: true,
+ }));
+});
+
+
+var linkRegex = /<link rel="[^"]*" (type="[^"]*" )?href=".*bower_components[^"]*">\n/g;
+var scriptRegex = /<script src=".*bower_components[^"]*"><\/script>\n/g;
+gulp.task('vulcanize', ['compile.all', 'tslint-strict'], function() {
+ gulp.src('app/tf-tensorboard.html')
+ .pipe(vulcanize({
+ inlineScripts: true,
+ inlineCss: true,
+ stripComments: true,
+ excludes: ['/bower_components/'],
+ }))
+ // TODO(danmane): Remove this worrysome brittleness when vulcanize
+ // fixes https://github.com/Polymer/vulcanize/issues/273
+ .pipe(replace(linkRegex, ''))
+ .pipe(replace(scriptRegex, ''))
+ .pipe(gulp.dest('dist'));
+
+ gulp.src('app/index.html')
+ .pipe(vulcanize({
+ inlineScripts: true,
+ inlineCss: true,
+ stripComments: true,
+ }))
+ .pipe(gulp.dest('dist'));
+
+ gulp.src('app/tf-tensorboard-demo.html')
+ .pipe(vulcanize({
+ inlineScripts: true,
+ inlineCss: true,
+ stripComments: true,
+ }))
+ .pipe(gulp.dest('dist'));
+});
+
+gulp.task('serve', ['server']); // alias
+gulp.task('default', ['watch']);
diff --git a/tensorflow/tensorboard/http_api.md b/tensorflow/tensorboard/http_api.md
new file mode 100644
index 0000000000..953c020692
--- /dev/null
+++ b/tensorflow/tensorboard/http_api.md
@@ -0,0 +1,210 @@
+# Tensorboard client-server HTTP API
+
+## Runs, Tags, and Tag Types
+
+TensorBoard data is organized around the concept of a `run`, which represents
+all the related data thrown off by a single execution of TensorFlow, a `tag`,
+which groups values of data that come from the same source within a TensorFlow
+run, and `tag types`, which are our way of distinguishing different types of
+data that have fundamentally different representations and should be processed
+on different code paths. For example, a "train" run may have a `scalars`
+tag that represents the learning rate, another `scalars` tag that
+represents the value of the objective function, a `histograms` tag that reveals
+information on weights in a particular layer over time, and an `images` tag that
+shows input images flowing into the system. The "eval" run might have an
+entirely different set of tag names, or some duplicated tag names.
+
+The currently supported tag types are `scalars`, `images`, `histograms` and
+`graph`. Each tag type corresponds to a route (documented below) for
+retrieving tag data of that type.
+
+All of the data provided comes from TensorFlow events files ('\*.tfevents\*'),
+which are written using the SummaryWriter class
+(tensorflow/python/training/summary_writer.py), and the data is generated by
+summary ops (tensorflow/python/ops/summary_ops.py). The `scalars` come from
+the `ScalarSummary` op, the `histograms` from the `HistogramSummary`, and the
+`images` from `ImageSummary`. The tag type `graph` is special in that it is not
+a collection of tags of that type, but a boolean denoting if there is a graph
+definition associated with the run. The tag is provided to the summary
+op (usually as a constant).
+
+## `/runs`
+
+Returns a dictionary mapping from `run name` (quoted string) to dictionaries
+mapping from all available tagTypes to a list of tags of that type available for
+the run. Think of this as a comprehensive index of all of the data available
+from the TensorBoard server. Here is an example:
+
+{
+ "train_run": {
+ "histograms": ["foo_histogram", "bar_histogram"],
+ "scalars": ["xent", "loss", "learning_rate"],
+ "images": ["input"],
+ "graph": true
+ },
+ "eval": {
+ "histograms": ["foo_histogram", "bar_histogram"],
+ "scalars": ["precision", "recall"],
+ "images": ["input"],
+ "graph": false
+ }
+}
+
+Note that the same tag may be present for many runs. It is not guaranteed that
+they will have the same meaning across runs. It is also not guaranteed that they
+will have the same tag type across different runs.
+
+## '/scalars?run=foo&tag=bar'
+
+Returns an array of event_accumulator.SimpleValueEvents ([wall_time, step,
+value]) for the given run and tag. wall_time is seconds since epoch.
+
+Example:
+[
+ [1443856985.705543, 1448, 0.7461960315704346], # wall_time, step, value
+ [1443857105.704628, 3438, 0.5427092909812927],
+ [1443857225.705133, 5417, 0.5457325577735901],
+ ...
+]
+
+If the format parameter is set to 'csv', the response will instead be in CSV
+format:
+
+ Wall time,step,value
+ 1443856985.705543,1448,0.7461960315704346
+ 1443857105.704628,3438,0.5427092909812927
+ 1443857225.705133,5417,0.5457325577735901
+
+
+## '/histograms?run=foo&tag=bar'
+
+Returns an array of event_accumulator.HistogramEvents ([wall_time, step,
+HistogramValue]) for the given run and tag. A HistogramValue is [min, max, num,
+sum, sum_squares, bucket_limit, bucket]. wall_time is seconds since epoch.
+
+Annotated Example: (note - real data is higher precision)
+
+[
+ [
+ 1443871386.185149, # wall_time
+ 235166, # step
+ [
+ -0.66, # minimum value
+ 0.44, # maximum value
+ 8.0, # number of items in the histogram
+ -0.80, # sum of items in the histogram
+ 0.73, # sum of squares of items in the histogram
+ [-0.68, -0.62, -0.292, -0.26, -0.11, -0.10, -0.08, -0.07, -0.05,
+ -0.0525, -0.0434, -0.039, -0.029, -0.026, 0.42, 0.47, 1.8e+308],
+ # the right edge of each bucket
+ [0.0, 1.0, 0.0, 1.0, 0.0, 1.0, 0.0, 1.0, 0.0, 1.0, 0.0, 1.0, 0.0, 1.0, 0.0,
+ 1.0, 0.0] # the number of elements within each bucket
+ ]
+ ]
+ ]
+
+## '/compressedHistograms?run=foo&tag=bar'
+
+Returns an array of event_accumulator.CompressedHistogramEvents ([wall_time,
+step, CompressedHistogramValues]) for the given run and tag.
+
+CompressedHistogramValues is a list of namedtuples with each tuple specifying
+a basis point (bps) as well as an interpolated value of the histogram value
+at that basis point. A basis point is 1/100 of a percent.
+
+The current compression strategy is to choose basis points that correspond to
+the median and bands of 1SD, 2SD, and 3SDs around the median. Note that the
+current compression strategy does not work well for representing multimodal
+data -- this is something that will be improved in a later iteration.
+
+Annotated Example: (note - real data is higher precision)
+
+[
+ [
+ 1441154832.580509, # wall_time
+ 5, # step
+ [ [0, -3.67], # CompressedHistogramValue for 0th percentile
+ [2500, -4.19], # CompressedHistogramValue for 25th percentile
+ [5000, 6.29],
+ [7500, 1.64],
+ [10000, 3.67]
+ ]
+ ],
+ ...
+]
+
+## `/images?run=foo&tag=bar`
+
+Gets a sample of ImageMetadatas for the given run and tag.
+
+Returns an array of objects containing information about available images,
+crucially including the query parameter that may be used to retrieve that image.
+(See /individualImage for details.)
+
+For example:
+ {
+ "width": 28, # width in pixels
+ "height": 28, # height in pixels
+ "wall_time": 1440210599.246, # time in seconds since epoch
+ "step": 63702821, # number of steps that have passed
+ "query": "index=0&tagname=input%2Fimage%2F2&run=train"
+ # param for /individualImage
+ }
+
+## `/individualImage?{{query}}`
+
+Retrieves an individual image. The image query should not be generated by the
+frontend, but instead acquired from calling the /images route (the image
+metadata objects contain the query to use). The response is the image itself
+with mime-type 'image/png'.
+
+Note that the query is not guaranteed to always refer to the same image even
+within a single run, as images may be removed from the sampling reservoir and
+replaced with other images. (See Notes for details on the reservoir sampling.)
+
+An example call to this route would look like this:
+/individualImage?index=0&tagname=input%2Fimage%2F2&run=train
+
+## `/graph?run=foo`
+
+Returns the graph definition for the given run in gzipped pbtxt format. The
+graph is composed of a list of nodes, where each node is a specific TensorFlow
+operation which takes as inputs other nodes (operations).
+
+An example pbtxt response of graph with 3 nodes:
+node {
+ op: "Input"
+ name: "A"
+}
+node {
+ op: "Input"
+ name: "B"
+}
+node {
+ op: "MatMul"
+ name: "C"
+ input: "A"
+ input: "B"
+}
+
+## Notes
+
+All returned values, histograms, and images are returned in the order they were
+written by Tensorflow (which should correspond to increasing `wall_time` order,
+but may not necessarily correspond to increasing step count if the process had
+to restart from a previous checkpoint).
+
+The returned values may be downsampled using reservoir sampling, which is
+configurable by the TensorBoard server. When downsampling occurs, the server
+guarantees that different tags will all sample at the same sequence of indices,
+so that if if there are two tags `A` and `B` which are related so that `A[i] ~
+B[i]` for all `i`, then `D(A)[i] ~ D(B)[i]` for all `i`, where `D` represents
+the downsampling operation.
+
+The reservoir sampling puts an upper bound on the number of items that will be
+returned for a given run-tag combination, and guarantees that all items are
+equally likely to be in the final sample (ie it is a uniform distribution over
+the values), with the proviso that the most recent individual item is always
+included in the sample.
+
+The reservoir sizes are configurable on a per-tag type basis.
diff --git a/tensorflow/tensorboard/lib/css/global.css b/tensorflow/tensorboard/lib/css/global.css
new file mode 100644
index 0000000000..b3681d766f
--- /dev/null
+++ b/tensorflow/tensorboard/lib/css/global.css
@@ -0,0 +1,6 @@
+html,body {
+ margin: 0;
+ padding: 0;
+ height: 100%;
+ font-family: "RobotoDraft","Roboto",sans-serif;
+}
diff --git a/tensorflow/tensorboard/lib/svg/summary-icon.svg b/tensorflow/tensorboard/lib/svg/summary-icon.svg
new file mode 100644
index 0000000000..f66c99580c
--- /dev/null
+++ b/tensorflow/tensorboard/lib/svg/summary-icon.svg
@@ -0,0 +1,3 @@
+<svg fill="#848484" height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg">
+ <path d="M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zM9 17H7v-7h2v7zm4 0h-2V7h2v10zm4 0h-2v-4h2v4z"/>
+</svg>
diff --git a/tensorflow/tensorboard/package.json b/tensorflow/tensorboard/package.json
new file mode 100644
index 0000000000..3c78a5831c
--- /dev/null
+++ b/tensorflow/tensorboard/package.json
@@ -0,0 +1,34 @@
+{
+ "name": "tensorflow-vis",
+ "version": "0.0.0",
+ "description": "Visualizers for TensorFlow",
+ "scripts": {
+ "test": "gulp test"
+ },
+ "keywords": [
+ "tensorflow"
+ ],
+ "author": "Google",
+ "license": "Apache-2.0",
+ "devDependencies": {
+ "gulp": "~3.9.0",
+ "gulp-typescript": "~2.8.0",
+ "tsd": "~0.6.3",
+ "chai": "~3.2.0",
+ "typescript": "~1.5.3",
+ "gulp-cli": "~0.3.0",
+ "gulp-util": "~3.0.6",
+ "gulp-mocha-phantomjs": "~0.8.0",
+ "mocha": "~2.2.5",
+ "gulp-tslint": "~3.1.1-beta",
+ "gulp-server-livereload": "~1.4.0",
+ "gulp-concat": "~2.6.0",
+ "merge2": "~0.3.6",
+ "gulp-filter": "~3.0.0",
+ "gulp-rename": "~1.2.2",
+ "vulcanize": "~1.14.0",
+ "gulp-vulcanize": "~6.0.1",
+ "minimist": "~1.2.0",
+ "gulp-replace": "~0.5.4"
+ }
+}
diff --git a/tensorflow/tensorboard/tensorboard.py b/tensorflow/tensorboard/tensorboard.py
new file mode 100644
index 0000000000..dcbc50401c
--- /dev/null
+++ b/tensorflow/tensorboard/tensorboard.py
@@ -0,0 +1,139 @@
+"""Serve TensorFlow summary data to a web frontend.
+
+This is a simple web server to proxy data from the event_loader to the web, and
+serve static web files.
+"""
+
+import BaseHTTPServer
+import functools
+import os
+import socket
+import SocketServer
+
+import tensorflow.python.platform
+
+from tensorflow.python.platform import app
+from tensorflow.python.platform import flags
+from tensorflow.python.platform import logging
+from tensorflow.python.platform import status_bar
+from tensorflow.python.summary import event_accumulator
+from tensorflow.python.summary import event_multiplexer
+from tensorflow.tensorboard import tensorboard_handler
+
+flags.DEFINE_string('logdir', None, """
+logdir specifies where TensorBoard will look to find TensorFlow event files
+that it can display. In the simplest case, logdir is a directory containing
+tfevents files. TensorBoard also supports comparing multiple TensorFlow
+executions: to do this, you can use directory whose subdirectories contain
+tfevents files, as in the following example:
+
+foo/bar/logdir/
+foo/bar/logdir/mnist_1/events.out.tfevents.1444088766
+foo/bar/logdir/mnist_2/events.out.tfevents.1444090064
+
+You may also pass a comma seperated list of log directories, and you can
+assign names to individual log directories by putting a colon between the name
+and the path, as in
+
+tensorboard --logdir=name1:/path/to/logs/1,name2:/path/to/logs/2
+""")
+flags.DEFINE_boolean('debug', False, 'Whether to run the app in debug mode. '
+ 'This increases log verbosity to DEBUG.')
+flags.DEFINE_string('host', '0.0.0.0', 'What host to listen to. Defaults to '
+ 'allowing remote access, set to 127.0.0.1 to serve only on '
+ 'localhost.')
+flags.DEFINE_integer('port', 6006, 'What port to serve TensorBoard on.')
+
+FLAGS = flags.FLAGS
+
+# How many elements to store per tag, by tag type
+TENSORBOARD_SIZE_GUIDANCE = {
+ event_accumulator.COMPRESSED_HISTOGRAMS: 500,
+ event_accumulator.IMAGES: 4,
+ event_accumulator.SCALARS: 10000,
+ event_accumulator.HISTOGRAMS: 1,
+}
+
+
+def ParseEventFilesFlag(flag_value):
+ """Parses the logdir flag into a map from paths to run group names.
+
+ The events files flag format is a comma-separated list of path specifications.
+ A path specification either looks like 'group_name:/path/to/directory' or
+ '/path/to/directory'; in the latter case, the group is unnamed. Group names
+ cannot start with a forward slash: /foo:bar/baz will be interpreted as a
+ spec with no name and path '/foo:bar/baz'.
+
+ Globs are not supported.
+
+ Args:
+ flag_value: A comma-separated list of run specifications.
+ Returns:
+ A dict mapping directory paths to names like {'/path/to/directory': 'name'}.
+ Groups without an explicit name are named after their path. If flag_value
+ is None, returns an empty dict, which is helpful for testing things that
+ don't require any valid runs.
+ """
+ files = {}
+ if flag_value is None:
+ return files
+ for specification in flag_value.split(','):
+ # If the spec looks like /foo:bar/baz, then we assume it's a path with a
+ # colon.
+ if ':' in specification and specification[0] != '/':
+ # We split at most once so run_name:/path:with/a/colon will work.
+ run_name, path = specification.split(':', 1)
+ else:
+ run_name = None
+ path = specification
+ files[path] = run_name
+ return files
+
+
+class ThreadedHTTPServer(SocketServer.ThreadingMixIn,
+ BaseHTTPServer.HTTPServer):
+ """A threaded HTTP server."""
+ daemon = True
+
+
+def main(unused_argv=None):
+ # Change current working directory to tensorflow/'s parent directory.
+ server_root = os.path.join(os.path.dirname(__file__),
+ os.pardir, os.pardir)
+ os.chdir(server_root)
+
+ if FLAGS.debug:
+ logging.set_verbosity(logging.DEBUG)
+
+ if not FLAGS.logdir:
+ logging.error('A logdir must be specified. Run `tensorboard --help` for '
+ 'details and examples.')
+ return -1
+
+ if FLAGS.debug:
+ logging.info('Starting TensorBoard in directory %s' % os.getcwd())
+
+ path_to_run = ParseEventFilesFlag(FLAGS.logdir)
+ multiplexer = event_multiplexer.AutoloadingMultiplexer(
+ path_to_run=path_to_run, interval_secs=60,
+ size_guidance=TENSORBOARD_SIZE_GUIDANCE)
+
+ multiplexer.AutoUpdate(interval=30)
+
+ factory = functools.partial(tensorboard_handler.TensorboardHandler,
+ multiplexer)
+ try:
+ server = ThreadedHTTPServer((FLAGS.host, FLAGS.port), factory)
+ except socket.error:
+ logging.error('Tried to connect to port %d, but that address is in use.' %
+ FLAGS.port)
+ return -2
+
+ status_bar.SetupStatusBarInsideGoogle('TensorBoard', FLAGS.port)
+ print 'Starting TensorBoard on port %d' % FLAGS.port
+ print '(You can navigate to http://localhost:%d)' % FLAGS.port
+ server.serve_forever()
+
+
+if __name__ == '__main__':
+ app.run()
diff --git a/tensorflow/tensorboard/tensorboard_handler.py b/tensorflow/tensorboard/tensorboard_handler.py
new file mode 100644
index 0000000000..cd50f43069
--- /dev/null
+++ b/tensorflow/tensorboard/tensorboard_handler.py
@@ -0,0 +1,379 @@
+"""TensorBoard server handler logic.
+
+TensorboardHandler contains all the logic for serving static files off of disk
+and for handling the API calls to endpoints like /tags that require information
+about loaded events.
+"""
+
+import BaseHTTPServer
+import csv
+import gzip
+import imghdr
+import json
+import mimetypes
+import os
+import StringIO
+import urllib
+import urlparse
+
+from google.protobuf import text_format
+import tensorflow.python.platform
+
+from tensorflow.python.platform import logging
+from tensorflow.python.platform import resource_loader
+from tensorflow.python.summary import event_accumulator
+from tensorflow.tensorboard import float_wrapper
+
+RUNS_ROUTE = '/runs'
+SCALARS_ROUTE = '/' + event_accumulator.SCALARS
+IMAGES_ROUTE = '/' + event_accumulator.IMAGES
+HISTOGRAMS_ROUTE = '/' + event_accumulator.HISTOGRAMS
+COMPRESSED_HISTOGRAMS_ROUTE = '/' + event_accumulator.COMPRESSED_HISTOGRAMS
+INDIVIDUAL_IMAGE_ROUTE = '/individualImage'
+GRAPH_ROUTE = '/' + event_accumulator.GRAPH
+
+_IMGHDR_TO_MIMETYPE = {
+ 'bmp': 'image/bmp',
+ 'gif': 'image/gif',
+ 'jpeg': 'image/jpeg',
+ 'png': 'image/png'
+}
+_DEFAULT_IMAGE_MIMETYPE = 'application/octet-stream'
+
+
+def _content_type_for_image(encoded_image_string):
+ image_type = imghdr.what(None, encoded_image_string)
+ return _IMGHDR_TO_MIMETYPE.get(image_type, _DEFAULT_IMAGE_MIMETYPE)
+
+
+class _OutputFormat(object):
+ """An enum used to list the valid output formats for API calls.
+
+ Not all API calls support all formats (for example, only scalars and
+ compressed histograms support CSV).
+ """
+ JSON = 'json'
+ CSV = 'csv'
+
+
+class TensorboardHandler(BaseHTTPServer.BaseHTTPRequestHandler):
+ """Handler class for use with BaseHTTPServer.HTTPServer.
+
+ This is essentially a thin wrapper around calls to an EventMultiplexer object
+ as well as serving files off disk.
+ """
+
+ def __init__(self, multiplexer, *args):
+ self._multiplexer = multiplexer
+ BaseHTTPServer.BaseHTTPRequestHandler.__init__(self, *args)
+
+ # We use underscore_names for consistency with inherited methods.
+
+ def _image_response_for_run(self, run_images, run, tag):
+ """Builds a JSON-serializable object with information about run_images.
+
+ Args:
+ run_images: A list of event_accumulator.ImageValueEvent objects.
+ run: The name of the run.
+ tag: The name of the tag the images all belong to.
+
+ Returns:
+ A list of dictionaries containing the wall time, step, URL, width, and
+ height for each image.
+ """
+ response = []
+ for index, run_image in enumerate(run_images):
+ response.append({
+ 'wall_time': run_image.wall_time,
+ 'step': run_image.step,
+ # We include the size so that the frontend can add that to the <img>
+ # tag so that the page layout doesn't change when the image loads.
+ 'width': run_image.width,
+ 'height': run_image.height,
+ 'query': self._query_for_individual_image(run, tag, index)
+ })
+ return response
+
+ def _path_is_safe(self, path):
+ """Check path is safe (stays within current directory).
+
+ This is for preventing directory-traversal attacks.
+
+ Args:
+ path: The path to check for safety.
+
+ Returns:
+ True if the given path stays within the current directory, and false
+ if it would escape to a higher directory. E.g. _path_is_safe('index.html')
+ returns true, but _path_is_safe('../../../etc/password') returns false.
+ """
+ base = os.path.abspath(os.curdir)
+ absolute_path = os.path.abspath(path)
+ prefix = os.path.commonprefix([base, absolute_path])
+ return prefix == base
+
+ def _send_gzip_response(self, content, content_type, code=200):
+ """Writes the given content as gzip response using the given content type.
+
+ Args:
+ content: The content to respond with.
+ content_type: The mime type of the content.
+ code: The numeric HTTP status code to use.
+ """
+ out = StringIO.StringIO()
+ f = gzip.GzipFile(fileobj=out, mode='w')
+ f.write(content)
+ f.close()
+ gzip_content = out.getvalue()
+ self.send_response(code)
+ self.send_header('Content-Type', content_type)
+ self.send_header('Content-Length', len(gzip_content))
+ self.send_header('Content-Encoding', 'gzip')
+ self.end_headers()
+ self.wfile.write(gzip_content)
+
+ def _send_json_response(self, obj, code=200):
+ """Writes out the given object as JSON using the given HTTP status code.
+
+ This also replaces special float values with stringified versions.
+
+ Args:
+ obj: The object to respond with.
+ code: The numeric HTTP status code to use.
+ """
+
+ output = json.dumps(float_wrapper.WrapSpecialFloats(obj))
+
+ self.send_response(code)
+ self.send_header('Content-Type', 'application/json')
+ self.send_header('Content-Length', len(output))
+ self.end_headers()
+ self.wfile.write(output)
+
+ def _send_csv_response(self, serialized_csv, code=200):
+ """Writes out the given string, which represents CSV data.
+
+ Unlike _send_json_response, this does *not* perform the CSV serialization
+ for you. It only sets the proper headers.
+
+ Args:
+ serialized_csv: A string containing some CSV data.
+ code: The numeric HTTP status code to use.
+ """
+
+ self.send_response(code)
+ self.send_header('Content-Type', 'text/csv')
+ self.send_header('Content-Length', len(serialized_csv))
+ self.end_headers()
+ self.wfile.write(serialized_csv)
+
+ def _serve_scalars(self, query_params):
+ """Given a tag and single run, return array of ScalarEvents."""
+ # TODO(cassandrax): return HTTP status code for malformed requests
+ tag = query_params.get('tag')
+ run = query_params.get('run')
+ values = self._multiplexer.Scalars(run, tag)
+
+ if query_params.get('format') == _OutputFormat.CSV:
+ string_io = StringIO.StringIO()
+ writer = csv.writer(string_io)
+ writer.writerow(['Wall time', 'Step', 'Value'])
+ writer.writerows(values)
+ self._send_csv_response(string_io.getvalue())
+ else:
+ self._send_json_response(values)
+
+ def _serve_graph(self, query_params):
+ """Given a single run, return the graph definition in json format."""
+ run = query_params.get('run', None)
+ if run is None:
+ self.send_error(400, 'query parameter "run" is required')
+ return
+
+ try:
+ graph = self._multiplexer.Graph(run)
+ except ValueError:
+ self.send_response(404)
+ return
+
+ # Serialize the graph to pbtxt format.
+ graph_pbtxt = text_format.MessageToString(graph)
+ # Gzip it and send it to the user.
+ self._send_gzip_response(graph_pbtxt, 'text/plain')
+
+ def _serve_histograms(self, query_params):
+ """Given a tag and single run, return an array of histogram values."""
+ tag = query_params.get('tag')
+ run = query_params.get('run')
+ values = self._multiplexer.Histograms(run, tag)
+ self._send_json_response(values)
+
+ def _serve_compressed_histograms(self, query_params):
+ """Given a tag and single run, return an array of compressed histograms."""
+ tag = query_params.get('tag')
+ run = query_params.get('run')
+ compressed_histograms = self._multiplexer.CompressedHistograms(run, tag)
+ if query_params.get('format') == _OutputFormat.CSV:
+ string_io = StringIO.StringIO()
+ writer = csv.writer(string_io)
+
+ # Build the headers; we have two columns for timing and two columns for
+ # each compressed histogram bucket.
+ headers = ['Wall time', 'Step']
+ if compressed_histograms:
+ bucket_count = len(compressed_histograms[0].compressed_histogram_values)
+ for i in xrange(bucket_count):
+ headers += ['Edge %d basis points' % i, 'Edge %d value' % i]
+ writer.writerow(headers)
+
+ for compressed_histogram in compressed_histograms:
+ row = [compressed_histogram.wall_time, compressed_histogram.step]
+ for value in compressed_histogram.compressed_histogram_values:
+ row += [value.rank_in_bps, value.value]
+ writer.writerow(row)
+ self._send_csv_response(string_io.getvalue())
+ else:
+ self._send_json_response(compressed_histograms)
+
+ def _serve_images(self, query_params):
+ """Given a tag and list of runs, serve a list of images.
+
+ Note that the images themselves are not sent; instead, we respond with URLs
+ to the images. The frontend should treat these URLs as opaque and should not
+ try to parse information about them or generate them itself, as the format
+ may change.
+
+ Args:
+ query_params: The query parameters as a dict.
+ """
+ tag = query_params.get('tag')
+ run = query_params.get('run')
+
+ images = self._multiplexer.Images(run, tag)
+ response = self._image_response_for_run(images, run, tag)
+ self._send_json_response(response)
+
+ def _serve_image(self, query_params):
+ """Serves an individual image."""
+ tag = query_params.get('tag')
+ run = query_params.get('run')
+ index = int(query_params.get('index'))
+ image = self._multiplexer.Images(run, tag)[index]
+ encoded_image_string = image.encoded_image_string
+ content_type = _content_type_for_image(encoded_image_string)
+
+ self.send_response(200)
+ self.send_header('Content-Type', content_type)
+ self.send_header('Content-Length', len(encoded_image_string))
+ self.end_headers()
+ self.wfile.write(encoded_image_string)
+
+ def _query_for_individual_image(self, run, tag, index):
+ """Builds a URL for accessing the specified image.
+
+ This should be kept in sync with _serve_image. Note that the URL is *not*
+ guaranteed to always return the same image, since images may be unloaded
+ from the reservoir as new images come in.
+
+ Args:
+ run: The name of the run.
+ tag: The tag.
+ index: The index of the image. Negative values are OK.
+
+ Returns:
+ A string representation of a URL that will load the index-th
+ sampled image in the given run with the given tag.
+ """
+ query_string = urllib.urlencode({
+ 'run': run,
+ 'tag': tag,
+ 'index': index
+ })
+ return query_string
+
+ def _serve_runs(self, unused_query_params):
+ """Return a JSON object about runs and tags.
+
+ Returns a mapping from runs to tagType to list of tags for that run.
+
+ Returns:
+ {runName: {images: [tag1, tag2, tag3],
+ scalars: [tagA, tagB, tagC],
+ histograms: [tagX, tagY, tagZ]}}
+ """
+ self._send_json_response(self._multiplexer.Runs())
+
+ def _serve_index(self, unused_query_params):
+ """Serves the index page (i.e., the tensorboard app itself)."""
+ self._serve_static_file('/dist/index.html')
+
+ def _serve_static_file(self, path):
+ """Serves the static file located at the given path.
+
+ Args:
+ path: The path of the static file, relative to the tensorboard/ directory.
+ """
+ # Strip off the leading forward slash.
+ path = path.lstrip('/')
+ if not self._path_is_safe(path):
+ logging.info('path %s not safe, sending 404' % path)
+ # Traversal attack, so 404.
+ self.send_error(404)
+ return
+
+ if path.startswith('external'):
+ path = os.path.join('../', path)
+ else:
+ path = os.path.join('tensorboard', path)
+ # Open the file and read it.
+ try:
+ contents = resource_loader.load_resource(path)
+ except IOError:
+ logging.info('path %s not found, sending 404' % path)
+ self.send_error(404)
+ return
+
+ self.send_response(200)
+
+ mimetype = mimetypes.guess_type(path)[0] or 'application/octet-stream'
+ self.send_header('Content-Type', mimetype)
+ self.end_headers()
+ self.wfile.write(contents)
+
+ def do_GET(self): # pylint: disable=invalid-name
+ """Handler for all get requests."""
+ parsed_url = urlparse.urlparse(self.path)
+
+ # Remove a trailing slash, if present.
+ clean_path = parsed_url.path
+ if clean_path.endswith('/'):
+ clean_path = clean_path[:-1]
+
+ handlers = {
+ SCALARS_ROUTE: self._serve_scalars,
+ GRAPH_ROUTE: self._serve_graph,
+ HISTOGRAMS_ROUTE: self._serve_histograms,
+ COMPRESSED_HISTOGRAMS_ROUTE: self._serve_compressed_histograms,
+ IMAGES_ROUTE: self._serve_images,
+ INDIVIDUAL_IMAGE_ROUTE: self._serve_image,
+ RUNS_ROUTE: self._serve_runs,
+ '': self._serve_index
+ }
+
+ if clean_path in handlers:
+ query_params = urlparse.parse_qs(parsed_url.query)
+ # parse_qs returns a list of values for each key; we're only interested in
+ # the first.
+ for key in query_params:
+ value_count = len(query_params[key])
+ if value_count != 1:
+ self.send_error(
+ 400,
+ 'query parameter %s should have exactly one value, had %d' %
+ (key, value_count))
+ return
+
+ query_params[key] = query_params[key][0]
+ handlers[clean_path](query_params)
+ else:
+ self._serve_static_file(clean_path)
diff --git a/tensorflow/tensorboard/tests.html b/tensorflow/tensorboard/tests.html
new file mode 100644
index 0000000000..31773f705c
--- /dev/null
+++ b/tensorflow/tensorboard/tests.html
@@ -0,0 +1,31 @@
+<!DOCTYPE html>
+<html>
+ <head>
+ <title>Mocha</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+ <link rel="stylesheet" href="node_modules/mocha/mocha.css" />
+ </head>
+ <body>
+ <div id="mocha"></div>
+ <script src="node_modules/chai/chai.js"></script>
+ <script src="node_modules/mocha/mocha.js"></script>
+ <script>mocha.setup('bdd')</script>
+ <script>Polymer = function() {}
+ // hack hack - can't get polymer to run in phantomjs, so mock it out
+ </script>
+ <script src="bower_components/d3/d3.js"></script>
+ <script src="bower_components/svg-typewriter/svgtypewriter.js"></script>
+ <script src="bower_components/plottable/plottable.js"></script>
+ <script src="build/components.js"></script>
+ <script src="build/test.js"></script>
+ <script>
+ if (window.mochaPhantomJS) {
+ mochaPhantomJS.run();
+ } else {
+ mocha.run();
+ }
+ </script>
+ </body>
+</html>
+
diff --git a/tensorflow/tensorboard/tfgraph-demo-index.html b/tensorflow/tensorboard/tfgraph-demo-index.html
new file mode 100644
index 0000000000..84b7aaa94c
--- /dev/null
+++ b/tensorflow/tensorboard/tfgraph-demo-index.html
@@ -0,0 +1,38 @@
+<!doctype html>
+<!--
+@license
+Copyright (c) 2015 The Polymer Project Authors. All rights reserved.
+This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
+The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
+The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
+Code distributed by Google as part of the polymer project is also
+subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
+-->
+<html>
+ <head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, minimum-scale=1.0, initial-scale=1.0, user-scalable=yes">
+ <title>tf-graph Demo</title>
+ <!-- Libraries that should be imported in TensorBoard when the Graph visualizer ports to TensorBoard -->
+ <script src="bower_components/webcomponentsjs/webcomponents-lite.min.js"></script>
+ <script src="bower_components/es6-promise/promise.min.js"></script>
+ <link rel="import" href="components/tf-graph/demo/tf-graph-demo.html">
+ <style>
+ html {
+ width: 100%;
+ height: 100%;
+ }
+
+ body {
+ margin: 0;
+ padding: 0;
+ width: 100%;
+ height: 100%;
+ }
+ </style>
+ </head>
+
+ <body unresolved>
+ <tf-graph-demo></tf-graph-demo>
+ </body>
+</html>
diff --git a/tensorflow/tensorboard/tsconfig.json b/tensorflow/tensorboard/tsconfig.json
new file mode 100644
index 0000000000..ea9d69237c
--- /dev/null
+++ b/tensorflow/tensorboard/tsconfig.json
@@ -0,0 +1,8 @@
+{
+ "compilerOptions": {
+ "noImplicitAny": false,
+ "noEmitOnError": true,
+ "compileOnSave": false,
+ "target": "ES5"
+ }
+}
diff --git a/tensorflow/tensorboard/tsd.json b/tensorflow/tensorboard/tsd.json
new file mode 100644
index 0000000000..de25bb111c
--- /dev/null
+++ b/tensorflow/tensorboard/tsd.json
@@ -0,0 +1,30 @@
+{
+ "version": "v4",
+ "repo": "borisyankov/DefinitelyTyped",
+ "ref": "master",
+ "path": "typings",
+ "bundle": "typings/tsd.d.ts",
+ "installed": {
+ "chai/chai-assert.d.ts": {
+ "commit": "16dd1ab76fb4c65e532ca820dd45c875636521b6"
+ },
+ "d3/d3.d.ts": {
+ "commit": "eb59a40d3c2f3257e34ec2ede181046230814a41"
+ },
+ "mocha/mocha.d.ts": {
+ "commit": "484544d14d400190b20f270341c97b16adc0f1ef"
+ },
+ "webcomponents.js/webcomponents.js.d.ts": {
+ "commit": "e9be3cecf8a326d3e220c52b42d218169a7bb9f2"
+ },
+ "lodash/lodash.d.ts": {
+ "commit": "eb835aa72f45eee4246b1de8beeffe2010c689e6"
+ },
+ "polymer/polymer.d.ts": {
+ "commit": "e9be3cecf8a326d3e220c52b42d218169a7bb9f2"
+ },
+ "es6-promise/es6-promise.d.ts": {
+ "commit": "e9be3cecf8a326d3e220c52b42d218169a7bb9f2"
+ }
+ }
+}
diff --git a/tensorflow/tensorboard/tslint.json b/tensorflow/tensorboard/tslint.json
new file mode 100644
index 0000000000..bd1efdbd6f
--- /dev/null
+++ b/tensorflow/tensorboard/tslint.json
@@ -0,0 +1,66 @@
+{
+ "rules": {
+ "class-name": true,
+ "comment-format": [true, "check-space"],
+ "curly": true,
+ "eofline": true,
+ "forin": true,
+ "jsdoc-format": true,
+ "label-position": true,
+ "label-undefined": true,
+ "max-line-length": [true, 140],
+ "member-ordering": [false, "variables-before-functions"],
+ "no-arg": true,
+ "no-bitwise": true,
+ "no-consecutive-blank-lines": true,
+ "no-console": [true,
+ "log",
+ "debug",
+ "info",
+ "time",
+ "timeEnd",
+ "trace",
+ "warn"
+ ],
+ "no-construct": true,
+ "no-constructor-vars": true,
+ "no-debugger": true,
+ "no-duplicate-key": true,
+ "no-duplicate-variable": true,
+ "no-empty": true,
+ "no-eval": true,
+ "no-trailing-whitespace": true,
+ "no-unreachable": true,
+ "no-unused-expression": true,
+ "no-unused-variable": false,
+ "no-use-before-declare": true,
+ "one-line": [true,
+ "check-catch",
+ "check-else",
+ "check-open-brace",
+ "check-whitespace"
+ ],
+ "quotemark": [true,
+ "double"
+ ],
+ "radix": true,
+ "semicolon": true,
+ "triple-equals": [true,
+ "allow-null-check"
+ ],
+ "typedef-whitespace": [true, {
+ "call-signature": "nospace",
+ "index-signature": "nospace",
+ "parameter": "nospace",
+ "property-declaration": "nospace",
+ "variable-declaration": "nospace"
+ }],
+ "whitespace": [true,
+ "check-branch",
+ "check-decl",
+ "check-operator",
+ "check-separator",
+ "check-type"
+ ]
+ }
+}